diff options
| author | J08nY | 2024-03-16 13:21:18 +0100 |
|---|---|---|
| committer | J08nY | 2024-03-16 13:21:18 +0100 |
| commit | cbd144a8e890ffb0f2dabd7093cf76d1cd8c5240 (patch) | |
| tree | 497299f984e639b67412e424a04dd446fd8a2e23 /src | |
| parent | 815bf7bfcd10943e7ed60a9900e8a9bacd0c896a (diff) | |
| download | ECTester-cbd144a8e890ffb0f2dabd7093cf76d1cd8c5240.tar.gz ECTester-cbd144a8e890ffb0f2dabd7093cf76d1cd8c5240.tar.zst ECTester-cbd144a8e890ffb0f2dabd7093cf76d1cd8c5240.zip | |
Diffstat (limited to 'src')
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; } |
