Use common source files for FIPS mode and utilize same optimizations.
[oweals/openssl.git] / fips-1.0 / mkfipsscr.pl
1 #!/usr/local/bin/perl -w
2
3 my @fips_tests = (
4
5 # FIPS test descriptions
6
7 # DSA tests
8
9 ["dsa", "PQGGen", "fips_dssvs pqg"],
10 ["dsa", "KeyPair", "fips_dssvs keypair"],
11 ["dsa", "SigGen", "fips_dssvs siggen"],
12 ["dsa", "SigVer", "fips_dssvs sigver"],
13
14 # SHA tests
15
16 ["sha", "SHA1LongMsg", "fips_shatest"],
17 ["sha", "SHA1Monte", "fips_shatest"],
18 ["sha", "SHA1ShortMsg", "fips_shatest"],
19 ["sha", "SHA224LongMsg", "fips_shatest"],
20 ["sha", "SHA224Monte", "fips_shatest"],
21 ["sha", "SHA224ShortMsg", "fips_shatest"],
22 ["sha", "SHA256LongMsg", "fips_shatest"],
23 ["sha", "SHA256Monte", "fips_shatest"],
24 ["sha", "SHA256ShortMsg", "fips_shatest"],
25 ["sha", "SHA384LongMsg", "fips_shatest"],
26 ["sha", "SHA384Monte", "fips_shatest"],
27 ["sha", "SHA384ShortMsg", "fips_shatest"],
28 ["sha", "SHA512LongMsg", "fips_shatest"],
29 ["sha", "SHA512Monte", "fips_shatest"],
30 ["sha", "SHA512ShortMsg", "fips_shatest"],
31
32 # AES tests, file search mode
33 ["aes", "\@dir", "fips_aesavs -f"],
34
35 # DES tests, file search mode
36 ["tdes", "\@dir", "fips_desmovs -f"],
37
38 # HMAC
39
40 ["hmac", "HMAC", "fips_hmactest"],
41
42 # RAND tests
43
44 ["rng", "ANSI931_AES128MCT", "fips_rngvs mct"],
45 ["rng", "ANSI931_AES192MCT", "fips_rngvs mct"],
46 ["rng", "ANSI931_AES256MCT", "fips_rngvs mct"],
47 ["rng", "ANSI931_AES128VST", "fips_rngvs vst"],
48 ["rng", "ANSI931_AES192VST", "fips_rngvs vst"],
49 ["rng", "ANSI931_AES256VST", "fips_rngvs vst"],
50
51 # RSA tests
52
53 ["rsa", "SigGen15", "fips_rsastest"],
54 ["rsa", "SigVer15", "fips_rsavtest"],
55 ["rsa", "SigGenPSS", "fips_rsastest -saltlen 0"],
56 ["rsa", "SigVerPSS", "fips_rsavtest -saltlen 0"],
57 ["rsa", "SigGenRSA", "fips_rsastest -x931"],
58 ["rsa", "SigVerRSA", "fips_rsavtest -x931"],
59 ["rsa", "KeyGenRSA", "fips_rsagtest"],
60 ["rsa_salt_62", "SigGenPSS", "fips_rsastest -saltlen 62"],
61 ["rsa_salt_62", "SigVerPSS", "fips_rsavtest -saltlen 62"]
62
63 );
64
65 my $lnum = 0;
66 my $win32 = 0;
67 my $onedir = 0;
68 my $ltdir = "";
69 my $tvdir;
70 my $tvprefix;
71 my $tprefix;
72 my $shwrap_prefix;
73
74 foreach (@ARGV)
75         {
76         if ($_ eq "--win32")
77                 {
78                 $win32 = 1;
79                 }
80         elsif ($_ eq "--onedir")
81                 {
82                 $onedir = 1;
83                 }
84         elsif (/--dir=(.*)$/)
85                 {
86                 $tvdir = $1;
87                 }
88         elsif (/--tprefix=(.*)$/)
89                 {
90                 $tprefix = $1;
91                 }
92         elsif (/--tvprefix=(.*)$/)
93                 {
94                 $tvprefix = $1;
95                 }
96         elsif (/--shwrap_prefix=(.*)$/)
97                 {
98                 $shwrap_prefix = $1;
99                 }
100         elsif (/--outfile=(.*)$/)
101                 {
102                 $outfile = $1;
103                 }
104         }
105
106 $tvdir = "testvectors" unless defined $tvdir;
107
108 if ($win32)
109         {
110         if ($onedir)
111                 {
112                 $tvprefix = "" unless defined $tvprefix;
113                 }
114         else
115                 {
116                 $tvprefix = "..\\fips-1.0\\" unless defined $tvprefix;
117                 }
118         $tprefix = ".\\" unless defined $tprefix;
119         $outfile = "fipstests.bat" unless defined $outfile;
120         open(OUT, ">$outfile");
121
122         print OUT <<END;
123 \@echo off
124 rem Test vector run script
125 rem Auto generated by mkfipsscr.pl script
126 rem Do not edit
127
128 END
129
130         }
131 else
132         {
133         $tvprefix = "" unless defined $tvprefix;
134         if ($onedir)
135                 {
136                 $tprefix = "./" unless defined $tprefix;
137                 $shwrap_prefix = "./" unless defined $shwrap_prefix;
138                 }
139         else
140                 {
141                 $tprefix = "../test/" unless defined $tprefix;
142                 $shwrap_prefix = "../util/" unless defined $shwrap_prefix;
143                 }
144         $outfile = "fipstests.sh" unless defined $outfile;
145         open(OUT, ">$outfile");
146
147         print OUT <<END;
148 #!/bin/sh
149
150 # Test vector run script
151 # Auto generated by mkfipsscr.pl script
152 # Do not edit
153
154 END
155
156         }
157
158 foreach(@fips_tests)
159         {
160         my ($tdir, $fprefix, $tcmd) = @$_;
161         $lnum++;
162         if ($tdir ne $ltdir)
163                 {
164                 $ltdir = $tdir;
165                 test_dir($win32, $ltdir);
166                 }
167         test_line($win32, $tdir, $fprefix, $tcmd);
168         }
169
170 sub test_dir
171         {
172         my ($win32, $tdir) = @_;
173         if ($win32)
174                 {
175                 my $rsp = "$tvprefix$tvdir\\$tdir\\rsp";
176                 print OUT <<END;
177
178 echo $tdir tests
179 if exist $rsp rd /s /q $rsp
180 md $rsp
181 END
182                 }
183         else
184                 {
185                 my $rsp = "$tvdir/$tdir/rsp";
186                 print OUT <<END;
187
188 # $tdir tests
189 rm -rf $rsp
190 mkdir $rsp
191
192 END
193                 }
194         }
195
196 sub test_line
197         {
198         my ($win32, $tdir, $fprefix, $tcmd) = @_;
199         if ($fprefix =~ /\@/)
200                 {
201                 foreach(<$tvprefix$tvdir/$tdir/req/*.req>)
202                         {
203                         if ($win32)
204                                 {
205                                 $_ =~ tr|/|\\|;
206                                 print OUT "$tprefix$tcmd $_\n";
207                                 }
208                         else
209                                 {
210                                 print OUT <<END;
211 ${shwrap_prefix}shlib_wrap.sh $tprefix$tcmd $_ || { echo $tcmd failure ; exit 1 
212 }
213 END
214                                 }
215                         }
216                 return;
217                 }
218         if ($win32)
219                 {
220                 my $req = "$tvprefix$tvdir\\$tdir\\req\\$fprefix.req";
221                 my $rsp = "$tvprefix$tvdir\\$tdir\\rsp\\$fprefix.rsp";
222         print OUT "$tprefix$tcmd < $req > $rsp\n";
223 END
224                 }
225         else
226                 {
227                 my $req = "$tvdir/$tdir/req/$fprefix.req";
228                 my $rsp = "$tvdir/$tdir/rsp/$fprefix.rsp";
229                 print OUT <<END;
230 if [ -f $req ] ; then ${shwrap_prefix}shlib_wrap.sh $tprefix$tcmd < $req > $rsp || { echo $tcmd failure ; exit 1; } ; fi
231 END
232                 }
233         }
234