From 9c1915423a36d18e1cea73771dabb5d2713148d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 6 Nov 2017 13:17:55 +0100 Subject: [PATCH] Support Nitrokey Start and Storage --- .../keychain/securitytoken/SecurityTokenInfo.java | 11 +++++++---- .../keychain/securitytoken/usb/UsbTransport.java | 6 +++++- .../ui/token/ManageSecurityTokenContract.java | 2 +- .../ui/token/ManageSecurityTokenFragment.java | 4 ++-- .../ui/token/ManageSecurityTokenPresenter.java | 4 ++-- OpenKeychain/src/main/res/values/strings.xml | 2 +- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenInfo.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenInfo.java index 5b453a442..aa85ad3ae 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenInfo.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenInfo.java @@ -96,8 +96,8 @@ public abstract class SecurityTokenInfo implements Parcelable { } public enum TokenType { - YUBIKEY_NEO, YUBIKEY_4, FIDESMO, NITROKEY_PRO, NITROKEY_STORAGE, NITROKEY_START, - GNUK_OLD, GNUK_UNKNOWN, GNUK_1_25_AND_NEWER, LEDGER_NANO_S, UNKNOWN + YUBIKEY_NEO, YUBIKEY_4, FIDESMO, NITROKEY_PRO, NITROKEY_STORAGE, NITROKEY_START_OLD, + NITROKEY_START_1_25_AND_NEWER, GNUK_OLD, GNUK_1_25_AND_NEWER, LEDGER_NANO_S, UNKNOWN } private static final HashSet SUPPORTED_USB_TOKENS = new HashSet<>(Arrays.asList( @@ -105,15 +105,18 @@ public abstract class SecurityTokenInfo implements Parcelable { TokenType.YUBIKEY_4, TokenType.NITROKEY_PRO, TokenType.NITROKEY_STORAGE, + TokenType.NITROKEY_START_OLD, + TokenType.NITROKEY_START_1_25_AND_NEWER, TokenType.GNUK_OLD, - TokenType.GNUK_UNKNOWN, TokenType.GNUK_1_25_AND_NEWER )); private static final HashSet SUPPORTED_USB_SETUP = new HashSet<>(Arrays.asList( TokenType.YUBIKEY_NEO, - TokenType.YUBIKEY_4, // Not clear, will be tested: https://github.com/open-keychain/open-keychain/issues/2069 + TokenType.YUBIKEY_4, TokenType.NITROKEY_PRO, + TokenType.NITROKEY_STORAGE, + TokenType.NITROKEY_START_1_25_AND_NEWER, TokenType.GNUK_1_25_AND_NEWER )); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/usb/UsbTransport.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/usb/UsbTransport.java index 69e257e36..3f363923e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/usb/UsbTransport.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/usb/UsbTransport.java @@ -211,7 +211,11 @@ public class UsbTransport implements Transport { case PRODUCT_NITROKEY_PRO: return TokenType.NITROKEY_PRO; case PRODUCT_NITROKEY_START: - return TokenType.NITROKEY_START; + String serialNo = usbConnection.getSerial(); + SecurityTokenInfo.Version gnukVersion = SecurityTokenInfo.parseGnukVersionString(serialNo); + boolean versionGreaterEquals125 = gnukVersion != null + && SecurityTokenInfo.Version.create("1.2.5").compareTo(gnukVersion) <= 0; + return versionGreaterEquals125 ? TokenType.NITROKEY_START_1_25_AND_NEWER : TokenType.NITROKEY_START_OLD; case PRODUCT_NITROKEY_STORAGE: return TokenType.NITROKEY_STORAGE; } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java index a05bdb00f..2d647e616 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java @@ -98,7 +98,7 @@ class ManageSecurityTokenContract { void requestStoragePermission(); - void showErrorCannotReset(boolean isGnuk); + void showErrorCannotReset(boolean isGnukOrNitrokeyStart); void showErrorCannotUnlock(); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java index faba27b1d..efb69eb69 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java @@ -353,8 +353,8 @@ public class ManageSecurityTokenFragment extends Fragment implements ManageSecur } @Override - public void showErrorCannotReset(boolean isGnuk) { - if (isGnuk) { + public void showErrorCannotReset(boolean isGnukOrNitrokeyStart) { + if (isGnukOrNitrokeyStart) { Notify.create(getActivity(), R.string.token_error_cannot_reset_gnuk_old, Style.ERROR).show(); } else { Notify.create(getActivity(), R.string.token_error_cannot_reset, Style.ERROR).show(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java index dc731c979..bdf42ae98 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java @@ -365,9 +365,9 @@ class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter { public void onClickResetToken() { if (!tokenInfo.isResetSupported()) { TokenType tokenType = tokenInfo.getTokenType(); - boolean isGnuk = tokenType == TokenType.GNUK_OLD || tokenType == TokenType.GNUK_UNKNOWN; + boolean isGnukOrNitrokeyStart = tokenType == TokenType.GNUK_OLD || tokenType == TokenType.NITROKEY_START_OLD; - view.showErrorCannotReset(isGnuk); + view.showErrorCannotReset(isGnukOrNitrokeyStart); return; } diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 7869f0228..7c094f61d 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -1927,7 +1927,7 @@ "%d attempts left" Too many reset attempts. Token cannot be unlocked! - "The Gnuk Token does not support reset until version 1.2.5" + "The Gnuk Token/Nitrokey Start does not support reset until version 1.2.5" "This Security Token does not support reset" Change PIN