summaryrefslogtreecommitdiffstats
path: root/util/fipsas.pl
blob: c6964e19cfadd68ea9306b678565771427fc6241 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# FIPS assembly language preprocessor
# Renames all symbols in the file to
# their modified fips versions.


my @ARGS = @ARGV;

my $top = shift @ARGS;
my $target = shift @ARGS;

# HACK to disable operation if no OPENSSL_FIPSSYMS option.
# will go away when tested more fully.

my $enabled = 0;

foreach (@ARGS) { $enabled = 1 if /-DOPENSSL_FIPSSYMS/ ; }

if ($enabled == 0)
	{
	system @ARGS;
	exit $?
	}

# Open symbol rename file.
open(IN, "$top/fips/fipssyms.h") || die "Can't open fipssyms.h";

# Skip to assembler symbols
while (<IN>)
	{
	last if (/assembler/)
	}

# Store all renames.
while (<IN>)
	{
	if (/^#define\s+(\w+)\s+(\w+)\b/)
		{
		$edits{$1} = $2;
		}
	}

my ($from, $to);

#rename target temporarily
rename($target, "tmptarg.s") || die "Can't rename $target\n";

#edit target
open IN,"tmptarg.s";
open OUT, ">$target";

while (<IN>)
{
	while (($from, $to) = each %edits)
		{
		s/(\b)$from(\b)/$1$to$2/g;
		}
	print OUT $_;
}
# run assembler
system @ARGS;

my $rv = $?;

# restore target
unlink $target;
rename "tmptarg.s", $target;

die "Error executing assembler!" if $rv != 0;