| #!/usr/bin/perl |
| |
| # fipscheck.pl |
| # sample perl script to check integrity of critical FIPS files |
| |
| my ($fipsdir) = @ARGV; |
| |
| die "Directory $fipsdir not found or invalid" unless -d $fipsdir; |
| |
| die "Standalone SHA1 check program ${fipsdir}/fips_standalone_sha1.exe not found" unless -f "${fipsdir}/fips_standalone_sha1.exe"; |
| |
| check_hash("fips_premain.c", $fipsdir); |
| check_hash("fipscanister.o", $fipsdir); |
| |
| sub check_hash |
| { |
| my ($filename, $dir) = @_; |
| my ($hashfile, $hashval); |
| |
| $filename = "$dir/$filename"; |
| |
| die "File $filename does not exist" unless -f $filename; |
| die "File ${filename}.sha1 does not exist" unless -f "${filename}.sha1"; |
| |
| open(IN, "${filename}.sha1") || die "Cannot open file hash file ${filename}.sha1"; |
| $hashfile = <IN>; |
| close IN; |
| $hashval = `${dir}/fips_standalone_sha1.exe $filename`; |
| chomp $hashfile; |
| chomp $hashval; |
| $hashfile =~ s/^.*=\s+//; |
| $hashval =~ s/^.*=\s+//; |
| die "Invalid hash syntax in file" if (length($hashfile) != 40); |
| die "Invalid hash received for file" if (length($hashval) != 40); |
| die "*** HASH VALUE MISMATCH FOR FILE $filename ***" if ($hashval ne $hashfile); |
| } |
| |
| |