| OLD | NEW |
| (Empty) |
| 1 #!/usr/local/bin/perl -w | |
| 2 # Quick & dirty utility to generate a script for executing the | |
| 3 # FIPS 140-2 CMVP algorithm tests based on the pathnames of | |
| 4 # input algorithm test files actually present (the unqualified | |
| 5 # file names are consistent but the pathnames are not). | |
| 6 # | |
| 7 | |
| 8 # List of all the unqualified file names we expect. | |
| 9 my %fips_tests = ( | |
| 10 | |
| 11 # FIPS test definitions | |
| 12 | |
| 13 # DSA tests | |
| 14 | |
| 15 "PQGGen" => "fips_dssvs pqg", | |
| 16 "KeyPair" => "fips_dssvs keypair", | |
| 17 "SigGen" => "fips_dssvs siggen", | |
| 18 "SigVer" => "fips_dssvs sigver", | |
| 19 | |
| 20 # SHA tests | |
| 21 | |
| 22 "SHA1LongMsg" => "fips_shatest", | |
| 23 "SHA1Monte" => "fips_shatest", | |
| 24 "SHA1ShortMsg" => "fips_shatest", | |
| 25 "SHA224LongMsg" => "fips_shatest", | |
| 26 "SHA224Monte" => "fips_shatest", | |
| 27 "SHA224ShortMsg" => "fips_shatest", | |
| 28 "SHA256LongMsg" => "fips_shatest", | |
| 29 "SHA256Monte" => "fips_shatest", | |
| 30 "SHA256ShortMsg" => "fips_shatest", | |
| 31 "SHA384LongMsg" => "fips_shatest", | |
| 32 "SHA384Monte" => "fips_shatest", | |
| 33 "SHA384ShortMsg" => "fips_shatest", | |
| 34 "SHA512LongMsg" => "fips_shatest", | |
| 35 "SHA512Monte" => "fips_shatest", | |
| 36 "SHA512ShortMsg" => "fips_shatest", | |
| 37 | |
| 38 # HMAC | |
| 39 | |
| 40 "HMAC" => "fips_hmactest", | |
| 41 | |
| 42 # RAND tests | |
| 43 | |
| 44 "ANSI931_AES128MCT" => "fips_rngvs mct", | |
| 45 "ANSI931_AES192MCT" => "fips_rngvs mct", | |
| 46 "ANSI931_AES256MCT" => "fips_rngvs mct", | |
| 47 "ANSI931_AES128VST" => "fips_rngvs vst", | |
| 48 "ANSI931_AES192VST" => "fips_rngvs vst", | |
| 49 "ANSI931_AES256VST" => "fips_rngvs vst", | |
| 50 | |
| 51 # RSA tests | |
| 52 | |
| 53 "SigGen15" => "fips_rsastest", | |
| 54 "SigVer15" => "fips_rsavtest", | |
| 55 "SigGenPSS" => "fips_rsastest -saltlen SALT", | |
| 56 "SigVerPSS" => "fips_rsavtest -saltlen SALT", | |
| 57 "SigGenRSA" => "fips_rsastest -x931", | |
| 58 "SigVerRSA" => "fips_rsavtest -x931", | |
| 59 "KeyGenRSA" => "fips_rsagtest", | |
| 60 | |
| 61 # AES tests | |
| 62 | |
| 63 "CBCGFSbox128" => "fips_aesavs -f", | |
| 64 "CBCGFSbox192" => "fips_aesavs -f", | |
| 65 "CBCGFSbox256" => "fips_aesavs -f", | |
| 66 "CBCKeySbox128" => "fips_aesavs -f", | |
| 67 "CBCKeySbox192" => "fips_aesavs -f", | |
| 68 "CBCKeySbox256" => "fips_aesavs -f", | |
| 69 "CBCMCT128" => "fips_aesavs -f", | |
| 70 "CBCMCT192" => "fips_aesavs -f", | |
| 71 "CBCMCT256" => "fips_aesavs -f", | |
| 72 "CBCMMT128" => "fips_aesavs -f", | |
| 73 "CBCMMT192" => "fips_aesavs -f", | |
| 74 "CBCMMT256" => "fips_aesavs -f", | |
| 75 "CBCVarKey128" => "fips_aesavs -f", | |
| 76 "CBCVarKey192" => "fips_aesavs -f", | |
| 77 "CBCVarKey256" => "fips_aesavs -f", | |
| 78 "CBCVarTxt128" => "fips_aesavs -f", | |
| 79 "CBCVarTxt192" => "fips_aesavs -f", | |
| 80 "CBCVarTxt256" => "fips_aesavs -f", | |
| 81 "CFB128GFSbox128" => "fips_aesavs -f", | |
| 82 "CFB128GFSbox192" => "fips_aesavs -f", | |
| 83 "CFB128GFSbox256" => "fips_aesavs -f", | |
| 84 "CFB128KeySbox128" => "fips_aesavs -f", | |
| 85 "CFB128KeySbox192" => "fips_aesavs -f", | |
| 86 "CFB128KeySbox256" => "fips_aesavs -f", | |
| 87 "CFB128MCT128" => "fips_aesavs -f", | |
| 88 "CFB128MCT192" => "fips_aesavs -f", | |
| 89 "CFB128MCT256" => "fips_aesavs -f", | |
| 90 "CFB128MMT128" => "fips_aesavs -f", | |
| 91 "CFB128MMT192" => "fips_aesavs -f", | |
| 92 "CFB128MMT256" => "fips_aesavs -f", | |
| 93 "CFB128VarKey128" => "fips_aesavs -f", | |
| 94 "CFB128VarKey192" => "fips_aesavs -f", | |
| 95 "CFB128VarKey256" => "fips_aesavs -f", | |
| 96 "CFB128VarTxt128" => "fips_aesavs -f", | |
| 97 "CFB128VarTxt192" => "fips_aesavs -f", | |
| 98 "CFB128VarTxt256" => "fips_aesavs -f", | |
| 99 "CFB8GFSbox128" => "fips_aesavs -f", | |
| 100 "CFB8GFSbox192" => "fips_aesavs -f", | |
| 101 "CFB8GFSbox256" => "fips_aesavs -f", | |
| 102 "CFB8KeySbox128" => "fips_aesavs -f", | |
| 103 "CFB8KeySbox192" => "fips_aesavs -f", | |
| 104 "CFB8KeySbox256" => "fips_aesavs -f", | |
| 105 "CFB8MCT128" => "fips_aesavs -f", | |
| 106 "CFB8MCT192" => "fips_aesavs -f", | |
| 107 "CFB8MCT256" => "fips_aesavs -f", | |
| 108 "CFB8MMT128" => "fips_aesavs -f", | |
| 109 "CFB8MMT192" => "fips_aesavs -f", | |
| 110 "CFB8MMT256" => "fips_aesavs -f", | |
| 111 "CFB8VarKey128" => "fips_aesavs -f", | |
| 112 "CFB8VarKey192" => "fips_aesavs -f", | |
| 113 "CFB8VarKey256" => "fips_aesavs -f", | |
| 114 "CFB8VarTxt128" => "fips_aesavs -f", | |
| 115 "CFB8VarTxt192" => "fips_aesavs -f", | |
| 116 "CFB8VarTxt256" => "fips_aesavs -f", | |
| 117 #"CFB1GFSbox128" => "fips_aesavs -f", | |
| 118 #"CFB1GFSbox192" => "fips_aesavs -f", | |
| 119 #"CFB1GFSbox256" => "fips_aesavs -f", | |
| 120 #"CFB1KeySbox128" => "fips_aesavs -f", | |
| 121 #"CFB1KeySbox192" => "fips_aesavs -f", | |
| 122 #"CFB1KeySbox256" => "fips_aesavs -f", | |
| 123 #"CFB1MCT128" => "fips_aesavs -f", | |
| 124 #"CFB1MCT192" => "fips_aesavs -f", | |
| 125 #"CFB1MCT256" => "fips_aesavs -f", | |
| 126 #"CFB1MMT128" => "fips_aesavs -f", | |
| 127 #"CFB1MMT192" => "fips_aesavs -f", | |
| 128 #"CFB1MMT256" => "fips_aesavs -f", | |
| 129 #"CFB1VarKey128" => "fips_aesavs -f", | |
| 130 #"CFB1VarKey192" => "fips_aesavs -f", | |
| 131 #"CFB1VarKey256" => "fips_aesavs -f", | |
| 132 #"CFB1VarTxt128" => "fips_aesavs -f", | |
| 133 #"CFB1VarTxt192" => "fips_aesavs -f", | |
| 134 #"CFB1VarTxt256" => "fips_aesavs -f", | |
| 135 "ECBGFSbox128" => "fips_aesavs -f", | |
| 136 "ECBGFSbox192" => "fips_aesavs -f", | |
| 137 "ECBGFSbox256" => "fips_aesavs -f", | |
| 138 "ECBKeySbox128" => "fips_aesavs -f", | |
| 139 "ECBKeySbox192" => "fips_aesavs -f", | |
| 140 "ECBKeySbox256" => "fips_aesavs -f", | |
| 141 "ECBMCT128" => "fips_aesavs -f", | |
| 142 "ECBMCT192" => "fips_aesavs -f", | |
| 143 "ECBMCT256" => "fips_aesavs -f", | |
| 144 "ECBMMT128" => "fips_aesavs -f", | |
| 145 "ECBMMT192" => "fips_aesavs -f", | |
| 146 "ECBMMT256" => "fips_aesavs -f", | |
| 147 "ECBVarKey128" => "fips_aesavs -f", | |
| 148 "ECBVarKey192" => "fips_aesavs -f", | |
| 149 "ECBVarKey256" => "fips_aesavs -f", | |
| 150 "ECBVarTxt128" => "fips_aesavs -f", | |
| 151 "ECBVarTxt192" => "fips_aesavs -f", | |
| 152 "ECBVarTxt256" => "fips_aesavs -f", | |
| 153 "OFBGFSbox128" => "fips_aesavs -f", | |
| 154 "OFBGFSbox192" => "fips_aesavs -f", | |
| 155 "OFBGFSbox256" => "fips_aesavs -f", | |
| 156 "OFBKeySbox128" => "fips_aesavs -f", | |
| 157 "OFBKeySbox192" => "fips_aesavs -f", | |
| 158 "OFBKeySbox256" => "fips_aesavs -f", | |
| 159 "OFBMCT128" => "fips_aesavs -f", | |
| 160 "OFBMCT192" => "fips_aesavs -f", | |
| 161 "OFBMCT256" => "fips_aesavs -f", | |
| 162 "OFBMMT128" => "fips_aesavs -f", | |
| 163 "OFBMMT192" => "fips_aesavs -f", | |
| 164 "OFBMMT256" => "fips_aesavs -f", | |
| 165 "OFBVarKey128" => "fips_aesavs -f", | |
| 166 "OFBVarKey192" => "fips_aesavs -f", | |
| 167 "OFBVarKey256" => "fips_aesavs -f", | |
| 168 "OFBVarTxt128" => "fips_aesavs -f", | |
| 169 "OFBVarTxt192" => "fips_aesavs -f", | |
| 170 "OFBVarTxt256" => "fips_aesavs -f", | |
| 171 | |
| 172 # Triple DES tests | |
| 173 | |
| 174 "TCBCinvperm" => "fips_desmovs -f", | |
| 175 "TCBCMMT1" => "fips_desmovs -f", | |
| 176 "TCBCMMT2" => "fips_desmovs -f", | |
| 177 "TCBCMMT3" => "fips_desmovs -f", | |
| 178 "TCBCMonte1" => "fips_desmovs -f", | |
| 179 "TCBCMonte2" => "fips_desmovs -f", | |
| 180 "TCBCMonte3" => "fips_desmovs -f", | |
| 181 "TCBCpermop" => "fips_desmovs -f", | |
| 182 "TCBCsubtab" => "fips_desmovs -f", | |
| 183 "TCBCvarkey" => "fips_desmovs -f", | |
| 184 "TCBCvartext" => "fips_desmovs -f", | |
| 185 "TCFB64invperm" => "fips_desmovs -f", | |
| 186 "TCFB64MMT1" => "fips_desmovs -f", | |
| 187 "TCFB64MMT2" => "fips_desmovs -f", | |
| 188 "TCFB64MMT3" => "fips_desmovs -f", | |
| 189 "TCFB64Monte1" => "fips_desmovs -f", | |
| 190 "TCFB64Monte2" => "fips_desmovs -f", | |
| 191 "TCFB64Monte3" => "fips_desmovs -f", | |
| 192 "TCFB64permop" => "fips_desmovs -f", | |
| 193 "TCFB64subtab" => "fips_desmovs -f", | |
| 194 "TCFB64varkey" => "fips_desmovs -f", | |
| 195 "TCFB64vartext" => "fips_desmovs -f", | |
| 196 "TCFB8invperm" => "fips_desmovs -f", | |
| 197 "TCFB8MMT1" => "fips_desmovs -f", | |
| 198 "TCFB8MMT2" => "fips_desmovs -f", | |
| 199 "TCFB8MMT3" => "fips_desmovs -f", | |
| 200 "TCFB8Monte1" => "fips_desmovs -f", | |
| 201 "TCFB8Monte2" => "fips_desmovs -f", | |
| 202 "TCFB8Monte3" => "fips_desmovs -f", | |
| 203 "TCFB8permop" => "fips_desmovs -f", | |
| 204 "TCFB8subtab" => "fips_desmovs -f", | |
| 205 "TCFB8varkey" => "fips_desmovs -f", | |
| 206 "TCFB8vartext" => "fips_desmovs -f", | |
| 207 "TECBinvperm" => "fips_desmovs -f", | |
| 208 "TECBMMT1" => "fips_desmovs -f", | |
| 209 "TECBMMT2" => "fips_desmovs -f", | |
| 210 "TECBMMT3" => "fips_desmovs -f", | |
| 211 "TECBMonte1" => "fips_desmovs -f", | |
| 212 "TECBMonte2" => "fips_desmovs -f", | |
| 213 "TECBMonte3" => "fips_desmovs -f", | |
| 214 "TECBpermop" => "fips_desmovs -f", | |
| 215 "TECBsubtab" => "fips_desmovs -f", | |
| 216 "TECBvarkey" => "fips_desmovs -f", | |
| 217 "TECBvartext" => "fips_desmovs -f", | |
| 218 "TOFBinvperm" => "fips_desmovs -f", | |
| 219 "TOFBMMT1" => "fips_desmovs -f", | |
| 220 "TOFBMMT2" => "fips_desmovs -f", | |
| 221 "TOFBMMT3" => "fips_desmovs -f", | |
| 222 "TOFBMonte1" => "fips_desmovs -f", | |
| 223 "TOFBMonte2" => "fips_desmovs -f", | |
| 224 "TOFBMonte3" => "fips_desmovs -f", | |
| 225 "TOFBpermop" => "fips_desmovs -f", | |
| 226 "TOFBsubtab" => "fips_desmovs -f", | |
| 227 "TOFBvarkey" => "fips_desmovs -f", | |
| 228 "TOFBvartext" => "fips_desmovs -f", | |
| 229 "TCBCinvperm" => "fips_desmovs -f", | |
| 230 "TCBCMMT1" => "fips_desmovs -f", | |
| 231 "TCBCMMT2" => "fips_desmovs -f", | |
| 232 "TCBCMMT3" => "fips_desmovs -f", | |
| 233 "TCBCMonte1" => "fips_desmovs -f", | |
| 234 "TCBCMonte2" => "fips_desmovs -f", | |
| 235 "TCBCMonte3" => "fips_desmovs -f", | |
| 236 "TCBCpermop" => "fips_desmovs -f", | |
| 237 "TCBCsubtab" => "fips_desmovs -f", | |
| 238 "TCBCvarkey" => "fips_desmovs -f", | |
| 239 "TCBCvartext" => "fips_desmovs -f", | |
| 240 "TCFB64invperm" => "fips_desmovs -f", | |
| 241 "TCFB64MMT1" => "fips_desmovs -f", | |
| 242 "TCFB64MMT2" => "fips_desmovs -f", | |
| 243 "TCFB64MMT3" => "fips_desmovs -f", | |
| 244 "TCFB64Monte1" => "fips_desmovs -f", | |
| 245 "TCFB64Monte2" => "fips_desmovs -f", | |
| 246 "TCFB64Monte3" => "fips_desmovs -f", | |
| 247 "TCFB64permop" => "fips_desmovs -f", | |
| 248 "TCFB64subtab" => "fips_desmovs -f", | |
| 249 "TCFB64varkey" => "fips_desmovs -f", | |
| 250 "TCFB64vartext" => "fips_desmovs -f", | |
| 251 "TCFB8invperm" => "fips_desmovs -f", | |
| 252 "TCFB8MMT1" => "fips_desmovs -f", | |
| 253 "TCFB8MMT2" => "fips_desmovs -f", | |
| 254 "TCFB8MMT3" => "fips_desmovs -f", | |
| 255 "TCFB8Monte1" => "fips_desmovs -f", | |
| 256 "TCFB8Monte2" => "fips_desmovs -f", | |
| 257 "TCFB8Monte3" => "fips_desmovs -f", | |
| 258 "TCFB8permop" => "fips_desmovs -f", | |
| 259 "TCFB8subtab" => "fips_desmovs -f", | |
| 260 "TCFB8varkey" => "fips_desmovs -f", | |
| 261 "TCFB8vartext" => "fips_desmovs -f", | |
| 262 "TECBinvperm" => "fips_desmovs -f", | |
| 263 "TECBMMT1" => "fips_desmovs -f", | |
| 264 "TECBMMT2" => "fips_desmovs -f", | |
| 265 "TECBMMT3" => "fips_desmovs -f", | |
| 266 "TECBMonte1" => "fips_desmovs -f", | |
| 267 "TECBMonte2" => "fips_desmovs -f", | |
| 268 "TECBMonte3" => "fips_desmovs -f", | |
| 269 "TECBpermop" => "fips_desmovs -f", | |
| 270 "TECBsubtab" => "fips_desmovs -f", | |
| 271 "TECBvarkey" => "fips_desmovs -f", | |
| 272 "TECBvartext" => "fips_desmovs -f", | |
| 273 "TOFBinvperm" => "fips_desmovs -f", | |
| 274 "TOFBMMT1" => "fips_desmovs -f", | |
| 275 "TOFBMMT2" => "fips_desmovs -f", | |
| 276 "TOFBMMT3" => "fips_desmovs -f", | |
| 277 "TOFBMonte1" => "fips_desmovs -f", | |
| 278 "TOFBMonte2" => "fips_desmovs -f", | |
| 279 "TOFBMonte3" => "fips_desmovs -f", | |
| 280 "TOFBpermop" => "fips_desmovs -f", | |
| 281 "TOFBsubtab" => "fips_desmovs -f", | |
| 282 "TOFBvarkey" => "fips_desmovs -f", | |
| 283 "TOFBvartext" => "fips_desmovs -f" | |
| 284 | |
| 285 ); | |
| 286 my %salt_names = ( | |
| 287 "SigVerPSS (salt 0)" => "SigVerPSS", | |
| 288 "SigVerPSS (salt 62)" => "SigVerPSS", | |
| 289 "SigGenPSS (salt 0)" => "SigGenPSS", | |
| 290 "SigGenPSS (salt 62)" => "SigGenPSS", | |
| 291 ); | |
| 292 | |
| 293 | |
| 294 my $win32 = $^O =~ m/mswin/i; | |
| 295 my $onedir = 0; | |
| 296 my $filter = ""; | |
| 297 my $tvdir; | |
| 298 my $tprefix; | |
| 299 my $shwrap_prefix; | |
| 300 my $debug = 0; | |
| 301 my $quiet = 0; | |
| 302 my $rspdir = "rsp"; | |
| 303 my $rspignore = 0; | |
| 304 my @bogus = (); # list of unmatched *.rsp files | |
| 305 my $bufout = ''; | |
| 306 my %_programs = (); # list of external programs to check | |
| 307 | |
| 308 foreach (@ARGV) | |
| 309 { | |
| 310 if ($_ eq "--win32") | |
| 311 { | |
| 312 $win32 = 1; | |
| 313 } | |
| 314 elsif ($_ eq "--onedir") | |
| 315 { | |
| 316 $onedir = 1; | |
| 317 } | |
| 318 elsif ($_ eq "--debug") | |
| 319 { | |
| 320 $debug = 1; | |
| 321 } | |
| 322 elsif ($_ eq "--quiet") | |
| 323 { | |
| 324 $quiet = 1; | |
| 325 } | |
| 326 elsif (/--dir=(.*)$/) | |
| 327 { | |
| 328 $tvdir = $1; | |
| 329 } | |
| 330 elsif (/--rspdir=(.*)$/) | |
| 331 { | |
| 332 $rspdir = $1; | |
| 333 } | |
| 334 elsif (/--rspignore$/) | |
| 335 { | |
| 336 $rspignore = 1; | |
| 337 } | |
| 338 elsif (/--tprefix=(.*)$/) | |
| 339 { | |
| 340 $tprefix = $1; | |
| 341 } | |
| 342 elsif (/--shwrap_prefix=(.*)$/) | |
| 343 { | |
| 344 $shwrap_prefix = $1; | |
| 345 } | |
| 346 elsif (/--filter=(.*)$/) | |
| 347 { | |
| 348 $filter = $1; | |
| 349 } | |
| 350 elsif (/--outfile=(.*)$/) | |
| 351 { | |
| 352 $outfile = $1; | |
| 353 } | |
| 354 else | |
| 355 { | |
| 356 &Help(); | |
| 357 exit(1); | |
| 358 } | |
| 359 } | |
| 360 | |
| 361 $tvdir = "." unless defined $tvdir; | |
| 362 | |
| 363 if ($win32) | |
| 364 { | |
| 365 if (!defined $tprefix) | |
| 366 { | |
| 367 if ($onedir) | |
| 368 { | |
| 369 $tprefix = ".\\"; | |
| 370 } | |
| 371 else | |
| 372 { | |
| 373 $tprefix = "..\\out32dll\\"; | |
| 374 } | |
| 375 } | |
| 376 | |
| 377 $bufinit .= <<END; | |
| 378 \@echo off | |
| 379 rem Test vector run script | |
| 380 rem Auto generated by mkfipsscr.pl script | |
| 381 rem Do not edit | |
| 382 | |
| 383 END | |
| 384 | |
| 385 } | |
| 386 else | |
| 387 { | |
| 388 if ($onedir) | |
| 389 { | |
| 390 $tprefix = "./" unless defined $tprefix; | |
| 391 $shwrap_prefix = "./" unless defined $shwrap_prefix; | |
| 392 } | |
| 393 else | |
| 394 { | |
| 395 $tprefix = "../test/" unless defined $tprefix; | |
| 396 $shwrap_prefix = "../util/" unless defined $shwrap_prefix; | |
| 397 } | |
| 398 | |
| 399 $bufinit .= <<END; | |
| 400 #!/bin/sh | |
| 401 | |
| 402 # Test vector run script | |
| 403 # Auto generated by mkfipsscr.pl script | |
| 404 # Do not edit | |
| 405 | |
| 406 END | |
| 407 | |
| 408 } | |
| 409 my %fips_found; | |
| 410 foreach (keys %fips_tests) | |
| 411 { | |
| 412 $fips_found{$_} = 0; | |
| 413 } | |
| 414 my %saltPSS; | |
| 415 for (keys %salt_names) | |
| 416 { | |
| 417 $salt_found{$_} = 0; | |
| 418 } | |
| 419 | |
| 420 recurse_test($win32, $tprefix, $filter, $tvdir); | |
| 421 | |
| 422 while (($key, $value) = each %salt_found) | |
| 423 { | |
| 424 &countentry($key, $value); | |
| 425 delete $fips_found{$salt_names{$key}}; | |
| 426 } | |
| 427 while (($key, $value) = each %fips_found) | |
| 428 { | |
| 429 &countentry($key, $value); | |
| 430 } | |
| 431 | |
| 432 # If no fatal errors write out the script file | |
| 433 $outfile = "fipstests.sh" unless defined $outfile; | |
| 434 open(OUT, ">$outfile") || die "Error opening $outfile: $!"; | |
| 435 print OUT $bufinit; | |
| 436 if (!$rspignore && @bogus) | |
| 437 { | |
| 438 print STDERR "ERROR: please remove bogus *.rsp files\n"; | |
| 439 print OUT <<EOF; | |
| 440 echo $outfile generation failed due to presence of bogus *.rsp files | |
| 441 EOF | |
| 442 } | |
| 443 else | |
| 444 { | |
| 445 print OUT $bufout; | |
| 446 } | |
| 447 close OUT; | |
| 448 | |
| 449 # Check for external programs | |
| 450 for (keys %_programs) | |
| 451 { | |
| 452 s/ .*$//; | |
| 453 -x $_ || print STDERR "WARNING: program $_ not found\n"; | |
| 454 } | |
| 455 | |
| 456 #-------------------------------- | |
| 457 sub Help { | |
| 458 (my $cmd) = ($0 =~ m#([^/]+)$#); | |
| 459 print <<EOF; | |
| 460 $cmd: generate script for CMVP algorithm tests | |
| 461 --debug Enable debug output | |
| 462 --dir=<dirname> Optional root for *.req file search | |
| 463 --filter=<regexp> | |
| 464 --onedir <dirname> Assume all components in current directory | |
| 465 --outfile=<filename> Optional name of output script, default fips
tests.{sh|bat} | |
| 466 --rspdir=<dirname> Name of subdirectories containing *.rsp file
s, default "resp" | |
| 467 --rspignore Ignore any bogus *.rsp files | |
| 468 --shwrap_prefix=<prefix> | |
| 469 --tprefix=<prefix> | |
| 470 --quiet Shhh.... | |
| 471 --win32 Generate script for Win32 environment | |
| 472 EOF | |
| 473 } | |
| 474 | |
| 475 #-------------------------------- | |
| 476 sub countentry { | |
| 477 my ($key,$value) = @_; | |
| 478 if ($value == 0) | |
| 479 { | |
| 480 print STDERR "WARNING: test file $key not found\n" unless $quiet
; | |
| 481 } | |
| 482 elsif ($value > 1) | |
| 483 { | |
| 484 print STDERR "WARNING: test file $key found $value times\n" unle
ss $quiet; | |
| 485 } | |
| 486 else | |
| 487 { | |
| 488 print STDERR "Found test file $key\n" if $debug; | |
| 489 } | |
| 490 } | |
| 491 | |
| 492 #-------------------------------- | |
| 493 sub recurse_test | |
| 494 { | |
| 495 my ($win32, $tprefix, $filter, $dir) = @_; | |
| 496 my $dirh; | |
| 497 opendir($dirh, $dir); | |
| 498 while ($_ = readdir($dirh)) | |
| 499 { | |
| 500 next if ($_ eq "." || $_ eq ".."); | |
| 501 $_ = "$dir/$_"; | |
| 502 if (-f "$_") | |
| 503 { | |
| 504 if (/\/([^\/]*)\.rsp$/) | |
| 505 { | |
| 506 if (exists $fips_tests{$1}) | |
| 507 { | |
| 508 $debug && print "DEBUG: $1 found, will b
e overwritten\n"; | |
| 509 } | |
| 510 else | |
| 511 { | |
| 512 print STDERR "ERROR: bogus file $_\n"; | |
| 513 push @bogus, $_; | |
| 514 } | |
| 515 } | |
| 516 next unless /$filter.*\.req$/i; | |
| 517 if (/\/([^\/]*)\.req$/ && exists $fips_tests{$1}) | |
| 518 { | |
| 519 $fips_found{$1}++; | |
| 520 test_line($win32, $_, $tprefix, $1); | |
| 521 } | |
| 522 elsif (! /SHAmix\.req$/) | |
| 523 { | |
| 524 print STDERR "WARNING: unrecognized filename $_\
n"; | |
| 525 } | |
| 526 } | |
| 527 elsif (-d "$_") | |
| 528 { | |
| 529 if (/$filter.*req$/i) | |
| 530 { | |
| 531 test_dir($win32, $_); | |
| 532 } | |
| 533 recurse_test($win32, $tprefix, $filter, $_); | |
| 534 } | |
| 535 } | |
| 536 closedir($dirh); | |
| 537 } | |
| 538 | |
| 539 #-------------------------------- | |
| 540 sub test_dir | |
| 541 { | |
| 542 my ($win32, $req) = @_; | |
| 543 my $rsp = $req; | |
| 544 $rsp =~ s/req$/$rspdir/; | |
| 545 if ($win32) | |
| 546 { | |
| 547 $rsp =~ tr|/|\\|; | |
| 548 $req =~ tr|/|\\|; | |
| 549 $bufout .= <<END; | |
| 550 | |
| 551 echo Running tests in $req | |
| 552 if exist "$rsp" rd /s /q "$rsp" | |
| 553 md "$rsp" | |
| 554 END | |
| 555 } | |
| 556 else | |
| 557 { | |
| 558 $bufout .= <<END; | |
| 559 | |
| 560 echo Running tests in "$req" | |
| 561 rm -rf "$rsp" | |
| 562 mkdir "$rsp" | |
| 563 | |
| 564 END | |
| 565 } | |
| 566 } | |
| 567 | |
| 568 #-------------------------------- | |
| 569 sub test_line | |
| 570 { | |
| 571 my ($win32, $req, $tprefix, $tnam) = @_; | |
| 572 my $rsp = $req; | |
| 573 my $tcmd = $fips_tests{$tnam}; | |
| 574 $rsp =~ s/req\/([^\/]*).req$/$rspdir\/$1.rsp/; | |
| 575 if ($tcmd =~ /-f$/) | |
| 576 { | |
| 577 if ($win32) | |
| 578 { | |
| 579 $req =~ tr|/|\\|; | |
| 580 $rsp =~ tr|/|\\|; | |
| 581 $bufout .= "$tprefix$tcmd \"$req\" \"$rsp\"\n"; | |
| 582 $_programs{"$tprefix$tcmd.exe"} = 1; | |
| 583 } | |
| 584 else | |
| 585 { | |
| 586 $bufout .= <<END; | |
| 587 ${shwrap_prefix}shlib_wrap.sh $tprefix$tcmd "$req" "$rsp" || { echo "$req failur
e" ; exit 1 | |
| 588 } | |
| 589 END | |
| 590 $_programs{"${shwrap_prefix}shlib_wrap.sh"} = 1; | |
| 591 $_programs{"$tprefix$tcmd"} = 1; | |
| 592 } | |
| 593 return; | |
| 594 } | |
| 595 if ($tcmd =~ /SALT$/) | |
| 596 { | |
| 597 open (IN, $req) || die "Can't Open File $req"; | |
| 598 my $saltlen; | |
| 599 while (<IN>) | |
| 600 { | |
| 601 if (/^\s*#\s*salt\s+len:\s+(\d+)\s*$/i) | |
| 602 { | |
| 603 my $sl = $1; | |
| 604 print STDERR "$req salt length $sl\n" if $debug; | |
| 605 $tcmd =~ s/SALT$/$sl/; | |
| 606 $salt_found{"$tnam (salt $sl)"}++; | |
| 607 last; | |
| 608 } | |
| 609 } | |
| 610 close IN; | |
| 611 if ($tcmd =~ /SALT$/) | |
| 612 { | |
| 613 die "Can't detect salt length for $req"; | |
| 614 } | |
| 615 } | |
| 616 | |
| 617 if ($win32) | |
| 618 { | |
| 619 $req =~ tr|/|\\|; | |
| 620 $rsp =~ tr|/|\\|; | |
| 621 $bufout .= "$tprefix$tcmd < \"$req\" > \"$rsp\"\n"; | |
| 622 $_programs{"$tprefix$tcmd.exe"} = 1; | |
| 623 } | |
| 624 else | |
| 625 { | |
| 626 $bufout .= <<END; | |
| 627 ${shwrap_prefix}shlib_wrap.sh $tprefix$tcmd < "$req" > "$rsp" || { echo "$req fa
ilure" ; exit 1; } | |
| 628 END | |
| 629 $_programs{"$tprefix$tcmd"} = 1; | |
| 630 } | |
| 631 } | |
| 632 | |
| OLD | NEW |