diff --git a/README.md b/README.md index 736ba3b..667de6e 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ This includes the following artifacts of the SDK (cf. [overview of all artifacts | de.cotech:hwsecurity-piv | 14 | | | de.cotech:hwsecurity-ui | 14 | 19 | | de.cotech:hwsecurity-ssh | 14 | | +| de.cotech:hwsecurity-sshj | 14 | | ## Notice diff --git a/build.gradle b/build.gradle index 25654b8..bcaa38b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,3 @@ -import org.jetbrains.dokka.gradle.DokkaTask - buildscript { repositories { google() @@ -7,27 +5,27 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.0.1' - classpath 'org.jetbrains.dokka:dokka-gradle-plugin:1.4.0' + classpath 'com.android.tools.build:gradle:4.1.2' + classpath 'org.jetbrains.dokka:dokka-gradle-plugin:1.4.20' } } allprojects { repositories { google() - jcenter() maven { url 'https://jitpack.io' } + jcenter() } // custom dokka format - tasks.register("dokkaHugo", DokkaTask) { + tasks.register("dokkaHugo", org.jetbrains.dokka.gradle.DokkaTask) { dependencies { - dokkaHugoPlugin 'com.github.cotechde:dokka-hugo-plugin:d053c16110' + dokkaHugoPlugin 'com.github.cotechde:dokka-hugo-plugin:2.0' } } } ext { compileSdkVersion = 29 - hwSdkVersionName = '4.2.1' + hwSdkVersionName = '4.4.0' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ab53446..4a023b6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jun 24 11:02:11 CEST 2020 +#Tue Mar 16 16:29:03 CET 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip diff --git a/hwsecurity/core/build.gradle b/hwsecurity/core/build.gradle index 70e7a75..e8fa6dd 100644 --- a/hwsecurity/core/build.gradle +++ b/hwsecurity/core/build.gradle @@ -3,16 +3,16 @@ apply plugin: 'maven-publish' apply plugin: 'org.jetbrains.dokka' dependencies { - implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0' + implementation 'androidx.lifecycle:lifecycle-runtime:2.3.0' compileOnly 'androidx.annotation:annotation:1.1.0' compileOnly 'io.sentry:sentry-android:2.3.1' - api 'com.google.auto.value:auto-value-annotations:1.6.2' + api 'com.google.auto.value:auto-value-annotations:1.6.5' annotationProcessor 'com.google.auto.value:auto-value:1.6.2' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13' testImplementation 'org.robolectric:robolectric:3.8' testImplementation 'org.mockito:mockito-core:2.18.0' } @@ -90,24 +90,22 @@ afterEvaluate { } dokkaHugo { - configure { - outputDirectory.set(file("$projectDir/../../hwsecurity.dev/content/reference")) + outputDirectory.set(file("$projectDir/../../hwsecurity.dev/content/reference")) - dokkaSourceSets { - register("java") { - moduleDisplayName.set("hwsecurity") + moduleName.set("hwsecurity") - sourceRoots.setFrom(file("src/main/java")) + dokkaSourceSets { + register("java") { + sourceRoots.setFrom(file("src/main/java")) - jdkVersion.set(8) // Used for linking to JDK documentation - noStdlibLink.set(false) // Disable linking to online kotlin-stdlib documentation - noJdkLink.set(true) // Disable linking to online JDK documentation - noAndroidSdkLink.set(false) // Disable linking to online Android documentation + jdkVersion.set(8) // Used for linking to JDK documentation + noStdlibLink.set(false) // Disable linking to online kotlin-stdlib documentation + noJdkLink.set(true) // Disable linking to online JDK documentation + noAndroidSdkLink.set(false) // Disable linking to online Android documentation - perPackageOption { - prefix.set("de.cotech.hw.internal") - suppress.set(true) - } + perPackageOption { + matchingRegex.set(".*\\.internal.*") // will match all .internal packages and sub-packages + suppress.set(true) } } } diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKey.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKey.java index 0b8e060..cf2474a 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKey.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKey.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyAuthenticator.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyAuthenticator.java index 87f4dda..d95d16d 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyAuthenticator.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyAuthenticator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyCallback.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyCallback.java index ac2f909..3a30478 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyCallback.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyConnectionMode.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyConnectionMode.java index 348e7be..9aecc7b 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyConnectionMode.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyConnectionMode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyException.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyException.java index b354194..3ff8ebd 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyException.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManager.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManager.java index baba9c9..2feb51f 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManager.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManager.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -511,7 +511,6 @@ public void rediscoverConnectedSecurityKeys() { * This method is not part of the public API. */ @AnyThread - @RestrictTo(Scope.LIBRARY_GROUP) public void clearConnectedSecurityKeys() { nfcTagManager.clearManagedNfcTags(); usbDeviceManager.clearManagedUsbDevices(); diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManagerConfig.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManagerConfig.java index b760113..188fe55 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManagerConfig.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyManagerConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -159,26 +159,25 @@ public Builder setSentryCaptureExceptionOnInternalError(boolean isSentryCaptureE * (by default Android’s Log class is used), a custom logging tree can be used. * Setting your own logging tree overrides setEnableDebugLogging(true). *
- * .setLoggingTree(new HwTimber.DebugTree() { - * protected String createStackElementTag(@NonNull StackTraceElement element) { - * if (element.getClassName().startsWith("de.cotech.hw")) { - * return super.createStackElementTag(element); - * } else { - * return null; + * private static class CrashReportingTree extends HwTimber.Tree { + * @Override protected void log(int priority, String tag, @NonNull String message, Throwable t) { + * if (priority == Log.VERBOSE || priority == Log.DEBUG) { + * return; * } - * } * - * protected boolean isLoggable(String tag, int priority) { - * if (tag == null) { - * return false; - * } - * // TODO: filter based on priority - * } + * FakeCrashLibrary.log(priority, tag, message); * - * protected void log(int priority, String tag, @NonNull String message, Throwable t) { - * // TODO: delegate log output to your own logging framework + * if (t != null) { + * if (priority == Log.ERROR) { + * FakeCrashLibrary.logError(t); + * } else if (priority == Log.WARN) { + * FakeCrashLibrary.logWarning(t); + * } + * } * } - * }); + * } + * new SecurityKeyManagerConfig.Builder() + * .setLoggingTree(CrashReportingTree.class) **
* This tree overrides {@link SecurityKeyManagerConfig.Builder#setEnableDebugLogging(boolean)}.
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyTlsClientCertificateAuthenticator.java b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyTlsClientCertificateAuthenticator.java
index 4b26791..99047ee 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyTlsClientCertificateAuthenticator.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/SecurityKeyTlsClientCertificateAuthenticator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
@@ -41,7 +41,6 @@
import javax.net.ssl.X509ExtendedKeyManager;
-@RestrictTo(Scope.LIBRARY_GROUP)
public class SecurityKeyTlsClientCertificateAuthenticator {
private final X509Certificate clientCertificate;
private final PrivateKey privateKey;
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AppletFileNotFoundException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AppletFileNotFoundException.java
index d6545ca..70e7c20 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AppletFileNotFoundException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AppletFileNotFoundException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AuthenticationMethodBlockedException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AuthenticationMethodBlockedException.java
index bd6e812..8fabf83 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AuthenticationMethodBlockedException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/AuthenticationMethodBlockedException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ClaNotSupportedException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ClaNotSupportedException.java
index 7ee4053..c6e8da7 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ClaNotSupportedException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ClaNotSupportedException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ConditionsNotSatisfiedException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ConditionsNotSatisfiedException.java
index c644b67..b65a825 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ConditionsNotSatisfiedException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/ConditionsNotSatisfiedException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/DataInvalidException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/DataInvalidException.java
index 20dfd69..6af6ed7 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/DataInvalidException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/DataInvalidException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/FileInTerminationStateException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/FileInTerminationStateException.java
index 0945aa4..cdc0ed2 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/FileInTerminationStateException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/FileInTerminationStateException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/InsNotSupportedException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/InsNotSupportedException.java
index 111a265..cff9f73 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/InsNotSupportedException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/InsNotSupportedException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityKeyDisconnectedException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityKeyDisconnectedException.java
index 8fd1f33..d1f026d 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityKeyDisconnectedException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityKeyDisconnectedException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityStatusNotSatisfiedException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityStatusNotSatisfiedException.java
index 5982e0c..52605f9 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityStatusNotSatisfiedException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SecurityStatusNotSatisfiedException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SelectAppletException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SelectAppletException.java
index d438365..360c521 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SelectAppletException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/SelectAppletException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongDataException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongDataException.java
index e82b704..7ef479f 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongDataException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongDataException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongRequestLengthException.java b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongRequestLengthException.java
index 6660175..386769d 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongRequestLengthException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/exceptions/WrongRequestLengthException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/NfcIntentDispatchActivity.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/NfcIntentDispatchActivity.java
index 2b0db0b..ff1f11d 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/NfcIntentDispatchActivity.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/NfcIntentDispatchActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/UsbIntentDispatchActivity.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/UsbIntentDispatchActivity.java
index b96720c..8ffe825 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/UsbIntentDispatchActivity.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/dispatch/UsbIntentDispatchActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApdu.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApdu.java
index 114da62..98acb7b 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApdu.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApdu.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApduDescriber.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApduDescriber.java
index b7ff3b1..84e89a9 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApduDescriber.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/CommandApduDescriber.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/Iso7816TLV.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/Iso7816TLV.java
index d209bca..831434e 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/Iso7816TLV.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/Iso7816TLV.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/ResponseApdu.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/ResponseApdu.java
index 1ef6019..df89588 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/ResponseApdu.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/iso7816/ResponseApdu.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/SecurityKeyInfo.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/SecurityKeyInfo.java
index e51d14e..44a3cd9 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/SecurityKeyInfo.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/SecurityKeyInfo.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Transport.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Transport.java
index 60f3476..54e201e 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Transport.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Transport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Version.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Version.java
index 9348c2a..ddd90fb 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Version.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/Version.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcConnectionDispatcher.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcConnectionDispatcher.java
index 971e5ab..8cdca1a 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcConnectionDispatcher.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcConnectionDispatcher.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTagManager.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTagManager.java
index ad39d11..19774c0 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTagManager.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTagManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTransport.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTransport.java
index ee252a5..3bd2b17 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTransport.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/nfc/NfcTransport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UnsupportedUsbSecurityKeyException.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UnsupportedUsbSecurityKeyException.java
index 697294c..65a9256 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UnsupportedUsbSecurityKeyException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UnsupportedUsbSecurityKeyException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbConnectionDispatcher.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbConnectionDispatcher.java
index 64ad356..d5bf396 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbConnectionDispatcher.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbConnectionDispatcher.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbDeviceManager.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbDeviceManager.java
index 4e7bb89..cb5e7f4 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbDeviceManager.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbDeviceManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbSecurityKeyTypes.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbSecurityKeyTypes.java
index 0af69a2..e748a17 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbSecurityKeyTypes.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbSecurityKeyTypes.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbTransportException.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbTransportException.java
index ba8f807..948f39f 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbTransportException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbTransportException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbUtils.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbUtils.java
index 6928071..55dbcaa 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbUtils.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/UsbUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidDescriptor.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidDescriptor.java
index cb85415..5fb6e48 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidDescriptor.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidDescriptor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiver.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiver.java
index 2b87f62..1645ec2 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiver.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiver.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransportProtocol.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransportProtocol.java
index 36e4b15..a5c30f3 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransportProtocol.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransportProtocol.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidErrorException.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidErrorException.java
index 7969239..d552d37 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidErrorException.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidErrorException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidTransport.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidTransport.java
index 88c7763..1a567c3 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidTransport.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/UsbCcidTransport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/Block.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/Block.java
index fbd8aa5..8cd13b7 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/Block.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/Block.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/BlockChecksumAlgorithm.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/BlockChecksumAlgorithm.java
index 4dd250e..27016a5 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/BlockChecksumAlgorithm.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/BlockChecksumAlgorithm.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/IBlock.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/IBlock.java
index 32eba22..baca995 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/IBlock.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/IBlock.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/RBlock.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/RBlock.java
index 7019000..8fe706f 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/RBlock.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/RBlock.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/SBlock.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/SBlock.java
index e358daf..11579f2 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/SBlock.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/SBlock.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T0ShortApduProtocol.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T0ShortApduProtocol.java
index c7030ac..63e5d0f 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T0ShortApduProtocol.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T0ShortApduProtocol.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1ShortApduProtocol.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1ShortApduProtocol.java
index 24b24e7..d844d0a 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1ShortApduProtocol.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1ShortApduProtocol.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduBlockFactory.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduBlockFactory.java
index 6aee348..e536e25 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduBlockFactory.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduBlockFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduProtocol.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduProtocol.java
index d3c0308..205a46c 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduProtocol.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ccid/tpdu/T1TpduProtocol.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactory.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactory.java
index 492808a..06ab34f 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactory.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidInitStructFactory.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidInitStructFactory.java
index 9e8e07a..6120fce 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidInitStructFactory.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidInitStructFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocol.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocol.java
index f8aa5d9..a6f7a87 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocol.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocol.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/UsbCtapHidTransport.java b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/UsbCtapHidTransport.java
index 4940d71..5f32307 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/UsbCtapHidTransport.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/internal/transport/usb/ctaphid/UsbCtapHidTransport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKey.java b/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKey.java
index 44ec121..1f9d535 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKey.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKey.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKeyConnectionMode.java b/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKeyConnectionMode.java
index c116fc8..3118aa1 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKeyConnectionMode.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/raw/RawSecurityKeyConnectionMode.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/AndroidPreferenceSimplePinProvider.java b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/AndroidPreferenceSimplePinProvider.java
index 4aebf2a..ac7b325 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/AndroidPreferenceSimplePinProvider.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/AndroidPreferenceSimplePinProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecret.java b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecret.java
index 9b44626..0b659f4 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecret.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecret.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecretGenerator.java b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecretGenerator.java
index ad926dc..952a08d 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecretGenerator.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/ByteSecretGenerator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/PinProvider.java b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/PinProvider.java
index d95eb20..4f1caf2 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/PinProvider.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/PinProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/StaticPinProvider.java b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/StaticPinProvider.java
index eeb2081..48ef31c 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/secrets/StaticPinProvider.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/secrets/StaticPinProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/util/HashUtil.java b/hwsecurity/core/src/main/java/de/cotech/hw/util/HashUtil.java
index 8c81ae2..8e8993d 100644
--- a/hwsecurity/core/src/main/java/de/cotech/hw/util/HashUtil.java
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/util/HashUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/util/Hwsecurity25519PublicKey.java b/hwsecurity/core/src/main/java/de/cotech/hw/util/Hwsecurity25519PublicKey.java
new file mode 100644
index 0000000..488ca42
--- /dev/null
+++ b/hwsecurity/core/src/main/java/de/cotech/hw/util/Hwsecurity25519PublicKey.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
+ *
+ * You can purchase a commercial license at https://hwsecurity.dev.
+ * Buying such a license is mandatory as soon as you develop commercial
+ * activities involving this program without disclosing the source code
+ * of your own applications.
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * Hwsecurity25519PublicKey can be converted to Bouncy Castle PublicKeys using + * Bouncy25519KeyConverter from hwsecurity-openpgp artifact. + */ +public class Hwsecurity25519PublicKey implements PublicKey { + private byte[] rawPublicKey; + private String algorithm; + + /** + * @param rawPublicKey bytes of the compressed point + * @param algorithm either "Ed25519" or "X25519" + */ + public Hwsecurity25519PublicKey(byte[] rawPublicKey, String algorithm) { + this.rawPublicKey = rawPublicKey; + this.algorithm = algorithm; + } + + @Override + public String getAlgorithm() { + return algorithm; + } + + @Override + public String getFormat() { + return "hwsecurity"; + } + + @Override + public byte[] getEncoded() { + return rawPublicKey; + } +} diff --git a/hwsecurity/core/src/main/java/de/cotech/hw/util/NfcStatusObserver.java b/hwsecurity/core/src/main/java/de/cotech/hw/util/NfcStatusObserver.java index 8bd6f93..9f14084 100644 --- a/hwsecurity/core/src/main/java/de/cotech/hw/util/NfcStatusObserver.java +++ b/hwsecurity/core/src/main/java/de/cotech/hw/util/NfcStatusObserver.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -41,19 +41,19 @@ import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.OnLifecycleEvent; + import de.cotech.hw.SecurityKeyManager; /** * A helper class to monitor whether NFC hardware is available and enabled. - * *
+ * * Note that this class does not communicate with the NFC device on its own - its only purpose is to tell when NFC * functionality is available, and has been enabled or disabled! - * *
+ * * Example: - *
*
* public class NfcActionActivity extends AppCompatActivity { * private NfcStatusObserver nfcStatusObserver; @@ -88,7 +88,6 @@ * } * } *- * */ public class NfcStatusObserver implements LifecycleObserver { private final Context context; diff --git a/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiverTest.java b/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiverTest.java index ce9e21a..7ddf587 100644 --- a/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiverTest.java +++ b/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ccid/CcidTransceiverTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactoryTest.java b/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactoryTest.java index 5fb0193..0f47618 100644 --- a/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactoryTest.java +++ b/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidFrameFactoryTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocolTest.java b/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocolTest.java index 157c6e5..32e07e7 100644 --- a/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocolTest.java +++ b/hwsecurity/core/src/test/java/de/cotech/hw/internal/transport/usb/ctaphid/CtapHidTransportProtocolTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/core/src/test/java/de/cotech/hw/secrets/ByteSecretTest.java b/hwsecurity/core/src/test/java/de/cotech/hw/secrets/ByteSecretTest.java index dd50e5d..9ec15e3 100644 --- a/hwsecurity/core/src/test/java/de/cotech/hw/secrets/ByteSecretTest.java +++ b/hwsecurity/core/src/test/java/de/cotech/hw/secrets/ByteSecretTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/build.gradle b/hwsecurity/fido/build.gradle index 0c879b6..8f4cba6 100644 --- a/hwsecurity/fido/build.gradle +++ b/hwsecurity/fido/build.gradle @@ -6,15 +6,15 @@ dependencies { api project(':hwsecurity:core') api project(':hwsecurity:ui') - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'com.google.android.material:material:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - api 'com.google.auto.value:auto-value-annotations:1.6.2' + api 'com.google.auto.value:auto-value-annotations:1.6.5' annotationProcessor 'com.google.auto.value:auto-value:1.6.2' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13' testImplementation 'org.robolectric:robolectric:3.8' testImplementation 'org.mockito:mockito-core:2.18.0' } @@ -93,24 +93,22 @@ afterEvaluate { } dokkaHugo { - configure { - outputDirectory.set(file("$projectDir/../../hwsecurity.dev/content/reference")) + outputDirectory.set(file("$projectDir/../../hwsecurity.dev/content/reference")) - dokkaSourceSets { - register("java") { - moduleDisplayName.set("hwsecurity-fido") + moduleName.set("hwsecurity-fido") - sourceRoots.setFrom(file("src/main/java")) + dokkaSourceSets { + register("java") { + sourceRoots.setFrom(file("src/main/java")) - jdkVersion.set(8) // Used for linking to JDK documentation - noStdlibLink.set(false) // Disable linking to online kotlin-stdlib documentation - noJdkLink.set(true) // Disable linking to online JDK documentation - noAndroidSdkLink.set(false) // Disable linking to online Android documentation + jdkVersion.set(8) // Used for linking to JDK documentation + noStdlibLink.set(false) // Disable linking to online kotlin-stdlib documentation + noJdkLink.set(true) // Disable linking to online JDK documentation + noAndroidSdkLink.set(false) // Disable linking to online Android documentation - perPackageOption { - prefix.set("de.cotech.hw.fido.internal") - suppress.set(true) - } + perPackageOption { + matchingRegex.set(".*\\.internal.*") // will match all .internal packages and sub-packages + suppress.set(true) } } } diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateCallback.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateCallback.java index 95f492e..3d5c8e5 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateCallback.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateRequest.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateRequest.java index 5eb4ec4..1c97900 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateRequest.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateResponse.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateResponse.java index d8defa2..d79313c 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateResponse.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoAuthenticateResponse.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoFacetIdUtil.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoFacetIdUtil.java index d8b9cc8..b5c39e3 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoFacetIdUtil.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoFacetIdUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterCallback.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterCallback.java index fec3cf7..a06259e 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterCallback.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterRequest.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterRequest.java index 06b3c41..177d05a 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterRequest.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterResponse.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterResponse.java index 541a2b8..38d1cb6 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterResponse.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoRegisterResponse.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKey.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKey.java index 345f30c..5408f3c 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKey.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKey.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKeyConnectionMode.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKeyConnectionMode.java index 97d2192..acf5549 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKeyConnectionMode.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/FidoSecurityKeyConnectionMode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebViewFidoBridge.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebViewFidoBridge.java index 46fc169..944a4c8 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebViewFidoBridge.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebViewFidoBridge.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -258,9 +258,11 @@ private void showRegisterFragment(RequestData requestData, String appId, String opsBuilder.setTimeoutSeconds(timeoutSeconds); opsBuilder.setTitle(context.getString(R.string.hwsecurity_fido_title_default_register_app_id, getDisplayAppId(appId))); - FidoDialogFragment fidoDialogFragment = FidoDialogFragment.newInstance(registerRequest, opsBuilder.build()); - fidoDialogFragment.setFidoRegisterCallback(fidoRegisterCallback); - fidoDialogFragment.show(fragmentManager); + webView.getHandler().post(() -> { + FidoDialogFragment fidoDialogFragment = FidoDialogFragment.newInstance(registerRequest, opsBuilder.build()); + fidoDialogFragment.setFidoRegisterCallback(fidoRegisterCallback); + fidoDialogFragment.show(fragmentManager); + }); } private OnFidoRegisterCallback fidoRegisterCallback = new OnFidoRegisterCallback() { @@ -321,9 +323,11 @@ private void showSignFragment( opsBuilder.setTimeoutSeconds(timeoutSeconds); opsBuilder.setTitle(context.getString(R.string.hwsecurity_fido_title_default_authenticate_app_id, getDisplayAppId(appId))); - FidoDialogFragment fidoDialogFragment = FidoDialogFragment.newInstance(authenticateRequest, opsBuilder.build()); - fidoDialogFragment.setFidoAuthenticateCallback(fidoAuthenticateCallback); - fidoDialogFragment.show(fragmentManager); + webView.getHandler().post(() -> { + FidoDialogFragment fidoDialogFragment = FidoDialogFragment.newInstance(authenticateRequest, opsBuilder.build()); + fidoDialogFragment.setFidoAuthenticateCallback(fidoAuthenticateCallback); + fidoDialogFragment.show(fragmentManager); + }); } private OnFidoAuthenticateCallback fidoAuthenticateCallback = new OnFidoAuthenticateCallback() { diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebsafeBase64.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebsafeBase64.java index f42b0d7..52c54ba 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebsafeBase64.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/WebsafeBase64.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -30,7 +30,6 @@ import androidx.annotation.RestrictTo.Scope; -@RestrictTo(Scope.LIBRARY_GROUP) public class WebsafeBase64 { /** diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoPresenceRequiredException.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoPresenceRequiredException.java index cd90c07..4f42a05 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoPresenceRequiredException.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoPresenceRequiredException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fDisabledException.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fDisabledException.java index 8477766..3088572 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fDisabledException.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fDisabledException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fNotSupportedException.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fNotSupportedException.java index 5d272ce..61c9349 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fNotSupportedException.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoU2fNotSupportedException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoWrongKeyHandleException.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoWrongKeyHandleException.java index 5a1e993..4b043aa 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoWrongKeyHandleException.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/exceptions/FidoWrongKeyHandleException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoCommandApduDescriber.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoCommandApduDescriber.java index 0b05949..480eb31 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoCommandApduDescriber.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoCommandApduDescriber.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fAppletConnection.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fAppletConnection.java index 43c1030..2b7e714 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fAppletConnection.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fAppletConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fCommandApduFactory.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fCommandApduFactory.java index 4ecf8b5..9794bbf 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fCommandApduFactory.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/FidoU2fCommandApduFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManager.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManager.java index 919f569..92dac69 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManager.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManager.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAuthenticateOperationThread.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAuthenticateOperationThread.java index c8c22ae..21c6c9b 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAuthenticateOperationThread.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoAuthenticateOperationThread.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoOperationThread.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoOperationThread.java index 27b4045..2df4758 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoOperationThread.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoOperationThread.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoRegisterOperationThread.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoRegisterOperationThread.java index 9489ab5..bf456c3 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoRegisterOperationThread.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/async/FidoRegisterOperationThread.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fApiUtils.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fApiUtils.java index 23c96ad..899c5eb 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fApiUtils.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fApiUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fAuthenticateRequest.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fAuthenticateRequest.java index 926bd8a..7c81813 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fAuthenticateRequest.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fAuthenticateRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonParser.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonParser.java index 8309f6b..dc2f840 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonParser.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonParser.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonSerializer.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonSerializer.java index eb94dc5..3edd5a8 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonSerializer.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fJsonSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRegisterRequest.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRegisterRequest.java index c7c3328..87f56e7 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRegisterRequest.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRegisterRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRequest.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRequest.java index 5c01a58..6b4bb14 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRequest.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fResponse.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fResponse.java index 5cce78c..d7b1832 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fResponse.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/jsapi/U2fResponse.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/AuthenticateOp.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/AuthenticateOp.java index e86f704..253a0ab 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/AuthenticateOp.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/AuthenticateOp.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/RegisterOp.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/RegisterOp.java index ef56733..1009ea3 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/RegisterOp.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/operations/RegisterOp.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AndroidUtils.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AndroidUtils.java index dfe6f0d..83ca452 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AndroidUtils.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AndroidUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AnimatedVectorDrawableHelper.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AnimatedVectorDrawableHelper.java index e51fd3e..f7e13a3 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AnimatedVectorDrawableHelper.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/internal/utils/AnimatedVectorDrawableHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogFragment.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogFragment.java index bfb9282..2cd8406 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogFragment.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogFragment.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogOptions.java b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogOptions.java index bb91c4e..ef6035e 100644 --- a/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogOptions.java +++ b/hwsecurity/fido/src/main/java/de/cotech/hw/fido/ui/FidoDialogOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/FidoSecurityKeyTest.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/FidoSecurityKeyTest.java index 304d8d6..ef89a73 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/FidoSecurityKeyTest.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/FidoSecurityKeyTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FakeU2fFidoAppletConnection.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FakeU2fFidoAppletConnection.java index 503f850..19569c1 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FakeU2fFidoAppletConnection.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FakeU2fFidoAppletConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FidoU2fAppletConnectionTest.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FidoU2fAppletConnectionTest.java index 9c5f38a..3e2f9f0 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FidoU2fAppletConnectionTest.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/FidoU2fAppletConnectionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerTest.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerTest.java index 5fd8155..3059780 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerTest.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerUtil.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerUtil.java index 3a39a96..c1f3518 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerUtil.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoAsyncOperationManagerUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoOperationThreadTest.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoOperationThreadTest.java index 5cc9796..fe95b0b 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoOperationThreadTest.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/FidoOperationThreadTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/TestFidoOperationThread.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/TestFidoOperationThread.java index c9183a3..8610fb1 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/TestFidoOperationThread.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/async/TestFidoOperationThread.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/AuthenticateOpTest.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/AuthenticateOpTest.java index 2c929aa..b6c2119 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/AuthenticateOpTest.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/AuthenticateOpTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/RegisterOpTest.java b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/RegisterOpTest.java index 8edd5fc..94e4639 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/RegisterOpTest.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/fido/internal/operations/RegisterOpTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/internal/iso7816/ResponseApduUtils.java b/hwsecurity/fido/src/test/java/de/cotech/hw/internal/iso7816/ResponseApduUtils.java index 081c6b1..82a064b 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/internal/iso7816/ResponseApduUtils.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/internal/iso7816/ResponseApduUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido/src/test/java/de/cotech/hw/internal/transport/FakeTransport.java b/hwsecurity/fido/src/test/java/de/cotech/hw/internal/transport/FakeTransport.java index 7db1fe5..b746e97 100644 --- a/hwsecurity/fido/src/test/java/de/cotech/hw/internal/transport/FakeTransport.java +++ b/hwsecurity/fido/src/test/java/de/cotech/hw/internal/transport/FakeTransport.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/build.gradle b/hwsecurity/fido2/build.gradle index cf20bbf..a72b8ad 100644 --- a/hwsecurity/fido2/build.gradle +++ b/hwsecurity/fido2/build.gradle @@ -6,15 +6,15 @@ dependencies { api project(':hwsecurity:core') api project(':hwsecurity:ui') - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'com.google.android.material:material:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - api 'com.google.auto.value:auto-value-annotations:1.6.2' + api 'com.google.auto.value:auto-value-annotations:1.6.5' annotationProcessor 'com.google.auto.value:auto-value:1.6.2' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13' testImplementation 'org.robolectric:robolectric:3.8' testImplementation 'org.mockito:mockito-core:2.18.0' } @@ -93,24 +93,22 @@ afterEvaluate { } dokkaHugo { - configure { - outputDirectory.set(file("$projectDir/../../hwsecurity.dev/content/reference")) + outputDirectory.set(file("$projectDir/../../hwsecurity.dev/content/reference")) - dokkaSourceSets { - register("java") { - moduleDisplayName.set("hwsecurity-fido2") + moduleName.set("hwsecurity-fido2") - sourceRoots.setFrom(file("src/main/java")) + dokkaSourceSets { + register("java") { + sourceRoots.setFrom(file("src/main/java")) - jdkVersion.set(8) // Used for linking to JDK documentation - noStdlibLink.set(false) // Disable linking to online kotlin-stdlib documentation - noJdkLink.set(true) // Disable linking to online JDK documentation - noAndroidSdkLink.set(false) // Disable linking to online Android documentation + jdkVersion.set(8) // Used for linking to JDK documentation + noStdlibLink.set(false) // Disable linking to online kotlin-stdlib documentation + noJdkLink.set(true) // Disable linking to online JDK documentation + noAndroidSdkLink.set(false) // Disable linking to online Android documentation - perPackageOption { - prefix.set("de.cotech.hw.fido2.internal") - suppress.set(true) - } + perPackageOption { + matchingRegex.set(".*\\.internal.*") // will match all .internal packages and sub-packages + suppress.set(true) } } } diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Credential.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Credential.java index d7d1596..da4c0ac 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Credential.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Credential.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Ctap2Callback.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Ctap2Callback.java index fbc20b9..2297206 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Ctap2Callback.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Ctap2Callback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKey.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKey.java index be7cbb3..5e4a9ed 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKey.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKey.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionMode.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionMode.java index bf41dd5..7d3190a 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionMode.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionMode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionModeConfig.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionModeConfig.java index 6543060..ce50730 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionModeConfig.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/Fido2SecurityKeyConnectionModeConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredential.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredential.java index 6141fed..6c49622 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredential.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredential.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -33,6 +33,7 @@ @AutoValue public abstract class PublicKeyCredential extends Credential implements WebauthnResponse { + @SuppressWarnings("mutable") public abstract byte[] rawId(); public abstract AuthenticatorResponse response(); diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialCreate.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialCreate.java index 2db17fc..41cf4ba 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialCreate.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialCreate.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialGet.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialGet.java index 83fdd07..1e57206 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialGet.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/PublicKeyCredentialGet.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebViewWebauthnBridge.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebViewWebauthnBridge.java index 367595e..3324ddf 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebViewWebauthnBridge.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebViewWebauthnBridge.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -37,12 +37,14 @@ import android.net.Uri; import android.os.Build.VERSION_CODES; import android.os.Handler; +import android.os.Looper; import android.webkit.JavascriptInterface; import android.webkit.WebResourceRequest; import android.webkit.WebView; import androidx.annotation.Keep; import androidx.annotation.NonNull; +import androidx.annotation.UiThread; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; @@ -269,10 +271,12 @@ public void onGetAssertionTimeout() { optionsBuilder.setTimeoutMs(options.timeout()); optionsBuilder.setTitle(context.getString(R.string.hwsecurity_fido_title_default_authenticate_app_id, getDisplayOrigin(currentOrigin))); - WebauthnDialogFragment webauthnDialogFragment = WebauthnDialogFragment.newInstance( - credentialGetCommand, optionsBuilder.build()); - webauthnDialogFragment.setOnGetAssertionCallback(onGetCredentialCallback); - webauthnDialogFragment.show(fragmentManager); + webView.getHandler().post(() -> { + WebauthnDialogFragment webauthnDialogFragment = WebauthnDialogFragment.newInstance( + credentialGetCommand, optionsBuilder.build()); + webauthnDialogFragment.setOnGetAssertionCallback(onGetCredentialCallback); + webauthnDialogFragment.show(fragmentManager); + }); } private void javascriptPublicKeyCredentialStore(String optionsJsonString) { @@ -316,10 +320,12 @@ public void onMakeCredentialTimeout() { optionsBuilder.setTimeoutMs(options.timeout()); optionsBuilder.setTitle(context.getString(R.string.hwsecurity_fido_title_default_register_app_id, getDisplayOrigin(currentOrigin))); - WebauthnDialogFragment webauthnDialogFragment = WebauthnDialogFragment.newInstance( - credentialCreateCommand, optionsBuilder.build()); - webauthnDialogFragment.setOnMakeCredentialCallback(onMakeCredentialCallback); - webauthnDialogFragment.show(fragmentManager); + webView.getHandler().post(() -> { + WebauthnDialogFragment webauthnDialogFragment = WebauthnDialogFragment.newInstance( + credentialCreateCommand, optionsBuilder.build()); + webauthnDialogFragment.setOnMakeCredentialCallback(onMakeCredentialCallback); + webauthnDialogFragment.show(fragmentManager); + }); } private void javascriptPublicKeyCredentialPreventSilentAccess() { diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnCallback.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnCallback.java index 5424bbc..a7d5410 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnCallback.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnJsonCallback.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnJsonCallback.java index a4b39e9..ae9ab7e 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnJsonCallback.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/WebauthnJsonCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorResponse.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorResponse.java index 9e22123..91f45f1 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorResponse.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorResponse.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -26,5 +26,6 @@ public abstract class AuthenticatorResponse { + @SuppressWarnings("mutable") public abstract byte[] clientDataJson(); } diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorTransport.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorTransport.java index f55839c..82f0ddb 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorTransport.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/AuthenticatorTransport.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/CollectedClientData.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/CollectedClientData.java index 1cc4c9e..26463bb 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/CollectedClientData.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/CollectedClientData.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -31,6 +31,7 @@ @AutoValue public abstract class CollectedClientData { public abstract String type(); + @SuppressWarnings("mutable") public abstract byte[] challenge(); public abstract String origin(); public abstract String hashAlgorithm(); diff --git a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/PublicKeyCredentialDescriptor.java b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/PublicKeyCredentialDescriptor.java index bd73a9c..632217e 100644 --- a/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/PublicKeyCredentialDescriptor.java +++ b/hwsecurity/fido2/src/main/java/de/cotech/hw/fido2/domain/PublicKeyCredentialDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2020 Confidential Technologies GmbH + * Copyright (C) 2018-2021 Confidential Technologies GmbH * * You can purchase a commercial license at https://hwsecurity.dev. * Buying such a license is mandatory as soon as you develop commercial @@ -37,6 +37,7 @@ @AutoValue public abstract class PublicKeyCredentialDescriptor implements Parcelable { public abstract PublicKeyCredentialType type(); + @SuppressWarnings("mutable") public abstract byte[] id(); @Nullable public abstract List
+ * We need to calculate them correctly as they are written in the key attributes + * and other implementations may check that they match with the retrieved public key. + *
+ * We don't want to depend on the Bouncy Castle OpenPGP artifact, so we are recreating + * the package format on demand here. + *
+ * For ECDH public keys we assume the KDF parameters SHA256 and AES128.
+ */
+@RestrictTo(Scope.LIBRARY_GROUP)
+public class Rfc4880FingerprintCalculator {
+
+ /**
+ * Calculates OpenPGP v4 fingerprint for RSA
+ */
+ public static byte[] calculateRsaFingerprint(RSAPublicKey publicKey, Date timestamp) {
+ try {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ writeVersionTimeAlgorithm(out, timestamp, PublicKeyAlgorithmTags.RSA_GENERAL);
+ writeRsaAlgorithmSpecificPart(out, publicKey);
+ byte[] encodedOpenPgpKeyBytes = out.toByteArray();
+
+ return calculateFingerprintOrThrow(encodedOpenPgpKeyBytes);
+ } catch (NoSuchAlgorithmException | IOException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ /**
+ * Calculates OpenPGP v4 fingerprint for ECC
+ */
+ public static byte[] calculateEccFingerprint(PublicKey publicKey, EcKeyFormat ecKeyFormat, Date timestamp) {
+ try {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ writeVersionTimeAlgorithm(out, timestamp, ecKeyFormat.algorithmId());
+ writeEccAlgorithmSpecificPart(out, publicKey, ecKeyFormat);
+ byte[] encodedOpenPgpKeyBytes = out.toByteArray();
+
+ return calculateFingerprintOrThrow(encodedOpenPgpKeyBytes);
+ } catch (NoSuchAlgorithmException | IOException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ private static void writeVersionTimeAlgorithm(ByteArrayOutputStream out, Date timestamp, int algorithmId) {
+ // b) version number = 4 (1 octet);
+ // c) timestamp of key creation (4 octets);
+ // d) algorithm (1 octet): 17 = DSA (example);
+ out.write((byte) 4);
+ long time = timestamp.getTime() / 1000;
+ out.write((byte) (time >> 24));
+ out.write((byte) (time >> 16));
+ out.write((byte) (time >> 8));
+ out.write((byte) time);
+ out.write(algorithmId);
+ }
+
+ private static void writeEccAlgorithmSpecificPart(ByteArrayOutputStream out, PublicKey publicKey, EcKeyFormat ecKeyFormat)
+ throws IOException {
+ // e) Algorithm-specific fields.
+
+ switch (ecKeyFormat.algorithmId()) {
+ case PublicKeyAlgorithmTags.ECDH:
+ // * a variable-length field containing a curve OID, formatted as
+ // follows:
+ //
+ // - a one-octet size of the following field; values 0 and 0xFF are
+ // reserved for future extensions,
+ //
+ // - the octets representing a curve OID, defined in Section 9.2;
+ //
+ // * a MPI of an EC point representing a public key;
+ //
+ // * a variable-length field containing KDF parameters, formatted as
+ // follows:
+ //
+ // - a one-octet size of the following fields; values 0 and 0xff are
+ // reserved for future extensions;
+ //
+ // - a one-octet value 1, reserved for future extensions;
+ //
+ // - a one-octet hash function ID used with a KDF;
+ //
+ // - a one-octet algorithm ID for the symmetric algorithm used to
+ // wrap the symmetric key used for the message encryption; see
+ // Section 13.5 for details.
+ //
+ // Observe that an ECDH public key is composed of the same sequence of
+ // fields that define an ECDSA key, plus the KDF parameters field.
+ if (ecKeyFormat.isX25519()) {
+ Hwsecurity25519PublicKey x25519PublicKey = (Hwsecurity25519PublicKey) publicKey;
+ out.write(encodeOid(ecKeyFormat.curveOid()));
+ out.write(encodeBigIntegerAsMpi(encodeCustomCompressedPoint(x25519PublicKey.getEncoded())));
+ } else {
+ ECPublicKey ecdhPublicKey = (ECPublicKey) publicKey;
+ out.write(encodeOid(ecKeyFormat.curveOid()));
+ out.write(encodeBigIntegerAsMpi(encodeUncompressedPoint(ecdhPublicKey)));
+ }
+ out.write(encodeKdf());
+ break;
+ case PublicKeyAlgorithmTags.ECDSA:
+ ECPublicKey ecdsaPublicKey = (ECPublicKey) publicKey;
+ // * a variable-length field containing a curve OID, formatted as
+ // follows:
+ //
+ // - a one-octet size of the following field; values 0 and 0xFF are
+ // reserved for future extensions,
+ //
+ // - the octets representing a curve OID, defined in Section 9.2;
+ //
+ // * a MPI of an EC point representing a public key.
+ out.write(encodeOid(ecKeyFormat.curveOid()));
+ out.write(encodeBigIntegerAsMpi(encodeUncompressedPoint(ecdsaPublicKey)));
+ break;
+ case PublicKeyAlgorithmTags.EDDSA:
+ Hwsecurity25519PublicKey ed25519PublicKey = (Hwsecurity25519PublicKey) publicKey;
+ // * a variable-length field containing a curve OID, formatted as
+ // follows:
+ //
+ // - a one-octet size of the following field; values 0 and 0xFF are
+ // reserved for future extensions,
+ //
+ // - the octets representing a curve OID, defined in Section 9.2;
+ //
+ // * a MPI of an EC point representing a public key Q as described
+ // under EdDSA Point Format below.
+ out.write(encodeOid(ecKeyFormat.curveOid()));
+ out.write(encodeBigIntegerAsMpi(encodeCustomCompressedPoint(ed25519PublicKey.getEncoded())));
+ break;
+ default:
+ throw new IllegalStateException("Unsupported algorithm id");
+ }
+ }
+
+ // see RFC4880 13.2. ECDSA and ECDH Conversion Primitives
+ private static BigInteger encodeCustomCompressedPoint(byte[] rawPoint) {
+ byte[] pointEnc = new byte[1 + rawPoint.length];
+ pointEnc[0] = 0x40;
+ System.arraycopy(rawPoint, 0, pointEnc, 1, pointEnc.length - 1);
+ return new BigInteger(1, pointEnc);
+ }
+
+ // see RFC4880 13.2. ECDSA and ECDH Conversion Primitives
+ private static BigInteger encodeUncompressedPoint(ECPublicKey publicKey) {
+ ECPoint point = publicKey.getW();
+
+ // TODO: can we get rid of the bouncy castle conversions here?
+ ECCurve bcCurve = EC5Util.convertCurve(publicKey.getParams().getCurve());
+ org.bouncycastle.math.ec.ECPoint bcPoint = EC5Util.convertPoint(bcCurve, point);
+ org.bouncycastle.math.ec.ECPoint bcNormed = bcPoint.normalize();
+ byte[] x = bcNormed.getXCoord().getEncoded();
+ byte[] y = bcNormed.getYCoord().getEncoded();
+
+ byte[] pointEnc = new byte[1 + x.length + y.length];
+ pointEnc[0] = 0x04;
+ System.arraycopy(x, 0, pointEnc, 1, x.length);
+ System.arraycopy(y, 0, pointEnc, 1 + x.length, y.length);
+ return new BigInteger(1, pointEnc);
+ }
+
+ private static byte[] encodeOid(ASN1ObjectIdentifier oid) throws IOException {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+ byte[] boid = oid.getEncoded();
+ // skip the first ASN1 byte, so it only contains len | oid
+ out.write(boid, 1, boid.length - 1);
+
+ return out.toByteArray();
+ }
+
+ private static byte[] encodeKdf() throws IOException {
+ // Bouncy Castle uses these as default KDF parameters
+ // kdfParams = new PGPKdfParameters(HashAlgorithmTags.SHA256, SymmetricKeyAlgorithmTags.AES_128);
+ // see org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter
+
+ byte size = 0x03;
+ byte reserved = 0x01;
+ byte hashAlgorithmId = 0x08; // HashAlgorithmTags.SHA256
+ byte symmetricKeyAlgorithmId = 0x07; // SymmetricKeyAlgorithmTags.AES_128
+
+ return new byte[]{size, reserved, hashAlgorithmId, symmetricKeyAlgorithmId};
+ }
+
+ private static void writeRsaAlgorithmSpecificPart(ByteArrayOutputStream out, RSAPublicKey publicKey) throws IOException {
+ // e) Algorithm-specific fields.
+
+ // MPI of RSA public modulus n;
+ // MPI of RSA public encryption exponent e.
+ out.write(encodeBigIntegerAsMpi(publicKey.getModulus()));
+ out.write(encodeBigIntegerAsMpi(publicKey.getPublicExponent()));
+ }
+
+ private static byte[] calculateFingerprintOrThrow(byte[] encodedOpenPgpKeyBytes) throws NoSuchAlgorithmException {
+ MessageDigest digest = MessageDigest.getInstance("SHA1");
+
+ digest.update((byte) 0x99);
+ digest.update((byte) (encodedOpenPgpKeyBytes.length >> 8));
+ digest.update((byte) encodedOpenPgpKeyBytes.length);
+ digest.update(encodedOpenPgpKeyBytes);
+
+ return digest.digest();
+ }
+
+ private static byte[] encodeBigIntegerAsMpi(BigInteger value) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+ int length = value.bitLength();
+
+ out.write(length >> 8);
+ out.write(length);
+
+ byte[] bytes = value.toByteArray();
+
+ if (bytes[0] == 0) {
+ out.write(bytes, 1, bytes.length - 1);
+ } else {
+ out.write(bytes, 0, bytes.length);
+ }
+
+ return out.toByteArray();
+ }
+}
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/openpgp/RsaKeyFormat.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/openpgp/RsaKeyFormat.java
new file mode 100644
index 0000000..1bb5074
--- /dev/null
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/openpgp/RsaKeyFormat.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
+ *
+ * You can purchase a commercial license at https://hwsecurity.dev.
+ * Buying such a license is mandatory as soon as you develop commercial
+ * activities involving this program without disclosing the source code
+ * of your own applications.
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* See https://www.g10code.com/docs/openpgp-card-3.0.pdf
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public class PsoDecryptOp {
- public static final ASN1ObjectIdentifier CV25519 = new ASN1ObjectIdentifier("1.3.6.1.4.1.3029.1.5.1");
-
private final OpenPgpAppletConnection connection;
public static PsoDecryptOp create(OpenPgpAppletConnection connection) {
@@ -72,27 +73,22 @@ private PsoDecryptOp(OpenPgpAppletConnection connection) {
}
public byte[] verifyAndDecryptSessionKey(ByteSecret pin,
- @NonNull byte[] encryptedSessionKeyMpi,
- int securityKeySymmetricKeySize, byte[] userKeyingMaterial)
- throws IOException {
+ @NonNull byte[] encryptedSessionKeyMpi,
+ int securityKeySymmetricKeySize, byte[] userKeyingMaterial) throws IOException {
connection.verifyPinForOther(pin);
- KeyFormat kf = connection.getOpenPgpCapabilities().getEncryptKeyFormat();
- switch (kf.keyFormatType()) {
- case RSAKeyFormatType:
- return decryptSessionKeyRsa(encryptedSessionKeyMpi);
-
- case ECKeyFormatType:
- return decryptSessionKeyEcdh(encryptedSessionKeyMpi, (ECKeyFormat) kf,
- securityKeySymmetricKeySize, userKeyingMaterial);
-
- default:
- throw new IOException("Unknown encryption key type!");
+ KeyFormat keyFormat = connection.getOpenPgpCapabilities().getEncryptKeyFormat();
+ if (keyFormat instanceof RsaKeyFormat) {
+ return decryptSessionKeyRsa(encryptedSessionKeyMpi);
+ } else if (keyFormat instanceof EcKeyFormat) {
+ return decryptSessionKeyEcdh(encryptedSessionKeyMpi, (EcKeyFormat) keyFormat,
+ securityKeySymmetricKeySize, userKeyingMaterial);
+ } else {
+ throw new IOException("Unsupported KeyFormat.");
}
}
- public byte[] simpleDecryptSessionKeyRsa(ByteSecret pin,
- byte[] encryptedSessionKey) throws IOException {
+ public byte[] simpleDecryptSessionKeyRsa(ByteSecret pin, byte[] encryptedSessionKey) throws IOException {
connection.verifyPinForOther(pin);
byte[] psoDecipherPayload = Arrays.prepend(encryptedSessionKey, (byte) 0x00);
@@ -126,9 +122,8 @@ public byte[] getRsaOperationPayload(byte[] encryptedSessionKeyMpi) throws IOExc
return psoDecipherPayload;
}
- private byte[] decryptSessionKeyEcdh(byte[] encryptedSessionKeyMpi, ECKeyFormat eckf,
- int securityKeySymmetricKeySize, byte[] userKeyingMaterial)
- throws IOException {
+ private byte[] decryptSessionKeyEcdh(byte[] encryptedSessionKeyMpi, EcKeyFormat eckf,
+ int securityKeySymmetricKeySize, byte[] userKeyingMaterial) throws IOException {
int mpiLength = getMpiLength(encryptedSessionKeyMpi);
byte[] encryptedPoint = Arrays.copyOfRange(encryptedSessionKeyMpi, 2, mpiLength + 2);
@@ -175,6 +170,16 @@ The shared secret obtained is a KEK (Key Encryption Key) that is used to wrap th
*/
byte[] keyEncryptionKey = response.getData();
+ int xLen;
+ boolean isCurve25519 = eckf.isX25519();
+ if (eckf.isX25519()) {
+ xLen = keyEncryptionKey.length;
+ } else {
+ xLen = (keyEncryptionKey.length - 1) / 2;
+ }
+ final byte[] kekX = new byte[xLen];
+ System.arraycopy(keyEncryptionKey, isCurve25519 ? 0 : 1, kekX, 0, xLen);
+
final byte[] keyEnc = new byte[encryptedSessionKeyMpi[mpiLength + 2]];
System.arraycopy(encryptedSessionKeyMpi, 2 + mpiLength + 1, keyEnc, 0, keyEnc.length);
@@ -183,7 +188,7 @@ The shared secret obtained is a KEK (Key Encryption Key) that is used to wrap th
final MessageDigest kdf = MessageDigest.getInstance("SHA-256");
kdf.update(new byte[]{(byte) 0, (byte) 0, (byte) 0, (byte) 1});
- kdf.update(keyEncryptionKey);
+ kdf.update(kekX);
kdf.update(userKeyingMaterial);
byte[] kek = kdf.digest();
@@ -221,8 +226,8 @@ private static byte[] unpadSessionData(byte[] encoded) throws IOException {
return taggedKey;
}
- private byte[] getEcDecipherPayload(ECKeyFormat eckf, byte[] encryptedPoint) throws IOException {
- if (CV25519.equals(eckf.curveOid())) {
+ private byte[] getEcDecipherPayload(EcKeyFormat eckf, byte[] encryptedPoint) throws IOException {
+ if (eckf.isX25519()) {
return Arrays.copyOfRange(encryptedPoint, 1, 33);
} else {
X9ECParameters x9Params = ECNamedCurveTable.getByOID(eckf.curveOid());
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/operations/ResetAndWipeOp.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/operations/ResetAndWipeOp.java
index 92c771e..0ca076a 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/operations/ResetAndWipeOp.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/operations/ResetAndWipeOp.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SCP11bSecureMessaging.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/Scp11bSecureMessaging.java
similarity index 89%
rename from hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SCP11bSecureMessaging.java
rename to hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/Scp11bSecureMessaging.java
index 6157d82..d1d208f 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SCP11bSecureMessaging.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/Scp11bSecureMessaging.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
@@ -66,14 +66,15 @@
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
-import de.cotech.hw.openpgp.internal.openpgp.ECKeyFormat;
+import de.cotech.hw.openpgp.internal.openpgp.EcKeyFormat;
import de.cotech.hw.openpgp.internal.openpgp.KeyFormat;
import de.cotech.hw.openpgp.internal.OpenPgpAppletConnection;
-import de.cotech.hw.openpgp.OpenPgpCardUtils;
+import de.cotech.hw.openpgp.internal.OpenPgpCardUtils;
import de.cotech.hw.openpgp.internal.OpenPgpCommandApduFactory;
import de.cotech.hw.internal.iso7816.CommandApdu;
import de.cotech.hw.internal.iso7816.Iso7816TLV;
import de.cotech.hw.internal.iso7816.ResponseApdu;
+
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
@@ -83,6 +84,7 @@
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
+
import org.bouncycastle.asn1.nist.NISTNamedCurves;
import org.bouncycastle.asn1.x9.ECNamedCurveTable;
import org.bouncycastle.asn1.x9.X9ECParameters;
@@ -91,10 +93,10 @@
import org.bouncycastle.util.Arrays;
@RestrictTo(Scope.LIBRARY_GROUP)
-public class SCP11bSecureMessaging implements SecureMessaging {
+public class Scp11bSecureMessaging implements SecureMessaging {
- private static final byte OPENPGP_SECURE_MESSAGING_CLA_MASK = (byte)0x04;
- private static final byte OPENPGP_SECURE_MESSAGING_KEY_ATTRIBUTES_TAG = (byte)0xD4;
+ private static final byte OPENPGP_SECURE_MESSAGING_CLA_MASK = (byte) 0x04;
+ private static final byte OPENPGP_SECURE_MESSAGING_KEY_ATTRIBUTES_TAG = (byte) 0xD4;
private static final int AES_BLOCK_SIZE = 128 / 8;
@@ -125,7 +127,7 @@ public class SCP11bSecureMessaging implements SecureMessaging {
private byte[] mMacChaining;
- private SCP11bSecureMessaging() {
+ private Scp11bSecureMessaging() {
}
private void setKeys(@NonNull final byte[] sEnc,
@@ -164,7 +166,7 @@ public boolean isEstablished() {
&& (mMacChaining != null);
}
- private static ECParameterSpec getAlgorithmParameterSpec(final ECKeyFormat kf)
+ private static ECParameterSpec getAlgorithmParameterSpec(final EcKeyFormat kf)
throws NoSuchProviderException, NoSuchAlgorithmException, InvalidParameterSpecException {
final AlgorithmParameters algoParams = AlgorithmParameters.getInstance(SCP11B_KEY_AGREEMENT_KEY_ALGO, PROVIDER);
@@ -174,9 +176,9 @@ private static ECParameterSpec getAlgorithmParameterSpec(final ECKeyFormat kf)
}
- private static ECPublicKey newECDHPublicKey(final ECKeyFormat kf, byte[] data)
+ private static ECPublicKey newECDHPublicKey(final EcKeyFormat kf, byte[] data)
throws InvalidKeySpecException, NoSuchAlgorithmException,
- InvalidParameterSpecException, NoSuchProviderException {
+ InvalidParameterSpecException, NoSuchProviderException {
if (ecdhFactory == null) {
ecdhFactory = KeyFactory.getInstance(SCP11B_KEY_AGREEMENT_KEY_TYPE, PROVIDER);
}
@@ -196,12 +198,12 @@ private static ECPublicKey newECDHPublicKey(final ECKeyFormat kf, byte[] data)
new java.security.spec.ECPoint(p.getAffineXCoord().toBigInteger(), p.getAffineYCoord().toBigInteger()),
getAlgorithmParameterSpec(kf));
- return (ECPublicKey)(ecdhFactory.generatePublic(pk));
+ return (ECPublicKey) (ecdhFactory.generatePublic(pk));
}
- private static KeyPair generateECDHKeyPair(final ECKeyFormat kf)
+ private static KeyPair generateECDHKeyPair(final EcKeyFormat kf)
throws NoSuchProviderException, NoSuchAlgorithmException,
- InvalidParameterSpecException, InvalidAlgorithmParameterException {
+ InvalidParameterSpecException, InvalidAlgorithmParameterException {
final KeyPairGenerator gen = KeyPairGenerator.getInstance(SCP11B_KEY_AGREEMENT_KEY_ALGO, PROVIDER);
if (srand == null) {
@@ -214,7 +216,7 @@ private static KeyPair generateECDHKeyPair(final ECKeyFormat kf)
}
private static ECPublicKey verifyCertificate(KeyStore ks,
- final ECKeyFormat kf,
+ final EcKeyFormat kf,
final byte[] data) throws IOException {
try {
@@ -287,7 +289,7 @@ private static ECPublicKey verifyCertificate(KeyStore ks,
@CheckResult
public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpCommandApduFactory commandFactory,
- KeyStore smKeyStore)
+ KeyStore smKeyStore)
throws SecureMessagingException, IOException {
CommandApdu cmd;
@@ -304,18 +306,18 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
}
tlvs = Iso7816TLV.readList(resp.getData(), true);
if ((tlvs == null)
- || (tlvs.length != 1)
- || ((byte)tlvs[0].mT != OPENPGP_SECURE_MESSAGING_KEY_ATTRIBUTES_TAG)) {
+ || (tlvs.length != 1)
+ || ((byte) tlvs[0].mT != OPENPGP_SECURE_MESSAGING_KEY_ATTRIBUTES_TAG)) {
throw new SecureMessagingException("unsupported secure messaging key attributes format");
}
final KeyFormat kf = KeyFormat.fromBytes(tlvs[0].mV);
- if (kf.keyFormatType() != KeyFormat.KeyFormatType.ECKeyFormatType) {
+ if (!(kf instanceof EcKeyFormat)) {
throw new SecureMessagingException("unsupported secure messaging key format");
}
- final ECKeyFormat eckf = (ECKeyFormat)kf;
+ final EcKeyFormat eckf = (EcKeyFormat) kf;
if (eckf.curveOid() == null) {
throw new SecureMessagingException("unsupported secure messaging curve");
@@ -348,13 +350,13 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
tlvs = Iso7816TLV.readList(resp.getData(), true);
if ((tlvs == null)
|| (tlvs.length != 1)
- || ((short)tlvs[0].mT != (short)0x7f49)) {
+ || ((short) tlvs[0].mT != (short) 0x7f49)) {
throw new SecureMessagingException("invalid format of secure messaging key");
}
tlvs = Iso7816TLV.readList(tlvs[0].mV, true);
if ((tlvs == null)
|| (tlvs.length != 1)
- || ((byte)tlvs[0].mT != (byte)0x86)) {
+ || ((byte) tlvs[0].mT != (byte) 0x86)) {
throw new SecureMessagingException("invalid format of secure messaging key");
}
@@ -369,29 +371,29 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
final int fieldSize = curve.getField().getFieldSize();
int keySize;
- if(fieldSize < 512) {
+ if (fieldSize < 512) {
keySize = 16;
} else {
keySize = 32;
}
final KeyPair ekoce = generateECDHKeyPair(eckf);
- final ECPublicKey epkoce = (ECPublicKey)ekoce.getPublic();
- final ECPrivateKey eskoce = (ECPrivateKey)ekoce.getPrivate();
+ final ECPublicKey epkoce = (ECPublicKey) ekoce.getPublic();
+ final ECPrivateKey eskoce = (ECPrivateKey) ekoce.getPrivate();
- final byte[] crt_template = new byte[] {
- (byte)0xA6, (byte)0x0D,
- (byte)0x90, (byte)0x02, (byte)0x11, (byte)0x00,
- (byte)0x95, (byte)0x01, (byte)0x3C,
- (byte)0x80, (byte)0x01, (byte)0x88,
- (byte)0x81, (byte)0x01, (byte)keySize,
- (byte)0x5F, (byte)0x49 };
+ final byte[] crt_template = new byte[]{
+ (byte) 0xA6, (byte) 0x0D,
+ (byte) 0x90, (byte) 0x02, (byte) 0x11, (byte) 0x00,
+ (byte) 0x95, (byte) 0x01, (byte) 0x3C,
+ (byte) 0x80, (byte) 0x01, (byte) 0x88,
+ (byte) 0x81, (byte) 0x01, (byte) keySize,
+ (byte) 0x5F, (byte) 0x49};
- int csize = (int)Math.ceil(epkoce.getParams().getCurve().getField().getFieldSize() / 8.0);
+ int csize = (int) Math.ceil(epkoce.getParams().getCurve().getField().getFieldSize() / 8.0);
ByteArrayOutputStream pkout = new ByteArrayOutputStream(), bout = new ByteArrayOutputStream();
- pkout.write((byte)0x04);
+ pkout.write((byte) 0x04);
OpenPgpCardUtils.writeBits(pkout, epkoce.getW().getAffineX(), csize);
OpenPgpCardUtils.writeBits(pkout, epkoce.getW().getAffineY(), csize);
@@ -449,12 +451,12 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
csize = bout.size() + 3;
- bout.write(new byte[] {
- (byte)0, (byte)0, (byte)0, (byte)0,
- crt_template[8], crt_template[11],
- (byte)keySize });
+ bout.write(new byte[]{
+ (byte) 0, (byte) 0, (byte) 0, (byte) 0,
+ crt_template[8], crt_template[11],
+ (byte) keySize});
- byte[] shs = bout.toByteArray();
+ byte[] shs = bout.toByteArray();
//key derivation
final MessageDigest h = MessageDigest.getInstance(SCP11B_KEY_DERIVATION_ALGO, PROVIDER);
@@ -465,7 +467,7 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
bout.write(h.digest(shs));
}
- shs = bout.toByteArray();
+ shs = bout.toByteArray();
final byte[] rkey = Arrays.copyOfRange(shs, 0, keySize);
final byte[] sEnc = Arrays.copyOfRange(shs, keySize, 2 * keySize);
@@ -482,13 +484,13 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
mac.update(shs, 0, shs.length - 2 - AES_BLOCK_SIZE);
shs = mac.doFinal();
- for(int i = 0; i < AES_BLOCK_SIZE; ++i) {
+ for (int i = 0; i < AES_BLOCK_SIZE; ++i) {
if (shs[i] != receipt[i]) {
throw new SecureMessagingException("corrupted receipt!");
}
}
- final SCP11bSecureMessaging sm = new SCP11bSecureMessaging();
+ final Scp11bSecureMessaging sm = new Scp11bSecureMessaging();
sm.setKeys(sEnc, sMac, sRmac, receipt);
return sm;
@@ -500,18 +502,17 @@ public static SecureMessaging establish(OpenPgpAppletConnection t, OpenPgpComman
} catch (InvalidParameterSpecException e) {
throw new SecureMessagingException("invalid ECDH parameters : " + e.getMessage());
} catch (NoSuchProviderException e) {
- throw new SecureMessagingException("unknown provider " + PROVIDER);
+ throw new SecureMessagingException("unknown provider " + PROVIDER);
} catch (InvalidAlgorithmParameterException e) {
- throw new SecureMessagingException("invalid algorithm parameters : " + e.getMessage());
+ throw new SecureMessagingException("invalid algorithm parameters : " + e.getMessage());
} catch (InvalidKeyException e) {
- throw new SecureMessagingException("invalid key : " + e.getMessage());
+ throw new SecureMessagingException("invalid key : " + e.getMessage());
} catch (IllegalArgumentException e) {
throw new SecureMessagingException("illegal argument (" + e.getMessage() + ")");
}
}
-
@Override
public CommandApdu encryptAndSign(CommandApdu apdu)
throws SecureMessagingException {
@@ -521,7 +522,7 @@ public CommandApdu encryptAndSign(CommandApdu apdu)
}
++mEncryptionCounter;
- if(mEncryptionCounter <= 0) {
+ if (mEncryptionCounter <= 0) {
throw new SecureMessagingException("exhausted encryption counter");
}
@@ -533,11 +534,11 @@ public CommandApdu encryptAndSign(CommandApdu apdu)
final Cipher cipher = Cipher.getInstance(SCP11_CIPHER_ALGO);
byte[] iv = new byte[AES_BLOCK_SIZE];
- Arrays.fill(iv, (byte)0);
+ Arrays.fill(iv, (byte) 0);
cipher.init(Cipher.ENCRYPT_MODE, mSEnc, new IvParameterSpec(iv));
- iv[AES_BLOCK_SIZE - 2] = (byte)((mEncryptionCounter >> 8) & 0xff);
- iv[AES_BLOCK_SIZE - 1] = (byte)(mEncryptionCounter & 0xff);
+ iv[AES_BLOCK_SIZE - 2] = (byte) ((mEncryptionCounter >> 8) & 0xff);
+ iv[AES_BLOCK_SIZE - 1] = (byte) (mEncryptionCounter & 0xff);
iv = cipher.doFinal(iv);
@@ -545,14 +546,14 @@ public CommandApdu encryptAndSign(CommandApdu apdu)
final byte[] pdata = new byte[data.length + AES_BLOCK_SIZE - (data.length % AES_BLOCK_SIZE)];
System.arraycopy(data, 0, pdata, 0, data.length);
- pdata[data.length] = (byte)0x80;
+ pdata[data.length] = (byte) 0x80;
- Arrays.fill(data, (byte)0);
+ Arrays.fill(data, (byte) 0);
data = cipher.doFinal(pdata);
- Arrays.fill(pdata, (byte)0);
- Arrays.fill(iv, (byte)0);
+ Arrays.fill(pdata, (byte) 0);
+ Arrays.fill(iv, (byte) 0);
}
@@ -575,7 +576,7 @@ public CommandApdu encryptAndSign(CommandApdu apdu)
System.arraycopy(data, 0, odata, ooff, data.length);
ooff += data.length;
- Arrays.fill(data, (byte)0);
+ Arrays.fill(data, (byte) 0);
final Mac mac = Mac.getInstance(SCP11_MAC_ALGO, PROVIDER);
mac.init(mSMac);
@@ -597,7 +598,7 @@ public CommandApdu encryptAndSign(CommandApdu apdu)
throw new SecureMessagingException("Failed to parsing APDU: " + e.getMessage());
}
- Arrays.fill(odata, (byte)0);
+ Arrays.fill(odata, (byte) 0);
return apdu;
@@ -668,7 +669,7 @@ public ResponseApdu verifyAndDecrypt(ResponseApdu apdu)
final Cipher cipher = Cipher.getInstance(SCP11_CIPHER_ALGO);
byte[] iv = new byte[AES_BLOCK_SIZE];
- Arrays.fill(iv,(byte)0);
+ Arrays.fill(iv, (byte) 0);
cipher.init(Cipher.ENCRYPT_MODE, mSEnc, new IvParameterSpec(iv));
iv[0] = (byte) 0x80;
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessaging.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessaging.java
index 4ce1c85..a43c1d7 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessaging.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessaging.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessagingException.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessagingException.java
index eb826a6..a94b492 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessagingException.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/internal/securemessaging/SecureMessagingException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedDecryptor.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedDecryptor.java
index 563eef4..5f62bce 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedDecryptor.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedDecryptor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedEncryptor.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedEncryptor.java
index 2239697..43ebc23 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedEncryptor.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedEncryptor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKey.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKey.java
index 8e8e098..195e877 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKey.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKey.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeyException.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeyException.java
index 9e28394..34b0338 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeyException.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeyException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializer.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializer.java
index 928c6d0..9879d96 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializer.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
@@ -25,9 +25,6 @@
package de.cotech.hw.openpgp.pairedkey;
-import de.cotech.hw.openpgp.pairedkey.PairedSecurityKey;
-
-
public interface PairedSecurityKeySerializer {
PairedSecurityKey deserialize(String serializedPairedSecurityKey);
String serialize(PairedSecurityKey pairedSecurityKey);
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializerImpl.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializerImpl.java
index b57bdf3..c319cdb 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializerImpl.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/pairedkey/PairedSecurityKeySerializerImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/secrets/OpenPgpByteSecretGenerator.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/secrets/OpenPgpByteSecretGenerator.java
index fe88640..83d08a7 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/secrets/OpenPgpByteSecretGenerator.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/secrets/OpenPgpByteSecretGenerator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencePairedSecurityKeyStorage.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencePairedSecurityKeyStorage.java
index 8da4da6..42eb4cf 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencePairedSecurityKeyStorage.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencePairedSecurityKeyStorage.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencesEncryptedSessionStorage.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencesEncryptedSessionStorage.java
index 099c22c..5bca6db 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencesEncryptedSessionStorage.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/AndroidPreferencesEncryptedSessionStorage.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/EncryptedSessionStorage.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/EncryptedSessionStorage.java
index 6e0d5fc..00c655b 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/EncryptedSessionStorage.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/EncryptedSessionStorage.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/PairedSecurityKeyStorage.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/PairedSecurityKeyStorage.java
index 61398e8..99e0518 100644
--- a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/PairedSecurityKeyStorage.java
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/storage/PairedSecurityKeyStorage.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018-2020 Confidential Technologies GmbH
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
*
* You can purchase a commercial license at https://hwsecurity.dev.
* Buying such a license is mandatory as soon as you develop commercial
diff --git a/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/util/Bouncy25519KeyConverter.java b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/util/Bouncy25519KeyConverter.java
new file mode 100644
index 0000000..2ad3c54
--- /dev/null
+++ b/hwsecurity/openpgp/src/main/java/de/cotech/hw/openpgp/util/Bouncy25519KeyConverter.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2018-2021 Confidential Technologies GmbH
+ *
+ * You can purchase a commercial license at https://hwsecurity.dev.
+ * Buying such a license is mandatory as soon as you develop commercial
+ * activities involving this program without disclosing the source code
+ * of your own applications.
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
* This dialog shows helpful animations and handles all the PIN/PUK input for you.
* It still allows you full control over the operations you can execute on the Security Key.
- *
- * Use the SecurityKeyDialogFactory to instantiate this.
*/
public abstract class SecurityKeyDialogFragment