Add a tool that (semi)automatically created the API documentation
authorRichard Levitte <levitte@openssl.org>
Tue, 5 Jul 2011 15:40:58 +0000 (15:40 +0000)
committerRichard Levitte <levitte@openssl.org>
Tue, 5 Jul 2011 15:40:58 +0000 (15:40 +0000)
required for FIPS.

fips/tools/README [new file with mode: 0644]
fips/tools/api_fns.pm [new file with mode: 0644]
fips/tools/api_list.pl [new file with mode: 0644]
fips/tools/declarations.dat [new file with mode: 0644]

diff --git a/fips/tools/README b/fips/tools/README
new file mode 100644 (file)
index 0000000..ad5ef22
--- /dev/null
@@ -0,0 +1,26 @@
+FIPS tools explained
+====================
+
+api_list.pl
+    a script to produce an API description, saying what parameters are
+    for input, output or both.
+
+    Most often, the direction of a parameter is determined automatically.
+    However, quite a number of them are educated guesses.  Either way,
+    the information is stored in the file declarations.dat in this
+    directory, and can be manually corrected; simply go through
+    declarations.dat, look for any value with the key 'direction'
+    where the value contains a question mark.  Those should be changed
+    to whatever is true, and the values should be one of the
+    following:
+
+       <-      output
+       ->      input
+       <->     both
+
+api_fns.pm
+    a module that helps api_list.pl do its job.
+
+declarations.dat
+    a file of information about public fips symbols.  See api_list.pl
+    above.
diff --git a/fips/tools/api_fns.pm b/fips/tools/api_fns.pm
new file mode 100644 (file)
index 0000000..d668be1
--- /dev/null
@@ -0,0 +1,336 @@
+package api_data;
+use strict;
+
+use Data::Dumper;
+use File::Slurp;
+
+# The basic data store for a declaration is a hash holding the following
+# information (let's simply call this structure "declaration"):
+# sym       => string (the symbol of the declaration)
+# symcomment=> string (if there's a comment about this symbol) or undef
+# type      => string (type definition text, with a '?' where the symbol should be
+# kind      => 0 (variable)
+#              1 (function)
+# params    => list reference (list of declarations, one for each parameter)
+#              [only exists when kind = 1]
+# direction => 0 (input)
+#              1 (output)
+#              2 (input and output)
+#              3 (output or input and output)
+#              +4 (guess)
+#              [only exists when this symbol is a parameter to a function]
+
+# Constructor
+sub new {
+    my $class = shift;
+    my $self = {};
+    $self->{DECLARATIONS} = {};
+    bless($self, $class);
+    return $self;
+}
+
+sub read_declaration_db {
+    my $self = shift;
+    my $declaration_file = shift;
+    my $buf = read_file($declaration_file);
+    $self->{DECLARATIONS} = eval $buf;
+    die $@ if $@;
+}
+
+sub write_declaration_db {
+    my $self = shift;
+    my $declaration_file = shift;
+
+    $Data::Dumper::Purity = 1;
+    open FILE,">".$declaration_file ||
+       die "Can't open '$declaration_file': $!\n";
+    print FILE "my ",Data::Dumper->Dump([ $self->{DECLARATIONS} ], [qw(declaration_db)]);
+    close FILE;
+}
+
+sub insert_declaration {
+    my $self = shift;
+    my %decl = @_;
+    my $sym = $decl{sym};
+
+    if ($self->{DECLARATIONS}->{$sym}) {
+       foreach my $k (('sym', 'symcomment','oldsym','objfile','kind')) {
+           $self->{DECLARATIONS}->{$sym}->{$k} = $decl{$k};
+       }
+       if ($self->{DECLARATIONS}->{$sym}->{kind} == 1) {
+           # Replace parameters only if the kind or type has changed
+           my $oldp = $self->{DECLARATIONS}->{$sym}->{params};
+           my $newp = $decl{params};
+           my $l = scalar(@{$oldp});
+           for my $pn (0..($l - 1)) {
+               if ($oldp->[$pn]->{kind} != $newp->[$pn]->{kind}
+                   || $oldp->[$pn]->{type} ne $newp->[$pn]->{type}) {
+                   $self->{DECLARATIONS}->{$sym}->{params} = $newp;
+               }
+           }
+       }
+    } else {
+       $self->{DECLARATIONS}->{$decl{sym}} = { %decl };
+    }
+}
+
+# Input is a simple C declaration, output is a declaration structure
+sub _parse_declaration {
+    my $decl = shift;
+    my $newname = shift;
+    my $objfile = shift;
+    my $namecomment = shift;
+    my %parsed_decl = ();
+
+    my $debug = 0;
+
+    print "DEBUG: going to parse: $decl\n" if $debug;
+
+    # Start with changing all parens to { and } except the outermost
+    # Within these, convert all commas to semi-colons
+    my $s = "";
+    do {
+       print "DEBUG: decl: $decl\n" if $debug;
+       $s = $decl;
+       if ($decl =~ m/
+                      \(
+                        ([^\(\)]*)
+                        \(
+                          ([^\(\)]*)
+                        \)
+                    /x) {
+           print "DEBUG: \`: $`\n" if $debug;
+           print "DEBUG: 1: $1\n" if $debug;
+           print "DEBUG: 2: $2\n" if $debug;
+           print "DEBUG: \': $'\n" if $debug;
+
+           my $a = "$`"."("."$1";
+           my $b = "{"."$2"."}";
+           my $c = "$'";
+           print "DEBUG: a: $a\n" if $debug;
+           print "DEBUG: b: $b\n" if $debug;
+           print "DEBUG: c: $c\n" if $debug;
+           $b =~ s/,/;/g;
+           print "DEBUG: b: $b\n" if $debug;
+
+           $decl = $a.$b.$c;
+       }
+    } while ($s ne $decl);
+
+    # There are types that we look for.  The first is the function pointer
+    # T (*X)(...)
+    if ($decl =~ m/
+                  ^\s*
+                  ([^\(]+)     # Return type of the function pointed at
+                  \(
+                    \s*\*\s*
+                    ([^\)]*)   # Function returning or variable holding fn ptr
+                  \)
+                  \s*
+                  \(
+                    ([^\)]*)   # Parameter for the function pointed at
+                  \)
+                  \s*$
+                /x) {
+       print "DEBUG: function pointer variable or function\n" if $debug;
+       print "DEBUG:  1: $1\n" if $debug;
+       print "DEBUG:  2: $2\n" if $debug;
+       print "DEBUG:  3: $3\n" if $debug;
+
+       my $tmp1 = $1 . "(*?)" . "(" . $3 . ")";
+       my $tmp2 = $2;
+
+       $tmp1 =~ tr/\{\}\;/(),/; # Convert all braces and semi-colons
+                               # back to parens and commas
+
+       $tmp2 =~ tr/\{\}\;/(),/; # Convert all braces and semi-colons
+                               # back to parens and commas
+
+       # Parse the symbol part with a fake type.  This will determine if
+       # it's a variable or a function.
+       my $subdeclaration = _parse_declaration("int " . $tmp2, $newname);
+       map { $parsed_decl{$_} = $subdeclaration->{$_} } ( "sym",
+                                                          "kind",
+                                                          "params" );
+       $parsed_decl{symcomment} = $namecomment if $namecomment;
+       $parsed_decl{type} = $tmp1;
+    }
+    # If that wasn't it, check for the simple function declaration
+    # T X(...)
+    elsif ($decl =~ m/^\s*(.*?\W)(\w+)\s*\(\s*(.*)\s*\)\s*$/) {
+       print "DEBUG: function\n" if $debug;
+       print "DEBUG:  1: $1\n" if $debug;
+       print "DEBUG:  2: $2\n" if $debug;
+       print "DEBUG:  3: $3\n" if $debug;
+
+       $parsed_decl{kind} = 1;
+       $parsed_decl{type} = $1."?";
+       $parsed_decl{sym} = $newname ? $newname : $2;
+       $parsed_decl{symcomment} = $namecomment if $namecomment;
+       $parsed_decl{oldsym} = $newname ? $2 : undef;
+       $parsed_decl{params} = [
+           map { tr/\{\}\;/(),/; _parse_declaration($_,undef,undef,undef) }
+           grep { !/^\s*void\s*$/ }
+           split(/\s*,\s*/, $3)
+           ];
+    }
+    # If that wasn't it either, try to get a variable
+    # T X or T X[...]
+    elsif ($decl =~ m/^\s*(.*\W)(\w+)(\s*\[.*\])?\s*$/) {
+       print "DEBUG: variable\n" if $debug;
+       print "DEBUG:  1: $1\n" if $debug;
+       print "DEBUG:  2: $2\n" if $debug;
+
+       $parsed_decl{kind} = 0;
+       $parsed_decl{type} = $1."?";
+       $parsed_decl{sym} = $newname ? $newname : $2;
+       $parsed_decl{symcomment} = $namecomment if $namecomment;
+       $parsed_decl{oldsym} = $newname ? $2 : undef;
+    }
+    # Special for the parameter "..."
+    elsif ($decl =~ m/^\s*\.\.\.\s*$/) {
+       %parsed_decl = ( kind => 0, type => "?", sym => "..." );
+    }
+    # Otherwise, we got something weird
+    else {
+       print "Warning: weird declaration: $decl\n";
+       %parsed_decl = ( kind => -1, decl => $decl );
+    }
+    $parsed_decl{objfile} = $objfile;
+
+    print Dumper({ %parsed_decl }) if $debug;
+    return { %parsed_decl };
+}
+
+sub add_declaration {
+    my $self = shift;
+    my $parsed = _parse_declaration(@_);
+    $self->insert_declaration( %{$parsed} );
+}
+
+sub complete_directions {
+    my $self = shift;
+    foreach my $sym (keys %{$self->{DECLARATIONS}}) {
+       if ($self->{DECLARATIONS}->{$sym}->{kind} == 1) {
+           map {
+               if (!$_->{direction} || $_->{direction} =~ m/\?/) {
+                   if ($_->{type} =~ m/const/) {
+                       $_->{direction} = '->'; # Input
+                   } elsif ($_->{sym} =~ m/ctx/ || $_->{type} =~ m/ctx/i) {
+                       $_->{direction} = '<-?'; # Guess output
+                   } elsif ($_->{type} =~ m/\*/) {
+                       if ($_->{type} =~ m/(short|int|char|size_t)/) {
+                           $_->{direction} = '<-?'; # Guess output
+                       } else {
+                           $_->{direction} = '<-? <->?'; # Guess output or input/output
+                       }
+                   } else {
+                       $_->{direction} = '->'; # Input
+                   }
+               }
+           } @{$self->{DECLARATIONS}->{$sym}->{params}};
+       }
+    }
+}
+
+sub on_all_declarations {
+    my $self = shift;
+    my $fn = shift;
+    foreach my $sym (sort keys %{$self->{DECLARATIONS}}) {
+       &$fn($self->{DECLARATIONS}->{$sym});
+    }
+}
+
+sub get_function_declaration_strings_from_file {
+    my $fn = shift;
+    my %declarations = ();
+    my $line = "";
+    my $cppline = "";
+
+    my $debug = 0;
+
+    foreach my $headerline (`cat $fn`) {
+       chomp $headerline;
+       print STDERR "DEBUG0: $headerline\n" if $debug;
+       # First, treat the line at a CPP level; remove comments, add on more
+       # lines if there's an ending backslash or an incomplete comment.
+       # If none of that is true, then remove all comments and check if the
+       # line starts with a #, skip if it does, otherwise continue.
+       if ($cppline && $headerline) { $cppline .= " "; }
+       $cppline .= $headerline;
+       $cppline =~ s^\"(.|\\\")*\"^@@^g; # Collapse strings
+       $cppline =~ s^/\*.*?\*/^^g;       # Remove all complete comments
+       print STDERR "DEBUG1: $cppline\n" if $debug;
+       if ($cppline =~ m/\\$/) { # Keep on reading if the current line ends
+                                 # with a backslash
+           $cppline = $`;
+           next;
+       }
+       next if $cppline =~ m/\/\*/; # Keep on reading if there remains the
+                                    # start of a comment
+       next if $cppline =~ m/"/;    # Keep on reading if there remains the
+                                    # start of a string
+       if ($cppline =~ m/^\#/) {
+           $cppline = "";
+           next;
+       }
+
+       # Done with the preprocessor part, add the resulting line to the
+       # line we're putting together to get a statement.
+       if ($line && $cppline) { $line .= " "; }
+       $line .= $cppline;
+       $cppline = "";
+       $line =~ s%extern\s+\@\@\s+\{%%g; # Remove 'extern "C" {'
+       $line =~ s%\{[^\{\}]*\}%\$\$%g; # Collapse any compound structure
+       print STDERR "DEBUG2: $line\n" if $debug;
+       next if $line =~ m%\{%; # If there is any compound structure start,
+       # we are not quite done reading.
+       $line =~ s%\}%%;                # Remove a lonely }, it's probably a rest
+       # from 'extern "C" {'
+       $line =~ s%^\s+%%;              # Remove beginning blanks
+       $line =~ s%\s+$%%;              # Remove trailing blanks
+       $line =~ s%\s+% %g;             # Collapse multiple blanks to one.
+       if ($line =~ m/;/) {
+           print STDERR "DEBUG3: $`\n" if $debug;
+           my $decl = $`;      #`; # (emacs is stupid that way)
+           $line = $';         #'; # (emacs is stupid that way)
+
+           # Find the symbol by taking the declaration and fiddling with it:
+           # (remember, we're just extracting the symbol, so we're allowed
+           # to cheat here ;-))
+           # 1. Remove all paired parenthesies, innermost first.  While doing
+           #    this, if something like "(* foo)(" is found, this is a
+           #    function pointer; change it to "foo("
+           # 2. Remove all paired square parenthesies.
+           # 3. Remove any $$ with surrounding spaces.
+           # 4. Pick the last word, that's the symbol.
+           my $tmp;
+           my $sym = $decl;
+           print STDERR "DEBUG3.1: $sym\n" if $debug;
+           do {
+               $tmp = $sym;
+               # NOTE: The order of these two is important, and it's also
+               # important not to use the g modifier.
+               $sym =~ s/\(\s*\*\s*(\w+)\s*\)\s*\(/$1(/;
+               $sym =~ s/\([^\(\)]*\)//;
+               print STDERR "DEBUG3.2: $sym\n" if $debug;
+           } while ($tmp ne $sym);
+           do {
+               $tmp = $sym;
+               $sym =~ s/\[[^\[\]]*\]//g;
+           } while ($tmp ne $sym);
+           $sym =~ s/\s*\$\$\s*//g;
+           $sym =~ s/.*[\s\*](\w+)\s*$/$1/;
+           print STDERR "DEBUG4: $sym\n" if $debug;
+           if ($sym =~ m/\W/) {
+               print STDERR "Warning[$fn]: didn't find proper symbol in declaration:\n";
+               print STDERR "    decl: $decl\n";
+               print STDERR "    sym:  $sym\n";
+           }
+           $declarations{$sym} = $decl;
+       }
+    }
+    return %declarations;
+}
+
+1;
diff --git a/fips/tools/api_list.pl b/fips/tools/api_list.pl
new file mode 100644 (file)
index 0000000..2102fc2
--- /dev/null
@@ -0,0 +1,267 @@
+#!/bin/env perl
+#
+# Quick and dirty utility to help assemble the mandated (but otherwise
+# useless) API documentation. We get the list of external function
+# symbols from fipscanister.o, pair those with the source file names
+# (from ./fips/fipssyms.h), and map to the object file name containing
+# them.
+# 
+# Requires the "nm" and "find" utilities.
+# Execure from the root of the FIPS module source code workarea
+
+use HTML::Entities;
+use File::Basename;
+
+$here = dirname($0);
+require "$here/api_fns.pm";
+
+$_direction_question = ''; # Set to '?' to show "<-?", "<->?" for uncertain directions
+
+print STDERR "Info: finding FIPS renames and reimplementations of OpenSSL symbols\n";
+# Get mapping of old (source code) to new (live as renamed) symbols
+foreach $file ("./fips/fipssyms.h") {
+    open(IN, $file) || die "Error opening $file";
+    # grab pairs until assembler symbols
+    my $buf = '';
+    my $reimplementations = 1; # When 1, we're looking at reimplementations
+                               # (not renames) of OpenSSL functions.  They
+                               # still have to be saved to get the API.
+    while (<IN>) {
+       $reimplementations = 0 if m|^\s*/\*\sRename\ssymbols\s|;
+
+       if ($buf) {
+           $_ = $buf . $_;
+           $buf = '';
+       }
+       if (s/\\\n$//) {
+           $buf = $_;
+           next;
+       }
+       if (m/\(/) {
+           ($oldname, $newname) = m/#define\s+(\S+)\(.*\)\s+(\S+)\(.*\)/;
+       } else {
+           ($oldname, $newname) = m/#define\s+(\S+)\s+(\S+)/;
+       }
+
+       $oldname || next;
+       if (!$reimplementations) {
+           $oldname{$newname} = $oldname;
+       }
+       $oldimpl{$newname} = $oldname;
+       last if (/assembler/)
+    }
+    close(IN);
+    # %oldname is the mapping of new function names to old
+    print "<!-- Total of ", scalar(keys %oldname), " mapped symbols in $file -->\n";
+}
+
+print STDERR "Info: finding FIPS symbols in object files\n";
+# generate list of external function names in fipscanister.o
+$file = "./fips/fipscanister.o";
+for (`nm -g --defined-only -p -o $file`) {
+    chomp;
+    s/^\S+ T // || next;
+    m/^fips_/ && next;
+    $fipssyms{$_}++;
+    $objname =~ s/\.o$/\.\[o\|c\]/;
+    $objname{$symname} = $objname;
+}
+# keys %fipssyms is the list of module functions
+print "<!-- Total of ", scalar(keys %fipssyms), " functions in $file -->\n";
+
+# grab filename to symbol name mapping, each line is of the format
+#      ./fips/sha/fips_sha1_selftest.o:00000000 T FIPS_selftest_sha1
+# discard the offset and type ":00000000 T".
+for (`find . -name '*.o' \\! -name 'fipscanister.o' -exec nm -g --defined-only -p -o {} \\;`) {
+        ($objname, $symname) = m/^(\S+):\S+\s+T+\s+(\S+)/;
+        $objname || next;
+#      $fipssyms{$symname} || next;
+       $objname =~ s/\.o$/\.\[o\|c\]/;
+        $objname{$symname} = $objname;
+        }
+# %objname is the mapping of new symbol name to (source/object) file name
+print "<!-- Total of ", scalar(keys %objname), " functions found in files -->\n";
+
+print STDERR "Info: finding declarations in header files\n";
+
+# grab filenames in include/openssl, run each of them through
+# get_function_declarations_from_file (defined in api_fns.pl)
+# and collect the result.
+%declarations = ();
+while (<include/openssl/*.h ./crypto/cryptlib.h>) {
+    my %decls = api_data::get_function_declaration_strings_from_file($_);
+    map { $declarations{$_} = $decls{$_} } keys %decls;
+}
+# %declarations is the mapping of old symbol name to their declaration
+print "<!-- Total of ", scalar(keys %declarations), " declarations found in header files -->\n";
+
+# Add the markers FIPS_text_start and FIPS_text_end
+$declarations{FIPS_text_start} = "void *FIPS_text_start()";
+$declarations{FIPS_text_end} = "void *FIPS_text_end()";
+
+
+# Read list of API names obtained from edited "nm -g fipscanister.o"
+$spill = 0;
+sub printer {
+    foreach (@_) {
+       if ($_->{kind} >= 0) {
+           if ($spill) {
+               print " " x $indent;
+               print "kind:     ",$_->{kind} ? "function" : "variable","\n";
+               print " " x $indent;
+               print "sym:      ",$_->{sym},"\n";
+               print " " x $indent;
+               print "type:     ",$_->{type},"\n";
+           }
+           if ($_->{kind}) {
+               $c = 0;
+               map {
+                   if ($spill) {
+                       print " " x $indent;
+                       printf "param %d:\n", ++$c;
+                   }
+                   $indent += 2;
+                   printer($_);
+                   my $direction = $_->{direction};
+                   if (!$_direction_question) {
+                       $direction =~ s/<-\? <->\?/<->/;
+                       $direction =~ s/\?//g;
+                   }
+                   print " " x $indent,$direction," ",$_->{sym},"\n";
+                   $indent -= 2;
+               } @{$_->{params}};
+               if ($_->{type} !~ m/^\s*void\s*$/) {
+                   print " " x $indent;
+                   print "<- Return\n";
+               }
+           }
+       } else {
+           if ($spill) {
+               print " " x $indent;
+               print "decl:     ",$_->{decl},"\n";
+           }
+       }
+    }
+}
+
+sub html_printer {
+    my $print_mode = shift;    # 0 = print declaration with symbol in bold,
+                               #     call recursively with 1 for each parameter,
+                               #     call recursively with 2 for each parameter
+                               # 1 = print declaration with sym grey background,
+                               #     call recursivelt with 3 for each parameter
+                               # 2 = just print declaration
+    my $d = shift;             # Parsed declaration
+    my $s = '';
+
+    if ($print_mode == 0) {
+       $d->{sym} || return $s;
+       my $h = "<hr><br />\n";
+       $h .= $d->{sym} . ($d->{symcomment} ? " " . $d->{symcomment} : "");
+       $h .= " in file " . $d->{objfile} . "<br />\n<br />\n";
+
+       $s .= '<b>' . $d->{sym} . '</b>';
+       if ($d->{kind} == 1) {
+           $s .= '(';
+           $s .= join(', ',
+                      map {
+                          html_printer(1,$_);
+                      } @{$d->{params}});
+           $s .= ')';
+       }
+       my $t = $d->{type};
+       $t =~ s/\?/$s/;
+       $s = $t;
+       if ($d->{kind} == 1) {
+           map {
+               my $direction = $_->{direction};
+               if (!$_direction_question) {
+                   $direction =~ s/<-\? <->\?/<->/;
+                   $direction =~ s/\?//g;
+               }
+               $s .= "<br />\n";
+               $s .= encode_entities($direction
+                                     . "\xA0" x (9 - length($direction)));
+               $s .= $_->{sym};
+           } @{$d->{params}};
+       }
+       if ($d->{type} !~ m/^\s*void\s*\?$/) {
+           $s .= "<br />\n";
+           $s .= encode_entities('<-'.("\xA0" x 7).'Return');
+       }
+       $s = $h . $s;
+    } elsif ($print_mode == 1) {
+       $s .= '<span style="background: #c0c0c0">' . $d->{sym} . '</span>';
+       if ($d->{kind} == 1) {
+           $s .= '(';
+           $s .= join(', ',
+                      map {
+                          html_printer(3,$_);
+                      } @{$d->{params}});
+           $s .= ')';
+       }
+       my $t = $d->{type};
+       $t =~ s/\?/$s/;
+       $s = $t;
+    } elsif ($print_mode == 2) {
+       $s .= $d->{sym};
+       if ($d->{kind} == 1) {
+           $s .= '(';
+           $s .= join(', ',
+                      map {
+                          html_printer(2,$_);
+                      } @{$d->{params}});
+           $s .= ')';
+       }
+       my $t = $d->{type};
+       $t =~ s/\?/$s/;
+       $s = $t;
+    }
+    return $s;
+}
+
+print STDERR "Info: building/updating symbol information database\n";
+
+$d = api_data->new();
+if (-s "$here/declarations.dat") {
+    $d->read_declaration_db("$here/declarations.dat");
+} else {
+    print STDERR "Warning: there was no file '$here/declarations.dat'.  A new one will be created\n";
+}
+
+for (sort keys %fipssyms) {
+    $newname = $_;
+    $namecomment = undef;
+    if ($oldname{$newname}) {
+       $oldname = $oldname{$newname};
+       $objname = $objname{$oldname} ? $objname{$oldname} : $objname{$newname};
+       $namecomment = "(renames $oldname)";
+    } else {
+       $objname = $objname{$newname};
+    }
+    if ($oldimpl{$newname}) {
+       $apisym = $oldimpl{$newname};
+       $namecomment = "(reimplements $apisym)" if !$namecomment;
+    } else {
+       $apisym = $newname;
+    }
+    $declaration = $declarations{$apisym};
+    print "<!--\n";
+    print "$newname\t\t$namecomment\tin file $objname:\n";
+    print "  ",$declaration,"\n  ";
+    $d->add_declaration($declaration,$newname,$objname,$namecomment);
+    print "-->\n";
+}
+
+$d->complete_directions();
+$d->write_declaration_db("$here/declarations.dat");
+
+print STDERR "Info: printing output\n";
+
+$d->on_all_declarations(
+    sub {
+       my $decl = shift; 
+       #$indent = 2;
+       #print printer($decl);
+       print "<p>",html_printer(0,$decl),"</p>\n";
+    });
diff --git a/fips/tools/declarations.dat b/fips/tools/declarations.dat
new file mode 100644 (file)
index 0000000..7d247bc
--- /dev/null
@@ -0,0 +1,7155 @@
+my $declaration_db = {
+                    '' => {
+                            'objfile' => './fips/fipscanister.[o|c]',
+                            'kind' => -1,
+                            'decl' => undef,
+                            'sym' => undef,
+                            'oldsym' => undef
+                          },
+                    'FIPS_rand_strength' => {
+                                              'params' => [],
+                                              'objfile' => './fips/rand/fips_rand_lib.[o|c]',
+                                              'kind' => 1,
+                                              'symcomment' => undef,
+                                              'sym' => 'FIPS_rand_strength',
+                                              'type' => 'int ?',
+                                              'oldsym' => 'FIPS_rand_strength'
+                                            },
+                    'FIPS_selftest' => {
+                                         'params' => [],
+                                         'objfile' => './fips/fips_post.[o|c]',
+                                         'kind' => 1,
+                                         'symcomment' => undef,
+                                         'sym' => 'FIPS_selftest',
+                                         'type' => 'int ?',
+                                         'oldsym' => 'FIPS_selftest'
+                                       },
+                    'FIPS_ec_group_set_asn1_flag' => {
+                                                       'params' => [
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'group',
+                                                                       'type' => 'EC_GROUP *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '->',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'flag',
+                                                                       'type' => 'int ?',
+                                                                       'oldsym' => undef
+                                                                     }
+                                                                   ],
+                                                       'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                       'kind' => 1,
+                                                       'symcomment' => '(renames EC_GROUP_set_asn1_flag)',
+                                                       'sym' => 'FIPS_ec_group_set_asn1_flag',
+                                                       'type' => 'void ?',
+                                                       'oldsym' => 'EC_GROUP_set_asn1_flag'
+                                                     },
+                    'FIPS_drbg_reseed' => {
+                                            'params' => [
+                                                          {
+                                                            'direction' => '<-?',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'dctx',
+                                                            'type' => 'DRBG_CTX *?',
+                                                            'oldsym' => undef
+                                                          },
+                                                          {
+                                                            'direction' => '->',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'adin',
+                                                            'type' => 'const unsigned char *?',
+                                                            'oldsym' => undef
+                                                          },
+                                                          {
+                                                            'direction' => '->',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'adinlen',
+                                                            'type' => 'size_t ?',
+                                                            'oldsym' => undef
+                                                          }
+                                                        ],
+                                            'objfile' => './fips/rand/fips_drbg_lib.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => undef,
+                                            'sym' => 'FIPS_drbg_reseed',
+                                            'type' => 'int ?',
+                                            'oldsym' => 'FIPS_drbg_reseed'
+                                          },
+                    'FIPS_evp_aes_256_ofb' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_256_ofb)',
+                                                'sym' => 'FIPS_evp_aes_256_ofb',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_256_ofb'
+                                              },
+                    'FIPS_evp_aes_256_ecb' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_256_ecb)',
+                                                'sym' => 'FIPS_evp_aes_256_ecb',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_256_ecb'
+                                              },
+                    'FIPS_rsa_new' => {
+                                        'params' => [],
+                                        'objfile' => './fips/rsa/fips_rsa_lib.[o|c]',
+                                        'kind' => 1,
+                                        'symcomment' => undef,
+                                        'sym' => 'FIPS_rsa_new',
+                                        'type' => 'struct rsa_st *?',
+                                        'oldsym' => 'FIPS_rsa_new'
+                                      },
+                    'FIPS_x931_reset' => {
+                                           'params' => [],
+                                           'objfile' => './fips/rand/fips_rand.[o|c]',
+                                           'kind' => 1,
+                                           'symcomment' => undef,
+                                           'sym' => 'FIPS_x931_reset',
+                                           'type' => 'void ?',
+                                           'oldsym' => 'FIPS_x931_reset'
+                                         },
+                    'FIPS_set_malloc_callbacks' => {
+                                                     'params' => [
+                                                                   {
+                                                                     'direction' => '->',
+                                                                     'params' => undef,
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'malloc_cb',
+                                                                     'type' => 'void *(*?)(int num, const char *file, int line)'
+                                                                   },
+                                                                   {
+                                                                     'direction' => '<-? <->?',
+                                                                     'params' => undef,
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'free_cb',
+                                                                     'type' => 'void (*?)(void *)'
+                                                                   }
+                                                                 ],
+                                                     'objfile' => './fips/utl/fips_mem.[o|c]',
+                                                     'kind' => 1,
+                                                     'symcomment' => undef,
+                                                     'sym' => 'FIPS_set_malloc_callbacks',
+                                                     'type' => 'void ?',
+                                                     'oldsym' => 'FIPS_set_malloc_callbacks'
+                                                   },
+                    'FIPS_digest' => {
+                                       'objfile' => './fips/utl/fips_md.[o|c]',
+                                       'params' => [
+                                                     {
+                                                       'direction' => '->',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'data',
+                                                       'type' => 'const void *?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '->',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'count',
+                                                       'type' => 'size_t ?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '<-?',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'md',
+                                                       'type' => 'unsigned char *?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '<-?',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'size',
+                                                       'type' => 'unsigned int *?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '->',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'type',
+                                                       'type' => 'const EVP_MD *?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '<-? <->?',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'impl',
+                                                       'type' => 'ENGINE *?',
+                                                       'oldsym' => undef
+                                                     }
+                                                   ],
+                                       'kind' => 1,
+                                       'symcomment' => '(reimplements EVP_Digest)',
+                                       'sym' => 'FIPS_digest',
+                                       'oldsym' => 'EVP_Digest',
+                                       'type' => '__owur int ?'
+                                     },
+                    'FIPS_evp_aes_128_ctr' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_128_ctr)',
+                                                'sym' => 'FIPS_evp_aes_128_ctr',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_128_ctr'
+                                              },
+                    'FIPS_rsa_flags' => {
+                                          'params' => [
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'r',
+                                                          'type' => 'const RSA *?',
+                                                          'oldsym' => undef
+                                                        }
+                                                      ],
+                                          'objfile' => './crypto/rsa/rsa_crpt.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => '(renames RSA_flags)',
+                                          'sym' => 'FIPS_rsa_flags',
+                                          'type' => 'int ?',
+                                          'oldsym' => 'RSA_flags'
+                                        },
+                    'FIPS_set_error_callbacks' => {
+                                                    'params' => [
+                                                                  {
+                                                                    'direction' => '->',
+                                                                    'params' => undef,
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'put_cb',
+                                                                    'type' => 'void (*?)(int lib, int func,int reason,const char *file,int line)'
+                                                                  },
+                                                                  {
+                                                                    'direction' => '<-?',
+                                                                    'params' => undef,
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'add_cb',
+                                                                    'type' => 'void (*?)(int num, va_list args)'
+                                                                  }
+                                                                ],
+                                                    'objfile' => './fips/utl/fips_err.[o|c]',
+                                                    'kind' => 1,
+                                                    'symcomment' => undef,
+                                                    'sym' => 'FIPS_set_error_callbacks',
+                                                    'type' => 'void ?',
+                                                    'oldsym' => 'FIPS_set_error_callbacks'
+                                                  },
+                    'FIPS_rsa_private_encrypt' => {
+                                                    'params' => [
+                                                                  {
+                                                                    'direction' => '->',
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'flen',
+                                                                    'type' => 'int ?',
+                                                                    'oldsym' => undef
+                                                                  },
+                                                                  {
+                                                                    'direction' => '->',
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'from',
+                                                                    'type' => 'const unsigned char *?',
+                                                                    'oldsym' => undef
+                                                                  },
+                                                                  {
+                                                                    'direction' => '<-?',
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'to',
+                                                                    'type' => 'unsigned char *?',
+                                                                    'oldsym' => undef
+                                                                  },
+                                                                  {
+                                                                    'direction' => '<-? <->?',
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'rsa',
+                                                                    'type' => 'RSA *?',
+                                                                    'oldsym' => undef
+                                                                  },
+                                                                  {
+                                                                    'direction' => '->',
+                                                                    'objfile' => undef,
+                                                                    'kind' => 0,
+                                                                    'sym' => 'padding',
+                                                                    'type' => 'int ?',
+                                                                    'oldsym' => undef
+                                                                  }
+                                                                ],
+                                                    'objfile' => './crypto/rsa/rsa_crpt.[o|c]',
+                                                    'kind' => 1,
+                                                    'symcomment' => '(renames RSA_private_encrypt)',
+                                                    'sym' => 'FIPS_rsa_private_encrypt',
+                                                    'type' => 'int ?',
+                                                    'oldsym' => 'RSA_private_encrypt'
+                                                  },
+                    'FIPS_x931_method' => {
+                                            'params' => [],
+                                            'objfile' => './fips/rand/fips_rand.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => undef,
+                                            'sym' => 'FIPS_x931_method',
+                                            'type' => 'const RAND_METHOD *?',
+                                            'oldsym' => 'FIPS_x931_method'
+                                          },
+                    'FIPS_bn_pseudo_rand_range' => {
+                                                     'params' => [
+                                                                   {
+                                                                     'direction' => '<-? <->?',
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'rnd',
+                                                                     'type' => 'BIGNUM *?',
+                                                                     'oldsym' => undef
+                                                                   },
+                                                                   {
+                                                                     'direction' => '->',
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'range',
+                                                                     'type' => 'const BIGNUM *?',
+                                                                     'oldsym' => undef
+                                                                   }
+                                                                 ],
+                                                     'objfile' => './crypto/bn/bn_rand.[o|c]',
+                                                     'kind' => 1,
+                                                     'symcomment' => '(renames BN_pseudo_rand_range)',
+                                                     'sym' => 'FIPS_bn_pseudo_rand_range',
+                                                     'type' => 'int ?',
+                                                     'oldsym' => 'BN_pseudo_rand_range'
+                                                   },
+                    'FIPS_evp_aes_128_gcm' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_128_gcm)',
+                                                'sym' => 'FIPS_evp_aes_128_gcm',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_128_gcm'
+                                              },
+                    'FIPS_evp_aes_192_cbc' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_192_cbc)',
+                                                'sym' => 'FIPS_evp_aes_192_cbc',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_192_cbc'
+                                              },
+                    'FIPS_evp_ecdsa' => {
+                                          'params' => [],
+                                          'objfile' => './crypto/evp/m_ecdsa.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => '(renames EVP_ecdsa)',
+                                          'sym' => 'FIPS_evp_ecdsa',
+                                          'type' => 'const EVP_MD *?',
+                                          'oldsym' => 'EVP_ecdsa'
+                                        },
+                    'FIPS_crypto_set_id_callback' => {
+                                                       'params' => [
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'params' => undef,
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'func',
+                                                                       'type' => 'unsigned long (*?)(void)'
+                                                                     }
+                                                                   ],
+                                                       'objfile' => './crypto/thr_id.[o|c]',
+                                                       'kind' => 1,
+                                                       'symcomment' => '(renames CRYPTO_set_id_callback)',
+                                                       'sym' => 'FIPS_crypto_set_id_callback',
+                                                       'type' => 'void ?',
+                                                       'oldsym' => 'CRYPTO_set_id_callback'
+                                                     },
+                    'FIPS_bn_free' => {
+                                        'params' => [
+                                                      {
+                                                        'direction' => '<-? <->?',
+                                                        'objfile' => undef,
+                                                        'kind' => 0,
+                                                        'sym' => 'a',
+                                                        'type' => 'BIGNUM *?',
+                                                        'oldsym' => undef
+                                                      }
+                                                    ],
+                                        'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                        'kind' => 1,
+                                        'symcomment' => '(renames BN_free)',
+                                        'sym' => 'FIPS_bn_free',
+                                        'type' => 'void ?',
+                                        'oldsym' => 'BN_free'
+                                      },
+                    'FIPS_ec_key_clear_flags' => {
+                                                   'params' => [
+                                                                 {
+                                                                   'direction' => '<-? <->?',
+                                                                   'objfile' => undef,
+                                                                   'kind' => 0,
+                                                                   'sym' => 'key',
+                                                                   'type' => 'EC_KEY *?',
+                                                                   'oldsym' => undef
+                                                                 },
+                                                                 {
+                                                                   'direction' => '->',
+                                                                   'objfile' => undef,
+                                                                   'kind' => 0,
+                                                                   'sym' => 'flags',
+                                                                   'type' => 'int ?',
+                                                                   'oldsym' => undef
+                                                                 }
+                                                               ],
+                                                   'objfile' => './crypto/ec/ec_key.[o|c]',
+                                                   'kind' => 1,
+                                                   'symcomment' => '(renames EC_KEY_clear_flags)',
+                                                   'sym' => 'FIPS_ec_key_clear_flags',
+                                                   'type' => 'void ?',
+                                                   'oldsym' => 'EC_KEY_clear_flags'
+                                                 },
+                    'FIPS_cipher_ctx_new' => {
+                                               'params' => [],
+                                               'objfile' => './fips/utl/fips_enc.[o|c]',
+                                               'kind' => 1,
+                                               'symcomment' => '(reimplements EVP_CIPHER_CTX_new)',
+                                               'sym' => 'FIPS_cipher_ctx_new',
+                                               'type' => 'EVP_CIPHER_CTX *?',
+                                               'oldsym' => 'EVP_CIPHER_CTX_new'
+                                             },
+                    'FIPS_bn_clear' => {
+                                         'params' => [
+                                                       {
+                                                         'direction' => '<-? <->?',
+                                                         'objfile' => undef,
+                                                         'kind' => 0,
+                                                         'sym' => 'a',
+                                                         'type' => 'BIGNUM *?',
+                                                         'oldsym' => undef
+                                                       }
+                                                     ],
+                                         'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                         'kind' => 1,
+                                         'symcomment' => '(renames BN_clear)',
+                                         'sym' => 'FIPS_bn_clear',
+                                         'type' => 'void ?',
+                                         'oldsym' => 'BN_clear'
+                                       },
+                    'FIPS_dh_compute_key' => {
+                                               'params' => [
+                                                             {
+                                                               'direction' => '<-?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'key',
+                                                               'type' => 'unsigned char *?',
+                                                               'oldsym' => undef
+                                                             },
+                                                             {
+                                                               'direction' => '->',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'pub_key',
+                                                               'type' => 'const BIGNUM *?',
+                                                               'oldsym' => undef
+                                                             },
+                                                             {
+                                                               'direction' => '<-? <->?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'dh',
+                                                               'type' => 'DH *?',
+                                                               'oldsym' => undef
+                                                             }
+                                                           ],
+                                               'objfile' => './crypto/dh/dh_key.[o|c]',
+                                               'kind' => 1,
+                                               'symcomment' => '(renames DH_compute_key)',
+                                               'sym' => 'FIPS_dh_compute_key',
+                                               'type' => 'int ?',
+                                               'oldsym' => 'DH_compute_key'
+                                             },
+                    'FIPS_evp_des_ede_ecb' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_des3.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_des_ede_ecb)',
+                                                'sym' => 'FIPS_evp_des_ede_ecb',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_des_ede_ecb'
+                                              },
+                    'FIPS_ec_group_method_of' => {
+                                                   'params' => [
+                                                                 {
+                                                                   'direction' => '->',
+                                                                   'objfile' => undef,
+                                                                   'kind' => 0,
+                                                                   'sym' => 'group',
+                                                                   'type' => 'const EC_GROUP *?',
+                                                                   'oldsym' => undef
+                                                                 }
+                                                               ],
+                                                   'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                   'kind' => 1,
+                                                   'symcomment' => '(renames EC_GROUP_method_of)',
+                                                   'sym' => 'FIPS_ec_group_method_of',
+                                                   'type' => 'const EC_METHOD *?',
+                                                   'oldsym' => 'EC_GROUP_method_of'
+                                                 },
+                    'FIPS_ec_key_set_private_key' => {
+                                                       'params' => [
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'key',
+                                                                       'type' => 'EC_KEY *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '->',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'prv',
+                                                                       'type' => 'const BIGNUM *?',
+                                                                       'oldsym' => undef
+                                                                     }
+                                                                   ],
+                                                       'objfile' => './crypto/ec/ec_key.[o|c]',
+                                                       'kind' => 1,
+                                                       'symcomment' => '(renames EC_KEY_set_private_key)',
+                                                       'sym' => 'FIPS_ec_key_set_private_key',
+                                                       'type' => 'int ?',
+                                                       'oldsym' => 'EC_KEY_set_private_key'
+                                                     },
+                    'FIPS_ec_key_precompute_mult' => {
+                                                       'params' => [
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'key',
+                                                                       'type' => 'EC_KEY *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '<-?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'ctx',
+                                                                       'type' => 'BN_CTX *?',
+                                                                       'oldsym' => undef
+                                                                     }
+                                                                   ],
+                                                       'objfile' => './crypto/ec/ec_key.[o|c]',
+                                                       'kind' => 1,
+                                                       'symcomment' => '(renames EC_KEY_precompute_mult)',
+                                                       'sym' => 'FIPS_ec_key_precompute_mult',
+                                                       'type' => 'int ?',
+                                                       'oldsym' => 'EC_KEY_precompute_mult'
+                                                     },
+                    'FIPS_add_error_data' => {
+                                               'params' => [
+                                                             {
+                                                               'direction' => '->',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'num',
+                                                               'type' => 'int ?',
+                                                               'oldsym' => undef
+                                                             },
+                                                             {
+                                                               'direction' => '->',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => '...',
+                                                               'type' => '?'
+                                                             }
+                                                           ],
+                                               'objfile' => './fips/utl/fips_err.[o|c]',
+                                               'kind' => 1,
+                                               'symcomment' => '(reimplements ERR_add_error_data)',
+                                               'sym' => 'FIPS_add_error_data',
+                                               'type' => 'void ?',
+                                               'oldsym' => 'ERR_add_error_data'
+                                             },
+                    'FIPS_drbg_uninstantiate' => {
+                                                   'params' => [
+                                                                 {
+                                                                   'direction' => '<-?',
+                                                                   'objfile' => undef,
+                                                                   'kind' => 0,
+                                                                   'sym' => 'dctx',
+                                                                   'type' => 'DRBG_CTX *?',
+                                                                   'oldsym' => undef
+                                                                 }
+                                                               ],
+                                                   'objfile' => './fips/rand/fips_drbg_lib.[o|c]',
+                                                   'kind' => 1,
+                                                   'symcomment' => undef,
+                                                   'sym' => 'FIPS_drbg_uninstantiate',
+                                                   'type' => 'int ?',
+                                                   'oldsym' => 'FIPS_drbg_uninstantiate'
+                                                 },
+                    'FIPS_dh_generate_key' => {
+                                                'params' => [
+                                                              {
+                                                                'direction' => '<-? <->?',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'dh',
+                                                                'type' => 'DH *?',
+                                                                'oldsym' => undef
+                                                              }
+                                                            ],
+                                                'objfile' => './crypto/dh/dh_key.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames DH_generate_key)',
+                                                'sym' => 'FIPS_dh_generate_key',
+                                                'type' => 'int ?',
+                                                'oldsym' => 'DH_generate_key'
+                                              },
+                    'FIPS_bn_num_bits_word' => {
+                                                 'params' => [
+                                                               {
+                                                                 'direction' => '->',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'l',
+                                                                 'type' => 'BN_ULONG ?',
+                                                                 'oldsym' => undef
+                                                               }
+                                                             ],
+                                                 'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                                 'kind' => 1,
+                                                 'symcomment' => '(renames BN_num_bits_word)',
+                                                 'sym' => 'FIPS_bn_num_bits_word',
+                                                 'type' => 'int ?',
+                                                 'oldsym' => 'BN_num_bits_word'
+                                               },
+                    'FIPS_cmac_final' => {
+                                           'params' => [
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'ctx',
+                                                           'type' => 'CMAC_CTX *?',
+                                                           'oldsym' => undef
+                                                         },
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'out',
+                                                           'type' => 'unsigned char *?',
+                                                           'oldsym' => undef
+                                                         },
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'poutlen',
+                                                           'type' => 'size_t *?',
+                                                           'oldsym' => undef
+                                                         }
+                                                       ],
+                                           'objfile' => './crypto/cmac/cmac.[o|c]',
+                                           'kind' => 1,
+                                           'symcomment' => '(renames CMAC_Final)',
+                                           'sym' => 'FIPS_cmac_final',
+                                           'type' => 'int ?',
+                                           'oldsym' => 'CMAC_Final'
+                                         },
+                    'FIPS_bn_set_bit' => {
+                                           'params' => [
+                                                         {
+                                                           'direction' => '<-? <->?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'a',
+                                                           'type' => 'BIGNUM *?',
+                                                           'oldsym' => undef
+                                                         },
+                                                         {
+                                                           'direction' => '->',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'n',
+                                                           'type' => 'int ?',
+                                                           'oldsym' => undef
+                                                         }
+                                                       ],
+                                           'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                           'kind' => 1,
+                                           'symcomment' => '(renames BN_set_bit)',
+                                           'sym' => 'FIPS_bn_set_bit',
+                                           'type' => 'int ?',
+                                           'oldsym' => 'BN_set_bit'
+                                         },
+                    'FIPS_selftest_des' => {
+                                             'params' => [],
+                                             'objfile' => './fips/des/fips_des_selftest.[o|c]',
+                                             'kind' => 1,
+                                             'symcomment' => undef,
+                                             'sym' => 'FIPS_selftest_des',
+                                             'type' => 'int ?',
+                                             'oldsym' => 'FIPS_selftest_des'
+                                           },
+                    'FIPS_cipher_ctx_init' => {
+                                                'params' => [
+                                                              {
+                                                                'direction' => '<-?',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'a',
+                                                                'type' => 'EVP_CIPHER_CTX *?',
+                                                                'oldsym' => undef
+                                                              }
+                                                            ],
+                                                'objfile' => './fips/utl/fips_enc.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(reimplements EVP_CIPHER_CTX_init)',
+                                                'sym' => 'FIPS_cipher_ctx_init',
+                                                'type' => 'void ?',
+                                                'oldsym' => 'EVP_CIPHER_CTX_init'
+                                              },
+                    'FIPS_ec_point_get_affine_coordinates_gf2m' => {
+                                                                     'params' => [
+                                                                                   {
+                                                                                     'direction' => '->',
+                                                                                     'objfile' => undef,
+                                                                                     'kind' => 0,
+                                                                                     'sym' => 'group',
+                                                                                     'type' => 'const EC_GROUP *?',
+                                                                                     'oldsym' => undef
+                                                                                   },
+                                                                                   {
+                                                                                     'direction' => '->',
+                                                                                     'objfile' => undef,
+                                                                                     'kind' => 0,
+                                                                                     'sym' => 'p',
+                                                                                     'type' => 'const EC_POINT *?',
+                                                                                     'oldsym' => undef
+                                                                                   },
+                                                                                   {
+                                                                                     'direction' => '<-? <->?',
+                                                                                     'objfile' => undef,
+                                                                                     'kind' => 0,
+                                                                                     'sym' => 'x',
+                                                                                     'type' => 'BIGNUM *?',
+                                                                                     'oldsym' => undef
+                                                                                   },
+                                                                                   {
+                                                                                     'direction' => '<-? <->?',
+                                                                                     'objfile' => undef,
+                                                                                     'kind' => 0,
+                                                                                     'sym' => 'y',
+                                                                                     'type' => 'BIGNUM *?',
+                                                                                     'oldsym' => undef
+                                                                                   },
+                                                                                   {
+                                                                                     'direction' => '<-?',
+                                                                                     'objfile' => undef,
+                                                                                     'kind' => 0,
+                                                                                     'sym' => 'ctx',
+                                                                                     'type' => 'BN_CTX *?',
+                                                                                     'oldsym' => undef
+                                                                                   }
+                                                                                 ],
+                                                                     'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                                     'kind' => 1,
+                                                                     'symcomment' => '(renames EC_POINT_get_affine_coordinates_GF2m)',
+                                                                     'sym' => 'FIPS_ec_point_get_affine_coordinates_gf2m',
+                                                                     'type' => 'int ?',
+                                                                     'oldsym' => 'EC_POINT_get_affine_coordinates_GF2m'
+                                                                   },
+                    'FIPS_dh_generate_parameters_ex' => {
+                                                          'params' => [
+                                                                        {
+                                                                          'direction' => '<-? <->?',
+                                                                          'objfile' => undef,
+                                                                          'kind' => 0,
+                                                                          'sym' => 'dh',
+                                                                          'type' => 'DH *?',
+                                                                          'oldsym' => undef
+                                                                        },
+                                                                        {
+                                                                          'direction' => '->',
+                                                                          'objfile' => undef,
+                                                                          'kind' => 0,
+                                                                          'sym' => 'prime_len',
+                                                                          'type' => 'int ?',
+                                                                          'oldsym' => undef
+                                                                        },
+                                                                        {
+                                                                          'direction' => '->',
+                                                                          'objfile' => undef,
+                                                                          'kind' => 0,
+                                                                          'sym' => 'generator',
+                                                                          'type' => 'int ?',
+                                                                          'oldsym' => undef
+                                                                        },
+                                                                        {
+                                                                          'direction' => '<-? <->?',
+                                                                          'objfile' => undef,
+                                                                          'kind' => 0,
+                                                                          'sym' => 'cb',
+                                                                          'type' => 'BN_GENCB *?',
+                                                                          'oldsym' => undef
+                                                                        }
+                                                                      ],
+                                                          'objfile' => './crypto/dh/dh_gen.[o|c]',
+                                                          'kind' => 1,
+                                                          'symcomment' => '(renames DH_generate_parameters_ex)',
+                                                          'sym' => 'FIPS_dh_generate_parameters_ex',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => 'DH_generate_parameters_ex'
+                                                        },
+                    'FIPS_evp_aes_256_xts' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_256_xts)',
+                                                'sym' => 'FIPS_evp_aes_256_xts',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_256_xts'
+                                              },
+                    'FIPS_drbg_instantiate' => {
+                                                 'params' => [
+                                                               {
+                                                                 'direction' => '<-?',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'dctx',
+                                                                 'type' => 'DRBG_CTX *?',
+                                                                 'oldsym' => undef
+                                                               },
+                                                               {
+                                                                 'direction' => '->',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'pers',
+                                                                 'type' => 'const unsigned char *?',
+                                                                 'oldsym' => undef
+                                                               },
+                                                               {
+                                                                 'direction' => '->',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'perslen',
+                                                                 'type' => 'size_t ?',
+                                                                 'oldsym' => undef
+                                                               }
+                                                             ],
+                                                 'objfile' => './fips/rand/fips_drbg_lib.[o|c]',
+                                                 'kind' => 1,
+                                                 'symcomment' => undef,
+                                                 'sym' => 'FIPS_drbg_instantiate',
+                                                 'type' => 'int ?',
+                                                 'oldsym' => 'FIPS_drbg_instantiate'
+                                               },
+                    'FIPS_dsa_sign_digest' => {
+                                                'params' => [
+                                                              {
+                                                                'direction' => '<-? <->?',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'dsa',
+                                                                'type' => 'DSA *?',
+                                                                'oldsym' => undef
+                                                              },
+                                                              {
+                                                                'direction' => '->',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'dig',
+                                                                'type' => 'const unsigned char *?',
+                                                                'oldsym' => undef
+                                                              },
+                                                              {
+                                                                'direction' => '->',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'dlen',
+                                                                'type' => 'int ?',
+                                                                'oldsym' => undef
+                                                              }
+                                                            ],
+                                                'objfile' => './fips/dsa/fips_dsa_sign.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => undef,
+                                                'sym' => 'FIPS_dsa_sign_digest',
+                                                'type' => 'DSA_SIG * ?',
+                                                'oldsym' => 'FIPS_dsa_sign_digest'
+                                              },
+                    'FIPS_drbg_init' => {
+                                          'params' => [
+                                                        {
+                                                          'direction' => '<-?',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'dctx',
+                                                          'type' => 'DRBG_CTX *?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'type',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'flags',
+                                                          'type' => 'unsigned int ?',
+                                                          'oldsym' => undef
+                                                        }
+                                                      ],
+                                          'objfile' => './fips/rand/fips_drbg_lib.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => undef,
+                                          'sym' => 'FIPS_drbg_init',
+                                          'type' => 'int ?',
+                                          'oldsym' => 'FIPS_drbg_init'
+                                        },
+                    'FIPS_x931_seed' => {
+                                          'params' => [
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'buf',
+                                                          'type' => 'const void *?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'num',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        }
+                                                      ],
+                                          'objfile' => './fips/rand/fips_rand.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => undef,
+                                          'sym' => 'FIPS_x931_seed',
+                                          'type' => 'int ?',
+                                          'oldsym' => 'FIPS_x931_seed'
+                                        },
+                    'FIPS_drbg_set_check_interval' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'dctx',
+                                                                        'type' => 'DRBG_CTX *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'interval',
+                                                                        'type' => 'int ?',
+                                                                        'oldsym' => undef
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './fips/rand/fips_drbg_lib.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => undef,
+                                                        'sym' => 'FIPS_drbg_set_check_interval',
+                                                        'type' => 'void ?',
+                                                        'oldsym' => 'FIPS_drbg_set_check_interval'
+                                                      },
+                    'FIPS_module_mode_set' => {
+                                                'params' => [
+                                                              {
+                                                                'direction' => '->',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'onoff',
+                                                                'type' => 'int ?',
+                                                                'oldsym' => undef
+                                                              }
+                                                            ],
+                                                'objfile' => './fips/fips.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => undef,
+                                                'sym' => 'FIPS_module_mode_set',
+                                                'type' => 'int ?',
+                                                'oldsym' => 'FIPS_module_mode_set'
+                                              },
+                    'FIPS_cipher_ctx_set_key_length' => {
+                                                          'params' => [
+                                                                        {
+                                                                          'direction' => '<-?',
+                                                                          'objfile' => undef,
+                                                                          'kind' => 0,
+                                                                          'sym' => 'x',
+                                                                          'type' => 'EVP_CIPHER_CTX *?',
+                                                                          'oldsym' => undef
+                                                                        },
+                                                                        {
+                                                                          'direction' => '->',
+                                                                          'objfile' => undef,
+                                                                          'kind' => 0,
+                                                                          'sym' => 'keylen',
+                                                                          'type' => 'int ?',
+                                                                          'oldsym' => undef
+                                                                        }
+                                                                      ],
+                                                          'objfile' => './fips/utl/fips_enc.[o|c]',
+                                                          'kind' => 1,
+                                                          'symcomment' => '(reimplements EVP_CIPHER_CTX_set_key_length)',
+                                                          'sym' => 'FIPS_cipher_ctx_set_key_length',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => 'EVP_CIPHER_CTX_set_key_length'
+                                                        },
+                    'FIPS_rand_set_method' => {
+                                                'params' => [
+                                                              {
+                                                                'direction' => '->',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'meth',
+                                                                'type' => 'const RAND_METHOD *?',
+                                                                'oldsym' => undef
+                                                              }
+                                                            ],
+                                                'objfile' => './fips/rand/fips_rand_lib.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => undef,
+                                                'sym' => 'FIPS_rand_set_method',
+                                                'type' => 'int ?',
+                                                'oldsym' => 'FIPS_rand_set_method'
+                                              },
+                    'FIPS_post_set_callback' => {
+                                                  'params' => [
+                                                                {
+                                                                  'direction' => '<-?',
+                                                                  'params' => undef,
+                                                                  'objfile' => undef,
+                                                                  'kind' => 0,
+                                                                  'sym' => 'post_cb',
+                                                                  'type' => 'int (*?)(int op, int id, int subid, void *ex)'
+                                                                }
+                                                              ],
+                                                  'objfile' => './fips/fips_post.[o|c]',
+                                                  'kind' => 1,
+                                                  'symcomment' => undef,
+                                                  'sym' => 'FIPS_post_set_callback',
+                                                  'type' => 'void ?',
+                                                  'oldsym' => 'FIPS_post_set_callback'
+                                                },
+                    'FIPS_crypto_threadid_hash' => {
+                                                     'params' => [
+                                                                   {
+                                                                     'direction' => '->',
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'id',
+                                                                     'type' => 'const CRYPTO_THREADID *?',
+                                                                     'oldsym' => undef
+                                                                   }
+                                                                 ],
+                                                     'objfile' => './crypto/thr_id.[o|c]',
+                                                     'kind' => 1,
+                                                     'symcomment' => '(renames CRYPTO_THREADID_hash)',
+                                                     'sym' => 'FIPS_crypto_threadid_hash',
+                                                     'type' => 'unsigned long ?',
+                                                     'oldsym' => 'CRYPTO_THREADID_hash'
+                                                   },
+                    'FIPS_ecdsa_sig_free' => {
+                                               'params' => [
+                                                             {
+                                                               'direction' => '<-? <->?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'sig',
+                                                               'type' => 'ECDSA_SIG *?',
+                                                               'oldsym' => undef
+                                                             }
+                                                           ],
+                                               'objfile' => './fips/ecdsa/fips_ecdsa_lib.[o|c]',
+                                               'kind' => 1,
+                                               'symcomment' => '(reimplements ECDSA_SIG_free)',
+                                               'sym' => 'FIPS_ecdsa_sig_free',
+                                               'type' => 'void ?',
+                                               'oldsym' => 'ECDSA_SIG_free'
+                                             },
+                    'FIPS_bn_rand' => {
+                                        'params' => [
+                                                      {
+                                                        'direction' => '<-? <->?',
+                                                        'objfile' => undef,
+                                                        'kind' => 0,
+                                                        'sym' => 'rnd',
+                                                        'type' => 'BIGNUM *?',
+                                                        'oldsym' => undef
+                                                      },
+                                                      {
+                                                        'direction' => '->',
+                                                        'objfile' => undef,
+                                                        'kind' => 0,
+                                                        'sym' => 'bits',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => undef
+                                                      },
+                                                      {
+                                                        'direction' => '->',
+                                                        'objfile' => undef,
+                                                        'kind' => 0,
+                                                        'sym' => 'top',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => undef
+                                                      },
+                                                      {
+                                                        'direction' => '->',
+                                                        'objfile' => undef,
+                                                        'kind' => 0,
+                                                        'sym' => 'bottom',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => undef
+                                                      }
+                                                    ],
+                                        'objfile' => './crypto/bn/bn_rand.[o|c]',
+                                        'kind' => 1,
+                                        'symcomment' => '(renames BN_rand)',
+                                        'sym' => 'FIPS_bn_rand',
+                                        'type' => 'int ?',
+                                        'oldsym' => 'BN_rand'
+                                      },
+                    'FIPS_evp_des_ede3_cfb8' => {
+                                                  'params' => [],
+                                                  'objfile' => './crypto/evp/e_des3.[o|c]',
+                                                  'kind' => 1,
+                                                  'symcomment' => '(renames EVP_des_ede3_cfb8)',
+                                                  'sym' => 'FIPS_evp_des_ede3_cfb8',
+                                                  'type' => 'const EVP_CIPHER *?',
+                                                  'oldsym' => 'EVP_des_ede3_cfb8'
+                                                },
+                    'FIPS_hmac_final' => {
+                                           'params' => [
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'ctx',
+                                                           'type' => 'HMAC_CTX *?',
+                                                           'oldsym' => undef
+                                                         },
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'md',
+                                                           'type' => 'unsigned char *?',
+                                                           'oldsym' => undef
+                                                         },
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'len',
+                                                           'type' => 'unsigned int *?',
+                                                           'oldsym' => undef
+                                                         }
+                                                       ],
+                                           'objfile' => './crypto/hmac/hmac.[o|c]',
+                                           'kind' => 1,
+                                           'symcomment' => '(renames HMAC_Final)',
+                                           'sym' => 'FIPS_hmac_final',
+                                           'type' => '__owur int ?',
+                                           'oldsym' => 'HMAC_Final'
+                                         },
+                    'FIPS_bn_bn2bin' => {
+                                          'params' => [
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'a',
+                                                          'type' => 'const BIGNUM *?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '<-?',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'to',
+                                                          'type' => 'unsigned char *?',
+                                                          'oldsym' => undef
+                                                        }
+                                                      ],
+                                          'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => '(renames BN_bn2bin)',
+                                          'sym' => 'FIPS_bn_bn2bin',
+                                          'type' => 'int ?',
+                                          'oldsym' => 'BN_bn2bin'
+                                        },
+                    'FIPS_bn_bin2bn' => {
+                                          'params' => [
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 's',
+                                                          'type' => 'const unsigned char *?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'len',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '<-? <->?',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'ret',
+                                                          'type' => 'BIGNUM *?',
+                                                          'oldsym' => undef
+                                                        }
+                                                      ],
+                                          'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => '(renames BN_bin2bn)',
+                                          'sym' => 'FIPS_bn_bin2bn',
+                                          'type' => 'BIGNUM *?',
+                                          'oldsym' => 'BN_bin2bn'
+                                        },
+                    'FIPS_evp_aes_192_cfb128' => {
+                                                   'params' => [],
+                                                   'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                   'kind' => 1,
+                                                   'symcomment' => '(renames EVP_aes_192_cfb128)',
+                                                   'sym' => 'FIPS_evp_aes_192_cfb128',
+                                                   'type' => 'const EVP_CIPHER *?',
+                                                   'oldsym' => 'EVP_aes_192_cfb128'
+                                                 },
+                    'FIPS_ec_group_set_curve_name' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '<-? <->?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'group',
+                                                                        'type' => 'EC_GROUP *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'nid',
+                                                                        'type' => 'int ?',
+                                                                        'oldsym' => undef
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => '(renames EC_GROUP_set_curve_name)',
+                                                        'sym' => 'FIPS_ec_group_set_curve_name',
+                                                        'type' => 'void ?',
+                                                        'oldsym' => 'EC_GROUP_set_curve_name'
+                                                      },
+                    'FIPS_ec_group_new' => {
+                                             'params' => [
+                                                           {
+                                                             'direction' => '->',
+                                                             'objfile' => undef,
+                                                             'kind' => 0,
+                                                             'sym' => 'meth',
+                                                             'type' => 'const EC_METHOD *?',
+                                                             'oldsym' => undef
+                                                           }
+                                                         ],
+                                             'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                             'kind' => 1,
+                                             'symcomment' => '(renames EC_GROUP_new)',
+                                             'sym' => 'FIPS_ec_group_new',
+                                             'type' => 'EC_GROUP *?',
+                                             'oldsym' => 'EC_GROUP_new'
+                                           },
+                    'FIPS_rand_pseudo_bytes' => {
+                                                  'params' => [
+                                                                {
+                                                                  'direction' => '<-?',
+                                                                  'objfile' => undef,
+                                                                  'kind' => 0,
+                                                                  'sym' => 'buf',
+                                                                  'type' => 'unsigned char *?',
+                                                                  'oldsym' => undef
+                                                                },
+                                                                {
+                                                                  'direction' => '->',
+                                                                  'objfile' => undef,
+                                                                  'kind' => 0,
+                                                                  'sym' => 'num',
+                                                                  'type' => 'int ?',
+                                                                  'oldsym' => undef
+                                                                }
+                                                              ],
+                                                  'objfile' => './fips/rand/fips_rand_lib.[o|c]',
+                                                  'kind' => 1,
+                                                  'symcomment' => '(reimplements RAND_pseudo_bytes)',
+                                                  'sym' => 'FIPS_rand_pseudo_bytes',
+                                                  'type' => 'int ?',
+                                                  'oldsym' => 'RAND_pseudo_bytes'
+                                                },
+                    'FIPS_evp_aes_192_ofb' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_192_ofb)',
+                                                'sym' => 'FIPS_evp_aes_192_ofb',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_192_ofb'
+                                              },
+                    'FIPS_selftest_sha1' => {
+                                              'params' => [],
+                                              'objfile' => './fips/sha/fips_sha1_selftest.[o|c]',
+                                              'kind' => 1,
+                                              'symcomment' => undef,
+                                              'sym' => 'FIPS_selftest_sha1',
+                                              'type' => 'int ?',
+                                              'oldsym' => 'FIPS_selftest_sha1'
+                                            },
+                    'FIPS_bn_num_bits' => {
+                                            'params' => [
+                                                          {
+                                                            'direction' => '->',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'a',
+                                                            'type' => 'const BIGNUM *?',
+                                                            'oldsym' => undef
+                                                          }
+                                                        ],
+                                            'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => '(renames BN_num_bits)',
+                                            'sym' => 'FIPS_bn_num_bits',
+                                            'type' => 'int ?',
+                                            'oldsym' => 'BN_num_bits'
+                                          },
+                    'FIPS_selftest_aes_gcm' => {
+                                                 'params' => [],
+                                                 'objfile' => './fips/aes/fips_aes_selftest.[o|c]',
+                                                 'kind' => 1,
+                                                 'symcomment' => undef,
+                                                 'sym' => 'FIPS_selftest_aes_gcm',
+                                                 'type' => 'int ?',
+                                                 'oldsym' => 'FIPS_selftest_aes_gcm'
+                                               },
+                    'FIPS_ecdsa_verify_ctx' => {
+                                                 'params' => [
+                                                               {
+                                                                 'direction' => '<-? <->?',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'key',
+                                                                 'type' => 'EC_KEY *?',
+                                                                 'oldsym' => undef
+                                                               },
+                                                               {
+                                                                 'direction' => '<-?',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'ctx',
+                                                                 'type' => 'EVP_MD_CTX *?',
+                                                                 'oldsym' => undef
+                                                               },
+                                                               {
+                                                                 'direction' => '<-? <->?',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 's',
+                                                                 'type' => 'ECDSA_SIG *?',
+                                                                 'oldsym' => undef
+                                                               }
+                                                             ],
+                                                 'objfile' => './fips/ecdsa/fips_ecdsa_sign.[o|c]',
+                                                 'kind' => 1,
+                                                 'symcomment' => undef,
+                                                 'sym' => 'FIPS_ecdsa_verify_ctx',
+                                                 'type' => 'int ?',
+                                                 'oldsym' => 'FIPS_ecdsa_verify_ctx'
+                                               },
+                    'FIPS_ec_group_new_curve_gf2m' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'p',
+                                                                        'type' => 'const BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'a',
+                                                                        'type' => 'const BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'b',
+                                                                        'type' => 'const BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'ctx',
+                                                                        'type' => 'BN_CTX *?',
+                                                                        'oldsym' => undef
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './crypto/ec/ec_cvt.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => '(renames EC_GROUP_new_curve_GF2m)',
+                                                        'sym' => 'FIPS_ec_group_new_curve_gf2m',
+                                                        'type' => 'EC_GROUP *?',
+                                                        'oldsym' => 'EC_GROUP_new_curve_GF2m'
+                                                      },
+                    'FIPS_evp_sha224' => {
+                                           'params' => [],
+                                           'objfile' => './crypto/evp/m_sha1.[o|c]',
+                                           'kind' => 1,
+                                           'symcomment' => '(renames EVP_sha224)',
+                                           'sym' => 'FIPS_evp_sha224',
+                                           'type' => 'const EVP_MD *?',
+                                           'oldsym' => 'EVP_sha224'
+                                         },
+                    'FIPS_malloc' => {
+                                       'params' => [
+                                                     {
+                                                       'direction' => '->',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'num',
+                                                       'type' => 'int ?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '->',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'file',
+                                                       'type' => 'const char *?',
+                                                       'oldsym' => undef
+                                                     },
+                                                     {
+                                                       'direction' => '->',
+                                                       'objfile' => undef,
+                                                       'kind' => 0,
+                                                       'sym' => 'line',
+                                                       'type' => 'int ?',
+                                                       'oldsym' => undef
+                                                     }
+                                                   ],
+                                       'objfile' => './fips/utl/fips_mem.[o|c]',
+                                       'kind' => 1,
+                                       'symcomment' => '(reimplements CRYPTO_malloc)',
+                                       'sym' => 'FIPS_malloc',
+                                       'type' => 'void *?',
+                                       'oldsym' => 'CRYPTO_malloc'
+                                     },
+                    'FIPS_dsa_sig_new' => {
+                                            'params' => [],
+                                            'objfile' => './fips/dsa/fips_dsa_lib.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => '(reimplements DSA_SIG_new)',
+                                            'sym' => 'FIPS_dsa_sig_new',
+                                            'type' => 'DSA_SIG * ?',
+                                            'oldsym' => 'DSA_SIG_new'
+                                          },
+                    'FIPS_evp_aes_192_ctr' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_aes.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_aes_192_ctr)',
+                                                'sym' => 'FIPS_evp_aes_192_ctr',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_aes_192_ctr'
+                                              },
+                    'FIPS_x931_bytes' => {
+                                           'params' => [
+                                                         {
+                                                           'direction' => '<-?',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'out',
+                                                           'type' => 'unsigned char *?',
+                                                           'oldsym' => undef
+                                                         },
+                                                         {
+                                                           'direction' => '->',
+                                                           'objfile' => undef,
+                                                           'kind' => 0,
+                                                           'sym' => 'outlen',
+                                                           'type' => 'int ?',
+                                                           'oldsym' => undef
+                                                         }
+                                                       ],
+                                           'objfile' => './fips/rand/fips_rand.[o|c]',
+                                           'kind' => 1,
+                                           'symcomment' => undef,
+                                           'sym' => 'FIPS_x931_bytes',
+                                           'type' => 'int ?',
+                                           'oldsym' => 'FIPS_x931_bytes'
+                                         },
+                    'FIPS_evp_des_ede_cbc' => {
+                                                'params' => [],
+                                                'objfile' => './crypto/evp/e_des3.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(renames EVP_des_ede_cbc)',
+                                                'sym' => 'FIPS_evp_des_ede_cbc',
+                                                'type' => 'const EVP_CIPHER *?',
+                                                'oldsym' => 'EVP_des_ede_cbc'
+                                              },
+                    'FIPS_selftest_aes_ccm' => {
+                                                 'params' => [],
+                                                 'objfile' => './fips/aes/fips_aes_selftest.[o|c]',
+                                                 'kind' => 1,
+                                                 'symcomment' => undef,
+                                                 'sym' => 'FIPS_selftest_aes_ccm',
+                                                 'type' => 'int ?',
+                                                 'oldsym' => 'FIPS_selftest_aes_ccm'
+                                               },
+                    'FIPS_md_ctx_destroy' => {
+                                               'params' => [
+                                                             {
+                                                               'direction' => '<-?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'ctx',
+                                                               'type' => 'EVP_MD_CTX *?',
+                                                               'oldsym' => undef
+                                                             }
+                                                           ],
+                                               'objfile' => './fips/utl/fips_md.[o|c]',
+                                               'kind' => 1,
+                                               'symcomment' => '(reimplements EVP_MD_CTX_destroy)',
+                                               'sym' => 'FIPS_md_ctx_destroy',
+                                               'type' => 'void ?',
+                                               'oldsym' => 'EVP_MD_CTX_destroy'
+                                             },
+                    'FIPS_ec_group_get_curve_gf2m' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'group',
+                                                                        'type' => 'const EC_GROUP *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-? <->?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'p',
+                                                                        'type' => 'BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-? <->?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'a',
+                                                                        'type' => 'BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-? <->?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'b',
+                                                                        'type' => 'BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'ctx',
+                                                                        'type' => 'BN_CTX *?',
+                                                                        'oldsym' => undef
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => '(renames EC_GROUP_get_curve_GF2m)',
+                                                        'sym' => 'FIPS_ec_group_get_curve_gf2m',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => 'EC_GROUP_get_curve_GF2m'
+                                                      },
+                    'FIPS_ec_group_get_curve_name' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'group',
+                                                                        'type' => 'const EC_GROUP *?',
+                                                                        'oldsym' => undef
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => '(renames EC_GROUP_get_curve_name)',
+                                                        'sym' => 'FIPS_ec_group_get_curve_name',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => 'EC_GROUP_get_curve_name'
+                                                      },
+                    'FIPS_ec_group_set_curve_gf2m' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '<-? <->?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'group',
+                                                                        'type' => 'EC_GROUP *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'p',
+                                                                        'type' => 'const BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'a',
+                                                                        'type' => 'const BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'b',
+                                                                        'type' => 'const BIGNUM *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'ctx',
+                                                                        'type' => 'BN_CTX *?',
+                                                                        'oldsym' => undef
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => '(renames EC_GROUP_set_curve_GF2m)',
+                                                        'sym' => 'FIPS_ec_group_set_curve_gf2m',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => 'EC_GROUP_set_curve_GF2m'
+                                                      },
+                    'FIPS_cipher_ctx_copy' => {
+                                                'params' => [
+                                                              {
+                                                                'direction' => '<-?',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'out',
+                                                                'type' => 'EVP_CIPHER_CTX *?',
+                                                                'oldsym' => undef
+                                                              },
+                                                              {
+                                                                'direction' => '->',
+                                                                'objfile' => undef,
+                                                                'kind' => 0,
+                                                                'sym' => 'in',
+                                                                'type' => 'const EVP_CIPHER_CTX *?',
+                                                                'oldsym' => undef
+                                                              }
+                                                            ],
+                                                'objfile' => './fips/utl/fips_enc.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => '(reimplements EVP_CIPHER_CTX_copy)',
+                                                'sym' => 'FIPS_cipher_ctx_copy',
+                                                'type' => 'int ?',
+                                                'oldsym' => 'EVP_CIPHER_CTX_copy'
+                                              },
+                    'FIPS_drbg_set_rand_callbacks' => {
+                                                        'params' => [
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'dctx',
+                                                                        'type' => 'DRBG_CTX *?',
+                                                                        'oldsym' => undef
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'params' => undef,
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'get_adin',
+                                                                        'type' => 'size_t (*?)(DRBG_CTX *ctx, unsigned char **pout)'
+                                                                      },
+                                                                      {
+                                                                        'direction' => '<-?',
+                                                                        'params' => undef,
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'cleanup_adin',
+                                                                        'type' => 'void (*?)(DRBG_CTX *ctx, unsigned char *out, size_t olen)'
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'params' => undef,
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'rand_seed_cb',
+                                                                        'type' => 'int (*?)(DRBG_CTX *ctx, const void *buf, int num)'
+                                                                      },
+                                                                      {
+                                                                        'direction' => '->',
+                                                                        'params' => undef,
+                                                                        'objfile' => undef,
+                                                                        'kind' => 0,
+                                                                        'sym' => 'rand_add_cb',
+                                                                        'type' => 'int (*?)(DRBG_CTX *ctx, const void *buf, int num, double entropy)'
+                                                                      }
+                                                                    ],
+                                                        'objfile' => './fips/rand/fips_drbg_lib.[o|c]',
+                                                        'kind' => 1,
+                                                        'symcomment' => undef,
+                                                        'sym' => 'FIPS_drbg_set_rand_callbacks',
+                                                        'type' => 'int ?',
+                                                        'oldsym' => 'FIPS_drbg_set_rand_callbacks'
+                                                      },
+                    'FIPS_selftest_rsa' => {
+                                             'params' => [],
+                                             'objfile' => './fips/rsa/fips_rsa_selftest.[o|c]',
+                                             'kind' => 1,
+                                             'symcomment' => undef,
+                                             'sym' => 'FIPS_selftest_rsa',
+                                             'type' => 'int ?',
+                                             'oldsym' => 'FIPS_selftest_rsa'
+                                           },
+                    'FIPS_ec_group_get_curve_gfp' => {
+                                                       'params' => [
+                                                                     {
+                                                                       'direction' => '->',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'group',
+                                                                       'type' => 'const EC_GROUP *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'p',
+                                                                       'type' => 'BIGNUM *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'a',
+                                                                       'type' => 'BIGNUM *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '<-? <->?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'b',
+                                                                       'type' => 'BIGNUM *?',
+                                                                       'oldsym' => undef
+                                                                     },
+                                                                     {
+                                                                       'direction' => '<-?',
+                                                                       'objfile' => undef,
+                                                                       'kind' => 0,
+                                                                       'sym' => 'ctx',
+                                                                       'type' => 'BN_CTX *?',
+                                                                       'oldsym' => undef
+                                                                     }
+                                                                   ],
+                                                       'objfile' => './crypto/ec/ec_lib.[o|c]',
+                                                       'kind' => 1,
+                                                       'symcomment' => '(renames EC_GROUP_get_curve_GFp)',
+                                                       'sym' => 'FIPS_ec_group_get_curve_gfp',
+                                                       'type' => 'int ?',
+                                                       'oldsym' => 'EC_GROUP_get_curve_GFp'
+                                                     },
+                    'FIPS_bn_rand_range' => {
+                                              'params' => [
+                                                            {
+                                                              'direction' => '<-? <->?',
+                                                              'objfile' => undef,
+                                                              'kind' => 0,
+                                                              'sym' => 'rnd',
+                                                              'type' => 'BIGNUM *?',
+                                                              'oldsym' => undef
+                                                            },
+                                                            {
+                                                              'direction' => '->',
+                                                              'objfile' => undef,
+                                                              'kind' => 0,
+                                                              'sym' => 'range',
+                                                              'type' => 'const BIGNUM *?',
+                                                              'oldsym' => undef
+                                                            }
+                                                          ],
+                                              'objfile' => './crypto/bn/bn_rand.[o|c]',
+                                              'kind' => 1,
+                                              'symcomment' => '(renames BN_rand_range)',
+                                              'sym' => 'FIPS_bn_rand_range',
+                                              'type' => 'int ?',
+                                              'oldsym' => 'BN_rand_range'
+                                            },
+                    'FIPS_dsa_generate_parameters_ex' => {
+                                                           'params' => [
+                                                                         {
+                                                                           'direction' => '<-? <->?',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'dsa',
+                                                                           'type' => 'DSA *?',
+                                                                           'oldsym' => undef
+                                                                         },
+                                                                         {
+                                                                           'direction' => '->',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'bits',
+                                                                           'type' => 'int ?',
+                                                                           'oldsym' => undef
+                                                                         },
+                                                                         {
+                                                                           'direction' => '->',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'seed',
+                                                                           'type' => 'const unsigned char *?',
+                                                                           'oldsym' => undef
+                                                                         },
+                                                                         {
+                                                                           'direction' => '->',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'seed_len',
+                                                                           'type' => 'int ?',
+                                                                           'oldsym' => undef
+                                                                         },
+                                                                         {
+                                                                           'direction' => '<-?',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'counter_ret',
+                                                                           'type' => 'int *?',
+                                                                           'oldsym' => undef
+                                                                         },
+                                                                         {
+                                                                           'direction' => '<-? <->?',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'h_ret',
+                                                                           'type' => 'unsigned long *?',
+                                                                           'oldsym' => undef
+                                                                         },
+                                                                         {
+                                                                           'direction' => '<-? <->?',
+                                                                           'objfile' => undef,
+                                                                           'kind' => 0,
+                                                                           'sym' => 'cb',
+                                                                           'type' => 'BN_GENCB *?',
+                                                                           'oldsym' => undef
+                                                                         }
+                                                                       ],
+                                                           'objfile' => './crypto/dsa/dsa_gen.[o|c]',
+                                                           'kind' => 1,
+                                                           'symcomment' => '(renames DSA_generate_parameters_ex)',
+                                                           'sym' => 'FIPS_dsa_generate_parameters_ex',
+                                                           'type' => 'int ?',
+                                                           'oldsym' => 'DSA_generate_parameters_ex'
+                                                         },
+                    'FIPS_rand_get_method' => {
+                                                'params' => [],
+                                                'objfile' => './fips/rand/fips_rand_lib.[o|c]',
+                                                'kind' => 1,
+                                                'symcomment' => undef,
+                                                'sym' => 'FIPS_rand_get_method',
+                                                'type' => 'const RAND_METHOD *?',
+                                                'oldsym' => 'FIPS_rand_get_method'
+                                              },
+                    'FIPS_rsa_x931_generate_key_ex' => {
+                                                         'params' => [
+                                                                       {
+                                                                         'direction' => '<-? <->?',
+                                                                         'objfile' => undef,
+                                                                         'kind' => 0,
+                                                                         'sym' => 'rsa',
+                                                                         'type' => 'RSA *?',
+                                                                         'oldsym' => undef
+                                                                       },
+                                                                       {
+                                                                         'direction' => '->',
+                                                                         'objfile' => undef,
+                                                                         'kind' => 0,
+                                                                         'sym' => 'bits',
+                                                                         'type' => 'int ?',
+                                                                         'oldsym' => undef
+                                                                       },
+                                                                       {
+                                                                         'direction' => '->',
+                                                                         'objfile' => undef,
+                                                                         'kind' => 0,
+                                                                         'sym' => 'e',
+                                                                         'type' => 'const BIGNUM *?',
+                                                                         'oldsym' => undef
+                                                                       },
+                                                                       {
+                                                                         'direction' => '<-? <->?',
+                                                                         'objfile' => undef,
+                                                                         'kind' => 0,
+                                                                         'sym' => 'cb',
+                                                                         'type' => 'BN_GENCB *?',
+                                                                         'oldsym' => undef
+                                                                       }
+                                                                     ],
+                                                         'objfile' => './crypto/rsa/rsa_x931g.[o|c]',
+                                                         'kind' => 1,
+                                                         'symcomment' => '(renames RSA_X931_generate_key_ex)',
+                                                         'sym' => 'FIPS_rsa_x931_generate_key_ex',
+                                                         'type' => 'int ?',
+                                                         'oldsym' => 'RSA_X931_generate_key_ex'
+                                                       },
+                    'FIPS_ec_key_set_asn1_flag' => {
+                                                     'params' => [
+                                                                   {
+                                                                     'direction' => '<-? <->?',
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'eckey',
+                                                                     'type' => 'EC_KEY *?',
+                                                                     'oldsym' => undef
+                                                                   },
+                                                                   {
+                                                                     'direction' => '->',
+                                                                     'objfile' => undef,
+                                                                     'kind' => 0,
+                                                                     'sym' => 'asn1_flag',
+                                                                     'type' => 'int ?',
+                                                                     'oldsym' => undef
+                                                                   }
+                                                                 ],
+                                                     'objfile' => './crypto/ec/ec_key.[o|c]',
+                                                     'kind' => 1,
+                                                     'symcomment' => '(renames EC_KEY_set_asn1_flag)',
+                                                     'sym' => 'FIPS_ec_key_set_asn1_flag',
+                                                     'type' => 'void ?',
+                                                     'oldsym' => 'EC_KEY_set_asn1_flag'
+                                                   },
+                    'FIPS_ec_key_free' => {
+                                            'params' => [
+                                                          {
+                                                            'direction' => '<-? <->?',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'key',
+                                                            'type' => 'EC_KEY *?',
+                                                            'oldsym' => undef
+                                                          }
+                                                        ],
+                                            'objfile' => './crypto/ec/ec_key.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => '(renames EC_KEY_free)',
+                                            'sym' => 'FIPS_ec_key_free',
+                                            'type' => 'void ?',
+                                            'oldsym' => 'EC_KEY_free'
+                                          },
+                    'FIPS_put_error' => {
+                                          'params' => [
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'lib',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'func',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'reason',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'file',
+                                                          'type' => 'const char *?',
+                                                          'oldsym' => undef
+                                                        },
+                                                        {
+                                                          'direction' => '->',
+                                                          'objfile' => undef,
+                                                          'kind' => 0,
+                                                          'sym' => 'line',
+                                                          'type' => 'int ?',
+                                                          'oldsym' => undef
+                                                        }
+                                                      ],
+                                          'objfile' => './fips/utl/fips_err.[o|c]',
+                                          'kind' => 1,
+                                          'symcomment' => '(reimplements ERR_put_error)',
+                                          'sym' => 'FIPS_put_error',
+                                          'type' => 'void ?',
+                                          'oldsym' => 'ERR_put_error'
+                                        },
+                    'FIPS_get_timevec' => {
+                                            'params' => [
+                                                          {
+                                                            'direction' => '<-?',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'buf',
+                                                            'type' => 'unsigned char *?',
+                                                            'oldsym' => undef
+                                                          },
+                                                          {
+                                                            'direction' => '<-? <->?',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'pctr',
+                                                            'type' => 'unsigned long *?',
+                                                            'oldsym' => undef
+                                                          }
+                                                        ],
+                                            'objfile' => './fips/rand/fips_rand.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => undef,
+                                            'sym' => 'FIPS_get_timevec',
+                                            'type' => 'void ?',
+                                            'oldsym' => 'FIPS_get_timevec'
+                                          },
+                    'FIPS_dsa_verify_ctx' => {
+                                               'params' => [
+                                                             {
+                                                               'direction' => '<-? <->?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'dsa',
+                                                               'type' => 'DSA *?',
+                                                               'oldsym' => undef
+                                                             },
+                                                             {
+                                                               'direction' => '<-?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 'ctx',
+                                                               'type' => 'EVP_MD_CTX *?',
+                                                               'oldsym' => undef
+                                                             },
+                                                             {
+                                                               'direction' => '<-? <->?',
+                                                               'objfile' => undef,
+                                                               'kind' => 0,
+                                                               'sym' => 's',
+                                                               'type' => 'DSA_SIG *?',
+                                                               'oldsym' => undef
+                                                             }
+                                                           ],
+                                               'objfile' => './fips/dsa/fips_dsa_sign.[o|c]',
+                                               'kind' => 1,
+                                               'symcomment' => undef,
+                                               'sym' => 'FIPS_dsa_verify_ctx',
+                                               'type' => 'int ?',
+                                               'oldsym' => 'FIPS_dsa_verify_ctx'
+                                             },
+                    'FIPS_cmac_update' => {
+                                            'params' => [
+                                                          {
+                                                            'direction' => '<-?',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'ctx',
+                                                            'type' => 'CMAC_CTX *?',
+                                                            'oldsym' => undef
+                                                          },
+                                                          {
+                                                            'direction' => '->',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'data',
+                                                            'type' => 'const void *?',
+                                                            'oldsym' => undef
+                                                          },
+                                                          {
+                                                            'direction' => '->',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'dlen',
+                                                            'type' => 'size_t ?',
+                                                            'oldsym' => undef
+                                                          }
+                                                        ],
+                                            'objfile' => './crypto/cmac/cmac.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => '(renames CMAC_Update)',
+                                            'sym' => 'FIPS_cmac_update',
+                                            'type' => 'int ?',
+                                            'oldsym' => 'CMAC_Update'
+                                          },
+                    'FIPS_ec_key_set_flags' => {
+                                                 'params' => [
+                                                               {
+                                                                 'direction' => '<-? <->?',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'key',
+                                                                 'type' => 'EC_KEY *?',
+                                                                 'oldsym' => undef
+                                                               },
+                                                               {
+                                                                 'direction' => '->',
+                                                                 'objfile' => undef,
+                                                                 'kind' => 0,
+                                                                 'sym' => 'flags',
+                                                                 'type' => 'int ?',
+                                                                 'oldsym' => undef
+                                                               }
+                                                             ],
+                                                 'objfile' => './crypto/ec/ec_key.[o|c]',
+                                                 'kind' => 1,
+                                                 'symcomment' => '(renames EC_KEY_set_flags)',
+                                                 'sym' => 'FIPS_ec_key_set_flags',
+                                                 'type' => 'void ?',
+                                                 'oldsym' => 'EC_KEY_set_flags'
+                                               },
+                    'FIPS_set_locking_callbacks' => {
+                                                      'params' => [
+                                                                    {
+                                                                      'direction' => '->',
+                                                                      'params' => undef,
+                                                                      'objfile' => undef,
+                                                                      'kind' => 0,
+                                                                      'sym' => 'func',
+                                                                      'type' => 'void (*?)(int mode, int type, const char *file,int line)'
+                                                                    },
+                                                                    {
+                                                                      'direction' => '->',
+                                                                      'params' => undef,
+                                                                      'objfile' => undef,
+                                                                      'kind' => 0,
+                                                                      'sym' => 'add_cb',
+                                                                      'type' => 'int (*?)(int *pointer, int amount, int type, const char *file, int line)'
+                                                                    }
+                                                                  ],
+                                                      'objfile' => './fips/utl/fips_lck.[o|c]',
+                                                      'kind' => 1,
+                                                      'symcomment' => undef,
+                                                      'sym' => 'FIPS_set_locking_callbacks',
+                                                      'type' => 'void ?',
+                                                      'oldsym' => 'FIPS_set_locking_callbacks'
+                                                    },
+                    'FIPS_crypto_threadid_get_callback' => {
+                                                             'params' => [],
+                                                             'objfile' => './crypto/thr_id.[o|c]',
+                                                             'kind' => 1,
+                                                             'symcomment' => '(renames CRYPTO_THREADID_get_callback)',
+                                                             'sym' => 'FIPS_crypto_threadid_get_callback',
+                                                             'type' => 'void (*?)(CRYPTO_THREADID *)',
+                                                             'oldsym' => undef
+                                                           },
+                    'FIPS_ec_key_up_ref' => {
+                                              'params' => [
+                                                            {
+                                                              'direction' => '<-? <->?',
+                                                              'objfile' => undef,
+                                                              'kind' => 0,
+                                                              'sym' => 'key',
+                                                              'type' => 'EC_KEY *?',
+                                                              'oldsym' => undef
+                                                            }
+                                                          ],
+                                              'objfile' => './crypto/ec/ec_key.[o|c]',
+                                              'kind' => 1,
+                                              'symcomment' => '(renames EC_KEY_up_ref)',
+                                              'sym' => 'FIPS_ec_key_up_ref',
+                                              'type' => 'int ?',
+                                              'oldsym' => 'EC_KEY_up_ref'
+                                            },
+                    'FIPS_evp_sha1' => {
+                                         'params' => [],
+                                         'objfile' => './crypto/evp/m_sha1.[o|c]',
+                                         'kind' => 1,
+                                         'symcomment' => '(renames EVP_sha1)',
+                                         'sym' => 'FIPS_evp_sha1',
+                                         'type' => 'const EVP_MD *?',
+                                         'oldsym' => 'EVP_sha1'
+                                       },
+                    'FIPS_hmac_ctx_copy' => {
+                                              'params' => [
+                                                            {
+                                                              'direction' => '<-?',
+                                                              'objfile' => undef,
+                                                              'kind' => 0,
+                                                              'sym' => 'dctx',
+                                                              'type' => 'HMAC_CTX *?',
+                                                              'oldsym' => undef
+                                                            },
+                                                            {
+                                                              'direction' => '<-?',
+                                                              'objfile' => undef,
+                                                              'kind' => 0,
+                                                              'sym' => 'sctx',
+                                                              'type' => 'HMAC_CTX *?',
+                                                              'oldsym' => undef
+                                                            }
+                                                          ],
+                                              'objfile' => './crypto/hmac/hmac.[o|c]',
+                                              'kind' => 1,
+                                              'symcomment' => '(renames HMAC_CTX_copy)',
+                                              'sym' => 'FIPS_hmac_ctx_copy',
+                                              'type' => '__owur int ?',
+                                              'oldsym' => 'HMAC_CTX_copy'
+                                            },
+                    'FIPS_rsa_free' => {
+                                         'params' => [
+                                                       {
+                                                         'direction' => '<-? <->?',
+                                                         'objfile' => undef,
+                                                         'kind' => 0,
+                                                         'sym' => 'r',
+                                                         'type' => 'struct rsa_st *?',
+                                                         'oldsym' => undef
+                                                       }
+                                                     ],
+                                         'objfile' => './fips/rsa/fips_rsa_lib.[o|c]',
+                                         'kind' => 1,
+                                         'symcomment' => undef,
+                                         'sym' => 'FIPS_rsa_free',
+                                         'type' => 'void ?',
+                                         'oldsym' => 'FIPS_rsa_free'
+                                       },
+                    'FIPS_ecdh_openssl' => {
+                                             'params' => [],
+                                             'objfile' => './crypto/ecdh/ech_ossl.[o|c]',
+                                             'kind' => 1,
+                                             'symcomment' => '(renames ECDH_OpenSSL)',
+                                             'sym' => 'FIPS_ecdh_openssl',
+                                             'type' => 'const ECDH_METHOD *?',
+                                             'oldsym' => 'ECDH_OpenSSL'
+                                           },
+                    'FIPS_bn_get_word' => {
+                                            'params' => [
+                                                          {
+                                                            'direction' => '->',
+                                                            'objfile' => undef,
+                                                            'kind' => 0,
+                                                            'sym' => 'a',
+                                                            'type' => 'const BIGNUM *?',
+                                                            'oldsym' => undef
+                                                          }
+                                                        ],
+                                            'objfile' => './crypto/bn/bn_lib.[o|c]',
+                                            'kind' => 1,
+                                            'symcomment' => '(renames BN_get_word)',
+                                            'sym' => 'FIPS_bn_get_word',
+                                            'type' => 'BN_ULONG ?',
+                                            'oldsym' => 'BN_get_word'
+                                          },
+                    'FIPS_ec_point_get_affine_coordinates_gfp' => {
+                                                                    'params' => [
+                                                                                  {
+                                                                                    'direction' => '->',
+                                                                                    'objfile' => undef,
+                                                            &n