diff options
Diffstat (limited to 'src/regress/lib/libcrypto/x509/callback.pl')
-rw-r--r-- | src/regress/lib/libcrypto/x509/callback.pl | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/regress/lib/libcrypto/x509/callback.pl b/src/regress/lib/libcrypto/x509/callback.pl new file mode 100644 index 0000000000..410dfc1a18 --- /dev/null +++ b/src/regress/lib/libcrypto/x509/callback.pl | |||
@@ -0,0 +1,105 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # | ||
3 | # Copyright (c) 2021 Bob Beck <beck@openbsd.org> | ||
4 | # | ||
5 | # Permission to use, copy, modify, and distribute this software for any | ||
6 | # purpose with or without fee is hereby granted, provided that the above | ||
7 | # copyright notice and this permission notice appear in all copies. | ||
8 | # | ||
9 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
10 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
11 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
12 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
13 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
14 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
15 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
16 | # | ||
17 | |||
18 | # Validate that we call out with the same chain on the callback with the legacy | ||
19 | # verifier as we do with the new verifier in compatibility mode. We ignore cases | ||
20 | # where one of the tests does not succesd to find a chain, as the error paths | ||
21 | # may be different. It's also ok for the new verifier to have signalled an | ||
22 | # error before finding a chain since it may try something and then back up. | ||
23 | |||
24 | my $Test; | ||
25 | my $State = "Read"; | ||
26 | my @Legacy; | ||
27 | my @Modern; | ||
28 | my $Mfail; | ||
29 | my @Lfail; | ||
30 | my $Failures = ""; | ||
31 | |||
32 | while (<>) { | ||
33 | chomp; | ||
34 | print "$_\n"; | ||
35 | if ($State eq "Read") { | ||
36 | if (/^== Test/) { | ||
37 | $Test = $_; | ||
38 | @Legacy = (); | ||
39 | @Modern = (); | ||
40 | $Mfail = 0; | ||
41 | $Lfail = 0; | ||
42 | $State = "Read"; | ||
43 | next; | ||
44 | } | ||
45 | if (/^== Legacy/) { | ||
46 | $State = "Legacy"; | ||
47 | next; | ||
48 | } | ||
49 | if (/^== Modern/) { | ||
50 | $State = "Modern"; | ||
51 | next; | ||
52 | } | ||
53 | } | ||
54 | if ($State eq "Legacy") { | ||
55 | if (/^INFO/) { | ||
56 | $State = "Read"; | ||
57 | next; | ||
58 | } | ||
59 | if (/^FAIL/) { | ||
60 | $Lfail = 1; | ||
61 | $State = "Read"; | ||
62 | next; | ||
63 | } | ||
64 | push @Legacy, ($_); | ||
65 | } | ||
66 | if ($State eq "Modern") { | ||
67 | if (/^INFO/) { | ||
68 | $State = "Process"; | ||
69 | next; | ||
70 | } | ||
71 | if (/^FAIL/) { | ||
72 | $Mfail = 1; | ||
73 | $State = "Process"; | ||
74 | next; | ||
75 | } | ||
76 | push @Modern, ($_); | ||
77 | } | ||
78 | if ($State eq "Process") { | ||
79 | my $mlen = scalar(@Modern); | ||
80 | my $llen = scalar(@Legacy); | ||
81 | print "$Test has $llen legacy lines and $mlen modern lines\n"; | ||
82 | while ($mlen > 0 && $llen > 0) { | ||
83 | my $lline = $Legacy[$llen - 1]; | ||
84 | my $mline = $Modern[$mlen - 1]; | ||
85 | |||
86 | if (!@Mfail && !$Lfail && $mline =~ /error 0 cert/ && $lline =~ /error 0 cert/) { | ||
87 | if ($lline ne $mline) { | ||
88 | print "MISMATCH: $lline VS $mline\n"; | ||
89 | $Failures .= "$Test "; | ||
90 | } | ||
91 | } | ||
92 | $mlen--; | ||
93 | $llen--; | ||
94 | } | ||
95 | $State = "Read"; | ||
96 | next; | ||
97 | } | ||
98 | } | ||
99 | print "=============Test Summary============\n"; | ||
100 | if ($Failures ne "") { | ||
101 | print "FAIL: Mismatech on $Failures\n"; | ||
102 | exit 1; | ||
103 | } | ||
104 | print "Success: No Mismatches\n"; | ||
105 | exit 0; | ||