aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorquapka2024-06-21 16:31:37 +0200
committerquapka2024-06-21 16:31:37 +0200
commitada61982cc70a2c72a6fc765dc9b4a9c01202a27 (patch)
treed92bee42106e850d4da90ad7174ac609ca175eda /common
parentc051ef2ecfa92723d6dea675ac8c345be92cf165 (diff)
parentc112d3e49bbbbf33cc70d12d196e109543c19a3c (diff)
downloadECTester-ada61982cc70a2c72a6fc765dc9b4a9c01202a27.tar.gz
ECTester-ada61982cc70a2c72a6fc765dc9b4a9c01202a27.tar.zst
ECTester-ada61982cc70a2c72a6fc765dc9b4a9c01202a27.zip
Merge branch 'master' into build-with-nix
Diffstat (limited to 'common')
-rw-r--r--common/build.gradle.kts2
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/ec/CustomECFieldFp.java2
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/output/BaseTextTestWriter.java35
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/output/BaseXMLTestWriter.java10
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java10
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/output/TeeTestWriter.java14
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/output/TestWriter.java24
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java2
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java115
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/util/FileUtil.java11
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/cofactor/cofactor128p65535.csv2
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/cofactor/keys.xml2
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/composite/composite192_pq2.csv2
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/schema.xsd1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/curves.xml42
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo192.csv1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo224.csv1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo256.csv1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo384.csv1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo512.csv1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv1
-rw-r--r--common/src/main/resources/cz/crcs/ectester/data/wrong/results.xml203
22 files changed, 427 insertions, 56 deletions
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
index 0aca7fb..1aff0d7 100644
--- a/common/build.gradle.kts
+++ b/common/build.gradle.kts
@@ -23,5 +23,5 @@ dependencies {
}
java {
- sourceCompatibility = JavaVersion.VERSION_11
+ sourceCompatibility = JavaVersion.VERSION_15
} \ No newline at end of file
diff --git a/common/src/main/java/cz/crcs/ectester/common/ec/CustomECFieldFp.java b/common/src/main/java/cz/crcs/ectester/common/ec/CustomECFieldFp.java
index eafcb72..1fe6eb0 100644
--- a/common/src/main/java/cz/crcs/ectester/common/ec/CustomECFieldFp.java
+++ b/common/src/main/java/cz/crcs/ectester/common/ec/CustomECFieldFp.java
@@ -19,7 +19,7 @@ public class CustomECFieldFp extends ECFieldFp {
@Override
public int getFieldSize() {
- return p.bitCount();
+ return p.bitLength();
}
@Override
diff --git a/common/src/main/java/cz/crcs/ectester/common/output/BaseTextTestWriter.java b/common/src/main/java/cz/crcs/ectester/common/output/BaseTextTestWriter.java
index 5c449db..538539b 100644
--- a/common/src/main/java/cz/crcs/ectester/common/output/BaseTextTestWriter.java
+++ b/common/src/main/java/cz/crcs/ectester/common/output/BaseTextTestWriter.java
@@ -51,11 +51,13 @@ public abstract class BaseTextTestWriter implements TestWriter {
private String testString(Test t, String prefix, int index) {
boolean compound = t instanceof CompoundTest;
+ boolean cont = compound ? ((CompoundTest) t).getStartedTests().length > 0 : false;
+ boolean root = prefix.equals("");
Result result = t.getResult();
String line = "";
- if (prefix.equals("")) {
+ if (root) {
char[] charLine = new char[BASE_WIDTH + 24];
new String(new char[BASE_WIDTH + 24]).replace("\0", "━").getChars(0, charLine.length - 1, charLine, 0);
charLine[0] = '■';
@@ -68,10 +70,20 @@ public abstract class BaseTextTestWriter implements TestWriter {
StringBuilder out = new StringBuilder();
out.append(t.ok() ? Colors.ok(" OK ") : Colors.error("NOK "));
- out.append(compound ? (prefix.equals("") ? "╋ " : "┳ ") : "━ ");
+ String marker;
+ if (compound) {
+ if (root) {
+ marker = cont ? "╋" : "┻";
+ } else {
+ marker = cont ? "┳" : "━";
+ }
+ } else {
+ marker = "━";
+ }
+ out.append(marker + " ");
int width = BASE_WIDTH - (prefix.length() + 6);
String widthSpec = "%-" + width + "s";
- String desc = ((prefix.equals("")) ? "(" + index + ") " : "") + t.getDescription();
+ String desc = ((root) ? "(" + index + ") " : "") + t.getDescription();
out.append(String.format(widthSpec, desc));
out.append(" ┃ ");
Colors.Foreground valueColor;
@@ -114,6 +126,23 @@ public abstract class BaseTextTestWriter implements TestWriter {
}
@Override
+ public void beginTest(Test t) {
+ if (System.console() != null) {
+ output.print("Running ▶ " + t.getDescription());
+ output.flush();
+ }
+ }
+
+
+ @Override
+ public void endTest(Test t) {
+ if (System.console() != null) {
+ output.print("\33[2K\r");
+ output.flush();
+ }
+ }
+
+ @Override
public void outputTest(Test t, int index) {
if (!t.hasRun())
return;
diff --git a/common/src/main/java/cz/crcs/ectester/common/output/BaseXMLTestWriter.java b/common/src/main/java/cz/crcs/ectester/common/output/BaseXMLTestWriter.java
index 53970dd..5157ef0 100644
--- a/common/src/main/java/cz/crcs/ectester/common/output/BaseXMLTestWriter.java
+++ b/common/src/main/java/cz/crcs/ectester/common/output/BaseXMLTestWriter.java
@@ -116,6 +116,16 @@ public abstract class BaseXMLTestWriter implements TestWriter {
}
@Override
+ public void beginTest(Test t) {
+
+ }
+
+ @Override
+ public void endTest(Test t) {
+
+ }
+
+ @Override
public void outputTest(Test t, int index) {
if (!t.hasRun())
return;
diff --git a/common/src/main/java/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java b/common/src/main/java/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java
index e054563..c3a42ea 100644
--- a/common/src/main/java/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java
+++ b/common/src/main/java/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java
@@ -92,6 +92,16 @@ public abstract class BaseYAMLTestWriter implements TestWriter {
}
@Override
+ public void beginTest(Test t) {
+
+ }
+
+ @Override
+ public void endTest(Test t) {
+
+ }
+
+ @Override
public void outputTest(Test t, int index) {
if (!t.hasRun())
return;
diff --git a/common/src/main/java/cz/crcs/ectester/common/output/TeeTestWriter.java b/common/src/main/java/cz/crcs/ectester/common/output/TeeTestWriter.java
index 58a0a15..7635644 100644
--- a/common/src/main/java/cz/crcs/ectester/common/output/TeeTestWriter.java
+++ b/common/src/main/java/cz/crcs/ectester/common/output/TeeTestWriter.java
@@ -21,6 +21,20 @@ public class TeeTestWriter implements TestWriter {
}
@Override
+ public void beginTest(Test t) {
+ for (TestWriter writer : writers) {
+ writer.beginTest(t);
+ }
+ }
+
+ @Override
+ public void endTest(Test t) {
+ for (TestWriter writer : writers) {
+ writer.endTest(t);
+ }
+ }
+
+ @Override
public void outputTest(Test t, int index) {
for (TestWriter writer : writers) {
writer.outputTest(t, index);
diff --git a/common/src/main/java/cz/crcs/ectester/common/output/TestWriter.java b/common/src/main/java/cz/crcs/ectester/common/output/TestWriter.java
index 67aeccb..7368c0a 100644
--- a/common/src/main/java/cz/crcs/ectester/common/output/TestWriter.java
+++ b/common/src/main/java/cz/crcs/ectester/common/output/TestWriter.java
@@ -19,20 +19,32 @@ public interface TestWriter {
void begin(TestSuite suite);
/**
- * @param t
- * @param index
+ * Begin the test (before it is run).
+ * @param t Test to begin output of.
+ */
+ void beginTest(Test t);
+
+ /**
+ * End the test (after it is run, or errored out).
+ * @param t Test to end output of.
+ */
+ void endTest(Test t);
+
+ /**
+ * @param t Test to output.
+ * @param index Index of the test.
*/
void outputTest(Test t, int index);
/**
- * @param t
- * @param cause
- * @param index
+ * @param t Test to output the error from.
+ * @param cause Throwable to output.
+ * @param index Index of the test.
*/
void outputError(Test t, Throwable cause, int index);
/**
- *
+ * End writing the TestSuite.
*/
void end();
}
diff --git a/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java b/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java
index b12680a..091b008 100644
--- a/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java
+++ b/common/src/main/java/cz/crcs/ectester/common/test/TestSuite.java
@@ -55,7 +55,9 @@ public abstract class TestSuite {
*/
protected <T extends Test> T runTest(T t) {
running = t;
+ writer.beginTest(t);
t.run();
+ writer.endTest(t);
running = null;
return t;
}
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 f9be536..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
@@ -2,20 +2,25 @@ package cz.crcs.ectester.common.util;
import cz.crcs.ectester.common.ec.*;
import cz.crcs.ectester.data.EC_Store;
+import org.bouncycastle.asn1.ASN1OctetString;
+import org.bouncycastle.asn1.ASN1Integer;
+import org.bouncycastle.asn1.ASN1Primitive;
+import org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.signers.PlainDSAEncoding;
import org.bouncycastle.crypto.signers.StandardDSAEncoding;
+import org.bouncycastle.jcajce.interfaces.EdDSAPrivateKey;
+import org.bouncycastle.jcajce.interfaces.EdDSAPublicKey;
+import org.bouncycastle.jcajce.interfaces.XDHPrivateKey;
+import org.bouncycastle.jcajce.interfaces.XDHPublicKey;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
-import java.security.KeyPair;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.interfaces.ECKey;
-import java.security.interfaces.ECPrivateKey;
-import java.security.interfaces.ECPublicKey;
+import java.security.*;
+import java.security.interfaces.*;
import java.security.spec.*;
import java.util.LinkedList;
import java.util.List;
@@ -344,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")
@@ -369,14 +407,18 @@ public class ECUtil {
}
// Parse signature
- BigInteger[] sigPair;
+ BigInteger r;
+ BigInteger s;
if (sigType.contains("CVC") || sigType.contains("PLAIN")) {
- sigPair = PlainDSAEncoding.INSTANCE.decode(n, signature);
+ BigInteger[] sigPair = PlainDSAEncoding.INSTANCE.decode(n, signature);
+ r = sigPair[0];
+ s = sigPair[1];
} else {
- sigPair = StandardDSAEncoding.INSTANCE.decode(n, signature);
+ ASN1Sequence seq = (ASN1Sequence) ASN1Primitive.fromByteArray(signature);
+ r = ((ASN1Integer) seq.getObjectAt(0)).getValue();
+ s = ((ASN1Integer) seq.getObjectAt(1)).getValue();
}
- BigInteger r = sigPair[0];
- BigInteger s = sigPair[1];
+
BigInteger rd = privkey.multiply(r).mod(n);
BigInteger hrd = hashInt.add(rd).mod(n);
@@ -456,6 +498,46 @@ public class ECUtil {
return null;
}
+ public static byte[] pubkeyToBytes(PublicKey pubkey) {
+ if (pubkey instanceof ECPublicKey) {
+ ECPublicKey ecPublicKey = (ECPublicKey) pubkey;
+ return ECUtil.toX962Uncompressed(ecPublicKey.getW(), ecPublicKey.getParams());
+ } else if (pubkey instanceof XECPublicKey) {
+ XECPublicKey xedPublicKey = (XECPublicKey) pubkey;
+ return xedPublicKey.getU().toByteArray();
+ } else if (pubkey instanceof EdECPublicKey) {
+ EdECPublicKey edECPublicKey = (EdECPublicKey) pubkey;
+ return edECPublicKey.getPoint().getY().toByteArray();
+ } else if (pubkey instanceof XDHPublicKey) {
+ XDHPublicKey xdhPublicKey = (XDHPublicKey) pubkey;
+ return xdhPublicKey.getU().toByteArray();
+ // Special-case BouncyCastle XDH
+ } else if (pubkey instanceof EdDSAPublicKey) {
+ EdDSAPublicKey edDSAPublicKey = (EdDSAPublicKey) pubkey;
+ // Special-case BouncyCastle EdDSA
+ return edDSAPublicKey.getPointEncoding();
+ }
+ return null;
+ }
+
+ public static byte[] privkeyToBytes(PrivateKey privkey) {
+ if (privkey instanceof ECPrivateKey) {
+ ECPrivateKey ecPrivateKey = (ECPrivateKey) privkey;
+ return ecPrivateKey.getS().toByteArray();
+ } else if (privkey instanceof XECPrivateKey) {
+ XECPrivateKey xecPrivateKey = (XECPrivateKey) privkey;
+ return xecPrivateKey.getScalar().get();
+ } else if (privkey instanceof EdECPrivateKey) {
+ EdECPrivateKey edECPrivateKey = (EdECPrivateKey) privkey;
+ return edECPrivateKey.getBytes().get();
+ } else if (privkey instanceof XDHPrivateKey || privkey instanceof EdDSAPrivateKey) {
+ // Special-case BouncyCastle XDH and EdDSA
+ PrivateKeyInfo xpkinfo = PrivateKeyInfo.getInstance(privkey.getEncoded());
+ return ASN1OctetString.getInstance(xpkinfo.getPrivateKey().getOctets()).getOctets();
+ }
+ return null;
+ }
+
public static boolean equalKeyPairParameters(ECPrivateKey priv, ECPublicKey pub) {
if (priv == null || pub == null) {
return false;
@@ -465,4 +547,15 @@ public class ECUtil {
priv.getParams().getGenerator().equals(pub.getParams().getGenerator()) &&
priv.getParams().getOrder().equals(pub.getParams().getOrder());
}
+
+ public static boolean equalECParameterSpec(ECParameterSpec left, ECParameterSpec right) {
+ if (left == null || right == null) {
+ return false;
+ }
+
+ return left.getCofactor() == right.getCofactor() &&
+ left.getCurve().equals(right.getCurve()) &&
+ left.getGenerator().equals(right.getGenerator()) &&
+ left.getOrder().equals(right.getOrder());
+ }
}
diff --git a/common/src/main/java/cz/crcs/ectester/common/util/FileUtil.java b/common/src/main/java/cz/crcs/ectester/common/util/FileUtil.java
index e6e319b..da682b6 100644
--- a/common/src/main/java/cz/crcs/ectester/common/util/FileUtil.java
+++ b/common/src/main/java/cz/crcs/ectester/common/util/FileUtil.java
@@ -81,6 +81,17 @@ public class FileUtil {
return true;
}
+ public static boolean write(String resourcePath, Path outPath) throws IOException {
+ URL reqURL = FileUtil.class.getResource(resourcePath);
+ if (reqURL == null) {
+ return false;
+ }
+ URLConnection reqConn = reqURL.openConnection();
+ Files.copy(reqConn.getInputStream(), outPath, StandardCopyOption.REPLACE_EXISTING);
+ reqConn.getInputStream().close();
+ return true;
+ }
+
public static Path getLibDir() {
return getAppData().resolve("ECTesterStandalone");
}
diff --git a/common/src/main/resources/cz/crcs/ectester/data/cofactor/cofactor128p65535.csv b/common/src/main/resources/cz/crcs/ectester/data/cofactor/cofactor128p65535.csv
index 54da6cc..fb16cdb 100644
--- a/common/src/main/resources/cz/crcs/ectester/data/cofactor/cofactor128p65535.csv
+++ b/common/src/main/resources/cz/crcs/ectester/data/cofactor/cofactor128p65535.csv
@@ -1 +1 @@
-0xdd94e89ef3fba74afc2a67cb91546a93,0x6cf4828ab4960df2b9fcab3990e3959a,0x80a5c32206c83f769c5ed3e4f5b2ea4e,0xd7a4bb4b7e9ad9e81895caeaeac8b739,0x45ebc51cf353974b02b36b9912de041b,0x0000dd95c634ba30617af48fd4eb321b,0xffff \ No newline at end of file
+0xdd94e89ef3fba74afc2a67cb91546a93,0x6cf4828ab4960df2b9fcab3990e3959a,0x80a5c32206c83f769c5ed3e4f5b2ea4e,0x91e251594dab368b04d7dd6d9b99fdef,0xa7da97b3ba62ac554f7202d4f0348133,0x0000dd95c634ba30617af48fd4eb321b,0xffff \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/cofactor/keys.xml b/common/src/main/resources/cz/crcs/ectester/data/cofactor/keys.xml
index d6058f0..1b5ec4b 100644
--- a/common/src/main/resources/cz/crcs/ectester/data/cofactor/keys.xml
+++ b/common/src/main/resources/cz/crcs/ectester/data/cofactor/keys.xml
@@ -668,7 +668,7 @@
</pubkey>
<pubkey>
<id>pq/cofactor192/1</id>
- <inline>0x6366613b66339fa580f390d630ccf9b535437229aa8b61cd,0x1b975fa3848bd68f34f6a08b7cf190bcaeaf9782270e2413</inline>
+ <inline>0x28f5b96b08f9dbe661472dbf8e5925b944e42ac5fdfdb2da,0x227e8b2a9b07d1cd67211d4b933bf43eefbb7140e5a65dca</inline>
<curve>composite/pq/composite192/1</curve>
<desc>cofactor order = 0x00000000000000000000035efd8bad55038e6bd22db8b805</desc>
</pubkey>
diff --git a/common/src/main/resources/cz/crcs/ectester/data/composite/composite192_pq2.csv b/common/src/main/resources/cz/crcs/ectester/data/composite/composite192_pq2.csv
index 33fe0f3..c92dcb2 100644
--- a/common/src/main/resources/cz/crcs/ectester/data/composite/composite192_pq2.csv
+++ b/common/src/main/resources/cz/crcs/ectester/data/composite/composite192_pq2.csv
@@ -1 +1 @@
-0xa261fff62647eebf810a404f0c80a971dd7c7838fdc52b5b,0x87502ebb62d26e1eca06c434f8ef069dfb2c287d6183750c,0x4ad6ce1f16e1bfc3d40f0027d787aeadb53846d69099a883,0x6366613b66339fa580f390d630ccf9b535437229aa8b61cd,0x1b975fa3848bd68f34f6a08b7cf190bcaeaf9782270e2413,0x00000000000000000000035efd8bad55038e6bd22db8b805,0x01 \ No newline at end of file
+0xa261fff62647eebf810a404f0c80a971dd7c7838fdc52b5b,0x87502ebb62d26e1eca06c434f8ef069dfb2c287d6183750c,0x4ad6ce1f16e1bfc3d40f0027d787aeadb53846d69099a883,0x16a5b79035a1e561aae737dc7f32f3c03d5f03f73bd405e4,0x3ddad60cc20b136913dcab69a30e5b71e0bf11f859658524,0x00000000000000000000035efd8bad55038e6bd22db8b805,0x01 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/schema.xsd b/common/src/main/resources/cz/crcs/ectester/data/schema.xsd
index 99c9b76..245aa9a 100644
--- a/common/src/main/resources/cz/crcs/ectester/data/schema.xsd
+++ b/common/src/main/resources/cz/crcs/ectester/data/schema.xsd
@@ -82,6 +82,7 @@
<xs:simpleType name="sigType">
<xs:restriction base="xs:string">
+ <xs:enumeration value="*"/>
<xs:enumeration value="SHA1"/>
<xs:enumeration value="SHA224"/>
<xs:enumeration value="SHA256"/>
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/curves.xml b/common/src/main/resources/cz/crcs/ectester/data/wrong/curves.xml
index 2a51474..9087940 100644
--- a/common/src/main/resources/cz/crcs/ectester/data/wrong/curves.xml
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/curves.xml
@@ -92,4 +92,46 @@
<file>wrongt571.csv</file>
<desc>The field polynomial is not irreducible in F_2^571[x].</desc>
</curve>
+ <curve>
+ <id>pseudo192</id>
+ <bits>192</bits>
+ <field>prime</field>
+ <file>pseudo192.csv</file>
+ <desc>The field is not prime (but a Carmichael pseudoprime, see https://github.com/crocs-muni/fooling-primality-tests/).</desc>
+ </curve>
+ <curve>
+ <id>pseudo224</id>
+ <bits>224</bits>
+ <field>prime</field>
+ <file>pseudo224.csv</file>
+ <desc>The field is not prime (but a Carmichael pseudoprime, see https://github.com/crocs-muni/fooling-primality-tests/).</desc>
+ </curve>
+ <curve>
+ <id>pseudo256</id>
+ <bits>256</bits>
+ <field>prime</field>
+ <file>pseudo256.csv</file>
+ <desc>The field is not prime (but a Carmichael pseudoprime, see https://github.com/crocs-muni/fooling-primality-tests/).</desc>
+ </curve>
+ <curve>
+ <id>pseudo384</id>
+ <bits>384</bits>
+ <field>prime</field>
+ <file>pseudo384.csv</file>
+ <desc>The field is not prime (but a Carmichael pseudoprime, see https://github.com/crocs-muni/fooling-primality-tests/).</desc>
+ </curve>
+ <curve>
+ <id>pseudo512</id>
+ <bits>512</bits>
+ <field>prime</field>
+ <file>pseudo512.csv</file>
+ <desc>The field is not prime (but a Carmichael pseudoprime, see https://github.com/crocs-muni/fooling-primality-tests/).</desc>
+ </curve>
+ <curve>
+ <id>pseudo521</id>
+ <bits>521</bits>
+ <field>prime</field>
+ <file>pseudo521.csv</file>
+ <desc>The field is not prime (but a Carmichael pseudoprime, see https://github.com/crocs-muni/fooling-primality-tests/).</desc>
+ </curve>
</curves> \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo192.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo192.csv
new file mode 100644
index 0000000..c98e63b
--- /dev/null
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo192.csv
@@ -0,0 +1 @@
+0xf7601c102e5605a4510b865b28287060ae6002956371b4f7,0x429c8107ce7063a45234aeadd30c021acc6bdaff6531af7d,0x9637284c287bc5c97c574dc8f91d03e5f58f516bfdb77601,0x1f7fe14d44df79fcfbd9225173d39784374bc08a80a8dc40,0xdb2ff34213f3214f1aa4e273e48efaf8362292f4e0ed0b9f,0xf7601c102487dad5b1e6fbcb61193546c31f16a71903f85d,0x0001 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo224.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo224.csv
new file mode 100644
index 0000000..cf781d6
--- /dev/null
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo224.csv
@@ -0,0 +1 @@
+0xf54255f919b6fec4c9c9788c0dc432b8a50b7331e836a4fff9c5bc7f,0x270b8817bc48b1d56401abf8964e6fc785771d2a26130f8a572682f1,0xe28250a72ac83dd064b08cb83e8d2b678330d4dfd5193179088cb5cb,0xd0a2d469eda6a9c5bf9568459a02e2e65901f907f766891ad2a323cd,0x580e1fbfb94793f5880e36d6a2229c2fb082db0f3270f0b3ec4ce2a8,0xf54255f9581e15675cedd50065fa01410df6bfb6e17a2c69747246e5,0x0001 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo256.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo256.csv
new file mode 100644
index 0000000..ef14dc4
--- /dev/null
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo256.csv
@@ -0,0 +1 @@
+0x89ae5b1ffa52bd5a6e1e9627d2fef2b1658f5ae93ce0dabecead0f8cf294909b,0x35fe79c1bdac3f16080f6f763f1947c97fe841510d807e632fdb0abca45b539d,0x1da2a1152d54cc6d19da48bfbd8c31f6d7aba41fdbb744ef60c3ffb0a1b1b3cb,0x6ef9419070b90eaec6914e8c4809c3fe1c868b9857874abc4929321a021ef679,0x2391630ddc525199e2f65883d35623545cccd58496caa8b2e3fb8a84df6996e6,0x89ae5b1ffad4189f719eb3801d3a65986202d48cbab151d32b992e92dd589161,0x0001 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo384.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo384.csv
new file mode 100644
index 0000000..ac1f589
--- /dev/null
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo384.csv
@@ -0,0 +1 @@
+0xbddc881aa619fc8a2f4dedb315f0b55c8c0cca4d7aac4e595c96504eb2e8860489bd824340028f49ca90272998729fe7,0x1595f6abcbb9bea724adb7df2129472f9f4d7ed83e2c9e7a52dc8cd12ef36b7a209f46afa553901d7ecf0d98618dabcf,0xb6bf3f61901462bf181b096d61aa7ee00310d110f739cbf95fccf7faa7f529052ee8758210a9d6c10de2790e4ab7f1e3,0x6525e4141411e472233e794116f285835ed743c77d21cac612c9b8a5000fa58407754ff242671f4ca8478b6bece46ad9,0x335f77556d279a9fd8701c26f14a13646b927d3ab86c165fafb5e3ee08f3797b819eb0eea2e6e3a569c63271c406d3bb,0xbddc881aa619fc85d46958aae14456922f956e5a8bf1d5f3f889d9d14ff5ae4ef373c260215503b442e5a6f88e1b609d,0x0001 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo512.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo512.csv
new file mode 100644
index 0000000..3562558
--- /dev/null
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo512.csv
@@ -0,0 +1 @@
+0xd7489dfb959fd93de1b90bcdd949ea38d11c7e3637ab48f56fb1b2b34e6593fe3cf189e9c2f3166ddefc270747002d1914c558a23dceab08875e75a6b3b3c88f,0x15ae03d8fdf64becd183b64e8a235322be8342124a3e88ae8691ac7e635f424afad39da56169deb4ee25bfb4538054f6208f1bcb7abff14d6ea61ae9f8d2349b,0x7d22f3ece4a500edd384cae7de2f60377a6852e6d3a417374a881b0d83b8f747fba5106a011c76b2176916cd5fa68371c0ba0b2786b1dcdac80ad329b1a83f28,0x0aead0caddeda9ee70fe1976af1a96a410f96fbe65273a986bc88e3e7f3bd6e24d1dc728a04fecfd17e9ddfdfe9472359d39f877761dcdc73a0ee6514ba4894b,0x03f830aef9bfd770119e28a8de3f94119517508839df651129e8a6819c4e86df580179f97821d266d0e205f7536ab49cc04298aa88dde463d638689645188d86,0xd7489dfb959fd93de1b8fe30119d6f138fbeef529543d12c03f91d34c545a75197f79a0083650dbebee8fa12d39f2902101eed3f2e1963470d77dfe2204a02c7,0x0001 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv
new file mode 100644
index 0000000..4e7c30e
--- /dev/null
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv
@@ -0,0 +1 @@
+0x153212291c26fe063b78bbca97d35dda6b0b349fe3fc1d4dee21786fc85296e22d93ce855a2d3ed048498c6a1f378cea240f029df302cffb658efe9e12379629acb,0x5a4b83e21db14397282aab529b230058a165962eadf8e8f15703ca5b91501463fc8bf866d7f1a2ce785c4ff0c5797e20e3fb6952bd42e3421ed1c589b2853a0c30,0x1196a7bc6d754b0224fcace252f9056acebba295a7a0763a95fd0fa90cca4bbcc1d030cbee049d06e103bb28c8b870a1d5989d9c56870ff7fde969f3bfd0278fbf7,0xd74e5bf4d166a2d75d57d49be58f9bf3900bda81bbb283a8f311d9972c7cd1ed547403b52c657af133297f852f938b6a7ba8ef52c2ca8eb79799b15f7123c5d2af,0x7ed2303056596fb09cfade2ca0f691c515da266565ba5afa4700c6c6ed38091f3cf4fdc67ee1426b849bb9be26c1e8c3b53530fc4510dad8b7badc81bad7276c5b,0x153212291c26fe063b78bc114fd2c18a365faa9b5b3fecbb87c2690125099ddd8baa5052aa2fda7f14120d3d6af0ac185902f97bae06a009588286cf5ce93b1cce3,0x0001 \ No newline at end of file
diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/results.xml b/common/src/main/resources/cz/crcs/ectester/data/wrong/results.xml
index e3f0967..18302b1 100644
--- a/common/src/main/resources/cz/crcs/ectester/data/wrong/results.xml
+++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/results.xml
@@ -12,6 +12,16 @@
<desc>A correct signature by the default key.</desc>
</sigResult>
<sigResult>
+ <id>nok/malleable/s+n</id>
+ <sig>SHA1</sig>
+ <inline>0x304502203988322ab9f52c7f11d5d1aa92a2ac0b00275bcad8e934682257323fda67248202210152231596382268e9f3b82b99e386ebb784c21538f1a379523d1b5af44aaf80fe</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>A correct signature modified by adding n to s.</desc>
+ </sigResult>
+ <sigResult>
<id>nok/negated</id>
<sig>SHA1</sig>
<inline>0x304402203988322ab9f52c7f11d5d1aa92a2ac0b00275bcad8e934682257323fda672482022052231597382268e8f3b82b99e386ebb7c7db1a8b4a8bdacd496190314e4c5bad</inline>
@@ -23,8 +33,9 @@
</sigResult>
<sigResult>
<id>nok/random</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x30440220e641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c02206baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -32,8 +43,9 @@
</sigResult>
<sigResult>
<id>nok/r0</id>
- <sig>SHA1</sig>
- <inline>0x3044022000000000000000000000000000000000000000000000000000000000000000000220d0837b07fe63d225733391e6808a081fd8aeb1359511feba7ca4f266727f968e</inline>
+ <sig>*</sig>
+ <inline>0x30250201000220675e2eb20e1f1ec11c3016f7675d9a2e7a3c3370efde499ccb91920ab3da4ef3</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -41,8 +53,9 @@
</sigResult>
<sigResult>
<id>nok/s0</id>
- <sig>SHA1</sig>
- <inline>0x304402206bea66d439da6b0b4a0e45b51e76d53336f27f7aa8e35f2008b77a8e021eff0a02200000000000000000000000000000000000000000000000000000000000000000</inline>
+ <sig>*</sig>
+ <inline>0x302502206bea66d439da6b0b4a0e45b51e76d53336f27f7aa8e35f2008b77a8e021eff0a020100</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -50,8 +63,9 @@
</sigResult>
<sigResult>
<id>nok/r1</id>
- <sig>SHA1</sig>
- <inline>0x3044022000000000000000000000000000000000000000000000000000000000000000010220e660f19ddc20a30adda6ca175577b492e238ef8734b904a31045d453825974d4</inline>
+ <sig>*</sig>
+ <inline>0x302502010102203494a201a1a539189253c5eab77d1cb99ce1b154c642acc85a956cf2eec2bb3f</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -59,8 +73,9 @@
</sigResult>
<sigResult>
<id>nok/s1</id>
- <sig>SHA1</sig>
- <inline>0x30440220d30ab3301d7132edbead77c0d622bbb7be8626c9ac5ee6c536281e6c18e79ab002200000000000000000000000000000000000000000000000000000000000000001</inline>
+ <sig>*</sig>
+ <inline>0x302502201ee448a2ce4695ac5b71d89553e3dd9688f33041f64aa9aed49c269f6f943c25020101</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -68,8 +83,9 @@
</sigResult>
<sigResult>
<id>nok/r0s0</id>
- <sig>SHA1</sig>
- <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000</inline>
+ <sig>*</sig>
+ <inline>0x3006020100020100</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -77,8 +93,9 @@
</sigResult>
<sigResult>
<id>nok/r0s1</id>
- <sig>SHA1</sig>
- <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000001</inline>
+ <sig>*</sig>
+ <inline>0x3006020100020101</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -86,8 +103,9 @@
</sigResult>
<sigResult>
<id>nok/r1s0</id>
- <sig>SHA1</sig>
- <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000102200000000000000000000000000000000000000000000000000000000000000000</inline>
+ <sig>*</sig>
+ <inline>0x3006020101020100</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -95,17 +113,99 @@
</sigResult>
<sigResult>
<id>nok/r1s1</id>
- <sig>SHA1</sig>
- <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000102200000000000000000000000000000000000000000000000000000000000000001</inline>
+ <sig>*</sig>
+ <inline>0x3006020101020101</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
<desc>Well-formed invalid signature with r = 1 and s = 1.</desc>
</sigResult>
<sigResult>
+ <id>nok/r0_padded</id>
+ <sig>*</sig>
+ <inline>0x3044022000000000000000000000000000000000000000000000000000000000000000000220675e2eb20e1f1ec11c3016f7675d9a2e7a3c3370efde499ccb91920ab3da4ef3</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with r = 0.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/s0_padded</id>
+ <sig>*</sig>
+ <inline>0x304402206bea66d439da6b0b4a0e45b51e76d53336f27f7aa8e35f2008b77a8e021eff0a02200000000000000000000000000000000000000000000000000000000000000000</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with s = 0.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/r1_padded</id>
+ <sig>*</sig>
+ <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000102203494a201a1a539189253c5eab77d1cb99ce1b154c642acc85a956cf2eec2bb3f</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with r = 1.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/s1_padded</id>
+ <sig>*</sig>
+ <inline>0x304402201ee448a2ce4695ac5b71d89553e3dd9688f33041f64aa9aed49c269f6f943c2502200000000000000000000000000000000000000000000000000000000000000001</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with s = 1.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/r0s0_padded</id>
+ <sig>*</sig>
+ <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with r = 0 and s = 0.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/r0s1_padded</id>
+ <sig>*</sig>
+ <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000001</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with r = 0 and s = 1.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/r1s0_padded</id>
+ <sig>*</sig>
+ <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000102200000000000000000000000000000000000000000000000000000000000000000</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with r = 1 and s = 0.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/r1s1_padded</id>
+ <sig>*</sig>
+ <inline>0x30440220000000000000000000000000000000000000000000000000000000000000000102200000000000000000000000000000000000000000000000000000000000000001</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Malformed (zero-padded) invalid signature with r = 1 and s = 1.</desc>
+ </sigResult>
+ <sigResult>
<id>nok/sp</id>
- <sig>SHA1</sig>
- <inline>0x30440220fc48281b60b73752f3e20c25e8a06b335122d5890db28d2969d3145fcd384e7b0220ffffffff00000001000000000000000000000000ffffffffffffffffffffffff</inline>
+ <sig>*</sig>
+ <inline>0x304502207c48281b60b73752f3e20c25e8a06b335122d5890db28d2969d3145fcd384e7b022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -113,17 +213,49 @@
</sigResult>
<sigResult>
<id>nok/s2p</id>
- <sig>SHA1</sig>
- <inline>0x30450220feba982489753a51a69fd582673d2e62b6b07cc6374237c1424f1e469cb00a98022101fffffffe00000002000000000000000000000001fffffffffffffffffffffffe</inline>
+ <sig>*</sig>
+ <inline>0x304502207eba982489753a51a69fd582673d2e62b6b07cc6374237c1424f1e469cb00a98022101fffffffe00000002000000000000000000000001fffffffffffffffffffffffe</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
<desc>Well-formed invalid signature with s = 2 * p.</desc>
</sigResult>
<sigResult>
+ <id>nok/sn</id>
+ <sig>*</sig>
+ <inline>0x304502207c48281b60b73752f3e20c25e8a06b335122d5890db28d2969d3145fcd384e7b022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Well-formed invalid signature s = n.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/rnsn</id>
+ <sig>*</sig>
+ <inline>0x3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Well-formed invalid signature r = n and s = n.</desc>
+ </sigResult>
+ <sigResult>
+ <id>nok/s2n</id>
+ <sig>*</sig>
+ <inline>0x304502207eba982489753a51a69fd582673d2e62b6b07cc6374237c1424f1e469cb00a98022101fffffffe00000002000000000000000000000001fffffffffffffffffffffffe</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
+ <curve>secg/secp256r1</curve>
+ <signkey>wrong/default_priv</signkey>
+ <verifykey>wrong/default_pub</verifykey>
+ <desc>Well-formed invalid signature with s = 2 * n.</desc>
+ </sigResult>
+ <sigResult>
<id>nok/length_overflow16</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x3083ff000002203988322ab9f52c7f11d5d1aa92a2ac0b00275bcad8e934682257323fda672482022052231597382268e8f3b82b99e386ebb7c7db1a8b4a8bdacd496190314e4c5bad</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -131,8 +263,9 @@
</sigResult>
<sigResult>
<id>nok/length_overflow32</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x3085ff0000000002203988322ab9f52c7f11d5d1aa92a2ac0b00275bcad8e934682257323fda672482022052231597382268e8f3b82b99e386ebb7c7db1a8b4a8bdacd496190314e4c5bad</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -140,8 +273,9 @@
</sigResult>
<sigResult>
<id>nok/length_overflow64</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x3089ff000000000000000002203988322ab9f52c7f11d5d1aa92a2ac0b00275bcad8e934682257323fda672482022052231597382268e8f3b82b99e386ebb7c7db1a8b4a8bdacd496190314e4c5bad</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -149,8 +283,9 @@
</sigResult>
<sigResult>
<id>nok/length_indefinite</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x308002203988322ab9f52c7f11d5d1aa92a2ac0b00275bcad8e934682257323fda672482022052231597382268e8f3b82b99e386ebb7c7db1a8b4a8bdacd496190314e4c5bad</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -158,8 +293,9 @@
</sigResult>
<sigResult>
<id>nok/long</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x30420220e641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c02206baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -167,8 +303,9 @@
</sigResult>
<sigResult>
<id>nok/short</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x30460220e641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c02206baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -176,8 +313,9 @@
</sigResult>
<sigResult>
<id>nok/long_r</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x3044021ee641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c02206baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -185,8 +323,9 @@
</sigResult>
<sigResult>
<id>nok/long_s</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x30440220e641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c021e6baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -194,8 +333,9 @@
</sigResult>
<sigResult>
<id>nok/short_r</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x30440222e641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c02206baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>
@@ -203,8 +343,9 @@
</sigResult>
<sigResult>
<id>nok/short_s</id>
- <sig>SHA1</sig>
+ <sig>*</sig>
<inline>0x30440220e641671e6415629dc8398e35ae1362cb647f293a92553b1594d57fff58df302c02226baafface035e3758eea0dd9ef734976c70b6dd06f4d81d33f5e28bfb8730624</inline>
+ <raw>0xABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB</raw>
<curve>secg/secp256r1</curve>
<signkey>wrong/default_priv</signkey>
<verifykey>wrong/default_pub</verifykey>