Use .cnf for config files, not .conf
[openssl.git] / test / ssl-tests / 20-cert-select.cnf.in
1 # -*- mode: perl; -*-
2
3 ## SSL test configurations
4
5
6 use strict;
7 use warnings;
8
9 package ssltests;
10 use OpenSSL::Test::Utils;
11
12 my $server = {
13     "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
14     "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
15     "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
16     "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
17     "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
18     "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
19     "MaxProtocol" => "TLSv1.2"
20 };
21
22 my $server_pss = {
23     "PSS.Certificate" => test_pem("server-pss-cert.pem"),
24     "PSS.PrivateKey" => test_pem("server-pss-key.pem"),
25     "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
26     "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
27     "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
28     "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
29     "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
30     "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
31     "MaxProtocol" => "TLSv1.2"
32 };
33
34 my $server_pss_only = {
35     "Certificate" => test_pem("server-pss-cert.pem"),
36     "PrivateKey" => test_pem("server-pss-key.pem"),
37 };
38
39 my $server_pss_restrict_only = {
40     "Certificate" => test_pem("server-pss-restrict-cert.pem"),
41     "PrivateKey" => test_pem("server-pss-restrict-key.pem"),
42 };
43
44
45 my $server_rsa_all = {
46     "PSS.Certificate" => test_pem("server-pss-cert.pem"),
47     "PSS.PrivateKey" => test_pem("server-pss-key.pem"),
48     "Certificate" => test_pem("servercert.pem"),
49     "PrivateKey" => test_pem("serverkey.pem"),
50 };
51
52 our @tests = (
53     {
54         name => "ECDSA CipherString Selection",
55         server => $server,
56         client => {
57             "CipherString" => "aECDSA",
58             "MaxProtocol" => "TLSv1.2",
59             "RequestCAFile" => test_pem("root-cert.pem"),
60         },
61         test   => {
62             "ExpectedServerCertType" =>, "P-256",
63             "ExpectedServerSignType" =>, "EC",
64             # Note: certificate_authorities not sent for TLS < 1.3
65             "ExpectedServerCANames" =>, "empty",
66             "ExpectedResult" => "Success"
67         },
68     },
69     {
70         name => "ECDSA CipherString Selection",
71         server => {
72             "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
73             "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
74             "MaxProtocol" => "TLSv1.2",
75             #Deliberately set supported_groups to one not in the cert. This
76             #should be tolerated
77             "Groups" => "P-384"
78         },
79         client => {
80             "CipherString" => "aECDSA",
81             "MaxProtocol" => "TLSv1.2",
82             "Groups" => "P-256:P-384",
83             "RequestCAFile" => test_pem("root-cert.pem"),
84         },
85         test   => {
86             "ExpectedServerCertType" =>, "P-256",
87             "ExpectedServerSignType" =>, "EC",
88             # Note: certificate_authorities not sent for TLS < 1.3
89             "ExpectedServerCANames" =>, "empty",
90             "ExpectedResult" => "Success"
91         },
92     },
93     {
94         name => "ECDSA CipherString Selection",
95         server => {
96             "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
97             "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
98             "MaxProtocol" => "TLSv1.2",
99             "Groups" => "P-256:P-384"
100         },
101         client => {
102             "CipherString" => "aECDSA",
103             "MaxProtocol" => "TLSv1.2",
104             #Deliberately set groups to not include the certificate group. This
105             #should fail
106             "Groups" => "P-384",
107             "RequestCAFile" => test_pem("root-cert.pem"),
108         },
109         test   => {
110             "ExpectedResult" => "ServerFail"
111         },
112     },
113     {
114         name => "Ed25519 CipherString and Signature Algorithm Selection",
115         server => $server,
116         client => {
117             "CipherString" => "aECDSA",
118             "MaxProtocol" => "TLSv1.2",
119             "SignatureAlgorithms" => "ed25519:ECDSA+SHA256",
120             "RequestCAFile" => test_pem("root-cert.pem"),
121         },
122         test   => {
123             "ExpectedServerCertType" =>, "Ed25519",
124             "ExpectedServerSignType" =>, "Ed25519",
125             # Note: certificate_authorities not sent for TLS < 1.3
126             "ExpectedServerCANames" =>, "empty",
127             "ExpectedResult" => "Success"
128         },
129     },
130     {
131         name => "Ed448 CipherString and Signature Algorithm Selection",
132         server => $server,
133         client => {
134             "CipherString" => "aECDSA",
135             "MaxProtocol" => "TLSv1.2",
136             "SignatureAlgorithms" => "ed448:ECDSA+SHA256",
137             "RequestCAFile" => test_pem("root-ed448-cert.pem"),
138             "VerifyCAFile" => test_pem("root-ed448-cert.pem"),
139         },
140         test   => {
141             "ExpectedServerCertType" =>, "Ed448",
142             "ExpectedServerSignType" =>, "Ed448",
143             # Note: certificate_authorities not sent for TLS < 1.3
144             "ExpectedServerCANames" =>, "empty",
145             "ExpectedResult" => "Success"
146         },
147     },
148     {
149         name => "ECDSA with brainpool",
150         server =>  {
151             "Certificate" => test_pem("server-ecdsa-brainpoolP256r1-cert.pem"),
152             "PrivateKey" => test_pem("server-ecdsa-brainpoolP256r1-key.pem"),
153             "Groups" => "brainpoolP256r1",
154         },
155         client => {
156             #We don't restrict this to TLSv1.2, although use of brainpool
157             #should force this anyway so that this should succeed
158             "CipherString" => "aECDSA",
159             "RequestCAFile" => test_pem("root-cert.pem"),
160             "Groups" => "brainpoolP256r1",
161         },
162         test   => {
163             "ExpectedServerCertType" =>, "brainpoolP256r1",
164             "ExpectedServerSignType" =>, "EC",
165             # Note: certificate_authorities not sent for TLS < 1.3
166             "ExpectedServerCANames" =>, "empty",
167             "ExpectedResult" => "Success"
168         },
169     },
170     {
171         name => "RSA CipherString Selection",
172         server => $server,
173         client => {
174             "CipherString" => "aRSA",
175             "MaxProtocol" => "TLSv1.2",
176         },
177         test   => {
178             "ExpectedServerCertType" =>, "RSA",
179             "ExpectedServerSignType" =>, "RSA-PSS",
180             "ExpectedResult" => "Success"
181         },
182     },
183     {
184         name => "RSA-PSS Certificate CipherString Selection",
185         server => $server_pss,
186         client => {
187             "CipherString" => "aRSA",
188             "MaxProtocol" => "TLSv1.2",
189         },
190         test   => {
191             "ExpectedServerCertType" =>, "RSA-PSS",
192             "ExpectedServerSignType" =>, "RSA-PSS",
193             "ExpectedResult" => "Success"
194         },
195     },
196     {
197         name => "P-256 CipherString and Signature Algorithm Selection",
198         server => $server,
199         client => {
200             "CipherString" => "aECDSA",
201             "MaxProtocol" => "TLSv1.2",
202             "SignatureAlgorithms" => "ECDSA+SHA256:ed25519",
203         },
204         test   => {
205             "ExpectedServerCertType" => "P-256",
206             "ExpectedServerSignHash" => "SHA256",
207             "ExpectedServerSignType" => "EC",
208             "ExpectedResult" => "Success"
209         },
210     },
211     {
212         name => "Ed25519 CipherString and Curves Selection",
213         server => $server,
214         client => {
215             "CipherString" => "aECDSA",
216             "MaxProtocol" => "TLSv1.2",
217             "SignatureAlgorithms" => "ECDSA+SHA256:ed25519",
218             # Excluding P-256 from the supported curves list means server
219             # certificate should be Ed25519 and not P-256
220             "Curves" => "X25519"
221         },
222         test   => {
223             "ExpectedServerCertType" =>, "Ed25519",
224             "ExpectedServerSignType" =>, "Ed25519",
225             "ExpectedResult" => "Success"
226         },
227     },
228     {
229         name => "Ed448 CipherString and Curves Selection",
230         server => $server,
231         client => {
232             "CipherString" => "aECDSA",
233             "MaxProtocol" => "TLSv1.2",
234             "SignatureAlgorithms" => "ECDSA+SHA256:ed448",
235             "VerifyCAFile" => test_pem("root-ed448-cert.pem"),
236             # Excluding P-256 from the supported curves list means server
237             # certificate should be Ed25519 and not P-256
238             "Curves" => "X448"
239         },
240         test   => {
241             "ExpectedServerCertType" =>, "Ed448",
242             "ExpectedServerSignType" =>, "Ed448",
243             "ExpectedResult" => "Success"
244         },
245     },
246     {
247         name => "ECDSA CipherString Selection, no ECDSA certificate",
248         server => {
249             "MaxProtocol" => "TLSv1.2"
250         },
251         client => {
252             "CipherString" => "aECDSA",
253             "MaxProtocol" => "TLSv1.2"
254         },
255         test   => {
256             "ExpectedResult" => "ServerFail"
257         },
258     },
259     {
260         name => "ECDSA Signature Algorithm Selection",
261         server => $server,
262         client => {
263             "SignatureAlgorithms" => "ECDSA+SHA256",
264         },
265         test   => {
266             "ExpectedServerCertType" => "P-256",
267             "ExpectedServerSignHash" => "SHA256",
268             "ExpectedServerSignType" => "EC",
269             "ExpectedResult" => "Success"
270         },
271     },
272     {
273         name => "ECDSA Signature Algorithm Selection SHA384",
274         server => $server,
275         client => {
276             "SignatureAlgorithms" => "ECDSA+SHA384",
277         },
278         test   => {
279             "ExpectedServerCertType" => "P-256",
280             "ExpectedServerSignHash" => "SHA384",
281             "ExpectedServerSignType" => "EC",
282             "ExpectedResult" => "Success"
283         },
284     },
285     {
286         name => "ECDSA Signature Algorithm Selection SHA1",
287         server => $server,
288         client => {
289             "SignatureAlgorithms" => "ECDSA+SHA1",
290         },
291         test   => {
292             "ExpectedServerCertType" => "P-256",
293             "ExpectedServerSignHash" => "SHA1",
294             "ExpectedServerSignType" => "EC",
295             "ExpectedResult" => "Success"
296         },
297     },
298     {
299         name => "ECDSA Signature Algorithm Selection compressed point",
300         server => {
301             "ECDSA.Certificate" => test_pem("server-cecdsa-cert.pem"),
302             "ECDSA.PrivateKey" => test_pem("server-cecdsa-key.pem"),
303             "MaxProtocol" => "TLSv1.2"
304         },
305         client => {
306             "SignatureAlgorithms" => "ECDSA+SHA256",
307         },
308         test   => {
309             "ExpectedServerCertType" => "P-256",
310             "ExpectedServerSignHash" => "SHA256",
311             "ExpectedServerSignType" => "EC",
312             "ExpectedResult" => "Success"
313         },
314     },
315     {
316         name => "ECDSA Signature Algorithm Selection, no ECDSA certificate",
317         server => {
318              "MaxProtocol" => "TLSv1.2"
319         },
320         client => {
321             "SignatureAlgorithms" => "ECDSA+SHA256",
322         },
323         test   => {
324             "ExpectedResult" => "ServerFail"
325         },
326     },
327     {
328         name => "RSA Signature Algorithm Selection",
329         server => $server,
330         client => {
331             "SignatureAlgorithms" => "RSA+SHA256",
332         },
333         test   => {
334             "ExpectedServerCertType" => "RSA",
335             "ExpectedServerSignHash" => "SHA256",
336             "ExpectedServerSignType" => "RSA",
337             "ExpectedResult" => "Success"
338         },
339     },
340     {
341         name => "RSA-PSS Signature Algorithm Selection",
342         server => $server,
343         client => {
344             "SignatureAlgorithms" => "RSA-PSS+SHA256",
345         },
346         test   => {
347             "ExpectedServerCertType" => "RSA",
348             "ExpectedServerSignHash" => "SHA256",
349             "ExpectedServerSignType" => "RSA-PSS",
350             "ExpectedResult" => "Success"
351         },
352     },
353     {
354         name => "RSA-PSS Certificate Legacy Signature Algorithm Selection",
355         server => $server_pss,
356         client => {
357             "SignatureAlgorithms" => "RSA-PSS+SHA256",
358         },
359         test   => {
360             "ExpectedServerCertType" => "RSA",
361             "ExpectedServerSignHash" => "SHA256",
362             "ExpectedServerSignType" => "RSA-PSS",
363             "ExpectedResult" => "Success"
364         },
365     },
366     {
367         name => "RSA-PSS Certificate Unified Signature Algorithm Selection",
368         server => $server_pss,
369         client => {
370             "SignatureAlgorithms" => "rsa_pss_pss_sha256",
371         },
372         test   => {
373             "ExpectedServerCertType" => "RSA-PSS",
374             "ExpectedServerSignHash" => "SHA256",
375             "ExpectedServerSignType" => "RSA-PSS",
376             "ExpectedResult" => "Success"
377         },
378     },
379     {
380         name => "Only RSA-PSS Certificate",
381         server => $server_pss_only,
382         client => {},
383         test   => {
384             "ExpectedServerCertType" => "RSA-PSS",
385             "ExpectedServerSignHash" => "SHA256",
386             "ExpectedServerSignType" => "RSA-PSS",
387             "ExpectedResult" => "Success"
388         },
389     },
390     {
391         name => "Only RSA-PSS Certificate Valid Signature Algorithms",
392         server => $server_pss_only,
393         client => {
394             "SignatureAlgorithms" => "rsa_pss_pss_sha512",
395         },
396         test   => {
397             "ExpectedServerCertType" => "RSA-PSS",
398             "ExpectedServerSignHash" => "SHA512",
399             "ExpectedServerSignType" => "RSA-PSS",
400             "ExpectedResult" => "Success"
401         },
402     },
403     {
404         name => "RSA-PSS Certificate, no PSS signature algorithms",
405         server => $server_pss_only,
406         client => {
407             "SignatureAlgorithms" => "RSA+SHA256",
408         },
409         test   => {
410             "ExpectedResult" => "ServerFail"
411         },
412     },
413     {
414         name => "Only RSA-PSS Restricted Certificate",
415         server => $server_pss_restrict_only,
416         client => {},
417         test   => {
418             "ExpectedServerCertType" => "RSA-PSS",
419             "ExpectedServerSignHash" => "SHA256",
420             "ExpectedServerSignType" => "RSA-PSS",
421             "ExpectedResult" => "Success"
422         },
423     },
424     {
425         name => "RSA-PSS Restricted Certificate Valid Signature Algorithms",
426         server => $server_pss_restrict_only,
427         client => {
428             "SignatureAlgorithms" => "rsa_pss_pss_sha256:rsa_pss_pss_sha512",
429         },
430         test   => {
431             "ExpectedServerCertType" => "RSA-PSS",
432             "ExpectedServerSignHash" => "SHA256",
433             "ExpectedServerSignType" => "RSA-PSS",
434             "ExpectedResult" => "Success"
435         },
436     },
437     {
438         name => "RSA-PSS Restricted Cert client prefers invalid Signature Algorithm",
439         server => $server_pss_restrict_only,
440         client => {
441             "SignatureAlgorithms" => "rsa_pss_pss_sha512:rsa_pss_pss_sha256",
442         },
443         test   => {
444             "ExpectedServerCertType" => "RSA-PSS",
445             "ExpectedServerSignHash" => "SHA256",
446             "ExpectedServerSignType" => "RSA-PSS",
447             "ExpectedResult" => "Success"
448         },
449     },
450     {
451         name => "RSA-PSS Restricted Certificate Invalid Signature Algorithms",
452         server => $server_pss_restrict_only,
453         client => {
454             "SignatureAlgorithms" => "rsa_pss_pss_sha512",
455         },
456         test   => {
457             "ExpectedResult" => "ServerFail"
458         },
459     },
460     {
461         name => "RSA key exchange with all RSA certificate types",
462         server => $server_rsa_all,
463         client => {
464             "CipherString" => "kRSA",
465             "MaxProtocol" => "TLSv1.2",
466         },
467         test   => {
468             "ExpectedServerCertType" =>, "RSA",
469             "ExpectedResult" => "Success"
470         },
471     },
472     {
473         name => "RSA key exchange with only RSA-PSS certificate",
474         server => $server_pss_only,
475         client => {
476             "CipherString" => "kRSA",
477             "MaxProtocol" => "TLSv1.2",
478         },
479         test   => {
480             "ExpectedResult" => "ServerFail"
481         },
482     },
483     {
484         name => "Suite B P-256 Hash Algorithm Selection",
485         server =>  {
486             "ECDSA.Certificate" => test_pem("p256-server-cert.pem"),
487             "ECDSA.PrivateKey" => test_pem("p256-server-key.pem"),
488             "MaxProtocol" => "TLSv1.2",
489             "CipherString" => "SUITEB128"
490         },
491         client => {
492             "VerifyCAFile" => test_pem("p384-root.pem"),
493             "SignatureAlgorithms" => "ECDSA+SHA384:ECDSA+SHA256"
494         },
495         test   => {
496             "ExpectedServerCertType" => "P-256",
497             "ExpectedServerSignHash" => "SHA256",
498             "ExpectedServerSignType" => "EC",
499             "ExpectedResult" => "Success"
500         },
501     },
502     {
503         name => "Suite B P-384 Hash Algorithm Selection",
504         server =>  {
505             "ECDSA.Certificate" => test_pem("p384-server-cert.pem"),
506             "ECDSA.PrivateKey" => test_pem("p384-server-key.pem"),
507             "MaxProtocol" => "TLSv1.2",
508             "CipherString" => "SUITEB128"
509         },
510         client => {
511             "VerifyCAFile" => test_pem("p384-root.pem"),
512             "SignatureAlgorithms" => "ECDSA+SHA256:ECDSA+SHA384"
513         },
514         test   => {
515             "ExpectedServerCertType" => "P-384",
516             "ExpectedServerSignHash" => "SHA384",
517             "ExpectedServerSignType" => "EC",
518             "ExpectedResult" => "Success"
519         },
520     },
521     {
522         name => "TLS 1.2 Ed25519 Client Auth",
523         server => {
524             "VerifyCAFile" => test_pem("root-cert.pem"),
525             "VerifyMode" => "Require"
526         },
527         client => {
528             "Ed25519.Certificate" => test_pem("client-ed25519-cert.pem"),
529             "Ed25519.PrivateKey" => test_pem("client-ed25519-key.pem"),
530             "MinProtocol" => "TLSv1.2",
531             "MaxProtocol" => "TLSv1.2"
532         },
533         test   => {
534             "ExpectedClientCertType" => "Ed25519",
535             "ExpectedClientSignType" => "Ed25519",
536             "ExpectedResult" => "Success"
537         },
538     },
539     {
540         name => "TLS 1.2 Ed448 Client Auth",
541         server => {
542             "VerifyCAFile" => test_pem("root-cert.pem"),
543             "VerifyMode" => "Require"
544         },
545         client => {
546             "Ed448.Certificate" => test_pem("client-ed448-cert.pem"),
547             "Ed448.PrivateKey" => test_pem("client-ed448-key.pem"),
548             "MinProtocol" => "TLSv1.2",
549             "MaxProtocol" => "TLSv1.2"
550         },
551         test   => {
552             "ExpectedClientCertType" => "Ed448",
553             "ExpectedClientSignType" => "Ed448",
554             "ExpectedResult" => "Success"
555         },
556     },
557 );
558
559 my @tests_tls_1_1 = (
560     {
561         name => "Only RSA-PSS Certificate, TLS v1.1",
562         server => $server_pss_only,
563         client => {
564             "MaxProtocol" => "TLSv1.1",
565         },
566         test   => {
567             "ExpectedResult" => "ServerFail"
568         },
569     },
570 );
571
572 push @tests, @tests_tls_1_1 unless disabled("tls1_1");
573
574 my $server_tls_1_3 = {
575     "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
576     "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
577     "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
578     "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
579     "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
580     "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
581     "MinProtocol" => "TLSv1.3",
582     "MaxProtocol" => "TLSv1.3"
583 };
584
585 my $server_tls_1_3_pss = {
586     "PSS.Certificate" => test_pem("server-pss-cert.pem"),
587     "PSS.PrivateKey" => test_pem("server-pss-key.pem"),
588     "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
589     "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
590     "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
591     "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
592     "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
593     "Ed448.PrivateKey" => test_pem("server-ed449-key.pem"),
594     "MinProtocol" => "TLSv1.3",
595     "MaxProtocol" => "TLSv1.3"
596 };
597
598 my $client_tls_1_3 = {
599     "RSA.Certificate" => test_pem("ee-client-chain.pem"),
600     "RSA.PrivateKey" => test_pem("ee-key.pem"),
601     "ECDSA.Certificate" => test_pem("ee-ecdsa-client-chain.pem"),
602     "ECDSA.PrivateKey" => test_pem("ee-ecdsa-key.pem"),
603     "MinProtocol" => "TLSv1.3",
604     "MaxProtocol" => "TLSv1.3"
605 };
606
607 my @tests_tls_1_3 = (
608     {
609         name => "TLS 1.3 ECDSA Signature Algorithm Selection",
610         server => $server_tls_1_3,
611         client => {
612             "SignatureAlgorithms" => "ECDSA+SHA256",
613         },
614         test   => {
615             "ExpectedServerCertType" => "P-256",
616             "ExpectedServerSignHash" => "SHA256",
617             "ExpectedServerSignType" => "EC",
618             "ExpectedServerCANames" => "empty",
619             "ExpectedResult" => "Success"
620         },
621     },
622     {
623         name => "TLS 1.3 ECDSA Signature Algorithm Selection compressed point",
624         server => {
625             "ECDSA.Certificate" => test_pem("server-cecdsa-cert.pem"),
626             "ECDSA.PrivateKey" => test_pem("server-cecdsa-key.pem"),
627             "MinProtocol" => "TLSv1.3",
628             "MaxProtocol" => "TLSv1.3"
629         },
630         client => {
631             "SignatureAlgorithms" => "ECDSA+SHA256",
632         },
633         test   => {
634             "ExpectedServerCertType" => "P-256",
635             "ExpectedServerSignHash" => "SHA256",
636             "ExpectedServerSignType" => "EC",
637             "ExpectedServerCANames" => "empty",
638             "ExpectedResult" => "Success"
639         },
640     },
641     {
642         name => "TLS 1.3 ECDSA Signature Algorithm Selection SHA1",
643         server => $server_tls_1_3,
644         client => {
645             "SignatureAlgorithms" => "ECDSA+SHA1",
646         },
647         test   => {
648             "ExpectedResult" => "ServerFail"
649         },
650     },
651     {
652         name => "TLS 1.3 ECDSA Signature Algorithm Selection with PSS",
653         server => $server_tls_1_3,
654         client => {
655             "SignatureAlgorithms" => "ECDSA+SHA256:RSA-PSS+SHA256",
656             "RequestCAFile" => test_pem("root-cert.pem"),
657         },
658         test   => {
659             "ExpectedServerCertType" => "P-256",
660             "ExpectedServerSignHash" => "SHA256",
661             "ExpectedServerSignType" => "EC",
662             "ExpectedServerCANames" => test_pem("root-cert.pem"),
663             "ExpectedResult" => "Success"
664         },
665     },
666     {
667         name => "TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS",
668         server => $server_tls_1_3,
669         client => {
670             "SignatureAlgorithms" => "ECDSA+SHA384:RSA-PSS+SHA384",
671         },
672         test   => {
673             "ExpectedServerCertType" => "RSA",
674             "ExpectedServerSignHash" => "SHA384",
675             "ExpectedServerSignType" => "RSA-PSS",
676             "ExpectedResult" => "Success"
677         },
678     },
679     {
680         name => "TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate",
681         server => {
682             "MinProtocol" => "TLSv1.3",
683             "MaxProtocol" => "TLSv1.3"
684         },
685         client => {
686             "SignatureAlgorithms" => "ECDSA+SHA256",
687         },
688         test   => {
689             "ExpectedResult" => "ServerFail"
690         },
691     },
692     {
693         name => "TLS 1.3 RSA Signature Algorithm Selection, no PSS",
694         server => $server_tls_1_3,
695         client => {
696             "SignatureAlgorithms" => "RSA+SHA256",
697         },
698         test   => {
699             "ExpectedResult" => "ServerFail"
700         },
701     },
702     {
703         name => "TLS 1.3 RSA-PSS Signature Algorithm Selection",
704         server => $server_tls_1_3,
705         client => {
706             "SignatureAlgorithms" => "RSA-PSS+SHA256",
707         },
708         test   => {
709             "ExpectedServerCertType" => "RSA",
710             "ExpectedServerSignHash" => "SHA256",
711             "ExpectedServerSignType" => "RSA-PSS",
712             "ExpectedResult" => "Success"
713         },
714     },
715     {
716         name => "TLS 1.3 Ed25519 Signature Algorithm Selection",
717         server => $server_tls_1_3,
718         client => {
719             "SignatureAlgorithms" => "ed25519",
720         },
721         test   => {
722             "ExpectedServerCertType" => "Ed25519",
723             "ExpectedServerSignType" => "Ed25519",
724             "ExpectedResult" => "Success"
725         },
726     },
727     {
728         name => "TLS 1.3 Ed448 Signature Algorithm Selection",
729         server => $server_tls_1_3,
730         client => {
731             "SignatureAlgorithms" => "ed448",
732             "VerifyCAFile" => test_pem("root-ed448-cert.pem"),
733         },
734         test   => {
735             "ExpectedServerCertType" => "Ed448",
736             "ExpectedServerSignType" => "Ed448",
737             "ExpectedResult" => "Success"
738         },
739     },
740     {
741         name => "TLS 1.3 Ed25519 CipherString and Groups Selection",
742         server => $server_tls_1_3,
743         client => {
744             "SignatureAlgorithms" => "ECDSA+SHA256:ed25519",
745             # Excluding P-256 from the supported groups list should
746             # mean server still uses a P-256 certificate because supported
747             # groups is not used in signature selection for TLS 1.3
748             "Groups" => "X25519"
749         },
750         test   => {
751             "ExpectedServerCertType" =>, "P-256",
752             "ExpectedServerSignType" =>, "EC",
753             "ExpectedResult" => "Success"
754         },
755     },
756     {
757         name => "TLS 1.3 Ed448 CipherString and Groups Selection",
758         server => $server_tls_1_3,
759         client => {
760             "SignatureAlgorithms" => "ECDSA+SHA256:ed448",
761             # Excluding P-256 from the supported groups list should
762             # mean server still uses a P-256 certificate because supported
763             # groups is not used in signature selection for TLS 1.3
764             "Groups" => "X448"
765         },
766         test   => {
767             "ExpectedServerCertType" =>, "P-256",
768             "ExpectedServerSignType" =>, "EC",
769             "ExpectedResult" => "Success"
770         },
771     },
772     {
773         name => "TLS 1.3 RSA Client Auth Signature Algorithm Selection",
774         server => {
775             "ClientSignatureAlgorithms" => "PSS+SHA256",
776             "VerifyCAFile" => test_pem("root-cert.pem"),
777             "VerifyMode" => "Require"
778         },
779         client => $client_tls_1_3,
780         test   => {
781             "ExpectedClientCertType" => "RSA",
782             "ExpectedClientSignHash" => "SHA256",
783             "ExpectedClientSignType" => "RSA-PSS",
784             "ExpectedClientCANames" => "empty",
785             "ExpectedResult" => "Success"
786         },
787     },
788     {
789         name => "TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names",
790         server => {
791             "ClientSignatureAlgorithms" => "PSS+SHA256",
792             "VerifyCAFile" => test_pem("root-cert.pem"),
793             "RequestCAFile" => test_pem("root-cert.pem"),
794             "VerifyMode" => "Require"
795         },
796         client => $client_tls_1_3,
797         test   => {
798             "ExpectedClientCertType" => "RSA",
799             "ExpectedClientSignHash" => "SHA256",
800             "ExpectedClientSignType" => "RSA-PSS",
801             "ExpectedClientCANames" => test_pem("root-cert.pem"),
802             "ExpectedResult" => "Success"
803         },
804     },
805     {
806         name => "TLS 1.3 ECDSA Client Auth Signature Algorithm Selection",
807         server => {
808             "ClientSignatureAlgorithms" => "ECDSA+SHA256",
809             "VerifyCAFile" => test_pem("root-cert.pem"),
810             "VerifyMode" => "Require"
811         },
812         client => $client_tls_1_3,
813         test   => {
814             "ExpectedClientCertType" => "P-256",
815             "ExpectedClientSignHash" => "SHA256",
816             "ExpectedClientSignType" => "EC",
817             "ExpectedResult" => "Success"
818         },
819     },
820     {
821         name => "TLS 1.3 Ed25519 Client Auth",
822         server => {
823             "VerifyCAFile" => test_pem("root-cert.pem"),
824             "VerifyMode" => "Require"
825         },
826         client => {
827             "EdDSA.Certificate" => test_pem("client-ed25519-cert.pem"),
828             "EdDSA.PrivateKey" => test_pem("client-ed25519-key.pem"),
829             "MinProtocol" => "TLSv1.3",
830             "MaxProtocol" => "TLSv1.3"
831         },
832         test   => {
833             "ExpectedClientCertType" => "Ed25519",
834             "ExpectedClientSignType" => "Ed25519",
835             "ExpectedResult" => "Success"
836         },
837     },
838     {
839         name => "TLS 1.3 Ed448 Client Auth",
840         server => {
841             "VerifyCAFile" => test_pem("root-cert.pem"),
842             "VerifyMode" => "Require"
843         },
844         client => {
845             "EdDSA.Certificate" => test_pem("client-ed448-cert.pem"),
846             "EdDSA.PrivateKey" => test_pem("client-ed448-key.pem"),
847             "MinProtocol" => "TLSv1.3",
848             "MaxProtocol" => "TLSv1.3"
849         },
850         test   => {
851             "ExpectedClientCertType" => "Ed448",
852             "ExpectedClientSignType" => "Ed448",
853             "ExpectedResult" => "Success"
854         },
855     },
856     {
857         name => "TLS 1.3 ECDSA with brainpool",
858         server =>  {
859             "Certificate" => test_pem("server-ecdsa-brainpoolP256r1-cert.pem"),
860             "PrivateKey" => test_pem("server-ecdsa-brainpoolP256r1-key.pem"),
861             "Groups" => "brainpoolP256r1",
862         },
863         client => {
864             "RequestCAFile" => test_pem("root-cert.pem"),
865             "Groups" => "brainpoolP256r1",
866             "MinProtocol" => "TLSv1.3",
867             "MaxProtocol" => "TLSv1.3"
868         },
869         test   => {
870             "ExpectedResult" => "ServerFail"
871         },
872     },
873 );
874
875 push @tests, @tests_tls_1_3 unless disabled("tls1_3");
876
877 my @tests_dsa_tls_1_2 = (
878     {
879         name => "TLS 1.2 DSA Certificate Test",
880         server => {
881             "DSA.Certificate" => test_pem("server-dsa-cert.pem"),
882             "DSA.PrivateKey" => test_pem("server-dsa-key.pem"),
883             "DHParameters" => test_pem("dhp2048.pem"),
884             "MinProtocol" => "TLSv1.2",
885             "MaxProtocol" => "TLSv1.2",
886             "CipherString" => "ALL",
887         },
888         client => {
889             "SignatureAlgorithms" => "DSA+SHA256:DSA+SHA1",
890             "CipherString" => "ALL",
891         },
892         test   => {
893             "ExpectedResult" => "Success"
894         },
895     },
896 );
897
898 my @tests_dsa_tls_1_3 = (
899     {
900         name => "TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms",
901         server => {
902             "ClientSignatureAlgorithms" => "ECDSA+SHA1:DSA+SHA256:RSA+SHA256",
903             "VerifyCAFile" => test_pem("root-cert.pem"),
904             "VerifyMode" => "Request"
905         },
906         client => {},
907         test   => {
908             "ExpectedResult" => "ServerFail"
909         },
910     },
911     {
912         name => "TLS 1.3 DSA Certificate Test",
913         server => {
914             "DSA.Certificate" => test_pem("server-dsa-cert.pem"),
915             "DSA.PrivateKey" => test_pem("server-dsa-key.pem"),
916             "MinProtocol" => "TLSv1.3",
917             "MaxProtocol" => "TLSv1.3",
918             "CipherString" => "ALL",
919         },
920         client => {
921             "SignatureAlgorithms" => "DSA+SHA1:DSA+SHA256:ECDSA+SHA256",
922             "CipherString" => "ALL",
923         },
924         test   => {
925             "ExpectedResult" => "ServerFail"
926         },
927     },
928 );
929
930 if (!disabled("dsa")) {
931     push @tests, @tests_dsa_tls_1_2 unless disabled("dh");
932     push @tests, @tests_dsa_tls_1_3 unless disabled("tls1_3");
933 }