From d2db19f49f73ba1fbada94aee879297866aac01f Mon Sep 17 00:00:00 2001 From: Dmitry Novotochinov Date: Wed, 26 Dec 2018 15:30:39 +0300 Subject: [PATCH] add verifyPin and changePin methods --- .../keycard/RNStatusKeycardModule.java | 22 ++++++++++++++++++ .../im/status/ethereum/keycard/SmartCard.java | 23 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/android/src/main/java/im/status/ethereum/keycard/RNStatusKeycardModule.java b/android/src/main/java/im/status/ethereum/keycard/RNStatusKeycardModule.java index f0ab302..8eca5e0 100644 --- a/android/src/main/java/im/status/ethereum/keycard/RNStatusKeycardModule.java +++ b/android/src/main/java/im/status/ethereum/keycard/RNStatusKeycardModule.java @@ -256,4 +256,26 @@ public class RNStatusKeycardModule extends ReactContextBaseJavaModule implements }).start(); } + @ReactMethod + public void verifyPin(final String pairing, final String pin, final Promise promise) { + try { + smartCard.verifyPin(pairing, pin); + promise.resolve(true); + } catch (IOException | APDUException e) { + Log.d(TAG, e.getMessage()); + promise.reject(e); + } + } + + @ReactMethod + public void changePin(final String pairing, final String currentPin, final String newPin, final Promise promise) { + try { + smartCard.changePin(pairing, currentPin, newPin); + promise.resolve(true); + } catch (IOException | APDUException e) { + Log.d(TAG, e.getMessage()); + promise.reject(e); + } + } + } \ No newline at end of file diff --git a/android/src/main/java/im/status/ethereum/keycard/SmartCard.java b/android/src/main/java/im/status/ethereum/keycard/SmartCard.java index a9a1c7a..1da715c 100644 --- a/android/src/main/java/im/status/ethereum/keycard/SmartCard.java +++ b/android/src/main/java/im/status/ethereum/keycard/SmartCard.java @@ -367,4 +367,27 @@ public class SmartCard extends BroadcastReceiver implements CardListener { return init(); } + public KeycardCommandSet verifyPin(final String pairingBase64, final String pin) throws IOException, APDUException { + KeycardCommandSet cmdSet = new KeycardCommandSet(this.cardChannel); + cmdSet.select().checkOK(); + + Pairing pairing = new Pairing(pairingBase64); + cmdSet.setPairing(pairing); + + cmdSet.autoOpenSecureChannel(); + Log.i(TAG, "secure channel opened"); + + cmdSet.verifyPIN(pin).checkOK(); + Log.i(TAG, "pin verified"); + + return cmdSet; + } + + public void changePin(final String pairingBase64, final String currentPin, final String newPin) throws IOException, APDUException { + KeycardCommandSet cmdSet = verifyPin(pairingBase64, currentPin); + + cmdSet.changePIN(0, newPin); + Log.i(TAG, "pin changed"); + } + }