Source file
src/crypto/tls/certificates_test.go
1
2
3
4 package tls
5
6 import "crypto/x509"
7
8 var (
9
10 testRootCert = parseTestCert(testRootCertPEM, testRootKeyPEM)
11
12
13 testClientRootCert = parseTestCert(testClientRootCertPEM, testClientRootKeyPEM)
14
15
16 testECDSAP256Cert = parseTestCert(testECDSAP256CertPEM, testECDSAP256KeyPEM)
17
18
19 testRSA2048Cert = parseTestCert(testRSA2048CertPEM, testRSA2048KeyPEM)
20
21
22 testECDSAP384Cert = parseTestCert(testECDSAP384CertPEM, testECDSAP384KeyPEM)
23
24
25 testECDSAP521Cert = parseTestCert(testECDSAP521CertPEM, testECDSAP521KeyPEM)
26
27
28 testEd25519Cert = parseTestCert(testEd25519CertPEM, testEd25519KeyPEM)
29
30
31
32 testRSAPSSCert = parseTestCert(testRSAPSSCertPEM, testRSAPSSKeyPEM)
33
34
35
36 testRSA1024Cert = parseTestCert(testRSA1024CertPEM, testRSA1024KeyPEM)
37
38
39
40 testRSA512Cert = parseTestCert(testRSA512CertPEM, testRSA512KeyPEM)
41
42
43 testSNICert = parseTestCert(testSNICertPEM, testSNIKeyPEM)
44
45
46 testClientRSA2048Cert = parseTestCert(testClientRSA2048CertPEM, testClientRSA2048KeyPEM)
47
48
49 testClientECDSAP256Cert = parseTestCert(testClientECDSAP256CertPEM, testClientECDSAP256KeyPEM)
50
51
52 testClientEd25519Cert = parseTestCert(testClientEd25519CertPEM, testClientEd25519KeyPEM)
53
54
55
56 testClientRSAPSSCert = parseTestCert(testClientRSAPSSCertPEM, testClientRSAPSSKeyPEM)
57
58
59 testRootCertPool = newTestCertPool(testRootCertPEM)
60
61 testClientRootCertPool = newTestCertPool(testClientRootCertPEM)
62 )
63
64 const testRootCertPEM = `
65 -----BEGIN CERTIFICATE-----
66 MIIC2zCCAcOgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
67 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowDzENMAsGA1UEAxMEUm9v
68 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmvg91HhTlfaXcjKwqY
69 G35v928fjA9m4NOeJsH+stqIDoQJeCwimlKwZ0uSmNgABZHhVl4qhcavP0mXBVhG
70 wOAyKkZNYX5CP2Thhw8d0OFJpeP9kxDSFHev0Fa7XUGlBWQk7Zbmad72Agx+Oe6f
71 RUSVt2pmpAIEzRRtQJpqO6cwtXvHH1KA2XKLBK2zLup7V32N3fQC21WjX9dZhOa+
72 Y1fqyF10V+ugHbcLQJxbso0hvnhLMLW3DNrZdoL6NaXUVG7UeweIbZ9z3oITOEVk
73 iEBKGbtvGd58UnFfwnecO30utOp+kaJoYLMme6w/elQ0WV+G+AysJGKFCAWRb13q
74 4HcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgIEMA8GA1UdEwEB/wQFMAMBAf8wHQYD
75 VR0OBBYEFMghBhPWIX5rQ3No+FB3KfrcDBEaMA0GCSqGSIb3DQEBCwUAA4IBAQAs
76 aHAaPhMaHULTTn62b1/dpgxLLge+iVNyCaJmi4ic/XnkSZV3ZsZp8dvoQZPR2vmU
77 BQLr3nqEMqpVvEnsPhAYJoEAYEUNkSMdiT2rKp3eLF/pt03qSfrPjyg+LTnyRMYU
78 zzocbEqDHPH0NvBdQdWBCGqMIYulR02TEKKEqamuYMiFFQq2VaFS06rTIa4jOOwU
79 VRBVcjqzTs3W+TKXEgT7VuGQmW6OndRHG5iQdnlpv2tFBSiNT65IwzxLfLXr7POY
80 Js7Ja+lM2GRWzWSp5RZdCFs/6N4HzF911PrOzuTd6mE/jaGERCKyC+SEcUHo4PFH
81 US9Fl9vXoWO16TbQsw3D
82 -----END CERTIFICATE-----`
83
84 const testRootKeyPEM = `
85 -----BEGIN TESTING KEY-----
86 MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJr4PdR4U5X2l3
87 IysKmBt+b/dvH4wPZuDTnibB/rLaiA6ECXgsIppSsGdLkpjYAAWR4VZeKoXGrz9J
88 lwVYRsDgMipGTWF+Qj9k4YcPHdDhSaXj/ZMQ0hR3r9BWu11BpQVkJO2W5mne9gIM
89 fjnun0VElbdqZqQCBM0UbUCaajunMLV7xx9SgNlyiwStsy7qe1d9jd30AttVo1/X
90 WYTmvmNX6shddFfroB23C0CcW7KNIb54SzC1twza2XaC+jWl1FRu1HsHiG2fc96C
91 EzhFZIhAShm7bxnefFJxX8J3nDt9LrTqfpGiaGCzJnusP3pUNFlfhvgMrCRihQgF
92 kW9d6uB3AgMBAAECggEAAyyjhy6SfrotN0ZS7ZpCSIWrn9CfzDhCzqHdG02OdBkT
93 HWnmvc8XnbiQD6TxiejKLacdzGKf82YbuWVKnL6UV5MCjlO2dp3FUKmqDgdam8kk
94 dsetcmTUFKQsQ8k0KQ3XXWGlaawbu3okwxyTfdl85hzzI5YU+8Emly03CJcmdDWt
95 Yq8VZJnicXZJKhpSNrn9rZGYtY3mRb3SHF4ZYTnQZVfUPoCcEtXUY0NTjHCsLS2G
96 C3C6HpqLrriInHQ7wlazkozpxspVxXMUrRhvqDwNRvO+OjLF1o0uGar1F3WD1Vy6
97 PTw5JoNcxRHJW9uuN7dsuPYdYVy2MNWWQV2ztlSH2QKBgQDySEUE5O1S2oEGI504
98 3ctVYVkUQYwxTImaH7vn+Pul2793pWNboTHu3+2n76gF7/4b5VwWOoeKQ5Ztn4KX
99 omYgsq0Qn58xuPN9r/0oA5bWbx930JblCvmAVjnnJMNvfC1qv4Yoz0on8aoxrClW
100 6WEcjn+EOAusIN5ybnxZztyhDwKBgQDVGtJfAS0D9smvBk34xIovI/SwGM/N/Kse
101 pNNoO8QTMWkXToBGwlOSdmU+ZOwbVxomHpfaPnbKnyZpT3cRZncI3GvVMqX2Fy6S
102 Kkl/pgRqdrL2z2ueGV6sLAKM6zRNtaqmIO2kVGr2wZh5vVDQjMpxNhRlsJ4ZULiO
103 KAgJBIJ6GQKBgQC9iBOWFJAjNJOifdHMXpVmIVVSJ0TIfBtY2mJgwcH6qcFKk7L6
104 R0uMltiPe0dx/aBHqlEzgm3tl5nh/9plTMGf6qbATl52wzyXokjkOIqTDTMMw7yH
105 SOKNpuZ9D6FjYT0WOOV2n1JflQmS+h8Mwl0Zvc+7WyymZsAdvJjCmLS3uQKBgGJt
106 lwkmg+I21ISwxsbGEIUheFz1uNWNhIQM4VBdenza741CRuFn1C3r3WtqNduS6ZL9
107 wmmdPETuKVGu0HIK/6PqGyxHznvRzULZoUUCKzv5Q0PYHf7R/PZNBYiNAoV6CS3e
108 O6UREK6UUJa6KF+LB94uelFVuFA9BmEygDOaD6HRAoGAFPH5t8MJBfcSFn+fCEn4
109 07Fzd0Kbd1BFQVb1BODSULnZHgEr+mFuraHvhAckXv9dQqWgfgAeL7PuXbQKwDCs
110 na3Xe84REd24dWz97Xw7aBSTYyIkmH1cZMT+04/5WjKqR/LLLCIVCTpcRdjyJvlL
111 t1WXdk/pn9qUzJ+lbWLWK8M=
112 -----END TESTING KEY-----`
113
114 const testClientRootCertPEM = `
115 -----BEGIN CERTIFICATE-----
116 MIIC6TCCAdGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
117 bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMBYxFDASBgNV
118 BAMTC0NsaWVudCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
119 rjkvgogt5oCTTJq07XGumWrLAGsr/9c8ZuS1HNMCflb4D8CsqFSUUHWVh7C5T0AW
120 K/O3B9VDCiw/NT5VWqLLvcFpOwFQz9nRHGPZYfk/KRQiQYwio8Kd48CL0wgSh5pM
121 Y0zvhLsNxv3ezJqWNlRz8SDkVA551A83s8DqTt3YFmAA0odQMp+EH7e6AolbO75A
122 TtUa6G4A2ywA+vSoQ+g6ccqIbTmRCKKvrTlAXOZ5Oe1vk1FyBIK0rpo7vimfUU11
123 sbZ0gGbbPFfybDSp0BIUUNNSTZbfsENz51aJwR2AmszhkP5b5M7aljdVxCAylkjM
124 G8ICiwcaZVcCxk3Me1/syQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAgQwDwYDVR0T
125 AQH/BAUwAwEB/zAdBgNVHQ4EFgQUEXNuRxhdpiEaG0xhJjnI+17pdCQwDQYJKoZI
126 hvcNAQELBQADggEBAHJyN8rYdY9dRT5oUfkci3SYn/q+uiguNotK8NH4qmM83Tdm
127 Ekpk1iM8K4JXLhK4AxnhDEAz4jhiSJjbl8RvEODRlc4/03bHa/JQJJjBIR27oQLl
128 OW+GTZNL0wyM5D8rqHPDr3PAfTEDDhCjfp+VQRaNs0uTLrJD3QAoSCSxfLptk0uW
129 ZcL7u715Ns1IbacEue3ZWkqI1pwrpMHaGigV6qsMWKJvbVqu7I+XdtW6/EK1drEv
130 3wk1sOmqK5oLy8sulgJ+oUHxoSsBPIRWYcdkqQZeyRf85iX1vIWqHm6eoMfYijzH
131 RtP3e2dpiCGsatBcFp06TQXe1TUsw0xULmKESkk=
132 -----END CERTIFICATE-----`
133
134 const testClientRootKeyPEM = `
135 -----BEGIN TESTING KEY-----
136 MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCuOS+CiC3mgJNM
137 mrTtca6ZassAayv/1zxm5LUc0wJ+VvgPwKyoVJRQdZWHsLlPQBYr87cH1UMKLD81
138 PlVaosu9wWk7AVDP2dEcY9lh+T8pFCJBjCKjwp3jwIvTCBKHmkxjTO+Euw3G/d7M
139 mpY2VHPxIORUDnnUDzezwOpO3dgWYADSh1Ayn4Qft7oCiVs7vkBO1RrobgDbLAD6
140 9KhD6DpxyohtOZEIoq+tOUBc5nk57W+TUXIEgrSumju+KZ9RTXWxtnSAZts8V/Js
141 NKnQEhRQ01JNlt+wQ3PnVonBHYCazOGQ/lvkztqWN1XEIDKWSMwbwgKLBxplVwLG
142 Tcx7X+zJAgMBAAECggEAIos7oI/EPBUHv7NYBtFYy1n5lKRrRa+lLgiQYX30G10+
143 k48CHOEiRB7ATnZrk6tTChVpV8AA6hoyUSoCDfXD3GSmKvkcjw2y0MR6dFrRW2F+
144 1kzFDH+4wxDpGGdcFy9wkGrPfduBxJAPFjXbbTvK/kclhoYVQUbgJj+spYUGhI7i
145 CTAg3rE/HpxFdSpkK4LDAx00TOY3Yaz86RkKXziKempCIVnpLiVJ7H8cT//KQ86X
146 rQSLbd1dqWbK7thOQi8ncsD2WEo0tjNoj+oqPAmmxTLM4ex5yGjK2bOUWXwjziNs
147 aOv6GHCfObdbBx7/UXFwUIejRiD3EAPFjz16LqPYFQKBgQDGWeKYklGhv+UXxqdl
148 iTjlh4thE24Bsva6sxcQrgtP0S9ZyqK3/D6oPc219g87IK40ZGc10HAykU9kTmhY
149 uqphXOKhsUUKRmKYb9pECiMqw1lR0YyQYldzWTL+QtzX1BMWyILisfqG3dh8ih3T
150 v9BdgOWsbMJhkDJShIiSOvHMZQKBgQDg3BnN4w8Q/Bz23uldm33kc5+TJaQPsDd4
151 MQr9IlP5yILIFEw9TQVCxiXyE4DiA54611v65XRZEmnR2oAReEE91VgI+2EsuZyf
152 bi+iL/JamuB129qjm3k1hEFXeKrkLeF2z4IJ2FffVvAAOGXwzIQwQHanR/xOn/Go
153 Dl6mmZ2+lQKBgAJP8fBNZF46WnVYf4MTgnJKjjlnfJTQfUfX5qDvJnqbua2WSydR
154 7XkQn2FLqQnLa7x4nytlbqloQECvGVBPfMT9zDaOVnu0LloQk77PT3GkLVpi0vyr
155 6NETbSDBrsllU4OkesIhyQXheDCbe5WIWul8IzFLY0i34Z5MpTrvLPpxAoGAAJqW
156 tybU84a5zS/sEIRKYkKtOwfu2NvwSjJXhTaCYzlWoJLtYXzDdtpxX6UNw42e7ymE
157 5beYCGU0Q4wCrAlWo4PfKKcEK8qT0RnKpvTaAcRItghRHf9c4/fm9QUt8E7vPBJy
158 lvQtyDvDiTydiXgDIt4Jc4mN8+gaDgl715ayBcECgYBdAeBE1ouvZHsNgStO5WVA
159 JHT3S8zf5wtUKqXfhQntQ1kd1F1epRj04ow9zTRsxyW4nC6ALRDY5HJ6xSZR+UEB
160 ejB34PlrIQt7n6uW5UYsCtbnMP2syg4tO3NLL5t2ZuIJQXpZX9JeyYYp3B5XR95N
161 AKPqm1mhD4P35csdrn7rQg==
162 -----END TESTING KEY-----`
163
164 const testECDSAP256CertPEM = `
165 -----BEGIN CERTIFICATE-----
166 MIICSzCCATOgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
167 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFjEUMBIGA1UEAxMLRUNE
168 U0EgUC0yNTYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS9dZlr1XMmgtrhblTa
169 hJ5JRmrd8xXydAesNdvvF3TkJj/OguGHsn+JU097Ehn7XvZCFaUaJJHTMCgv73ZI
170 Wt4Mo3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYD
171 VR0TAQH/BAIwADAfBgNVHSMEGDAWgBTIIQYT1iF+a0NzaPhQdyn63AwRGjAeBgNV
172 HREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQCu
173 nQ+Ay3bv3aGQ8ln16WkENHPv86heUdavb74Ij7ihfYFUhGZZCESa3uY9DpBCA4TG
174 4O3NUO9A5NHxOdi+dkvgFCpbw2ZMh/Q+repCPVUadQ6vSn0XCpHowrY9vf9ZUJa1
175 RYILmPs1zg8Uinkk8jZiL2ZaRUxE7UcGAFDhEnKAU5bwNZ1qVPjPvzn9k23LaSeZ
176 2fT79JvR6s+Dn6o3dKBEo2Ain6VCcRuPXGc84LhXzjx6mt3W/w0475flaDsWuhui
177 +WP4UprhBFIIbmQUHDGsZWgwPF3+niKsWPgdmeBewsSt5XSKqAhd/bkBOCWPvp1M
178 VwJpdknLbM89X1sHqDaa
179 -----END CERTIFICATE-----`
180
181 const testECDSAP256KeyPEM = `
182 -----BEGIN TESTING KEY-----
183 MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgB4u8mljMa3oBNFGF
184 nsxjyt0kIECav5As173/6SRrI02hRANCAAS9dZlr1XMmgtrhblTahJ5JRmrd8xXy
185 dAesNdvvF3TkJj/OguGHsn+JU097Ehn7XvZCFaUaJJHTMCgv73ZIWt4M
186 -----END TESTING KEY-----`
187
188 const testRSA2048CertPEM = `
189 -----BEGIN CERTIFICATE-----
190 MIIDEzCCAfugAwIBAgIBBDANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
191 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEzERMA8GA1UEAxMIUlNB
192 IDIwNDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkrgMsWRYjVakp
193 9ycq+iHT+ab4IGOypOB+n8akx1ZgDQYK4s/28TwVqhGOOPKs1HRl82x+lD/MgLnR
194 FY8rUkIPYIkOhU0yprFM4tSIvDs6fDLZyyUKZCU1J/RiNQlpfwSCw338/MFG17h8
195 3I4pElDnyQLJhpG1jb85Pi/4Zin5TFaIc0J/cBPItGNWNIXaL0iI2FKJ6nORXOYc
196 XTjoNfC1MlQVYC0OxbuHlT4x5MeldAGPMi7YXiPpminBXlI6ZgZj5GEtDXUnLrMm
197 gxCpSplbKOYV+qPOJqkT6m4chxROSKrshrnoQH6zkQ4WXpJR52vdsN22Kjkk1fpI
198 d4ime/s3AgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEF
199 BQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFMghBhPWIX5rQ3No+FB3Kfrc
200 DBEaMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwDQYJKoZIhvcNAQEL
201 BQADggEBAAgeUB8EIZVzF12CfbK/YRuA7Vz0iBZa1WTxRS9gHFUwBa6uHjw6kXrE
202 KmO9THDCtf4+BronnUWw432ax7t3AgQlPUBDTgBE62X+xr+u/V0fgeYuEdlH1w+f
203 ex439hy87v0Mc/pSr1hCjy9+PkV9bIRIu+AeDxMD0AJ5C0hd9y2axb4gDG7SW28P
204 A2o6qcj8AWKsJeaBFDjHkAX8qW65LEXwapjiee+0kREGIntF0lmZq+DHQICgv6+U
205 VrzpH364lmIfWTiu2b5ouCv+MZeStt78Y3MkIw5jpfe/P3J4vTop4cmDwqQDH011
206 n6JziaM/dzjYvLMtbmf0nh4oOauForY=
207 -----END CERTIFICATE-----`
208
209 const testRSA2048KeyPEM = `
210 -----BEGIN TESTING KEY-----
211 MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDkrgMsWRYjVakp
212 9ycq+iHT+ab4IGOypOB+n8akx1ZgDQYK4s/28TwVqhGOOPKs1HRl82x+lD/MgLnR
213 FY8rUkIPYIkOhU0yprFM4tSIvDs6fDLZyyUKZCU1J/RiNQlpfwSCw338/MFG17h8
214 3I4pElDnyQLJhpG1jb85Pi/4Zin5TFaIc0J/cBPItGNWNIXaL0iI2FKJ6nORXOYc
215 XTjoNfC1MlQVYC0OxbuHlT4x5MeldAGPMi7YXiPpminBXlI6ZgZj5GEtDXUnLrMm
216 gxCpSplbKOYV+qPOJqkT6m4chxROSKrshrnoQH6zkQ4WXpJR52vdsN22Kjkk1fpI
217 d4ime/s3AgMBAAECggEACI4XVvdkdb2BGYLQbPktRen6oARpvYefwtzzWi1xJnZP
218 KDpvH4TLvKZqI/ESWjOM+eRSjTOBuxERVFMftZmibbTXgR5z/RzjWEYfsV6+tA6I
219 +yRwbTJtCCS5ZrB80BlUKMLdS4j2f25szZKVaLN/08wKAKedtFKjOW06YU6aCEfv
220 J7KSGC6sx3CudU0lavNJw3KB8QMz6RiD82Wu9AMUbwBURqAgL/+kDTPZxtpdLS1f
221 +ISdsI/Z7DrQvgZeBdN0yJrULs5XNXDXopDxNSzoVIKykHX7CAvolpgG0NRowdDu
222 I9tfbdPhdxvKb0L5Z0FdJ2oHl1N9bVLWjMOVpL7Q8QKBgQD7hRVga1dGj32fTSpH
223 Src36H54Mex6F8bPopJ+absWFARXCvpKhUDYFccr9NBVb55H0BE5ZsP4Jby4r2h8
224 76uNJm3JqxSXUzZOu4wkZX4scj3jCmBAfhGHJBFGj3/oRMsvsIvvzJcSmUs8eDhQ
225 ftXj8abXEFGprhhJ3FSHJmkNQwKBgQDowMd6oUbx8Ser0CQQYEr/48YutsX7WK+q
226 FHSnnYWwk7wo6Szzz36SbIxN3eLPxEp05BOSc8jryR/o8UpbbqGy2Nk9JX/cV7ZW
227 L7x/dACpLsSjQgbwULoWPIo7lB3EwnmQi54BUnhUJYLYJNvePGZvUKncLwySoJhM
228 hzNkICCg/QKBgC8VHodKELBYs/9aBowJ5HpGv0Xosoe4Y7MCj8GyMR9U5+sTVv8U
229 KqtIiFwmG8mid1KiFFdWcWDGT6mSzFB23PozM2II8HXTUdszKGy3wwK27/bMPnBU
230 KRvPGJzIx/zGw/JNbiSZe74zi+3p40DOPWPKHJ0tpNvKhylsYTZbblbZAoGAODzU
231 Ngof1TeaiUYKYLaTiI6lhQX+gkOkdijpItLJyad4kD3+8Y4SHBkEMZBKTD82alXt
232 cLZvNqFrB2K9v6fUhB0nKEIWScwbr2lrVzRVMIuvUW8TtB8dR2ArWkfohXEj5EwH
233 ynP9xP8nRUhqo6Dec0j/Mcdgd1E8W0lTnn6ww5UCgYEAixPtaa24gRNXDEhJHt/h
234 NHnla924ttUh6l5cSDFfEk+hEQjwIavg8wvf7lsVNpLMQk2piAM3HYCwx51CY48P
235 tYxA+eH0IdI68FYdGBaa4WVEipRz350OH/mxkgH/DayAIz51J/IYjqX1KM8asw74
236 51ALpcbHoVs8oQtRKt4fBmk=
237 -----END TESTING KEY-----`
238
239 const testECDSAP384CertPEM = `
240 -----BEGIN CERTIFICATE-----
241 MIICaDCCAVCgAwIBAgIBBTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
242 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFjEUMBIGA1UEAxMLRUNE
243 U0EgUC0zODQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQHr6c+jKVgUjIxV4DSYp0P
244 GO1UzOKqdG9pU5rsTfL3qdwqhiHqthA3r2pzDYD3U1KQ5OBbPUn6oqTOtnGwm/qB
245 LNjKmG8BHso1DN0tDwkuvEsjrjwI1fccT/n2LBapeIKjdjB0MA4GA1UdDwEB/wQE
246 AwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQY
247 MBaAFMghBhPWIX5rQ3No+FB3KfrcDBEaMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5n
248 LmV4YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAF2ToAYsdiR+hQ+G/9iNr8QSHZJA
249 K5Nf1aEzLeDhsfokJs+3yExnc/P2DSSo5qWIgyOZ2aCY2jpc4GtxwBW+FTDzqApk
250 gDNBksqw7Zc/HhpP9ou1qilgLzBGgVpFDq3yeiCHIZBgzL1TteqqjsYMybH25X6q
251 cy6hWBljfejfhRPd7NIDOWPjxdO2v+fU+PQoQzJPhfp7TwMxMEMNaDx2EbOY59hw
252 LlpIVGzrDJTrq+jQyPGuV4nEKk4/JvC41/ccc2OInGu+fGnRxUeYeyIGQqHYby60
253 MrD8DF5Erq1RJNodGpMIyPgWdQbeHSZ9fCg6+mYtiW/o/Et6sIEnSyqxpqc=
254 -----END CERTIFICATE-----`
255
256 const testECDSAP384KeyPEM = `
257 -----BEGIN TESTING KEY-----
258 MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCL/DaTbyfSdvi56FP8
259 KZsRsxukTkN8tJ1LGJIhgXoWdo130jZEV/MCTGHusfBtM7ahZANiAAQHr6c+jKVg
260 UjIxV4DSYp0PGO1UzOKqdG9pU5rsTfL3qdwqhiHqthA3r2pzDYD3U1KQ5OBbPUn6
261 oqTOtnGwm/qBLNjKmG8BHso1DN0tDwkuvEsjrjwI1fccT/n2LBapeII=
262 -----END TESTING KEY-----`
263
264 const testECDSAP521CertPEM = `
265 -----BEGIN CERTIFICATE-----
266 MIICjjCCAXagAwIBAgIBBjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
267 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowFjEUMBIGA1UEAxMLRUNE
268 U0EgUC01MjEwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAEMLkvszWdMsq+lflV8
269 3KdY6DhglnXL5gJO9jb1XOC0c+tFMSooS44NXQRIToAadfzJUTewGUL+VkQXlPl6
270 keDmLADx4yOsffDeSribamkEK8K++qMeFHMvgwZEaN/OfgYMLKLyahSjwJoiHY5m
271 C9cnNvP+u5fAkk8KUWX7PC7DsG6feqN2MHQwDgYDVR0PAQH/BAQDAgeAMBMGA1Ud
272 JQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUyCEGE9Yh
273 fmtDc2j4UHcp+twMERowHgYDVR0RBBcwFYITdGVzdC5nb2xhbmcuZXhhbXBsZTAN
274 BgkqhkiG9w0BAQsFAAOCAQEAAzAXcKOwI3m9culoq0YKRqJP4vsYsK1J0dVZxN95
275 grGk+3BI/rArCjTZLd+LHHTuDtmcUfdgE5oHu6DGJ+t3lxCClKiR0NY4E6NU7wsL
276 4mCbig5UIEFxQeCbjxwztCZadNIoQSB3BaAe5Fz1NlwDXMS0rX89psViIOaDZ0K5
277 d3h2Vce5ZKSKqzdGtNb/hgO54ygE8hg4tjhL8hIvR2NMZyjEvVZYbxzZknQNBgTY
278 /tyx/80Z8pKtau4jAn1GlQ/KJZm8Sg60YvL+WPouAil9brK3mF6PhG519rk/HnXe
279 YWgQEvYUPuolNurFdxgX39m7HmWJVvnbEICsH1IWVkJhww==
280 -----END CERTIFICATE-----`
281
282 const testECDSAP521KeyPEM = `
283 -----BEGIN TESTING KEY-----
284 MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA8/P1h6fuUKfoQoLL
285 EuDvoSmVZBssO1WUYanDHgjVb6fmLNFY9/0rump23QDTU6kyRhpstFKrZxGPDMF1
286 wOF3QuqhgYkDgYYABAEMLkvszWdMsq+lflV83KdY6DhglnXL5gJO9jb1XOC0c+tF
287 MSooS44NXQRIToAadfzJUTewGUL+VkQXlPl6keDmLADx4yOsffDeSribamkEK8K+
288 +qMeFHMvgwZEaN/OfgYMLKLyahSjwJoiHY5mC9cnNvP+u5fAkk8KUWX7PC7DsG6f
289 eg==
290 -----END TESTING KEY-----`
291
292 const testEd25519CertPEM = `
293 -----BEGIN CERTIFICATE-----
294 MIICGDCCAQCgAwIBAgIBBzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
295 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEjEQMA4GA1UEAxMHRWQy
296 NTUxOTAqMAUGAytlcAMhAFYe5dPUD+RLtPOKFJ0N/HzD2WuxG/wKWC76DF5Ahyjl
297 o3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0T
298 AQH/BAIwADAfBgNVHSMEGDAWgBTIIQYT1iF+a0NzaPhQdyn63AwRGjAeBgNVHREE
299 FzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQA9V3RC
300 sJpWNDPG+em2o1SYsFvnNnP4PJ1I13OhXkJPbH5Q/Ro7QfDWoK8v5xDri5T4Na8m
301 1OX1aaUQU5s20+/Z5z0LFjTzLSStbmzZ1JviVwgRwroA5OUf6dPKyn/nIeNQqffA
302 079PbJQErPocp/X4Cuw1t2B5Kzq1fpzCB99PJW/QCl11UcHYNqQ4/Rmnlzec1lT9
303 rtN5xo/UFoH5XdiVaEnCABzIH4PqPJRJgHuEDWe26enLsGYCev+nsPLWwgcgrSPF
304 gnNJK1aFF8kHFxVnrKdETQzm3/+1n0fEJOH/OuSMbAurW+m0eq+12M4CsjAGhjxZ
305 S1jLk5ArvL0Zox11
306 -----END CERTIFICATE-----`
307
308 const testEd25519KeyPEM = `
309 -----BEGIN TESTING KEY-----
310 MC4CAQAwBQYDK2VwBCIEIDehsY6HTvsJId7lcQkPbTJPZtfuzzOY0ufnZsXiVwX0
311 -----END TESTING KEY-----`
312
313 const testRSAPSSCertPEM = `
314 -----BEGIN CERTIFICATE-----
315 MIIDejCCAi6gAwIBAgIBCDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUA
316 oRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwDzENMAsGA1UEAxME
317 Um9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMBIxEDAOBgNVBAMT
318 B1JTQS1QU1MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGG/4RlVQv
319 LnHGynuHsM/ff9PTd6mxt31ZyvB+1TEdTnz3YIbn9gDPkt2nNK4qHLI6oPmzwytK
320 jpitEP+nJ4EgdFUOlE6WQX779CQVETBaijkRFRD9EwziD5cZXtswL002v39JAc6o
321 BuJ0RGN6IJwu6FPk198o5mR1JaK6BFvYE/W8tu5eTAIw7oLwkE7/0L8dyAtMnZ16
322 icESeuFLvnGV/NYqNTH1XbO47ORRnp6E7EdZMdhQIOrnS69uDXBhNXPxeSfF6b00
323 X98OCHA/4iZjOGyYwVpFvW5a46ChTo2hJKRtbsgACx9s1p++D6J7WTgVCI78N+vX
324 7incQlsd1ZtBAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
325 BgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFMghBhPWIX5rQ3No+FB3
326 KfrcDBEaMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwQQYJKoZIhvcN
327 AQEKMDSgDzANBglghkgBZQMEAgMFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQME
328 AgMFAKIDAgFAA4IBAQCb46iLsWMUqJSeLlT7yUuuYFIWlXEamM+ZkOTUXvC5rzOq
329 Mem1YbHaApGqynw0X+jrG2EC0GDKjgUTiVNtk4HnsCBKnEQ0Ew6XDC3+fCy71oky
330 assPVr60mpq+iT5wnss4a8woAeCtIwIH5pfUBUU+kqX8HvQFbaTwMNJe7oyo9jRC
331 esXo4f7TL51ETA+ZueqFLU5DslYMjENxQyilh1lLFrcBYOrL4Ja03PQ0q3zJDhMv
332 wHTuyKJ1HJ67+8aTmTb0G/zmq3coc9HUTptgy2iTIVSdwAYNN9S77Vb3C2tAY9GZ
333 EdbK1bsoMtPvAsdUsLqb15ILgmhL0SrNV6lCHtmL
334 -----END CERTIFICATE-----`
335
336 const testRSAPSSKeyPEM = `
337 -----BEGIN TESTING KEY-----
338 MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGG/4RlVQvLnHG
339 ynuHsM/ff9PTd6mxt31ZyvB+1TEdTnz3YIbn9gDPkt2nNK4qHLI6oPmzwytKjpit
340 EP+nJ4EgdFUOlE6WQX779CQVETBaijkRFRD9EwziD5cZXtswL002v39JAc6oBuJ0
341 RGN6IJwu6FPk198o5mR1JaK6BFvYE/W8tu5eTAIw7oLwkE7/0L8dyAtMnZ16icES
342 euFLvnGV/NYqNTH1XbO47ORRnp6E7EdZMdhQIOrnS69uDXBhNXPxeSfF6b00X98O
343 CHA/4iZjOGyYwVpFvW5a46ChTo2hJKRtbsgACx9s1p++D6J7WTgVCI78N+vX7inc
344 Qlsd1ZtBAgMBAAECggEAEVagVxoeZs22C/urMY4+NzWZDKwvqBvixuHNyA/xDztQ
345 ERd73x/G5OPZ7dkcuBdQWvS9PegiKRGPV7BB67d3o+dCjXbZ5OkhC7yLjuN0+6uW
346 wIG7Pab17PAH3aLRZKdzJsw+P92+YDLQDXRxz128xZc0RnZFM+9sEdukIQsiHahE
347 H97Qx1rLcksvCXSGzJYZ6O+loasCgWNNrdyqgOvmR4ATImYHX7lDvCVUEHOotKSs
348 Y9fUoQUs4Ooc9pRlQ+3kDYyXjxaEhY6/0jzgdr/8cCUD90JWjQ21m2Ke0zBjOTgN
349 JIeXvIipfck49T9ZAfsqia8EZoZTdMHATNrk7AST1QKBgQDlG6wm/A8HfmHienW7
350 uWAKcDQmpY7WpaL7F8JVVlzfEBn5s1vDpPohRhqccilfoyDKaBy8Vax3TZKRvfin
351 FbYDVKAilTq+0pLU0ru0iRZ1t2NnfAo8ZJcbT5uHsEf580hlAqpsrZpMTZPhU5U8
352 HRG77/uUPwaUVDmiYf38tWzA3QKBgQDdXNuSz3Yg9GBQfwy9M8Qc1k1cIWZcJIAp
353 HJH9iGStLyN4vuDwdjsjEo7JiifVv4imTdRtVq9qWK7YRqHl/XwSKYLi3B/JMCWB
354 togvil3MALECBTEPjq4IdY1hOI/WHuyUA5mZJLJ0l9YtBwMvx4aVRK5xwq7+cml9
355 D/dpBerLtQKBgQCcE3v1muUKL9izFsW5uxFoSwPcCBEEvRYIhCkJRapC848egkdT
356 QsJ7hGyAg20YD+M4wDBDRQIWzCu7SXVpLesu3amxpYO9l2obvevNk05Ppzz6tI+s
357 kMI4AsVrbHW8GzYISgabvrBMptTFPdF+gDciltwGI+FxjucsbiE+1MFfqQKBgH6u
358 AlZc9YxcbbYDT0YDluqt1W2xC4QVu2ZLnFyMLplRjaovCklyT9t9Zkt+DdfsGYaa
359 qcO8xPxGLiFFIqeczeES8n1jXalkLUKzM/KI666wgpvWXsI5c+0RYMxPczklT1xR
360 Rxh2AM5qij4QcklolONdf7tIn56r2SSh+4OVyE21AoGAfyh7R4Aav6HoqVhYebBp
361 P1woELziAUZcBj6s8MOJrpwftnDzSB0g849JZjd5QBQREY3TGKV0mO41zWB7oo7P
362 dlCJYKMUj4c99/wCiAj0dRetM8MxqqvMMXYLxdXB1fJgEefkPw3phMQTje7L4DRB
363 VKQIwE/j/jUCaREu2Zh7FW4=
364 -----END TESTING KEY-----`
365
366 const testRSA1024CertPEM = `
367 -----BEGIN CERTIFICATE-----
368 MIICjzCCAXegAwIBAgIBCTANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
369 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEzERMA8GA1UEAxMIUlNB
370 IDEwMjQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANs/JRcBqvbSn/lx+Rt7
371 V/E5lOSgIwPRZTO6M2y/7j0BbRkiRgl/3N/pmW5zxQ+NYg5QB0aeYrQ1xDnPTe5Y
372 PI24cBq58N1pSneZr+KM4fp9/l13ZrweNkOzd5Mmurzd1m32ShyxtmHrwe7NQV6F
373 /RMWLHhHMypfK+untwfHjuRPAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNV
374 HSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFMghBhPW
375 IX5rQ3No+FB3KfrcDBEaMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUw
376 DQYJKoZIhvcNAQELBQADggEBAAnjkK72QX1944AppqMLw//F18wTvv9a0oh4keac
377 g3p7SP7C4aljOX7Udv1deovoJv+y2az4VRz2y/tVgVedhL3p173QffSln/YoEeFT
378 z3/CgXo158AMHdBcM7kiItfVV7WMqxS52CeuX3Mr7CxzGbndGcWw+Ux2+CWlxaqv
379 7gPWMNGiZJiHnbfYgtJ/Ux2LqRFZ+gONHADs6tKo7xLa5Vd2gzaZrp75UA8nkOgX
380 I7Z4kOrtYGoUgFYzc7LBK8UN5NZbs4F2lrfesm5boP6745Dslbt4QibJgkdwgmDv
381 5xwNg2i3w5E5C3oP0P/TI5JVa9aaEDV9GNoBdHoiumYTTt8=
382 -----END CERTIFICATE-----`
383
384 const testRSA1024KeyPEM = `
385 -----BEGIN TESTING KEY-----
386 MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANs/JRcBqvbSn/lx
387 +Rt7V/E5lOSgIwPRZTO6M2y/7j0BbRkiRgl/3N/pmW5zxQ+NYg5QB0aeYrQ1xDnP
388 Te5YPI24cBq58N1pSneZr+KM4fp9/l13ZrweNkOzd5Mmurzd1m32ShyxtmHrwe7N
389 QV6F/RMWLHhHMypfK+untwfHjuRPAgMBAAECgYAEL88CAvakUv5aEZqbsz3JLfvR
390 Z9tzUbbYh4g+3eVrRdEzBywGN2pc3kWfTdeoBd+m/VE+QH0LCvHN1s8aq5WwaBX/
391 Dxt8THCWL614OFKW32rMqfrbKSc2eVjL8TDe8xLOjBBthW/hJ0t8M6qlkAWuOOxf
392 Kvkvo4XaXSmtVxHX7QJBAPFHkIjBCmmsTMRG8Gq/XNqSYvWlPdygh4h43W4ARCxN
393 gp0fZAyHoCcSKisJRW7lbocybuhuwU+SCHoUkqGAr1MCQQDon3VonKqdQCYTJ04F
394 VP+eX/7Y/oYhMFosk3bS2OvefAH6XGkZ5rw1rLNRWUqOzy4z1BK1hznEH0e2rYDB
395 /aOVAkAdl69sdnC2gUFxGVpHXW0gCbBFfJzXwICfBmPyJ+o0nNUWPFFjEAdeg2XU
396 nXB8p3sk7dSYgW0IO1r6zicl08itAkEAj2nfpIMR3Kiz0JMm0rq4bReZsoYYg1Wg
397 AmNXml4J7LxfK87VLRbHaf/y/XAjOzAXt/RDJI8d2f++4qzM+Mw6kQJAMRSaXW3+
398 YvNVgLLvZlerVvFcN6nBweiQxxO/IiNHRMr6YHHzDqFWTkXhGLXllAAOYt0y6G+R
399 NkIDYZn2WDHWLw==
400 -----END TESTING KEY-----`
401
402 const testRSA512CertPEM = `
403 -----BEGIN CERTIFICATE-----
404 MIICSjCCATKgAwIBAgIBCjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
405 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowEjEQMA4GA1UEAxMHUlNB
406 IDUxMjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDIRxnTSVsGi0+ghNABVB1yCR1p
407 7VD+udOWRkJKKRqVYe6UT7B3VKZiD+S8qzVmFis2xfuZ4IONrXOzYYL1HAJ/AgMB
408 AAGjdjB0MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNV
409 HRMBAf8EAjAAMB8GA1UdIwQYMBaAFMghBhPWIX5rQ3No+FB3KfrcDBEaMB4GA1Ud
410 EQQXMBWCE3Rlc3QuZ29sYW5nLmV4YW1wbGUwDQYJKoZIhvcNAQELBQADggEBADzR
411 lznTzLetqyKR+mXUrnQbkELjbudjzCkHNPKv0vxzHkqtlJYF6v9aySAuBm4p2dU3
412 5J+Pnmcom37uuRdYQG1jjJiN5a4O8nKYRQ+H+GSJTe7aRT04jd6Q9NZSGcbKuaEI
413 rT9BdnyqVv77/A4a+4tDZR8POCeB27UpzC03iJQYn8zUx2mGMIJAALvA+DnC5mMW
414 ed/JPwqa1CBdXvwtP/lusFpMhiYWM5cWb24RVbE2bK6586YOkSDOqZRQ99vcv6o0
415 l1k3qNdhroS+qSbEQ4WFHtDnjDZOIg3IGUbVm3ACQyXFwpJMNr7F6Sdkb44tTs6S
416 QlDy9XnSkXatsgSwAyo=
417 -----END CERTIFICATE-----`
418
419 const testRSA512KeyPEM = `
420 -----BEGIN TESTING KEY-----
421 MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAyEcZ00lbBotPoITQ
422 AVQdcgkdae1Q/rnTlkZCSikalWHulE+wd1SmYg/kvKs1ZhYrNsX7meCDja1zs2GC
423 9RwCfwIDAQABAkA2IB0HIHKEtL6ay3npegGRMYxs9bFnffIEUU2V/EDOcNNg3Niu
424 kyr5/f9WSxfzUAEurHeMulTJoIilu1+x70hlAiEA/UB5UBcxKwF/HE4YkdmgZe+F
425 lDc9e2BR8FDFisB6/PsCIQDKc3drx+Ivjpn/8BhXTG4S8ZalnvRiqpTPyrSxqK/R
426 TQIhAIoR5pHFsyaxMC2sXjTWI16v0XHXFAv5nXKZdrmI6wSVAiB/B8itJnS0ZoQW
427 5e5ACMMgu9pM/dpWdrZ9U7Hhr/jyGQIhAOuVBcwqFKC+QUh5FiVjWGZw1nSbjJNA
428 4dsEckX2ysJ2
429 -----END TESTING KEY-----`
430
431 const testSNICertPEM = `
432 -----BEGIN CERTIFICATE-----
433 MIICVzCCAT+gAwIBAgIBCzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRSb290
434 MB4XDTE2MDcxMjE3MzIwOVoXDTE3MDEyODE3MzIwOVowIDEeMBwGA1UEAxMVZGlm
435 ZmVyZW50LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5dCd
436 gbt7rpOpqnc4uy2iSZ19dW6bKrFoJ9Or+pD2O47ZHpZcp9ckaJnE9LSfZQBWQvl8
437 gKQiHcPnbG9a4DFCqKN4MHYwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG
438 AQUFBwMBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUyCEGE9YhfmtDc2j4UHcp
439 +twMERowIAYDVR0RBBkwF4IVZGlmZmVyZW50LmV4YW1wbGUuY29tMA0GCSqGSIb3
440 DQEBCwUAA4IBAQC7xKlz92vEX0gIvf2uVJRO70oDd0Vm1qeqFTXH3slUundmtPxD
441 9UwENbgQHD+w47g62ZQ35Fx7GOQHW+YgW5f9JLmcNvZ0brElYLggAZFslzic08AS
442 Pg2KDKUAUsPhyxw38tSa8RQatql2RtjUynrtEYX2enJcFCdDWKd+zeMu3uBOgsTU
443 2UehsFoUV4RGsqiahRflTuEV6fCQGOOea96xEdxYDYEXUPdTGnAk4hm07/3P1xN3
444 ot6BNI2pA8bxoOs/gctlQNuVKIHmbV38GyFDMU2umqOCgQwKHxaQ415Eh+TPUeYU
445 bE9+HU83VYt1mE/lmyb4w1WqSPd6+pJJi2Eo
446 -----END CERTIFICATE-----`
447
448 const testSNIKeyPEM = `
449 -----BEGIN TESTING KEY-----
450 MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2TNUbp3GTmOdLExt
451 XJ1nVXVhvfE+nYjlG7HYpdxDaOKhRANCAATl0J2Bu3uuk6mqdzi7LaJJnX11bpsq
452 sWgn06v6kPY7jtkellyn1yRomcT0tJ9lAFZC+XyApCIdw+dsb1rgMUKo
453 -----END TESTING KEY-----`
454
455 const testClientRSA2048CertPEM = `
456 -----BEGIN CERTIFICATE-----
457 MIIDJTCCAg2gAwIBAgIBDDANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
458 bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB4xHDAaBgNV
459 BAMTE2NsaWVudEF1dGggUlNBIDIwNDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
460 ggEKAoIBAQDsBErzJLpTQ4ugNsigS1xz5kZ4usEzLVvlasvRhpRhVej79uqu68ri
461 p8IET/ftCdQqscO0aLWr03Gs4A4OdNTDKz7yQVhrhaJJ4kwOxXZEtqgfjJiQP7sM
462 1MAX068FZkUFgcaUsIr8tqntkRWadq2ysAFT0P9QS/2F4br6GywZkjCAyEzifzKx
463 7wRwWTh5WqaWJ1EqaaZi9biox0jGS4KXcaTbkFoLgBGjFW+oMMxb28qXxJeO81BW
464 wHz0J15YWUnp3aitQ/rjWV3+JQ9q6EASuBkMxXqhco4i0MwpQTRi21MbkDccgqld
465 te837Ap98z/VHN1yjP0ak8SDhuqweAGxAgMBAAGjdjB0MA4GA1UdDwEB/wQEAwIH
466 gDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaA
467 FBFzbkcYXaYhGhtMYSY5yPte6XQkMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5nLmV4
468 YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAEMFtQ7FkFmLDXNe3xlmYUu5UcVCaIik
469 QE1c5RK10WEm1ar4lXbzW3QPMis7dQbUpRv+AdBS3L4yIIZGpET+N6X4OXSZXFjA
470 eZvjmq4nkZJeUPGDhlzm4wybw13dEJIoMPEBsCp+5bfgAOcHkHxLWeQNPHIRzW2x
471 gMrzJBalAuF+YcWJf8g9KcwLB0+lvjc+gUwtXTAIViLcfxoGr804WkJ1gG0shAfG
472 WosRlhFS3OwfljlPDmACQAVqL48AeDUPgkZQZKbA4tVjOlpfwdjrp3o+mi4NeYvJ
473 u2+Z1JpxrEtMRU5K3ws02cfR6YDV5a/lUFij/qLJi90oyOOP0aAsf60=
474 -----END CERTIFICATE-----`
475
476 const testClientRSA2048KeyPEM = `
477 -----BEGIN TESTING KEY-----
478 MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDsBErzJLpTQ4ug
479 NsigS1xz5kZ4usEzLVvlasvRhpRhVej79uqu68rip8IET/ftCdQqscO0aLWr03Gs
480 4A4OdNTDKz7yQVhrhaJJ4kwOxXZEtqgfjJiQP7sM1MAX068FZkUFgcaUsIr8tqnt
481 kRWadq2ysAFT0P9QS/2F4br6GywZkjCAyEzifzKx7wRwWTh5WqaWJ1EqaaZi9bio
482 x0jGS4KXcaTbkFoLgBGjFW+oMMxb28qXxJeO81BWwHz0J15YWUnp3aitQ/rjWV3+
483 JQ9q6EASuBkMxXqhco4i0MwpQTRi21MbkDccgqldte837Ap98z/VHN1yjP0ak8SD
484 huqweAGxAgMBAAECggEAJc0ANhYlU42ncMcldersCVIR6mc651f19nYW492SqU5J
485 rQVcjByO16N3wxoNwuTGmvnyttPoePc6Jy6RgcY7h3DHOaS2pS33kq7QcLM2oIXC
486 wp7RlpTmgAUZKRfJ2esJ1fp1lD38XMJiz/5jP+SPKGXhKIv6QGGTXtyLBmDQvN1q
487 5L+za0fda7jeDrtu3rLKgwHEOapWMeH8+V2dhd6xLlxWwrj64B3Jn8WX1hkgIZ+m
488 9NwMR2cJC+UdDpDa5LeOoYbrXHkbRxOH5mrAUeGWBSUxxBQda75Sz9za6jMwJqnx
489 UqIvGzvut83w5skoFP7iM6CyT2MuWvX0GydNUkIYEwKBgQD/UwoQ/1+FbSE7N8hQ
490 WLTuv7JKM2IJdSFLQj+Yzo0/wwswqCMuq+db8uv4NfPPO6JPcraWHUpd18WGKXEp
491 FTI2HulBWLpqw6bD3zE4a0Bol5kiQ969Kd82fN4UP06/thxg3mujGTVLbSRRexWK
492 6rXb2rrkVfQxJXKuUjGSnMKM1wKBgQDspCyXJs8Hh9eoIn6AsLKQ582daSHupsep
493 xF1mQIoUUYQF0Hx7vsualyVLHUrANUPxJqoOSTo1uemjAs8MoNtQ+6JTLN6KZm5A
494 kMKtiLM++4lTs1UD7jwTrvruRplEvd1fODdT2ON+v9wk6JpI8J0/PFIx4y9n0x+S
495 rAZfcObMtwKBgDrq25DOjSlJ5Hg4yBWaUq4hODAdKUtLZxJpyCknyLpk9KkWs3+q
496 lWnHZaJSON+iQDMbIn0DZ0y+ZMsvtvgm9v48JdE5e1L1sP7T+xSs0yEPknuws65t
497 AiAdslVzwmVEzcmgqa/qOj0cg1v2DiOPQ8Xm9GeKWh4ZKRyGxP+zAsXjAoGBAJWF
498 EkubENrAQUoSKX4kp18Zp/ha0j7ZkHS7BwyxoM0/yDxoRA9oOXt/Hug8JNwXi8tW
499 U8LdD/OceXwvLSXciVa8+A633hDysZ0IGonNQvx7sIR7Xi8ymzEQsapWX0do8/PT
500 MFpBQ1T14yJK+hk2NxUahxDQbEacxmlFWm15h8s3AoGBAKajlsx7B9VCfaqzjU53
501 CzMHz3hoszC/+HPBT82s/BGCyXRV0jQeA4T9bp7LPs+eY+cZ4N6OGQ70uK+3076x
502 gAAWi9aEA6kbNdknWDb5KO6vuTN+f3zZ3YpeP8ifAektv7sIbpurM/69VdPVUwEH
503 TJXn9YjuZYTmpBrk5KtDEYUh
504 -----END TESTING KEY-----`
505
506 const testClientECDSAP256CertPEM = `
507 -----BEGIN CERTIFICATE-----
508 MIICXTCCAUWgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
509 bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMCExHzAdBgNV
510 BAMTFmNsaWVudEF1dGggRUNEU0EgUC0yNTYwWTATBgcqhkjOPQIBBggqhkjOPQMB
511 BwNCAASDWYW9MxCCKZnZaUjaf/hL4QD2i874rm2R1U5I1O47WZeul/Y6J2422O0z
512 3r/xuqlqhYOp8P5yoo6YR/XwXA1eo3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0l
513 BAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQRc25HGF2m
514 IRobTGEmOcj7Xul0JDAeBgNVHREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0G
515 CSqGSIb3DQEBCwUAA4IBAQBaI1xV46tLs+TLAQerTUzvBTZmPvs+kziXHHmuC6jx
516 q7ZOs9h+DpJDFArKSrAfM9vjzO08vvX8b/doc00KdvN/bQkMA0BQlg6X8g3H8S5V
517 uUGDdAiWGN3NGQbB5fYI5XYNAVoGTOtBjEIGSd0Ty4kX1C5dUkO27QkX0AFo/F4c
518 LqqAl7QZUXhhGctZ11z+GSJ7cCgEqCOPlcVyG9mX0d7NcoDaNUDFVpORSY/plLJ9
519 h1exVocKmOWmodVygR9F7rVKGkNJyu0nFc/Zt9qCZ7rLPF7rEXOdk9ahswRXsW6y
520 kGuCyxJjcWMqvlsXRqoKX4VIEnr8IBfN3z1q8KHbdW9f
521 -----END CERTIFICATE-----`
522
523 const testClientECDSAP256KeyPEM = `
524 -----BEGIN TESTING KEY-----
525 MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgoCm3FG8lQ9/Sy062
526 erOhhh6UhBhurb1pyTFfLcn9kV+hRANCAASDWYW9MxCCKZnZaUjaf/hL4QD2i874
527 rm2R1U5I1O47WZeul/Y6J2422O0z3r/xuqlqhYOp8P5yoo6YR/XwXA1e
528 -----END TESTING KEY-----`
529
530 const testClientEd25519CertPEM = `
531 -----BEGIN CERTIFICATE-----
532 MIICKjCCARKgAwIBAgIBDjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtDbGll
533 bnQgUm9vdDAeFw0xNjA3MTIxNzMyMDlaFw0xNzAxMjgxNzMyMDlaMB0xGzAZBgNV
534 BAMTEmNsaWVudEF1dGggRWQyNTUxOTAqMAUGAytlcAMhAJWTDErnPfxfZDEmCvWk
535 Xl9fKxG/U4KP1v21Rx1XwNVHo3YwdDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAww
536 CgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQRc25HGF2mIRob
537 TGEmOcj7Xul0JDAeBgNVHREEFzAVghN0ZXN0LmdvbGFuZy5leGFtcGxlMA0GCSqG
538 SIb3DQEBCwUAA4IBAQBnn5ZTqWKjSM5WRHyyBWL+kb5syhzZlOLunjqb7oPjhqIf
539 akRypE3IaHLkMZctvDbkMlPEfkpBhIG9pvLnf3/Y7iuvMZJsHQomHfBn46TtX/Zv
540 cRNjYQz1kBgIHmjEoxmgmMjyqcHcaGvxEf+ot8qJbhr3OqFOybwx3N0NITbGvNwc
541 WX8V1exg//f0ezn+VrMKs0c0fSFgJz/7IooNEuB5qpnNp9jbklfUw8B4BhiuDfx7
542 cNk1e9cYz1vRjYnPxYPc/TcfEpOA3xKoM53+L5qRVfvzuQe3pfy6uKOauF0AOE6p
543 Vbiw6DoJb36H/yulheD1PWcEB7BakpgYbto1Tnet
544 -----END CERTIFICATE-----`
545
546 const testClientEd25519KeyPEM = `
547 -----BEGIN TESTING KEY-----
548 MC4CAQAwBQYDK2VwBCIEINmF+fxP1U+/SJ0ujrdEM4bffoMfzJSs+xw9VN1BmSBB
549 -----END TESTING KEY-----`
550
551 const testClientRSAPSSCertPEM = `
552 -----BEGIN CERTIFICATE-----
553 MIIDjDCCAkCgAwIBAgIBDzBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUA
554 oRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwFjEUMBIGA1UEAxML
555 Q2xpZW50IFJvb3QwHhcNMTYwNzEyMTczMjA5WhcNMTcwMTI4MTczMjA5WjAdMRsw
556 GQYDVQQDExJjbGllbnRBdXRoIFJTQS1QU1MwggEiMA0GCSqGSIb3DQEBAQUAA4IB
557 DwAwggEKAoIBAQCr9HTdPKgp8OzGrWHAdvJKtvomYL6MuXI7lcReWU76dIwoP4fg
558 jxO0T1/4kjFmhFNlt8N8sU7QNiPconHOuaPRNHKAD8dxceQHXteh2RI/FBPWfax/
559 Oepj8sBhDaJITgv+sqPJXS4oonDCVWPCe9JJntQOd4B/W97dJaYeQzEhHN7OKegW
560 qbc6/PzUQtstcqfwztwW4ukfDo05m7vdJ3hkYRfs/+ryX0tHqJUtuptQ5i/ttazP
561 5RGTdg2t4/JDcEcLAt+ue1h2VsLV1ybtmrqo2GKT5D1RaEk1P2s6klAEQ/VxAiDB
562 SnPQuL/nPKKvlxOvCInC25iEKjFiVOSuHbn9AgMBAAGjdjB0MA4GA1UdDwEB/wQE
563 AwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQY
564 MBaAFBFzbkcYXaYhGhtMYSY5yPte6XQkMB4GA1UdEQQXMBWCE3Rlc3QuZ29sYW5n
565 LmV4YW1wbGUwQQYJKoZIhvcNAQEKMDSgDzANBglghkgBZQMEAgMFAKEcMBoGCSqG
566 SIb3DQEBCDANBglghkgBZQMEAgMFAKIDAgFAA4IBAQABrT3Yg/StetX89IRCAykP
567 b7mIg3C/+5fVb2qA5WvF/S38zbFr0o27xdizOyeH8mP3DTSEaxJVTRvm/CJoWCM9
568 UNljoLp/n8JPIJ3QDx8Hy4XBSIP3IgPoaqyLMezhFwnjyb+t5eRakTSUarlT2ssE
569 GGPTTbM2FX7TBqyaOhMH+LNSsm7YQFoYWU1A5HQ7mLkYxlQXYhiRG0+flTPGuSbA
570 UJs4c20upw+Bl+O/fACowK4/eHtHAgKshufLIIaI6p4YCdDMZeRsbXQmGC8asv+l
571 EFd6ADn7vFps1e66aaExreM7qnfNdnttWOvHs9kzcASzn5RIlseguJVW65rHwWa/
572 -----END CERTIFICATE-----`
573
574 const testClientRSAPSSKeyPEM = `
575 -----BEGIN TESTING KEY-----
576 MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCr9HTdPKgp8OzG
577 rWHAdvJKtvomYL6MuXI7lcReWU76dIwoP4fgjxO0T1/4kjFmhFNlt8N8sU7QNiPc
578 onHOuaPRNHKAD8dxceQHXteh2RI/FBPWfax/Oepj8sBhDaJITgv+sqPJXS4oonDC
579 VWPCe9JJntQOd4B/W97dJaYeQzEhHN7OKegWqbc6/PzUQtstcqfwztwW4ukfDo05
580 m7vdJ3hkYRfs/+ryX0tHqJUtuptQ5i/ttazP5RGTdg2t4/JDcEcLAt+ue1h2VsLV
581 1ybtmrqo2GKT5D1RaEk1P2s6klAEQ/VxAiDBSnPQuL/nPKKvlxOvCInC25iEKjFi
582 VOSuHbn9AgMBAAECggEABFYzVVOrwEUKGUrZo1Q/15g/4yEymEavP02PaO6/lTiR
583 XIyy1VXE1WatrbP0++T19bCGnsaZzYDNpjydk+BhzCUShzEx4nLqh8oOgULOsqZD
584 utFE43+KYXA60sFlUjjPru7ovquAMZIPng/i86gSSjBWILHgXOkfZYkgl6flQ9rv
585 NiK2t/bbC0ciayZ+fKJaei2kS7uMuB9tQwV065uvORwYf9mXJX59xAq4xuTVfFK2
586 OlekWJgFzf/zIX2VDu93948iNgdyJpMTVOaJZctfXbXdy7tjh9/tFQyep9JYF/Wu
587 TdkNt0f7KEwmSSAy/HwcIhzCznVglhGVOaNzyMbsSQKBgQDR1qVbkxmlIn+k1xTz
588 TvtOW03Uk3N5qDUi4g9sMBJed5CXZxcAkl+WCuMw9+7OI5rkLVNCBOQf7c0gk85k
589 Gu7jXzPoIZRxa6fEqdpuVfqgFxc+27zdBB75+QQghAEv9dHW9IM4AqgImnP6EHiK
590 ctXmajfUDhOKlEVAZjwq8fstSQKBgQDRyFgM0MLNOKeUxI88n/jWw5ovv5282Ttx
591 oStY75TEbhPl/P5z5CHduAuPCHus5+AhqzthZMr3k2AIdLZpBaUFICo6sM2RDgJv
592 hwJ5rHBOEifvYGYgHaqNZtr5+zA0RqRCuYbOXM9oGCp17DBVX10wTRRIYtO9wxNe
593 aC+VN2nrFQKBgFXG7pV+jk8oyRDzMwc61BP10t0A4YVrszztN+y7weaH7b1WUNrU
594 +un0zWZpE1+Ewn5f4Nbt9OrwZJfak9XsBJdBhZBwmaO7pDsKS9Yqo2bpyYDShmO6
595 mYcJuhwomeunCv5ZuYId496QdLRWI1BFHRcxeFzg3DAb6CspH5NWk5yxAoGBALEd
596 B5HSUxV2xq2oghI6MZoIzM2RZriBY1mdK/7LT3vEQBKF1cK8kgciksew7tHddvKW
597 Ie0pbt81UvfwqezjMh6wuFaS3Quhm1bT0rgtaSfQ1lyYs8Bbq5n0g95YP6tzFM2s
598 226xFv8YoAitX2VEvWXBPeWbYo+s+lZTehDuFwO9AoGAD6n29mfkAtGeU7rdyoug
599 C+lmDFi1Oquz9sS4GMhzg+NsSxYly+QzV65EyIVvJBUgV66hbpnU/hq7fbQE8/Vr
600 jxrfmmrMaIXhnSWAXeBn6Gz+VAgRhfiZpP5/4YS8rPV1d8pOfuQGuP+zDmke1nLC
601 sZpT/jzJuZsUkbuLREQbZGQ=
602 -----END TESTING KEY-----`
603
604 func parseTestCert(certPEM, keyPEM string) Certificate {
605 tlsCert, err := X509KeyPair([]byte(certPEM), []byte(testingKey(keyPEM)))
606 if err != nil {
607 panic(err)
608 }
609 return tlsCert
610 }
611
612 func newTestCertPool(certPEM string) *x509.CertPool {
613 pool := x509.NewCertPool()
614 if !pool.AppendCertsFromPEM([]byte(certPEM)) {
615 panic("failed to parse certificate for pool")
616 }
617 return pool
618 }
619
View as plain text