Source file
src/crypto/tls/certificates_test.go
1
2
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
17 testRootCert = parseTestCert(testRootCertPEM, testRootKeyPEM)
18 testRootKey = testRootCert.PrivateKey.(*rsa.PrivateKey)
19
20
21 testClientRootCert = parseTestCert(testClientRootCertPEM, testClientRootKeyPEM)
22 testClientRootKey = testClientRootCert.PrivateKey.(*rsa.PrivateKey)
23
24
25 testECDSAP256Cert = parseTestCert(testECDSAP256CertPEM, testECDSAP256KeyPEM)
26 testECDSAP256Key = testECDSAP256Cert.PrivateKey.(*ecdsa.PrivateKey)
27
28
29 testRSA2048Cert = parseTestCert(testRSA2048CertPEM, testRSA2048KeyPEM)
30 testRSA2048Key = testRSA2048Cert.PrivateKey.(*rsa.PrivateKey)
31
32
33 testECDSAP384Cert = parseTestCert(testECDSAP384CertPEM, testECDSAP384KeyPEM)
34 testECDSAP384Key = testECDSAP384Cert.PrivateKey.(*ecdsa.PrivateKey)
35
36
37 testECDSAP521Cert = parseTestCert(testECDSAP521CertPEM, testECDSAP521KeyPEM)
38 testECDSAP521Key = testECDSAP521Cert.PrivateKey.(*ecdsa.PrivateKey)
39
40
41 testEd25519Cert = parseTestCert(testEd25519CertPEM, testEd25519KeyPEM)
42 testEd25519Key = testEd25519Cert.PrivateKey.(ed25519.PrivateKey)
43
44
45
46 testRSAPSSCert = parseTestCert(testRSAPSSCertPEM, testRSAPSSKeyPEM)
47 testRSAPSSKey = testRSAPSSCert.PrivateKey.(*rsa.PrivateKey)
48
49
50
51 testRSA1024Cert = parseTestCert(testRSA1024CertPEM, testRSA1024KeyPEM)
52 testRSA1024Key = testRSA1024Cert.PrivateKey.(*rsa.PrivateKey)
53
54
55
56 testRSA512Cert = parseTestCert(testRSA512CertPEM, testRSA512KeyPEM)
57 testRSA512Key = testRSA512Cert.PrivateKey.(*rsa.PrivateKey)
58
59
60 testSNICert = parseTestCert(testSNICertPEM, testSNIKeyPEM)
61 testSNIKey = testSNICert.PrivateKey.(*ecdsa.PrivateKey)
62
63
64 testClientRSA2048Cert = parseTestCert(testClientRSA2048CertPEM, testClientRSA2048KeyPEM)
65 testClientRSA2048Key = testClientRSA2048Cert.PrivateKey.(*rsa.PrivateKey)
66
67
68 testClientECDSAP256Cert = parseTestCert(testClientECDSAP256CertPEM, testClientECDSAP256KeyPEM)
69 testClientECDSAP256Key = testClientECDSAP256Cert.PrivateKey.(*ecdsa.PrivateKey)
70
71
72 testClientEd25519Cert = parseTestCert(testClientEd25519CertPEM, testClientEd25519KeyPEM)
73 testClientEd25519Key = testClientEd25519Cert.PrivateKey.(ed25519.PrivateKey)
74
75
76
77 testClientRSAPSSCert = parseTestCert(testClientRSAPSSCertPEM, testClientRSAPSSKeyPEM)
78 testClientRSAPSSKey = testClientRSAPSSCert.PrivateKey.(*rsa.PrivateKey)
79
80
81 testMLDSA44Cert = parseTestCert(testMLDSA44CertPEM, testMLDSA44KeyPEM)
82 testMLDSA44Key, _ = testMLDSA44Cert.PrivateKey.(*mldsa.PrivateKey)
83
84
85 testMLDSA65Cert = parseTestCert(testMLDSA65CertPEM, testMLDSA65KeyPEM)
86 testMLDSA65Key, _ = testMLDSA65Cert.PrivateKey.(*mldsa.PrivateKey)
87
88
89 testMLDSA87Cert = parseTestCert(testMLDSA87CertPEM, testMLDSA87KeyPEM)
90 testMLDSA87Key, _ = testMLDSA87Cert.PrivateKey.(*mldsa.PrivateKey)
91
92
93 testClientMLDSA44Cert = parseTestCert(testClientMLDSA44CertPEM, testClientMLDSA44KeyPEM)
94 testClientMLDSA44Key, _ = testClientMLDSA44Cert.PrivateKey.(*mldsa.PrivateKey)
95
96
97 testClientMLDSA65Cert = parseTestCert(testClientMLDSA65CertPEM, testClientMLDSA65KeyPEM)
98 testClientMLDSA65Key, _ = testClientMLDSA65Cert.PrivateKey.(*mldsa.PrivateKey)
99
100
101 testClientMLDSA87Cert = parseTestCert(testClientMLDSA87CertPEM, testClientMLDSA87KeyPEM)
102 testClientMLDSA87Key, _ = testClientMLDSA87Cert.PrivateKey.(*mldsa.PrivateKey)
103
104
105 testRootCertPool = newTestCertPool(testRootCertPEM)
106
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 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
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 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
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 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
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 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
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 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
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 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
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
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