Source file src/crypto/tls/certificates_test.go

     1  // Code generated by certificates_generator_test.go; DO NOT EDIT.
     2  // To regenerate, run: go generate
     3  
     4  package tls
     5  
     6  import (
     7  	"crypto/ecdsa"
     8  	"crypto/ed25519"
     9  	"crypto/mldsa"
    10  	"crypto/rsa"
    11  	"crypto/x509"
    12  	"encoding/pem"
    13  )
    14  
    15  var (
    16  	// Self-signed RSA 2048 root CA, CN=Root.
    17  	testRootCert = parseTestCert(testRootCertPEM, testRootKeyPEM)
    18  	testRootKey  = testRootCert.PrivateKey.(*rsa.PrivateKey)
    19  
    20  	// Self-signed RSA 2048 root CA, CN=Client Root.
    21  	testClientRootCert = parseTestCert(testClientRootCertPEM, testClientRootKeyPEM)
    22  	testClientRootKey  = testClientRootCert.PrivateKey.(*rsa.PrivateKey)
    23  
    24  	// ECDSA P-256 server leaf, SAN=test.golang.example, issued by Root.
    25  	testECDSAP256Cert = parseTestCert(testECDSAP256CertPEM, testECDSAP256KeyPEM)
    26  	testECDSAP256Key  = testECDSAP256Cert.PrivateKey.(*ecdsa.PrivateKey)
    27  
    28  	// RSA 2048 server leaf, SAN=test.golang.example, issued by Root.
    29  	testRSA2048Cert = parseTestCert(testRSA2048CertPEM, testRSA2048KeyPEM)
    30  	testRSA2048Key  = testRSA2048Cert.PrivateKey.(*rsa.PrivateKey)
    31  
    32  	// ECDSA P-384 server leaf, SAN=test.golang.example, issued by Root.
    33  	testECDSAP384Cert = parseTestCert(testECDSAP384CertPEM, testECDSAP384KeyPEM)
    34  	testECDSAP384Key  = testECDSAP384Cert.PrivateKey.(*ecdsa.PrivateKey)
    35  
    36  	// ECDSA P-521 server leaf, SAN=test.golang.example, issued by Root.
    37  	testECDSAP521Cert = parseTestCert(testECDSAP521CertPEM, testECDSAP521KeyPEM)
    38  	testECDSAP521Key  = testECDSAP521Cert.PrivateKey.(*ecdsa.PrivateKey)
    39  
    40  	// Ed25519 server leaf, SAN=test.golang.example, issued by Root.
    41  	testEd25519Cert = parseTestCert(testEd25519CertPEM, testEd25519KeyPEM)
    42  	testEd25519Key  = testEd25519Cert.PrivateKey.(ed25519.PrivateKey)
    43  
    44  	// RSA 2048 server leaf, SAN=test.golang.example, issued by Root.
    45  	// Signature algorithm is SHA512WithRSAPSS (rsaEncryption SPKI, rsassaPss signature).
    46  	testRSAPSSCert = parseTestCert(testRSAPSSCertPEM, testRSAPSSKeyPEM)
    47  	testRSAPSSKey  = testRSAPSSCert.PrivateKey.(*rsa.PrivateKey)
    48  
    49  	// RSA 1024 server leaf, SAN=test.golang.example, issued by Root.
    50  	// Key is too small for rsa_pss_rsae_sha512; used by TestHandshakeServerRSAPSS.
    51  	testRSA1024Cert = parseTestCert(testRSA1024CertPEM, testRSA1024KeyPEM)
    52  	testRSA1024Key  = testRSA1024Cert.PrivateKey.(*rsa.PrivateKey)
    53  
    54  	// RSA 512 server leaf, SAN=test.golang.example, issued by Root.
    55  	// Key is too small for any rsa_pss_rsae_*; used by TestKeyTooSmallForRSAPSS.
    56  	testRSA512Cert = parseTestCert(testRSA512CertPEM, testRSA512KeyPEM)
    57  	testRSA512Key  = testRSA512Cert.PrivateKey.(*rsa.PrivateKey)
    58  
    59  	// ECDSA P-256 server leaf, SAN=different.example.com, issued by Root.
    60  	testSNICert = parseTestCert(testSNICertPEM, testSNIKeyPEM)
    61  	testSNIKey  = testSNICert.PrivateKey.(*ecdsa.PrivateKey)
    62  
    63  	// RSA 2048 client leaf, SAN=test.golang.example, issued by Client Root.
    64  	testClientRSA2048Cert = parseTestCert(testClientRSA2048CertPEM, testClientRSA2048KeyPEM)
    65  	testClientRSA2048Key  = testClientRSA2048Cert.PrivateKey.(*rsa.PrivateKey)
    66  
    67  	// ECDSA P-256 client leaf, SAN=test.golang.example, issued by Client Root.
    68  	testClientECDSAP256Cert = parseTestCert(testClientECDSAP256CertPEM, testClientECDSAP256KeyPEM)
    69  	testClientECDSAP256Key  = testClientECDSAP256Cert.PrivateKey.(*ecdsa.PrivateKey)
    70  
    71  	// Ed25519 client leaf, SAN=test.golang.example, issued by Client Root.
    72  	testClientEd25519Cert = parseTestCert(testClientEd25519CertPEM, testClientEd25519KeyPEM)
    73  	testClientEd25519Key  = testClientEd25519Cert.PrivateKey.(ed25519.PrivateKey)
    74  
    75  	// RSA 2048 client leaf, SAN=test.golang.example, issued by Client Root.
    76  	// Signature algorithm is SHA512WithRSAPSS (rsaEncryption SPKI, rsassaPss signature).
    77  	testClientRSAPSSCert = parseTestCert(testClientRSAPSSCertPEM, testClientRSAPSSKeyPEM)
    78  	testClientRSAPSSKey  = testClientRSAPSSCert.PrivateKey.(*rsa.PrivateKey)
    79  
    80  	// ML-DSA-44 server leaf, SAN=test.golang.example, issued by Root.
    81  	testMLDSA44Cert = parseTestCert(testMLDSA44CertPEM, testMLDSA44KeyPEM)
    82  	testMLDSA44Key, _ = testMLDSA44Cert.PrivateKey.(*mldsa.PrivateKey)
    83  
    84  	// ML-DSA-65 server leaf, SAN=test.golang.example, issued by Root.
    85  	testMLDSA65Cert = parseTestCert(testMLDSA65CertPEM, testMLDSA65KeyPEM)
    86  	testMLDSA65Key, _ = testMLDSA65Cert.PrivateKey.(*mldsa.PrivateKey)
    87  
    88  	// ML-DSA-87 server leaf, SAN=test.golang.example, issued by Root.
    89  	testMLDSA87Cert = parseTestCert(testMLDSA87CertPEM, testMLDSA87KeyPEM)
    90  	testMLDSA87Key, _ = testMLDSA87Cert.PrivateKey.(*mldsa.PrivateKey)
    91  
    92  	// ML-DSA-44 client leaf, SAN=test.golang.example, issued by Client Root.
    93  	testClientMLDSA44Cert = parseTestCert(testClientMLDSA44CertPEM, testClientMLDSA44KeyPEM)
    94  	testClientMLDSA44Key, _ = testClientMLDSA44Cert.PrivateKey.(*mldsa.PrivateKey)
    95  
    96  	// ML-DSA-65 client leaf, SAN=test.golang.example, issued by Client Root.
    97  	testClientMLDSA65Cert = parseTestCert(testClientMLDSA65CertPEM, testClientMLDSA65KeyPEM)
    98  	testClientMLDSA65Key, _ = testClientMLDSA65Cert.PrivateKey.(*mldsa.PrivateKey)
    99  
   100  	// ML-DSA-87 client leaf, SAN=test.golang.example, issued by Client Root.
   101  	testClientMLDSA87Cert = parseTestCert(testClientMLDSA87CertPEM, testClientMLDSA87KeyPEM)
   102  	testClientMLDSA87Key, _ = testClientMLDSA87Cert.PrivateKey.(*mldsa.PrivateKey)
   103  
   104  	// x509.CertPool containing testRootCert.
   105  	testRootCertPool = newTestCertPool(testRootCertPEM)
   106  	// x509.CertPool containing testClientRootCert.
   107  	testClientRootCertPool = newTestCertPool(testClientRootCertPEM)
   108  )
   109  
   110  const testRootCertPEM = `
   111  -----BEGIN CERTIFICATE-----
   112  MIIC2zCCAcOgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   113  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowDzENMAsGA1UEAxMEUm9v
   114  dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM2wRo+wzYg9F3bUW+my
   115  2nmckAb+g091upuWNI58BE67ZwfCXXmYJNHiOm1KMp71OHupdKnSfQK85iTwC3lN
   116  gzd+6WwyszLpIYg27xfqESRFIJXWPNOPbqKpxuBKQSxlHhv9ME6lMfnfJMhPQi/R
   117  BDPE0+Ek4NlfRi/KE/uhnZaDQTAOH4tyi91xQHUQ6xYOuHcQUG1orbMSGjx1K/Nc
   118  Hnav6Un8gX0lGiWfWUKDlkFIWLIv6yY3uPXFrczSFD0Sn+UBQMN6p9Rd53rpFUL/
   119  COqxBGQMnJcPzYBl5B7/GsJe5nBZhbwpWv+8RuwkIZWUTymLz9yWHxXuv7sw05kH
   120  21kCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgIEMA8GA1UdEwEB/wQFMAMBAf8wHQYD
   121  VR0OBBYEFJvXswyhWcuczNyDMn8r+TB/92KlMA0GCSqGSIb3DQEBCwUAA4IBAQCZ
   122  GZvxtbvzDGdicv9I1f/NPEYGPm+7Y6ayo+VyfnJ3DZ72SposbYtLqw6nodigkXP3
   123  fuEVT4glCF2t0c1OdIROfEfZ1Cdp0kjQzDXgxiWjvjb8VR1ToLxnKbmRRLUTFZn0
   124  EBuxMDLpPTBMUJOaFY2odmpPh6EwO3zzI8N/vjyPH6/nErQjmyJJcFjkazcE6kOU
   125  O4I8LLU+bpn9qBJs/OmpO6cJusSsG2qpXERiGtL8xDWFxsejG7ViF/BrqKApFtLL
   126  Y08Te33CDZbgWlhzxooGvisbQGSwagjI+AKJNZMe1FBUB0V8n2Qkjt8D19P7lhOS
   127  YBi/DToTj5QnwqrOGwz2
   128  -----END CERTIFICATE-----`
   129  
   130  const testRootKeyPEM = `
   131  -----BEGIN TESTING KEY-----
   132  MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDNsEaPsM2IPRd2
   133  1Fvpstp5nJAG/oNPdbqbljSOfAROu2cHwl15mCTR4jptSjKe9Th7qXSp0n0CvOYk
   134  8At5TYM3fulsMrMy6SGINu8X6hEkRSCV1jzTj26iqcbgSkEsZR4b/TBOpTH53yTI
   135  T0Iv0QQzxNPhJODZX0YvyhP7oZ2Wg0EwDh+LcovdcUB1EOsWDrh3EFBtaK2zEho8
   136  dSvzXB52r+lJ/IF9JRoln1lCg5ZBSFiyL+smN7j1xa3M0hQ9Ep/lAUDDeqfUXed6
   137  6RVC/wjqsQRkDJyXD82AZeQe/xrCXuZwWYW8KVr/vEbsJCGVlE8pi8/clh8V7r+7
   138  MNOZB9tZAgMBAAECggEACAhz4QW/KSx1n6LwigJ9rNUz/Mnw1+gZpxzpJY1rX6XL
   139  As8Q9oA+I+JJdN46duHN2GqIT1+UmUhGVrf3QsAHuWGf/SVHwVvAfwDiOpVeIQQA
   140  H0n0KzEFWZ320eikffbfA6nSOqgR+RfBaH9L7vEjUGBGBBt8GpExfQlP2Xp43Jlm
   141  vZRND+27afH+NFvEe+Mtq23t/ls4+JFfxWzecj8wsi+RRdbKDYD+Bms9sUguyD75
   142  6SOFYaYu6lNM2hsXp4JoMDvxqffzl1y6pQ2LkMVk79bJLoGjaqZOi05/auXQcyoV
   143  hmrfU03HJW6PWi9Mf+l8hOGtZQkaHqHATDo4qSahZwKBgQDZVZpUsFfHklNh1zsZ
   144  0xPFpK8KiHUu2zizcTnnTGETsqribKGPc1MvVPhyAk3t/jKqz2KB7/uKab+2DzXO
   145  QozrwPGHanWirzZnA5BMCNmy1Z0mOg90Z8H3L8TLraUa2R5cSNDJx2d7JeeYpq9C
   146  LMbIjFNU7Frsm48iPkzd3z5tFwKBgQDySEUE5O1S2oEGI5043ctVYVkUQYwxTIma
   147  H7vn+Pul2793pWNboTHu3+2n76gF7/4b5VwWOoeKQ5Ztn4KXomYgsq0Qn58xuPN9
   148  r/0oA5bWbx930JblCvmAVjnnJMNvfC1qv4Yoz0on8aoxrClW6WEcjn+EOAusIN5y
   149  bnxZztyhDwKBgDJkovBYI0JnL2ZUXaPTSZZeZSfwFBvVQQR6kI6NK0VB/FWcEqoM
   150  d5FWBnWJC0DP3De29oRifNTPSGCSjktRKxPPHTHlAXnDXr3sGZ1HwBKzbUjb1ZGM
   151  LXF/ZgZEMTBUf7GuQJtI3Tm0xEqk+6ZAc6c0wm3CkCKkvz+VaoVXqkXpAoGBAL2I
   152  E5YUkCM0k6J90cxelWYhVVInRMh8G1jaYmDBwfqpwUqTsvpHS4yW2I97R3H9oEeq
   153  UTOCbe2XmeH/2mVMwZ/qpsBOXnbDPJeiSOQ4ipMNMwzDvIdI4o2m5n0PoWNhPRY4
   154  5XafUl+VCZL6HwzCXRm9z7tbLKZmwB28mMKYtLe5AoGAeRNa3d1K1AVGEfLQsPhp
   155  0hoPI8oaQbicKh/4tERBERWzfQ7UQ2lieJzc3Fm7RvDklFbmpolal3mn6LifA9mL
   156  vSxcmPEtSGpUDRnNsvUZrWAXKEta0eXfFXqm1if9C/aNszM6VR7p3vTR/Ui75SzV
   157  l/fcuvGqmIBq+/aiuk0V85k=
   158  -----END TESTING KEY-----`
   159  
   160  const testClientRootCertPEM = `
   161  -----BEGIN CERTIFICATE-----
   162  MIIC6TCCAdGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   163  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMBYxFDASBgNV
   164  BAMTC0NsaWVudCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
   165  tHQp8pbiZjHrwDrvOfsUjCuQPG1hPs+cSnDFupByxwdsuOFDOKs+lRJXeM/PgmM/
   166  eZlkoj/xi58/Ge3P6BZ6IRrc/40DnFOKHqDCQ6MUjrBDIICNMZn4HMjlk6kxGBCY
   167  HHBBi2dvfNPwQqOcTcEe/uaz++bNRDJdM6vbCOTDrWBoDz+wFcgek+G6MW1nLGT9
   168  RiFiXdCdvC/uxtzoqgECo0OU6K2X/q8wCfmjHiO3loqWHD+2npLk2UzQjbRrHjR3
   169  NUAPY99UqlVpLCYNgq+lv3XE03Nte3RRiwEYHZx/nzs2NajfzUXmfGTJ13WpkFx5
   170  8t0HIpgZji+/Tc2jbH/3GQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAgQwDwYDVR0T
   171  AQH/BAUwAwEB/zAdBgNVHQ4EFgQU/JzBQEJc5v4eLi5bw7iEj+2SM+gwDQYJKoZI
   172  hvcNAQELBQADggEBAGMsUSXqrKUFc2N8o89DJ7dksv7mGzm1MJQE5biMkQgWGXCC
   173  usCkWu1oZ/AZaPOpiQVAucH57aHUmhNJEpjNAgFjDjiQ5m3Ksa8ZBTYJ9ZqxXRsz
   174  jNmR9x/5QPCjF+RLNhOZoN9RQkmwWZjvoHc6yuWtSMUIIOwlF/lFS0/AjJGRS2ys
   175  Vmx7KkmMHHD29Kqy2UX9bJoR3af5a+x5FsgXB7V7HTSbKa15mjf4F7imrnesqxCz
   176  XpEDQPl7aNmxlEgU56yZxEclRBByGVMS3FEmy7ooEKGJVptHlFNoJ23eDo1A99IR
   177  HYl9O7aSb+fMeb9DpMZzbJrRquY3w8902npNdcQ=
   178  -----END CERTIFICATE-----`
   179  
   180  const testClientRootKeyPEM = `
   181  -----BEGIN TESTING KEY-----
   182  MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC0dCnyluJmMevA
   183  Ou85+xSMK5A8bWE+z5xKcMW6kHLHB2y44UM4qz6VEld4z8+CYz95mWSiP/GLnz8Z
   184  7c/oFnohGtz/jQOcU4oeoMJDoxSOsEMggI0xmfgcyOWTqTEYEJgccEGLZ2980/BC
   185  o5xNwR7+5rP75s1EMl0zq9sI5MOtYGgPP7AVyB6T4boxbWcsZP1GIWJd0J28L+7G
   186  3OiqAQKjQ5TorZf+rzAJ+aMeI7eWipYcP7aekuTZTNCNtGseNHc1QA9j31SqVWks
   187  Jg2Cr6W/dcTTc217dFGLARgdnH+fOzY1qN/NReZ8ZMnXdamQXHny3QcimBmOL79N
   188  zaNsf/cZAgMBAAECggEAAJ4WPZIxVz0ZCm901NlTwAmX8fLPsZBVOcUUew1qla6B
   189  RwP2VEquF9+YGqxfBMjBQSBGQZ1W8xaM4HUzyk0UTKQoQaIrFf6vMPQvsxe8mC6X
   190  ggixfqNStCFsO1Z+ESdJv2z8AkFM0NMtkwhxNav/yZwRaRB0Ihmz1woQVep0rbKR
   191  jic/d9Pol1CWLup/mkmg4X6ksOJPEhVAd6IiKZ7fvKlnWsMCjh7N/YZvU2Q2yRUx
   192  JeKcmdaL2rOmOyTkZZ9+QhLDPBVFV0mH9UoI0bCWtrKutsX8suACgUZk9mABhT02
   193  0/zZirE3292WHgcHfCW4IW1ww/MFfb5g4ttTrtIk1QKBgQDCp9Qd0GsGjHlllDV2
   194  +++t1n1KlmeuZaFsI1E67nkfrEf/MMNcB705wJER+kaMx5T3xkZd3SAjYO58mKqY
   195  2zhGdmoWecEZM4uOTGjMhlIEJ126gl9n3i2Lmup0IrcJ1oNTqMjNmbsrnWR8ORJ+
   196  TGdLCxpUVZzVTxMxsAVcuikGvwKBgQDtUpRetvoI1MXHBGrrc9owlGZYcrvmEgMJ
   197  xj7Ph+pe+xOkDqpdioKYNMqyISwkPlSDD1+grGwngQdyFCHmopQkKlFQdvqsjwJW
   198  QPrfjKi3DvoZdzEOsifUw1/xPY16lsvwiUy8fc3CPzTUi4qjpPT4QjfyEgYtr295
   199  AkyxaSwQJwKBgQCFfC2b3GbocMB3BjG7zHzKS0JUOdwT3iHaVEXKEesB61TcDQaL
   200  P8tlpUZWe7iRpfPkDhYHHDKD0F77Fn42oG5w85dAnnHq5EwZYxCi4KGxs4U0916R
   201  jezRxYRt67h1iKM6ZY5+X6PY/u//t+uUrLRQ4+ZEWwlXxgg1lK24rvifZQKBgQCo
   202  1Mmmg+dmpu+4gIUL0dRUIQ6aN61CpGey6Wy/uQJb5aR4XtKGT0ZOv6e/h2fetNTs
   203  k+BE7sTWaa2BU582c0yOWeiVJL96SRaxg/K1XFyeNjJoMWod+VHqw78aYN6oamTV
   204  TuffZGQfn1WXK1pKxsxbXMhuFrJ8h8T2wlMLFzX4mwKBgEym3OpWiNoV/SVLrnY1
   205  dtWzXuNTephkEmJduCrlSZwSw0Al3SEnYteifulGsByz2Wo7V9KmWO3f4IYO1ytb
   206  eTeoKLkW/MTPJLIvvSTr0PZKJe+lHXUT4RwSpwQop1BIHOBIBllZBTO5rH3Gt6Bp
   207  zt6nFbDpM8JInOGfauB7REBw
   208  -----END TESTING KEY-----`
   209  
   210  const testECDSAP256CertPEM = `
   211  -----BEGIN CERTIFICATE-----
   212  MIICSzCCATOgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   213  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFjEUMBIGA1UEAxMLRUNE
   214  U0EgUC0yNTYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQs8c6oGxTAia5ZUHGi
   215  OovLI1d/ymcyXy0i7fMVhDH3PiexxT24sBlMvj/E94W7l3fZLBeKGbyHlsqI6W5/
   216  zcEyo3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYD
   217  VR0TAQH/BAIwADAfBgNVHSMEGDAWgBSb17MMoVnLnMzcgzJ/K/kwf/dipTAeBgNV
   218  HREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQCG
   219  tOjlNsxs6qOXR4aXQtzbbjpZ8watBiAl7taViA11ovNpn3tX8piOKm5dNc3ZdHiz
   220  cVaSx2vyOeAaw0osF113t4Zok/dIPtX1FNdB3RdrgYyxCH7ELkquebUuQ2tyRFPc
   221  QoTC+iZYgUI9QnEzXWsncsldlrdVe+Y0CKWeJfWx4EHWnRLOF6fbKPHvr6NQ2zE6
   222  Q+jKPrFw8WxEhuV2MlCKvDGnM/a7AGyCayRa69LJS72jiLEeL9VO1M+8a20p0sSI
   223  DOCljGp6fv9YbZUi97JveqFGsN1WfKDvS8AAYGURbtDgd0d38tecBEW7gutO9doW
   224  Q01Fx8fkmwgu1LRrH9/t
   225  -----END CERTIFICATE-----`
   226  
   227  const testECDSAP256KeyPEM = `
   228  -----BEGIN TESTING KEY-----
   229  MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgC+OuWqep+DODweEt
   230  dyL7aZlm4Ogw2vlStsG2EYJZPtGhRANCAAQs8c6oGxTAia5ZUHGiOovLI1d/ymcy
   231  Xy0i7fMVhDH3PiexxT24sBlMvj/E94W7l3fZLBeKGbyHlsqI6W5/zcEy
   232  -----END TESTING KEY-----`
   233  
   234  const testRSA2048CertPEM = `
   235  -----BEGIN CERTIFICATE-----
   236  MIIDEzCCAfugAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   237  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEzERMA8GA1UEAxMIUlNB
   238  IDIwNDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnZDxSKSE83zya
   239  GLmeRowa8e2DpoXkA2waZz2fbkwB2SxJIFeaZeUET4PWu1o5AQP9hxWO1b6WDy4z
   240  97GZSrcCc3N75zGRyXtToiTkmRd6jOs0UXojGNG2jC+sSokNNwkh5wCbOCZ/d5dE
   241  hACCpqTCKmztYxrrZLdZgWCnhzJI94A3qN+EZRslaKIeTXuu0NPpEXKJHeqAxTNF
   242  WD+l+AHL+vxcjfCXdFDa62ZExYgDQlq0y/pgLxsQ+uxqjJUoTf7lIjDOe1KbMl4j
   243  dkZQ200jq2DAf0045qIbicglzPGRegRvLEkgK5UVwuPdTAD/2lEcD/YVcCVy+5vV
   244  Z9Mn+GBRAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEF
   245  BQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFJvXswyhWcuczNyDMn8r+TB/
   246  92KlMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwDQYJKoZIhvcNAQEL
   247  BQADggEBAHt2xIoA+xoTM5nCG0yOl+E2A3MhqqZJJ/hf9aR9ClRwayTHA68oznI+
   248  MH7MRT13GCZCIINiBJOYCUUYUJEHNkSKN07dVM46JqqYU5tD/tDZtoRuB8F9yC3f
   249  UnBod8suwlB2/2xcC8/W9x8vAnMxGQrQMm0HOahFk2rOmP303lHm/VV+ku2K3pKB
   250  haH3COqxAggKpfxSfoJG1IDNZl7fHYePq8fzBDo32l0R3RkywNLE9o4efCMJnBLQ
   251  9XohLz4ODDm7iXAeB/wGSX/zheFzEnuWHTXu4PgZaqmlywYJ+ksFpHTQBe8Ezm2H
   252  9QKL//ZtHkdAZErSOYyTA26RwR3oZxM=
   253  -----END CERTIFICATE-----`
   254  
   255  const testRSA2048KeyPEM = `
   256  -----BEGIN TESTING KEY-----
   257  MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDnZDxSKSE83zya
   258  GLmeRowa8e2DpoXkA2waZz2fbkwB2SxJIFeaZeUET4PWu1o5AQP9hxWO1b6WDy4z
   259  97GZSrcCc3N75zGRyXtToiTkmRd6jOs0UXojGNG2jC+sSokNNwkh5wCbOCZ/d5dE
   260  hACCpqTCKmztYxrrZLdZgWCnhzJI94A3qN+EZRslaKIeTXuu0NPpEXKJHeqAxTNF
   261  WD+l+AHL+vxcjfCXdFDa62ZExYgDQlq0y/pgLxsQ+uxqjJUoTf7lIjDOe1KbMl4j
   262  dkZQ200jq2DAf0045qIbicglzPGRegRvLEkgK5UVwuPdTAD/2lEcD/YVcCVy+5vV
   263  Z9Mn+GBRAgMBAAECggEAE1j/wYpGiQhM0RZhKuP7jLiO42kAnVdQlN1DZfnQftUR
   264  uA7taZpnLaxCZKmSD93PChtfSOwEEsMJL3eLZjsSQLELm8rHNnPyN8TWheDBJFJK
   265  dmZGVU9FdcM/VzjSQIR0uId6tv/ZGY5pMRBChKokxkbK3dyMCy5cNa6KOOfROLrZ
   266  wxVk5CQJVlHQ9BgQxDaEwAAqS0DOl3NcwIL5TraDjpWOFyLdw72wlxac3b+imVhw
   267  D1NFwo8BkDJfUTesoYkyHWNvhwsc2ludWqaqMPef6VJjjD+iAASwc6tWenEtzGLu
   268  5rx62bpETdw/d4yHUS960yEcvdh2TjK6NwrCTdThOwKBgQDoW6J10UF61jXu0c+D
   269  AFaWcMn6zkyeqIUIOdcAqiwBjH2yPhdDX2+GsG/NKesuGFY9I8sRoXDTdMIypCcY
   270  1YFrRq3KvAT2SJgefdBkJwO+z3tFPEeopTzuSxvkOjsVLrINZaJUgp/n3b/tpOE4
   271  GkQcUQwmLpv298/3RJ7CkzZd1wKBgQD+7222bDAF0uSns6BOlKU4pDxd0kPAdAmf
   272  6avgL8MUvonFM28DDkuE2z/fcYUtm5R6sxVd+xq99yalSRZA2dmKkUs0zXCInorI
   273  g8UJCoroQNlGYWWrrbDb906zMnZ/OsffqcZtIorvewY5dor2mWK5UMiQ1AgJsyS1
   274  nsNBd0deFwKBgCvyINDdqd+8oeiwP+oL51R+soS//dfIEZkTr2lNxhLo6mEKw0WX
   275  yDUWK58G/ZbzPWRE38RO31Lu80e2qjpVLywF6xq74shdxH+H1iELC/dLsInQs9De
   276  p55+ECFjLgd8lGpaPZB0QCAPXZxpobsFpLoiTgTurcrQ5cFjdg9g3lhzAoGATcSM
   277  G1H1dFFZHy9Uf6Qoopa3M4eo01SSew21OLZZNELLlDSUcMIzl1uqqGbg0YDcUnG+
   278  2uR2y+xRBaq99xp9mh+oaXsiEQsMGw7XVGK67Q6bOTUM5sodYXyXrWJ/c2BjCH+p
   279  4DDhYRyOUYkv6vnve8iA5m1H5m2XjS/ZMGdKhhECgYBLpqWEYX/K6uvIBHsgYMM5
   280  3xqhIZ58kUGmhMjUb3bDZBavzvAVTI31vdxqP6SZwMrvaAVHkuDNlzn1hI+Kc4Ee
   281  Jb0iJcXwlHxDP8FIGp0c1KPt/qURYJ0MUXDDhvieC3d6xIWKJPRgrJDKpoWRsMpV
   282  dNY9JbuvPT3oPYDAZxGbtQ==
   283  -----END TESTING KEY-----`
   284  
   285  const testECDSAP384CertPEM = `
   286  -----BEGIN CERTIFICATE-----
   287  MIICaDCCAVCgAwIBAgIBBTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   288  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFjEUMBIGA1UEAxMLRUNE
   289  U0EgUC0zODQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQW+hoMRTUTQqLkvYDm/Nl5
   290  8rg4fh7Io65qWW2UUDuqmKEMF8fIkSeC/kjyni0ORYt/uWjeHxuJ++fsOQ5Q0+nG
   291  i4vFFRE3flMPyXPziJD8MFDg5Qk0KE11dO19TfJnV9KjdjB0MA4GA1UdDwEB/wQE
   292  AwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQY
   293  MBaAFJvXswyhWcuczNyDMn8r+TB/92KlMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5n
   294  LmV4YW1wbGUwDQYJKoZIhvcNAQELBQADggEBABtle/N0jXbIcsNXQbP9W98PciRP
   295  l9NWLiXX3aS6vC8IqSdb0wuvc+F3ryo5/0DffAbypJLFvB6VPS9kthFVK58+SavY
   296  PJr8FL9mut3IVIU9dfu7RvQrqUeYW5dgH8nnC2CdARdQd9BKEWbNwGynpXlINTH8
   297  fP65lrmMWNXTlan9LCSgau7bCTbllPrur1tng73vEWDXVld7lW4brJvvBbEjN5Vc
   298  s5w1NwRhcLuNXgkM4JRoM8Fe76cAq7Yyx0Q/jM0MkBcffV8OFs34cxpjV6T1/FHF
   299  O3rtZDOGj+Sj2YC99qvSqxqx8ZSvFWLPOdjrYJNpNqLKlDWCQ/v5E7P6bBU=
   300  -----END CERTIFICATE-----`
   301  
   302  const testECDSAP384KeyPEM = `
   303  -----BEGIN TESTING KEY-----
   304  MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBXLSRx9cjuLEM82jst
   305  8JvLD3aH7aVWv92b2+Rk7Oby17jcKpT5IvcHeRzVcwV5M96hZANiAAQW+hoMRTUT
   306  QqLkvYDm/Nl58rg4fh7Io65qWW2UUDuqmKEMF8fIkSeC/kjyni0ORYt/uWjeHxuJ
   307  ++fsOQ5Q0+nGi4vFFRE3flMPyXPziJD8MFDg5Qk0KE11dO19TfJnV9I=
   308  -----END TESTING KEY-----`
   309  
   310  const testECDSAP521CertPEM = `
   311  -----BEGIN CERTIFICATE-----
   312  MIICjjCCAXagAwIBAgIBBjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   313  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFjEUMBIGA1UEAxMLRUNE
   314  U0EgUC01MjEwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAAhVpxsyr3MAFzfTH8v
   315  7GQPwbQNkhkibnDMnwPiig4fOs+IWzqp98LkODi1FptQTTtjRkkbNAkczn0LWgtl
   316  waXerQFZeZCAyu4BdWDPPxSUAIDX/cLLYwQS8ZjOu4v90pLZS5bxIfSKp1wwIeeb
   317  WPPsdILcBMkEtonfqhsEHNWh53zJ6KN2MHQwDgYDVR0PAQH/BAQDAgeAMBMGA1Ud
   318  JQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUm9ezDKFZ
   319  y5zM3IMyfyv5MH/3YqUwHgYDVR0RBBcwFYITdGVzdC5nb2xhbmcuZXhhbXBsZTAN
   320  BgkqhkiG9w0BAQsFAAOCAQEAlcs90Yzrw7TUXvBXGAYrrbrw0jH48USrvuE+2AIx
   321  C/GRmFINMxfhU13yTP3BGtmHPgItVk3jcy/a+QCrDJxKMIHCs+2ohsfgaPfpWjhR
   322  PK35Sq5iK/gfG+XhDOgwzSS1EXis2POO4ZuA8wm4UQNsHxuxIBTyjcsq7FT0aqLE
   323  VYdEPB1eUKJyBLk1TfenetQx8BZbBUMLDjPvi65i8WpLRSv+ifHrB/yxJa4VySsb
   324  2mi1oESMKsuFh/4ellxLa7dD8WW8oXzwOEVkUp8PQhxnS9ySJN7B8mF0wflwHlAT
   325  XzB+ljAgTjcw+SZ3YjGjO2EwcPFPheAaDBxZoSdMEgfI5g==
   326  -----END CERTIFICATE-----`
   327  
   328  const testECDSAP521KeyPEM = `
   329  -----BEGIN TESTING KEY-----
   330  MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAkCrpMZKv1oosRX6Y
   331  PUSOiF/t5gCI06wjRO2QMYCYdEb1SqQZwla7bjV0QzM/eOGIwK/vcxJxIa3f4G+6
   332  jJzVlBOhgYkDgYYABAAhVpxsyr3MAFzfTH8v7GQPwbQNkhkibnDMnwPiig4fOs+I
   333  Wzqp98LkODi1FptQTTtjRkkbNAkczn0LWgtlwaXerQFZeZCAyu4BdWDPPxSUAIDX
   334  /cLLYwQS8ZjOu4v90pLZS5bxIfSKp1wwIeebWPPsdILcBMkEtonfqhsEHNWh53zJ
   335  6A==
   336  -----END TESTING KEY-----`
   337  
   338  const testEd25519CertPEM = `
   339  -----BEGIN CERTIFICATE-----
   340  MIICGDCCAQCgAwIBAgIBBzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   341  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEjEQMA4GA1UEAxMHRWQy
   342  NTUxOTAqMAUGAytlcAMhAMcwykGYfAC1Y8OupBRVz+goJ3CDE4HXi3u3EygPJela
   343  o3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0T
   344  AQH/BAIwADAfBgNVHSMEGDAWgBSb17MMoVnLnMzcgzJ/K/kwf/dipTAeBgNVHREE
   345  FzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQC0gObJ
   346  rXb2iSQ8yxmoulpZE0n8xfz4cQ2Ve7x8IhCDnY9CEH+GsbXSzjj+NBeXxm07s4XW
   347  ioBLWEIi4oRT5zmu64XHqxdBS/zoX58Baa0t6IdY6jKaqscSToxXRCTq406T6yOR
   348  6xXZzZpQcauZDxR8Pv+GBS0pFSMUgFfL72P3BQegdr6hVVP9dwnBt90qjoFkxq8q
   349  iJKfOvt1Qpc0gN660QWZhEa8G3RhSLaUlvDIr7q9XqltMhZWxR+cVRyVdeXCKV40
   350  l35bvJUGu7cNjOxOsg1C+aXSOeQxXeAs4+vYaMMG7cO59Q/f/tPbMVeqg9yVbiwJ
   351  DwzOydNYV0NY+iZ0
   352  -----END CERTIFICATE-----`
   353  
   354  const testEd25519KeyPEM = `
   355  -----BEGIN TESTING KEY-----
   356  MC4CAQAwBQYDK2VwBCIEIO58qyJDz8ZYFKRCSqhCJLj7RM+XIZqvRgVecU1VeG27
   357  -----END TESTING KEY-----`
   358  
   359  const testRSAPSSCertPEM = `
   360  -----BEGIN CERTIFICATE-----
   361  MIIDejCCAi6gAwIBAgIBCDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUA
   362  oRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwDzENMAsGA1UEAxME
   363  Um9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMBIxEDAOBgNVBAMT
   364  B1JTQS1QU1MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxyy3GKqLV
   365  4Vkuda1PdARi79lV9ydf1OMmxoS0bSz6mBO58io7nQg1EVXpYhWE5OQ+bZa0qkRX
   366  04w05WCGI7TYViNCjpT6EVFXqamp4evwoM7I+J4a7wX0H0zkckQqC8xDmp13rylh
   367  gMiWBRJsoaNFuVkn5lwe62A3BAhvb0Qs2mtVdS20BMb480lnX3ihg3WtjiSZPYLc
   368  gzSbWTowmVbIQaX+MFmjZa4EXKpiXXbPOcS5uGxWPy0jOSlo6tZp6sjHSz3/IwIZ
   369  eHbr/81Slg+8Y9W9nIF47rjTXrx/OaBZPFOrIsS7oQc5p9qyU8fKViyTy5S2gN9X
   370  T347jZjGHB7BAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
   371  BgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFJvXswyhWcuczNyDMn8r
   372  +TB/92KlMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwQQYJKoZIhvcN
   373  AQEKMDSgDzANBglghkgBZQMEAgMFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQME
   374  AgMFAKIDAgFAA4IBAQBmsnhwZyp5lwe2CSJV8xR7ht3efhQaks1p/r7AVB0Bofh1
   375  L0ZMJFsokotR1p6AP6NsAz/VudLS74e3HrOxCpNUBl3vE4+MLRlVfKcuGtYSPwXU
   376  z1BWsl1sFRA0Os+/5eg8Sg7yRxCeC9HwnsT7OgzD522uXHWXi5q98EC8iij651rX
   377  UlNtzLsaoH/7DQAY/IheKMweNUweCsWET7tVmVXDfa2YoM/PDT8e4UKMYo26qoXg
   378  U8trHh6D2OlXaNgyvA3DSl2K0DLCWrm5nWGOf2xj/ohAnSAnzCVu6KrkwLqZCXbE
   379  5Vq2N4xs4+qu6JDHPK91SzKewvXmrZYzTRMbfbcz
   380  -----END CERTIFICATE-----`
   381  
   382  const testRSAPSSKeyPEM = `
   383  -----BEGIN TESTING KEY-----
   384  MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxyy3GKqLV4Vku
   385  da1PdARi79lV9ydf1OMmxoS0bSz6mBO58io7nQg1EVXpYhWE5OQ+bZa0qkRX04w0
   386  5WCGI7TYViNCjpT6EVFXqamp4evwoM7I+J4a7wX0H0zkckQqC8xDmp13rylhgMiW
   387  BRJsoaNFuVkn5lwe62A3BAhvb0Qs2mtVdS20BMb480lnX3ihg3WtjiSZPYLcgzSb
   388  WTowmVbIQaX+MFmjZa4EXKpiXXbPOcS5uGxWPy0jOSlo6tZp6sjHSz3/IwIZeHbr
   389  /81Slg+8Y9W9nIF47rjTXrx/OaBZPFOrIsS7oQc5p9qyU8fKViyTy5S2gN9XT347
   390  jZjGHB7BAgMBAAECggEAIx9KlxukGFFQj0uC5a+7EBpmmkNdXWKOTwInhAcPPB/f
   391  wbtzmVwvm2Al0xlju+GFr0lx3JXIM3tgdrCbbVRPbO8zPvowtufF5GXpVNyDAgGa
   392  Z/wpK5PtXqjyRSzHh3DWNMKt+c86Av9wYKZ22cvil6sCUE4DA76mvqeGzRCzbJKT
   393  Dl4SWiGA4FS80y1AX2Br3I/A2zzjqpMK+7/VaU7CVYq9VyCoYVecWVy0esPwRM1V
   394  kWLCv54jyjr3s5epvVtGq+iGk0pGZK/Hqo+D5qf559GcSdgSXCmU3040j8ynIeKU
   395  JFNKw43WoMpZlbSiqlYYIUJyqmEaQ3HWGFqNLX0qCwKBgQDPCdyKo9XyipQNaBKK
   396  bUerUhJFg1du3YhkJnaiHYfC04Am6AXFCYY2A7cJSjfYoANz+niZHOk2e3rrDeS3
   397  bWbEXjar2mgpcXdr6/li2KdPVJDG03/tpY/E4m3MvGi39Fmgu0JUvRzSQCAikAnB
   398  smZGi9dHxskhutQY2w7Q0CwoXwKBgQDb1tSB4QQCf0lAuZEtqkbRyGASPYAli76V
   399  Hq90xAouBtPZRuiTZRZWQl+nQSEohDACm2SkGw36rofCL36stDkI7NQZXpSrajKw
   400  Dd947/bT8i47i2sQpv1yu3YxrS3srylFTcDqnSYXKdFje1DZKIq3oAg74Agq1Ixe
   401  9OTSlA+M3wKBgHxB2egnXk971lGZhY8o+RucXTT1F/OE58fbwdWYTZOjZkVzeYsB
   402  JVijsCXWMmBD4O6pg9m5HUrCn0oVg5CHC2eNd9h6c4tz+w19iaZGi1u0UFPUOfJC
   403  LGAo2WdIKL1G3Mf3u16qRXL2Y5L6ybBDxthOM31zk+E3hPYJ+wFd/zKXAoGBAKDb
   404  ty85yMdS//S+U76IQ72o0rNGEQhoEpHmnBfiglhfYpAv1GpVo1yGwJsPiwWsg7zE
   405  m4WAzl/JaUjrm9MfJESlliTiEgLDeEdeP1CstX0sTiv/vd23cuiKxtdekqYHHTm6
   406  xRhm2MJGNRKH3wanJalrDdtR+Gfukq/AndZ/xEkdAoGASFRIZPwptqHvYqke+Ogc
   407  73ItUBnlygxDAlQP+GtDxbUqLcyt0uW36ByUgsKsNf+Ac6avu7t1zbPTCSjJMvro
   408  YKu8bWjW1ner4DGFjar1knweGi19l6pmEKiioWZu3xUA9wf8OMTZQeoPr1ZGFpqq
   409  ziuOHGaqGcRjUMoAV9LB3eU=
   410  -----END TESTING KEY-----`
   411  
   412  const testRSA1024CertPEM = `
   413  -----BEGIN CERTIFICATE-----
   414  MIICjzCCAXegAwIBAgIBCTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   415  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEzERMA8GA1UEAxMIUlNB
   416  IDEwMjQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMhieB5YJmZCj1aA8N3x
   417  tgZjhn8hQv4lqIDbqOK8Tepl7Aj22NoIN6Y7KjnN0NuKDtHBi9IlAEBkG0j1+PiC
   418  WcTyBlaIqg7RiYMJwMGdjsAEn3TjRdHm9LQuEkmUXu27kWkeLhBrv55bkFLQuDxW
   419  qYBprN999cY4KVVGrObjjuXxAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNV
   420  HSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFJvXswyh
   421  WcuczNyDMn8r+TB/92KlMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUw
   422  DQYJKoZIhvcNAQELBQADggEBAHtVCJt93gfFw8qmJD/Z4RK7rFWK63I36dgMe7Ot
   423  RuW+B41KBAPMWv9xPKgUdpNcyIntXDd8iOre3pgdDy8wa9dGoYUOD/oU+qTI9Rkj
   424  R9IN/IS3dZLgxG6xsFPeR/x5GokaphTrJa1ZnEyDRuPyA9dOJ4ufV2s3m3SSdjnj
   425  oZUviRAtGBer5LPAqOO8cR467mJTPnofgVsGA496mDPUSoqt2WLhu7UaAu63Oeea
   426  wDlq2TNHSJq38e2B44QKs/7cpwjaDEJs/F0TuvHz5smImTqdpE0FDOXB8mlfsggm
   427  lD/N1JI6JTcJCdONY6BYpmvAcByOZX5SS6CmMv393cfeALQ=
   428  -----END CERTIFICATE-----`
   429  
   430  const testRSA1024KeyPEM = `
   431  -----BEGIN TESTING KEY-----
   432  MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMhieB5YJmZCj1aA
   433  8N3xtgZjhn8hQv4lqIDbqOK8Tepl7Aj22NoIN6Y7KjnN0NuKDtHBi9IlAEBkG0j1
   434  +PiCWcTyBlaIqg7RiYMJwMGdjsAEn3TjRdHm9LQuEkmUXu27kWkeLhBrv55bkFLQ
   435  uDxWqYBprN999cY4KVVGrObjjuXxAgMBAAECgYAW04y+XClHpdZhMr/9cF7dXHIC
   436  Ql44yD5pK1ySM4QmquSX4tKyB5SbRYsaWZUspQ3qHAOa9ScRrrWi+o4ZdPPXtQ3X
   437  /N7A618bpi64hQ3/dy81BPPM2d0cSGCuPj9Fh1ZyHZMPan3On3F+XxgmnKg9HvgL
   438  qfuQCthkoHcPP3XDdwJBAP5DK4Ry3TBIoSgOzmbS29QEf6qamj9uAU2VkXoZaHL3
   439  5y85Pi2okKE5AnkzV7iPqs0bDiEHpx/8cexztLgh3j8CQQDJwQphlPhTQekOPmHY
   440  MV8z7PVADC6hVoPHTTjMq5zjpckNav0WY/bu0c7STCskzSZpUN2wju237Comtjsn
   441  OY/PAkEAvqa1GcJbMlozZOr9P0J6jRa2d8EnScp9daRiCfDFTfeuxM0iX3AWyp0J
   442  ysGB1CT9yH+x73hii2xqLAdyieLzVwJAKJb2wLUY1J9BBQWV58nfDnJQ0QbiZsEi
   443  F/m4QK0SDlavQUzSCCwqZNe/FV4PnALOBIgpYbkPqF4SCOHGutiAzwJAA0Ap41Sd
   444  rLtE/ffaQ3YgDbqocqoAFs2k4pLDvsLQy9GrUYVowFUmR/qRssNvAvPX15IwgAZ0
   445  TZnUz2zKW08PpA==
   446  -----END TESTING KEY-----`
   447  
   448  const testRSA512CertPEM = `
   449  -----BEGIN CERTIFICATE-----
   450  MIICSjCCATKgAwIBAgIBCjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   451  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEjEQMA4GA1UEAxMHUlNB
   452  IDUxMjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCw9M4C7+nAhnTre/8qu/6pJWGO
   453  7l6Ggo88Z+9TKJxWToO1rWFYmJPPSv83QTLOmTA/Gt9HeXgFKX1Y5DIG8S8RAgMB
   454  AAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNV
   455  HRMBAf8EAjAAMB8GA1UdIwQYMBaAFJvXswyhWcuczNyDMn8r+TB/92KlMB4GA1Ud
   456  EQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAACj
   457  0UlmFTWDzmC0EQQw5l3a/2TJrqgcXDa6dJbFrg7c1EPV2NIUtsD0HjaiYlPfLoY0
   458  KUxGsnsZU2XO1IyJbmd0wkejPppajFCwue6HTxCdyQrMZqwVOxN439VWTdKIu0c9
   459  qBaVBu70fBsx/IMru9EWyFaM0wUiKTUBKhFBPJdbBs/3gFb7X3Hgu7LC72mmoCiQ
   460  IBRz1egnk8K80l/1N/ivdYEGJLWDx6CU/HD52o3qQN3yfrIHtmKTIBCiujxmndD5
   461  bmK6D4zi672Aw2+LOY4VgOXCTOq370nWqYA3cPoDTqrpVvJkjoFAf8iVGBL+q5HK
   462  zslptIKp6XNEDj55K1Q=
   463  -----END CERTIFICATE-----`
   464  
   465  const testRSA512KeyPEM = `
   466  -----BEGIN TESTING KEY-----
   467  MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAsPTOAu/pwIZ063v/
   468  Krv+qSVhju5ehoKPPGfvUyicVk6Dta1hWJiTz0r/N0EyzpkwPxrfR3l4BSl9WOQy
   469  BvEvEQIDAQABAkAbUXe6aVpPYBKNxiNC8Cnk6AHzJGaQYniFbVA7qNHV2uBjQziA
   470  Tb7Y+bfM5e0W2Y7dPEPaQoTYU3tt4KPQNxPHAiEA3UgrA+pZ18e71KltU+Uh8pRn
   471  4ecXtT/l3Rez3VRk4O8CIQDMuEnh9y1PTFsJI4zylypAhMEoM18jq9BkHRr7surv
   472  /wIgT1U4VscGPt5U8QFtOM7FRPr/43W+gjTObF27FnbTU/ECIQC/COnI90NM0E/T
   473  Q11vsyg2dKtavDV3sAkSoyZe4iLiOQIhAKIupYyWuRk6eb/PxvjrBRP4nFoLk6QT
   474  MK8ETFwpSHaF
   475  -----END TESTING KEY-----`
   476  
   477  const testSNICertPEM = `
   478  -----BEGIN CERTIFICATE-----
   479  MIICVzCCAT+gAwIBAgIBCzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   480  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowIDEeMBwGA1UEAxMVZGlm
   481  ZmVyZW50LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEm9Ol
   482  Csap98fLio4DU25+iimxUV7kTRDsMAnS66C3IW6OzzOaC5ATt+OVkjBvIe3gk6Mc
   483  +zxEtcL02CLh+zSBX6N4MHYwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG
   484  AQUFBwMBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUm9ezDKFZy5zM3IMyfyv5
   485  MH/3YqUwIAYDVR0RBBkwF4IVZGlmZmVyZW50LmV4YW1wbGUuY29tMA0GCSqGSIb3
   486  DQEBCwUAA4IBAQBYSwKJ/fg2JmHmtgAK8jUgI1TVV4Q8GBim0VmUacLQk9hlhqgR
   487  ydHDNLn7Kb7h1PjcsFj6FApNWXwgSxxSYLXnNz4FcDW/R0M3mRS7lcyXZ+J+Um2x
   488  la3WT0aaxNCO4ZMZyT+M3QMTNBb3y+gBUDYUjebrotyqdH9tQhOI1dZYbYx0mFeY
   489  ejT9rjjtGcmjUr5STMywAA5uPwXI2CsKSmekHrZj4/j+oGgTlKdDz80MTzCfYvew
   490  hP5LcTDLWSp7YzPnl0n4QZikWq7sGuIqj3F6oXMeafV999yY/YyrDuzzIi6T5L85
   491  yUHIDduLpiq/jNsdJKwpv0v7tIb06zznJN8j
   492  -----END CERTIFICATE-----`
   493  
   494  const testSNIKeyPEM = `
   495  -----BEGIN TESTING KEY-----
   496  MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgvBR2oS5IA3rsZoIP
   497  bMD4+VFIKRur2iDcdqE1LAf++ZKhRANCAASb06UKxqn3x8uKjgNTbn6KKbFRXuRN
   498  EOwwCdLroLchbo7PM5oLkBO345WSMG8h7eCToxz7PES1wvTYIuH7NIFf
   499  -----END TESTING KEY-----`
   500  
   501  const testClientRSA2048CertPEM = `
   502  -----BEGIN CERTIFICATE-----
   503  MIIDJTCCAg2gAwIBAgIBDDANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   504  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB4xHDAaBgNV
   505  BAMTE2NsaWVudEF1dGggUlNBIDIwNDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
   506  ggEKAoIBAQDTwPTM06uYwgFYNxjT/KDJBWsEZ9kjjvxVhae6Zj/506+drJC7lqv1
   507  jz4FBuTxrYkuhTEjFirp5++RuunZh5Hs0Hi+t29TEINMLokp/nsvKxXXzax1kKsX
   508  SvY3jz62oPfCqSoVnnoNb6rUurt0AyDFEdhJxck5y0n6SR0PvleXBXAq37h7ugsg
   509  IWnGG2nQ8PYsaTZ1b4w3j+C7Y0s4AXz4rnXzgOWnbRHAwsuItVVZ7W7offv+ddex
   510  M6u4ZMPNDgyNoOiJaa8eZxC2yD6IdUJGCoaeIFZrCKc1fn0Qq7Ig+XuyO1GAHSDc
   511  lP+5OsLNEB+K+N+kTeizIC2xc31DY5HxAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIH
   512  gDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaA
   513  FPycwUBCXOb+Hi4uW8O4hI/tkjPoMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4
   514  YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAJJcB7a0IdTPX8AxhazG78qmVwEtlP7i
   515  z19HxFqnEmA//KQUuytAiqDzqqRAS8mmCBwWtUqGFtAZ1ig8EhIJYDTvEmtGvzDn
   516  3A+WFHNY2TpZB9V51rJW1hk/CDv1HQ1q7twKX8LcDX0yybsmi9LlZMB1H6cLx3xK
   517  yviUy4/V+7//b82N844aAPuQG+agzmE15KcPRG6xkGcV+beGVQhW65KZy/E0a5IP
   518  dXezsYp2isetxgWZbhXyJ4Ikw1DAHj7YyAz3QxXoXTOcMX+ZUJjANOxzwdVSznCp
   519  tdEpS3Pm7s+uMMIBidbVsc7ygJ9+ay6L7+7BN1nFj+bsf/k6yT8YcTk=
   520  -----END CERTIFICATE-----`
   521  
   522  const testClientRSA2048KeyPEM = `
   523  -----BEGIN TESTING KEY-----
   524  MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDTwPTM06uYwgFY
   525  NxjT/KDJBWsEZ9kjjvxVhae6Zj/506+drJC7lqv1jz4FBuTxrYkuhTEjFirp5++R
   526  uunZh5Hs0Hi+t29TEINMLokp/nsvKxXXzax1kKsXSvY3jz62oPfCqSoVnnoNb6rU
   527  urt0AyDFEdhJxck5y0n6SR0PvleXBXAq37h7ugsgIWnGG2nQ8PYsaTZ1b4w3j+C7
   528  Y0s4AXz4rnXzgOWnbRHAwsuItVVZ7W7offv+ddexM6u4ZMPNDgyNoOiJaa8eZxC2
   529  yD6IdUJGCoaeIFZrCKc1fn0Qq7Ig+XuyO1GAHSDclP+5OsLNEB+K+N+kTeizIC2x
   530  c31DY5HxAgMBAAECggEAMLy8m1gsqqAchx1HTaNbrmjc1MrCI3kJgvWcQT6/gtTC
   531  GtxZA5QOSBqL/8QydZ2ncVmekaDMh8GmVjhbEoItiAADioHV0Zx/W81qLIwx9g1I
   532  nb7s7rI5bscGHIuPt6Ec5WTiFs++79C/1O6VroH5zOHqkjA/vFmZ0U16ruD0cAGZ
   533  JogryIheT1aAuJWhNzPEBF5u/Tvk6SOm7am3KqgnmU9REE8CMZgqJwZIqN9c0uX+
   534  4K5WWm8cWCUqrvKax9xNMTNw2VV+n7Y8gtu0wc8JkH1tyTyGg6N2W4NtDItjynGw
   535  F10aqxeolydX4mV97poudtJDOLlwPdDKlQ9OCamrMQKBgQDfXGs+PBYhuB4nHbN0
   536  i7ANpfYOXDM6AlTKanQezVh99k6++x+OcWnk8DjhFE0wVacpC0k2ZDhLW3ChAlu1
   537  KV8jJmhE/VRfx/KGzlUVx2faGAM1b1hRLLffhJTO94DAfV5L4mHOngg3v/Rh+FS2
   538  FRY0ygYYkwwmSoo3uTTmroflhwKBgQDyslPaS8oVZthJh6UX4OaQisDDBW6FTxYF
   539  HlkP90O9M9BMU6+1BRgWoSWEXiPBDKUDJ3QO+Yc5zDK8Khl01anNaJF3res4k0RV
   540  42wsZO8Sg9qtU87hmahAeoFlmJVQ/Q42G4XXMeBwkMhHPJCB0j8TQ9I5rVEV2oy4
   541  tGTS2SgqxwKBgAiQkagsQ6j9V2Kml+gDJzgOwhWg4XH6/udYF6XKt/b0h+Z42Kfs
   542  n2Pg9j1jOuZ8klFXlnIYe7QgCHyUC5IxyO0fHuZuVFrr3tfed5LDN688NntJDrjm
   543  HxLaEZ6yDOTUqdX9E0UJ+ESy/pr3G8BzpItXp84vbUrWluA2INornRhnAoGAVVnx
   544  s2vD/hLVLcbOgL9PVrX1ZKCcZbWSgOpTWBIVeIyoTK+Bs5+/APZbQ1n4KQRRY/KU
   545  FlAbBnCRxyrnGPerZ9nGjthTSOpBthLtEA/PJCvK0/oNX7myOjrbFue6W2kjflPf
   546  lfasf+nrBWJ/T6ipFhVb8XzKb20U4EBQ1PYZ8jECgYBsh0pMTcd6rfBPlSo9Y2I2
   547  a1yKoCm7QP0yfHcIwZPeKh5UDc3JMIIky5YXhWS+3E+3bjKAKJsmj3BPCJpPVyNV
   548  CqvejnvM4YhGdRFRST9i3ABkZ52bXLSJycLMvoPTlrYqT9rpFZRu0SJdP1GYNFlw
   549  R+ajuyCrDBqQKewlTjYuLw==
   550  -----END TESTING KEY-----`
   551  
   552  const testClientECDSAP256CertPEM = `
   553  -----BEGIN CERTIFICATE-----
   554  MIICXTCCAUWgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   555  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMCExHzAdBgNV
   556  BAMTFmNsaWVudEF1dGggRUNEU0EgUC0yNTYwWTATBgcqhkjOPQIBBggqhkjOPQMB
   557  BwNCAAQF+g0W3NUmepkBbVZxAVwt03e6hsl640luKI8nDv4FNM/OPdKp3HCBP8jP
   558  p7IRbrTvfCR3WLkmM1wbK1PIxnYlo3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0l
   559  BAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBT8nMFAQlzm
   560  /h4uLlvDuISP7ZIz6DAeBgNVHREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0G
   561  CSqGSIb3DQEBCwUAA4IBAQCEWnz/tPGunsdaOfu7yZuFPanBnlGCVfn9/phrojbE
   562  LD1YNdorAxbvs0CPGYQRhITEn/AnYw+TXZuUTCbcaqWIqbDfjy4zdXKtCl1fvaNT
   563  eLsoqG39II80xMJQvckAZ6AgCuzrGIrrJprlQ/AJo2pEcYHZEllxyAaSMROkpwgB
   564  r/InqtRJkgr1ShrCVqmFHfklTkU3FClO6bwuvEoVu5cq3ephmbA40sVWfIRNqkAP
   565  gYZU1aBQ5dFbuJ35UWbU0YBzrLdeBHk0N/xGLuvSANoZPjMgbRVEStiuu+SKzeqb
   566  sB8aEEOtDQeFu0FrNX8rQdFTscQWd2vsnx7kFLF8VHbo
   567  -----END CERTIFICATE-----`
   568  
   569  const testClientECDSAP256KeyPEM = `
   570  -----BEGIN TESTING KEY-----
   571  MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi4NDLrQA3dC7SzC2
   572  wiBJTQNQeUKHc/iABmlUmVlELgKhRANCAAQF+g0W3NUmepkBbVZxAVwt03e6hsl6
   573  40luKI8nDv4FNM/OPdKp3HCBP8jPp7IRbrTvfCR3WLkmM1wbK1PIxnYl
   574  -----END TESTING KEY-----`
   575  
   576  const testClientEd25519CertPEM = `
   577  -----BEGIN CERTIFICATE-----
   578  MIICKjCCARKgAwIBAgIBDjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   579  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB0xGzAZBgNV
   580  BAMTEmNsaWVudEF1dGggRWQyNTUxOTAqMAUGAytlcAMhAGzJw5JrsKdUyHfuU/Ja
   581  cxWmii5JNKYtSNM/OXVRXhzpo3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAww
   582  CgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBT8nMFAQlzm/h4u
   583  LlvDuISP7ZIz6DAeBgNVHREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqG
   584  SIb3DQEBCwUAA4IBAQBqklZB4Bn5RgJJ6iyrS/k+AtNpC1xXEvDlqsqpMFQzvGCe
   585  9c8YPQV0rWnRjNl6GG6rEf5Lf6t6eVlqEuzrtUYJyhbedhpd6OlMc8DW1YAzlQk7
   586  VQAMQ591hp8f5xE2pLJbPi03RTLuQwailxDqc6VETIGmfYMp2gXCI+s7APlKI6RB
   587  Z3MWzDHy5l8MS9lCOYtuUR+c7V8A301ngBuJxKxTJLgURaVfMhb0i9NwqZHTiMAc
   588  F+/GDvrvxqDFthXQFMs4cbae10KpETxzEFp+olRZDhK/ObJiXt4W7a9blv+IzBT4
   589  eAeTh0qxFif8SM9RpLui5tKMdVHzwG0JkNVDLO8f
   590  -----END CERTIFICATE-----`
   591  
   592  const testClientEd25519KeyPEM = `
   593  -----BEGIN TESTING KEY-----
   594  MC4CAQAwBQYDK2VwBCIEIAulgeirbJn3cMSajhuoAkmICIRkcSUfqYjHdlvvANIz
   595  -----END TESTING KEY-----`
   596  
   597  const testClientRSAPSSCertPEM = `
   598  -----BEGIN CERTIFICATE-----
   599  MIIDjDCCAkCgAwIBAgIBDzBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUA
   600  oRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwFjEUMBIGA1UEAxML
   601  Q2xpZW50IFJvb3QwHhcNMTYwNzEyMTczMjA5WhcNMTcwMTI4MTczMjA5WjAdMRsw
   602  GQYDVQQDExJjbGllbnRBdXRoIFJTQS1QU1MwggEiMA0GCSqGSIb3DQEBAQUAA4IB
   603  DwAwggEKAoIBAQCkFli6h4zzf3qtbdqfA2yRAjIokwPj7o3c11KJ73+H43QyZENo
   604  cTLhYHQ6k3bvlvCiEtDxkfZCwL/tlkZK6aeS7+kF/f91DxBtrPYnew1ZOcdcng21
   605  gXZhrJW6wxmOFOVzyys6SKr1Jhv2tvbow4VDB4mR29myZoHNIU2WyX0HznpBV3bX
   606  rqKGd4WzqLsWD2eDS0gOzCLCZ0AT1Eo4ElNSi04IQY+AjmRnC5Jl1om9dkymMi+t
   607  AZcupw9pMFZtmVYLHrs5omC9jXeDflZbQY5HkW9WXjmNpnqPfZRzU3NKjIj9lRDu
   608  LI9hesQMe/QFmaXTyhawaY4NZGmbHCedKj5hAgMBAAGjdjB0MA4GA1UdDwEB/wQE
   609  AwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQY
   610  MBaAFPycwUBCXOb+Hi4uW8O4hI/tkjPoMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5n
   611  LmV4YW1wbGUwQQYJKoZIhvcNAQEKMDSgDzANBglghkgBZQMEAgMFAKEcMBoGCSqG
   612  SIb3DQEBCDANBglghkgBZQMEAgMFAKIDAgFAA4IBAQCmnJmB3GnDgPUDDIJ6B6zt
   613  zL9QwrEc9DMR5gkVlTRtLq6bA0cC47KvBIn+1WeJaVtrDXY8rmNt1zX1nJHV+tyY
   614  KmwQ+qUWQOgBsteSa6xAAq3aevLgCkrZD703pq4GRGC3NcOPzaN44t+8CC1ydGqf
   615  tDbDmzOVnGTVYvEbKlkpVWPBQxNe2rprwbwWHcwTsbJTh7htrVqfmT+nbCbmLtZK
   616  Hfr984B9pHWRtaa/LeHqk1qQlKyEy10LPMFqQCxzterI1wljlznMqHIr69ItVu0j
   617  2+lBMM6b7CB1erHIxEc8Omyo8BUjvPk54NvVW0rwnurIyS7N5cRdMmB1wQJ37fn1
   618  -----END CERTIFICATE-----`
   619  
   620  const testClientRSAPSSKeyPEM = `
   621  -----BEGIN TESTING KEY-----
   622  MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCkFli6h4zzf3qt
   623  bdqfA2yRAjIokwPj7o3c11KJ73+H43QyZENocTLhYHQ6k3bvlvCiEtDxkfZCwL/t
   624  lkZK6aeS7+kF/f91DxBtrPYnew1ZOcdcng21gXZhrJW6wxmOFOVzyys6SKr1Jhv2
   625  tvbow4VDB4mR29myZoHNIU2WyX0HznpBV3bXrqKGd4WzqLsWD2eDS0gOzCLCZ0AT
   626  1Eo4ElNSi04IQY+AjmRnC5Jl1om9dkymMi+tAZcupw9pMFZtmVYLHrs5omC9jXeD
   627  flZbQY5HkW9WXjmNpnqPfZRzU3NKjIj9lRDuLI9hesQMe/QFmaXTyhawaY4NZGmb
   628  HCedKj5hAgMBAAECggEALMFpnysEz4+4UuCRTmj9Lko2iymaWIvDRva2LShVlSd9
   629  lJcTacPieGW6HhYFzVDSvqo6MoG49TkkwHWKI7m6etIUMY23pWKf/QI9u8QM/obL
   630  cWAs5hJzSy3rQx8e88mQUjaaylFyy94Cp5b9HrzhtsgyBkY8iTP7eIt6YcQAZeXE
   631  VOoSXau8Kvgc7/ta4wDDlZIhqswNQhiy9cxthN8/awS2satUVPdyJFyfrpEXrcO1
   632  n5NzX9esgJlP12K89xBH4Ufp+JtyKZytkhsZGuMpiytD1rqeTXr7A2sBb0sWIvBo
   633  +6GrT9Isc824k2d9uNrhK9fdvCwfLVwwlFnq7q6b7wKBgQDOPQWbRjG64IybHAEJ
   634  dq6TN/OFRXJI/TlqbMLAewRx1u+QnQAP5ZyxdGtdyLWaTbxPWUSZXIBJ6mzHZzZ8
   635  OFgpav/gHvpM/DTnDn4n4xP9x8z1DdDfEvsG9e60/0GH+abLEmkFO81GhmCCoDDv
   636  INVRTN6Re2EMdj0ANb0ck8P4vwKBgQDLrbo/piqYe/zyvWbZVmbqISRfa1t32oEI
   637  geu0LrYSqIZw7kJoaF8pgluFIeeKDQ306yCDq89IjQhUW2PGUZBxgor6WH88dnDX
   638  6LMsSSD2dGYt2dBBPIwRCtFRi/b5h43NnTnwKgxU81To+uzDBm14pGDae493BYeq
   639  dtCK1p9w3wKBgQCFHfQJdjRRF/EJiPjOX/Fsire/NMUAgZnWrJ7D2GNVC1OT9xJ8
   640  MEuEas2GOi+lijlayhayGnefvhU6W89aPJADI9JGmhgbKssGvF8HZdWYf6c2IRXJ
   641  dpnas1DBOOTWXHihKJ/qxd/IfqG6jqUnI/0sPb6HDqjkf0j+YrFOyb27RwKBgQCb
   642  yjY7mQ3btHq18MlKVBxD2TXJBoTgF/G6YCW5nEEH5H9wwc1pruubBGqcWmKP5YxX
   643  WcF09WWHSNimLYEToC+rov5KnoYz6SRHAWaK6SSdXksJpyDzxSwdnPieN0ChfF2q
   644  eCho2sCz+atoyQVv5uq07IZolzoU/9XVPSwmBiPOYQKBgHRYoOQ1gX+fIcwq2zHY
   645  sy4zhupKB2VMWvVtDFMXG3x+nSWEUiVees/hKiMuEWfEqcl7h3LmGEV/9AG3rIda
   646  qvASpQH1VxVPrwcOX+fxGzCx/8X7RgT8Po+TRCuKagOzC+itp0HTXXWPUKrfuNYl
   647  yuf7A8y3xgn3vqrcyh/WiGBh
   648  -----END TESTING KEY-----`
   649  
   650  const testMLDSA44CertPEM = `
   651  -----BEGIN CERTIFICATE-----
   652  MIIHJDCCBgygAwIBAgIBEDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   653  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFDESMBAGA1UEAxMJTUwt
   654  RFNBLTQ0MIIFMjALBglghkgBZQMEAxEDggUhADP+Xw60wWsLMiJA9AL1Ul1wuNuO
   655  BSYavlgsJDCXGASyQn1e3kwcvFBCRMsUPhAHEoqwA7U8HHyEcUAku3Ac/54jN4VT
   656  NE36hcRsIjQTKwrBv9m+SjwFBFul0EZjwr09BZMLE36if1OoYpR3QPComXQ0AJ3X
   657  IMDUlNiMuEgsZQ4JSoE/hbFU254febbILb7uDdQodN6K+INa7JgoRoyurIISg7Cb
   658  nyyMr5kbRFe3TfbxMnBenD3pdrGLpfqTjim9mTbLJZDrNWNV3mskZUkp1/5RrQ7v
   659  ElldeJnxU95FqpQF8B3unzFhtzR6PrwbN+lcebNP12jVjNG9zGv4V7v9vuMo+GOH
   660  fVYyykvWVDoMEcCIV/qleP6u5U+bWA5N3M2wjw15UtsTKA1j4dCBaCZL9iWluYA9
   661  NFbqVsLSborcYC6/YDN3yDphAPf86fCsMIY5svaLzOH45DMm5b40/pjBwh6ThFjL
   662  WYCvULVAHtmBAlKjPINLsaxHvwPAbSVIQl6QjCHMrwMVYvHjuANV3jKOzrO/Y1K0
   663  MRxU8ab2hbu3lJGNkpkzKo62KGRyZYjw+VpbSji2N7N0ZFW2oeOAv/+Up5yGLSB+
   664  qQYzPQzfolBDcpTauA/GmQfjEaXMEzin326pDDUmcfigXCiPXTk0jlPfcgufIGGs
   665  VsaOotpohW9tPpC/lbk71PGMIvPDM0gqShy8g1f0dzxUIDrfZGDEB40Pt0HybXec
   666  Ix5XBL7nk9QrmWNwmS21q7y0iLYt2iOlfZX4aycJj1wcEgIQa2vnLfX1sD4d2hQ3
   667  kvH4tTzhoPeUPwtO0pP7DMfc1oHqe92Qb+1uvnG52nvUnfVvZX9WXSD2xYxU/t5i
   668  L07ad+ARgwM8WHO0XvRiLQSjGHWgIRDhF/McWFLP+UTh4WZyfibP6DvUNpKRWvNz
   669  yfBN4Y2VO76AGhZ/YaNkysGgqhQ9/DGr+9aEGqdrlcGqzLFqOTbhUnNVX5EidKMf
   670  Hbb9D7znAOBBTjyH/LyUhIzuObtrakkmqJ96LvdKWmKPrMKOSkFmRTAjzF4iBfi7
   671  2J+CZd6qxrINl2eRtBXRTGPEeFXi2Bkv0nwTUs9g8Q4ri8P/iaWR2ZecVJ3l74LR
   672  gBskA5pdfzbtpuM1rswt5xUwOtFJr2veeWi4BrY+oFR6Gm+NlX+rN29WeyJHX0xA
   673  QCKrQlz+pv2RWM08+m9AmNuKM6fv+KHkQhYy4yIlLiA/lIjW7t1T644JmZKQMfG5
   674  OUzQ1bxz9hnchoy343oW3GEw3xQL3aR739efI2WYcAg9xmVYd7OIfDLbEEUKKera
   675  MmNLp5VC1EtW0fnDaP9JQEobQEpXd/sEGWfDugsu2fwo2f9N9lfy9lq6RyqScrv4
   676  8ld3Z3s+IhCof72c9jk97mdY7H7EJfAn5Upa1FKyKPgFmJnd76haLp4xr6IwK+0a
   677  Rj7dws02GOD0POrbm6HzfEBXJe/8dfJQ/QmbmCxcUCUmT0jvvq45R3AODo0O16wU
   678  HNtKHeoYIo3geGG7kNmH9F1Scl6LMVr5t7bBATquavRc2UbEJ4R/15lWlgAFpkFT
   679  iZ04fKDaclTgb0+TuHDxfrjx7Q2TqPb01JCR7OyBUoTNeFI54FtY5Ag2ICuOmy28
   680  c+HfpmjoftQ51OfhqzLyG2elZSdLpZ565mi12D+NnmoZffT2LrEzm+NxMejvPKCU
   681  uxdW65wPKrC7Ee4nCTYeHXBVIZTxaAk9muL2J0+1tGvawAjDYV5cGxxSidijdjB0
   682  MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8E
   683  AjAAMB8GA1UdIwQYMBaAFJvXswyhWcuczNyDMn8r+TB/92KlMB4GA1UdEQQXMBWC
   684  E3Rlc3QuZ29sYW5nLmV4YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAJdv6U3Imdsy
   685  Pf7qKL03OTWep6xlZJVcxZGCPzDDOiPdLYlelnOKxqmoGplge/BVIvznydm9Gidy
   686  ilyhpjdhuiB+RM1UQbst/zC2PY1BbQ1q1bEOQnrE6zr10b0xkbpea1r8qZkiI0BN
   687  Jf7a7kY9obQ/W49LUCQ+DsQldkNHW+hqVLu+WKIVgMLsSmSNXgwqZX40QhXierpT
   688  1RJMYXfyLCTEjuZetCHFPYY8yKT/jvpJl4NMp5GDECTPJ7VU/QYcPdO2DF7jQMJd
   689  80ZyhByxsJDxWarrAbKIbSjteVIAAu3DcjlIDgaTfpIhJL6LVFOLUVtr8HIGQNqx
   690  TV7RjDlxyto=
   691  -----END CERTIFICATE-----`
   692  
   693  const testMLDSA44KeyPEM = `
   694  -----BEGIN TESTING KEY-----
   695  MDQCAQAwCwYJYIZIAWUDBAMRBCKAIM8a1fxYCblHvzo3x9uavfu/+Y7OUb5lYoJL
   696  qnbwgtTV
   697  -----END TESTING KEY-----`
   698  
   699  const testMLDSA65CertPEM = `
   700  -----BEGIN CERTIFICATE-----
   701  MIIJpDCCCIygAwIBAgIBETANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   702  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFDESMBAGA1UEAxMJTUwt
   703  RFNBLTY1MIIHsjALBglghkgBZQMEAxIDggehAOGVZe5tn4Jecm7zdXLPtiqApCVx
   704  Q9Z41AQlgr3PBPnCrepnRCiZgzrpQxmEi86w3jFJhoOsnT2kg7eImvp5uhOtdlbg
   705  TEMve7/eFyPcTGJE8AV9TSO37ZPVOxJZ17NhDdLYH41wi2df67dluo+7HzyNO3Yp
   706  CiOX2i0ndzZNDw9Wz9fD4LtX4MRtjB03N53g1XGAzsR/g05DAL3fHwOc4PmsMJxh
   707  IXOmeEl3/T5Lqci1mFIernttwukHsX1LSIGsIC8Emv993urM3hb8nFrNaR9yGEjF
   708  9J7WjmaLrKmqk8kdbyn2vVvaBx1cZeoH+8QBGHaDoEeVITqLSZYhGgLAeFX6Ijwz
   709  prdo/KBfZHrUhoB8LRR3Rr1WgWkZODDRVjJ3rSFljZxs/rh0+MTjNEtGrxn7U/3y
   710  4NVxvafXsEZM3v3uxmzIm1+qxmT3yV0+99uKVTQPI+O5p6/p+4oIlYaAOqscqi+c
   711  NuuAhuuSWyKjmX4VkLd3T8hVe7AKyTebYaI9D48CGInuxBu6hgprMTOcTFDtMJq4
   712  8ojHHEdO0PCTP7kMqvZA0H+YM4hcsP7xAQahBnRU5hAVAFWWP3p2XhjhmIrIoMFp
   713  xB9dMYCKL/2pV49RswuDmUSeEqd/EEgWgoEdRQHqsqPPGooR/s5jE1VsnL0VXcLI
   714  qIhis1ENmw5wQxRQQpAoWlUMFAqytMzSnUHAkkSwzuyzDP18qJR404RMwRTykCns
   715  ZfIl9JdsoDxBIQoCGSY4YaAHEp+tTGqdtNzOeXRULufCpXyl8x9EUzTOMpT9FOeZ
   716  kE9XRsZYK57r0iEgeS7SKJH98bA6tWGWTnwuNDgKfWaN7btqH++Waca/ywz0deDd
   717  YA8/90LRwVyDK0e1Fhs02NbwfvvaZ6I+f6opWEcMqhDDdZO9YP11WboncA5eq8dl
   718  VBjpauNVVklwY9wDm4ZU4wIB8JfGiAbbmzEv1dO+0+Q4hzNgrc0fcfUk3dowtNqu
   719  oStphP2C6sZuZJ3g6JOxgAaZsQ0TCqxPMH1ogsTk5fWZzVe27Gy6R65y/ugrqbhN
   720  MLrQilABFjX9nmOf0OB+p+OdH+gN3rzQfRol9JYOBLA0y68JAUg2ps0ZHZP9rPuA
   721  qX1D26BA9Z7hUx6n2tzY7i202fR0cqtC+/rl+FOv6Rq9NMYTjsXyc2fIW3AE96kO
   722  zM92JEBPMIalUPpwaQ4tvuVsd9LOJucw6F/xpCU98dZuaECrw0qx9s1gE4TDCNvx
   723  Jbo3JC8qJeJ1LK7rQ9sNO2DInmSzpcVgK/BUzi+3kEz2PrWm4EPJUs0KATxmOnA0
   724  /DFS/JQt14GwPdaekCNg0B4xJUDTRr1tffvrIQDweThMM12EhoD7h+jK3QtzfN3/
   725  ksOiTxPv4nvsbhUo/IqBiCZ/Ws2L+yG04l4mirDIKMoq+/TssPfrAg9G0/BnMpVX
   726  +XCEXl+VpSfKyxxJGV2dHziqCHWfQGOm/lHT/kZA1nh0TofFKPxkPVAFS12LIDVL
   727  qsewRW2+G09tUSx/IHQBTsoV91B5AlJKEucnLWvhLbbVJPNszmpmL9AAJJp5wz2a
   728  rBSFlQRiZ2cQPHqhAWoU47e+uWa7pVCzOcVuIR3lh/Lz/lIFp/Omp64tVpUrQbkT
   729  xf4hOXeUGb6uL7r7au4LFovP112gupjxrgMdf8ypI452KpbHR+n7FSRxzzWPKBev
   730  MuqPgdGiRt3FEmn5KLgOfidBbitW2L3Yaqgq/kXhjDN/gq4p8l7rG8OLe6ajJYUI
   731  7POctNAbQN3fPJK5Gk2Y8W2cfKzaVy+6Xl820SH1IA/xpzfNLDjo4XPZQH30DgG+
   732  duPWXRu1KMOHDh5q8tCi34DTd7dseWkNSiJRC/Nq6zonX0fR8wPdHt6Q1CYwi/Vy
   733  zsQw0wYOEq1rB+El/lQwLbDuMEf/cKvlFZtyvE39lO8awRtyG7cxHudqSKLoK8i5
   734  i5EgI7cYcy861z9tY/mgCG1SiGBKSDhBWoPOozt3Jx6KsMcof5XSgDXiy2kp8a3G
   735  ykKPLazQX8raqV2tczqWvVLEDILricdOrrjP4PTPULM9+kBbLYSII3wHU++Aek68
   736  N9CvRjqdUs/lWN107ix+QYPgCoScM4hyEchSOAV7Fjp4Bb0fTY4WbA4e6V6HaNei
   737  H7yFtV8XspSh/TeB3BfoRLZtbxv06NbtrJGQ/GY+u9G1KfDLpHfdP1IP7u7u9FsL
   738  23qPIQy5vKwtyZ4XuzLBH7OocuRkcgDLpOBV5SZbcXCpAecGL2uCn2kYcSE1nVSq
   739  tAlPK11nM78dfyN72jfGKTwNxdN0kGEr84Wi/Fm2r7VERoCVEU/jkaW96+XUlUwh
   740  fgjgXD7/aDhWxjY8Bm1nb5u4M3QT8u8Bm7HSSBazyTAvrg71SMnwCNANlssyKLY1
   741  EmNEXwXv0wc4yrJzrZezz3ptqhrrKvoVL9/xPFKj9tCfwOx+RvUpFDqOINb+0chd
   742  Ih/ruuUysodl63l4xgPLTprs6XGgTi8jc07PNtB64x9B90FT/9fDAdgkKa8KhADu
   743  OkvnRWLRwTULm2W548rm+4sGTUKE3t0NkdQfGlFseQUTFgZCt4I4+eZOGKtMokz5
   744  iY7MQTHWi1W3MBl0o3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYB
   745  BQUHAwEwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSb17MMoVnLnMzcgzJ/K/kw
   746  f/dipTAeBgNVHREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqGSIb3DQEB
   747  CwUAA4IBAQCiMIKwdVWcLU8N6TQhCmfLeUMpEXj0OwhASd+ywHIKl10BO9mV3myj
   748  pIxccLeCLd+Enb8geiq4dORB6/lr+tx+HVnOqxTRxqUVEs4E7vNbLZOt4IWsyvt3
   749  WbQ6CpMmdm6xdCu78v6hpim1ja8o07JROs9oLmeg0RXybaKjhvMuJOC7usk7o0wK
   750  hwBObotMTW6OU0ky0eeYE+lOpY56Woe73INpN8o1l9epWTR2/Qrzr5TkbxK6p4Iy
   751  IlAgvcTVEweUZ8C7ug/GxVC79Trhw9MLthz/aGkS2RgF7d97rIzJRguzwThzvO7A
   752  vnMs873bjTTgS1lsz5g3MdhdthkClkRc
   753  -----END CERTIFICATE-----`
   754  
   755  const testMLDSA65KeyPEM = `
   756  -----BEGIN TESTING KEY-----
   757  MDQCAQAwCwYJYIZIAWUDBAMSBCKAIAWnF0iC4QjtrRkfxwmmacv+Zz2FF5IyXH/m
   758  Qe9bIgL8
   759  -----END TESTING KEY-----`
   760  
   761  const testMLDSA87CertPEM = `
   762  -----BEGIN CERTIFICATE-----
   763  MIIMJDCCCwygAwIBAgIBEjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
   764  MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFDESMBAGA1UEAxMJTUwt
   765  RFNBLTg3MIIKMjALBglghkgBZQMEAxMDggohADNDJo2IYKJWDZ2XOsF0gVMAgYA7
   766  y16SIt53YDZZNQh4AR6kgkXbwuR+Gf8D4q1SJB14QoRCRynOOW6/2kznbAVo8EUH
   767  sDGnuZ1U/j6GdME2rSVI08DveQXmdEG+dbsRHDhenaH5VhAgZXEkxI5Rm0UtBqOa
   768  mGc6lekEDEnxIJBR+DO/tu04WEUaZ9KtOmnmOkr2igyFUBCMRVpHLqaoO+ls4qyc
   769  NgnX0NMdIc8fFUpmuqZ2A3aMraaixPLjSOjk69+7Psi6Bfj6IbWyd4xJYPPWhlIk
   770  s1yaHQmsZpxmgxGA+m1cezqGg1M49xPp30cav34zT+8kpZUyXRc5Rj75YKEP6PXT
   771  SwhGSDTeat2plbQmb090Id+GaUwulqAVSLDFa5x/Rl/STi7PUFSeAk19mpkfO3zh
   772  ar8NZtiL8v4+i0Ipq66rqcjiGEkG0iw4ZAscMQIxse+mUH+qdf4nA9owYTISleWP
   773  GhYm4TDBX6tEZAwgTsrQw0LxVpxe0eboL3b9a8GpCf01HqsnSsWmLHw+44bZfOUd
   774  IZk+1w03GgbTHiYuGRSPV6MWY/KfuvNLix5Hj73Fg0MWG5I6ioTVIv2ZTbHX0/HP
   775  iKwG646hdVEb/pU/tUbqu0hwk8C95mHnBcWWYT+wbeRJzT1xVMEIlesRcVVO5TsL
   776  8xGJPfS1GwkwCqANIW7N7BZYKchl7aD9dmDPCwRn5w7ajTdv4XTuB8dJ8AKdeNWf
   777  5Mbm+vsYTwiEFimXVpouU19KfaRIpvMymhpkjhJLtJLzVouFIM6c1FvjThXq5Gug
   778  l7RWbwalxB+3eHou7679CLwmNa7GChsPJbgM100F2Ahb757sdHHhRE+vfQBcK7FX
   779  0MBpXe0Cq60rWDqAYD0nODFZSbyZ52Uc35hmmaL5WaeRAYrbHVQDXVvgl2vySR23
   780  KLgOEytr8okwM4/S9p5EpArFhH6u1iRS2Ds9tDWpj+XzxIwlCTFoDHSDeH0cXtAU
   781  oq3KwlI2m4w/quEQTT1yS++uRRzdvkm+bq2lTvaO74xB3Rn5+BPmEj5PxbzWs4im
   782  SqwW+ekWH6o+MU5BAOfDtLnMeV9U1g58CTQFZz6YgJqQz/EjrnzBjy0PqQUlxNC3
   783  qTBhtiRUf+bW3PpQewfHBMRz7CVEC8frJVlBqlvpAlXFxTsO/fdYqagJS7MWaTgF
   784  5wP7KillmGArmfxk9wwX6JPUClEEjdFgkZO6/QJ9VrknKnvcgf1QgAvQCOkvqXc6
   785  rGenDM48GG2TOpmtEE21bTkEyEi6KQb6/iDdM6BYgJiJYjsL6/pgUeyJipo8eOXj
   786  YBiepNgR1GKbY1mOMfu9d6lIG0WhenJiZRNcRYLbRqOIUFtHuv3l45GL17+X+DzX
   787  Pp6ncJpR3iW0qF+ifrW4uW3xi0HRJorl6yhHK/+7V0LLAX6kDDNzucNIC6YTnEZV
   788  Ou12If0eFnYr4UZ8h35pahFHqyxqjFrnZidU4HO3wo0fdCclUuZAwTRN8gXoNjga
   789  6S9ZY9KCTE1X7RPY9hWa+Ef/9KXgkEHuF42fRhDFP5pOlmR9N4iCiWDoWeR/mUcg
   790  ASgYZXWu9/17BU1/suWmcd01u17eJzc7poBseN38kjZ8shiZXQ2raxxLAM/zABpY
   791  kKkduGKW3TSQ04ii/LTgDyFs/bSO1biPUbzatvOPKl6GPWx+nqDyFigSHBDYwmMw
   792  hI9HHPrNMMFf+zhQ2wkQtpP5QG9j68QuuhT7i/pH/tE8EQ/XBiGreBSTyrmvR7uU
   793  siZjq7ydbTNRhU7/s5VKcT9cFb6nkb2TiwR6TZ038kS4Z7vVglZeafcEql594pZa
   794  0Ro6ncQ4HkSaf8NojDUwSAenREKB1cpEldn0PHsJv49iVLhGrMaEI6nXTLb4MJiy
   795  Skh+dcb2q/PsETrrwequ3FmYInvbSWmjtz46hGBp9cVsiJMwCaCdH6j3xZ1BtbE7
   796  IVV+q/POuOehj4q0O6NMfSPTdb6hmmfpsTwyadLc6r1gazeUl4mg0NknmkgDcML7
   797  kIp/MFeFEvWLUCgJAwNrGGl4Yi25bn0nKsjM98/v7DtffaylknWy7ItRcUcB5WZE
   798  uPPQ4eaxFWp0ogWacpoEC4a1LJMCIIg1nF5negDr07jqfTURaM7WbMw0/lP5pEY6
   799  U4pxaDD1SU8FgWFoH3tWYUP63uhMCBBEQoGBnRJkjRiI4Y/kVHBmookp6rd+rLw1
   800  dLuWZOJ7/MdoTR62p/IGJQ8a7BSF1nGhzFfkeO/k+Qixt4JT/sIJeMbnXYv467Er
   801  hTD30at6Kz6aUyB0h8xF4y1KB9t1O+zRbbf8OGFT9pwsE20RfWHGkvFfjIVbDXsI
   802  nbIQaD5zc7PlqlZcagL2785WsckeNgNBs42tVgNTgWW9y7yCmChM/VCi7dIONs2E
   803  L8Bn0t3rL0bLEGZk74i3/r/PWItKyH0w5dnxfTWtcX72Xm9ZgUvSr0HvO6sohLHI
   804  0fmSqW5LoR1qMjQc3/Wf7H5uG4TXTnMhA7Fx5vOlGSDf2/plXqTnle8WBHJX6Fi0
   805  V5Xh8ndk2eitEzgkNzY5Evzbgncx1n1tgw4ijDEMCG0E73YhdtDkZLRODULWCk8T
   806  00K2HUku9CWtjvd40OFI6rsPVQ5Sgs9oeUYhWs7+5L2ehR9ItCBj2cTkzKY/a2Iq
   807  x0kSB3kYOYSqzauYwkT2zPSXfqUh02/BflCAoWgZ/2SOaEL4FvFs+S88kCfLpJCr
   808  2jrenLyzOq1nvrZjCqx3feHSszHBM8ASF87k/o62LscNbw1+kC6Pobmuhg5CU8cp
   809  Zb3sKcrj9WDgrtGJDZROtqrcizE6n/IBWsgKkMYpuVaq4kuQr73apWEoQwmaH2NG
   810  /VXTUcEHCOMcgMRZZn1M7k+SodJI3051H/VslfVknVMvR/eQjQ7DjbOvFBDmcxMV
   811  W9as+qMy/tl/WvPHwHTMPTm4nG1y4uD/HOClgR0dkNeATmIqhvgExoVfGnpSFU+2
   812  uv91h8q6RpQHNFvTSlY+6tNvgOxnDY4QZ2zQNW6iYX2C+siLtznYp/y5tjQb/dt4
   813  +/c7ncazsdKkRYORECdJwFWHQToLJaJlIAXJkzWtDN1q7OOj34dRsMoEmpB195Zi
   814  u+fYrBwCUzvH+pbqoTwLcwIaXeLKDMlVme3uActjB1sg4onoHq4bW0vK0PQr2II+
   815  XZuQyk+K/SI5UXQcXtWQmjWABm28ADIGL4EzL43/6xzMJGhXsq0uSEqq4nLbW+7e
   816  468fDtAVZGUclQ/eOEgTHYMDmCyFWER0N7jYIMVZRKtz4TuKdkH2kpnuYvuZLMZi
   817  Jh94oU+33PKy7Izqb7BGgSvBG6nnUSGBMa2U5yN7qit6r3xDk+EJ9FgEtGro+k3H
   818  IxE3nQr0i/7tk4h7FdPeImKbA58wocLd+GTKQYe0hljoAs65EkEEJF90qoUYixKy
   819  XK5ySqwSIIwlxi4ofBLeUnW4UFDLr9ZSdir1X6N2MHQwDgYDVR0PAQH/BAQDAgeA
   820  MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU
   821  m9ezDKFZy5zM3IMyfyv5MH/3YqUwHgYDVR0RBBcwFYITdGVzdC5nb2xhbmcuZXhh
   822  bXBsZTANBgkqhkiG9w0BAQsFAAOCAQEAPF55daMQB3tRNKFDJY9YYubnSDdQdafI
   823  yeT1MJU0JiK5ZIqO0qck7O9Nnf1/HbXw/cFcQIrYTq9vOLo2wYVWpEoUrNkaibuO
   824  AJhhIlLHcYb/8nM39xql01I6T9DoL7x5pzVXGApiwpHNLHZCtxuRJgDqgBERwIA2
   825  iFhPbxQOENE0asG3ueZhpsdE/8zmdsR5h5EmZn9rQkemiuIJcMleEKJQ5ZUhRm7H
   826  Pzun+FY2+KpV9UZWdOktvxn12mAVCzuNv4LIOMeWeSXnDub8jyw9y6AM2olQ3GTy
   827  R30VUVQmRe3GcM4sepbY7+P/L2YwnZLKXQU+lrZcsvmNPGGF6X7snA==
   828  -----END CERTIFICATE-----`
   829  
   830  const testMLDSA87KeyPEM = `
   831  -----BEGIN TESTING KEY-----
   832  MDQCAQAwCwYJYIZIAWUDBAMTBCKAIMibSRsCWz+t11YGH79759TbujcY4yDPZTU3
   833  vhOsKldo
   834  -----END TESTING KEY-----`
   835  
   836  const testClientMLDSA44CertPEM = `
   837  -----BEGIN CERTIFICATE-----
   838  MIIHNjCCBh6gAwIBAgIBEzANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   839  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB8xHTAbBgNV
   840  BAMTFGNsaWVudEF1dGggTUwtRFNBLTQ0MIIFMjALBglghkgBZQMEAxEDggUhAAQO
   841  szjPBtIBR5XC0TC4wkz7jx+Wg8YAPq/lDJyVgshiYMBH7bjLWyroAHPLQ2vd94au
   842  4afTahdTy3AfttG0mG8n9QUwFuSwmVJQlIYvMSD1lsmhj3YK/lUExuO5SFgtM4uH
   843  L75TbfN8ay2tgoOtRLasLlggrFQgeYhxxse3/0KKez+OFq/lpRmEk1iSdHsdVCR/
   844  ieL2U40GZhikuBm3AZMORs86p2cp/l6Zc4tGeNNUDN+QkA+sXAKvbSfXW9ahsRio
   845  wgNe2BUN5vmB13weBU0isuRj7Dx01ayytM68xhu+tLUfhH+RKGc+c4rAD1bEyFN7
   846  +7NVfN9wVNucNqXxD132Tp8yR8+E/Ca2+QEw+dCOB5YFaXR0fEb0iJmJAiSREtBL
   847  GXnptHHmtWeX+WgnlVMtKq7mZUETqM9j19WUDe2FTH3jPRPE81umWZ84EyjWVRNR
   848  K7o2lx7iT6fdVvdi61IUGYK2AYkGqmJ6h60mWEOYO7/iXup6H/hyoWcKb3a+vejh
   849  VQo8F90vWz/S1hsDSbOMOXqNxL3APFx0VJk0nmeQmGfAvz34MHflVRbMLg2LQJxO
   850  CuBKc9Azk6BsmiD0oV/hG4B8NM3ozht5Wm8MlK9t5eMymVpo1Ra80TSM7aRRfI9f
   851  iv8uhZXDmjCuRAp3Pauu2iI8qm/sAvXdzSADRg8sY0iRk85vySs4e2P+J/iVRlck
   852  /A1MywZvZ50wha8y+PM74haJYfTch3a5lCdWZ439qy9oTkmGBiEWdgR8rEWCTbT6
   853  404rXQ1voueJZ/sMKc5MkDqRexxLtJOqYEhz2HZn2YmNKSIEPTo3Ae5hZqcdFbuu
   854  qr5k0Xx+znqlIomY8s6Tw3mv7f2CWCszuTLJNhe7RaPpFTky+jHh+7K1LydUTRZ7
   855  2o7KUsE9Jx5SdDV21nYomuQw2wp59UG0E/hZdInELcRhHJfARtyqwDmHM3Pzd8Cw
   856  69BHWkSgv66LopDkutTky/QVbl+znH+ANw0IfQAmBPqvGRy34zBoqPAv+u3GfAy2
   857  5r58hBJKvMQ+JH3YeRzAPYNfkWZqEs0pKdCJF+0YJ6B71Ev1Bpo7gyGxTAqbSDwq
   858  uZ2L/xeYuIrOof3jClwN/7qu6k/eBfWiNruhgPgjfptAVqoccaLmkKI3d8j4mR6p
   859  w6znp65gONFia8J9m5iFAn1VBShn+xLloTg9HysXKV8bwYXnfws9zolppX3QKKgN
   860  4WxU4ItCPCfvHqItMKZGhJ9pOnXynwI3qE0wcHvZZWRCiCqnFLNt8Sxjh7NIBBL0
   861  fBB3DIZ1v+vbSBXYTOd1vE9D49PG0CVwjTrVz/+5OH1ydC3ojuEkJSpse4kYwmrL
   862  +y9hxFDwpHqXbj7L7kmiZLLV5MuzzfOln/YlOOamqgAXk6prJZgCbM5msi1GjKhq
   863  UikZOC7gdc9b6g1GXO8eFVD2rBa87re9xTUIHmC5YLnh25Y9yDSkKJOYLLUhS/28
   864  fROpE28Ft+YBBCy0tdy0X5hsACtuprp26tVLMX0c6PzhNb+JdcbojGvczKtb1JOe
   865  GsFh6NuzMj/eSOaGrtINwM6I68WPkS4ew+ARG98jX5hqIfWY6yarZxoRXgffwGZd
   866  sunu5ff79R5n4SjkZIT5AyViuk9f7S1D2mNWQOYGh6gOY4q7c2W7t26vHSKLEGr+
   867  7RWYGmpo7vEmNkRBuOZlKokj9+NjzFv4Ie40+sPor4XWXzW3LaVhhScNrWY/fFyW
   868  SRikpTaDn8nzunLe6mujdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
   869  BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFPycwUBCXOb+Hi4uW8O4
   870  hI/tkjPoMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwDQYJKoZIhvcN
   871  AQELBQADggEBAEnRQHziM+nAYMlN5f+I+UxyGrD4PKl/tXvF1W96ssc0E+6+pSZX
   872  xaFIdNv+wxpFvp9Yy+ztodgtw/4EnsRHIJD8wy8iE0Y+8uOF9i2kUWj4b1HQyE/W
   873  lF7vD+iEM6zGtuzIEVDBRZVAEfL7cu3S/UCdT91MAfgUVdgnA6a6d7O83cM6QEzY
   874  Ozno/pp2jhPnRlC3GvCZUEkCIu12nwhoFkj1R3DsIJxG7k/VzNfL8+VPTInY/Oap
   875  V8vzHnTrQQh0UWGfaQ8qf32SC7V8YjPR6gAQUSMSaSeoTeupHN5hyvqeaAR0OLE2
   876  TaNnHL/Q/SI2A5QGDWd9uuzK7J1CrOCeGY4=
   877  -----END CERTIFICATE-----`
   878  
   879  const testClientMLDSA44KeyPEM = `
   880  -----BEGIN TESTING KEY-----
   881  MDQCAQAwCwYJYIZIAWUDBAMRBCKAII5EEAujaF75iFHbh/5upbESvZaSqPcJEeCf
   882  XmfBcXF+
   883  -----END TESTING KEY-----`
   884  
   885  const testClientMLDSA65CertPEM = `
   886  -----BEGIN CERTIFICATE-----
   887  MIIJtjCCCJ6gAwIBAgIBFDANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   888  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB8xHTAbBgNV
   889  BAMTFGNsaWVudEF1dGggTUwtRFNBLTY1MIIHsjALBglghkgBZQMEAxIDggehAC5U
   890  /y3E0NQ8BdpqJomynspwH09+61IHNA9D4vlhRiYHDMAFzOKTweZC74GKbjf7KL7I
   891  MTmnG+2nf/U8LgwRxMiavFpHV94yT3Hv+3tF5hH5dMgEBc5wAc4SYM+ebtQ3eGQi
   892  AbMhz0iKwppEYd0kzC8mDZoSZyEQrFj4FrUfPECL6d9467S99TSmOlXC7RQpN5iQ
   893  PbBLL1k73klyzEYFnBdCasE9ElryoRJFhlVfvyItMqvHfIvCdcs7DUo+dKCoGPFT
   894  DLsBvVmQPDl4FlQxZXN8u3e00LBkw8ux8Ffo8Vj9mRhuO1v/NazxHCxeu8KDNOPM
   895  xyC7DUiIx+YLhniHpCa8HdfOj8NHtsol3s4Al26hLaV8aDpLd3Qcq+4OcIORfxN0
   896  yBRwCL1kcvYJvMF7Xn+cWWsmyko6zKwOCkAGzs983haZ5gE2PkBRYpNAGJCsUVvF
   897  bR37krACaOnQNQUHqH60yHWBbsnbBvEeQRxb/Xs7XnUYli+7CwcT+xlEoPpgTqTU
   898  qEZN/SYYi1FE86/IOuFG0TbpejzlhbJgh/HfzXrWX4zeBxbCqaHht+rIhIKlLh6o
   899  lo4hU0gMl82VEcJuBBLbAOamtjt7Vx2A1iqPhV4j+/7JlWCJ54lCWDG+W0MRjiYp
   900  jGDA5fqZ2hP2nUn1eMjMbwSwf3BwHTG8ULM4m+S4pw26SFlXM4kHiz6NSOWauXkh
   901  A31cT1WTogGn8d9J2deBKilU99FnsR+nnftofcF43zvx1rgcfUakY3439G/Mtyrl
   902  cRu9U/47PAvoq1hiAz2agoJBo5BjReJlcKbf8+nAfSQIeg56q9902u74HB2JqTY3
   903  Nzo2mDVy/y6y6jJ4du2u1YzARRXeDz4G13FSE2vn996ZuGCKt6BQTHOYJbP+HB+m
   904  tbCYU0cp8fff2Q0aFGC/QF2j6e5+F1Y9ILbZ8nE20tJ0Fra6/p/UwL6bLvExvMhh
   905  +NGUXeTg0YJvfOwDMSOF3H4lWpun4KCMhKszO2S8gxy17JZwGrT9zGDVsWi7fXWs
   906  dev3e8ChLNhKYyDSf0EmcTaFVsAykXNQVmdh+MaEmOcxAdylbppFt8WjaTycZBC6
   907  2mVM9vfdX75DGJX1isp6ge4t4cxrbk0rvvZfwh+m/bUR8NC3tF0WvwiB54gw8Rd2
   908  7lUXp2YEZbEHcaHC7L8jFw0T7L9QLV72hte6S2qlZD3bClCTgIXmsbzG/KHz4OPW
   909  viuFMmacATEDYVIqlbpKkMNb3QYXOfYdrWV+9boPivXvYC6/5klD9jYrXj8FollP
   910  4O5rwEaRuNwf8nqKu4k+lk4P2eatmfosb0pxEoYHsbDDdY2MWfIlnCICC+uD+LAI
   911  MJNNAQsQlJ87OMqQ6maKZZCtX/Rp6A4blnBPAqLP+q0kIpBaZWGgcg8gAViYilAj
   912  O8V4feU24KPyMoKjXKJCw0yqIueNtcvOTSe2hg8KVLI5QpFpo7168p3FsCv36iZY
   913  i6PijvneHiDU/JpKats90KktMA72HXaP6h4T+lYYFbQxWL2/Aj/Sd3mPSj25LJwm
   914  4i9aRd4kqacxq88FbCPNXKOgchMlA8eQLirYGrnTBefAgS9x1gaO8GTZ3qCOmLmq
   915  6fwTzOXvZaSQc4CBxRhlED/6aGb51oxOVAig6ooDH60LGuNMg7PIqWNua4NzR1rp
   916  avgEhIAlI7DtK5x6QRmKjtVhvZ9VvwMF/063lkSLDUnq/RTut5Xsg3i15mlluGZA
   917  d1qc/fgBoJmGY6lwPjKjNymR74095Qhg2VQqF3ApmP8xOumkIimkHmo5lMB9HdPH
   918  G4mNKDFLFELMu4BqiRDRa75jct+g8tt/PiBdVPxfO0LVBbZisSI0kLLy+yCnWDIa
   919  gk5Zz6EthOwxKEYzhivm7QC3o9CR3h7f3vqcle9YbphFdwFQkyqWmqSNaNcuAt/j
   920  VCFvVZQ44DWfQtNMILUX0DSRVzqqDnmkc0g94ogqYQGGRtKiUtNVLCfnR40OBQQ/
   921  Ubybo/8GRh6YC0mbBJZ+cB50xoOPJ0p5o9xbH3tE9yyavu7c8tsSJRiuyOsuYYr3
   922  mJDrZ4/cQt+2Yp16If2i1CFnYd2xRXHvO5jiXy5IE3J3DGPxz4ME8oxYgmHLVb+J
   923  cRbBLYVzo1nBiOzyh3tp4h4iZrge5Agzd6DSzjTnQvCmORdNGIv/672/FPjwySwW
   924  PnwmIVgAXhToPfTLX7A10sU34n2/Lqt4S2/Z3l+WG0c+wZPPA+RkAZH93rSiCIr+
   925  kedS4fc6DsYGAxpFkNgkp9fXzmqJS8VB3NaFzsvsKJazsuBlIn48FwPd3YOb5BND
   926  0xT0OhxhOZ3HbdaYPk/tcadDjN4cDwPOWsrujaUkuOE22G+SAQeql+k57/5MBERi
   927  6sJv3UyqnQgcMAgLyvf5IPYrnA4EIHJQHLks19Auwl7LElEPblCOFJD9eONT9XrJ
   928  gBFK2B2tr/6zlIpulYuJpsHw7saoT9NIoTJfqkuFo7bTMEITpnl3Odwt8E/5G7tE
   929  QB4wPU/pZ3brURvXiAouPBiM62DmxQEWB1KLbMEqrJEy66q75lZDURJu1Od12adu
   930  x8RKPXNY9zZyStsRilOw8J9/NYDtM2TlClzFQQnno3YwdDAOBgNVHQ8BAf8EBAMC
   931  B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAW
   932  gBT8nMFAQlzm/h4uLlvDuISP7ZIz6DAeBgNVHREEFzAVghN0ZXN0LmdvbGFuZy5l
   933  eGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQCz+X31FirBQYG+buX6wHpgSP1y1iU/
   934  WEpiBcSgqhBTMWGzVHtj5D/JTWzeqmLsxg9HkbZpt+QJ0m41pEB5iFDDGO4G5RgC
   935  EWVFU0KreD44qVDFIjLDm8Z6FaaLokOKx8EisyHNxerakrtVfNSddl1W6trR8Hp7
   936  L0kFBL6Uq5jf5bwEMb2Xv8Hnq29TP1MmgzYJDCuLLDwSU7UXp8e1qPCJjcNpX/99
   937  0657zFRSY/3fz2EvKetv1a69jVCQXTO4QlS6CEyQBvck+ukG4pSkZ4WcIQPaWeZm
   938  ITlS2V1UkABz47ZnEZ5duNNekk0WUIjbYf8aa1f3hhDTswAQvX9+tofl
   939  -----END CERTIFICATE-----`
   940  
   941  const testClientMLDSA65KeyPEM = `
   942  -----BEGIN TESTING KEY-----
   943  MDQCAQAwCwYJYIZIAWUDBAMSBCKAIHc0sLE9IOj0qS/LdWJjcGOX4ZNAhipBMj/m
   944  owTO9Efi
   945  -----END TESTING KEY-----`
   946  
   947  const testClientMLDSA87CertPEM = `
   948  -----BEGIN CERTIFICATE-----
   949  MIIMNjCCCx6gAwIBAgIBFTANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
   950  bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB8xHTAbBgNV
   951  BAMTFGNsaWVudEF1dGggTUwtRFNBLTg3MIIKMjALBglghkgBZQMEAxMDggohAKvy
   952  ja8rxnkyD0aXQKQn1uxTMO12chsx7CPppmhHQ1AOl5g3xh338p80AZ/3bAMyvunR
   953  jEYHD7OVvoJUzoi7EGWG6dm7DpghezEct1l98cETtrUp6m/B3XUQTwhKu5nWm8Y+
   954  neF5NWzSo2lUqCWDVbqToYZX+TLrNTqMnOcDOuHRclEIxX9drcdGzHpOZs2ISGv/
   955  gcLbqKVsWp6zwLfKUcgpnrNr64HW9JHSVGZXnAbsOnqO4ROwht6gzwQZ+i7Dac1K
   956  E0UvlNBukhL8eO7ZWJ32MdghpGb6o4J87zRVUE2aJ0o4nkjRDo3X1t1uYEuhxEfm
   957  QthJDM1vixIyVAEqWw1XApVlLyKOyJyN2eSVSx5Smi2h24sIEeOJPh6UvGPjBc2o
   958  spUNSCUqJI9JSMxqUk71okQiicAXsenad2TJcx9irQoC/5FLkhlx5cmO7QMmSTZN
   959  JHgNUWJq9TmCqNSMDi1oEYis5hPRb4RbjOxSKIzj2Bev6TXEDEMuFSEdrbIAweYa
   960  Mwm/Usq6VT7bG5faPgXl+aoa/qq/XOYRvC/4PdfGDpj275M29l+VMEcveEuYXc64
   961  RYON+JHmlD77l09rdcbITDHqgvjMsBrvmU/m9428Xf7x+5vbG4vNPkl2OjBbd3jg
   962  v4OJ94HxRL/REH6hD2NMyB1ZJCDlhLCg58v3ayop3nk/WSSgQ5wZb/EXHARbeT9V
   963  5Giu/14vDuHqw7sGoOus7KmKblobZFupbkHGdgdll7wvweO/lR/ESzOWuNS7498Z
   964  iEWZsGa8z6yqx/hjMZr8A5iNlwrVb4YFxMPvCC1GauQQeGy4PGX4ByZLoyqez9sD
   965  nS5qKgIzepFoNyBnSrwKxYARd2JbgBaHYYbCjnZ7W4FMeKuINf9ZgivAq9gmO5Lk
   966  zbQ8LzcgWls8W/yJJg/EIcDld05Qfz+sNJIfr8p8/Ps8KRyALkPwCllP/e3xZhVJ
   967  aJUIAhGboJSSj5QSJxg+F1fHHTB2AcGQsUHaesbe/mbPF4bVoCUcOJe6hN7DE8yR
   968  9pMOqv1um6aysur2f9GRO2PNYctiUDaTlO+uvkPN+KAzhssTPlit88OJUgD1NvXk
   969  oN0cdyKsijsijpH7acGXh12x4cwnbUd71T8aH/jAq3KyWJ8/byXAjybNNy3DiOul
   970  wfQt5TgEKjJDAUXVTDpQfJfzTOVXLJ5OFWiuScObBvElCpwydWSYl15v6Ia43nrn
   971  9uEEeLAC5ME4cUxJ4hbbpub8RjpI6rUm9Mmpp4POLJV4EwNcKxjhmBiwTW+WzueO
   972  9qN7vUsKEkq+oMw0insXcCnRodN2GB39BFUoRX1e06aESGZt6Eb5AujIhKIxKaNM
   973  NwtWLsegtMpazOA/0cfw3adwciU9iM/ijDYWVcPSU06NyYbDTTGgNihM5MKW8pJy
   974  DRoeDcST2Y7vgl+h1WnEjiIf4Qr0xsIX63KKt6qtAOoCklPwuzcAyXtCKmz/VgS3
   975  arJc2TMEmtHcWmGUaFat95JlmGBF9b2QFxwZ9oDXlnt252PHvqF+9QMbnrOEq9F0
   976  2y9pEgLjPL+SoNbcVPW8jujRxgtIe2N0hbuo5JHUvUA8P/eh1FqF4Vhpr4aN6wou
   977  vyWL7oexil6C32XWhIA3IPU1V5EiRanwGM+UYMTejtUTat3HZfhGIXe+RHzf3eNK
   978  1l0QAhckvVnidPNFBNBeTQ3MphhjsCzafikzNBOPvhykTOd/QirIVNBNBwZ5CJid
   979  n5RyJcS/Tth/3qZN9ElhJmEPYsXvmISCMASYuYvlgRx8WyHDHh4pk0J0FfIsCBdl
   980  ERjjfXlx9KVIwIT9ELqxOiXrw2WicVb3LkbKr2qrPj13sB3MfbApCNQkhmSgvXna
   981  Fbm2fzFftR7pvFwCv9CdavV//+L7yZdonN3jCYMhJkC34xXD2DLdjsVZcakhcUFJ
   982  ufx0U7XxnTNmYD1xuhVM5+DyJf5eT0+EaoNI1KoQb0qFqvQTwNCvGXKlmz89C3YM
   983  SRJYhciDUgIW15tRo2Pxj+37UbtBI8sOM2hhUitxAUa2hINRtB0ur4T1rVVZwVzH
   984  nvr7vQfUjkj9lebR+9y9SK4kiruMdIna+yAhYo+VM1DOXHTTUXwZuUS40gOGbfSr
   985  0AW+C5yW99SM4oe7ktq2Tlhy3fy5XoUQ3Vci3AYeqiWDI9gdIw9qeXk9gUIHmioJ
   986  EwJX/wK7hduvY811aM64PMJ8cMWHxN07wpkeGHIV3pZGycyLTDac7vhbOks4hrKR
   987  6IRZcMjyNlnijf15eaxk8bSiY1ZDWHrHyHkljAAQpKPtuLyReAR52qyShsgDgLTt
   988  J47PGdeNxRYuhlNUyOUCp1RMrXIFbwhCmwGtn/FceOvwKw0pOH0tyFYcVhheIhk2
   989  1wpyAc9P3TD4NS9mqmqvmiHmkj4DfkRiT2fX9crHGjz4uSNxjhXWdadXBYO2RDAP
   990  ylo1MTPcarAnMTei/jw6iFrcH1elyqGsC9ZWxjs/Ew64fp3QOuOirpL/v46MrkW7
   991  g2FAeRsR6sI9C9qFuXpsfMus4ZG/bJ0qAHMfQ8U9KIKqP6ajSmmKR9PwwCMK31pq
   992  CO73IDMEpCUeEccTsH4dwo/06cMH5lkYg4X3OdeT/DSwv+lIOFakOcIS0vjEJtNk
   993  4O987IW0Inwv7AFziMUGziV6k+U53s1gzBEBWvXTvBbR5k9/YfCH9a0uYxxy5OVl
   994  xcW7528+d31kxKvCuyy5t7v09V583SbOT/IwvZhRhgLYiKbwDMvgOc2zhF1fp/r+
   995  gjfWKLhcZ+Pn9oO44gqbZ56le19Hv+8mLz639LrC5nhpNGnj3WIsoUQFYeCSFlg3
   996  wqItGFqqlLWqNGOz2/DE6TyEduXthurwmDe+qt+FxQvYWYiF7fkY4CgG41NkAmSt
   997  nH6n+6JAPpe2nnniNFP/LR3oTRMDFhcqDc12mN6jzPSzv7KC7sz1U/VSiJstmjv6
   998  xF/ze5EAKpX4eY8fKME7xgxxOiOLap23ksuitDk/mJP1Ao88PxBubIiv395fhclp
   999  8UKZ80EUIgacky1iNzO0LTYZGNSwxtGMZilJpvMJEQcitCPfXdSaIsZHNqo2veKp
  1000  wtepSvat0K4rrDw3HoKeQnA0KS4HyDoEYt5HLx6W2V5I4ajbMRDKJTQifKYnUkxh
  1001  gk2lUXrcy5sI247l8IGt4gw4H4ciNxgVwMzh/vKRaev6xaCfinnRmcHsarRgHVjq
  1002  oZlxDfG9wvajJley4eCWTLhn1CdwIVUOmfbbj743ml+94/UUEIXNFu/Cx34UsS+A
  1003  /PfBZSz//b6IiV0jWmwS27Y1CGtA4XDYNnqwY6Bh4JKnouxluf4+YgSVrw8VsC+7
  1004  WglKFSoM7XM/SJgRo6eab7jusx7UoQzp/TzJoTrYEMwlZTBoDbCT9fIxJYY6nZbd
  1005  8Cyy53BQ4YNlwTK/oxBFq/RZoN/i7wnaeADjx4KWA2SdgweJyn3m676y9uAGo6N2
  1006  MHQwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAwGA1UdEwEB
  1007  /wQCMAAwHwYDVR0jBBgwFoAU/JzBQEJc5v4eLi5bw7iEj+2SM+gwHgYDVR0RBBcw
  1008  FYITdGVzdC5nb2xhbmcuZXhhbXBsZTANBgkqhkiG9w0BAQsFAAOCAQEAbE2q9zdb
  1009  4bacs1K2wRDDF7uyZCLQxKFWtElNeDUeOkRV5OThAY2+EJCXhTQIlh3Qw4GFwjmo
  1010  I/56f/M7OTBYjnp6dvESVdLiAzCzIuOf99bXN7IHljz7vYMNb1Mky7VZLbr1Ac4h
  1011  0t4V2yEAQjdL+smXuUWJPAinLWl137Oida96ORWs7J8MT+AQ7Jzp1umaYJXgO2BM
  1012  OsCC8MMnTLNJZeHAaAjYeaTgYVNU9NuqVceq7ivYJ7nFBdY43mWABhD8MjrpxRnI
  1013  oC2F/+J75B7w0t83pB+4wZWNLc8PGSwp6MCglJ72pPayUSOVlcnef77aQTMDE2MW
  1014  QbYB8toDANSqHg==
  1015  -----END CERTIFICATE-----`
  1016  
  1017  const testClientMLDSA87KeyPEM = `
  1018  -----BEGIN TESTING KEY-----
  1019  MDQCAQAwCwYJYIZIAWUDBAMTBCKAIO0ApFYp+hPgm4FudJgWVsHWUOBP+IVRa1eF
  1020  To3lHU0g
  1021  -----END TESTING KEY-----`
  1022  
  1023  func parseTestCert(certPEM, keyPEM string) Certificate {
  1024  	var cert Certificate
  1025  	block, _ := pem.Decode([]byte(certPEM))
  1026  	if block == nil {
  1027  		panic("failed to parse certificate PEM")
  1028  	}
  1029  	cert.Certificate = [][]byte{block.Bytes}
  1030  	cert.Leaf, _ = x509.ParseCertificate(block.Bytes)
  1031  	if cert.Leaf == nil {
  1032  		panic("failed to parse certificate")
  1033  	}
  1034  	// Don't parse the private key for ML-DSA certificates with FIPS 140-3 module v1.0.0.
  1035  	if cert.Leaf.PublicKeyAlgorithm != x509.UnknownPublicKeyAlgorithm {
  1036  		block, _ = pem.Decode([]byte(keyPEM))
  1037  		if block == nil {
  1038  			panic("failed to parse key PEM")
  1039  		}
  1040  		cert.PrivateKey, _ = x509.ParsePKCS8PrivateKey(block.Bytes)
  1041  		if cert.PrivateKey == nil {
  1042  			panic("failed to parse private key")
  1043  		}
  1044  	}
  1045  	return cert
  1046  }
  1047  
  1048  func newTestCertPool(certPEM string) *x509.CertPool {
  1049  	pool := x509.NewCertPool()
  1050  	if !pool.AppendCertsFromPEM([]byte(certPEM)) {
  1051  		panic("failed to parse certificate for pool")
  1052  	}
  1053  	return pool
  1054  }
  1055  

View as plain text