Satochip: Patch error 0x9C01 in cardBip32GetExtendedKey()

This error occurs when the cache memory in the card is full.
We need to flush the cache by sending the same command with the p2 flag set to 0x80.
This commit is contained in:
Toporin 2023-11-30 21:25:01 +01:00
parent 6ee3755ce4
commit e368782b4c

View file

@ -347,8 +347,14 @@ public class SatochipCommandSet {
public APDUResponse cardBip32GetExtendedKey(byte[] bytePath) { public APDUResponse cardBip32GetExtendedKey(byte[] bytePath) {
byte p1 = (byte) (bytePath.length / 4); byte p1 = (byte) (bytePath.length / 4);
APDUCommand plainApdu = new APDUCommand(0xB0, INS_BIP32_GET_EXTENDED_KEY, p1, 0x40, bytePath); APDUCommand capdu = new APDUCommand(0xB0, INS_BIP32_GET_EXTENDED_KEY, p1, 0x40, bytePath);
return this.cardTransmit(plainApdu); APDUResponse rapdu = this.cardTransmit(capdu);
if(rapdu.getSw() == 0x9C01) {
// error 0X9C01: no memory available for key derivation => flush memory cache in card
capdu = new APDUCommand(0xB0, INS_BIP32_GET_EXTENDED_KEY, p1, 0x80, bytePath);
rapdu = this.cardTransmit(capdu);
}
return rapdu;
} }
/* /*