OpenPGP card v3.3 : fix KDF-DO min/max length

This commit is contained in:
Arnaud Fontaine 2017-06-01 11:27:19 +02:00
parent a2db09cfd0
commit 179856f183
3 changed files with 4 additions and 6 deletions

View File

@ -32,8 +32,6 @@ public final class Constants {
protected static final short APDU_MAX_LENGTH = (short)256; protected static final short APDU_MAX_LENGTH = (short)256;
protected static final short KEY_DERIVATION_FUNCTION_MIN_LENGTH = 2;
protected static final short KEY_DERIVATION_FUNCTION_MAX_LENGTH = 160;
protected static final byte[] KEY_DERIVATION_FUNCTION_DEFAULT = { protected static final byte[] KEY_DERIVATION_FUNCTION_DEFAULT = {
(byte)0xF9, (byte)0x03, (byte)0x81, (byte)0x01, (byte)0x00 (byte)0xF9, (byte)0x03, (byte)0x81, (byte)0x01, (byte)0x00
}; };
@ -168,7 +166,7 @@ public final class Constants {
(byte)0x01, /* SM 0x01 = 128 bits, 0x02 = 256 bits */ (byte)0x01, /* SM 0x01 = 128 bits, 0x02 = 256 bits */
(byte)0x00, (byte)0x20, /* max length get challenge */ (byte)0x00, (byte)0x20, /* max length get challenge */
(byte)0x04, (byte)0x80, /* max length of carholder certificate */ (byte)0x04, (byte)0x80, /* max length of carholder certificate */
(byte)0x00, (byte)0xff, /* max length of special DOs (private, login, url) */ (byte)0x00, (byte)0xff, /* max length of special DOs (private, login, url, KDF-DO) */
(byte)0x00, /* PIN format 2 not supported */ (byte)0x00, /* PIN format 2 not supported */
(byte)0x00 /* RFU */ (byte)0x00 /* RFU */
}; };

View File

@ -131,7 +131,7 @@ public final class Persistent {
pgp_keys[i] = new PGPKey(false); pgp_keys[i] = new PGPKey(false);
} }
key_derivation_function = new byte[Constants.KEY_DERIVATION_FUNCTION_MAX_LENGTH]; key_derivation_function = new byte[Constants.specialDoMaxLength()];
key_derivation_function_length = 0; key_derivation_function_length = 0;
user_pin = new OwnerPIN(Constants.USER_PIN_RETRY_COUNT, Constants.USER_PIN_MAX_SIZE); user_pin = new OwnerPIN(Constants.USER_PIN_RETRY_COUNT, Constants.USER_PIN_MAX_SIZE);

View File

@ -1039,8 +1039,8 @@ public final class SmartPGPApplet extends Applet {
case Constants.TAG_KEY_DERIVATION_FUNCTION: case Constants.TAG_KEY_DERIVATION_FUNCTION:
assertAdmin(); assertAdmin();
if((lc < Constants.KEY_DERIVATION_FUNCTION_MIN_LENGTH) || if((lc < 0) ||
(lc > Constants.KEY_DERIVATION_FUNCTION_MAX_LENGTH)) { (lc > Constants.specialDoMaxLength())) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
return; return;
} }