1193645Ssimon#!/usr/local/bin/perl -w 2193645Ssimon# Quick & dirty utility to generate a script for executing the 3193645Ssimon# FIPS 140-2 CMVP algorithm tests based on the pathnames of 4193645Ssimon# input algorithm test files actually present (the unqualified 5193645Ssimon# file names are consistent but the pathnames are not). 6193645Ssimon# 7193645Ssimon 8193645Ssimon# List of all the unqualified file names we expect. 9193645Ssimonmy %fips_tests = ( 10193645Ssimon 11193645Ssimon# FIPS test definitions 12193645Ssimon 13193645Ssimon# DSA tests 14193645Ssimon 15193645Ssimon"PQGGen" => "fips_dssvs pqg", 16193645Ssimon"KeyPair" => "fips_dssvs keypair", 17193645Ssimon"SigGen" => "fips_dssvs siggen", 18193645Ssimon"SigVer" => "fips_dssvs sigver", 19193645Ssimon 20193645Ssimon# SHA tests 21193645Ssimon 22193645Ssimon"SHA1LongMsg" => "fips_shatest", 23193645Ssimon"SHA1Monte" => "fips_shatest", 24193645Ssimon"SHA1ShortMsg" => "fips_shatest", 25193645Ssimon"SHA224LongMsg" => "fips_shatest", 26193645Ssimon"SHA224Monte" => "fips_shatest", 27193645Ssimon"SHA224ShortMsg" => "fips_shatest", 28193645Ssimon"SHA256LongMsg" => "fips_shatest", 29193645Ssimon"SHA256Monte" => "fips_shatest", 30193645Ssimon"SHA256ShortMsg" => "fips_shatest", 31193645Ssimon"SHA384LongMsg" => "fips_shatest", 32193645Ssimon"SHA384Monte" => "fips_shatest", 33193645Ssimon"SHA384ShortMsg" => "fips_shatest", 34193645Ssimon"SHA512LongMsg" => "fips_shatest", 35193645Ssimon"SHA512Monte" => "fips_shatest", 36193645Ssimon"SHA512ShortMsg" => "fips_shatest", 37193645Ssimon 38193645Ssimon# HMAC 39193645Ssimon 40193645Ssimon"HMAC" => "fips_hmactest", 41193645Ssimon 42193645Ssimon# RAND tests 43193645Ssimon 44193645Ssimon"ANSI931_AES128MCT" => "fips_rngvs mct", 45193645Ssimon"ANSI931_AES192MCT" => "fips_rngvs mct", 46193645Ssimon"ANSI931_AES256MCT" => "fips_rngvs mct", 47193645Ssimon"ANSI931_AES128VST" => "fips_rngvs vst", 48193645Ssimon"ANSI931_AES192VST" => "fips_rngvs vst", 49193645Ssimon"ANSI931_AES256VST" => "fips_rngvs vst", 50193645Ssimon 51193645Ssimon# RSA tests 52193645Ssimon 53193645Ssimon"SigGen15" => "fips_rsastest", 54193645Ssimon"SigVer15" => "fips_rsavtest", 55193645Ssimon"SigGenPSS" => "fips_rsastest -saltlen SALT", 56193645Ssimon"SigVerPSS" => "fips_rsavtest -saltlen SALT", 57193645Ssimon"SigGenRSA" => "fips_rsastest -x931", 58193645Ssimon"SigVerRSA" => "fips_rsavtest -x931", 59193645Ssimon"KeyGenRSA" => "fips_rsagtest", 60193645Ssimon 61193645Ssimon# AES tests 62193645Ssimon 63193645Ssimon"CBCGFSbox128" => "fips_aesavs -f", 64193645Ssimon"CBCGFSbox192" => "fips_aesavs -f", 65193645Ssimon"CBCGFSbox256" => "fips_aesavs -f", 66193645Ssimon"CBCKeySbox128" => "fips_aesavs -f", 67193645Ssimon"CBCKeySbox192" => "fips_aesavs -f", 68193645Ssimon"CBCKeySbox256" => "fips_aesavs -f", 69193645Ssimon"CBCMCT128" => "fips_aesavs -f", 70193645Ssimon"CBCMCT192" => "fips_aesavs -f", 71193645Ssimon"CBCMCT256" => "fips_aesavs -f", 72193645Ssimon"CBCMMT128" => "fips_aesavs -f", 73193645Ssimon"CBCMMT192" => "fips_aesavs -f", 74193645Ssimon"CBCMMT256" => "fips_aesavs -f", 75193645Ssimon"CBCVarKey128" => "fips_aesavs -f", 76193645Ssimon"CBCVarKey192" => "fips_aesavs -f", 77193645Ssimon"CBCVarKey256" => "fips_aesavs -f", 78193645Ssimon"CBCVarTxt128" => "fips_aesavs -f", 79193645Ssimon"CBCVarTxt192" => "fips_aesavs -f", 80193645Ssimon"CBCVarTxt256" => "fips_aesavs -f", 81193645Ssimon"CFB128GFSbox128" => "fips_aesavs -f", 82193645Ssimon"CFB128GFSbox192" => "fips_aesavs -f", 83193645Ssimon"CFB128GFSbox256" => "fips_aesavs -f", 84193645Ssimon"CFB128KeySbox128" => "fips_aesavs -f", 85193645Ssimon"CFB128KeySbox192" => "fips_aesavs -f", 86193645Ssimon"CFB128KeySbox256" => "fips_aesavs -f", 87193645Ssimon"CFB128MCT128" => "fips_aesavs -f", 88193645Ssimon"CFB128MCT192" => "fips_aesavs -f", 89193645Ssimon"CFB128MCT256" => "fips_aesavs -f", 90193645Ssimon"CFB128MMT128" => "fips_aesavs -f", 91193645Ssimon"CFB128MMT192" => "fips_aesavs -f", 92193645Ssimon"CFB128MMT256" => "fips_aesavs -f", 93193645Ssimon"CFB128VarKey128" => "fips_aesavs -f", 94193645Ssimon"CFB128VarKey192" => "fips_aesavs -f", 95193645Ssimon"CFB128VarKey256" => "fips_aesavs -f", 96193645Ssimon"CFB128VarTxt128" => "fips_aesavs -f", 97193645Ssimon"CFB128VarTxt192" => "fips_aesavs -f", 98193645Ssimon"CFB128VarTxt256" => "fips_aesavs -f", 99193645Ssimon"CFB8GFSbox128" => "fips_aesavs -f", 100193645Ssimon"CFB8GFSbox192" => "fips_aesavs -f", 101193645Ssimon"CFB8GFSbox256" => "fips_aesavs -f", 102193645Ssimon"CFB8KeySbox128" => "fips_aesavs -f", 103193645Ssimon"CFB8KeySbox192" => "fips_aesavs -f", 104193645Ssimon"CFB8KeySbox256" => "fips_aesavs -f", 105193645Ssimon"CFB8MCT128" => "fips_aesavs -f", 106193645Ssimon"CFB8MCT192" => "fips_aesavs -f", 107193645Ssimon"CFB8MCT256" => "fips_aesavs -f", 108193645Ssimon"CFB8MMT128" => "fips_aesavs -f", 109193645Ssimon"CFB8MMT192" => "fips_aesavs -f", 110193645Ssimon"CFB8MMT256" => "fips_aesavs -f", 111193645Ssimon"CFB8VarKey128" => "fips_aesavs -f", 112193645Ssimon"CFB8VarKey192" => "fips_aesavs -f", 113193645Ssimon"CFB8VarKey256" => "fips_aesavs -f", 114193645Ssimon"CFB8VarTxt128" => "fips_aesavs -f", 115193645Ssimon"CFB8VarTxt192" => "fips_aesavs -f", 116193645Ssimon"CFB8VarTxt256" => "fips_aesavs -f", 117193645Ssimon#"CFB1GFSbox128" => "fips_aesavs -f", 118193645Ssimon#"CFB1GFSbox192" => "fips_aesavs -f", 119193645Ssimon#"CFB1GFSbox256" => "fips_aesavs -f", 120193645Ssimon#"CFB1KeySbox128" => "fips_aesavs -f", 121193645Ssimon#"CFB1KeySbox192" => "fips_aesavs -f", 122193645Ssimon#"CFB1KeySbox256" => "fips_aesavs -f", 123193645Ssimon#"CFB1MCT128" => "fips_aesavs -f", 124193645Ssimon#"CFB1MCT192" => "fips_aesavs -f", 125193645Ssimon#"CFB1MCT256" => "fips_aesavs -f", 126193645Ssimon#"CFB1MMT128" => "fips_aesavs -f", 127193645Ssimon#"CFB1MMT192" => "fips_aesavs -f", 128193645Ssimon#"CFB1MMT256" => "fips_aesavs -f", 129193645Ssimon#"CFB1VarKey128" => "fips_aesavs -f", 130193645Ssimon#"CFB1VarKey192" => "fips_aesavs -f", 131193645Ssimon#"CFB1VarKey256" => "fips_aesavs -f", 132193645Ssimon#"CFB1VarTxt128" => "fips_aesavs -f", 133193645Ssimon#"CFB1VarTxt192" => "fips_aesavs -f", 134193645Ssimon#"CFB1VarTxt256" => "fips_aesavs -f", 135193645Ssimon"ECBGFSbox128" => "fips_aesavs -f", 136193645Ssimon"ECBGFSbox192" => "fips_aesavs -f", 137193645Ssimon"ECBGFSbox256" => "fips_aesavs -f", 138193645Ssimon"ECBKeySbox128" => "fips_aesavs -f", 139193645Ssimon"ECBKeySbox192" => "fips_aesavs -f", 140193645Ssimon"ECBKeySbox256" => "fips_aesavs -f", 141193645Ssimon"ECBMCT128" => "fips_aesavs -f", 142193645Ssimon"ECBMCT192" => "fips_aesavs -f", 143193645Ssimon"ECBMCT256" => "fips_aesavs -f", 144193645Ssimon"ECBMMT128" => "fips_aesavs -f", 145193645Ssimon"ECBMMT192" => "fips_aesavs -f", 146193645Ssimon"ECBMMT256" => "fips_aesavs -f", 147193645Ssimon"ECBVarKey128" => "fips_aesavs -f", 148193645Ssimon"ECBVarKey192" => "fips_aesavs -f", 149193645Ssimon"ECBVarKey256" => "fips_aesavs -f", 150193645Ssimon"ECBVarTxt128" => "fips_aesavs -f", 151193645Ssimon"ECBVarTxt192" => "fips_aesavs -f", 152193645Ssimon"ECBVarTxt256" => "fips_aesavs -f", 153193645Ssimon"OFBGFSbox128" => "fips_aesavs -f", 154193645Ssimon"OFBGFSbox192" => "fips_aesavs -f", 155193645Ssimon"OFBGFSbox256" => "fips_aesavs -f", 156193645Ssimon"OFBKeySbox128" => "fips_aesavs -f", 157193645Ssimon"OFBKeySbox192" => "fips_aesavs -f", 158193645Ssimon"OFBKeySbox256" => "fips_aesavs -f", 159193645Ssimon"OFBMCT128" => "fips_aesavs -f", 160193645Ssimon"OFBMCT192" => "fips_aesavs -f", 161193645Ssimon"OFBMCT256" => "fips_aesavs -f", 162193645Ssimon"OFBMMT128" => "fips_aesavs -f", 163193645Ssimon"OFBMMT192" => "fips_aesavs -f", 164193645Ssimon"OFBMMT256" => "fips_aesavs -f", 165193645Ssimon"OFBVarKey128" => "fips_aesavs -f", 166193645Ssimon"OFBVarKey192" => "fips_aesavs -f", 167193645Ssimon"OFBVarKey256" => "fips_aesavs -f", 168193645Ssimon"OFBVarTxt128" => "fips_aesavs -f", 169193645Ssimon"OFBVarTxt192" => "fips_aesavs -f", 170193645Ssimon"OFBVarTxt256" => "fips_aesavs -f", 171193645Ssimon 172193645Ssimon# Triple DES tests 173193645Ssimon 174193645Ssimon"TCBCinvperm" => "fips_desmovs -f", 175193645Ssimon"TCBCMMT1" => "fips_desmovs -f", 176193645Ssimon"TCBCMMT2" => "fips_desmovs -f", 177193645Ssimon"TCBCMMT3" => "fips_desmovs -f", 178193645Ssimon"TCBCMonte1" => "fips_desmovs -f", 179193645Ssimon"TCBCMonte2" => "fips_desmovs -f", 180193645Ssimon"TCBCMonte3" => "fips_desmovs -f", 181193645Ssimon"TCBCpermop" => "fips_desmovs -f", 182193645Ssimon"TCBCsubtab" => "fips_desmovs -f", 183193645Ssimon"TCBCvarkey" => "fips_desmovs -f", 184193645Ssimon"TCBCvartext" => "fips_desmovs -f", 185193645Ssimon"TCFB64invperm" => "fips_desmovs -f", 186193645Ssimon"TCFB64MMT1" => "fips_desmovs -f", 187193645Ssimon"TCFB64MMT2" => "fips_desmovs -f", 188193645Ssimon"TCFB64MMT3" => "fips_desmovs -f", 189193645Ssimon"TCFB64Monte1" => "fips_desmovs -f", 190193645Ssimon"TCFB64Monte2" => "fips_desmovs -f", 191193645Ssimon"TCFB64Monte3" => "fips_desmovs -f", 192193645Ssimon"TCFB64permop" => "fips_desmovs -f", 193193645Ssimon"TCFB64subtab" => "fips_desmovs -f", 194193645Ssimon"TCFB64varkey" => "fips_desmovs -f", 195193645Ssimon"TCFB64vartext" => "fips_desmovs -f", 196193645Ssimon"TCFB8invperm" => "fips_desmovs -f", 197193645Ssimon"TCFB8MMT1" => "fips_desmovs -f", 198193645Ssimon"TCFB8MMT2" => "fips_desmovs -f", 199193645Ssimon"TCFB8MMT3" => "fips_desmovs -f", 200193645Ssimon"TCFB8Monte1" => "fips_desmovs -f", 201193645Ssimon"TCFB8Monte2" => "fips_desmovs -f", 202193645Ssimon"TCFB8Monte3" => "fips_desmovs -f", 203193645Ssimon"TCFB8permop" => "fips_desmovs -f", 204193645Ssimon"TCFB8subtab" => "fips_desmovs -f", 205193645Ssimon"TCFB8varkey" => "fips_desmovs -f", 206193645Ssimon"TCFB8vartext" => "fips_desmovs -f", 207193645Ssimon"TECBinvperm" => "fips_desmovs -f", 208193645Ssimon"TECBMMT1" => "fips_desmovs -f", 209193645Ssimon"TECBMMT2" => "fips_desmovs -f", 210193645Ssimon"TECBMMT3" => "fips_desmovs -f", 211193645Ssimon"TECBMonte1" => "fips_desmovs -f", 212193645Ssimon"TECBMonte2" => "fips_desmovs -f", 213193645Ssimon"TECBMonte3" => "fips_desmovs -f", 214193645Ssimon"TECBpermop" => "fips_desmovs -f", 215193645Ssimon"TECBsubtab" => "fips_desmovs -f", 216193645Ssimon"TECBvarkey" => "fips_desmovs -f", 217193645Ssimon"TECBvartext" => "fips_desmovs -f", 218193645Ssimon"TOFBinvperm" => "fips_desmovs -f", 219193645Ssimon"TOFBMMT1" => "fips_desmovs -f", 220193645Ssimon"TOFBMMT2" => "fips_desmovs -f", 221193645Ssimon"TOFBMMT3" => "fips_desmovs -f", 222193645Ssimon"TOFBMonte1" => "fips_desmovs -f", 223193645Ssimon"TOFBMonte2" => "fips_desmovs -f", 224193645Ssimon"TOFBMonte3" => "fips_desmovs -f", 225193645Ssimon"TOFBpermop" => "fips_desmovs -f", 226193645Ssimon"TOFBsubtab" => "fips_desmovs -f", 227193645Ssimon"TOFBvarkey" => "fips_desmovs -f", 228193645Ssimon"TOFBvartext" => "fips_desmovs -f", 229193645Ssimon"TCBCinvperm" => "fips_desmovs -f", 230193645Ssimon"TCBCMMT1" => "fips_desmovs -f", 231193645Ssimon"TCBCMMT2" => "fips_desmovs -f", 232193645Ssimon"TCBCMMT3" => "fips_desmovs -f", 233193645Ssimon"TCBCMonte1" => "fips_desmovs -f", 234193645Ssimon"TCBCMonte2" => "fips_desmovs -f", 235193645Ssimon"TCBCMonte3" => "fips_desmovs -f", 236193645Ssimon"TCBCpermop" => "fips_desmovs -f", 237193645Ssimon"TCBCsubtab" => "fips_desmovs -f", 238193645Ssimon"TCBCvarkey" => "fips_desmovs -f", 239193645Ssimon"TCBCvartext" => "fips_desmovs -f", 240193645Ssimon"TCFB64invperm" => "fips_desmovs -f", 241193645Ssimon"TCFB64MMT1" => "fips_desmovs -f", 242193645Ssimon"TCFB64MMT2" => "fips_desmovs -f", 243193645Ssimon"TCFB64MMT3" => "fips_desmovs -f", 244193645Ssimon"TCFB64Monte1" => "fips_desmovs -f", 245193645Ssimon"TCFB64Monte2" => "fips_desmovs -f", 246193645Ssimon"TCFB64Monte3" => "fips_desmovs -f", 247193645Ssimon"TCFB64permop" => "fips_desmovs -f", 248193645Ssimon"TCFB64subtab" => "fips_desmovs -f", 249193645Ssimon"TCFB64varkey" => "fips_desmovs -f", 250193645Ssimon"TCFB64vartext" => "fips_desmovs -f", 251193645Ssimon"TCFB8invperm" => "fips_desmovs -f", 252193645Ssimon"TCFB8MMT1" => "fips_desmovs -f", 253193645Ssimon"TCFB8MMT2" => "fips_desmovs -f", 254193645Ssimon"TCFB8MMT3" => "fips_desmovs -f", 255193645Ssimon"TCFB8Monte1" => "fips_desmovs -f", 256193645Ssimon"TCFB8Monte2" => "fips_desmovs -f", 257193645Ssimon"TCFB8Monte3" => "fips_desmovs -f", 258193645Ssimon"TCFB8permop" => "fips_desmovs -f", 259193645Ssimon"TCFB8subtab" => "fips_desmovs -f", 260193645Ssimon"TCFB8varkey" => "fips_desmovs -f", 261193645Ssimon"TCFB8vartext" => "fips_desmovs -f", 262193645Ssimon"TECBinvperm" => "fips_desmovs -f", 263193645Ssimon"TECBMMT1" => "fips_desmovs -f", 264193645Ssimon"TECBMMT2" => "fips_desmovs -f", 265193645Ssimon"TECBMMT3" => "fips_desmovs -f", 266193645Ssimon"TECBMonte1" => "fips_desmovs -f", 267193645Ssimon"TECBMonte2" => "fips_desmovs -f", 268193645Ssimon"TECBMonte3" => "fips_desmovs -f", 269193645Ssimon"TECBpermop" => "fips_desmovs -f", 270193645Ssimon"TECBsubtab" => "fips_desmovs -f", 271193645Ssimon"TECBvarkey" => "fips_desmovs -f", 272193645Ssimon"TECBvartext" => "fips_desmovs -f", 273193645Ssimon"TOFBinvperm" => "fips_desmovs -f", 274193645Ssimon"TOFBMMT1" => "fips_desmovs -f", 275193645Ssimon"TOFBMMT2" => "fips_desmovs -f", 276193645Ssimon"TOFBMMT3" => "fips_desmovs -f", 277193645Ssimon"TOFBMonte1" => "fips_desmovs -f", 278193645Ssimon"TOFBMonte2" => "fips_desmovs -f", 279193645Ssimon"TOFBMonte3" => "fips_desmovs -f", 280193645Ssimon"TOFBpermop" => "fips_desmovs -f", 281193645Ssimon"TOFBsubtab" => "fips_desmovs -f", 282193645Ssimon"TOFBvarkey" => "fips_desmovs -f", 283193645Ssimon"TOFBvartext" => "fips_desmovs -f" 284193645Ssimon 285193645Ssimon); 286193645Ssimonmy %salt_names = ( 287193645Ssimon"SigVerPSS (salt 0)" => "SigVerPSS", 288193645Ssimon"SigVerPSS (salt 62)" => "SigVerPSS", 289193645Ssimon"SigGenPSS (salt 0)" => "SigGenPSS", 290193645Ssimon"SigGenPSS (salt 62)" => "SigGenPSS", 291193645Ssimon); 292193645Ssimon 293193645Ssimon 294193645Ssimonmy $win32 = $^O =~ m/mswin/i; 295193645Ssimonmy $onedir = 0; 296193645Ssimonmy $filter = ""; 297193645Ssimonmy $tvdir; 298193645Ssimonmy $tprefix; 299193645Ssimonmy $shwrap_prefix; 300215697Ssimonmy $shwrap; 301215697Ssimonmy $rmcmd = "rm -rf"; 302215697Ssimonmy $mkcmd = "mkdir"; 303193645Ssimonmy $debug = 0; 304193645Ssimonmy $quiet = 0; 305193645Ssimonmy $rspdir = "rsp"; 306193645Ssimonmy $rspignore = 0; 307193645Ssimonmy @bogus = (); # list of unmatched *.rsp files 308193645Ssimonmy $bufout = ''; 309215697Ssimonmy $bufdir = ''; 310193645Ssimonmy %_programs = (); # list of external programs to check 311193645Ssimon 312193645Ssimonforeach (@ARGV) 313193645Ssimon { 314193645Ssimon if ($_ eq "--win32") 315193645Ssimon { 316193645Ssimon $win32 = 1; 317193645Ssimon } 318193645Ssimon elsif ($_ eq "--onedir") 319193645Ssimon { 320193645Ssimon $onedir = 1; 321193645Ssimon } 322193645Ssimon elsif ($_ eq "--debug") 323193645Ssimon { 324193645Ssimon $debug = 1; 325193645Ssimon } 326193645Ssimon elsif ($_ eq "--quiet") 327193645Ssimon { 328193645Ssimon $quiet = 1; 329193645Ssimon } 330193645Ssimon elsif (/--dir=(.*)$/) 331193645Ssimon { 332193645Ssimon $tvdir = $1; 333193645Ssimon } 334193645Ssimon elsif (/--rspdir=(.*)$/) 335193645Ssimon { 336193645Ssimon $rspdir = $1; 337193645Ssimon } 338215697Ssimon elsif (/--noshwrap$/) 339215697Ssimon { 340215697Ssimon $shwrap = ""; 341215697Ssimon } 342193645Ssimon elsif (/--rspignore$/) 343193645Ssimon { 344193645Ssimon $rspignore = 1; 345193645Ssimon } 346193645Ssimon elsif (/--tprefix=(.*)$/) 347193645Ssimon { 348193645Ssimon $tprefix = $1; 349193645Ssimon } 350193645Ssimon elsif (/--shwrap_prefix=(.*)$/) 351193645Ssimon { 352193645Ssimon $shwrap_prefix = $1; 353193645Ssimon } 354193645Ssimon elsif (/--filter=(.*)$/) 355193645Ssimon { 356193645Ssimon $filter = $1; 357193645Ssimon } 358215697Ssimon elsif (/--mkdir=(.*)$/) 359215697Ssimon { 360215697Ssimon $mkcmd = $1; 361215697Ssimon } 362215697Ssimon elsif (/--rm=(.*)$/) 363215697Ssimon { 364215697Ssimon $rmcmd = $1; 365215697Ssimon } 366193645Ssimon elsif (/--outfile=(.*)$/) 367193645Ssimon { 368193645Ssimon $outfile = $1; 369193645Ssimon } 370193645Ssimon else 371193645Ssimon { 372193645Ssimon &Help(); 373193645Ssimon exit(1); 374193645Ssimon } 375193645Ssimon } 376193645Ssimon 377193645Ssimon$tvdir = "." unless defined $tvdir; 378193645Ssimon 379193645Ssimonif ($win32) 380193645Ssimon { 381193645Ssimon if (!defined $tprefix) 382193645Ssimon { 383193645Ssimon if ($onedir) 384193645Ssimon { 385193645Ssimon $tprefix = ".\\"; 386193645Ssimon } 387193645Ssimon else 388193645Ssimon { 389193645Ssimon $tprefix = "..\\out32dll\\"; 390193645Ssimon } 391193645Ssimon } 392193645Ssimon 393193645Ssimon $bufinit .= <<END; 394193645Ssimon\@echo off 395193645Ssimonrem Test vector run script 396193645Ssimonrem Auto generated by mkfipsscr.pl script 397193645Ssimonrem Do not edit 398193645Ssimon 399193645SsimonEND 400193645Ssimon 401193645Ssimon } 402193645Ssimonelse 403193645Ssimon { 404193645Ssimon if ($onedir) 405193645Ssimon { 406193645Ssimon $tprefix = "./" unless defined $tprefix; 407193645Ssimon $shwrap_prefix = "./" unless defined $shwrap_prefix; 408193645Ssimon } 409193645Ssimon else 410193645Ssimon { 411193645Ssimon $tprefix = "../test/" unless defined $tprefix; 412193645Ssimon $shwrap_prefix = "../util/" unless defined $shwrap_prefix; 413193645Ssimon } 414193645Ssimon 415215697Ssimon $shwrap = "${shwrap_prefix}shlib_wrap.sh " unless defined $shwrap; 416215697Ssimon 417193645Ssimon $bufinit .= <<END; 418193645Ssimon#!/bin/sh 419193645Ssimon 420193645Ssimon# Test vector run script 421193645Ssimon# Auto generated by mkfipsscr.pl script 422193645Ssimon# Do not edit 423193645Ssimon 424215697SsimonRM="$rmcmd" 425215697SsimonMKDIR="$mkcmd" 426215697SsimonTPREFIX=$tprefix 427193645SsimonEND 428193645Ssimon 429193645Ssimon } 430193645Ssimonmy %fips_found; 431193645Ssimonforeach (keys %fips_tests) 432193645Ssimon { 433193645Ssimon $fips_found{$_} = 0; 434193645Ssimon } 435193645Ssimonmy %saltPSS; 436193645Ssimonfor (keys %salt_names) 437193645Ssimon { 438193645Ssimon $salt_found{$_} = 0; 439193645Ssimon } 440193645Ssimon 441193645Ssimonrecurse_test($win32, $tprefix, $filter, $tvdir); 442193645Ssimon 443193645Ssimonwhile (($key, $value) = each %salt_found) 444193645Ssimon { 445193645Ssimon &countentry($key, $value); 446193645Ssimon delete $fips_found{$salt_names{$key}}; 447193645Ssimon } 448193645Ssimonwhile (($key, $value) = each %fips_found) 449193645Ssimon { 450193645Ssimon &countentry($key, $value); 451193645Ssimon } 452193645Ssimon 453193645Ssimon# If no fatal errors write out the script file 454193645Ssimon $outfile = "fipstests.sh" unless defined $outfile; 455193645Ssimon open(OUT, ">$outfile") || die "Error opening $outfile: $!"; 456193645Ssimon print OUT $bufinit; 457193645Ssimon if (!$rspignore && @bogus) 458193645Ssimon { 459193645Ssimon print STDERR "ERROR: please remove bogus *.rsp files\n"; 460193645Ssimon print OUT <<EOF; 461193645Ssimonecho $outfile generation failed due to presence of bogus *.rsp files 462193645SsimonEOF 463193645Ssimon } 464193645Ssimon else 465193645Ssimon { 466193645Ssimon print OUT $bufout; 467193645Ssimon } 468193645Ssimon close OUT; 469193645Ssimon 470193645Ssimon# Check for external programs 471193645Ssimon for (keys %_programs) 472193645Ssimon { 473193645Ssimon s/ .*$//; 474193645Ssimon -x $_ || print STDERR "WARNING: program $_ not found\n"; 475193645Ssimon } 476193645Ssimon 477193645Ssimon#-------------------------------- 478193645Ssimonsub Help { 479193645Ssimon(my $cmd) = ($0 =~ m#([^/]+)$#); 480193645Ssimon print <<EOF; 481193645Ssimon$cmd: generate script for CMVP algorithm tests 482193645Ssimon --debug Enable debug output 483193645Ssimon --dir=<dirname> Optional root for *.req file search 484193645Ssimon --filter=<regexp> 485193645Ssimon --onedir <dirname> Assume all components in current directory 486193645Ssimon --outfile=<filename> Optional name of output script, default fipstests.{sh|bat} 487193645Ssimon --rspdir=<dirname> Name of subdirectories containing *.rsp files, default "resp" 488193645Ssimon --rspignore Ignore any bogus *.rsp files 489193645Ssimon --shwrap_prefix=<prefix> 490193645Ssimon --tprefix=<prefix> 491193645Ssimon --quiet Shhh.... 492193645Ssimon --win32 Generate script for Win32 environment 493193645SsimonEOF 494193645Ssimon} 495193645Ssimon 496193645Ssimon#-------------------------------- 497193645Ssimonsub countentry { 498193645Ssimon my ($key,$value) = @_; 499193645Ssimon if ($value == 0) 500193645Ssimon { 501193645Ssimon print STDERR "WARNING: test file $key not found\n" unless $quiet; 502193645Ssimon } 503193645Ssimon elsif ($value > 1) 504193645Ssimon { 505193645Ssimon print STDERR "WARNING: test file $key found $value times\n" unless $quiet; 506193645Ssimon } 507193645Ssimon else 508193645Ssimon { 509193645Ssimon print STDERR "Found test file $key\n" if $debug; 510193645Ssimon } 511193645Ssimon } 512193645Ssimon 513193645Ssimon#-------------------------------- 514193645Ssimonsub recurse_test 515193645Ssimon { 516193645Ssimon my ($win32, $tprefix, $filter, $dir) = @_; 517193645Ssimon my $dirh; 518193645Ssimon opendir($dirh, $dir); 519193645Ssimon while ($_ = readdir($dirh)) 520193645Ssimon { 521193645Ssimon next if ($_ eq "." || $_ eq ".."); 522193645Ssimon $_ = "$dir/$_"; 523193645Ssimon if (-f "$_") 524193645Ssimon { 525193645Ssimon if (/\/([^\/]*)\.rsp$/) 526193645Ssimon { 527193645Ssimon if (exists $fips_tests{$1}) 528193645Ssimon { 529193645Ssimon $debug && print "DEBUG: $1 found, will be overwritten\n"; 530193645Ssimon } 531193645Ssimon else 532193645Ssimon { 533193645Ssimon print STDERR "ERROR: bogus file $_\n"; 534193645Ssimon push @bogus, $_; 535193645Ssimon } 536193645Ssimon } 537193645Ssimon next unless /$filter.*\.req$/i; 538193645Ssimon if (/\/([^\/]*)\.req$/ && exists $fips_tests{$1}) 539193645Ssimon { 540193645Ssimon $fips_found{$1}++; 541193645Ssimon test_line($win32, $_, $tprefix, $1); 542193645Ssimon } 543193645Ssimon elsif (! /SHAmix\.req$/) 544193645Ssimon { 545193645Ssimon print STDERR "WARNING: unrecognized filename $_\n"; 546193645Ssimon } 547193645Ssimon } 548193645Ssimon elsif (-d "$_") 549193645Ssimon { 550193645Ssimon if (/$filter.*req$/i) 551193645Ssimon { 552193645Ssimon test_dir($win32, $_); 553193645Ssimon } 554193645Ssimon recurse_test($win32, $tprefix, $filter, $_); 555193645Ssimon } 556193645Ssimon } 557193645Ssimon closedir($dirh); 558193645Ssimon } 559193645Ssimon 560193645Ssimon#-------------------------------- 561193645Ssimonsub test_dir 562193645Ssimon { 563193645Ssimon my ($win32, $req) = @_; 564193645Ssimon my $rsp = $req; 565193645Ssimon $rsp =~ s/req$/$rspdir/; 566193645Ssimon if ($win32) 567193645Ssimon { 568193645Ssimon $rsp =~ tr|/|\\|; 569193645Ssimon $req =~ tr|/|\\|; 570215697Ssimon $bufdir = <<END; 571193645Ssimon 572193645Ssimonecho Running tests in $req 573193645Ssimonif exist "$rsp" rd /s /q "$rsp" 574193645Ssimonmd "$rsp" 575193645SsimonEND 576193645Ssimon } 577193645Ssimon else 578193645Ssimon { 579215697Ssimon $bufdir = <<END; 580193645Ssimon 581193645Ssimonecho Running tests in "$req" 582215697Ssimon\$RM "$rsp" 583215697Ssimon\$MKDIR "$rsp" 584193645Ssimon 585193645SsimonEND 586193645Ssimon } 587193645Ssimon } 588193645Ssimon 589193645Ssimon#-------------------------------- 590193645Ssimonsub test_line 591193645Ssimon { 592193645Ssimon my ($win32, $req, $tprefix, $tnam) = @_; 593193645Ssimon my $rsp = $req; 594193645Ssimon my $tcmd = $fips_tests{$tnam}; 595215697Ssimon 596215697Ssimon $bufout .= $bufdir; 597215697Ssimon $bufdir = ""; 598215697Ssimon 599193645Ssimon $rsp =~ s/req\/([^\/]*).req$/$rspdir\/$1.rsp/; 600193645Ssimon if ($tcmd =~ /-f$/) 601193645Ssimon { 602193645Ssimon if ($win32) 603193645Ssimon { 604193645Ssimon $req =~ tr|/|\\|; 605193645Ssimon $rsp =~ tr|/|\\|; 606193645Ssimon $bufout .= "$tprefix$tcmd \"$req\" \"$rsp\"\n"; 607193645Ssimon $_programs{"$tprefix$tcmd.exe"} = 1; 608193645Ssimon } 609193645Ssimon else 610193645Ssimon { 611193645Ssimon $bufout .= <<END; 612215697Ssimon${shwrap}\${TPREFIX}$tcmd "$req" "$rsp" || { echo "$req failure" ; exit 1 613193645Ssimon} 614193645SsimonEND 615193645Ssimon $_programs{"${shwrap_prefix}shlib_wrap.sh"} = 1; 616193645Ssimon $_programs{"$tprefix$tcmd"} = 1; 617193645Ssimon } 618193645Ssimon return; 619193645Ssimon } 620193645Ssimon if ($tcmd =~ /SALT$/) 621193645Ssimon { 622193645Ssimon open (IN, $req) || die "Can't Open File $req"; 623193645Ssimon my $saltlen; 624193645Ssimon while (<IN>) 625193645Ssimon { 626193645Ssimon if (/^\s*#\s*salt\s+len:\s+(\d+)\s*$/i) 627193645Ssimon { 628193645Ssimon my $sl = $1; 629193645Ssimon print STDERR "$req salt length $sl\n" if $debug; 630193645Ssimon $tcmd =~ s/SALT$/$sl/; 631193645Ssimon $salt_found{"$tnam (salt $sl)"}++; 632193645Ssimon last; 633193645Ssimon } 634193645Ssimon } 635193645Ssimon close IN; 636193645Ssimon if ($tcmd =~ /SALT$/) 637193645Ssimon { 638193645Ssimon die "Can't detect salt length for $req"; 639193645Ssimon } 640193645Ssimon } 641193645Ssimon 642193645Ssimon if ($win32) 643193645Ssimon { 644193645Ssimon $req =~ tr|/|\\|; 645193645Ssimon $rsp =~ tr|/|\\|; 646193645Ssimon $bufout .= "$tprefix$tcmd < \"$req\" > \"$rsp\"\n"; 647193645Ssimon $_programs{"$tprefix$tcmd.exe"} = 1; 648193645Ssimon } 649193645Ssimon else 650193645Ssimon { 651193645Ssimon $bufout .= <<END; 652215697Ssimon${shwrap}\${TPREFIX}$tcmd < "$req" > "$rsp" || { echo "$req failure" ; exit 1; } 653193645SsimonEND 654193645Ssimon $_programs{"$tprefix$tcmd"} = 1; 655193645Ssimon } 656193645Ssimon } 657193645Ssimon 658