# FIPS distribution filter. # Takes tarball listing and removes unnecessary files and directories. # my $objs = ""; foreach (split / /, "FIPS_EX_OBJ AES_ENC BN_ASM DES_ENC SHA1_ASM_OBJ MODES_ASM_OBJ") { $objs .= " $ENV{$_}"; } my $noec2m = 0; my @objlist = split / /, $objs; foreach (@objlist) { $tarobjs{"$1.c"} = 1 if /([^\/]+).o$/}; $tarobjs{"ncbc_enc.c"} = 1; $tarobjs{"mem_clr.c"} = 1; $tarobjs{"ppccap.c"} = 1; $tarobjs{"sparcv9cap.c"} = 1; $tarobjs{"armcap.c"} = 1; foreach (split / /, $ENV{LINKDIRS} ) { $cdirs{$_} = 1 }; $cdirs{perlasm} = 1; $noec2m = 1 if (exists $ENV{NOEC2M}); if ($noec2m) { delete $tarobjs{"bn_gf2m.c"}; delete $tarobjs{"ec2_mult.c"}; delete $tarobjs{"ec2_smpl.c"}; } my %keep = ( "Makefile.fips" => 1, "Makefile.shared" => 1, "README.FIPS" => 1, "README.ECC" => 1, "e_os.h" => 1, "e_os2.h" => 1, "Configure" => 1, "config" => 1, ); while () { chomp; # Keep top level files in list if (!/\// && -f $_) { next unless exists $keep{$_}; } else { next unless (/^(fips\/|crypto|util|test|include|ms)/); } if (/^crypto\/([^\/]+)/) { # Skip unused directories under crypto/ next if -d "crypto/$1" && !exists $cdirs{$1}; # Skip GF2m assembly language perl scripts next if $noec2m && /gf2m\.pl/; next if /vpaes-\w*\.pl/; # Keep assembly language dir, Makefile or certain extensions if (!/\/asm\// && !/\/Makefile$/ && !/\.(in|pl|h|S)$/) { # If C source file must be on list. next if !/(\w+\.c)$/ || !exists $tarobjs{$1}; } } if (/^test\//) { next unless /Makefile/ || /dummytest.c/; } print "$_\n"; } exit 1;