aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/common/util/CardUtil.java10
-rw-r--r--src/cz/crcs/ectester/common/util/ECUtil.java26
-rw-r--r--src/cz/crcs/ectester/standalone/ECTesterStandalone.java2
-rw-r--r--src/cz/crcs/ectester/standalone/consts/SignatureIdent.java4
4 files changed, 33 insertions, 9 deletions
diff --git a/src/cz/crcs/ectester/common/util/CardUtil.java b/src/cz/crcs/ectester/common/util/CardUtil.java
index 5187c42..72963cf 100644
--- a/src/cz/crcs/ectester/common/util/CardUtil.java
+++ b/src/cz/crcs/ectester/common/util/CardUtil.java
@@ -51,15 +51,15 @@ public class CardUtil {
public static String getSigHashName(byte sigType) {
switch (sigType) {
case EC_Consts.Signature_ALG_ECDSA_SHA:
- return "SHA-1";
+ return "SHA1";
case EC_Consts.Signature_ALG_ECDSA_SHA_224:
- return "SHA-224";
+ return "SHA224";
case EC_Consts.Signature_ALG_ECDSA_SHA_256:
- return "SHA-256";
+ return "SHA256";
case EC_Consts.Signature_ALG_ECDSA_SHA_384:
- return "SHA-384";
+ return "SHA384";
case EC_Consts.Signature_ALG_ECDSA_SHA_512:
- return "SHA-512";
+ return "SHA512";
default:
return null;
}
diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java
index 0703423..e8c0a11 100644
--- a/src/cz/crcs/ectester/common/util/ECUtil.java
+++ b/src/cz/crcs/ectester/common/util/ECUtil.java
@@ -3,6 +3,7 @@ package cz.crcs.ectester.common.util;
import cz.crcs.ectester.applet.EC_Consts;
import cz.crcs.ectester.common.ec.*;
import cz.crcs.ectester.data.EC_Store;
+import cz.crcs.ectester.standalone.consts.SignatureIdent;
import org.bouncycastle.asn1.*;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.signers.PlainDSAEncoding;
@@ -347,15 +348,34 @@ public class ECUtil {
return new KeyPair(pubkey, privkey);
}
- public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, String hashType, String sigType) {
+ public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, String hashAlgo, String sigType) {
+ SignatureIdent sigIdent = SignatureIdent.get(hashAlgo + "with" + sigType);
+ if (sigIdent == null) {
+ return null;
+ }
+ return recoverSignatureNonce(signature, data, privkey, params, sigIdent);
+ }
+
+ public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, SignatureIdent sigIdent) {
+ // Parse the types out of SignatureIdent.
+ String hashAlgo = sigIdent.getHashAlgo();
+ String sigType = sigIdent.getSigType();
+ if (sigType == null) {
+ sigType = sigIdent.toString();
+ }
+ // We do not know how to reconstruct those nonces so far.
+ // sigType.contains("ECKCDSA") || sigType.contains("ECNR") || sigType.contains("SM2")
+ if (!sigType.contains("ECDSA")) {
+ return null;
+ }
try {
int bitSize = params.getOrder().bitLength();
// Hash the data.
byte[] hash;
- if (hashType == null || hashType.equals("NONE")) {
+ if (hashAlgo == null || hashAlgo.equals("NONE")) {
hash = data;
} else {
- MessageDigest md = MessageDigest.getInstance(hashType);
+ MessageDigest md = MessageDigest.getInstance(hashAlgo);
hash = md.digest(data);
}
// Trim bitSize of rightmost bits.
diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
index 4f07837..a26cc7c 100644
--- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -658,7 +658,7 @@ public class ECTesterStandalone {
kSpec = privkey.getParams();
}
if (kSpec != null) {
- BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey.getS(), kSpec, sigIdent.getHashAlgo(), sigIdent.getSigType());
+ BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey.getS(), kSpec, sigIdent);
if (kValue != null) {
k = ByteUtil.bytesToHex(kValue.toByteArray(), false);
}
diff --git a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
index 39b8031..c3913b7 100644
--- a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
+++ b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
@@ -127,6 +127,10 @@ public class SignatureIdent extends Ident {
return instance;
}
+ public String toString() {
+ return name;
+ }
+
public String getHashAlgo() {
return hash;
}