Selaa lähdekoodia

Add `x509_import_spki()` to timing.c

Signed-off-by: Steffen Jaeckel <[email protected]>
Steffen Jaeckel 3 kuukautta sitten
vanhempi
sitoutus
a1afebf841

+ 56 - 0
demos/timing.c

@@ -123,6 +123,10 @@ static ulong64 t_read(void)
 
 static void init_timer(void)
 {
+#if defined(LTC_NO_ASM)
+   skew = 0;
+   fprintf(stderr, "LTC_NO_ASM\nClock Skew: %lu\n", (unsigned long)skew);
+#else
    ulong64 c1, c2, t1, t2;
    unsigned long y1;
 
@@ -137,6 +141,7 @@ static void init_timer(void)
    }
    skew = c2 - c1;
    fprintf(stderr, "Clock Skew: %lu\n", (unsigned long)skew);
+#endif
 }
 
 static void time_keysched(void)
@@ -1371,6 +1376,56 @@ static void time_encmacs(void)
    time_encmacs_(32);
 }
 
+static void time_x509_import_spki(const char *pem)
+{
+   const ltc_x509_certificate *cert;
+   FILE *f;
+   int err, y, n;
+   ltc_pka_key k[8] = {0};
+   ulong64 t1, t2;
+   f = fopen(pem, "r");
+   if ((err = x509_import_pem_filehandle(f, &cert)) != CRYPT_OK) {
+      fprintf(stderr, "\nx509_import_pem_filehandle() error... %s\n", error_to_string(err));
+      exit(EXIT_FAILURE);
+   }
+   if ((err = x509_import_spki(cert->asn1->data, cert->asn1->size, k, NULL)) != CRYPT_OK) {
+      fprintf(stderr, "\nx509_import_spki() error... %s\n", error_to_string(err));
+      exit(EXIT_FAILURE);
+   }
+   pka_key_free(k);
+#define DO1 x509_import_spki(cert->asn1->data, cert->asn1->size, &k[n++], NULL);
+#define DO2 DO1 DO1
+#define DO4 DO2 DO2
+#define DO8 DO4 DO4
+   t2 = -1;
+   for (y = 0; y < 1000; y++) {
+      n = 0;
+      t_start();
+      t1 = t_read();
+      DO8;
+      t1 = (t_read() - t1)>>1;
+      if (t1 < t2) t2 = t1;
+      for (n = LTC_ARRAY_SIZE(k); n --> 0;) {
+         pka_key_free(&k[n]);
+      }
+   }
+   fprintf(stderr, "x509 %-20s: %9"PRI64"u cycles\n", strrchr(pem, '/') + 1, t2/LTC_ARRAY_SIZE(k));
+   x509_free(&cert);
+   fclose(f);
+}
+
+static void time_x509(void)
+{
+   time_x509_import_spki("tests/x509/gnutls/cert-rsa-pss.pem");
+   time_x509_import_spki("tests/x509/LTC_CA.pem");
+   time_x509_import_spki("tests/x509/LTC_S0.pem");
+   time_x509_import_spki("tests/x509/LTC_SS0.pem");
+   time_x509_import_spki("tests/x509/secp384r1.pem");
+   time_x509_import_spki("tests/x509/secp521r1.pem");
+   time_x509_import_spki("tests/x509/invalid/LTC_SSS0.pem");
+   time_x509_import_spki("tests/x509/invalid/secp224r1.pem");
+}
+
 static void LTC_NORETURN die(int status)
 {
    FILE* o = status == EXIT_SUCCESS ? stdout : stderr;
@@ -1410,6 +1465,7 @@ const struct
    LTC_TEST_FN(dsa),
    LTC_TEST_FN(ecc),
    LTC_TEST_FN(dh),
+   LTC_TEST_FN(x509),
 };
 char *single_test = NULL;
 unsigned int i;

+ 10 - 0
tests/x509/LTC_CA.pem

@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----

+ 32 - 0
tests/x509/LTC_S0.pem

@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIDrTCCA1+gAwIBAgIIdmUTeeSNp0gwBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxODAwWhgPNjAyNTA5
+MDMwODE4MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UzAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMlz0PIJA6I543Z/Ij
+WOVyC/0+9/tPuVqviIWNDn9nO1FSyt8yCeq9JkHzuRrRmUTwAdc1r7MqFDy4bJdp
+l13clraYPRSKiRkOzvaoluatfBYfgVRuhCshE6yDlMjdBCo3ZMBL4Sh6CUtmLUuI
+r5Wc4+/Voh6V49vMBnRlt2XAdZIWU6Se3l7ii51GTMU6PJmif5qvOfRQxyp5XOkK
+OlgE0CwnvNMb6LwqsqyMdsabo5Y/+fewer2XUf/1bt9Q93mMDN5r/Usjz9d4jFsW
+LEcbDlVQ2CM7jexULQmHmIHMaTrWgnbGMBy4vKXgAr3l0VvFxez7C/ldCv/PNKSO
+FvqBWeJb/QRP9HuZ2KcrjPZm/QiegWmkKXuUVbSZ5mZH1g5QKSGcTjIGH2c6Uxar
+i2TGVnYpf+YZjghK9IOx2cwc76r2f3fp4fBNgUGUHmoId5M3DNYL1b+bPtarcsCF
+z6tiKRk1bLRmSF2dwzm0jO0S3Lp4pNzXWbGNuVIkXh30wTZe0/UQmvR8uHjRbgVy
+l7gHMBWTaFvFZwXCjidxzK6QeB2Xbja5SNfvRCHI/K9LB1TTrPV1cAZYtzqaO5qF
+ezQneNKRLmFyPAZimQE09BPV+JmK+UzOOUZ3SJeCKSXAPBJzo0t8RWTtpPBgVwJM
+r/K2ll68CVk+VeHOoG6XbN01BQIDAQABo4GsMIGpMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwHQYDVR0OBBYEFEExMVazRjdT5VvsDkfvI+pOjeYQMB8GA1UdIwQYMBaAFEPt
+p67ZZHVM+Fh0tz8llxbMdDp5MAsGA1UdDwQEAwIBBjATBgNVHSUEDDAKBggrBgEF
+BQcDAjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0
+aWZpY2F0ZTAFBgMrZXADQQCzEr3m4hDVAkPAtDgh76cRLxFw987XGN0mfT0ZDurK
+SF0S51g6g/v7rrHHiCxALLf6s70TihkLPVDeaIL9ik4M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----

+ 58 - 0
tests/x509/LTC_SS0.pem

@@ -0,0 +1,58 @@
+-----BEGIN CERTIFICATE-----
+MIIEazCCAlOgAwIBAgIIaxPLdClfRLwwDQYJKoZIhvcNAQELBQAwJzEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxDzANBgNVBAMTBkxUQyBTMDAgFw0yNTA5MDMwODIyMDBa
+GA81MDI1MDkwMzA4MjIwMFowKDEUMBIGA1UEChMLTGliVG9tQ3J5cHQxEDAOBgNV
+BAMTB0xUQyBTUzAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0lSWq
+0cFHUL5qqkKvFm453nLj/1dPyxsQ2sM2bjUarj25jhHg/C93e+GDaD/uXJR4I87c
+hUHzoHusC3glfqVFQCtIP2M8jOD57zpdegueElWoCdsj7JnETekVSZ/jdAq0PNKP
+jiMxcF5sa3i2UaN1ab+cjs2HLur458xqc27H/+NVeTA6NOI11MqkQc+ScaIC1gV2
+jlhWmik88bxprBbhm/YrUdi/cmGfL34borcNx31k4Q3tDBxuLz4lohacdpRcLdCC
+i4GS70Mciy9nwt+/juLKT9uLLtyluaG970nMO2pqTTpwhrGLNdM08Q6gddNA+FhO
+Tv818DyMloJ+FIXZAgMBAAGjgZcwgZQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HQ4EFgQU2NRl8GslF4DwnOB0IiruF12sqEowHwYDVR0jBBgwFoAUQTExVrNGN1Pl
+W+wOR+8j6k6N5hAwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglg
+hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4ICAQAt
+y+dHcKWYp+MNt3r3aFO1toi9VJ4L9ySwntV0PHbvONLgFEp8zoTzKOC+OkdcbLU+
+J9mgpQ1JxwFmYaZATPTDvCi7/bfCekjDdPsyeXRdUcMhq8wu3K0P40xF1R1j7WWR
+ZqdtMlvD1k2LJSU6Bwt6uROZA2kGVx+TpVb3KttMoqRzjz2KNdyx/kXTdKFmL9Ip
+3icyhLXPEiT5o8wdgRDOwuQwWWxEKaXl0IvAJykG8dBXEDcF4mcmFcp9my9dudRX
+NBI7n0t1/ItA6mQ7hOL1Xflgqo4kmm5/oZzQcYLTapW0LGSC39rPvNTY5Sf6P7TN
+KYgTUgW6WaUgobZjpwuQxgcrohjdXcx03745g2e9eY5eJTRVlbDlLmwdxg7a/joO
+2PXpUg79FixMdmt8LARrLbDEVlfB5N5HilB+3J7riWU33nZRymE8w7AR/HMIV+9i
+T9Ue0+6lAL+Mz9zLTviQfdz5xOqo0ngEeWTs8HOpjiwdGkB5uUEkwhhnXZJlNICN
+ebo7IG0OpfPKhO82i2xFA6uZzJvTv+3G1ih/LwL+MzJVfLxnuuL7DBbv7d9lB4cO
+ooMOOZMH9okthuKLk20a0VdmPAQ9xF8KhIgutajEXAGWhayXoGugMNRjWrJm6lUX
+d8kK4AEM2eDZWo11GxAdU1XqIOWCLdV95eWfkZo7gg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrTCCA1+gAwIBAgIIdmUTeeSNp0gwBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxODAwWhgPNjAyNTA5
+MDMwODE4MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UzAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMlz0PIJA6I543Z/Ij
+WOVyC/0+9/tPuVqviIWNDn9nO1FSyt8yCeq9JkHzuRrRmUTwAdc1r7MqFDy4bJdp
+l13clraYPRSKiRkOzvaoluatfBYfgVRuhCshE6yDlMjdBCo3ZMBL4Sh6CUtmLUuI
+r5Wc4+/Voh6V49vMBnRlt2XAdZIWU6Se3l7ii51GTMU6PJmif5qvOfRQxyp5XOkK
+OlgE0CwnvNMb6LwqsqyMdsabo5Y/+fewer2XUf/1bt9Q93mMDN5r/Usjz9d4jFsW
+LEcbDlVQ2CM7jexULQmHmIHMaTrWgnbGMBy4vKXgAr3l0VvFxez7C/ldCv/PNKSO
+FvqBWeJb/QRP9HuZ2KcrjPZm/QiegWmkKXuUVbSZ5mZH1g5QKSGcTjIGH2c6Uxar
+i2TGVnYpf+YZjghK9IOx2cwc76r2f3fp4fBNgUGUHmoId5M3DNYL1b+bPtarcsCF
+z6tiKRk1bLRmSF2dwzm0jO0S3Lp4pNzXWbGNuVIkXh30wTZe0/UQmvR8uHjRbgVy
+l7gHMBWTaFvFZwXCjidxzK6QeB2Xbja5SNfvRCHI/K9LB1TTrPV1cAZYtzqaO5qF
+ezQneNKRLmFyPAZimQE09BPV+JmK+UzOOUZ3SJeCKSXAPBJzo0t8RWTtpPBgVwJM
+r/K2ll68CVk+VeHOoG6XbN01BQIDAQABo4GsMIGpMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwHQYDVR0OBBYEFEExMVazRjdT5VvsDkfvI+pOjeYQMB8GA1UdIwQYMBaAFEPt
+p67ZZHVM+Fh0tz8llxbMdDp5MAsGA1UdDwQEAwIBBjATBgNVHSUEDDAKBggrBgEF
+BQcDAjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0
+aWZpY2F0ZTAFBgMrZXADQQCzEr3m4hDVAkPAtDgh76cRLxFw987XGN0mfT0ZDurK
+SF0S51g6g/v7rrHHiCxALLf6s70TihkLPVDeaIL9ik4M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----

+ 77 - 0
tests/x509/ed25519.pem

@@ -0,0 +1,77 @@
+-----BEGIN CERTIFICATE-----
+MIIDFjCCAf6gAwIBAgIISwSxqMsnSjcwDQYJYIZIAWUDBAMQBQAwKDEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxEDAOBgNVBAMTB0xUQyBTUzAwIBcNMjUwOTA1MTM0MTAw
+WhgPMzAyNTA5MDUxMzQxMDBaMHAxFDASBgNVBAoTC0xpYlRvbUNyeXB0MSgwJgYD
+VQQDDB9lZDI1NTE5QGxpYnRvbWNyeXB0LmV4YW1wbGUuY29tMS4wLAYJKoZIhvcN
+AQkBFh9lZDI1NTE5QGxpYnRvbWNyeXB0LmV4YW1wbGUuY29tMCowBQYDK2VwAyEA
+u+NzLpyeUIfFdC7RTAX9uBu5/U6I8PSYrDyExgaYz4mjgfMwgfAwDAYDVR0TAQH/
+BAIwADAdBgNVHQ4EFgQUPaSlHXCQxXQzPqiHmydBKzakshIwHwYDVR0jBBgwFoAU
+2NRl8GslF4DwnOB0IiruF12sqEowCwYDVR0PBAQDAgO4MBMGA1UdJQQMMAoGCCsG
+AQUFBwMCMEsGA1UdEQREMEKBH2VkMjU1MTlAbGlidG9tY3J5cHQuZXhhbXBsZS5j
+b22HBMAAAnuIByqCWQYHCFqHECABDbgAAAAAAAAAAABsdGMwEQYJYIZIAYb4QgEB
+BAQDAgWgMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJYIZIAWUD
+BAMQBQADggEBAE2p5gmo/7PgWLQgbWOfYcQ1MQrYNVybjLee7RjMkAbLk/+G9p4U
+EBq5bRkClqS6KqExuZQxUk2TlxSimExO1WNN3FDeiE4G+Hih9xK/rFsUEg2TLwYt
+Jd8ZJGT+bvo6DYHNSfWLWSJSNkinE6ZUJiu7875JH9OnxGRHqajfUnF/TCer+RLw
+WNzLk1ZSDDajjZ/gG+EFmqs1WYwvfywLjQdIUJoDRFySMRxzVEgAD6M7IDIOiZTn
+pyJ/X9K4PUDKkbJPaDE8qB8qNPmm/ylk9UPij6f5utlE7Ns9eNu1RpYr4U5eD3C9
+nSfDXqD/K6edL+tUUpR04mHHVDx+4usXU7s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEazCCAlOgAwIBAgIIaxPLdClfRLwwDQYJKoZIhvcNAQELBQAwJzEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxDzANBgNVBAMTBkxUQyBTMDAgFw0yNTA5MDMwODIyMDBa
+GA81MDI1MDkwMzA4MjIwMFowKDEUMBIGA1UEChMLTGliVG9tQ3J5cHQxEDAOBgNV
+BAMTB0xUQyBTUzAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0lSWq
+0cFHUL5qqkKvFm453nLj/1dPyxsQ2sM2bjUarj25jhHg/C93e+GDaD/uXJR4I87c
+hUHzoHusC3glfqVFQCtIP2M8jOD57zpdegueElWoCdsj7JnETekVSZ/jdAq0PNKP
+jiMxcF5sa3i2UaN1ab+cjs2HLur458xqc27H/+NVeTA6NOI11MqkQc+ScaIC1gV2
+jlhWmik88bxprBbhm/YrUdi/cmGfL34borcNx31k4Q3tDBxuLz4lohacdpRcLdCC
+i4GS70Mciy9nwt+/juLKT9uLLtyluaG970nMO2pqTTpwhrGLNdM08Q6gddNA+FhO
+Tv818DyMloJ+FIXZAgMBAAGjgZcwgZQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HQ4EFgQU2NRl8GslF4DwnOB0IiruF12sqEowHwYDVR0jBBgwFoAUQTExVrNGN1Pl
+W+wOR+8j6k6N5hAwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglg
+hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4ICAQAt
+y+dHcKWYp+MNt3r3aFO1toi9VJ4L9ySwntV0PHbvONLgFEp8zoTzKOC+OkdcbLU+
+J9mgpQ1JxwFmYaZATPTDvCi7/bfCekjDdPsyeXRdUcMhq8wu3K0P40xF1R1j7WWR
+ZqdtMlvD1k2LJSU6Bwt6uROZA2kGVx+TpVb3KttMoqRzjz2KNdyx/kXTdKFmL9Ip
+3icyhLXPEiT5o8wdgRDOwuQwWWxEKaXl0IvAJykG8dBXEDcF4mcmFcp9my9dudRX
+NBI7n0t1/ItA6mQ7hOL1Xflgqo4kmm5/oZzQcYLTapW0LGSC39rPvNTY5Sf6P7TN
+KYgTUgW6WaUgobZjpwuQxgcrohjdXcx03745g2e9eY5eJTRVlbDlLmwdxg7a/joO
+2PXpUg79FixMdmt8LARrLbDEVlfB5N5HilB+3J7riWU33nZRymE8w7AR/HMIV+9i
+T9Ue0+6lAL+Mz9zLTviQfdz5xOqo0ngEeWTs8HOpjiwdGkB5uUEkwhhnXZJlNICN
+ebo7IG0OpfPKhO82i2xFA6uZzJvTv+3G1ih/LwL+MzJVfLxnuuL7DBbv7d9lB4cO
+ooMOOZMH9okthuKLk20a0VdmPAQ9xF8KhIgutajEXAGWhayXoGugMNRjWrJm6lUX
+d8kK4AEM2eDZWo11GxAdU1XqIOWCLdV95eWfkZo7gg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrTCCA1+gAwIBAgIIdmUTeeSNp0gwBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxODAwWhgPNjAyNTA5
+MDMwODE4MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UzAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMlz0PIJA6I543Z/Ij
+WOVyC/0+9/tPuVqviIWNDn9nO1FSyt8yCeq9JkHzuRrRmUTwAdc1r7MqFDy4bJdp
+l13clraYPRSKiRkOzvaoluatfBYfgVRuhCshE6yDlMjdBCo3ZMBL4Sh6CUtmLUuI
+r5Wc4+/Voh6V49vMBnRlt2XAdZIWU6Se3l7ii51GTMU6PJmif5qvOfRQxyp5XOkK
+OlgE0CwnvNMb6LwqsqyMdsabo5Y/+fewer2XUf/1bt9Q93mMDN5r/Usjz9d4jFsW
+LEcbDlVQ2CM7jexULQmHmIHMaTrWgnbGMBy4vKXgAr3l0VvFxez7C/ldCv/PNKSO
+FvqBWeJb/QRP9HuZ2KcrjPZm/QiegWmkKXuUVbSZ5mZH1g5QKSGcTjIGH2c6Uxar
+i2TGVnYpf+YZjghK9IOx2cwc76r2f3fp4fBNgUGUHmoId5M3DNYL1b+bPtarcsCF
+z6tiKRk1bLRmSF2dwzm0jO0S3Lp4pNzXWbGNuVIkXh30wTZe0/UQmvR8uHjRbgVy
+l7gHMBWTaFvFZwXCjidxzK6QeB2Xbja5SNfvRCHI/K9LB1TTrPV1cAZYtzqaO5qF
+ezQneNKRLmFyPAZimQE09BPV+JmK+UzOOUZ3SJeCKSXAPBJzo0t8RWTtpPBgVwJM
+r/K2ll68CVk+VeHOoG6XbN01BQIDAQABo4GsMIGpMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwHQYDVR0OBBYEFEExMVazRjdT5VvsDkfvI+pOjeYQMB8GA1UdIwQYMBaAFEPt
+p67ZZHVM+Fh0tz8llxbMdDp5MAsGA1UdDwQEAwIBBjATBgNVHSUEDDAKBggrBgEF
+BQcDAjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0
+aWZpY2F0ZTAFBgMrZXADQQCzEr3m4hDVAkPAtDgh76cRLxFw987XGN0mfT0ZDurK
+SF0S51g6g/v7rrHHiCxALLf6s70TihkLPVDeaIL9ik4M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----

+ 76 - 0
tests/x509/invalid/LTC_SSS0.pem

@@ -0,0 +1,76 @@
+-----BEGIN CERTIFICATE-----
+MIIC6TCCAdGgAwIBAgIIWKbGS7FFfFEwDQYJKoZIhvcNAQELBQAwKDEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxEDAOBgNVBAMTB0xUQyBTUzAwIBcNMjUwOTAzMDgyNjAw
+WhgPMzAyNTA5MDMwODI2MDBaMCkxFDASBgNVBAoTC0xpYlRvbUNyeXB0MREwDwYD
+VQQDEwhMVEMgU1NTMDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV1mgbza
+UGhF3rnjDRJhMoPpcvWbfuM8wE3SjRU+kVv4HnMFzKa7rpOCL/9wUYotKUymdpDg
+5XD5tCcwbrZqBSs8BuBYEcfPCgkI+NBzXffiDY1Z60kwa5NIvByPcePxRE4bE8De
+zJGKyS06llz8j6dQUoMcMinS4cqhpaof1TcCAwEAAaOBlzCBlDASBgNVHRMBAf8E
+CDAGAQH/AgEAMB0GA1UdDgQWBBQPcAyfJAWr3MNiCVYNhkj//bs9fDAfBgNVHSME
+GDAWgBTY1GXwayUXgPCc4HQiKu4XXayoSjALBgNVHQ8EBAMCAQYwEQYJYIZIAYb4
+QgEBBAQDAgAHMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZI
+hvcNAQELBQADggEBAKZDiqriGnJVwVu2zdZnjTySLtXEGlUd4A8hT3rZ1EgP3rQ0
+4j4zhATb1fH++2XdHX6IMDtdduWSjKxTF6rmPfDl0znbg3mnbUC2nP6Nw3UsD1DC
+/k1cI0a9S1ocXCJsPIp89lBXuGWUwk5Ml7B/BKNhqOCJqD8CFpejAXovMhpwJ8zk
+2U542RVW+qXUJE36KCzwrxldqU9zuqSCdllJ53oSnt4YQ7ODuUVCTm7gObaU71Uu
+qO3hNalAYNckKi9qrUNdH4dir2zGUkHw41hDcQ/Qd7kNvIo8e/OLJPtWpYUO0gOS
+L4s9V2ZO9BhQJM2KW67Xz/O8byg9CgyXR4LgJ58=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEazCCAlOgAwIBAgIIaxPLdClfRLwwDQYJKoZIhvcNAQELBQAwJzEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxDzANBgNVBAMTBkxUQyBTMDAgFw0yNTA5MDMwODIyMDBa
+GA81MDI1MDkwMzA4MjIwMFowKDEUMBIGA1UEChMLTGliVG9tQ3J5cHQxEDAOBgNV
+BAMTB0xUQyBTUzAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0lSWq
+0cFHUL5qqkKvFm453nLj/1dPyxsQ2sM2bjUarj25jhHg/C93e+GDaD/uXJR4I87c
+hUHzoHusC3glfqVFQCtIP2M8jOD57zpdegueElWoCdsj7JnETekVSZ/jdAq0PNKP
+jiMxcF5sa3i2UaN1ab+cjs2HLur458xqc27H/+NVeTA6NOI11MqkQc+ScaIC1gV2
+jlhWmik88bxprBbhm/YrUdi/cmGfL34borcNx31k4Q3tDBxuLz4lohacdpRcLdCC
+i4GS70Mciy9nwt+/juLKT9uLLtyluaG970nMO2pqTTpwhrGLNdM08Q6gddNA+FhO
+Tv818DyMloJ+FIXZAgMBAAGjgZcwgZQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HQ4EFgQU2NRl8GslF4DwnOB0IiruF12sqEowHwYDVR0jBBgwFoAUQTExVrNGN1Pl
+W+wOR+8j6k6N5hAwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglg
+hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4ICAQAt
+y+dHcKWYp+MNt3r3aFO1toi9VJ4L9ySwntV0PHbvONLgFEp8zoTzKOC+OkdcbLU+
+J9mgpQ1JxwFmYaZATPTDvCi7/bfCekjDdPsyeXRdUcMhq8wu3K0P40xF1R1j7WWR
+ZqdtMlvD1k2LJSU6Bwt6uROZA2kGVx+TpVb3KttMoqRzjz2KNdyx/kXTdKFmL9Ip
+3icyhLXPEiT5o8wdgRDOwuQwWWxEKaXl0IvAJykG8dBXEDcF4mcmFcp9my9dudRX
+NBI7n0t1/ItA6mQ7hOL1Xflgqo4kmm5/oZzQcYLTapW0LGSC39rPvNTY5Sf6P7TN
+KYgTUgW6WaUgobZjpwuQxgcrohjdXcx03745g2e9eY5eJTRVlbDlLmwdxg7a/joO
+2PXpUg79FixMdmt8LARrLbDEVlfB5N5HilB+3J7riWU33nZRymE8w7AR/HMIV+9i
+T9Ue0+6lAL+Mz9zLTviQfdz5xOqo0ngEeWTs8HOpjiwdGkB5uUEkwhhnXZJlNICN
+ebo7IG0OpfPKhO82i2xFA6uZzJvTv+3G1ih/LwL+MzJVfLxnuuL7DBbv7d9lB4cO
+ooMOOZMH9okthuKLk20a0VdmPAQ9xF8KhIgutajEXAGWhayXoGugMNRjWrJm6lUX
+d8kK4AEM2eDZWo11GxAdU1XqIOWCLdV95eWfkZo7gg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrTCCA1+gAwIBAgIIdmUTeeSNp0gwBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxODAwWhgPNjAyNTA5
+MDMwODE4MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UzAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMlz0PIJA6I543Z/Ij
+WOVyC/0+9/tPuVqviIWNDn9nO1FSyt8yCeq9JkHzuRrRmUTwAdc1r7MqFDy4bJdp
+l13clraYPRSKiRkOzvaoluatfBYfgVRuhCshE6yDlMjdBCo3ZMBL4Sh6CUtmLUuI
+r5Wc4+/Voh6V49vMBnRlt2XAdZIWU6Se3l7ii51GTMU6PJmif5qvOfRQxyp5XOkK
+OlgE0CwnvNMb6LwqsqyMdsabo5Y/+fewer2XUf/1bt9Q93mMDN5r/Usjz9d4jFsW
+LEcbDlVQ2CM7jexULQmHmIHMaTrWgnbGMBy4vKXgAr3l0VvFxez7C/ldCv/PNKSO
+FvqBWeJb/QRP9HuZ2KcrjPZm/QiegWmkKXuUVbSZ5mZH1g5QKSGcTjIGH2c6Uxar
+i2TGVnYpf+YZjghK9IOx2cwc76r2f3fp4fBNgUGUHmoId5M3DNYL1b+bPtarcsCF
+z6tiKRk1bLRmSF2dwzm0jO0S3Lp4pNzXWbGNuVIkXh30wTZe0/UQmvR8uHjRbgVy
+l7gHMBWTaFvFZwXCjidxzK6QeB2Xbja5SNfvRCHI/K9LB1TTrPV1cAZYtzqaO5qF
+ezQneNKRLmFyPAZimQE09BPV+JmK+UzOOUZ3SJeCKSXAPBJzo0t8RWTtpPBgVwJM
+r/K2ll68CVk+VeHOoG6XbN01BQIDAQABo4GsMIGpMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwHQYDVR0OBBYEFEExMVazRjdT5VvsDkfvI+pOjeYQMB8GA1UdIwQYMBaAFEPt
+p67ZZHVM+Fh0tz8llxbMdDp5MAsGA1UdDwQEAwIBBjATBgNVHSUEDDAKBggrBgEF
+BQcDAjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0
+aWZpY2F0ZTAFBgMrZXADQQCzEr3m4hDVAkPAtDgh76cRLxFw987XGN0mfT0ZDurK
+SF0S51g6g/v7rrHHiCxALLf6s70TihkLPVDeaIL9ik4M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----

+ 91 - 0
tests/x509/invalid/secp224r1.pem

@@ -0,0 +1,91 @@
+-----BEGIN CERTIFICATE-----
+MIICazCCAdSgAwIBAgIIHPS2iA70NUowDQYJKoZIhvcNAQELBQAwKTEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxETAPBgNVBAMTCExUQyBTU1MwMCAXDTI1MDkwMzA4MzQw
+MFoYDzMwMjUwOTAzMDgyNjAwWjBBMRQwEgYDVQQKEwtMaWJUb21DcnlwdDEpMCcG
+A1UEAxMgc2VjcDIyNHIxLmxpYnRvbWNyeXB0LmV4YW1wZS5jb20wTjAQBgcqhkjO
+PQIBBgUrgQQAIQM6AAQpOBS4/xWqs42CirgBo3cTbteHsvwmQ9m546tlJgv536sJ
+1y1VNNV77bDfBKGa/hdQjrsbaqtSHaOB0zCB0DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+DgQWBBQhck2OpsCLYdgbd4SPm1aWppeRxjAfBgNVHSMEGDAWgBQPcAyfJAWr3MNi
+CVYNhkj//bs9fDALBgNVHQ8EBAMCA+gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwKwYD
+VR0RBCQwIoIgc2VjcDIyNHIxLmxpYnRvbWNyeXB0LmV4YW1wZS5jb20wEQYJYIZI
+AYb4QgEBBAQDAgZAMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJ
+KoZIhvcNAQELBQADgYEAYzxdgs0W9+UqSvtclZHz1Aa4kMlImQeggCZyFs7uw9zX
+ye5TF5+4JF0z5q4YCHlLezRzn9GmucL1lPNi8B6UKd2nxwczYs+Y7hR7UPlQ91My
+hCBRYlsPvgEbQxPOwGrrn/WRun0C7xktEnigmQ62iNlhMAGuNWCxjFvkxwYqSvA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC6TCCAdGgAwIBAgIIWKbGS7FFfFEwDQYJKoZIhvcNAQELBQAwKDEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxEDAOBgNVBAMTB0xUQyBTUzAwIBcNMjUwOTAzMDgyNjAw
+WhgPMzAyNTA5MDMwODI2MDBaMCkxFDASBgNVBAoTC0xpYlRvbUNyeXB0MREwDwYD
+VQQDEwhMVEMgU1NTMDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV1mgbza
+UGhF3rnjDRJhMoPpcvWbfuM8wE3SjRU+kVv4HnMFzKa7rpOCL/9wUYotKUymdpDg
+5XD5tCcwbrZqBSs8BuBYEcfPCgkI+NBzXffiDY1Z60kwa5NIvByPcePxRE4bE8De
+zJGKyS06llz8j6dQUoMcMinS4cqhpaof1TcCAwEAAaOBlzCBlDASBgNVHRMBAf8E
+CDAGAQH/AgEAMB0GA1UdDgQWBBQPcAyfJAWr3MNiCVYNhkj//bs9fDAfBgNVHSME
+GDAWgBTY1GXwayUXgPCc4HQiKu4XXayoSjALBgNVHQ8EBAMCAQYwEQYJYIZIAYb4
+QgEBBAQDAgAHMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZI
+hvcNAQELBQADggEBAKZDiqriGnJVwVu2zdZnjTySLtXEGlUd4A8hT3rZ1EgP3rQ0
+4j4zhATb1fH++2XdHX6IMDtdduWSjKxTF6rmPfDl0znbg3mnbUC2nP6Nw3UsD1DC
+/k1cI0a9S1ocXCJsPIp89lBXuGWUwk5Ml7B/BKNhqOCJqD8CFpejAXovMhpwJ8zk
+2U542RVW+qXUJE36KCzwrxldqU9zuqSCdllJ53oSnt4YQ7ODuUVCTm7gObaU71Uu
+qO3hNalAYNckKi9qrUNdH4dir2zGUkHw41hDcQ/Qd7kNvIo8e/OLJPtWpYUO0gOS
+L4s9V2ZO9BhQJM2KW67Xz/O8byg9CgyXR4LgJ58=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEazCCAlOgAwIBAgIIaxPLdClfRLwwDQYJKoZIhvcNAQELBQAwJzEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxDzANBgNVBAMTBkxUQyBTMDAgFw0yNTA5MDMwODIyMDBa
+GA81MDI1MDkwMzA4MjIwMFowKDEUMBIGA1UEChMLTGliVG9tQ3J5cHQxEDAOBgNV
+BAMTB0xUQyBTUzAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0lSWq
+0cFHUL5qqkKvFm453nLj/1dPyxsQ2sM2bjUarj25jhHg/C93e+GDaD/uXJR4I87c
+hUHzoHusC3glfqVFQCtIP2M8jOD57zpdegueElWoCdsj7JnETekVSZ/jdAq0PNKP
+jiMxcF5sa3i2UaN1ab+cjs2HLur458xqc27H/+NVeTA6NOI11MqkQc+ScaIC1gV2
+jlhWmik88bxprBbhm/YrUdi/cmGfL34borcNx31k4Q3tDBxuLz4lohacdpRcLdCC
+i4GS70Mciy9nwt+/juLKT9uLLtyluaG970nMO2pqTTpwhrGLNdM08Q6gddNA+FhO
+Tv818DyMloJ+FIXZAgMBAAGjgZcwgZQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HQ4EFgQU2NRl8GslF4DwnOB0IiruF12sqEowHwYDVR0jBBgwFoAUQTExVrNGN1Pl
+W+wOR+8j6k6N5hAwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglg
+hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4ICAQAt
+y+dHcKWYp+MNt3r3aFO1toi9VJ4L9ySwntV0PHbvONLgFEp8zoTzKOC+OkdcbLU+
+J9mgpQ1JxwFmYaZATPTDvCi7/bfCekjDdPsyeXRdUcMhq8wu3K0P40xF1R1j7WWR
+ZqdtMlvD1k2LJSU6Bwt6uROZA2kGVx+TpVb3KttMoqRzjz2KNdyx/kXTdKFmL9Ip
+3icyhLXPEiT5o8wdgRDOwuQwWWxEKaXl0IvAJykG8dBXEDcF4mcmFcp9my9dudRX
+NBI7n0t1/ItA6mQ7hOL1Xflgqo4kmm5/oZzQcYLTapW0LGSC39rPvNTY5Sf6P7TN
+KYgTUgW6WaUgobZjpwuQxgcrohjdXcx03745g2e9eY5eJTRVlbDlLmwdxg7a/joO
+2PXpUg79FixMdmt8LARrLbDEVlfB5N5HilB+3J7riWU33nZRymE8w7AR/HMIV+9i
+T9Ue0+6lAL+Mz9zLTviQfdz5xOqo0ngEeWTs8HOpjiwdGkB5uUEkwhhnXZJlNICN
+ebo7IG0OpfPKhO82i2xFA6uZzJvTv+3G1ih/LwL+MzJVfLxnuuL7DBbv7d9lB4cO
+ooMOOZMH9okthuKLk20a0VdmPAQ9xF8KhIgutajEXAGWhayXoGugMNRjWrJm6lUX
+d8kK4AEM2eDZWo11GxAdU1XqIOWCLdV95eWfkZo7gg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrTCCA1+gAwIBAgIIdmUTeeSNp0gwBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxODAwWhgPNjAyNTA5
+MDMwODE4MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UzAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMlz0PIJA6I543Z/Ij
+WOVyC/0+9/tPuVqviIWNDn9nO1FSyt8yCeq9JkHzuRrRmUTwAdc1r7MqFDy4bJdp
+l13clraYPRSKiRkOzvaoluatfBYfgVRuhCshE6yDlMjdBCo3ZMBL4Sh6CUtmLUuI
+r5Wc4+/Voh6V49vMBnRlt2XAdZIWU6Se3l7ii51GTMU6PJmif5qvOfRQxyp5XOkK
+OlgE0CwnvNMb6LwqsqyMdsabo5Y/+fewer2XUf/1bt9Q93mMDN5r/Usjz9d4jFsW
+LEcbDlVQ2CM7jexULQmHmIHMaTrWgnbGMBy4vKXgAr3l0VvFxez7C/ldCv/PNKSO
+FvqBWeJb/QRP9HuZ2KcrjPZm/QiegWmkKXuUVbSZ5mZH1g5QKSGcTjIGH2c6Uxar
+i2TGVnYpf+YZjghK9IOx2cwc76r2f3fp4fBNgUGUHmoId5M3DNYL1b+bPtarcsCF
+z6tiKRk1bLRmSF2dwzm0jO0S3Lp4pNzXWbGNuVIkXh30wTZe0/UQmvR8uHjRbgVy
+l7gHMBWTaFvFZwXCjidxzK6QeB2Xbja5SNfvRCHI/K9LB1TTrPV1cAZYtzqaO5qF
+ezQneNKRLmFyPAZimQE09BPV+JmK+UzOOUZ3SJeCKSXAPBJzo0t8RWTtpPBgVwJM
+r/K2ll68CVk+VeHOoG6XbN01BQIDAQABo4GsMIGpMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwHQYDVR0OBBYEFEExMVazRjdT5VvsDkfvI+pOjeYQMB8GA1UdIwQYMBaAFEPt
+p67ZZHVM+Fh0tz8llxbMdDp5MAsGA1UdDwQEAwIBBjATBgNVHSUEDDAKBggrBgEF
+BQcDAjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0
+aWZpY2F0ZTAFBgMrZXADQQCzEr3m4hDVAkPAtDgh76cRLxFw987XGN0mfT0ZDurK
+SF0S51g6g/v7rrHHiCxALLf6s70TihkLPVDeaIL9ik4M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----

+ 19 - 0
tests/x509/secp384r1.pem

@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFTCCAf2gAwIBAgIIYFnGyBxo/Z4wDQYJKoZIhvcNAQELBQAwKDEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxEDAOBgNVBAMTB0xUQyBTUzAwIBcNMjUwOTAzMDgyODAw
+WhgPMzAyNTA5MDMwODI4MDBaMEIxFDASBgNVBAoTC0xpYlRvbUNyeXB0MSowKAYD
+VQQDDCFzZWNwMzg0cjFAbGlidG9tY3J5cHQuZXhhbXBsZS5jb20wdjAQBgcqhkjO
+PQIBBgUrgQQAIgNiAASH8lIeuqwcjF+0Y3ljoPDZowT8dLnJRl0ReaMNdMcuIOq6
+BsV61D69cmG5H8pt9uM34BaWzXmpSn1odDVJ0fYibRz9iNskm/CNJOs55aCb008L
+TRp7IJGpRgAHePYeni2jgdQwgdEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUItVH
+rnJ2/sS/oCbMhnDRRYUuWmkwHwYDVR0jBBgwFoAU2NRl8GslF4DwnOB0IiruF12s
+qEowCwYDVR0PBAQDAgO4MBMGA1UdJQQMMAoGCCsGAQUFBwMCMCwGA1UdEQQlMCOB
+IXNlY3AzODRyMUBsaWJ0b21jcnlwdC5leGFtcGxlLmNvbTARBglghkgBhvhCAQEE
+BAMCBaAwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0B
+AQsFAAOCAQEAfvq/lFz3f9R4SoVzCCOKc8+H+IrWAfqwZriwfdClmupRY5vZKgPL
+sDM/J79k++vYN75obXIFrQuuA+tQc3YYHgJIlmuMWk6lRGB/Ue48g21kwyzAP8Gt
+Lo8603KAzcj1hOq3K94cosL41i97ZE0nrKx/hIeMwl6GP8pq4QEs8LPP0YHpoIkj
+nFhJu9c/iz5/nBBPcjLxXezaZIDmIZupunJ6MhGeYq9hObTyh4qCWElltilwvm5F
+nsnotEge+ALv5s5tHrzynea8D0uOFUQ87Mjl29wVDXwTIVUBQurYOCC27Iquapgl
+zSHmXQoWHC2DOq9ka2pFHddvg32IY2Ra5A==
+-----END CERTIFICATE-----

+ 78 - 0
tests/x509/secp521r1.pem

@@ -0,0 +1,78 @@
+-----BEGIN CERTIFICATE-----
+MIIDOzCCAiOgAwIBAgIIdYM1lc/ofIQwDQYJKoZIhvcNAQELBQAwKDEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxEDAOBgNVBAMTB0xUQyBTUzAwIBcNMjUwOTAzMDgyMzAw
+WhgPMzAyNTA5MDMwODIzMDBaMEIxFDASBgNVBAoTC0xpYlRvbUNyeXB0MSowKAYD
+VQQDEyFzZWNwNTIxcjEubGlidG9tY3J5cHQuZXhhbXBsZS5jb20wgZswEAYHKoZI
+zj0CAQYFK4EEACMDgYYABAB8CFHnDq6fpzkwX6iByGDmX1BEE1M2tkyi9UXCzpCe
+/S7e1VRaktC+BdCBEQaVpXdyOHTYVXSpYiwz5hZPET5TrAE8818nLX3exTHhHTHZ
+YlLmvHyTmnWZAFflBZe0dFhZBntFVxJPGRI2D4pSvuXL7qyItDd1zHc8LbUpAbm9
+rZnTW6OB1DCB0TAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQfaUX3QLXw+UWCCCsO
+sGfkNUWjxDAfBgNVHSMEGDAWgBTY1GXwayUXgPCc4HQiKu4XXayoSjALBgNVHQ8E
+BAMCA+gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwLAYDVR0RBCUwI4Ihc2VjcDUyMXIx
+LmxpYnRvbWNyeXB0LmV4YW1wbGUuY29tMBEGCWCGSAGG+EIBAQQEAwIGQDAeBglg
+hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4IBAQBg
+duhqXCjJsvNceubYNcdMv79NZ0gT91cCjIKMKq12PhswZIfSt8qzc4y9Lju75hU6
+qJpacwlIyQ0u0V1nFgkFoPM+UqXMnP5X4CmyO2TGm+ucMky0iA863F4/hF696RyC
+S1Tj21xT4h7vPGGxOfY2dEQIZ/RYGYyxCWql/fTngG1hiEeHFfqzpWgnGwmhK6fg
+a+6ZZW8wTPCdRhIBLBaSKG3c79CI3y+ef+gyEwzRAchkSHuX6SXJpCltKmxYoB+V
+ielaQmoVLpJyomZxuC85IcpwMccbf775eRjrmEJxKtLV0XVEdEAfy9ePQlIDAJke
+oiP0Q0YXNVWvuOV39Ztm
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEazCCAlOgAwIBAgIIaxPLdClfRLwwDQYJKoZIhvcNAQELBQAwJzEUMBIGA1UE
+ChMLTGliVG9tQ3J5cHQxDzANBgNVBAMTBkxUQyBTMDAgFw0yNTA5MDMwODIyMDBa
+GA81MDI1MDkwMzA4MjIwMFowKDEUMBIGA1UEChMLTGliVG9tQ3J5cHQxEDAOBgNV
+BAMTB0xUQyBTUzAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0lSWq
+0cFHUL5qqkKvFm453nLj/1dPyxsQ2sM2bjUarj25jhHg/C93e+GDaD/uXJR4I87c
+hUHzoHusC3glfqVFQCtIP2M8jOD57zpdegueElWoCdsj7JnETekVSZ/jdAq0PNKP
+jiMxcF5sa3i2UaN1ab+cjs2HLur458xqc27H/+NVeTA6NOI11MqkQc+ScaIC1gV2
+jlhWmik88bxprBbhm/YrUdi/cmGfL34borcNx31k4Q3tDBxuLz4lohacdpRcLdCC
+i4GS70Mciy9nwt+/juLKT9uLLtyluaG970nMO2pqTTpwhrGLNdM08Q6gddNA+FhO
+Tv818DyMloJ+FIXZAgMBAAGjgZcwgZQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
+HQ4EFgQU2NRl8GslF4DwnOB0IiruF12sqEowHwYDVR0jBBgwFoAUQTExVrNGN1Pl
+W+wOR+8j6k6N5hAwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglg
+hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4ICAQAt
+y+dHcKWYp+MNt3r3aFO1toi9VJ4L9ySwntV0PHbvONLgFEp8zoTzKOC+OkdcbLU+
+J9mgpQ1JxwFmYaZATPTDvCi7/bfCekjDdPsyeXRdUcMhq8wu3K0P40xF1R1j7WWR
+ZqdtMlvD1k2LJSU6Bwt6uROZA2kGVx+TpVb3KttMoqRzjz2KNdyx/kXTdKFmL9Ip
+3icyhLXPEiT5o8wdgRDOwuQwWWxEKaXl0IvAJykG8dBXEDcF4mcmFcp9my9dudRX
+NBI7n0t1/ItA6mQ7hOL1Xflgqo4kmm5/oZzQcYLTapW0LGSC39rPvNTY5Sf6P7TN
+KYgTUgW6WaUgobZjpwuQxgcrohjdXcx03745g2e9eY5eJTRVlbDlLmwdxg7a/joO
+2PXpUg79FixMdmt8LARrLbDEVlfB5N5HilB+3J7riWU33nZRymE8w7AR/HMIV+9i
+T9Ue0+6lAL+Mz9zLTviQfdz5xOqo0ngEeWTs8HOpjiwdGkB5uUEkwhhnXZJlNICN
+ebo7IG0OpfPKhO82i2xFA6uZzJvTv+3G1ih/LwL+MzJVfLxnuuL7DBbv7d9lB4cO
+ooMOOZMH9okthuKLk20a0VdmPAQ9xF8KhIgutajEXAGWhayXoGugMNRjWrJm6lUX
+d8kK4AEM2eDZWo11GxAdU1XqIOWCLdV95eWfkZo7gg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrTCCA1+gAwIBAgIIdmUTeeSNp0gwBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxODAwWhgPNjAyNTA5
+MDMwODE4MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UzAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCMlz0PIJA6I543Z/Ij
+WOVyC/0+9/tPuVqviIWNDn9nO1FSyt8yCeq9JkHzuRrRmUTwAdc1r7MqFDy4bJdp
+l13clraYPRSKiRkOzvaoluatfBYfgVRuhCshE6yDlMjdBCo3ZMBL4Sh6CUtmLUuI
+r5Wc4+/Voh6V49vMBnRlt2XAdZIWU6Se3l7ii51GTMU6PJmif5qvOfRQxyp5XOkK
+OlgE0CwnvNMb6LwqsqyMdsabo5Y/+fewer2XUf/1bt9Q93mMDN5r/Usjz9d4jFsW
+LEcbDlVQ2CM7jexULQmHmIHMaTrWgnbGMBy4vKXgAr3l0VvFxez7C/ldCv/PNKSO
+FvqBWeJb/QRP9HuZ2KcrjPZm/QiegWmkKXuUVbSZ5mZH1g5QKSGcTjIGH2c6Uxar
+i2TGVnYpf+YZjghK9IOx2cwc76r2f3fp4fBNgUGUHmoId5M3DNYL1b+bPtarcsCF
+z6tiKRk1bLRmSF2dwzm0jO0S3Lp4pNzXWbGNuVIkXh30wTZe0/UQmvR8uHjRbgVy
+l7gHMBWTaFvFZwXCjidxzK6QeB2Xbja5SNfvRCHI/K9LB1TTrPV1cAZYtzqaO5qF
+ezQneNKRLmFyPAZimQE09BPV+JmK+UzOOUZ3SJeCKSXAPBJzo0t8RWTtpPBgVwJM
+r/K2ll68CVk+VeHOoG6XbN01BQIDAQABo4GsMIGpMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwHQYDVR0OBBYEFEExMVazRjdT5VvsDkfvI+pOjeYQMB8GA1UdIwQYMBaAFEPt
+p67ZZHVM+Fh0tz8llxbMdDp5MAsGA1UdDwQEAwIBBjATBgNVHSUEDDAKBggrBgEF
+BQcDAjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0
+aWZpY2F0ZTAFBgMrZXADQQCzEr3m4hDVAkPAtDgh76cRLxFw987XGN0mfT0ZDurK
+SF0S51g6g/v7rrHHiCxALLf6s70TihkLPVDeaIL9ik4M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBezCCAS2gAwIBAgIIb2eiAYNfDJswBQYDK2VwMCcxFDASBgNVBAoTC0xpYlRv
+bUNyeXB0MQ8wDQYDVQQDEwZMVEMgUjAwIBcNMjUwOTAzMDgxNDAwWhgPNzAyNTA5
+MDMwODE0MDBaMCcxFDASBgNVBAoTC0xpYlRvbUNyeXB0MQ8wDQYDVQQDEwZMVEMg
+UjAwKjAFBgMrZXADIQDVj/MS930omIOasHjkoGSoueCZn8mcZUz1xQKqXHDk3KN1
+MHMwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUQ+2nrtlkdUz4WHS3PyWX
+Fsx0OnkwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAeBglghkgBhvhC
+AQ0EERYPeGNhIGNlcnRpZmljYXRlMAUGAytlcANBAAYBDKvYaZ35dk0HDuQeGq06
+R9LtgUnsD9GgjXbzC2fathjli91Ff3u7vlWLH6aXi8dd87e1Mq6XJGfIjMHn4Q4=
+-----END CERTIFICATE-----