fix secure channel cases

This commit is contained in:
Michele Balistreri 2019-04-01 17:52:16 +03:00
parent 355ee91d2c
commit 77d0ee8c58
2 changed files with 10 additions and 6 deletions

View File

@ -1224,9 +1224,6 @@ public class KeycardApplet extends Applet {
makeCurrent = true;
break;
case SIGN_P1_PINLESS:
if (pinlessPathLen == 0) {
ISOException.throwIt(SW_REFERENCED_DATA_NOT_FOUND);
}
usePinless = true;
signingKey = pinlessPrivateKey;
outputKey = pinlessPublicKey;
@ -1244,6 +1241,10 @@ public class KeycardApplet extends Applet {
len = secureChannel.preprocessAPDU(apduBuffer);
}
if (usePinless && pinlessPathLen == 0) {
ISOException.throwIt(SW_REFERENCED_DATA_NOT_FOUND);
}
if (!((pin.isValidated() || usePinless || isPinless()) && privateKey.isInitialized())) {
ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);
}
@ -1284,7 +1285,11 @@ public class KeycardApplet extends Applet {
apduBuffer[(short)(SecureChannel.SC_OUT_OFFSET + 1)] = (byte) 0x81;
apduBuffer[(short)(SecureChannel.SC_OUT_OFFSET + 2)] = (byte) (outLen - 3);
secureChannel.respond(apdu, outLen, ISO7816.SW_NO_ERROR);
if (secureChannel.isOpen()) {
secureChannel.respond(apdu, outLen, ISO7816.SW_NO_ERROR);
} else {
apdu.setOutgoingAndSend(SecureChannel.SC_OUT_OFFSET, outLen);
}
}
/**

View File

@ -1031,7 +1031,6 @@ public class KeycardTest {
assertEquals(0x9000, response.getSw());
// No secure channel or PIN auth
reset();
response = cmdSet.select();
assertEquals(0x9000, response.getSw());
@ -1055,7 +1054,7 @@ public class KeycardTest {
assertEquals(0x9000, response.getSw());
response = cmdSet.signPinless(hash);
assertEquals(0x6985, response.getSw());
assertEquals(0x6A88, response.getSw());
}
private void verifySignResp(byte[] data, APDUResponse response) throws Exception {