diff options
| author | J08nY | 2017-04-19 21:56:39 +0200 |
|---|---|---|
| committer | J08nY | 2017-04-19 21:56:39 +0200 |
| commit | 3aaead661e2b23b5e5811a3a06daed61db638a72 (patch) | |
| tree | 41312c609ca39d3f8f3fed306130f87a09f61da8 /src/cz/crcs/ectester/applet | |
| parent | 3e1290ca718aadf6dd2f920107493f2cd8f874ab (diff) | |
| download | ECTester-3aaead661e2b23b5e5811a3a06daed61db638a72.tar.gz ECTester-3aaead661e2b23b5e5811a3a06daed61db638a72.tar.zst ECTester-3aaead661e2b23b5e5811a3a06daed61db638a72.zip | |
Fix some test-vector tests, also test printing
Diffstat (limited to 'src/cz/crcs/ectester/applet')
| -rw-r--r-- | src/cz/crcs/ectester/applet/ECKeyGenerator.java | 12 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/applet/ECKeyTester.java | 27 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/applet/ECTesterApplet.java | 8 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/applet/ECUtil.java | 24 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/applet/EC_Consts.java | 1 |
5 files changed, 58 insertions, 14 deletions
diff --git a/src/cz/crcs/ectester/applet/ECKeyGenerator.java b/src/cz/crcs/ectester/applet/ECKeyGenerator.java index a36bd0c..a602ab1 100644 --- a/src/cz/crcs/ectester/applet/ECKeyGenerator.java +++ b/src/cz/crcs/ectester/applet/ECKeyGenerator.java @@ -40,7 +40,7 @@ public class ECKeyGenerator { public short clearPair(KeyPair keypair, byte key) { try { - sw = ECUtil.nullCheck(keypair); + sw = ECUtil.keypairCheck(keypair); if ((key & EC_Consts.KEY_PUBLIC) != 0) keypair.getPublic().clearKey(); if ((key & EC_Consts.KEY_PRIVATE) != 0) keypair.getPrivate().clearKey(); } catch (CardRuntimeException ce) { @@ -55,7 +55,7 @@ public class ECKeyGenerator { */ public short generatePair(KeyPair keypair) { try { - sw = ECUtil.nullCheck(keypair); + sw = ECUtil.keypairCheck(keypair); keypair.genKeyPair(); } catch (CardRuntimeException ce) { sw = ce.getReason(); @@ -156,7 +156,7 @@ public class ECKeyGenerator { */ public short setParameter(KeyPair keypair, byte key, short param, byte[] data, short offset, short length) { try { - sw = ECUtil.nullCheck(keypair); + sw = ECUtil.keypairCheck(keypair); ECPublicKey ecPublicKey = (ECPublicKey) keypair.getPublic(); ECPrivateKey ecPrivateKey = (ECPrivateKey) keypair.getPrivate(); @@ -281,7 +281,7 @@ public class ECKeyGenerator { public short exportParameter(KeyPair keypair, byte key, short param, byte[] outputBuffer, short outputOffset) { short length = 0; try { - sw = ECUtil.nullCheck(keypair); + sw = ECUtil.keypairCheck(keypair); ECPublicKey ecPublicKey = (ECPublicKey) keypair.getPublic(); ECPrivateKey ecPrivateKey = (ECPrivateKey) keypair.getPrivate(); @@ -390,8 +390,8 @@ public class ECKeyGenerator { */ public short copyCurve(KeyPair from, KeyPair to, short params, byte[] buffer, short offset) { try { - sw = ECUtil.nullCheck(from); - sw = ECUtil.nullCheck(to); + sw = ECUtil.keypairCheck(from); + sw = ECUtil.keypairCheck(to); short param = EC_Consts.PARAMETER_FP; while (param <= EC_Consts.PARAMETER_K) { diff --git a/src/cz/crcs/ectester/applet/ECKeyTester.java b/src/cz/crcs/ectester/applet/ECKeyTester.java index c4b58e0..aac4656 100644 --- a/src/cz/crcs/ectester/applet/ECKeyTester.java +++ b/src/cz/crcs/ectester/applet/ECKeyTester.java @@ -53,8 +53,9 @@ public class ECKeyTester { private short testKA(KeyAgreement ka, KeyPair privatePair, KeyPair publicPair, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset, byte corruption) { short length = 0; try { - sw = ECUtil.nullCheck(privatePair); - sw = ECUtil.nullCheck(publicPair); + sw = ECUtil.kaCheck(ka); + sw = ECUtil.keypairCheck(privatePair); + sw = ECUtil.keypairCheck(publicPair); ka.init(privatePair.getPrivate()); short pubkeyLength = ((ECPublicKey) publicPair.getPublic()).getW(pubkeyBuffer, pubkeyOffset); @@ -113,7 +114,7 @@ public class ECKeyTester { * @param corruption * @return */ - public short testECDH_ECDHC(KeyPair privatePair, KeyPair publicPair, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset, byte corruption) { + public short testBOTH(KeyPair privatePair, KeyPair publicPair, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset, byte corruption) { short ecdhLength = testECDH(privatePair, publicPair, pubkeyBuffer, pubkeyOffset, outputBuffer, outputOffset, corruption); if (sw != ISO7816.SW_NO_ERROR) { return ecdhLength; @@ -131,6 +132,23 @@ public class ECKeyTester { } /** + * + * @param privatePair + * @param publicPair + * @param pubkeyBuffer + * @param pubkeyOffset + * @param outputBuffer + * @param outputOffset + * @param corruption + * @return + */ + public short testANY(KeyPair privatePair, KeyPair publicPair, byte[] pubkeyBuffer, short pubkeyOffset, byte[]outputBuffer, short outputOffset, byte corruption) { + short ecdhLength = testECDH(privatePair, publicPair, pubkeyBuffer, pubkeyOffset, outputBuffer, outputOffset, corruption); + if (sw == ISO7816.SW_NO_ERROR) + return ecdhLength; + return testECDHC(privatePair, publicPair, pubkeyBuffer, pubkeyOffset, outputBuffer, outputOffset, corruption); + } + /** * Uses {@code signKey} to sign data from {@code inputBuffer} at {@code inputOffset} with {@code inputOffset}. * Then checks for correct signature length. * Then tries verifying the data with {@code verifyKey}. @@ -145,9 +163,10 @@ public class ECKeyTester { * @return signature length */ public short testECDSA(ECPrivateKey signKey, ECPublicKey verifyKey, byte[] inputBuffer, short inputOffset, short inputLength, byte[] sigBuffer, short sigOffset) { - sw = ISO7816.SW_NO_ERROR; short length = 0; try { + sw = ECUtil.signCheck(ecdsaSignature); + ecdsaSignature.init(signKey, Signature.MODE_SIGN); length = ecdsaSignature.sign(inputBuffer, inputOffset, inputLength, sigBuffer, sigOffset); diff --git a/src/cz/crcs/ectester/applet/ECTesterApplet.java b/src/cz/crcs/ectester/applet/ECTesterApplet.java index f802233..88d1b8c 100644 --- a/src/cz/crcs/ectester/applet/ECTesterApplet.java +++ b/src/cz/crcs/ectester/applet/ECTesterApplet.java @@ -65,6 +65,9 @@ public class ECTesterApplet extends Applet { public static final short SW_SIG_VERIFY_FAIL = (short) 0x0ee1; public static final short SW_DH_DHC_MISMATCH = (short) 0x0ee2; public static final short SW_KEYPAIR_NULL = (short) 0x0ee3; + public static final short SW_KA_NULL = (short) 0x0ee4; + public static final short SW_SIGNATURE_NULL = (short) 0x0ee5; + public static final short SW_OBJECT_NULL = (short) 0x0ee6; private static final short ARRAY_LENGTH = (short) 0xff; @@ -558,7 +561,10 @@ public class ECTesterApplet extends Applet { secretLength = keyTester.testECDHC(priv, pub, ramArray, (short) 0, ramArray2, (short) 0, corruption); break; case EC_Consts.KA_BOTH: - secretLength = keyTester.testECDH_ECDHC(priv, pub, ramArray, (short) 0, ramArray2, (short) 0, corruption); + secretLength = keyTester.testBOTH(priv, pub, ramArray, (short) 0, ramArray2, (short) 0, corruption); + break; + case EC_Consts.KA_ANY: + secretLength = keyTester.testANY(priv, pub, ramArray, (short) 0, ramArray2, (short)0, corruption); break; default: ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED); diff --git a/src/cz/crcs/ectester/applet/ECUtil.java b/src/cz/crcs/ectester/applet/ECUtil.java index e7e4a8a..5d5c4d2 100644 --- a/src/cz/crcs/ectester/applet/ECUtil.java +++ b/src/cz/crcs/ectester/applet/ECUtil.java @@ -2,16 +2,34 @@ package cz.crcs.ectester.applet; import javacard.framework.ISO7816; import javacard.framework.ISOException; +import javacard.security.KeyAgreement; import javacard.security.KeyPair; +import javacard.security.Signature; /** * @author Jan Jancar johny@neuromancer.sk */ public class ECUtil { - static short nullCheck(KeyPair keyPair) { - if (keyPair == null) - ISOException.throwIt(ECTesterApplet.SW_KEYPAIR_NULL); + private static short nullCheck(Object obj, short sw) { + if (obj == null) + ISOException.throwIt(sw); return ISO7816.SW_NO_ERROR; } + + static short objCheck(Object obj) { + return nullCheck(obj, ECTesterApplet.SW_OBJECT_NULL); + } + + static short keypairCheck(KeyPair keyPair) { + return nullCheck(keyPair, ECTesterApplet.SW_KEYPAIR_NULL); + } + + static short kaCheck(KeyAgreement keyAgreement) { + return nullCheck(keyAgreement, ECTesterApplet.SW_KA_NULL); + } + + static short signCheck(Signature signature) { + return nullCheck(signature, ECTesterApplet.SW_SIGNATURE_NULL); + } } diff --git a/src/cz/crcs/ectester/applet/EC_Consts.java b/src/cz/crcs/ectester/applet/EC_Consts.java index 534d552..1334541 100644 --- a/src/cz/crcs/ectester/applet/EC_Consts.java +++ b/src/cz/crcs/ectester/applet/EC_Consts.java @@ -64,6 +64,7 @@ public class EC_Consts { public static final byte KA_ECDH = 0x01; public static final byte KA_ECDHC = 0x02; public static final byte KA_BOTH = KA_ECDH | KA_ECDHC; + public static final byte KA_ANY = 0x04; public static RandomData randomData = null; |
