diff options
| author | J08nY | 2024-03-16 12:43:03 +0100 |
|---|---|---|
| committer | J08nY | 2024-03-16 12:43:03 +0100 |
| commit | 815bf7bfcd10943e7ed60a9900e8a9bacd0c896a (patch) | |
| tree | 2de0dc784e7cd680d449765be78a03e35657d786 | |
| parent | 65d00d2354f4b68919153e35c02e744b3defdb1b (diff) | |
| download | ECTester-815bf7bfcd10943e7ed60a9900e8a9bacd0c896a.tar.gz ECTester-815bf7bfcd10943e7ed60a9900e8a9bacd0c896a.tar.zst ECTester-815bf7bfcd10943e7ed60a9900e8a9bacd0c896a.zip | |
| -rw-r--r-- | src/cz/crcs/ectester/common/util/ECUtil.java | 30 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ECTesterReader.java | 2 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/standalone/ECTesterStandalone.java | 2 |
3 files changed, 12 insertions, 22 deletions
diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java index db1169e..0703423 100644 --- a/src/cz/crcs/ectester/common/util/ECUtil.java +++ b/src/cz/crcs/ectester/common/util/ECUtil.java @@ -5,6 +5,8 @@ import cz.crcs.ectester.common.ec.*; import cz.crcs.ectester.data.EC_Store; import org.bouncycastle.asn1.*; import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.signers.PlainDSAEncoding; +import org.bouncycastle.crypto.signers.StandardDSAEncoding; import java.io.ByteArrayInputStream; import java.io.FileInputStream; @@ -345,24 +347,7 @@ public class ECUtil { return new KeyPair(pubkey, privkey); } - public static byte[] toDERSignature(byte[] r, byte[] s) throws IOException { - ASN1Integer rInt = new ASN1Integer(r); - ASN1Integer sInt = new ASN1Integer(s); - DERSequence seq = new DERSequence(new ASN1Encodable[]{rInt, sInt}); - return seq.getEncoded(); - } - - public static BigInteger[] fromDERSignature(byte[] signature) throws IOException { - ByteArrayInputStream inputStream = new ByteArrayInputStream(signature); - ASN1InputStream asn1InputStream = new ASN1InputStream(inputStream); - ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(asn1InputStream.readObject()); - - ASN1Integer r = (ASN1Integer) asn1Sequence.getObjectAt(0); - ASN1Integer s = (ASN1Integer) asn1Sequence.getObjectAt(1); - return new BigInteger[]{r.getPositiveValue(), s.getPositiveValue()}; - } - - public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, String hashType) { + public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, String hashType, String sigType) { try { int bitSize = params.getOrder().bitLength(); // Hash the data. @@ -380,8 +365,13 @@ public class ECUtil { hashInt = hashInt.shiftRight(hashBits - bitSize); } - // Parse DERSignature - BigInteger[] sigPair = fromDERSignature(signature); + // Parse signature + BigInteger[] sigPair; + if (sigType.contains("CVC") || sigType.contains("PLAIN")) { + sigPair = PlainDSAEncoding.INSTANCE.decode(params.getOrder(), signature); + } else { + sigPair = StandardDSAEncoding.INSTANCE.decode(params.getOrder(), signature); + } BigInteger r = sigPair[0]; BigInteger s = sigPair[1]; diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java index 02c6558..fdfb4cb 100644 --- a/src/cz/crcs/ectester/reader/ECTesterReader.java +++ b/src/cz/crcs/ectester/reader/ECTesterReader.java @@ -782,7 +782,7 @@ public class ECTesterReader { String k = ""; if (actualCurve != null) { ECParameterSpec params = actualCurve.toSpec(); - BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey, params, CardUtil.getSigHashName(cfg.ECDSAType)); + BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey, params, CardUtil.getSigHashName(cfg.ECDSAType), "ECDSA"); if (kValue != null) { k = ByteUtil.bytesToHex(kValue.toByteArray(), false); } diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java index 84e0ee9..4f07837 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()); + BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey.getS(), kSpec, sigIdent.getHashAlgo(), sigIdent.getSigType()); if (kValue != null) { k = ByteUtil.bytesToHex(kValue.toByteArray(), false); } |
