diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cz/crcs/ectester/applet/AppletBase.java | 18 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/common/util/CardUtil.java | 27 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/common/util/ECUtil.java | 2 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ECTesterReader.java | 6 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/command/Command.java | 2 |
5 files changed, 44 insertions, 11 deletions
diff --git a/src/cz/crcs/ectester/applet/AppletBase.java b/src/cz/crcs/ectester/applet/AppletBase.java index dc0f50d..9a8a479 100644 --- a/src/cz/crcs/ectester/applet/AppletBase.java +++ b/src/cz/crcs/ectester/applet/AppletBase.java @@ -39,8 +39,8 @@ public abstract class AppletBase extends Applet { public static final byte KEYPAIR_LOCAL = (byte) 0x01; public static final byte KEYPAIR_REMOTE = (byte) 0x02; public static final byte KEYPAIR_BOTH = KEYPAIR_LOCAL | KEYPAIR_REMOTE; - public static final byte BUILD_KEYPAIR = (byte) 0x00; - public static final byte BUILD_KEYBUILDER = (byte) 0x01; + public static final byte BUILD_KEYPAIR = (byte) 0x01; + public static final byte BUILD_KEYBUILDER = (byte) 0x02; public static final byte EXPORT_TRUE = (byte) 0xff; public static final byte EXPORT_FALSE = (byte) 0x00; public static final byte MODE_NORMAL = (byte) 0xaa; @@ -670,9 +670,12 @@ public abstract class AppletBase extends Applet { private short allocate(byte keyPair, byte build, short keyLength, byte keyClass, byte[] outBuffer, short outOffset) { short length = 0; if ((keyPair & KEYPAIR_LOCAL) != 0) { - if (build == BUILD_KEYPAIR) { + if ((build & BUILD_KEYPAIR) != 0) { localKeypair = keyGenerator.allocatePair(keyClass, keyLength); - } else { + if (keyGenerator.getSW() != ISO7816.SW_NO_ERROR && (build & BUILD_KEYBUILDER) != 0) { + localKeypair = keyGenerator.constructPair(keyClass, keyLength); + } + } else if ((build & BUILD_KEYBUILDER) != 0) { localKeypair = keyGenerator.constructPair(keyClass, keyLength); } Util.setShort(outBuffer, outOffset, keyGenerator.getSW()); @@ -680,9 +683,12 @@ public abstract class AppletBase extends Applet { } if ((keyPair & KEYPAIR_REMOTE) != 0) { - if (build == BUILD_KEYPAIR) { + if ((build & BUILD_KEYPAIR) != 0) { remoteKeypair = keyGenerator.allocatePair(keyClass, keyLength); - } else { + if (keyGenerator.getSW() != ISO7816.SW_NO_ERROR && (build & BUILD_KEYBUILDER) != 0) { + remoteKeypair = keyGenerator.constructPair(keyClass, keyLength); + } + } else if ((build & BUILD_KEYBUILDER) != 0) { remoteKeypair = keyGenerator.constructPair(keyClass, keyLength); } Util.setShort(outBuffer, (short) (outOffset + length), keyGenerator.getSW()); diff --git a/src/cz/crcs/ectester/common/util/CardUtil.java b/src/cz/crcs/ectester/common/util/CardUtil.java index a761949..5187c42 100644 --- a/src/cz/crcs/ectester/common/util/CardUtil.java +++ b/src/cz/crcs/ectester/common/util/CardUtil.java @@ -34,6 +34,23 @@ public class CardUtil { public static String getSigHashAlgo(byte sigType) { switch (sigType) { case EC_Consts.Signature_ALG_ECDSA_SHA: + return "SHA1"; + case EC_Consts.Signature_ALG_ECDSA_SHA_224: + return "SHA224"; + case EC_Consts.Signature_ALG_ECDSA_SHA_256: + return "SHA256"; + case EC_Consts.Signature_ALG_ECDSA_SHA_384: + return "SHA384"; + case EC_Consts.Signature_ALG_ECDSA_SHA_512: + return "SHA512"; + default: + return null; + } + } + + public static String getSigHashName(byte sigType) { + switch (sigType) { + case EC_Consts.Signature_ALG_ECDSA_SHA: return "SHA-1"; case EC_Consts.Signature_ALG_ECDSA_SHA_224: return "SHA-224"; @@ -67,6 +84,16 @@ public class CardUtil { } } + public static String getKexHashName(byte kexType) { + switch (kexType) { + case EC_Consts.KeyAgreement_ALG_EC_SVDP_DH: + case EC_Consts.KeyAgreement_ALG_EC_SVDP_DHC: + return "SHA1"; + default: + return "NONE"; + } + } + public static String getSWSource(short sw) { switch (sw) { case ISO7816.SW_NO_ERROR: diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java index 43ccf08..ccc6c48 100644 --- a/src/cz/crcs/ectester/common/util/ECUtil.java +++ b/src/cz/crcs/ectester/common/util/ECUtil.java @@ -365,7 +365,7 @@ public class ECUtil { int bitSize = params.getOrder().bitLength(); // Hash the data. byte[] hash; - if (hashType.equals("NONE")) { + if (hashType == null || hashType.equals("NONE")) { hash = data; } else { MessageDigest md = MessageDigest.getInstance(hashType); diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java index 07bdb2f..7953c1b 100644 --- a/src/cz/crcs/ectester/reader/ECTesterReader.java +++ b/src/cz/crcs/ectester/reader/ECTesterReader.java @@ -589,7 +589,7 @@ public class ECTesterReader { OutputStreamWriter out = null; if (cfg.outputs != null) { out = FileUtil.openFiles(cfg.outputs); - out.write(String.format("index;time[%s];pubW;privS;secret\n", cfg.timeUnit)); + out.write(String.format("index;time[%s];pubW;privS;secret[%s]\n", cfg.timeUnit, CardUtil.getKexHashName(cfg.ECKAType))); } Response gen = new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH).send(); @@ -715,7 +715,7 @@ public class ECTesterReader { OutputStreamWriter out = FileUtil.openFiles(cfg.outputs); if (out != null) { - out.write(String.format("index;signTime[%s];verifyTime[%s];data;pubW;privS;signature;nonce;valid\n", cfg.timeUnit, cfg.timeUnit)); + out.write(String.format("index;signTime[%s];verifyTime[%s];data;pubW;privS;signature[%s];nonce;valid\n", cfg.timeUnit, cfg.timeUnit, CardUtil.getSigHashAlgo(cfg.ECDSAType))); } Command.Export export = new Command.Export(cardManager, ECTesterApplet.KEYPAIR_LOCAL, EC_Consts.KEY_BOTH, EC_Consts.PARAMETERS_KEYPAIR); @@ -783,7 +783,7 @@ public class ECTesterReader { String k = ""; if (actualCurve != null) { ECParameterSpec params = actualCurve.toSpec(); - BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey, params, CardUtil.getSigHashAlgo(cfg.ECDSAType)); + BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey, params, CardUtil.getSigHashName(cfg.ECDSAType)); if (kValue != null) { k = ByteUtil.bytesToHex(kValue.toByteArray(), false); } diff --git a/src/cz/crcs/ectester/reader/command/Command.java b/src/cz/crcs/ectester/reader/command/Command.java index cd015df..61e3900 100644 --- a/src/cz/crcs/ectester/reader/command/Command.java +++ b/src/cz/crcs/ectester/reader/command/Command.java @@ -281,7 +281,7 @@ public abstract class Command implements Cloneable { } public Allocate(CardMngr cardManager, byte keyPair, short keyLength, byte keyClass) { - this(cardManager, keyPair, ECTesterApplet.BUILD_KEYPAIR, keyLength, keyClass); + this(cardManager, keyPair, (byte) (ECTesterApplet.BUILD_KEYPAIR | ECTesterApplet.BUILD_KEYBUILDER), keyLength, keyClass); } @Override |
