From 59052a36d789f7ff7625893e4d936d4e3e94a1c5 Mon Sep 17 00:00:00 2001 From: Michele Balistreri Date: Mon, 18 May 2020 13:36:18 +0300 Subject: [PATCH] make compatible with 2.1 Keycard applet --- .../java/im/status/ethereum/keycard/SmartCard.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 1daf589..7d025a6 100644 --- a/android/src/main/java/im/status/ethereum/keycard/SmartCard.java +++ b/android/src/main/java/im/status/ethereum/keycard/SmartCard.java @@ -565,7 +565,18 @@ public class SmartCard extends BroadcastReceiver implements CardListener { Log.i(TAG, "pin verified"); byte[] hash = Hex.decode(message); - RecoverableSignature signature = new RecoverableSignature(hash, cmdSet.signWithPath(hash, path, false).checkOK().getData()); + + RecoverableSignature signature; + + if (cmdSet.getApplicationInfo().getAppVersion() < 0x0202) { + String actualPath = new KeyPath(cmdSet.getStatus(KeycardCommandSet.GET_STATUS_P1_KEY_PATH).checkOK().getData()).toString(); + if (!actualPath.equals(path)) { + cmdSet.deriveKey(path).checkOK(); + } + signature = new RecoverableSignature(hash, cmdSet.sign(hash).checkOK().getData()); + } else { + signature = new RecoverableSignature(hash, cmdSet.signWithPath(hash, path, false).checkOK().getData()); + } Log.i(TAG, "Signed hash: " + Hex.toHexString(hash)); Log.i(TAG, "Recovery ID: " + signature.getRecId());