123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657 |
- #!/usr/local/bin/perl -w
- # Quick & dirty utility to generate a script for executing the
- # FIPS 140-2 CMVP algorithm tests based on the pathnames of
- # input algorithm test files actually present (the unqualified
- # file names are consistent but the pathnames are not).
- #
- # List of all the unqualified file names we expect.
- my %fips_tests = (
- # FIPS test definitions
- # DSA tests
- "PQGGen" => "fips_dssvs pqg",
- "KeyPair" => "fips_dssvs keypair",
- "SigGen" => "fips_dssvs siggen",
- "SigVer" => "fips_dssvs sigver",
- # SHA tests
- "SHA1LongMsg" => "fips_shatest",
- "SHA1Monte" => "fips_shatest",
- "SHA1ShortMsg" => "fips_shatest",
- "SHA224LongMsg" => "fips_shatest",
- "SHA224Monte" => "fips_shatest",
- "SHA224ShortMsg" => "fips_shatest",
- "SHA256LongMsg" => "fips_shatest",
- "SHA256Monte" => "fips_shatest",
- "SHA256ShortMsg" => "fips_shatest",
- "SHA384LongMsg" => "fips_shatest",
- "SHA384Monte" => "fips_shatest",
- "SHA384ShortMsg" => "fips_shatest",
- "SHA512LongMsg" => "fips_shatest",
- "SHA512Monte" => "fips_shatest",
- "SHA512ShortMsg" => "fips_shatest",
- # HMAC
- "HMAC" => "fips_hmactest",
- # RAND tests
- "ANSI931_AES128MCT" => "fips_rngvs mct",
- "ANSI931_AES192MCT" => "fips_rngvs mct",
- "ANSI931_AES256MCT" => "fips_rngvs mct",
- "ANSI931_AES128VST" => "fips_rngvs vst",
- "ANSI931_AES192VST" => "fips_rngvs vst",
- "ANSI931_AES256VST" => "fips_rngvs vst",
- # RSA tests
- "SigGen15" => "fips_rsastest",
- "SigVer15" => "fips_rsavtest",
- "SigGenPSS" => "fips_rsastest -saltlen SALT",
- "SigVerPSS" => "fips_rsavtest -saltlen SALT",
- "SigGenRSA" => "fips_rsastest -x931",
- "SigVerRSA" => "fips_rsavtest -x931",
- "KeyGenRSA" => "fips_rsagtest",
- # AES tests
- "CBCGFSbox128" => "fips_aesavs -f",
- "CBCGFSbox192" => "fips_aesavs -f",
- "CBCGFSbox256" => "fips_aesavs -f",
- "CBCKeySbox128" => "fips_aesavs -f",
- "CBCKeySbox192" => "fips_aesavs -f",
- "CBCKeySbox256" => "fips_aesavs -f",
- "CBCMCT128" => "fips_aesavs -f",
- "CBCMCT192" => "fips_aesavs -f",
- "CBCMCT256" => "fips_aesavs -f",
- "CBCMMT128" => "fips_aesavs -f",
- "CBCMMT192" => "fips_aesavs -f",
- "CBCMMT256" => "fips_aesavs -f",
- "CBCVarKey128" => "fips_aesavs -f",
- "CBCVarKey192" => "fips_aesavs -f",
- "CBCVarKey256" => "fips_aesavs -f",
- "CBCVarTxt128" => "fips_aesavs -f",
- "CBCVarTxt192" => "fips_aesavs -f",
- "CBCVarTxt256" => "fips_aesavs -f",
- "CFB128GFSbox128" => "fips_aesavs -f",
- "CFB128GFSbox192" => "fips_aesavs -f",
- "CFB128GFSbox256" => "fips_aesavs -f",
- "CFB128KeySbox128" => "fips_aesavs -f",
- "CFB128KeySbox192" => "fips_aesavs -f",
- "CFB128KeySbox256" => "fips_aesavs -f",
- "CFB128MCT128" => "fips_aesavs -f",
- "CFB128MCT192" => "fips_aesavs -f",
- "CFB128MCT256" => "fips_aesavs -f",
- "CFB128MMT128" => "fips_aesavs -f",
- "CFB128MMT192" => "fips_aesavs -f",
- "CFB128MMT256" => "fips_aesavs -f",
- "CFB128VarKey128" => "fips_aesavs -f",
- "CFB128VarKey192" => "fips_aesavs -f",
- "CFB128VarKey256" => "fips_aesavs -f",
- "CFB128VarTxt128" => "fips_aesavs -f",
- "CFB128VarTxt192" => "fips_aesavs -f",
- "CFB128VarTxt256" => "fips_aesavs -f",
- "CFB8GFSbox128" => "fips_aesavs -f",
- "CFB8GFSbox192" => "fips_aesavs -f",
- "CFB8GFSbox256" => "fips_aesavs -f",
- "CFB8KeySbox128" => "fips_aesavs -f",
- "CFB8KeySbox192" => "fips_aesavs -f",
- "CFB8KeySbox256" => "fips_aesavs -f",
- "CFB8MCT128" => "fips_aesavs -f",
- "CFB8MCT192" => "fips_aesavs -f",
- "CFB8MCT256" => "fips_aesavs -f",
- "CFB8MMT128" => "fips_aesavs -f",
- "CFB8MMT192" => "fips_aesavs -f",
- "CFB8MMT256" => "fips_aesavs -f",
- "CFB8VarKey128" => "fips_aesavs -f",
- "CFB8VarKey192" => "fips_aesavs -f",
- "CFB8VarKey256" => "fips_aesavs -f",
- "CFB8VarTxt128" => "fips_aesavs -f",
- "CFB8VarTxt192" => "fips_aesavs -f",
- "CFB8VarTxt256" => "fips_aesavs -f",
- #"CFB1GFSbox128" => "fips_aesavs -f",
- #"CFB1GFSbox192" => "fips_aesavs -f",
- #"CFB1GFSbox256" => "fips_aesavs -f",
- #"CFB1KeySbox128" => "fips_aesavs -f",
- #"CFB1KeySbox192" => "fips_aesavs -f",
- #"CFB1KeySbox256" => "fips_aesavs -f",
- #"CFB1MCT128" => "fips_aesavs -f",
- #"CFB1MCT192" => "fips_aesavs -f",
- #"CFB1MCT256" => "fips_aesavs -f",
- #"CFB1MMT128" => "fips_aesavs -f",
- #"CFB1MMT192" => "fips_aesavs -f",
- #"CFB1MMT256" => "fips_aesavs -f",
- #"CFB1VarKey128" => "fips_aesavs -f",
- #"CFB1VarKey192" => "fips_aesavs -f",
- #"CFB1VarKey256" => "fips_aesavs -f",
- #"CFB1VarTxt128" => "fips_aesavs -f",
- #"CFB1VarTxt192" => "fips_aesavs -f",
- #"CFB1VarTxt256" => "fips_aesavs -f",
- "ECBGFSbox128" => "fips_aesavs -f",
- "ECBGFSbox192" => "fips_aesavs -f",
- "ECBGFSbox256" => "fips_aesavs -f",
- "ECBKeySbox128" => "fips_aesavs -f",
- "ECBKeySbox192" => "fips_aesavs -f",
- "ECBKeySbox256" => "fips_aesavs -f",
- "ECBMCT128" => "fips_aesavs -f",
- "ECBMCT192" => "fips_aesavs -f",
- "ECBMCT256" => "fips_aesavs -f",
- "ECBMMT128" => "fips_aesavs -f",
- "ECBMMT192" => "fips_aesavs -f",
- "ECBMMT256" => "fips_aesavs -f",
- "ECBVarKey128" => "fips_aesavs -f",
- "ECBVarKey192" => "fips_aesavs -f",
- "ECBVarKey256" => "fips_aesavs -f",
- "ECBVarTxt128" => "fips_aesavs -f",
- "ECBVarTxt192" => "fips_aesavs -f",
- "ECBVarTxt256" => "fips_aesavs -f",
- "OFBGFSbox128" => "fips_aesavs -f",
- "OFBGFSbox192" => "fips_aesavs -f",
- "OFBGFSbox256" => "fips_aesavs -f",
- "OFBKeySbox128" => "fips_aesavs -f",
- "OFBKeySbox192" => "fips_aesavs -f",
- "OFBKeySbox256" => "fips_aesavs -f",
- "OFBMCT128" => "fips_aesavs -f",
- "OFBMCT192" => "fips_aesavs -f",
- "OFBMCT256" => "fips_aesavs -f",
- "OFBMMT128" => "fips_aesavs -f",
- "OFBMMT192" => "fips_aesavs -f",
- "OFBMMT256" => "fips_aesavs -f",
- "OFBVarKey128" => "fips_aesavs -f",
- "OFBVarKey192" => "fips_aesavs -f",
- "OFBVarKey256" => "fips_aesavs -f",
- "OFBVarTxt128" => "fips_aesavs -f",
- "OFBVarTxt192" => "fips_aesavs -f",
- "OFBVarTxt256" => "fips_aesavs -f",
- # Triple DES tests
- "TCBCinvperm" => "fips_desmovs -f",
- "TCBCMMT1" => "fips_desmovs -f",
- "TCBCMMT2" => "fips_desmovs -f",
- "TCBCMMT3" => "fips_desmovs -f",
- "TCBCMonte1" => "fips_desmovs -f",
- "TCBCMonte2" => "fips_desmovs -f",
- "TCBCMonte3" => "fips_desmovs -f",
- "TCBCpermop" => "fips_desmovs -f",
- "TCBCsubtab" => "fips_desmovs -f",
- "TCBCvarkey" => "fips_desmovs -f",
- "TCBCvartext" => "fips_desmovs -f",
- "TCFB64invperm" => "fips_desmovs -f",
- "TCFB64MMT1" => "fips_desmovs -f",
- "TCFB64MMT2" => "fips_desmovs -f",
- "TCFB64MMT3" => "fips_desmovs -f",
- "TCFB64Monte1" => "fips_desmovs -f",
- "TCFB64Monte2" => "fips_desmovs -f",
- "TCFB64Monte3" => "fips_desmovs -f",
- "TCFB64permop" => "fips_desmovs -f",
- "TCFB64subtab" => "fips_desmovs -f",
- "TCFB64varkey" => "fips_desmovs -f",
- "TCFB64vartext" => "fips_desmovs -f",
- "TCFB8invperm" => "fips_desmovs -f",
- "TCFB8MMT1" => "fips_desmovs -f",
- "TCFB8MMT2" => "fips_desmovs -f",
- "TCFB8MMT3" => "fips_desmovs -f",
- "TCFB8Monte1" => "fips_desmovs -f",
- "TCFB8Monte2" => "fips_desmovs -f",
- "TCFB8Monte3" => "fips_desmovs -f",
- "TCFB8permop" => "fips_desmovs -f",
- "TCFB8subtab" => "fips_desmovs -f",
- "TCFB8varkey" => "fips_desmovs -f",
- "TCFB8vartext" => "fips_desmovs -f",
- "TECBinvperm" => "fips_desmovs -f",
- "TECBMMT1" => "fips_desmovs -f",
- "TECBMMT2" => "fips_desmovs -f",
- "TECBMMT3" => "fips_desmovs -f",
- "TECBMonte1" => "fips_desmovs -f",
- "TECBMonte2" => "fips_desmovs -f",
- "TECBMonte3" => "fips_desmovs -f",
- "TECBpermop" => "fips_desmovs -f",
- "TECBsubtab" => "fips_desmovs -f",
- "TECBvarkey" => "fips_desmovs -f",
- "TECBvartext" => "fips_desmovs -f",
- "TOFBinvperm" => "fips_desmovs -f",
- "TOFBMMT1" => "fips_desmovs -f",
- "TOFBMMT2" => "fips_desmovs -f",
- "TOFBMMT3" => "fips_desmovs -f",
- "TOFBMonte1" => "fips_desmovs -f",
- "TOFBMonte2" => "fips_desmovs -f",
- "TOFBMonte3" => "fips_desmovs -f",
- "TOFBpermop" => "fips_desmovs -f",
- "TOFBsubtab" => "fips_desmovs -f",
- "TOFBvarkey" => "fips_desmovs -f",
- "TOFBvartext" => "fips_desmovs -f",
- "TCBCinvperm" => "fips_desmovs -f",
- "TCBCMMT1" => "fips_desmovs -f",
- "TCBCMMT2" => "fips_desmovs -f",
- "TCBCMMT3" => "fips_desmovs -f",
- "TCBCMonte1" => "fips_desmovs -f",
- "TCBCMonte2" => "fips_desmovs -f",
- "TCBCMonte3" => "fips_desmovs -f",
- "TCBCpermop" => "fips_desmovs -f",
- "TCBCsubtab" => "fips_desmovs -f",
- "TCBCvarkey" => "fips_desmovs -f",
- "TCBCvartext" => "fips_desmovs -f",
- "TCFB64invperm" => "fips_desmovs -f",
- "TCFB64MMT1" => "fips_desmovs -f",
- "TCFB64MMT2" => "fips_desmovs -f",
- "TCFB64MMT3" => "fips_desmovs -f",
- "TCFB64Monte1" => "fips_desmovs -f",
- "TCFB64Monte2" => "fips_desmovs -f",
- "TCFB64Monte3" => "fips_desmovs -f",
- "TCFB64permop" => "fips_desmovs -f",
- "TCFB64subtab" => "fips_desmovs -f",
- "TCFB64varkey" => "fips_desmovs -f",
- "TCFB64vartext" => "fips_desmovs -f",
- "TCFB8invperm" => "fips_desmovs -f",
- "TCFB8MMT1" => "fips_desmovs -f",
- "TCFB8MMT2" => "fips_desmovs -f",
- "TCFB8MMT3" => "fips_desmovs -f",
- "TCFB8Monte1" => "fips_desmovs -f",
- "TCFB8Monte2" => "fips_desmovs -f",
- "TCFB8Monte3" => "fips_desmovs -f",
- "TCFB8permop" => "fips_desmovs -f",
- "TCFB8subtab" => "fips_desmovs -f",
- "TCFB8varkey" => "fips_desmovs -f",
- "TCFB8vartext" => "fips_desmovs -f",
- "TECBinvperm" => "fips_desmovs -f",
- "TECBMMT1" => "fips_desmovs -f",
- "TECBMMT2" => "fips_desmovs -f",
- "TECBMMT3" => "fips_desmovs -f",
- "TECBMonte1" => "fips_desmovs -f",
- "TECBMonte2" => "fips_desmovs -f",
- "TECBMonte3" => "fips_desmovs -f",
- "TECBpermop" => "fips_desmovs -f",
- "TECBsubtab" => "fips_desmovs -f",
- "TECBvarkey" => "fips_desmovs -f",
- "TECBvartext" => "fips_desmovs -f",
- "TOFBinvperm" => "fips_desmovs -f",
- "TOFBMMT1" => "fips_desmovs -f",
- "TOFBMMT2" => "fips_desmovs -f",
- "TOFBMMT3" => "fips_desmovs -f",
- "TOFBMonte1" => "fips_desmovs -f",
- "TOFBMonte2" => "fips_desmovs -f",
- "TOFBMonte3" => "fips_desmovs -f",
- "TOFBpermop" => "fips_desmovs -f",
- "TOFBsubtab" => "fips_desmovs -f",
- "TOFBvarkey" => "fips_desmovs -f",
- "TOFBvartext" => "fips_desmovs -f"
- );
- my %salt_names = (
- "SigVerPSS (salt 0)" => "SigVerPSS",
- "SigVerPSS (salt 62)" => "SigVerPSS",
- "SigGenPSS (salt 0)" => "SigGenPSS",
- "SigGenPSS (salt 62)" => "SigGenPSS",
- );
- my $win32 = $^O =~ m/mswin/i;
- my $onedir = 0;
- my $filter = "";
- my $tvdir;
- my $tprefix;
- my $shwrap_prefix;
- my $shwrap;
- my $rmcmd = "rm -rf";
- my $mkcmd = "mkdir";
- my $debug = 0;
- my $quiet = 0;
- my $rspdir = "rsp";
- my $rspignore = 0;
- my @bogus = (); # list of unmatched *.rsp files
- my $bufout = '';
- my $bufdir = '';
- my %_programs = (); # list of external programs to check
- foreach (@ARGV)
- {
- if ($_ eq "--win32")
- {
- $win32 = 1;
- }
- elsif ($_ eq "--onedir")
- {
- $onedir = 1;
- }
- elsif ($_ eq "--debug")
- {
- $debug = 1;
- }
- elsif ($_ eq "--quiet")
- {
- $quiet = 1;
- }
- elsif (/--dir=(.*)$/)
- {
- $tvdir = $1;
- }
- elsif (/--rspdir=(.*)$/)
- {
- $rspdir = $1;
- }
- elsif (/--noshwrap$/)
- {
- $shwrap = "";
- }
- elsif (/--rspignore$/)
- {
- $rspignore = 1;
- }
- elsif (/--tprefix=(.*)$/)
- {
- $tprefix = $1;
- }
- elsif (/--shwrap_prefix=(.*)$/)
- {
- $shwrap_prefix = $1;
- }
- elsif (/--filter=(.*)$/)
- {
- $filter = $1;
- }
- elsif (/--mkdir=(.*)$/)
- {
- $mkcmd = $1;
- }
- elsif (/--rm=(.*)$/)
- {
- $rmcmd = $1;
- }
- elsif (/--outfile=(.*)$/)
- {
- $outfile = $1;
- }
- else
- {
- &Help();
- exit(1);
- }
- }
- $tvdir = "." unless defined $tvdir;
- if ($win32)
- {
- if (!defined $tprefix)
- {
- if ($onedir)
- {
- $tprefix = ".\\";
- }
- else
- {
- $tprefix = "..\\out32dll\\";
- }
- }
- $bufinit .= <<END;
- \@echo off
- rem Test vector run script
- rem Auto generated by mkfipsscr.pl script
- rem Do not edit
- END
- }
- else
- {
- if ($onedir)
- {
- $tprefix = "./" unless defined $tprefix;
- $shwrap_prefix = "./" unless defined $shwrap_prefix;
- }
- else
- {
- $tprefix = "../test/" unless defined $tprefix;
- $shwrap_prefix = "../util/" unless defined $shwrap_prefix;
- }
- $shwrap = "${shwrap_prefix}shlib_wrap.sh " unless defined $shwrap;
- $bufinit .= <<END;
- #!/bin/sh
- # Test vector run script
- # Auto generated by mkfipsscr.pl script
- # Do not edit
- RM="$rmcmd"
- MKDIR="$mkcmd"
- TPREFIX=$tprefix
- END
- }
- my %fips_found;
- foreach (keys %fips_tests)
- {
- $fips_found{$_} = 0;
- }
- my %saltPSS;
- for (keys %salt_names)
- {
- $salt_found{$_} = 0;
- }
- recurse_test($win32, $tprefix, $filter, $tvdir);
- while (($key, $value) = each %salt_found)
- {
- &countentry($key, $value);
- delete $fips_found{$salt_names{$key}};
- }
- while (($key, $value) = each %fips_found)
- {
- &countentry($key, $value);
- }
- # If no fatal errors write out the script file
- $outfile = "fipstests.sh" unless defined $outfile;
- open(OUT, ">$outfile") || die "Error opening $outfile: $!";
- print OUT $bufinit;
- if (!$rspignore && @bogus)
- {
- print STDERR "ERROR: please remove bogus *.rsp files\n";
- print OUT <<EOF;
- echo $outfile generation failed due to presence of bogus *.rsp files
- EOF
- }
- else
- {
- print OUT $bufout;
- }
- close OUT;
- # Check for external programs
- for (keys %_programs)
- {
- s/ .*$//;
- -x $_ || print STDERR "WARNING: program $_ not found\n";
- }
- #--------------------------------
- sub Help {
- (my $cmd) = ($0 =~ m#([^/]+)$#);
- print <<EOF;
- $cmd: generate script for CMVP algorithm tests
- --debug Enable debug output
- --dir=<dirname> Optional root for *.req file search
- --filter=<regexp>
- --onedir <dirname> Assume all components in current directory
- --outfile=<filename> Optional name of output script, default fipstests.{sh|bat}
- --rspdir=<dirname> Name of subdirectories containing *.rsp files, default "resp"
- --rspignore Ignore any bogus *.rsp files
- --shwrap_prefix=<prefix>
- --tprefix=<prefix>
- --quiet Shhh....
- --win32 Generate script for Win32 environment
- EOF
- }
- #--------------------------------
- sub countentry {
- my ($key,$value) = @_;
- if ($value == 0)
- {
- print STDERR "WARNING: test file $key not found\n" unless $quiet;
- }
- elsif ($value > 1)
- {
- print STDERR "WARNING: test file $key found $value times\n" unless $quiet;
- }
- else
- {
- print STDERR "Found test file $key\n" if $debug;
- }
- }
- #--------------------------------
- sub recurse_test
- {
- my ($win32, $tprefix, $filter, $dir) = @_;
- my $dirh;
- opendir($dirh, $dir);
- while ($_ = readdir($dirh))
- {
- next if ($_ eq "." || $_ eq "..");
- $_ = "$dir/$_";
- if (-f "$_")
- {
- if (/\/([^\/]*)\.rsp$/)
- {
- if (exists $fips_tests{$1})
- {
- $debug && print "DEBUG: $1 found, will be overwritten\n";
- }
- else
- {
- print STDERR "ERROR: bogus file $_\n";
- push @bogus, $_;
- }
- }
- next unless /$filter.*\.req$/i;
- if (/\/([^\/]*)\.req$/ && exists $fips_tests{$1})
- {
- $fips_found{$1}++;
- test_line($win32, $_, $tprefix, $1);
- }
- elsif (! /SHAmix\.req$/)
- {
- print STDERR "WARNING: unrecognized filename $_\n";
- }
- }
- elsif (-d "$_")
- {
- if (/$filter.*req$/i)
- {
- test_dir($win32, $_);
- }
- recurse_test($win32, $tprefix, $filter, $_);
- }
- }
- closedir($dirh);
- }
- #--------------------------------
- sub test_dir
- {
- my ($win32, $req) = @_;
- my $rsp = $req;
- $rsp =~ s/req$/$rspdir/;
- if ($win32)
- {
- $rsp =~ tr|/|\\|;
- $req =~ tr|/|\\|;
- $bufdir = <<END;
- echo Running tests in $req
- if exist "$rsp" rd /s /q "$rsp"
- md "$rsp"
- END
- }
- else
- {
- $bufdir = <<END;
- echo Running tests in "$req"
- \$RM "$rsp"
- \$MKDIR "$rsp"
- END
- }
- }
- #--------------------------------
- sub test_line
- {
- my ($win32, $req, $tprefix, $tnam) = @_;
- my $rsp = $req;
- my $tcmd = $fips_tests{$tnam};
- $bufout .= $bufdir;
- $bufdir = "";
-
- $rsp =~ s/req\/([^\/]*).req$/$rspdir\/$1.rsp/;
- if ($tcmd =~ /-f$/)
- {
- if ($win32)
- {
- $req =~ tr|/|\\|;
- $rsp =~ tr|/|\\|;
- $bufout .= "$tprefix$tcmd \"$req\" \"$rsp\"\n";
- $_programs{"$tprefix$tcmd.exe"} = 1;
- }
- else
- {
- $bufout .= <<END;
- ${shwrap}\${TPREFIX}$tcmd "$req" "$rsp" || { echo "$req failure" ; exit 1
- }
- END
- $_programs{"${shwrap_prefix}shlib_wrap.sh"} = 1;
- $_programs{"$tprefix$tcmd"} = 1;
- }
- return;
- }
- if ($tcmd =~ /SALT$/)
- {
- open (IN, $req) || die "Can't Open File $req";
- my $saltlen;
- while (<IN>)
- {
- if (/^\s*#\s*salt\s+len:\s+(\d+)\s*$/i)
- {
- my $sl = $1;
- print STDERR "$req salt length $sl\n" if $debug;
- $tcmd =~ s/SALT$/$sl/;
- $salt_found{"$tnam (salt $sl)"}++;
- last;
- }
- }
- close IN;
- if ($tcmd =~ /SALT$/)
- {
- die "Can't detect salt length for $req";
- }
- }
-
- if ($win32)
- {
- $req =~ tr|/|\\|;
- $rsp =~ tr|/|\\|;
- $bufout .= "$tprefix$tcmd < \"$req\" > \"$rsp\"\n";
- $_programs{"$tprefix$tcmd.exe"} = 1;
- }
- else
- {
- $bufout .= <<END;
- ${shwrap}\${TPREFIX}$tcmd < "$req" > "$rsp" || { echo "$req failure" ; exit 1; }
- END
- $_programs{"$tprefix$tcmd"} = 1;
- }
- }
|