aboutsummaryrefslogtreecommitdiff
path: root/common/src/main/java
diff options
context:
space:
mode:
authorJ08nY2024-06-14 14:19:26 +0200
committerJ08nY2024-06-14 14:19:26 +0200
commit99d463bd5f34ada3f6dcd92073960590b68afbb3 (patch)
treed2768d6e7c350640cb48990dcf3649b35c1aacf5 /common/src/main/java
parent2ecf1379142f580730cfaf7ceaca18aeb7af9b40 (diff)
downloadECTester-99d463bd5f34ada3f6dcd92073960590b68afbb3.tar.gz
ECTester-99d463bd5f34ada3f6dcd92073960590b68afbb3.tar.zst
ECTester-99d463bd5f34ada3f6dcd92073960590b68afbb3.zip
Diffstat (limited to 'common/src/main/java')
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java39
1 files changed, 36 insertions, 3 deletions
diff --git a/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java b/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java
index 907d75f..e7f138e 100644
--- a/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java
+++ b/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java
@@ -349,6 +349,39 @@ public class ECUtil {
return new KeyPair(pubkey, privkey);
}
+ /**
+ * Validate DER or PLAIN signature format.
+ *
+ * @throws IllegalArgumentException in case of invalid format.
+ * @param signature
+ * @param params
+ * @param hashAlgo
+ * @param sigType
+ */
+ public static void validateSignatureFormat(byte[] signature, ECParameterSpec params, String hashAlgo, String sigType) {
+ BigInteger n = params.getOrder();
+ try {
+ if (sigType.contains("CVC") || sigType.contains("PLAIN")) {
+ PlainDSAEncoding.INSTANCE.decode(n, signature);
+ } else {
+ StandardDSAEncoding.INSTANCE.decode(n, signature);
+ }
+ } catch (Exception e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ /**
+ * Recover the ECDSA signature nonce.
+ *
+ * @param signature
+ * @param data
+ * @param privkey
+ * @param params
+ * @param hashAlgo
+ * @param sigType
+ * @return The nonce.
+ */
public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, String hashAlgo, String sigType) {
// We do not know how to reconstruct those nonces so far.
// sigType.contains("ECKCDSA") || sigType.contains("ECNR") || sigType.contains("SM2")
@@ -381,9 +414,9 @@ public class ECUtil {
r = sigPair[0];
s = sigPair[1];
} else {
- ASN1Sequence seq = (ASN1Sequence)ASN1Primitive.fromByteArray(signature);
- r = ((ASN1Integer)seq.getObjectAt(0)).getValue();
- s = ((ASN1Integer)seq.getObjectAt(1)).getValue();
+ ASN1Sequence seq = (ASN1Sequence) ASN1Primitive.fromByteArray(signature);
+ r = ((ASN1Integer) seq.getObjectAt(0)).getValue();
+ s = ((ASN1Integer) seq.getObjectAt(1)).getValue();
}