aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/applet/AppletBase.java18
-rw-r--r--src/cz/crcs/ectester/common/util/CardUtil.java27
-rw-r--r--src/cz/crcs/ectester/common/util/ECUtil.java2
-rw-r--r--src/cz/crcs/ectester/reader/ECTesterReader.java6
-rw-r--r--src/cz/crcs/ectester/reader/command/Command.java2
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