aboutsummaryrefslogtreecommitdiff
path: root/java/com/google/security/wycheproof
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/security/wycheproof')
-rw-r--r--java/com/google/security/wycheproof/testcases/AesGcmTest.java98
-rw-r--r--java/com/google/security/wycheproof/testcases/BigIntegerTest.java5
-rw-r--r--java/com/google/security/wycheproof/testcases/DhTest.java2
-rw-r--r--java/com/google/security/wycheproof/testcases/DhiesTest.java9
-rw-r--r--java/com/google/security/wycheproof/testcases/DsaTest.java526
-rw-r--r--java/com/google/security/wycheproof/testcases/EcdhTest.java656
-rw-r--r--java/com/google/security/wycheproof/testcases/EcdsaTest.java604
-rw-r--r--java/com/google/security/wycheproof/testcases/EciesTest.java34
-rw-r--r--java/com/google/security/wycheproof/testcases/RsaKeyTest.java1374
-rw-r--r--java/com/google/security/wycheproof/testcases/RsaSignatureTest.java206
10 files changed, 2994 insertions, 520 deletions
diff --git a/java/com/google/security/wycheproof/testcases/AesGcmTest.java b/java/com/google/security/wycheproof/testcases/AesGcmTest.java
index d71b8c2..9f27992 100644
--- a/java/com/google/security/wycheproof/testcases/AesGcmTest.java
+++ b/java/com/google/security/wycheproof/testcases/AesGcmTest.java
@@ -16,13 +16,18 @@
package com.google.security.wycheproof;
+import com.google.security.wycheproof.WycheproofRunner.ExcludedTest;
+import com.google.security.wycheproof.WycheproofRunner.ProviderType;
+import com.google.security.wycheproof.WycheproofRunner.SlowTest;
import java.nio.ByteBuffer;
import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
import java.util.ArrayList;
+import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.ShortBufferException;
import javax.crypto.spec.GCMParameterSpec;
@@ -178,6 +183,41 @@ public class AesGcmTest extends TestCase {
}
}
+ /**
+ * JCE has a dangerous feature: after a doFinal the cipher is typically reinitialized using the
+ * previous IV. This "feature" can easily break AES-GCM usages, because encrypting twice with
+ * the same key and IV leaks the authentication key. Hence any reasonable implementation of
+ * AES-GCM should not allow this. The expected behaviour of OpenJDK can be derived from the tests
+ * in jdk/test/com/sun/crypto/provider/Cipher/AES/TestGCMKeyAndIvCheck.java.
+ * OpenJDK does not allow two consecutive initializations for encryption with the same key and IV.
+ *
+ * <p>The test here is weaker than the restrictions in OpenJDK. The only requirement here is that
+ * reusing a Cipher without an explicit init() is caught.
+ *
+ * <p>BouncyCastle 1.52 failed this test
+ *
+ * <p>Conscrypt failed this test
+ */
+ public void testIvReuse() throws Exception {
+ for (GcmTestVector test : getTestVectors()) {
+ Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
+ cipher.init(Cipher.ENCRYPT_MODE, test.key, test.parameters);
+ cipher.updateAAD(test.aad);
+ byte[] ct1 = cipher.doFinal(test.pt);
+ try {
+ byte[] ct2 = cipher.doFinal(test.pt);
+ fail(
+ "It should not possible to reuse an IV."
+ + " ct1:"
+ + TestUtil.bytesToHex(ct1)
+ + " ct2:"
+ + TestUtil.bytesToHex(ct2));
+ } catch (java.lang.IllegalStateException ex) {
+ // This is expected.
+ }
+ }
+ }
+
/** Encryption with ByteBuffers. */
public void testByteBuffer() throws Exception {
for (GcmTestVector test : getTestVectors()) {
@@ -370,4 +410,62 @@ public class AesGcmTest extends TestCase {
byte[] output = cipher.doFinal(input);
assertEquals(input.length + 16, output.length);
}
+
+ /**
+ * Test AES-GCM wrapped around counter bug which leaks plaintext and authentication key. Let's
+ * consider 12-byte IV, counter = IV || 0^31 || 1. For each encryption block, the last 4 bytes of
+ * the counter is increased by 1. After 2^32 blocks, the counter will be wrapped around causing
+ * counter collision and hence, leaking plaintext and authentication key as explained below. The
+ * library must make a check to make sure that the plaintext's length never exceeds 2^32 - 2
+ * blocks. Note that this is different from usual IV collisions because it happens even if users
+ * use different IVs. <br>
+ * We have: <br>
+ * J0 = IV || 0^31 || 1 <br>
+ * Plaintext: P[0], P[1], P[2], .... <br>
+ * Ciphertext: <br>
+ * C[0] = Enc(K, (J0 + 1) % 2^32) XOR P[0] <br>
+ * C[1] = Enc(K, (J0 + 2) % 2^32) XOR P[1] <br>
+ * C[2] = Enc(K, (J0 + 3) % 2^32) XOR P[2] <br>
+ * ... <br>
+ * C[2^32 - 1] = Enc(K, J0) XOR P[2^32 - 1] <br>
+ * C[2^32] = Enc(K, (J0 + 1)% 2^32) XOR P[2^32] <br>
+ * It means that after 2^32 blocks, the counter is wrapped around causing counter collisions. In
+ * counter mode, once the counter is collided then it's reasonable to assume that the plaintext is
+ * leaked. As the ciphertext is already known to attacker, Enc(K, J0) is leaked. <br>
+ * Now, as the authentication tag T is computed as GHASH(H, {}, C) XOR E(K, J0), the attacker can
+ * learn GHASH(H, {}, C}. It essentially means that the attacker finds a polynomial where H is the
+ * root (see Joux attack http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/Joux_comments.pdf).
+ * Solving polynomial equation in GF(2^128) is enough to extract the authentication key.
+ *
+ * <p>BouncyCastle used to have this bug (CVE-2015-6644).
+ *
+ * <p>OpenJDK8 used to have this bug (http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/0c3ed12cdaf5)
+ *
+ * <p>The test is slow as we have to encrypt 2^32 blocks.
+ */
+ // TODO(quannguyen): Is there a faster way to test it?
+ @ExcludedTest(
+ providers = {ProviderType.CONSCRYPT},
+ comment = "Conscrypt doesn't support streaming, would crash")
+ @SlowTest(
+ providers = {ProviderType.BOUNCY_CASTLE, ProviderType.SPONGY_CASTLE, ProviderType.OPENJDK})
+ public void testWrappedAroundCounter() throws Exception {
+ try {
+ byte[] iv = new byte[12];
+ byte[] input = new byte[16];
+ byte[] key = new byte[16];
+ (new SecureRandom()).nextBytes(key);
+ Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
+ cipher.init(
+ Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), new GCMParameterSpec(16 * 8, iv));
+ byte[] output = cipher.update(input);
+ for (long i = 0; i < 4294967296L + 2; i++) {
+ byte[] output1 = cipher.update(input);
+ assertFalse("GCM Wrapped Around Counter" + i, Arrays.equals(output, output1));
+ }
+ fail("Expected Exception");
+ } catch (Exception expected) {
+ System.out.println("testWrappedAroundcounter:" + expected.toString());
+ }
+ }
}
diff --git a/java/com/google/security/wycheproof/testcases/BigIntegerTest.java b/java/com/google/security/wycheproof/testcases/BigIntegerTest.java
index cd5a992..8173a89 100644
--- a/java/com/google/security/wycheproof/testcases/BigIntegerTest.java
+++ b/java/com/google/security/wycheproof/testcases/BigIntegerTest.java
@@ -50,17 +50,12 @@ public class BigIntegerTest extends TestCase {
new BigInteger("164280218643672633986221"),
new BigInteger("318665857834031151167461"),
new BigInteger("7395010240794120709381"),
- new BigInteger("164280218643672633986221"),
- new BigInteger("318665857834031151167461"),
new BigInteger("2995741773170734841812261"),
new BigInteger("667636712015520329618581"),
new BigInteger("3317044064679887385961981"),
new BigInteger("3110269097300703345712981"),
new BigInteger("552727880697763694556181"),
- new BigInteger("360681321802296925566181"),
- new BigInteger("7395010240794120709381"),
new BigInteger("3404730287403079539471001"),
- new BigInteger("164280218643672633986221"),
// Richarg G.E. Pinch, "Some primality testing algorithms"
// Some composites that passed Maple V's primality test.
new BigInteger("10710604680091"),
diff --git a/java/com/google/security/wycheproof/testcases/DhTest.java b/java/com/google/security/wycheproof/testcases/DhTest.java
index 3e9c9e7..84be8f2 100644
--- a/java/com/google/security/wycheproof/testcases/DhTest.java
+++ b/java/com/google/security/wycheproof/testcases/DhTest.java
@@ -358,6 +358,8 @@ public class DhTest extends TestCase {
* itself cannot prevent all small-subgroup attacks because of the missing parameter q in the
* Diffie-Hellman parameters. Implementations must add additional countermeasures such as the ones
* proposed in RFC 2785.
+ *
+ * <p> CVE-2016-1000346: BouncyCastle before v.1.56 did not validate the other parties public key.
*/
public void testSubgroupConfinement() throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
diff --git a/java/com/google/security/wycheproof/testcases/DhiesTest.java b/java/com/google/security/wycheproof/testcases/DhiesTest.java
index 17ab513..fbf8054 100644
--- a/java/com/google/security/wycheproof/testcases/DhiesTest.java
+++ b/java/com/google/security/wycheproof/testcases/DhiesTest.java
@@ -35,15 +35,18 @@ import junit.framework.TestCase;
*
* @author bleichen@google.com (Daniel Bleichenbacher)
*/
-// Tested providers:
-// BC (not recommended)
-//
// TODO(bleichen):
// - maybe again CipherInputStream, CipherOutputStream,
// - byteBuffer.
// - Exception handling
// - Is DHIES using the key derivation function for the key stream?
// - BouncyCastle knows an algorithm IES. Is this the same as DHIES?
+// - Bouncy fixed a padding oracle bug in version 1.56 (CVE-2016-1000345)
+// So far we have no test for this bug mainly because this cannot be tested
+// through the JCA interface. BC does not register and algorithm such as
+// Cipher.DHIESWITHAES-CBC.
+// - So far only BouncyCastles is tesed because this is the only provider
+// we use that implements DHIES.
public class DhiesTest extends TestCase {
// TODO(bleichen): This is the same as DhTest.java
diff --git a/java/com/google/security/wycheproof/testcases/DsaTest.java b/java/com/google/security/wycheproof/testcases/DsaTest.java
index e466900..4d546bb 100644
--- a/java/com/google/security/wycheproof/testcases/DsaTest.java
+++ b/java/com/google/security/wycheproof/testcases/DsaTest.java
@@ -15,7 +15,6 @@
*/
// TODO(bleichen):
-// - add tests for signature malleability and ASN parsing.
// - add tests for SHA1WithDSA with wrong key
// - add tests for "alternative" algorithm names
// - convert tests for deterministic DSA variants.
@@ -29,6 +28,8 @@ package com.google.security.wycheproof;
import com.google.security.wycheproof.WycheproofRunner.ProviderType;
import com.google.security.wycheproof.WycheproofRunner.SlowTest;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
@@ -111,7 +112,338 @@ public class DsaTest extends TestCase {
+ "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
};
+ /**
+ * The following test vectos are derived from a valid signature by
+ * using alternative BER encoding as well as legacy formats.
+ * Accepting such signatures is in many cases benign. Hence the tests
+ * below will pass if such signatures are accepted as valid.
+ * The test vectors could be used to check for signature malleability.
+ * An example where this kind of signature malleability was a problem is
+ * https://en.bitcoin.it/wiki/Transaction_Malleability
+ */
+ static final String[] MODIFIED_SIGNATURES = {
+ // BER:long form encoding of length
+ "30813d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e02811c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "02811d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // BER:length contains leading 0
+ "3082003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ "303f0282001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0282001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ // BER:prepending 0's to integer
+ "303f021e00001e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021f000000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ // The Sun provider accepts DSA signatures where a leading 00 has
+ // been omitted in the ASN encoding.
+ "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ };
+
+ /**
+ * The following test vectors are invalid DSA signatures.
+ * According to {@link java.security.Signature#verify(byte[])} verifying an invalid
+ * signature may either return false or throw a SignatureException.
+ * We expect that a correct implementation of DSA signatures satisfies this contract.
+ * Throwing a RuntimeException instead of a SignatureException could for example
+ * result in a denial of service attack.
+ *
+ * <p>A list of problems that are caught by these signatures:
+ * <li> CVE-2016-5546: OpenJDK8 throwed java.lang.ArrayIndexOutOfBoundsException for
+ * some invalid DSA signatures.
+ * </ul>
+ */
static final String[] INVALID_SIGNATURES = {
+ // wrong length
+ "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021d1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021e00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // uint32 overflow in length
+ "3085010000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916"
+ + "173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813f"
+ + "e8786236",
+ "30420285010000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916"
+ + "173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813f"
+ + "e8786236",
+ "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0285010000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813f"
+ + "e8786236",
+ // uint64 overflow in length
+ "308901000000000000003d021c1e41b479ad576905b960fe14eadb91b0ccf348"
+ + "43dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf"
+ + "3365813fe8786236",
+ "3046028901000000000000001c1e41b479ad576905b960fe14eadb91b0ccf348"
+ + "43dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf"
+ + "3365813fe8786236",
+ "3046021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "028901000000000000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf"
+ + "3365813fe8786236",
+ // length = 2**31 - 1
+ "30847fffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "304102847fffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "02847fffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ // length = 2**32 - 1
+ "3084ffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "30410284ffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0284ffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ // length = 2**64 - 1
+ "3088ffffffffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843"
+ + "dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ "30450288ffffffffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843"
+ + "dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0288ffffffffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ // removing sequence
+ "",
+ // appending 0's to sequence
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623600"
+ + "00",
+ // prepending 0's to sequence
+ "303f0000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ // appending unused 0's
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ // appending null value
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623605"
+ + "00",
+ "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623605"
+ + "00",
+ // including garbage
+ "3042498177303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916"
+ + "173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813f"
+ + "e8786236",
+ "30412500303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "360004deadbeef",
+ "30422221498177021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916"
+ + "173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813f"
+ + "e8786236",
+ "304122202500021c1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "3045221e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd0004deadbeef021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "2222498177021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813f"
+ + "e8786236",
+ "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "22212500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "221f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "360004deadbeef",
+ // including undefined tags
+ "3045aa00bb00cd00303d021c1e41b479ad576905b960fe14eadb91b0ccf34843"
+ + "dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ "3043aa02aabb303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab9"
+ + "16173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf336581"
+ + "3fe8786236",
+ "30452224aa00bb00cd00021c1e41b479ad576905b960fe14eadb91b0ccf34843"
+ + "dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ "30432222aa02aabb021c1e41b479ad576905b960fe14eadb91b0ccf34843dab9"
+ + "16173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf336581"
+ + "3fe8786236",
+ "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "2225aa00bb00cd00021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf33"
+ + "65813fe8786236",
+ "3043021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "2223aa02aabb021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf336581"
+ + "3fe8786236",
+ // changing tag value
+ "2e3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "323d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "ff3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d041c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303dff1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "041d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "ff1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // dropping value of sequence
+ "3000",
+ // using composition
+ "3041300102303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "3041222002011e021b41b479ad576905b960fe14eadb91b0ccf34843dab91617"
+ + "3bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "2221020100021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8"
+ + "786236",
+ // truncate sequence
+ "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862",
+ "303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02"
+ + "1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // indefinite length with no delimiter
+ "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // prepend empty sequence
+ "303f3000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ // append empty sequence
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623630"
+ + "00",
+ // sequence of sequence
+ "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8"
+ + "c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ // truncated sequence
+ "301e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd",
+ // repeat element in sequence
+ "305c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623602"
+ + "1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // removing integer
+ "301f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // appending 0's to integer
+ "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862"
+ + "36",
+ "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe878623600"
+ + "00",
+ // dropping value of integer
+ "30210200021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0200",
+ // modify first byte of integer
+ "303d021c1f41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // modify last byte of integer
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cc"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786237",
+ // truncate integer
+ "303c021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c902"
+ + "1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303c021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02"
+ + "1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862",
+ // leading ff in integer
+ "303e021dff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021eff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ // infinity
+ "3022090180021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "3021021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd090180",
+ // Vectors where r or s have been modified e.g. by adding or subtracting the order of the
+ // group and hence violate the range check for r and s required by DSA.
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93",
+ "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
+ "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd"
+ + "021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e33"
+ + "2a021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e33"
+ + "2a021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93",
+ "303d021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e33"
+ + "2a021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9",
+ "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e33"
+ + "2a021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
+ "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e33"
+ + "2a021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee360"
+ + "70021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee360"
+ + "70021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93",
+ "303d021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee360"
+ + "70021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9",
+ "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee360"
+ + "70021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
+ "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee360"
+ + "70021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633"
+ + "021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633"
+ + "021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93",
+ "303c021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633"
+ + "021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9",
+ "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633"
+ + "021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
+ "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633"
+ + "021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
+ "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93",
+ "303d021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9",
+ "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
+ "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9"
+ + "cd021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
// Signatures with special case values for r and s. E.g. r=1, s=0 are values that can lead to
// forgeries if the DSA implementation does not check boundaries and computes s^(-1) == 0.
"3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
@@ -346,9 +678,10 @@ public class DsaTest extends TestCase {
String message,
String algorithm,
String signatureType,
- boolean isValid)
+ boolean isValidDER,
+ boolean isValidBER)
throws Exception {
- byte[] messageBytes = "Hello".getBytes("UTF-8");
+ byte[] messageBytes = message.getBytes("UTF-8");
Signature verifier = Signature.getInstance(algorithm);
KeyFactory kf = KeyFactory.getInstance("DSA");
PublicKey pub = kf.generatePublic(key);
@@ -371,10 +704,10 @@ public class DsaTest extends TestCase {
errors++;
continue;
}
- if (isValid && !verified) {
+ if (isValidDER && !verified) {
System.out.println(signatureType + " was not verified:" + signature);
errors++;
- } else if (!isValid && verified) {
+ } else if (!isValidBER && verified) {
System.out.println(signatureType + " was verified:" + signature);
errors++;
}
@@ -384,12 +717,19 @@ public class DsaTest extends TestCase {
public void testValidSignatures() throws Exception {
testVectors(
- VALID_SIGNATURES, publicKey1, "Hello", "SHA224WithDSA", "Valid DSA signature", true);
+ VALID_SIGNATURES, publicKey1, "Hello", "SHA224WithDSA", "Valid DSA signature", true, true);
+ }
+
+ public void testModifiedSignatures() throws Exception {
+ testVectors(
+ MODIFIED_SIGNATURES, publicKey1, "Hello", "SHA224WithDSA", "Modified DSA signature",
+ false, true);
}
public void testInvalidSignatures() throws Exception {
testVectors(
- INVALID_SIGNATURES, publicKey1, "Hello", "SHA224WithDSA", "Invalid DSA signature", false);
+ INVALID_SIGNATURES, publicKey1, "Hello", "SHA224WithDSA", "Invalid DSA signature",
+ false, false);
}
// Extract the integer r from a DSA signature.
@@ -493,6 +833,55 @@ public class DsaTest extends TestCase {
System.out.println("s:" + extractS(signature).toString());
}
+ public void testKeyGeneration(int keysize) throws Exception {
+ KeyPairGenerator generator = KeyPairGenerator.getInstance("DSA");
+ generator.initialize(keysize);
+ KeyPair keyPair = generator.generateKeyPair();
+ DSAPrivateKey priv = (DSAPrivateKey) keyPair.getPrivate();
+ DSAParams params = priv.getParams();
+ assertEquals(keysize, params.getP().bitLength());
+ // The NIST standard does not fully specify the size of q that
+ // must be used for a given key size. Hence there are differences.
+ // For example if keysize = 2048, then OpenSSL uses 256 bit q's by default,
+ // but the SUN provider uses 224 bits. Both are acceptable sizes.
+ // The tests below simply asserts that the size of q does not decrease the
+ // overall security of the DSA.
+ int qsize = params.getQ().bitLength();
+ switch (keysize) {
+ case 1024:
+ assertTrue("Invalid qsize for 1024 bit key:" + qsize, qsize >= 160);
+ break;
+ case 2048:
+ assertTrue("Invalid qsize for 2048 bit key:" + qsize, qsize >= 224);
+ break;
+ case 3072:
+ assertTrue("Invalid qsize for 3072 bit key:" + qsize, qsize >= 256);
+ break;
+ default:
+ fail("Invalid key size:" + keysize);
+ }
+ // Check the length of the private key.
+ // For example GPG4Browsers or the KJUR library derived from it use
+ // q.bitCount() instead of q.bitLength() to determine the size of the private key
+ // and hence would generate keys that are much too small.
+ assertTrue(priv.getX().bitLength() >= qsize - 32);
+ }
+
+ /**
+ * Tests the key generation for DSA.
+ *
+ * <p>Problems found:
+ * <ul>
+ * <li> CVE-2016-1000343 BouncyCastle before v.1.56 always generated DSA keys with
+ * a 160-bit q.
+ * </ul>
+ */
+ @SlowTest(providers = {ProviderType.BOUNCY_CASTLE, ProviderType.SPONGY_CASTLE})
+ public void testKeyGenerationAll() throws Exception {
+ testKeyGeneration(1024);
+ testKeyGeneration(2048);
+ }
+
/**
* Checks whether the one time key k in DSA is biased. For example the SUN provider fell for this
* test until April 2016.
@@ -611,6 +1000,129 @@ public class DsaTest extends TestCase {
}
/**
+ * This test checks for potential of a timing attack. The test generates a number of signatures,
+ * selects a fraction of them with a small timing and then compares the values k for the selected
+ * signatures with a normal distribution. The test fails if these ks are much smaller than
+ * expected. An implementation flaw that can lead to a test failure is to compute the signature
+ * with a modular exponentiation with a runtime that depend on the length of the exponent.
+ *
+ * <p>A failing test simply means that the timing can be used to get information about k. Further
+ * analysis is necessary to determine if the bias is exploitable and how many timings are
+ * necessary for an attack. A passing test does not mean that the implementation is secure against
+ * timing attacks. The test only catches relatively big timing differences. It requires high
+ * confidence to fail. Noise on the test machine can prevent that a relation between timing and k
+ * can be detected.
+ *
+ * <p>Claims of what is exploitable: http://www.hpl.hp.com/techreports/1999/HPL-1999-90.pdf 30
+ * signatures are sufficient to find the private key if the attacker knows 8 bits of each k.
+ * http://eprint.iacr.org/2004/277.pdf 27 signatures are sufficient if 8 bits of each k is known.
+ * Our own old experiments (using 1GB memory on a Pentium-4? CPU): 2^11 signatures are sufficient
+ * with a 3 bit leakage. 2^15 signatures are sufficient with a 2 bit leakage. 2^24 signatures are
+ * sufficient with a 1 bit leakage. Estimate for biased generation in the NIST standard: e.g. 2^22
+ * signatures, 2^40 memory, 2^64 time
+ *
+ * <p><b>Sample output for the SUN provider:</b> <code>
+ * count:50000 cutoff:4629300 relative average:0.9992225872624547 sigmas:0.3010906585642381
+ * count:25000 cutoff:733961 relative average:0.976146066585879 sigmas:6.532668708070148
+ * count:12500 cutoff:688305 relative average:0.9070352192339134 sigmas:18.00255238454385
+ * count:6251 cutoff:673971 relative average:0.7747148791368986 sigmas:30.850903417893825
+ * count:3125 cutoff:667045 relative average:0.5901994097874541 sigmas:39.67877152897901
+ * count:1563 cutoff:662088 relative average:0.4060286694971057 sigmas:40.67294313795137
+ * count:782 cutoff:657921 relative average:0.2577955312387898 sigmas:35.94906247333319
+ * count:391 cutoff:653608 relative average:0.1453438859272699 sigmas:29.271192100879457
+ * count:196 cutoff:649280 relative average:0.08035497211567771 sigmas:22.300206785132406
+ * count:98 cutoff:645122 relative average:0.05063589092661368 sigmas:16.27820353139225
+ * count:49 cutoff:641582 relative average:0.018255560447883384 sigmas:11.903018745467488
+ * count:25 cutoff:638235 relative average:0.009082660721102722 sigmas:8.581595888660086
+ * count:13 cutoff:633975 relative average:0.0067892346039088326 sigmas:6.20259924188633
+ * </code>
+ *
+ * <p><b>What this shows:</b> The first line uses all 50'000 signatures. The average k of these
+ * signatures is close to the expected value q/2. Being more selective gives us signatures with a
+ * more biased k. For example, the 196 signatures with the fastest timing have about a 3-bit bias.
+ * From this we expect that 2^19 signatures and timings are sufficient to find the private key.
+ *
+ * <p>A list of problems caught by this test:
+ * <ul>
+ * <li> CVE-2016-5548 OpenJDK8's DSA is vulnerable to timing attacks.
+ * <li> CVE-2016-1000341 BouncyCastle before v 1.56 is vulnernerable to timing attacks.
+ * </ul>
+ */
+ @SlowTest(providers = {ProviderType.BOUNCY_CASTLE, ProviderType.OPENJDK,
+ ProviderType.SPONGY_CASTLE})
+ public void testTiming() throws Exception {
+ ThreadMXBean bean = ManagementFactory.getThreadMXBean();
+ if (!bean.isCurrentThreadCpuTimeSupported()) {
+ System.out.println("getCurrentThreadCpuTime is not supported. Skipping");
+ return;
+ }
+ String hashAlgorithm = "SHA-1";
+ String message = "Hello";
+ byte[] messageBytes = message.getBytes("UTF-8");
+ byte[] digest = MessageDigest.getInstance(hashAlgorithm).digest(messageBytes);
+ BigInteger h = new BigInteger(1, digest);
+ KeyPairGenerator generator = java.security.KeyPairGenerator.getInstance("DSA");
+ generator.initialize(1024);
+ KeyPair keyPair = generator.generateKeyPair();
+ DSAPrivateKey priv = (DSAPrivateKey) keyPair.getPrivate();
+ Signature signer = Signature.getInstance("SHA1WITHDSA");
+ signer.initSign(priv);
+ // The timings below are quite noisy. Thus we need a large number of samples.
+ int samples = 50000;
+ long[] timing = new long[samples];
+ BigInteger[] k = new BigInteger[samples];
+ for (int i = 0; i < samples; i++) {
+ long start = bean.getCurrentThreadCpuTime();
+ signer.update(messageBytes);
+ byte[] signature = signer.sign();
+ timing[i] = bean.getCurrentThreadCpuTime() - start;
+ k[i] = extractK(signature, h, priv, false);
+ }
+ long[] sorted = Arrays.copyOf(timing, timing.length);
+ Arrays.sort(sorted);
+ // Here we are only interested in roughly the 8 most significant bits of the ks.
+ // Hence, using double is sufficiently precise.
+ double q = priv.getParams().getQ().doubleValue();
+ double expectedAverage = q / 2;
+ double maxSigmas = 0;
+ System.out.println("testTiming: SHA1WITHDSA");
+ for (int idx = samples - 1; idx > 10; idx /= 2) {
+ long cutoff = sorted[idx];
+ int count = 0;
+ double total = 0;
+ for (int i = 0; i < samples; i++) {
+ if (timing[i] <= cutoff) {
+ total += k[i].doubleValue();
+ count += 1;
+ }
+ }
+ double expectedStdDev = q / Math.sqrt(12 * count);
+ double average = total / count;
+ // Number of standard deviations that the average is away from
+ // the expected value:
+ double sigmas = (expectedAverage - average) / expectedStdDev;
+ if (sigmas > maxSigmas) {
+ maxSigmas = sigmas;
+ }
+ System.out.println(
+ "count:"
+ + count
+ + " cutoff:"
+ + cutoff
+ + " relative average:"
+ + (average / expectedAverage)
+ + " sigmas:"
+ + sigmas);
+ }
+ // Checks if the signatures with a small timing have a biased k.
+ // We use 7 standard deviations, so that the probability of a false positive is smaller
+ // than 10^{-10}.
+ if (maxSigmas >= 7) {
+ fail("Signatures with short timing have a biased k");
+ }
+ }
+
+ /**
* DSA does not allow encryption. This test verifies that a provider does not implement an ad hoc
* scheme that attempts to turn DSA into a public key encryption scheme.
*/
diff --git a/java/com/google/security/wycheproof/testcases/EcdhTest.java b/java/com/google/security/wycheproof/testcases/EcdhTest.java
index 4094f41..8bfe03f 100644
--- a/java/com/google/security/wycheproof/testcases/EcdhTest.java
+++ b/java/com/google/security/wycheproof/testcases/EcdhTest.java
@@ -508,301 +508,322 @@ public class EcdhTest extends TestCase {
new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16));
public static final EcPublicKeyTestVector[] EC_MODIFIED_PUBLIC_KEYS = {
- // Modified keys
- new EcPublicKeyTestVector(
- "public point not on curve",
- "3059301306072a8648ce3d020106082a8648ce3d03010703420004cdeb39edd0"
- + "3e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b84"
- + "29598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebaca",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebaca", 16)),
- new EcPublicKeyTestVector(
- "public point = (0,0)",
- "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000"
- + "0000000000000000000000000000000000000000000000000000000000000000"
- + "000000000000000000000000000000000000000000000000000000",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 1,
- new BigInteger("0"),
- new BigInteger("0")),
- new EcPublicKeyTestVector(
- "order = 1",
- "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f502010102010103420004cdeb39edd03e2b1a11"
- + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
- + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("01", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "order = 26959946660873538060741835960514744168612397095220107664" + "918121663170",
- "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac202010103420004cdeb39edd03e2b1a11a5e134ec"
- + "99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b49bbb85c"
- + "3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "generator = (0,0)",
- "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000"
- + "0000000000000000000000000000000000000000000000000000000000000000"
- + "00000000000000000000000000022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc63255102010103420004cdeb39edd03e2b1a11"
- + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
- + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("0"),
- new BigInteger("0"),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "generator not on curve",
- "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc63255102010103420004cdeb39edd03e2b1a11"
- + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
- + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "cofactor = 2",
- "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc63255102010203420004cdeb39edd03e2b1a11"
- + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
- + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 2,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "cofactor = None",
- "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc63255103420004cdeb39edd03e2b1a11a5e134"
- + "ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b49bbb8"
- + "5c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- null,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "modified prime",
- "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
- + "01022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200"
- + "e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1"
- + "cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000"
- + "000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec9"
- + "5ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc63255102010103420004000000000000000000"
- + "0006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a956279"
- + "22eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414",
- new BigInteger("fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc145", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("06597fa94b1fd9000000000000000000000000000002", 16),
- new BigInteger("1b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", 16),
- 1,
- new BigInteger("06597fa94b1fd9000000000000000000000000000002", 16),
- new BigInteger("1b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", 16)),
- new EcPublicKeyTestVector(
- "using secp224r1",
- "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef"
- + "89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611"
- + "d5b84ba3d91dfe1a480825bcc4af3bcf",
- new BigInteger("ffffffffffffffffffffffffffffffff000000000000000000000001", 16),
- new BigInteger("ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", 16),
- new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffffffffffe", 16),
- new BigInteger("b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", 16),
- new BigInteger("b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", 16),
- new BigInteger("bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", 16),
- 1,
- new BigInteger("074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1", 16),
- new BigInteger("c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", 16)),
- new EcPublicKeyTestVector(
- "a = 0",
- "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30250401000420f104880c3980129c7efa19b6b0cb04e547b8d0fc0b"
- + "95f4946496dd4ac4a7c440044104cdeb39edd03e2b1a11a5e134ec99d5f25f21"
- + "673d403f3ecb47bd1fa676638958ea58493b8429598c0b49bbb85c3303ddb155"
- + "3c3b761c2caacca71606ba9ebac8022100ffffffff00000000ffffffffffffff"
- + "ffbce6faada7179e84f3b9cac2fc63255102010103420004cdeb39edd03e2b1a"
- + "11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c"
- + "0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("0"),
- new BigInteger("f104880c3980129c7efa19b6b0cb04e547b8d0fc0b95f4946496dd4ac4a7c440", 16),
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- // Invalid keys
- new EcPublicKeyTestVector(
- "order = -1157920892103562487626974469494075735299969552241357603"
- + "42422259061068512044369",
- "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f50221ff00000000ffffffff0000000000000000"
- + "4319055258e8617b0c46353d039cdaaf02010103420004cdeb39edd03e2b1a11"
- + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
- + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger(
- "-115792089210356248762697446949407573529996955224135760342422259" + "061068512044369"),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "order = 0",
- "308201123081cb06072a8648ce3d02013081bf020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f5020002010103420004cdeb39edd03e2b1a11a5"
- + "e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b49"
- + "bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("0"),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "cofactor = -1",
- "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc6325510201ff03420004cdeb39edd03e2b1a11"
- + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
- + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- -1,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
- new EcPublicKeyTestVector(
- "cofactor = 0",
- "308201323081eb06072a8648ce3d02013081df020101302c06072a8648ce3d01"
- + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
- + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
- + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
- + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
- + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
- + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
- + "bce6faada7179e84f3b9cac2fc632551020003420004cdeb39edd03e2b1a11a5"
- + "e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b49"
- + "bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
- new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
- new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
- new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
- new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
- new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
- new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
- 0,
- new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
- new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ // Modified keys
+ new EcPublicKeyTestVector(
+ "public point not on curve",
+ "3059301306072a8648ce3d020106082a8648ce3d03010703420004cdeb39edd0"
+ + "3e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b84"
+ + "29598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebaca",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebaca", 16)),
+ new EcPublicKeyTestVector(
+ "public point = (0,0)",
+ "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000"
+ + "0000000000000000000000000000000000000000000000000000000000000000"
+ + "000000000000000000000000000000000000000000000000000000",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 1,
+ new BigInteger("0"),
+ new BigInteger("0")),
+ new EcPublicKeyTestVector(
+ "order = 1",
+ "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f502010102010103420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("01", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "order = 26959946660873538060741835960514744168612397095220107664918121663170",
+ "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac202010103420004cdeb39edd03e2b1a11a5e134ec"
+ + "99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b49bbb85c"
+ + "3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "generator = (0,0)",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000"
+ + "0000000000000000000000000000000000000000000000000000000000000000"
+ + "00000000000000000000000000022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255102010103420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("0"),
+ new BigInteger("0"),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "generator not on curve",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255102010103420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "cofactor = 2",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255102010203420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 2,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "cofactor = None",
+ "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255103420004cdeb39edd03e2b1a11a5e134"
+ + "ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b49bbb8"
+ + "5c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ null,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "modified prime",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200"
+ + "e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1"
+ + "cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000"
+ + "000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec9"
+ + "5ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255102010103420004000000000000000000"
+ + "0006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a956279"
+ + "22eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414",
+ new BigInteger("fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc145", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("06597fa94b1fd9000000000000000000000000000002", 16),
+ new BigInteger("1b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", 16),
+ 1,
+ new BigInteger("06597fa94b1fd9000000000000000000000000000002", 16),
+ new BigInteger("1b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", 16)),
+ new EcPublicKeyTestVector(
+ "using secp224r1",
+ "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef"
+ + "89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611"
+ + "d5b84ba3d91dfe1a480825bcc4af3bcf",
+ new BigInteger("ffffffffffffffffffffffffffffffff000000000000000000000001", 16),
+ new BigInteger("ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", 16),
+ new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffffffffffe", 16),
+ new BigInteger("b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", 16),
+ new BigInteger("b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", 16),
+ new BigInteger("bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", 16),
+ 1,
+ new BigInteger("074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1", 16),
+ new BigInteger("c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", 16)),
+ new EcPublicKeyTestVector(
+ "a = 0",
+ "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30250401000420f104880c3980129c7efa19b6b0cb04e547b8d0fc0b"
+ + "95f4946496dd4ac4a7c440044104cdeb39edd03e2b1a11a5e134ec99d5f25f21"
+ + "673d403f3ecb47bd1fa676638958ea58493b8429598c0b49bbb85c3303ddb155"
+ + "3c3b761c2caacca71606ba9ebac8022100ffffffff00000000ffffffffffffff"
+ + "ffbce6faada7179e84f3b9cac2fc63255102010103420004cdeb39edd03e2b1a"
+ + "11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c"
+ + "0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("0"),
+ new BigInteger("f104880c3980129c7efa19b6b0cb04e547b8d0fc0b95f4946496dd4ac4a7c440", 16),
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "new curve with generator of order 3 that is also on secp256r1",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff3044042046dc879a5c2995d0e6f682468ea95791b7bbd0225cfdb251"
+ + "3fb10a737afece170420bea6c109251bfe4acf2eeda7c24c4ab70a1473335dec"
+ + "28b244d4d823d15935e2044104701c05255026aa4630b78fc6b769e388059ab1"
+ + "443cbdd1f8348bedc3be589dc34cfdab998ad27738ae382aa013986ade0f4859"
+ + "2a9a1ae37ca61d25ec5356f1bd022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255102010103420004701c05255026aa4630"
+ + "b78fc6b769e388059ab1443cbdd1f8348bedc3be589dc3b3025465752d88c851"
+ + "c7d55fec679521f0b7a6d665e51c8359e2da13aca90e42",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("46dc879a5c2995d0e6f682468ea95791b7bbd0225cfdb2513fb10a737afece17", 16),
+ new BigInteger("bea6c109251bfe4acf2eeda7c24c4ab70a1473335dec28b244d4d823d15935e2", 16),
+ new BigInteger("701c05255026aa4630b78fc6b769e388059ab1443cbdd1f8348bedc3be589dc3", 16),
+ new BigInteger("4cfdab998ad27738ae382aa013986ade0f48592a9a1ae37ca61d25ec5356f1bd", 16),
+ 1,
+ new BigInteger("701c05255026aa4630b78fc6b769e388059ab1443cbdd1f8348bedc3be589dc3", 16),
+ new BigInteger("b3025465752d88c851c7d55fec679521f0b7a6d665e51c8359e2da13aca90e42", 16)),
+ // Invalid keys
+ new EcPublicKeyTestVector(
+ "order = -1157920892103562487626974469494075735299969552241357603"
+ + "42422259061068512044369",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f50221ff00000000ffffffff0000000000000000"
+ + "4319055258e8617b0c46353d039cdaaf02010103420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger(
+ "-115792089210356248762697446949407573529996955224135760342422259061068512044369"),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "order = 0",
+ "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f502010002010103420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("0"),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "cofactor = -1",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc6325510201ff03420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ -1,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
+ new EcPublicKeyTestVector(
+ "cofactor = 0",
+ "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d01"
+ + "01022100ffffffff00000001000000000000000000000000ffffffffffffffff"
+ + "ffffffff30440420ffffffff00000001000000000000000000000000ffffffff"
+ + "fffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53"
+ + "b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d"
+ + "812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33"
+ + "576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffff"
+ + "bce6faada7179e84f3b9cac2fc63255102010003420004cdeb39edd03e2b1a11"
+ + "a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958ea58493b8429598c0b"
+ + "49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8",
+ new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16),
+ new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16),
+ new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16),
+ new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16),
+ new BigInteger("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16),
+ new BigInteger("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16),
+ 0,
+ new BigInteger("cdeb39edd03e2b1a11a5e134ec99d5f25f21673d403f3ecb47bd1fa676638958", 16),
+ new BigInteger("ea58493b8429598c0b49bbb85c3303ddb1553c3b761c2caacca71606ba9ebac8", 16)),
};
/** Checks that key agreement using ECDH works. */
@@ -946,6 +967,16 @@ public class EcdhTest extends TestCase {
}
}
+ public void testModifiedPublic() throws Exception {
+ testModifiedPublic("ECDH");
+ testModifiedPublic("ECDHC");
+ }
+
+ public void testModifiedPublicSpec() throws Exception {
+ testModifiedPublicSpec("ECDH");
+ testModifiedPublicSpec("ECDHC");
+ }
+
public void testDistinctCurves(String algorithm, ECPrivateKey priv, ECPublicKey pub)
throws Exception {
KeyAgreement kaA;
@@ -1002,41 +1033,6 @@ public class EcdhTest extends TestCase {
}
/**
- * This test tries to catch implementations that verify that the point of the public key is on the
- * curve defined by the private key, but fails to verify that public key and private key use the
- * same curve.
- *
- * <p>Bouncycastle v.1.53 fails this test. I.e. this version only checks that the shared secret is
- * on the curve, but does not check whether the two curves are the same. Currently the test fails
- * with a NullPointerException (possibly because of unexpected points at infinity) and it is
- * unclear if the bug is exploitable.
- */
- // TODO(bleichen): This can be merged with testModifiedPublic once this is fixed.
- public void testDistinctCurvesSmallSubGroup() throws Exception {
- KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
- ECGenParameterSpec ecSpec256 = new ECGenParameterSpec("secp256r1");
- keyGen.initialize(ecSpec256);
- ECPrivateKey priv = (ECPrivateKey) keyGen.generateKeyPair().getPrivate();
- // Get public key for a group of order 3. I.e., (W, -W, infinity) where W is the public key
- // point. Since W ,-W and infinity are points on secp256r1, implementations fail if they only
- // check whether points are on the curve but fail to compare the parameters of the curve.
- ECPublicKeySpec weak = EcUtil.getWeakPublicKey(EcUtil.getNistP256Params());
- KeyFactory kf = KeyFactory.getInstance("EC");
- ECPublicKey weakPub;
- try {
- weakPub = (ECPublicKey) kf.generatePublic(weak);
- } catch (GeneralSecurityException ex) {
- // The provider does not support non-standard curves or did a validity check.
- // Both would be correct.
- System.out.println("Skipping testDistinctCurvesSmallSubGroup: can't forge weak public key.");
- return;
- }
- for (String algorithm : ECDH_VARIANTS) {
- testDistinctCurves(algorithm, priv, weakPub);
- }
- }
-
- /**
* This test modifies the order of group in the public key. A severe bug would be an
* implementation that leaks information whether the private key is larger than the order given in
* the public key. Also a severe bug would be to reduce the private key modulo the order given in
diff --git a/java/com/google/security/wycheproof/testcases/EcdsaTest.java b/java/com/google/security/wycheproof/testcases/EcdsaTest.java
index 37cfa82..92058a7 100644
--- a/java/com/google/security/wycheproof/testcases/EcdsaTest.java
+++ b/java/com/google/security/wycheproof/testcases/EcdsaTest.java
@@ -18,6 +18,8 @@ package com.google.security.wycheproof;
import com.google.security.wycheproof.WycheproofRunner.ProviderType;
import com.google.security.wycheproof.WycheproofRunner.SlowTest;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
import java.math.BigInteger;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyFactory;
@@ -54,10 +56,10 @@ public class EcdsaTest extends TestCase {
static final String CURVE = "secp256r1";
static final BigInteger PubX =
new BigInteger(
- "3390396496586153202365024500890309020181905168626402195853036609" + "0984128098564");
+ "33903964965861532023650245008903090201819051686264021958530366090984128098564");
static final BigInteger PubY =
new BigInteger(
- "1135421298983937257390683162600855221890652900790509030911087400" + "65052129055287");
+ "113542129898393725739068316260085522189065290079050903091108740065052129055287");
// Valid signatures for MESSAGE
static final String[] VALID_SIGNATURES = {
@@ -67,82 +69,387 @@ public class EcdsaTest extends TestCase {
};
/**
- * Test vectors with invalid signatures. The motivation for these test vectors are previously
- * broken implementations. - The implementation of DSA in gpg4browsers accepted signatures with
- * r=1 and s=q as valid. Similar bugs in ECDSA are thinkable, hence the test vectors contain a
- * number of tests with edge case integers. - CVE-2013-2944: strongSwan 5.0.4 accepts invalid
- * ECDSA signatures when openssl is used. (Not sure if the following interpretation is correct,
- * because of missing details). OpenSSLs error codes are easy to misinterpret. For many functions
- * the result can be 0 (verification failed), 1 (verification succeded) or -1 (invalid format). A
- * simple if (result) { ... } will be incorrect in such situations. The test vectors below contain
- * incorrectly encoded signatures. - careless ASN parsing. For example SunEC throws various run
- * time exceptions when the ASN encoding is broken. NOTE(bleichen): The following test vectors
- * were generated with some python code. New test vectors should best be done by extending this
- * code.
+ * The following test vectors contain a valid signature that use alternative BER encoding.
+ * Whether such signatures are accepted as valid or rejected depends on the implementation.
+ * Allowing alternative BER encodings is in many cases benign. However, there are cases where this
+ * kind of signature malleability was a problem. See for example
+ * https://en.bitcoin.it/wiki/Transaction_Malleability
*/
+ // NOTE(bleichen): The following test vectors were generated with some python code.
+ // New test vectors should best be done by extending this code. Some of the signatures
+ // can be moved to INVALID_SIGNATURES, when b/31572415 is fixed.
+ static final String[] MODIFIED_SIGNATURES = {
+ // BER:long form encoding of length
+ "308145022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d"
+ + "491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e762"
+ + "85cd59f43260ecce",
+ "304602812100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d"
+ + "491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e762"
+ + "85cd59f43260ecce",
+ "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f028120747291dd2f3f44af7ace68ea33431d6f94e418c106a6e762"
+ + "85cd59f43260ecce",
+ // BER:length contains leading 0
+ "30820045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ "30470282002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f02820020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // BER:prepending 0's to integer
+ "30470223000000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f02220000747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // NOTE (bleichen): belongs into INVALID_SIGNATURES. We only keep these
+ // sigantures here because of b/31572415.
+ // length = 2**31 - 1
+ "30847fffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "304902847fffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f02847fffffff747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ };
+
+ /**
+ * Test vectors with invalid signatures.
+ * The motivation for these test vectors are previously broken implementations. E.g.
+ * <ul>
+ * <li> The implementation of DSA in gpg4browsers accepted signatures with r=1 and s=q as valid.
+ * Similar bugs in ECDSA are thinkable, hence the test vectors contain a number of tests with
+ * edge case integers.
+ * <li> CVE-2013-2944: strongSwan 5.0.4 accepts invalid ECDSA signatures when openssl is used.
+ * (Not sure if the following interpretation is correct, because of missing details).
+ * OpenSSLs error codes are easy to misinterpret. For many functions
+ * the result can be 0 (verification failed), 1 (verification succeded)
+ * or -1 (invalid format). A simple <code>if (result) { ... }</code> will be incorrect in
+ * such situations. The test vectors below contain incorrectly encoded signatures.
+ * </ul>
+ * <p> {@link java.security.Signature#verify(byte[])} should either return false or throw a
+ * SignatureException. Other behaviour such as throwing a RuntimeException might allow a denial
+ * of service attack:
+ * <ul>
+ * <li> CVE-2016-5546: OpenJDK8 throwed an OutOfmemoryError on some signatures.
+ * </ul>
+ * Some of the test vectors were derived from a valid signature by corrupting the DER encoding.
+ * If providers accepts such modified signatures for legacy purpose, then these signatures
+ * should be moved to MODIFIED_SIGNATURES.
+ */
+ // NOTE(bleichen): The following test vectors were generated with some python code. New test
+ // vectors should best be done by extending the python code.
static final String[] INVALID_SIGNATURES = {
- // missing argument
- "30220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f4" + "3260ecce",
- "3023022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49" + "1b39fd2c3f",
- "",
- // empty
- "302402000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd" + "59f43260ecce",
- "3025022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49" + "1b39fd2c3f0200",
- "3000",
- // integer overflows
+ // wrong length
+ "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022200b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0221747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f021f747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ // uint32 overflow in length
+ "30850100000045022100b7babae9332b54b8a3a05b7004579821a887a1b21465"
+ + "f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c1"
+ + "06a6e76285cd59f43260ecce",
"304a0285010000002100b7babae9332b54b8a3a05b7004579821a887a1b21465"
+ "f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c1"
+ "06a6e76285cd59f43260ecce",
- "304e028901000000000000002100b7babae9332b54b8a3a05b7004579821a887"
- + "a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f"
- + "94e418c106a6e76285cd59f43260ecce",
"304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ "1b39fd2c3f02850100000020747291dd2f3f44af7ace68ea33431d6f94e418c1"
+ "06a6e76285cd59f43260ecce",
- "304e022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
- + "1b39fd2c3f0289010000000000000020747291dd2f3f44af7ace68ea33431d6f"
- + "94e418c106a6e76285cd59f43260ecce",
- "30850100000045022100b7babae9332b54b8a3a05b7004579821a887a1b21465"
- + "f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c1"
- + "06a6e76285cd59f43260ecce",
+ // uint64 overflow in length
"3089010000000000000045022100b7babae9332b54b8a3a05b7004579821a887"
+ "a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f"
+ "94e418c106a6e76285cd59f43260ecce",
+ "304e028901000000000000002100b7babae9332b54b8a3a05b7004579821a887"
+ + "a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f"
+ + "94e418c106a6e76285cd59f43260ecce",
+ "304e022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0289010000000000000020747291dd2f3f44af7ace68ea33431d6f"
+ + "94e418c106a6e76285cd59f43260ecce",
+ // length = 2**32 - 1
+ "3084ffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "30490284ffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0284ffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ // length = 2**64 - 1
+ "3088ffffffffffffffff022100b7babae9332b54b8a3a05b7004579821a887a1"
+ + "b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ "304d0288ffffffffffffffff00b7babae9332b54b8a3a05b7004579821a887a1"
+ + "b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0288ffffffffffffffff747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ // removing sequence
+ "",
+ // appending 0's to sequence
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce0000",
+ // prepending 0's to sequence
+ "30470000022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // appending unused 0's
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce0000",
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // appending null value
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce0500",
+ "3047022300b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f05000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0222747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce0500",
+ // including garbage
+ "304949803045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "304925003045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "30473045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce0004deadbeef",
+ "304922254980022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "304922252500022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "304d2223022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0004deadbeef0220747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f222449800220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f222425000220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f22220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce0004deadbeef",
+ // including undefined tags
+ "304daa00bb00cd003045022100b7babae9332b54b8a3a05b7004579821a887a1"
+ + "b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ "304baa02aabb3045022100b7babae9332b54b8a3a05b7004579821a887a1b214"
+ + "65f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418"
+ + "c106a6e76285cd59f43260ecce",
+ "304d2229aa00bb00cd00022100b7babae9332b54b8a3a05b7004579821a887a1"
+ + "b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ "304b2227aa02aabb022100b7babae9332b54b8a3a05b7004579821a887a1b214"
+ + "65f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418"
+ + "c106a6e76285cd59f43260ecce",
+ "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f2228aa00bb00cd000220747291dd2f3f44af7ace68ea33431d6f94"
+ + "e418c106a6e76285cd59f43260ecce",
+ "304b022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f2226aa02aabb0220747291dd2f3f44af7ace68ea33431d6f94e418"
+ + "c106a6e76285cd59f43260ecce",
+ // changing tag value
+ "2e45022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3245022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "ff45022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045042100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045ff2100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0420747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3fff20747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ // dropping value of sequence
+ "3000",
+ // using composition
+ "304930010230442100b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "304922250201000220b7babae9332b54b8a3a05b7004579821a887a1b21465f7"
+ + "db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f2224020174021f7291dd2f3f44af7ace68ea33431d6f94e418c106"
+ + "a6e76285cd59f43260ecce",
+ // truncate sequence
+ "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ec",
+ "30442100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b"
+ + "39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd"
+ + "59f43260ecce",
+ // prepend empty sequence
+ "30473000022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // append empty sequence
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce3000",
+ // sequence of sequence
+ "30473045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a"
+ + "3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // truncated sequence
+ "3023022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f",
+ // repeat element in sequence
+ "3067022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ // removing integer
+ "30220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
+ // appending 0's to integer
+ "3047022300b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e7"
+ + "6285cd59f43260ecce",
+ "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0222747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce0000",
+ // dropping value of integer
+ "302402000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
+ "3025022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0200",
+ // modify first byte of integer
+ "3045022101b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220757291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ // modify last byte of integer
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3e0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260eccf",
+ // truncate integer
+ "3044022000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd"
+ + "59f43260ecce",
+ "30440220b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b"
+ + "39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd"
+ + "59f43260ecce",
+ "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f021f747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ec",
+ "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f021f7291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd"
+ + "59f43260ecce",
+ // leading ff in integer
+ "30460222ff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d"
+ + "491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e762"
+ + "85cd59f43260ecce",
+ "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f0221ff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e762"
+ + "85cd59f43260ecce",
// infinity
- "30250901800220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285" + "cd59f43260ecce",
- "3026022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49" + "1b39fd2c3f090180",
- // Signatures with special case values for r and s (such as 0 and 1).
- // Such values often uncover implementation errors.
- "300402000200",
- "30050200020101",
- "300502000201ff",
- "30250200022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3" + "b9cac2fc632551",
- "30250200022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3" + "b9cac2fc632550",
- "30250200022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3" + "b9cac2fc632552",
- "30250200022100ffffffff00000001000000000000000000000000ffffffffff" + "ffffffffffffff",
- "30250200022100ffffffff000000010000000000000000000000010000000000" + "00000000000000",
- "30070200090380fe01",
- "30050201010200",
+ "30250901800220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
+ "3026022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f090180",
+ // Vectors where r or s have been modified e.g. by adding or subtracting the order of the
+ // group or field and hence violate the range check for r and s required by ECDSA.
+ "30450221ff48454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6"
+ + "e4c602d3c10220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022101b7babae8332b54b9a3a05b7004579821656e9c5fbb7d96607df713"
+ + "de366051900220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3044022048454515ccd4ab485c5fa48ffba867de145f58fb92b1a6a9697c81a7"
+ + "c265f9120220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd"
+ + "59f43260ecce",
+ "3045022101b7babae8332b54b9a3a05b7004579821a887a1b31465f7db8a3d49"
+ + "1b39fd2c3e0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285"
+ + "cd59f43260ecce",
+ "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f02208b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a"
+ + "32a60bcd9f1332",
+ "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f022101747291dc2f3f44b07ace68ea33431d6f51cb136eadbe85e7"
+ + "798724b72ec4121f",
+ "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d49"
+ + "1b39fd2c3f022101747291dc2f3f44b07ace68ea33431d6f94e418c206a6e762"
+ + "85cd59f43260eccd",
+ // Signatures with special case values for r and s (such as 0 and 1). Such values often
+ // uncover implementation errors.
+ "3006020100020100",
+ "3006020100020101",
+ "30060201000201ff",
+ "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
+ "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
+ "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
+ "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
+ "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000",
+ "3008020100090380fe01",
+ "3006020101020100",
"3006020101020101",
"30060201010201ff",
- "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84" + "f3b9cac2fc632551",
- "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84" + "f3b9cac2fc632550",
- "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84" + "f3b9cac2fc632552",
- "3026020101022100ffffffff00000001000000000000000000000000ffffffff" + "ffffffffffffffff",
- "3026020101022100ffffffff0000000100000000000000000000000100000000" + "0000000000000000",
+ "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
+ "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
+ "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
+ "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
+ "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000",
"3008020101090380fe01",
- "30050201ff0200",
+ "30060201ff020100",
"30060201ff020101",
"30060201ff0201ff",
- "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84" + "f3b9cac2fc632551",
- "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84" + "f3b9cac2fc632550",
- "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84" + "f3b9cac2fc632552",
- "30260201ff022100ffffffff00000001000000000000000000000000ffffffff" + "ffffffffffffffff",
- "30260201ff022100ffffffff0000000100000000000000000000000100000000" + "0000000000000000",
+ "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
+ "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
+ "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
+ "30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
+ "30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000",
"30080201ff090380fe01",
- "3025022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc6325510200",
- "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc632551020101",
- "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc6325510201ff",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff",
"3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ "c2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84"
+ "f3b9cac2fc632551",
@@ -158,10 +465,11 @@ public class EcdsaTest extends TestCase {
"3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ "c2fc632551022100ffffffff0000000100000000000000000000000100000000"
+ "0000000000000000",
- "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc632551090380fe01",
- "3025022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc6325500200",
- "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc632550020101",
- "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc6325500201ff",
+ "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ + "c2fc632551090380fe01",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff",
"3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ "c2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84"
+ "f3b9cac2fc632551",
@@ -177,10 +485,11 @@ public class EcdsaTest extends TestCase {
"3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ "c2fc632550022100ffffffff0000000100000000000000000000000100000000"
+ "0000000000000000",
- "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc632550090380fe01",
- "3025022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc6325520200",
- "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc632552020101",
- "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc6325520201ff",
+ "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ + "c2fc632550090380fe01",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101",
+ "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff",
"3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ "c2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84"
+ "f3b9cac2fc632551",
@@ -196,10 +505,11 @@ public class EcdsaTest extends TestCase {
"3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ "c2fc632552022100ffffffff0000000100000000000000000000000100000000"
+ "0000000000000000",
- "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca" + "c2fc632552090380fe01",
- "3025022100ffffffff00000001000000000000000000000000ffffffffffffff" + "ffffffffff0200",
- "3026022100ffffffff00000001000000000000000000000000ffffffffffffff" + "ffffffffff020101",
- "3026022100ffffffff00000001000000000000000000000000ffffffffffffff" + "ffffffffff0201ff",
+ "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9ca"
+ + "c2fc632552090380fe01",
+ "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100",
+ "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101",
+ "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff",
"3046022100ffffffff00000001000000000000000000000000ffffffffffffff"
+ "ffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84"
+ "f3b9cac2fc632551",
@@ -215,10 +525,11 @@ public class EcdsaTest extends TestCase {
"3046022100ffffffff00000001000000000000000000000000ffffffffffffff"
+ "ffffffffff022100ffffffff0000000100000000000000000000000100000000"
+ "0000000000000000",
- "3028022100ffffffff00000001000000000000000000000000ffffffffffffff" + "ffffffffff090380fe01",
- "3025022100ffffffff0000000100000000000000000000000100000000000000" + "00000000000200",
- "3026022100ffffffff0000000100000000000000000000000100000000000000" + "0000000000020101",
- "3026022100ffffffff0000000100000000000000000000000100000000000000" + "00000000000201ff",
+ "3028022100ffffffff00000001000000000000000000000000ffffffffffffff"
+ + "ffffffffff090380fe01",
+ "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100",
+ "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101",
+ "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff",
"3046022100ffffffff0000000100000000000000000000000100000000000000"
+ "0000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84"
+ "f3b9cac2fc632551",
@@ -234,7 +545,8 @@ public class EcdsaTest extends TestCase {
"3046022100ffffffff0000000100000000000000000000000100000000000000"
+ "0000000000022100ffffffff0000000100000000000000000000000100000000"
+ "0000000000000000",
- "3028022100ffffffff0000000100000000000000000000000100000000000000" + "0000000000090380fe01",
+ "3028022100ffffffff0000000100000000000000000000000100000000000000"
+ + "0000000000090380fe01",
};
/**
@@ -295,7 +607,8 @@ public class EcdsaTest extends TestCase {
String message,
String algorithm,
String signatureType,
- boolean isValid)
+ boolean isValidDER,
+ boolean isValidBER)
throws Exception {
byte[] messageBytes = message.getBytes("UTF-8");
Signature verifier = Signature.getInstance(algorithm);
@@ -314,11 +627,11 @@ public class EcdsaTest extends TestCase {
// We don't flag these cases and simply consider the signature as invalid.
verified = false;
}
- //
- if (isValid && !verified) {
+ if (!verified && isValidDER) {
System.out.println(signatureType + " was not verified:" + signature);
errors++;
- } else if (!isValid && verified) {
+ }
+ if (verified && !isValidBER) {
System.out.println(signatureType + " was verified:" + signature);
errors++;
}
@@ -328,7 +641,19 @@ public class EcdsaTest extends TestCase {
public void testValidSignatures() throws Exception {
testVectors(
- VALID_SIGNATURES, publicKey1(), "Hello", "SHA256WithECDSA", "Valid ECDSA signature", true);
+ VALID_SIGNATURES, publicKey1(), "Hello", "SHA256WithECDSA", "Valid ECDSA signature",
+ true, true);
+ }
+
+ public void testModifiedSignatures() throws Exception {
+ testVectors(
+ MODIFIED_SIGNATURES,
+ publicKey1(),
+ "Hello",
+ "SHA256WithECDSA",
+ "Modified ECDSA signature",
+ false,
+ true);
}
public void testInvalidSignatures() throws Exception {
@@ -338,6 +663,7 @@ public class EcdsaTest extends TestCase {
"Hello",
"SHA256WithECDSA",
"Invalid ECDSA signature",
+ false,
false);
}
@@ -459,4 +785,118 @@ public class EcdsaTest extends TestCase {
testBias("SHA512WithECDSA", "secp521r1", EcUtil.getNistP521Params());
testBias("SHA256WithECDSA", "brainpoolP256r1", EcUtil.getBrainpoolP256r1Params());
}
+
+ /**
+ * Tests for a potential timing attack. This test checks if there is a correlation between the
+ * timing of signature generation and the size of the one-time key k. This is for example the case
+ * if a double and add method is used for the point multiplication. The test fails if such a
+ * correlation can be shown with high confidence. Further analysis will be necessary to determine
+ * how easy it is to exploit the bias in a timing attack.
+ */
+ // TODO(bleichen): Determine if there are exploitable providers.
+ //
+ // SunEC currently fails this test. Since ECDSA typically is used with EC groups whose order
+ // is 224 bits or larger, it is unclear whether the same attacks that apply to DSA are practical.
+ //
+ // The ECDSA implementation in BouncyCastle leaks information about k through timing too.
+ // The test has not been optimized to detect this bias. It would require about 5'000'000 samples,
+ // which is too much for a simple unit test.
+ //
+ // BouncyCastle uses FixedPointCombMultiplier for ECDSA. This is a method using
+ // precomputation. The implementation is not constant time, since the precomputation table
+ // contains the point at infinity and adding this point is faster than ordinary point additions.
+ // The timing leak only has a small correlation to the size of k and at the moment it is is very
+ // unclear if the can be exploited. (Randomizing the precomputation table by adding the same
+ // random point to each element in the table and precomputing the necessary offset to undo the
+ // precomputation seems much easier than analyzing this.)
+ public void testTiming(String algorithm, String curve, ECParameterSpec ecParams)
+ throws Exception {
+ ThreadMXBean bean = ManagementFactory.getThreadMXBean();
+ if (!bean.isCurrentThreadCpuTimeSupported()) {
+ System.out.println("getCurrentThreadCpuTime is not supported. Skipping");
+ return;
+ }
+ KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
+ try {
+ keyGen.initialize(ecParams);
+ } catch (InvalidAlgorithmParameterException ex) {
+ System.out.println("This provider does not support curve:" + curve);
+ return;
+ }
+ KeyPair keyPair = keyGen.generateKeyPair();
+ ECPrivateKey priv = (ECPrivateKey) keyPair.getPrivate();
+
+ String message = "Hello";
+ String hashAlgorithm = getHashAlgorithm(algorithm);
+ byte[] messageBytes = message.getBytes("UTF-8");
+ byte[] digest = MessageDigest.getInstance(hashAlgorithm).digest(messageBytes);
+ BigInteger h = new BigInteger(1, digest);
+ Signature signer = Signature.getInstance(algorithm);
+ signer.initSign(priv);
+ // The number of samples used for the test. This number is a bit low.
+ // I.e. it just barely detects that SunEC leaks information about the size of k.
+ int samples = 50000;
+ long[] timing = new long[samples];
+ BigInteger[] k = new BigInteger[samples];
+ for (int i = 0; i < samples; i++) {
+ long start = bean.getCurrentThreadCpuTime();
+ signer.update(messageBytes);
+ byte[] signature = signer.sign();
+ timing[i] = bean.getCurrentThreadCpuTime() - start;
+ k[i] = extractK(signature, h, priv);
+ }
+ long[] sorted = Arrays.copyOf(timing, timing.length);
+ Arrays.sort(sorted);
+ double n = priv.getParams().getOrder().doubleValue();
+ double expectedAverage = n / 2;
+ double maxSigma = 0;
+ System.out.println("testTiming algorithm:" + algorithm);
+ for (int idx = samples - 1; idx > 10; idx /= 2) {
+ long cutoff = sorted[idx];
+ int count = 0;
+ BigInteger total = BigInteger.ZERO;
+ for (int i = 0; i < samples; i++) {
+ if (timing[i] <= cutoff) {
+ total = total.add(k[i]);
+ count += 1;
+ }
+ }
+ double expectedStdDev = n / Math.sqrt(12 * count);
+ double average = total.doubleValue() / count;
+ // Number of standard deviations that the average is away from
+ // the expected value:
+ double sigmas = (expectedAverage - average) / expectedStdDev;
+ if (sigmas > maxSigma) {
+ maxSigma = sigmas;
+ }
+ System.out.println(
+ "count:"
+ + count
+ + " cutoff:"
+ + cutoff
+ + " relative average:"
+ + (average / expectedAverage)
+ + " sigmas:"
+ + sigmas);
+ }
+ // Checks if the signatures with a small timing have a biased k.
+ // We use 7 standard deviations, so that the probability of a false positive is smaller
+ // than 10^{-10}.
+ if (maxSigma >= 7) {
+ fail("Signatures with short timing have a biased k");
+ }
+ }
+
+ @SlowTest(providers = {ProviderType.BOUNCY_CASTLE, ProviderType.CONSCRYPT, ProviderType.OPENJDK,
+ ProviderType.SPONGY_CASTLE})
+ public void testTimingAll() throws Exception {
+ testTiming("SHA256WithECDSA", "secp256r1", EcUtil.getNistP256Params());
+ // TODO(bleichen): crypto libraries sometimes use optimized code for curves that are frequently
+ // used. Hence it would make sense to test distinct curves. But at the moment testing many
+ // curves is not practical since one test alone is already quite time consuming.
+ // testTiming("SHA224WithECDSA", "secp224r1", EcUtil.getNistP224Params());
+ // testTiming("SHA384WithECDSA", "secp384r1", EcUtil.getNistP384Params());
+ // testTiming("SHA512WithECDSA", "secp521r1", EcUtil.getNistP521Params());
+ // testTiming("SHA256WithECDSA", "brainpoolP256r1", EcUtil.getBrainpoolP256r1Params());
+ }
}
diff --git a/java/com/google/security/wycheproof/testcases/EciesTest.java b/java/com/google/security/wycheproof/testcases/EciesTest.java
index 534a224..791d6ea 100644
--- a/java/com/google/security/wycheproof/testcases/EciesTest.java
+++ b/java/com/google/security/wycheproof/testcases/EciesTest.java
@@ -142,31 +142,16 @@ public class EciesTest extends TestCase {
}
/**
- * Check the length of the ciphertext. TODO(bleichen): This is more an explanation what is going
- * on than a test. Maybe remove this later.
+ * Tries to decrypt ciphertexts where the symmetric part has been randomized.
+ * If this randomization leads to distinguishable exceptions then this may indicate that the
+ * implementation is vulnerable to a padding attack.
+ *
+ * Problems detected:
+ * <ul>
+ * <li> CVE-2016-1000345 BouncyCastle before v.1.56 is vulnerable to a padding oracle attack.
+ * </ul>
*/
@SuppressWarnings("InsecureCipherMode")
- public void testCiphertextLength() throws Exception {
- String algorithm = "ECIESwithAES-CBC";
- final int messageLength = 40;
- final int coordinateSize = 32;
- byte[] message = new byte[messageLength];
- ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
- KeyPairGenerator kf = KeyPairGenerator.getInstance("EC");
- kf.initialize(ecSpec);
- KeyPair keyPair = kf.generateKeyPair();
- PublicKey pub = keyPair.getPublic();
- Cipher ecies = Cipher.getInstance(algorithm);
- ecies.init(Cipher.ENCRYPT_MODE, pub);
- byte[] ciphertext = ecies.doFinal(message);
- assertEquals(
- expectedCiphertextLength(algorithm, coordinateSize, messageLength), ciphertext.length);
- }
-
- // Tries to decrypt ciphertexts where the symmetric part has been
- // randomized. Distinguishable exceptions mean that a padding attack
- // may be possible.
- @SuppressWarnings("InsecureCipherMode")
public void testExceptions(String algorithm) throws Exception {
Cipher ecies;
try {
@@ -317,8 +302,7 @@ public class EciesTest extends TestCase {
*
* <p>This test tries to verify this.
*/
- /* TODO(bleichen): There's no point to run this test as long as not even the previous basic
- test fails.
+ /* TODO(bleichen): There's no point to run this test as long as the previous basic test fails.
public void testByteBufferAlias() throws Exception {
byte[] message = "Hello".getBytes("UTF-8");
String algorithm = "ECIESWithAES-CBC";
diff --git a/java/com/google/security/wycheproof/testcases/RsaKeyTest.java b/java/com/google/security/wycheproof/testcases/RsaKeyTest.java
index 26480b6..b761dae 100644
--- a/java/com/google/security/wycheproof/testcases/RsaKeyTest.java
+++ b/java/com/google/security/wycheproof/testcases/RsaKeyTest.java
@@ -23,6 +23,7 @@ import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import junit.framework.TestCase;
@@ -53,6 +54,1344 @@ public class RsaKeyTest extends TestCase {
+ "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ "0001";
+ /**
+ * Encodings of the public key from ENCODED_PUBLIC_KEY with modifications.
+ * This list so far has just a simple purpose: it is used to check whether parsing the key
+ * leads to some unexpected exceptions. I.e. it should not be possible to crash an
+ * application with an modified public key.
+ */
+ public static final String[] MODIFIED_PUBLIC_KEY = {
+ // length contains leading 0
+ "3082009f300d06092a864886f70d010101050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "3081a13082000d06092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f068200092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f06092a864886f70d0101010582000003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a0300d06092a864886f70d01010105000382008d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "30819f300d06092a864886f70d010101050003818d3082008902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101050003818d30818a0282008100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02820003"
+ + "010001",
+ // wrong length
+ "30a0300d06092a864886f70d010101050003818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "309e300d06092a864886f70d010101050003818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819f300e06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300c06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d060a2a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06082a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101050103818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819e300d06092a864886f70d0101010500038e0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d0101010500038c0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819d300d06092a864886f70d010101050003818b308a02818100ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "30819d300d06092a864886f70d010101050003818b308802818100ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "30819d300d06092a864886f70d010101050003818b308188028200ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "30819d300d06092a864886f70d010101050003818b308188028000ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02040100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02020100"
+ + "01",
+ // uint32 overflow in length
+ "3085010000009f300d06092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a43085010000000d06092a864886f70d010101050003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a43012068501000000092a864886f70d010101050003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a4301206092a864886f70d0101010585010000000003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a3300d06092a864886f70d01010105000385010000008d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a2300d06092a864886f70d01010105000381903085010000008902818100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "0203010001",
+ "3081a2300d06092a864886f70d010101050003819030818d0285010000008100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "0203010001",
+ "3081a3300d06092a864886f70d010101050003819130818e02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02850100"
+ + "000003010001",
+ // uint64 overflow in length
+ "308901000000000000009f300d06092a864886f70d010101050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a8308901000000000000000d06092a864886f70d010101050003818d0030"
+ + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410"
+ + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4"
+ + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984"
+ + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac"
+ + "f9a0b351a23f0203010001",
+ "3081a8301606890100000000000000092a864886f70d010101050003818d0030"
+ + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410"
+ + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4"
+ + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984"
+ + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac"
+ + "f9a0b351a23f0203010001",
+ "3081a8301606092a864886f70d010101058901000000000000000003818d0030"
+ + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410"
+ + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4"
+ + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984"
+ + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac"
+ + "f9a0b351a23f0203010001",
+ "3081a7300d06092a864886f70d0101010500038901000000000000008d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a6300d06092a864886f70d01010105000381943089010000000000000089"
+ + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6"
+ + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1"
+ + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562"
+ + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0"
+ + "b351a23f0203010001",
+ "3081a6300d06092a864886f70d01010105000381943081910289010000000000"
+ + "00008100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6"
+ + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1"
+ + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562"
+ + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0"
+ + "b351a23f0203010001",
+ "3081a7300d06092a864886f70d010101050003819530819202818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02890100"
+ + "00000000000003010001",
+ // length = 2**32 - 1
+ "3084ffffffff300d06092a864886f70d010101050003818d0030818902818100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "0203010001",
+ "3081a33084ffffffff06092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a330110684ffffffff2a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a3301106092a864886f70d0101010584ffffffff03818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a2300d06092a864886f70d01010105000384ffffffff0030818902818100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "0203010001",
+ "3081a1300d06092a864886f70d010101050003818f3084ffffffff02818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300d06092a864886f70d010101050003818f30818c0284ffffffff00ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0284ffff"
+ + "ffff010001",
+ // length = 2**64 - 1
+ "3088ffffffffffffffff300d06092a864886f70d010101050003818d00308189"
+ + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6"
+ + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1"
+ + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562"
+ + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0"
+ + "b351a23f0203010001",
+ "3081a73088ffffffffffffffff06092a864886f70d010101050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a730150688ffffffffffffffff2a864886f70d010101050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a7301506092a864886f70d0101010588ffffffffffffffff03818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a6300d06092a864886f70d01010105000388ffffffffffffffff00308189"
+ + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6"
+ + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1"
+ + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562"
+ + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0"
+ + "b351a23f0203010001",
+ "3081a5300d06092a864886f70d01010105000381933088ffffffffffffffff02"
+ + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a5300d06092a864886f70d01010105000381933081900288ffffffffffff"
+ + "ffff00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a6300d06092a864886f70d010101050003819430819102818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0288ffff"
+ + "ffffffffffff010001",
+ // removing sequence
+ "",
+ "30819003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd"
+ + "9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb1"
+ + "67d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e"
+ + "043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31"
+ + "dad83563f3a315acf9a0b351a23f0203010001",
+ // appending 0's to sequence
+ "3081a1300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00010000",
+ "3081a1300f06092a864886f70d0101010500000003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "010000",
+ // prepending 0's to sequence
+ "3081a10000300d06092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f000006092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b000002818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ // appending unused 0's
+ "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00010000",
+ "3081a1300d06092a864886f70d0101010500000003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f06092a864886f70d0101010000050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a0300d06092a864886f70d010101050003818e30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "010000",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00000203"
+ + "010001",
+ // appending null value
+ "3081a1300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00010500",
+ "3081a1300f06092a864886f70d0101010500050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f060b2a864886f70d0101010500050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f06092a864886f70d0101010502050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300d06092a864886f70d010101050003818f0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00010500",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "010500",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818300ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f05000203"
+ + "010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02050100"
+ + "010500",
+ // including garbage
+ "3081a4498030819f300d06092a864886f70d010101050003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a4250030819f300d06092a864886f70d010101050003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a230819f300d06092a864886f70d010101050003818d0030818902818100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "02030100010004deadbeef",
+ "3081a330114980300d06092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a330112500300d06092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a7300f300d06092a864886f70d01010105000004deadbeef03818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a33011260d498006092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a33011260d250006092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a73015260b06092a864886f70d0101010004deadbeef050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a3301106092a864886f70d01010125044980050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a3301106092a864886f70d01010125042500050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a7301506092a864886f70d010101250205000004deadbeef03818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a4300d06092a864886f70d0101010500238192498003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a4300d06092a864886f70d0101010500238192250003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a8300d06092a864886f70d010101050023819003818d0030818902818100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "02030100010004deadbeef",
+ "3081a3300d06092a864886f70d010101050003819130818e4980308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a3300d06092a864886f70d010101050003819130818e2500308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a7300d06092a864886f70d010101050003819530818c30818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "030100010004deadbeef",
+ "3081a3300d06092a864886f70d010101050003819130818e2281864980028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a3300d06092a864886f70d010101050003819130818e2281862500028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a7300d06092a864886f70d010101050003819530819222818402818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00"
+ + "04deadbeef0203010001",
+ "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22074980"
+ + "0203010001",
+ "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22072500"
+ + "0203010001",
+ "3081a6300d06092a864886f70d010101050003819430819102818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22050203"
+ + "0100010004deadbeef",
+ // including undefined tags
+ "3081a8aa00bb00cd0030819f300d06092a864886f70d010101050003818d0030"
+ + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410"
+ + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4"
+ + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984"
+ + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac"
+ + "f9a0b351a23f0203010001",
+ "3081a6aa02aabb30819f300d06092a864886f70d010101050003818d00308189"
+ + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6"
+ + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1"
+ + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562"
+ + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0"
+ + "b351a23f0203010001",
+ "3081a73015aa00bb00cd00300d06092a864886f70d010101050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a53013aa02aabb300d06092a864886f70d010101050003818d0030818902"
+ + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a730152611aa00bb00cd0006092a864886f70d010101050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a53013260faa02aabb06092a864886f70d010101050003818d0030818902"
+ + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a7301506092a864886f70d0101012508aa00bb00cd00050003818d003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a5301306092a864886f70d0101012506aa02aabb050003818d0030818902"
+ + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a8300d06092a864886f70d0101010500238196aa00bb00cd0003818d0030"
+ + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410"
+ + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4"
+ + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984"
+ + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac"
+ + "f9a0b351a23f0203010001",
+ "3081a6300d06092a864886f70d0101010500238194aa02aabb03818d00308189"
+ + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6"
+ + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1"
+ + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562"
+ + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0"
+ + "b351a23f0203010001",
+ "3081a7300d06092a864886f70d0101010500038195308192aa00bb00cd003081"
+ + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a5300d06092a864886f70d0101010500038193308190aa02aabb30818902"
+ + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a7300d06092a864886f70d010101050003819530819222818aaa00bb00cd"
+ + "0002818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c"
+ + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0"
+ + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5"
+ + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9"
+ + "a0b351a23f0203010001",
+ "3081a5300d06092a864886f70d0101010500038193308190228188aa02aabb02"
+ + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1"
+ + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109"
+ + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251"
+ + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3"
+ + "51a23f0203010001",
+ "3081a6300d06092a864886f70d010101050003819430819102818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f220baa00"
+ + "bb00cd000203010001",
+ "3081a4300d06092a864886f70d010101050003819230818f02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f2209aa02"
+ + "aabb0203010001",
+ // changing tag value
+ "2e819f300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "32819f300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "ff819f300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f2e0d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f320d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819fff0d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d04092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d08092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300dff092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101030003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101070003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101ff0003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101050001818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101050005818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d0101010500ff818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819e300d06092a864886f70d010101050003818c2e818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c32818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818cff818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818900818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818904818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c308189ff818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f04030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23fff030100"
+ + "01",
+ // dropping value of sequence
+ "3000",
+ "308192300003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab0220"
+ + "42fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b"
+ + "2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfa"
+ + "e42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa7551556"
+ + "3f31dad83563f3a315acf9a0b351a23f0203010001",
+ // using composition
+ "3081a430013030819e0d06092a864886f70d010101050003818d003081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a33011300106300c092a864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a33011260d06012a0608864886f70d010101050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a4300d06092a864886f70d010101050023819203010003818c3081890281"
+ + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4"
+ + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb"
+ + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e"
+ + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351"
+ + "a23f0203010001",
+ "3081a3300d06092a864886f70d010101050003819130818e3001023081888181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a3300d06092a864886f70d010101050003819130818e2281860201000281"
+ + "80ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22070201"
+ + "0102020001",
+ // truncate sequence
+ "30819e300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00",
+ "30819e0d06092a864886f70d010101050003818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300c06092a864886f70d0101010503818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300c092a864886f70d010101050003818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819d300d06092a864886f70d010101050003818b30818802818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100",
+ "30819d300d06092a864886f70d010101050003818b308188818100ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ // prepend empty sequence
+ "3081a13000300d06092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300f300006092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b300002818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ // append empty sequence
+ "3081a1300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00013000",
+ "3081a1300f06092a864886f70d0101010500300003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "013000",
+ // sequence of sequence
+ "3081a230819f300d06092a864886f70d010101050003818d0030818902818100"
+ + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9"
+ + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26"
+ + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb"
+ + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f"
+ + "0203010001",
+ "3081a1300f300d06092a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ "3081a1300d06092a864886f70d010101050003818f30818c30818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ // truncated sequence
+ "300f300d06092a864886f70d0101010500",
+ "30819d300b06092a864886f70d01010103818d0030818902818100ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "308199300d06092a864886f70d010101050003818730818402818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f",
+ // repeat element in sequence
+ "3082012f300d06092a864886f70d010101050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "01000103818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd"
+ + "9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb1"
+ + "67d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e"
+ + "043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31"
+ + "dad83563f3a315acf9a0b351a23f0203010001",
+ "3081a3300d06092a864886f70d010101050003819130818e02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "010203010001",
+ // long form encoding of length
+ "3081a030810d06092a864886f70d010101050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "3081a0300e0681092a864886f70d010101050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "3081a0300e06092a864886f70d01010105810003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "30819f300d06092a864886f70d010101050003818d30818a02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02810301"
+ + "0001",
+ // removing oid
+ "3081943002050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab"
+ + "022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5ef"
+ + "b40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e17367"
+ + "9cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa755"
+ + "15563f31dad83563f3a315acf9a0b351a23f0203010001",
+ // appending 0's to oid
+ "3081a1300f060b2a864886f70d0101010000050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ // prepending 0's to oid
+ "3081a1300f060b00002a864886f70d010101050003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ // dropping value of oid
+ "30819630040600050003818d0030818902818100ab9014dc47d44b6d260fc1fe"
+ + "f9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00a"
+ + "c5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e1"
+ + "73679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240a"
+ + "a75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ // modify first byte of oid
+ "30819f300d06092b864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ // modify last byte of oid
+ "30819f300d06092a864886f70d010100050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ // truncate oid
+ "30819e300c06082a864886f70d0101050003818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300c0608864886f70d010101050003818d0030818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ // wrong oid
+ "30819b300906052b0e03021a050003818d0030818902818100ab9014dc47d44b"
+ + "6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c1"
+ + "7fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff51"
+ + "7cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fd"
+ + "fc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "30819f300d0609608648016503040201050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ // longer oid
+ "3081a0300e060a2a864886f70d01010101050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ // oid with modified node
+ "30819f300d06092a864886f70d010111050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "3081a33011060d2a864886f70d01018880808001050003818d00308189028181"
+ + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed"
+ + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a"
+ + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f"
+ + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2"
+ + "3f0203010001",
+ // large integer in oid
+ "3081a8301606122a864886f70d010182808080808080808001050003818d0030"
+ + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410"
+ + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4"
+ + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984"
+ + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac"
+ + "f9a0b351a23f0203010001",
+ // oid with invalid node
+ "3081a0300e060a2a864886f70d010101e0050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "3081a0300e060a2a80864886f70d010101050003818d0030818902818100ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ // appending 0's to null
+ "3081a1300f06092a864886f70d0101010502000003818d0030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ // appending 0's to bit string
+ "3081a1300d06092a864886f70d010101050003818f0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00010000",
+ // prepending 0's to bit string
+ "3081a1300d06092a864886f70d010101050003818f00000030818902818100ab"
+ + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985"
+ + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2"
+ + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1"
+ + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02"
+ + "03010001",
+ // modify first byte of bit string
+ "30819f300d06092a864886f70d010101050003818d0130818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ // modify last byte of bit string
+ "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0000",
+ // truncate bit string
+ "30819e300d06092a864886f70d010101050003818c0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "00",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ // removing integer
+ "3018300d06092a864886f70d0101010500030730050203010001",
+ // appending 0's to integer
+ "3081a0300d06092a864886f70d010101050003818e30818b02818300ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00000203"
+ + "010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02050100"
+ + "010000",
+ // prepending 0's to integer
+ "3081a0300d06092a864886f70d010101050003818e30818b028183000000ab90"
+ + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590"
+ + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8"
+ + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7"
+ + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203"
+ + "010001",
+ "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02050000"
+ + "010001",
+ // dropping value of integer
+ "301a300d06092a864886f70d01010105000309300702000203010001",
+ "30819b300d06092a864886f70d010101050003818930818602818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0200",
+ // modify first byte of integer
+ "30819e300d06092a864886f70d010101050003818c30818902818101ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030000"
+ + "01",
+ // modify last byte of integer
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23e02030100"
+ + "01",
+ "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100"
+ + "00",
+ // truncate integer
+ "30819d300d06092a864886f70d010101050003818b30818802818000ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a20203010001",
+ "30819d300d06092a864886f70d010101050003818b308188028180ab9014dc47"
+ + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05"
+ + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236"
+ + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db"
+ + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
+ "30819d300d06092a864886f70d010101050003818b30818802818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02020100",
+ "30819d300d06092a864886f70d010101050003818b30818802818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02020001",
+ // leading ff in integer
+ "30819f300d06092a864886f70d010101050003818d30818a028182ff00ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301"
+ + "0001",
+ "30819f300d06092a864886f70d010101050003818d30818a02818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0204ff01"
+ + "0001",
+ // infinity
+ "301b300d06092a864886f70d0101010500030a30080901800203010001",
+ "30819c300d06092a864886f70d010101050003818a30818702818100ab9014dc"
+ + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d"
+ + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232"
+ + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295"
+ + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f090180",
+ // n=0
+ "301c300d06092a864886f70d0101010500030b0030080201000203010001",
+ // negative n
+ "30819f300d06092a864886f70d010101050003818d00308189028181ff546feb"
+ + "23b82bb492d9f03e010654fddfbd026a99162849f3abeff3491e2b12367a6fb9"
+ + "82fafd3e8031962ff53a104bf4d34e98275bb546c28c3b2f0ef604a5d93d077d"
+ + "cdc900ae8307bbed1e8c9863051bd1fbc490137e06267b4a9dae8190141e08dd"
+ + "6a243c0203e62cdbf558aaeaa9c0ce2527ca9c0c5cea53065f4cae5dc1020301"
+ + "0001",
+ // e=0
+ "30819d300d06092a864886f70d010101050003818b0030818702818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020100",
+ // e=1
+ "30819d300d06092a864886f70d010101050003818b0030818702818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020101",
+ // e=2
+ "30819d300d06092a864886f70d010101050003818b0030818702818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020102",
+ // negative e
+ "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014"
+ + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046"
+ + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882"
+ + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722"
+ + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203fe"
+ + "ffff",
+ };
+
private void checkPrivateCrtKey(RSAPrivateCrtKey key, int expectedKeySize) throws Exception {
BigInteger p = key.getPrimeP();
BigInteger q = key.getPrimeQ();
@@ -136,4 +1475,39 @@ public class RsaKeyTest extends TestCase {
"X.509", pub.getFormat());
assertEquals(ENCODED_PUBLIC_KEY, TestUtil.bytesToHex(pub.getEncoded()));
}
+
+ /**
+ * Parses a list of modified encodings of an RSA public key.
+ * Expects that any modification either results in an InvalidKeySpecException
+ * or an altered PublicKey.
+ * This test has mostly "defense in depth" characteristic, since applications should
+ * never accept unauthenticated public keys.
+ */
+ public void testModifiedPublicKeyDecoding() throws Exception {
+ KeyFactory kf = KeyFactory.getInstance("RSA");
+ int cnt = 0;
+ for (String encoded : MODIFIED_PUBLIC_KEY) {
+ X509EncodedKeySpec spec = new X509EncodedKeySpec(TestUtil.hexToBytes(encoded));
+ try {
+ RSAPublicKey unusedKey = (RSAPublicKey) kf.generatePublic(spec);
+ // TODO(bleichen): check the keys that are accepted.
+ // To decide whether a key should have been rejected or not the test vectors must be
+ // divided into several categories:
+ // - keys that use BER encoding: these are OK
+ // - keys that include additional fields or garbage: might be OK
+ // - keys where the modification does not change the values: are probably OK
+ // - keys with missing parameters: should be rejected
+ // - keys with impossible values (negative n, negative e): should be rejected.
+ } catch (InvalidKeySpecException ex) {
+ // expected
+ } catch (Exception ex) {
+ System.out.println("generatePublic throws:" + ex.getMessage() + " for " + encoded);
+ cnt++;
+ }
+ }
+ assertEquals(0, cnt);
+ }
+
+ // TODO(bleichen): This test is only needed as long as there are open issues.
+
}
diff --git a/java/com/google/security/wycheproof/testcases/RsaSignatureTest.java b/java/com/google/security/wycheproof/testcases/RsaSignatureTest.java
index 2759a84..3d214fe 100644
--- a/java/com/google/security/wycheproof/testcases/RsaSignatureTest.java
+++ b/java/com/google/security/wycheproof/testcases/RsaSignatureTest.java
@@ -65,6 +65,8 @@ public class RsaSignatureTest extends TestCase {
* around 2012.
* <li> Berserk: http://www.intelsecurity.com/advanced-threat-research/berserk.html
* <li> Truncated comparison of hashes e.g.: http://wiibrew.org/wiki/Signing_bug
+ * <li> CVE-2016-5547: OpenJDK8 RSA signature's throws an OutOfMemoryError for some invalid
+ * signatures
* </ul>
*/
static final String[] SIGNATURES_KEY1 = {
@@ -264,6 +266,38 @@ public class RsaSignatureTest extends TestCase {
+ "3a3d5b1cb1e7dded3352c3c92ded891839263a501afaa78fedfd04546c43d16f"
+ "7a52b800abc9ab1ef827ae0eb19d9b52def2435f1477a48dff61800b4db830e4",
+ // length = 2**31 - 1
+ // padding:30847fffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ // ec113d682299550d7a6e0f345e25
+ "9dcc651cc0a1b4d406112c0d1ebd7a9fb5a2c9d9f9cffbeab2d2821e5ed01efa"
+ + "9d191665794649bd1f588b729e8fba1eaa37a5a736a5863973c338a92b2665d6"
+ + "ead13b72a19d2da778febb94b150e8d750340a3b856fca8b3b6e3cbfecb9c397"
+ + "c23f46912ba546ab0f64ed88404ce317f8fb2278b68950e9712d6b11f5cdfcaa",
+ // padding:303530847fffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ // ec113d682299550d7a6e0f345e25
+ "0397d14205c2f52423ef69c874294dc2b37d5be5d5647f7e83f1dd6783cb41cc"
+ + "e52e6de1dc8c9e93ca1ef887d4c0ea79cd8b26391d638bbd8080bce830bf1bd7"
+ + "fb1de31346f28d609874fafd4a34fb7bee900441f55589ec3c5e190106d8816c"
+ + "adfcfb445834739cafaaa3903ed93cedc41a76aa0ce18fb49a3a73b7b5928735",
+ // padding:3035301106847fffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ // ec113d682299550d7a6e0f345e25
+ "2c3ffd881c1c0ce2e4c98282d6011179a89b1e84b17072bcbbb64164e5e05410"
+ + "d0414a1fdbbc04564f3d80f3891f28c3f02e92bf97b4339b5bd4699614e236d4"
+ + "223cef0688c44b297eb9c0e22246b4cb28983b102a446dc76671206c3b77af68"
+ + "97f2f445512abda37bc9c37257dd4f1c6f0e6ec40929eb6b0058682b9d2f6c66",
+ // padding:30353011060960864801650304020105847fffffff0420532eaabd9574880dbf76b9b8cc00832c20a6
+ // ec113d682299550d7a6e0f345e25
+ "668bd06eafe953fca6a17b0da0f9006ceadb09ad904786b7530148df7eedc146"
+ + "d20a5472c39677d65e59934c00227fb662b3474596e6072f56d2c00c3d31e66f"
+ + "0da85f4670e75c3f2c910c0fec8c98bc31fb2eceff80350b78aec0d316e9bbb3"
+ + "31544d8a3d0b1649291396c717e350bebba3d3c3a0b1d55f010879b8c7b7d4f9",
+ // padding:3035300d0609608648016503040201050004847fffffff532eaabd9574880dbf76b9b8cc00832c20a6
+ // ec113d682299550d7a6e0f345e25
+ "87482257ae1d18d0357428b756ae35a48549536a3439ca3c148eee64f4c096d8"
+ + "96219097d55c14a25eb1490779f6b1471aed238cc0d6aaf265c12ac086d04de9"
+ + "b79a37518056dfacc12cb4916c17505fc7e2e6c1e0db720a286ea65bde4d3da1"
+ + "d2dcb8d0276e8ce73f3f923209149955285c602572cfd24c82e8d96d45f569e6",
+
// length = 2**32 - 1
// padding:3084ffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
@@ -421,42 +455,42 @@ public class RsaSignatureTest extends TestCase {
+ "ad8393d281eca07ebd287364a19045029fa7ed0e62a21e5e42a88a52ea4abc8b",
// including garbage
- // padding:503549803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ // padding:303549803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
- "654b1ba6cd1b13e112c5bbcbae8ea2094a1c6f8c6bb73c9225688aa93fc0e8d3"
- + "26e411bdf2bb8de3951b2f55ccb19d4880a93ed1519021ee8bef1b04997a31e5"
- + "3586c56587e3554bec3c606125ce719b96223fca2b55bed5560ff51ad4ef8018"
- + "d648cd1f4c6354e0fb920fcda79ef68d51d7ef16ec93e74aee9ae4ba1f9f00e7",
- // padding:503525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ "236a815c2441d111d254172149ab2429cc4e6caf3335579bf438f22723de0a4a"
+ + "5e532ed71f24c0fc6032c60aebb2b7e76cd0d14f262d1d9bba80a53dbdb12c9b"
+ + "89902fc5f5511125d21b7df32e9b303c4b393fd6add6ac7536901ea8ae5785dc"
+ + "fe90e85ad0c16146b1f15036c31d7758a364fb54cc1d183b8566bda592ba446c",
+ // padding:303525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
- "04aa2d0bb7edcbad611d49a58b687bf4d0e7e81ce8c05def3f61fb7f5041706b"
- + "61fcffb3fcdc839b3957a64999a3c800449df841c5a6d5af4ab03b6271a0d573"
- + "cea8d8c23ba9db1f5d81ad3b58998c56193ea2445a2f0dad9cc0b91d853ab984"
- + "436b698d31d1caf62c59009750d2395d875811d3919bb8ebac3eb65e0c19e34c",
- // padding:50333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec11
+ "762d30b302cd76b021e237f28017e48488ff3bb30ff9e92db5b1e76eec2ee91c"
+ + "9af03e1c5038afc22591b1cd8cfae648a33ab77901f9f3736e50eea83f7c7a45"
+ + "46dc55c0265fb17dfdd30250fa3881e34e51b4f2e54554ad098eee952ec888e9"
+ + "11a0ea5df42c0560bcb4bdd718c88d834b534917e555c38fd1ec3593b2f25b39",
+ // padding:30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec11
// 3d682299550d7a6e0f345e250004deadbeef
- "4bd7c5fde38919661cf5784ed09aa3abebf7c16b8a70c3ebbff8f8727cefb3d2"
- + "532229adefbb7432e38b1cc13fdd2c05202e8f3d1b669256ef34e4c2f091d724"
- + "e06e019104c0656bf3bea6bc604e4343ff6fd7eabd29a33ff8391ab4b761bbf8"
- + "3141fc12c6ffece32d3623a01d0dfba0dbcc0eedcb042cf33d915cbc41ddb1d8",
- // padding:303550114980300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ "8cbf9d425abef67ff0a7fb648e70b82b1556ac80e46dcff37145b9041bee2bbb"
+ + "fa56817e04994c9cf1123c6df2aeeb1637595eb1e20adef51d657943fd67826a"
+ + "c5d5dfba106ae9cd243f12746917a446ce955034b46ceb0f4d542b7bcd06ad3e"
+ + "6e10899d5338e6d8caf3d4de3cbf45d45a58d946a64d0bc13e97a4ab4e6b6016",
+ // padding:303530114980300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
- "441c9007aeac4adb44dfeca1e583e31e3bf948eaabb7864882a6f178f8f6d5ab"
- + "fe4faed96df55f71652761512223eea64b571735500379e2f8b5d92c1c9a95a0"
- + "276edda1f9902b8a3dc6941e2a09ce5a382c29fd4d4688efe0d532b6430bf0a2"
- + "bd86d28832da4f6e4c2013e31267406b44f60d39d4e21049e25ff7beada5c2e5",
- // padding:303550112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ "6477bd3337d601fe92e19e7f6b216f73eaca68aa408c5a570876ad8db6113505"
+ + "43d1dd458b511e3095e57996ca589c00f2beb6b6fe4564f4373571d904958acd"
+ + "1bcd33f57959a231bb126bb2b37bf1403d52836752198b6954567f07b31ed110"
+ + "5dcc50004e4cd7e897516c536c205b339ff0d35463ca6871ea5dce7a8daed8d7",
+ // padding:303530112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
- "3a95f36a85061148ac22700478bcbe609b6148abadac9f4e53e24ab9aa2c712a"
- + "3fa6a869cce665de06b0049959529c888145f9468d245c1098b2cfa74ca99e3b"
- + "2de839e8a1cd3b3ca5a56e9b9d047ba758301ec42f39af26e3c514a9436115f9"
- + "a446f8f6ec11351ed5234eb63dbc0ea434119042fd0c929d0f54591e1899c0e0",
- // padding:3039500f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00
+ "975d07b7295268a8662aedbd2b65b5eb10bb496077f41b90d12d34ebc7e492f0"
+ + "c7f3a41d4164a279f06ea616f91968628be4ceecd4a554477bc76cc6b2e6bda4"
+ + "042dc253327c4b8fc40e9242cbc8b835114a7379a3081bae4b2803a99deb4a54"
+ + "0f8c149ca5db3a61c7bc9f61cd7e55521660a06603849896c791a18d1c7360e1",
+ // padding:3039300f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00
// 832c20a6ec113d682299550d7a6e0f345e25
- "4531b3c930bce54375573269f91d5c2decaf35ff71b27938abc4ded9c1eb77c1"
- + "244af6d660ad21d1cb224f2f8b791e331597b0a8591844e5c292024cc4994dda"
- + "105e693b0b29642090b502aaa44e3adab3308a66167e2313b8c6dc5a63777959"
- + "be1730d69bef6c0e8116898f4fcc05611af94d5e37ed4ae6e7275c40ab4a47d9",
+ "37352cd11eb5ff7380bfb7c0d3e8d9979ae7cb489a71c31a077d59496547b0c9"
+ + "5a760387ed50eefde0b762222f05a6033740f6e010693edf3ef8ab5f9c57f4eb"
+ + "1f6ccd83287dcc2e90857defe5ba4109bf79ad84ab069c85a25758d22536c688"
+ + "2919245fa2d7e7921b3635d984deeb6555cabdfc46a42c75875d55924c8bac62",
// padding:30353011260d4980060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
"0c783603c7af53df27538b983fb7368e9f62d4552f008f2920a21cff3186d2ac"
@@ -513,30 +547,30 @@ public class RsaSignatureTest extends TestCase {
+ "0fd7bc325b1cf75e1079f8d6df53fe495722cc1ce707cca49bc6f4ed2ca6c4f9",
// including undefined tags
- // padding:5039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00
+ // padding:3039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00
// 832c20a6ec113d682299550d7a6e0f345e25
- "3507fbbb0ae37992789b22c27dc2b5ecc6c3a2cd555ca9049388e1b0c84c14c4"
- + "f3a98d14d7f80ab79d68d2ea140ceb7967171cd153039e98c703b4ce434a37aa"
- + "6ec7e13f06a76ae3a49057394393e20dff96b5157fddbb39faa094b4598c41fd"
- + "a2410510490c54e5184264e74ed7a734cee0d5c536ce68f76509447ebccacea7",
- // padding:5037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c
+ "9f2234b108a45abaed850e19d2f9576f59bb83dbc6165da61c4798638f9c9858"
+ + "7c7eb92a8c901dc4430e4a47dc05681ae811ffcad6f7a604c43551cd0f5d1235"
+ + "49435d622f7efec578301efd49dc6b139abbc3c7d6a26858f6d18f09b863a145"
+ + "d6483c9efc6c322fec1341b6362dc1d752c714efcdfb09097a0ce6df7dbe88a9",
+ // padding:3037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c
// 20a6ec113d682299550d7a6e0f345e25
- "5edc1fd6fd901165dce272e6c5d4ed3fae7917d28aafa278c5bc5eb71a5b4671"
- + "00b9f3afe956e1d61ba2a3936bde573f92096c4500e62d49479f51b0350a3586"
- + "fbf216f56b23cd598118f6ee26cbaea2ba3dc373a0cb789a8a2da057075f063c"
- + "703b12e772e35db546ce0ea3a803d61d2623bea3f1d31e80f8f5b4b410d70677",
- // padding:30395015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00
+ "24ba137a293599ab7e50a0a4f8c7a5cd02dda6a4568c93f84d00ff4729656456"
+ + "3c9051b334db2fd2c081b23d322d4870a61b2435d651d7efb4e1b0920e759f7f"
+ + "d81a937bbc85ff43dbe2b702dec3acf4db68d5fd7b8a2f6d32cc49a7300dd659"
+ + "623b391927a2442d69c6c3c29e59eb80b1d0a95bec6d18a6223cf4357eb7cc96",
+ // padding:30393015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00
// 832c20a6ec113d682299550d7a6e0f345e25
- "493eb9e477f0a6e8e92c8c8b10e2817c3f6061248c3ce16347eb21c35dd41906"
- + "add2d69f5cf6023725e9dd5183bba8d2bbf7be5899c84ec089472477ac016d18"
- + "bdbc04ef27d05c6c21867bae6adba66f1336b5c8944b06a64558982fd07d51ed"
- + "cc4efc4d1f01542094e6dce82a063da4a68aa92afed00d3ace9a9bedea086c61",
- // padding:30375013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c
+ "04023dd35fa479f8156794d02935f8669c023c774b95c5a0e02837e32ccaf7a4"
+ + "ba5195835a15de6a21796eb96bdaed868f9e8b7f0a5a21c1a3058f53aadb62d6"
+ + "ee74cd70b2c38f17e42a1f7ffd88955731b4e15368211ad53f617aacbb54a7e7"
+ + "078740ba6daaca81c1b321b748ea1d13f7aece490226636ecac41bdc275175d6",
+ // padding:30373013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c
// 20a6ec113d682299550d7a6e0f345e25
- "a173341d877e70d384521f1832878599bb93e457cf78b0984f130b9af16ad90d"
- + "0ed8c58f8651d05aed66f359bd20022fd71139880ec7b3896206e662bd96ba49"
- + "f9976e0170884a5726dc097ba3c66227b058a9189b7868259f71b507253761b5"
- + "d634abc8dd27c6bdde54e1062252bd0a1e4aa829886ca778a3f914174094a81b",
+ "253bed76e4b8465ebfffd1b7214ce586294d3bea290517ca2bfc417ba9d8e72d"
+ + "286570c348dc6084fd379c2bf4dae424189964639533e17c409ae18e445210ed"
+ + "4dc98de4ad7336554740d1532d5010a1bd7ebbc33ba48a3365d50669e4f4522d"
+ + "0e5ff7a3bdb1c42c42dee647a8a3ce16633eb33bbc0a869e12cf99f9481dcf85",
// padding:303930152611aa00bb00cd00060960864801650304020105000420532eaabd9574880dbf76b9b8cc00
// 832c20a6ec113d682299550d7a6e0f345e25
"0775598491297eb9004eed66234ded82e047ea2f06837425e6bd27f33b137366"
@@ -679,18 +713,18 @@ public class RsaSignatureTest extends TestCase {
+ "9056ba13b77d35239eea164ddbc8808f8e7e1beb070f551b6e95f90d5bdbd925",
// using composition
- // padding:503530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ // padding:303530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
- "24fa27f7c532f1d58d98309957a42eb0be15acc0038c3a012b3d5a7ff7e0d13b"
- + "696f16fb8eac88ddead2a40a9686ca361fd72afbe4dbe4b3ae6d9ba390564723"
- + "dff0f45fde7db6ebb83bc16573ef2d21f51689a7ad4b8edfbaea1f0674e43868"
- + "0c6ab19cb5a1fe2e90a7082a6217f0f453ba25933b25a7cc65e8562bc78e4fc3",
- // padding:30355011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ "09342a8fb8402b5e50fbf8c5d1cae415ce02c0a803adfed88188982129e84809"
+ + "18dc21616bb5f8381e8dfe13f63234090c32e542a005df70df5e8e00dd2a478d"
+ + "10fff1b61efbdcf0e410236f7c031c9a5f7cd0db9098f8a32a6a49f408e72c4a"
+ + "29b7d27e8041ba605bf089bbdb9777e19b31ecca0d49b90d54701721af79cf3a",
+ // padding:30353011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
- "1a9fe9f10dcf04f35187f5298448adf2f48ce7f0e556d699a42f721289f04390"
- + "48527c3fe0751bc871fd7afb3d70771c048f5b319a40154451e3a3336cc6169b"
- + "73ec5dac98b8f57710b12bf81cdf07228483e66a38f543ea03f9480875eb9b0d"
- + "27d5fb7d53c43106935de0e416dde4cdd33667d730b71e30a63cfa86d3f9de11",
+ "3ef90c414a64601c538c286f2c35f32445039799b8c266eed605027578edda79"
+ + "6a409d905a751bf5c1cdea97840437fa82733d8f27efbbc05da732887078a8f5"
+ + "47bbfb54607a54f893df7dde0c35c45f9c2402bed0405c72e98175e5b9d6f902"
+ + "24e07d12e8c1bbad2fc8b1a14c42dd5fb7e554db5edae89d335705c672cd7b55",
// padding:30353011260d0601600608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6
// ec113d682299550d7a6e0f345e25
"3ad3e4ec3636b5eb8aac2161c04d228491ca0d9da2abd69d8904054373940b39"
@@ -848,14 +882,6 @@ public class RsaSignatureTest extends TestCase {
+ "9dbbb126b314312539931a0163c911f0234f5c3f683c9376f2ecaa3294d71a12"
+ "74f6c63b84ea8faf826eacb05e4fa5459b787ff384b2cfe0f1f4c755f32b5c50",
- // prefix in oid
- // padding:3032300e060a0860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d
- // 682299550d7a6e0f345e25
- "7b4b34bc61b0576e3f940e1d5a281bde047ece50316cc111f08b7278bef71e90"
- + "029db2d63b64268edbfbed464d3c3dd2b9341c8a51fdbb5bb1ea44d86366c0ac"
- + "bfd17515300a50195a9caf34b2b84ee641a405864a7b2b91ed452052f114459a"
- + "316d6afa8e93134e655c0d8befffe5fcf4d48c9e43cfa593893157d6ade8d04d",
-
// wrong oid
// padding:302d300906052b0e03021a05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d
// 7a6e0f345e25
@@ -864,6 +890,50 @@ public class RsaSignatureTest extends TestCase {
+ "6e73ecd8ced0adb52db2c374297119f5fe571bd5396529d13b7225e87db5b5b0"
+ "df38e4c56f2349071b09ff5c1ded919b398d4aff38c6ae29af6f6ff99d3e8836",
+ // longer oid
+ // padding:3032300e060a6086480165030402010105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d
+ // 682299550d7a6e0f345e25
+ "2054d402bf6a148b52972b830c8c8a16a6aeddbcd5c2ae3fd83de67c666e712f"
+ + "a98650308658837a67ab87b2c444bedc7cf995c19af433da9343f260049b1bcb"
+ + "436ebe27d8a502728dfb0daac5d2710e2c39fa000b909aede07ad7a0d27629e0"
+ + "ac27ed9fcd41a39e09f7acdec4c2df77f38c535f46e3b96f2772a81e65e74bb8",
+
+ // oid with modified node
+ // padding:3031300d060960864801650304021105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d68
+ // 2299550d7a6e0f345e25
+ "3a94d241563a2ad97574ec82baefccd9dd114e21fa9169d0f54c4d0f57826224"
+ + "804ddc9b29c1905c59f39bd6aa3366705a85f5e6e18c0eb0f67986b5265e7371"
+ + "865b618e90e5c5313f0b6fce2343aa12d4ed44d6770fa08d4f1342608a4fb627"
+ + "a273f3a1f1340d1f5c55957ce51048e3690a845851009cbfe38d3c96e96d4172",
+ // padding:30353011060d6086480165030402888080800105000420532eaabd9574880dbf76b9b8cc00832c20a6
+ // ec113d682299550d7a6e0f345e25
+ "079cb62831dbeb40a638402865cc92cb49913dae214babc3f4f8d69d64cf1436"
+ + "2c23c8dd6ebcee9c44633dd54a62bb2f0042c20033728fc2f8ff482cf0be3ee1"
+ + "03bacf757b50319495d9a838844ea1064f4bd1f1ebdc1b71a318c3c8f7d76ebd"
+ + "79ef2f3991d4d87e110d60e5fc655adfa4a8e792e46c1c7aa96156b884e2f7a9",
+
+ // large integer in oid
+ // padding:303a3016061260864801650304028280808080808080800105000420532eaabd9574880dbf76b9b8cc
+ // 00832c20a6ec113d682299550d7a6e0f345e25
+ "2c9083459ba6504dc10e0e63edf8ede8bdb4a9728673306908ad4e8f25656d48"
+ + "65f0748b9fd2cf7b51db0a2c659e0ce021fef3d2d3d0cf7c45343729c2001a19"
+ + "d37e29398a9a7e92d7f62693252261f1f7406b54af5447db6e846f981722059b"
+ + "7bb09ba95268c321c156ff659e0ce8e709d2819d5ce15f5dcfa54c55114a611a",
+
+ // oid with invalid node
+ // padding:3032300e060a608648016503040201e005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d
+ // 682299550d7a6e0f345e25
+ "9a76669c75f0f11399699f76e7bfbefc0d29feb5a8d86de1f751eedbb5c9e7b8"
+ + "1ecbc224534db67cfe1b611951a6ff499d86e11cac4a1725e2ff707085a81a76"
+ + "c73d5b53d1b0b2c4fab2d2eebe57eca83242a261cfca768abcd8e1f42e3841d6"
+ + "98bef3d4f16ac2dfab0fd42ef0abb0463474367dff7ec99d665a9838f2cfc24c",
+ // padding:3032300e060a6080864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d
+ // 682299550d7a6e0f345e25
+ "6674ec2352f0d3e90f4b72086f39815db11b056babc57644c8a703014f439baa"
+ + "46e8ed961714d5c7b5f0ec97ba3fe5ab867c16b7e1de089868dcb195fc20cc42"
+ + "fa1b3d3060f50cca77281bb6be18d65a1ee8e5a381e21e7f02e819752b71327a"
+ + "28719c7284f6425bc9241abb08d000faf58d48848d7f4b8d68b28266e663f36b",
+
// appending 0's to null
// padding:3033300f0609608648016503040201050200000420532eaabd9574880dbf76b9b8cc00832c20a6ec11
// 3d682299550d7a6e0f345e25