X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util%2Fmkdef.pl;h=8ec1d07989a9fe597dde14dca672e7decdd3b248;hb=757d479536d3d7f51e81a8677ca2aad04d7951af;hp=d76226bb68edc2078cd7b1dc1b495db8080fb39b;hpb=d399fdf877efc785a383bd6578713af910a9ce3b;p=oweals%2Fopenssl.git diff --git a/util/mkdef.pl b/util/mkdef.pl index d76226bb68..8ec1d07989 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -54,8 +54,6 @@ # exclude. # -my $debug=0; - my $crypto_num= "util/libeay.num"; my $ssl_num= "util/ssleay.num"; @@ -65,7 +63,7 @@ my $do_crypto = 0; my $do_ssl = 0; my $do_ctest = 0; my $do_ctestall = 0; -my $do_checkexist = 0; +my $rsaref = 0; my $VMS=0; my $W32=0; @@ -74,19 +72,11 @@ my $NT=0; # Set this to make typesafe STACK definitions appear in DEF my $safe_stack_def = 0; -my @known_platforms = ( "__FreeBSD__", "PERL5", "NeXT" ); -my @known_ossl_platforms = ( "VMS", "WIN16", "WIN32", "WINNT" ); +my @known_platforms = ( "__FreeBSD__", "VMS", "WIN16", "WIN32", + "WINNT", "PERL5", "NeXT" ); my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF", - "CAST", "MD2", "MD4", "MD5", "SHA", "SHA0", "SHA1", - "RIPEMD", - "MDC2", "RSA", "DSA", "DH", "HMAC", "AES", - # Envelope "algorithms" - "EVP", "X509", "ASN1_TYPEDEFS", - # Helper "algorithms" - "BIO", "COMP", "BUFFER", "LHASH", "STACK", "ERR", - "LOCKING", - # External "algorithms" - "FP_API", "STDIO", "SOCK", "KRB5" ); + "CAST", "MD2", "MD4", "MD5", "SHA", "RIPEMD", + "MDC2", "RSA", "DSA", "DH", "HMAC", "FP_API" ); my $options=""; open(IN," 0 } @known_platforms), - (map { "OPENSSL_SYS_".$_ => 0 } @known_ossl_platforms), - (map { "OPENSSL_NO_".$_ => 0 } @known_algorithms), + (map { "NO_".$_ => 0 } @known_algorithms), NOPROTO => 0, PERL5 => 0, _WINDLL => 0, @@ -327,9 +293,6 @@ sub do_defs TRUE => 1, ); my $symhacking = $file eq $symhacksfile; - my @current_platforms = (); - my @current_algorithms = (); - while() { last if (/BEGIN ERROR CODES/); if ($line ne '') { @@ -338,8 +301,6 @@ sub do_defs } if (/\\$/) { - chomp; # remove eol - chop; # remove ending backslash $line = $_; next; } @@ -352,181 +313,63 @@ sub do_defs s/\/\*.*?\*\///gs; # ignore comments s/{[^{}]*}//gs; # ignore {} blocks - print STDERR "DEBUG: \$_=\"$_\"\n" if $debug; - if (/^\#\s*ifndef\s+(.*)/) { - push(@tag,"-"); + if (/^\#\s*ifndef (.*)/) { push(@tag,$1); $tag{$1}=-1; - print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug; - } elsif (/^\#\s*if\s+!defined\(([^\)]+)\)/) { - push(@tag,"-"); - if (/^\#\s*if\s+(!defined\(([^\)]+)\)(\s+\&\&\s+!defined\(([^\)]+)\))*)$/) { - my $tmp_1 = $1; - my $tmp_; - foreach $tmp_ (split '\&\&',$tmp_1) { - $tmp_ =~ /!defined\(([^\)]+)\)/; - print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug; - push(@tag,$1); - $tag{$1}=-1; - } - } else { - print STDERR "Warning: $file: complicated expression: $_" if $debug; # because it is O... - print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug; - push(@tag,$1); - $tag{$1}=-1; - } - } elsif (/^\#\s*ifdef\s+(.*)/) { - push(@tag,"-"); + } elsif (/^\#\s*if !defined\(([^\)]+)\)/) { + push(@tag,$1); + $tag{$1}=-1; + } elsif (/^\#\s*ifdef (.*)/) { + push(@tag,$1); + $tag{$1}=1; + } elsif (/^\#\s*if defined\(([^\)]+)\)/) { push(@tag,$1); $tag{$1}=1; - print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug; - } elsif (/^\#\s*if\s+defined\(([^\)]+)\)/) { - push(@tag,"-"); - if (/^\#\s*if\s+(defined\(([^\)]+)\)(\s+\|\|\s+defined\(([^\)]+)\))*)$/) { - my $tmp_1 = $1; - my $tmp_; - foreach $tmp_ (split '\|\|',$tmp_1) { - $tmp_ =~ /defined\(([^\)]+)\)/; - print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug; - push(@tag,$1); - $tag{$1}=1; - } - } else { - print STDERR "Warning: $file: complicated expression: $_\n" if $debug; # because it is O... - print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug; - push(@tag,$1); - $tag{$1}=1; - } } elsif (/^\#\s*error\s+(\w+) is disabled\./) { - my $tag_i = $#tag; - while($tag[$tag_i] ne "-") { - if ($tag[$tag_i] eq "OPENSSL_NO_".$1) { - $tag{$tag[$tag_i]}=2; - print STDERR "DEBUG: $file: chaged tag $1 = 2\n" if $debug; - } - $tag_i--; + if ($tag[$#tag] eq "NO_".$1) { + $tag{$tag[$#tag]}=2; } } elsif (/^\#\s*endif/) { - my $tag_i = $#tag; - while($tag[$tag_i] ne "-") { - my $t=$tag[$tag_i]; - print STDERR "DEBUG: \$t=\"$t\"\n" if $debug; - if ($tag{$t}==2) { - $tag{$t}=-1; - } else { - $tag{$t}=0; - } - print STDERR "DEBUG: $file: changed tag ",$t," = ",$tag{$t},"\n" if $debug; - pop(@tag); - if ($t =~ /^OPENSSL_NO_([A-Z0-9_]+)$/) { - $t=$1; - } else { - $t=""; - } - if ($t ne "" - && !grep(/^$t$/, @known_algorithms)) { - $unknown_algorithms{$t} = 1; - #print STDERR "DEBUG: Added as unknown algorithm: $t\n" if $debug; - } - $tag_i--; + if ($tag{$tag[$#tag]}==2) { + $tag{$tag[$#tag]}=-1; + } else { + $tag{$tag[$#tag]}=0; } pop(@tag); } elsif (/^\#\s*else/) { - my $tag_i = $#tag; - while($tag[$tag_i] ne "-") { - my $t=$tag[$tag_i]; - $tag{$t}= -$tag{$t}; - print STDERR "DEBUG: $file: changed tag ",$t," = ",$tag{$t},"\n" if $debug; - $tag_i--; - } + my $t=$tag[$#tag]; + $tag{$t}= -$tag{$t}; } elsif (/^\#\s*if\s+1/) { - push(@tag,"-"); # Dummy tag push(@tag,"TRUE"); $tag{"TRUE"}=1; - print STDERR "DEBUG: $file: found 1\n" if $debug; } elsif (/^\#\s*if\s+0/) { - push(@tag,"-"); # Dummy tag push(@tag,"TRUE"); $tag{"TRUE"}=-1; - print STDERR "DEBUG: $file: found 0\n" if $debug; } elsif (/^\#\s*define\s+(\w+)\s+(\w+)/ && $symhacking) { my $s = $1; - my $a = $2; - my $a1 = join(",", - grep(!/^$/, - map { $tag{$_} == 1 ? - $_ : "" } - @known_platforms)); - my $a2 = join(",", - grep(!/^$/, - map { $tag{"OPENSSL_SYS_".$_} == 1 ? - $_ : "" } - @known_ossl_platforms)); - if ($a1 eq "") { $a1 = $a2; } - elsif ($a1 ne "" && $a2 ne "") { $a1 .= ",".$a2; } - $rename{$s} = $a.":".$a1; - print STDERR "DEBUG: $file: defined $s = $a\n" if $debug; + my $a = + $2.":".join(",", grep(!/^$/, + map { $tag{$_} == 1 ? + $_ : "" } + @known_platforms)); + $rename{$s} = $a; } if (/^\#/) { - @current_platforms = - grep(!/^$/, - map { $tag{$_} == 1 ? $_ : - $tag{$_} == -1 ? "!".$_ : "" } - @known_platforms); - push @current_platforms - , grep(!/^$/, - map { $tag{"OPENSSL_SYS_".$_} == 1 ? $_ : - $tag{"OPENSSL_SYS_".$_} == -1 ? "!".$_ : "" } - @known_ossl_platforms); - @current_algorithms = - grep(!/^$/, - map { $tag{"OPENSSL_NO_".$_} == -1 ? $_ : "" } - @known_algorithms); - $def .= - "#INFO:" - .join(',',@current_platforms).":" - .join(',',@current_algorithms).";"; + my @p = grep(!/^$/, + map { $tag{$_} == 1 ? $_ : + $tag{$_} == -1 ? "!".$_ : "" } + @known_platforms); + my @a = grep(!/^$/, + map { $tag{"NO_".$_} == -1 ? $_ : "" } + @known_algorithms); + $def .= "#INFO:".join(',',@p).":".join(',',@a).";"; next; } if (/^\s*DECLARE_STACK_OF\s*\(\s*(\w*)\s*\)/) { next; - } elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) { - $def .= "int d2i_$3(void);"; - $def .= "int i2d_$3(void);"; - $def .= "OPENSSL_EXTERN int $2_it;"; - next; - } elsif (/^\s*DECLARE_ASN1_FUNCTIONS_fname\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) { - $def .= "int d2i_$3(void);"; - $def .= "int i2d_$3(void);"; - $def .= "int $3_free(void);"; - $def .= "int $3_new(void);"; - $def .= "OPENSSL_EXTERN int $2_it;"; - } elsif (/^\s*DECLARE_ASN1_FUNCTIONS\s*\(\s*(\w*)\s*\)/ || - /^\s*DECLARE_ASN1_FUNCTIONS_const\s*\(\s*(\w*)\s*\)/) { - $def .= "int d2i_$1(void);"; - $def .= "int i2d_$1(void);"; - $def .= "int $1_free(void);"; - $def .= "int $1_new(void);"; - $def .= "OPENSSL_EXTERN int $1_it;"; - next; - } elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS_const\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) { - $def .= "int d2i_$2(void);"; - $def .= "int i2d_$2(void);"; - $def .= "OPENSSL_EXTERN int $2_it;"; - next; - } elsif (/^\s*DECLARE_ASN1_FUNCTIONS_name\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) { - $def .= "int d2i_$2(void);"; - $def .= "int i2d_$2(void);"; - $def .= "int $2_free(void);"; - $def .= "int $2_new(void);"; - $def .= "OPENSSL_EXTERN int $2_it;"; - next; - } elsif (/^\s*DECLARE_ASN1_ITEM\s*\(\s*(\w*)\s*,(\w*)\s*\)/) { - $def .= "OPENSSL_EXTERN int $1_it;"; - next; } elsif (/^\s*DECLARE_PKCS12_STACK_OF\s*\(\s*(\w*)\s*\)/) { next; } elsif (/^\s*DECLARE_ASN1_SET_OF\s*\(\s*(\w*)\s*\)/) { @@ -534,47 +377,65 @@ sub do_defs } elsif (/^DECLARE_PEM_rw\s*\(\s*(\w*)\s*,/ || /^DECLARE_PEM_rw_cb\s*\(\s*(\w*)\s*,/ ) { # Things not in Win16 - $def .= - "#INFO:" - .join(',',"!WIN16",@current_platforms).":" - .join(',',@current_algorithms).";"; - $def .= "int PEM_read_$1(void);"; - $def .= "int PEM_write_$1(void);"; - $def .= - "#INFO:" - .join(',',@current_platforms).":" - .join(',',@current_algorithms).";"; + $syms{"PEM_read_${1}"} = 1; + $platform{"PEM_read_${1}"} = "!WIN16"; + $syms{"PEM_write_${1}"} = 1; + $platform{"PEM_write_${1}"} = "!WIN16"; # Things that are everywhere - $def .= "int PEM_read_bio_$1(void);"; - $def .= "int PEM_write_bio_$1(void);"; + $syms{"PEM_read_bio_${1}"} = 1; + $syms{"PEM_write_bio_${1}"} = 1; + if ($1 eq "RSAPrivateKey" || + $1 eq "RSAPublicKey" || + $1 eq "RSA_PUBKEY") { + $algorithm{"PEM_read_${1}"} = "RSA"; + $algorithm{"PEM_write_${1}"} = "RSA"; + $algorithm{"PEM_read_bio_${1}"} = "RSA"; + $algorithm{"PEM_write_bio_${1}"} = "RSA"; + } + elsif ($1 eq "DSAPrivateKey" || + $1 eq "DSAparams" || + $1 eq "RSA_PUBKEY") { + $algorithm{"PEM_read_${1}"} = "DSA"; + $algorithm{"PEM_write_${1}"} = "DSA"; + $algorithm{"PEM_read_bio_${1}"} = "DSA"; + $algorithm{"PEM_write_bio_${1}"} = "DSA"; + } + elsif ($1 eq "DHparams") { + $algorithm{"PEM_read_${1}"} = "DH"; + $algorithm{"PEM_write_${1}"} = "DH"; + $algorithm{"PEM_read_bio_${1}"} = "DH"; + $algorithm{"PEM_write_bio_${1}"} = "DH"; + } } elsif (/^DECLARE_PEM_write\s*\(\s*(\w*)\s*,/ || /^DECLARE_PEM_write_cb\s*\(\s*(\w*)\s*,/ ) { # Things not in Win16 - $def .= - "#INFO:" - .join(',',"!WIN16",@current_platforms).":" - .join(',',@current_algorithms).";"; - $def .= "int PEM_write_$1(void);"; - $def .= - "#INFO:" - .join(',',@current_platforms).":" - .join(',',@current_algorithms).";"; + $syms{"PEM_write_${1}"} = 1; + $platform{"PEM_write_${1}"} .= ",!WIN16"; # Things that are everywhere - $def .= "int PEM_write_bio_$1(void);"; + $syms{"PEM_write_bio_${1}"} = 1; + if ($1 eq "RSAPrivateKey" || + $1 eq "RSAPublicKey" || + $1 eq "RSA_PUBKEY") { + $algorithm{"PEM_write_${1}"} = "RSA"; + $algorithm{"PEM_write_bio_${1}"} = "RSA"; + } + elsif ($1 eq "DSAPrivateKey" || + $1 eq "DSAparams" || + $1 eq "RSA_PUBKEY") { + $algorithm{"PEM_write_${1}"} = "DSA"; + $algorithm{"PEM_write_bio_${1}"} = "DSA"; + } + elsif ($1 eq "DHparams") { + $algorithm{"PEM_write_${1}"} = "DH"; + $algorithm{"PEM_write_bio_${1}"} = "DH"; + } } elsif (/^DECLARE_PEM_read\s*\(\s*(\w*)\s*,/ || /^DECLARE_PEM_read_cb\s*\(\s*(\w*)\s*,/ ) { # Things not in Win16 - $def .= - "#INFO:" - .join(',',"!WIN16",@current_platforms).":" - .join(',',@current_algorithms).";"; - $def .= "int PEM_read_$1(void);"; - $def .= - "#INFO:" - .join(',',@current_platforms).":" - .join(',',@current_algorithms).";"; + $syms{"PEM_read_${1}"} = 1; + $platform{"PEM_read_${1}"} .= ",!WIN16"; # Things that are everywhere - $def .= "int PEM_read_bio_$1(void);"; + $syms{"PEM_read_bio_${1}"} = 1; } elsif ( ($tag{'TRUE'} != -1) && ($tag{'CONST_STRICT'} != 1) @@ -667,20 +528,37 @@ sub do_defs # Prune the returned symbols + $platform{"crypt"} .= ",!PERL5,!__FreeBSD__,!NeXT"; + + delete $syms{"SSL_add_dir_cert_subjects_to_stack"}; delete $syms{"bn_dump1"}; + + $platform{"BIO_s_file_internal"} .= ",WIN16"; + $platform{"BIO_new_file_internal"} .= ",WIN16"; + $platform{"BIO_new_fp_internal"} .= ",WIN16"; + + $platform{"BIO_s_file"} .= ",!WIN16"; + $platform{"BIO_new_file"} .= ",!WIN16"; + $platform{"BIO_new_fp"} .= ",!WIN16"; + $platform{"BIO_s_log"} .= ",!WIN32,!WIN16,!macintosh"; + if(exists $syms{"ERR_load_CRYPTO_strings"}) { + $platform{"ERR_load_CRYPTO_strings"} .= ",!VMS,!WIN16"; + $syms{"ERR_load_CRYPTOlib_strings"} = 1; + $platform{"ERR_load_CRYPTOlib_strings"} .= ",VMS,WIN16"; + } + # Info we know about + $platform{"RSA_PKCS1_RSAref"} = "RSAREF"; + $algorithm{"RSA_PKCS1_RSAref"} = "RSA"; + push @ret, map { $_."\\".&info_string($_,"EXIST", $platform{$_}, $kind{$_}, $algorithm{$_}) } keys %syms; - if (keys %unknown_algorithms) { - print STDERR "WARNING: mkdef.pl doesn't know the following algorithms:\n"; - print STDERR "\t",join("\n\t",keys %unknown_algorithms),"\n"; - } return(@ret); } @@ -728,7 +606,6 @@ sub maybe_add_info { (my $name, *nums, my @symbols) = @_; my $sym; my $new_info = 0; - my %syms=(); print STDERR "Updating $name info\n"; foreach $sym (@symbols) { @@ -739,19 +616,9 @@ sub maybe_add_info { if (!defined($dummy) || $i ne $dummy) { $nums{$s} = $n."\\".$i; $new_info++; - print STDERR "DEBUG: maybe_add_info for $s: \"$dummy\" => \"$i\"\n" if $debug; + #print STDERR "DEBUG: maybe_add_info for $s: \"$dummy\" => \"$i\"\n"; } } - $syms{sym} = 1; - } - - my @s=sort { &parse_number($nums{$a},"n") <=> &parse_number($nums{$b},"n") } keys %nums; - foreach $sym (@s) { - (my $n, my $i) = split /\\/, $nums{$sym}; - if (!defined($syms{sym})) { - $new_info++; - print STDERR "DEBUG: maybe_add_info for $sym: -> undefined\n if $debug"; - } } if ($new_info) { print STDERR "$new_info old symbols got an info update\n"; @@ -776,8 +643,8 @@ sub print_test_file foreach $sym (@symbols) { (my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/; if ($s ne $prev) { - if (!defined($nums{$s})) { - print STDERR "Warning: $s does not have a number assigned\n" + if (!defined($nums{$sym})) { + printf STDERR "Warning: $sym does not have a number assigned\n" if(!$do_update); } else { $n=$nums{$s}; @@ -791,7 +658,7 @@ sub print_test_file sub print_def_file { (*OUT,my $name,*nums,my @symbols)=@_; - my $n = 1; my @e; my @r; my @v; + my $n = 1; my @e; my @r; if ($W32) { $name.="32"; } @@ -826,14 +693,11 @@ EOF (@e)=grep(/^SSLeay\\.*?:.*?:FUNCTION/,@symbols); (@r)=grep(/^\w+\\.*?:.*?:FUNCTION/ && !/^SSLeay\\.*?:.*?:FUNCTION/,@symbols); - (@v)=grep(/^\w+\\.*?:.*?:VARIABLE/,@symbols); - @symbols=((sort @e),(sort @r), (sort @v)); + @symbols=((sort @e),(sort @r)); foreach $sym (@symbols) { (my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/; - my $v = 0; - $v = 1 if $sym=~ /^\w+\\.*?:.*?:VARIABLE/; if (!defined($nums{$s})) { printf STDERR "Warning: $s does not have a number assigned\n" if(!$do_update); @@ -845,6 +709,7 @@ EOF # @p_purged must contain hardware platforms only my @p_purged = (); foreach $ptmp (@p) { + next if $ptmp =~ /^!?RSAREF$/; push @p_purged, $ptmp; } my $negatives = !!grep(/^!/,@p); @@ -858,6 +723,11 @@ EOF || ($W16 && (!@p_purged || (!$negatives && grep(/^WIN16$/,@p)) || ($negatives && !grep(/^!WIN16$/,@p))))) + && (!@p + || (!$negatives + && ($rsaref || !grep(/^RSAREF$/,@p))) + || ($negatives + && (!$rsaref || !grep(/^!RSAREF$/,@p)))) && (!@a || (!$no_rc2 || !grep(/^RC2$/,@a))) && (!@a || (!$no_rc4 || !grep(/^RC4$/,@a))) && (!@a || (!$no_rc5 || !grep(/^RC5$/,@a))) @@ -875,15 +745,9 @@ EOF && (!@a || (!$no_dsa || !grep(/^DSA$/,@a))) && (!@a || (!$no_dh || !grep(/^DH$/,@a))) && (!@a || (!$no_hmac || !grep(/^HMAC$/,@a))) - && (!@a || (!$no_aes || !grep(/^AES$/,@a))) - && (!@a || (!$no_krb5 || !grep(/^KRB5$/,@a))) && (!@a || (!$no_fp_api || !grep(/^FP_API$/,@a))) ) { - if($v) { - printf OUT " %s%-40s@%-8d DATA\n",($W32)?"":"_",$s,$n; - } else { - printf OUT " %s%-40s@%d\n",($W32)?"":"_",$s,$n; - } + printf OUT " %s%-40s@%d\n",($W32)?"":"_",$s,$n; # } else { # print STDERR "DEBUG: \"$sym\" (@p):", # " rsaref:", !!(!@p @@ -982,20 +846,12 @@ sub rewrite_numbers $rsyms{$s} = 1; } - my %syms = (); - foreach $_ (@symbols) { - (my $n, my $i) = split /\\/; - $syms{$n} = 1; - } - my @s=sort { &parse_number($nums{$a},"n") <=> &parse_number($nums{$b},"n") } keys %nums; foreach $sym (@s) { (my $n, my $i) = split /\\/, $nums{$sym}; - print STDERR "DEBUG: rewrite_numbers for sym = ",$sym,": i = ",$i,", n = ",$n,", rsym{sym} = ",$rsyms{$sym},"syms{sym} = ",$syms{$sym},"\n" if $debug; next if defined($i) && $i =~ /^.*?:.*?:\w+\(\w+\)/; next if defined($rsyms{$sym}); - $i="NOEXIST::FUNCTION:" - if !defined($i) || $i eq "" || !defined($syms{$sym}); + $i="NOEXIST::FUNCTION:" if !defined($i) || $i eq ""; printf OUT "%s%-40s%d\t%s\n","",$sym,$n,$i; if (exists $r{$sym}) { (my $s, $i) = split /\\/,$r{$sym};