summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2016-11-30 00:23:29 +0100
committerJ08nY2016-11-30 00:23:29 +0100
commit2a455c2a12f69d5dc81d2b1f78db011e92d7f754 (patch)
treeec02c4f1d7e716675a0ac647014118868741e030
parent022f37b399583053fc256b9fcab397f828309ebf (diff)
downloadECTester-2a455c2a12f69d5dc81d2b1f78db011e92d7f754.tar.gz
ECTester-2a455c2a12f69d5dc81d2b1f78db011e92d7f754.tar.zst
ECTester-2a455c2a12f69d5dc81d2b1f78db011e92d7f754.zip
-rw-r--r--!uploader/simpleECC.capbin18068 -> 18215 bytes
-rw-r--r--dist/SimpleAPDU.jarbin3078811 -> 3078963 bytes
-rw-r--r--src/applets/ECKeyTester.java22
-rw-r--r--src/applets/SimpleECCApplet.java12
4 files changed, 20 insertions, 14 deletions
diff --git a/!uploader/simpleECC.cap b/!uploader/simpleECC.cap
index d9c360b..e76168c 100644
--- a/!uploader/simpleECC.cap
+++ b/!uploader/simpleECC.cap
Binary files differ
diff --git a/dist/SimpleAPDU.jar b/dist/SimpleAPDU.jar
index 9bb85ff..09b7e73 100644
--- a/dist/SimpleAPDU.jar
+++ b/dist/SimpleAPDU.jar
Binary files differ
diff --git a/src/applets/ECKeyTester.java b/src/applets/ECKeyTester.java
index acfb64e..9dd0fd5 100644
--- a/src/applets/ECKeyTester.java
+++ b/src/applets/ECKeyTester.java
@@ -49,7 +49,7 @@ public class ECKeyTester {
return result;
}
- private short testDH(KeyAgreement ka, ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
+ private short testKA(KeyAgreement ka, ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
short result = ISO7816.SW_NO_ERROR;
try {
ka.init(privateKey);
@@ -64,19 +64,23 @@ public class ECKeyTester {
return result;
}
- private short testDH_validPoint(KeyAgreement ka, ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
- return testDH(ka, privateKey, pubkeyBuffer, pubkeyOffset, pubkeyLength, outputBuffer, outputOffset);
+ private short testKA_validPoint(KeyAgreement ka, ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
+ return testKA(ka, privateKey, pubkeyBuffer, pubkeyOffset, pubkeyLength, outputBuffer, outputOffset);
}
- private short testDH_invalidPoint(KeyAgreement ka, ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
+ private short testKA_invalidPoint(KeyAgreement ka, ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
pubkeyBuffer[(short)(pubkeyLength - 2)] += 0xcc;
pubkeyBuffer[(short)(pubkeyLength - 3)] += 0xcc;
- short result = testDH(ka, privateKey, pubkeyBuffer, pubkeyOffset, pubkeyLength, outputBuffer, outputOffset);
+ short result = testKA(ka, privateKey, pubkeyBuffer, pubkeyOffset, pubkeyLength, outputBuffer, outputOffset);
pubkeyBuffer[(short)(pubkeyLength - 2)] -= 0xcc;
pubkeyBuffer[(short)(pubkeyLength - 3)] -= 0xcc;
return result;
}
+ public short testECDH(ECPrivateKey privateKey, byte[] pubkeyBuffer, short pubkeyOffset, short pubkeyLength, byte[] outputBuffer, short outputOffset) {
+ return testKA(ecdhKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, pubkeyLength, outputBuffer, outputOffset);
+ }
+
/**
* Tests ECDH secret generation with given {@code privateKey} and {@code publicKey}.
* Uses {@code pubkeyBuffer} at {@code pubkeyOffset} for computations.
@@ -92,12 +96,12 @@ public class ECKeyTester {
**/
public short testECDH_validPoint(ECPrivateKey privateKey, ECPublicKey publicKey, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset) {
short length = publicKey.getW(pubkeyBuffer, pubkeyOffset);
- return testDH_validPoint(ecdhKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
+ return testKA_validPoint(ecdhKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
}
public short testECDH_invalidPoint(ECPrivateKey privateKey, ECPublicKey publicKey, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset) {
short length = publicKey.getW(pubkeyBuffer, pubkeyOffset);
- return testDH_invalidPoint(ecdhKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
+ return testKA_invalidPoint(ecdhKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
}
@@ -116,12 +120,12 @@ public class ECKeyTester {
*/
public short testECDHC_validPoint(ECPrivateKey privateKey, ECPublicKey publicKey, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset) {
short length = publicKey.getW(pubkeyBuffer, pubkeyOffset);
- return testDH_validPoint(ecdhcKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
+ return testKA_validPoint(ecdhcKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
}
public short testECDHC_invalidPoint(ECPrivateKey privateKey, ECPublicKey publicKey, byte[] pubkeyBuffer, short pubkeyOffset, byte[] outputBuffer, short outputOffset) {
short length = publicKey.getW(pubkeyBuffer, pubkeyOffset);
- return testDH_invalidPoint(ecdhcKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
+ return testKA_invalidPoint(ecdhcKeyAgreement, privateKey, pubkeyBuffer, pubkeyOffset, length, outputBuffer, outputOffset);
}
/**
diff --git a/src/applets/SimpleECCApplet.java b/src/applets/SimpleECCApplet.java
index 8043153..d653c10 100644
--- a/src/applets/SimpleECCApplet.java
+++ b/src/applets/SimpleECCApplet.java
@@ -358,7 +358,9 @@ public class SimpleECCApplet extends Applet {
bufferOffset++;
sw = SW_SKIPPED;
if ((testFlags & FLAG_ECTEST_SET_ANOMALOUSCURVE) != (short) 0) {
- sw = ecKeyGenerator.setCustomCurve(EC_Consts.getAnomalousCurve(keyClass, keyLen), m_ramArray, (short) 0);
+ if (keyClass == KeyPair.ALG_EC_FP) { //Only FP supported at the moment
+ sw = ecKeyGenerator.setCustomCurve(EC_Consts.getAnomalousCurve(keyClass, keyLen), m_ramArray, (short) 0);
+ }
if (sw != ISO7816.SW_NO_ERROR) {
testFlags &= ~FLAG_ECTEST_GENERATE_KEYPAIR_ANOMALOUSCUVE;
}
@@ -375,6 +377,9 @@ public class SimpleECCApplet extends Applet {
sw = SW_SKIPPED;
if ((testFlags & FLAG_ECTEST_GENERATE_KEYPAIR_ANOMALOUSCUVE) != (short) 0) {
sw = ecKeyGenerator.generatePair();
+ if (sw != ISO7816.SW_NO_ERROR) {
+ testFlags &= ~FLAG_ECTEST_ECDH_AGREEMENT_SMALL_DEGREE_POINT;
+ }
}
Util.setShort(buffer, bufferOffset, sw);
bufferOffset += 2;
@@ -387,12 +392,9 @@ public class SimpleECCApplet extends Applet {
bufferOffset++;
sw = SW_SKIPPED;
if ((testFlags & FLAG_ECTEST_ECDH_AGREEMENT_SMALL_DEGREE_POINT) != (short) 0) {
- //TODO: this needs refactor, just quickly to see if it works
short pubLength = EC_Consts.getCurveParameter(EC_Consts.getAnomalousCurve(keyClass,keyLen), EC_Consts.PARAMETER_W, m_ramArray, (short) 0);
- ecKeyGenerator.setParameter(ECKeyGenerator.KEY_PUBLIC, EC_Consts.PARAMETER_W, m_ramArray, (short)0, pubLength);
- ecPubKey = ecKeyGenerator.getPublicKey();
ecPrivKey = ecKeyGenerator.getPrivateKey();
- sw = ecKeyTester.testECDH_validPoint(ecPrivKey, ecPubKey, m_ramArray, (short) 0, m_ramArray2, (short) 1);
+ sw = ecKeyTester.testECDH(ecPrivKey, m_ramArray, (short) 0, pubLength, m_ramArray2, (short) 1);
}
Util.setShort(buffer, bufferOffset, sw);
bufferOffset += 2;