1913ec974Sbeck#!/usr/local/bin/perl 28b4ee906Smarkus 38b4ee906Smarkus# fixes bug in floating point emulation on sparc64 when 48b4ee906Smarkus# this script produces off-by-one output on sparc64 50a5d6edeSdjmuse integer; 65b37fcf3Sryker 75b37fcf3Srykersub obj_cmp 85b37fcf3Sryker { 95b37fcf3Sryker local(@a,@b,$_,$r); 105b37fcf3Sryker 115b37fcf3Sryker $A=$obj_len{$obj{$nid{$a}}}; 125b37fcf3Sryker $B=$obj_len{$obj{$nid{$b}}}; 135b37fcf3Sryker 145b37fcf3Sryker $r=($A-$B); 155b37fcf3Sryker return($r) if $r != 0; 165b37fcf3Sryker 175b37fcf3Sryker $A=$obj_der{$obj{$nid{$a}}}; 185b37fcf3Sryker $B=$obj_der{$obj{$nid{$b}}}; 195b37fcf3Sryker 205b37fcf3Sryker return($A cmp $B); 215b37fcf3Sryker } 225b37fcf3Sryker 235b37fcf3Srykersub expand_obj 245b37fcf3Sryker { 255b37fcf3Sryker local(*v)=@_; 265b37fcf3Sryker local($k,$d); 275b37fcf3Sryker local($i); 285b37fcf3Sryker 295b37fcf3Sryker do { 305b37fcf3Sryker $i=0; 315b37fcf3Sryker foreach $k (keys %v) 325b37fcf3Sryker { 335b37fcf3Sryker if (($v{$k} =~ s/(OBJ_[^,]+),/$v{$1},/)) 345b37fcf3Sryker { $i++; } 355b37fcf3Sryker } 365b37fcf3Sryker } while($i); 375b37fcf3Sryker foreach $k (keys %v) 385b37fcf3Sryker { 395b37fcf3Sryker @a=split(/,/,$v{$k}); 405b37fcf3Sryker $objn{$k}=$#a+1; 415b37fcf3Sryker } 425b37fcf3Sryker return(%objn); 435b37fcf3Sryker } 445b37fcf3Sryker 45ba5406e9Sbeckopen (IN,"$ARGV[0]") || die "Can't open input file $ARGV[0]"; 46ba5406e9Sbeckopen (OUT,">$ARGV[1]") || die "Can't open output file $ARGV[1]"; 47ba5406e9Sbeck 48ba5406e9Sbeckwhile (<IN>) 495b37fcf3Sryker { 505b37fcf3Sryker next unless /^\#define\s+(\S+)\s+(.*)$/; 515b37fcf3Sryker $v=$1; 525b37fcf3Sryker $d=$2; 53c109e398Sbeck $d =~ s/^\"//; 54c109e398Sbeck $d =~ s/\"$//; 555b37fcf3Sryker if ($v =~ /^SN_(.*)$/) 56c109e398Sbeck { 57c109e398Sbeck if(defined $snames{$d}) 58c109e398Sbeck { 59c109e398Sbeck print "WARNING: Duplicate short name \"$d\"\n"; 60c109e398Sbeck } 61c109e398Sbeck else 62c109e398Sbeck { $snames{$d} = "X"; } 63c109e398Sbeck $sn{$1}=$d; 64c109e398Sbeck } 655b37fcf3Sryker elsif ($v =~ /^LN_(.*)$/) 66c109e398Sbeck { 67c109e398Sbeck if(defined $lnames{$d}) 68c109e398Sbeck { 69c109e398Sbeck print "WARNING: Duplicate long name \"$d\"\n"; 70c109e398Sbeck } 71c109e398Sbeck else 72c109e398Sbeck { $lnames{$d} = "X"; } 73c109e398Sbeck $ln{$1}=$d; 74c109e398Sbeck } 755b37fcf3Sryker elsif ($v =~ /^NID_(.*)$/) 765b37fcf3Sryker { $nid{$d}=$1; } 775b37fcf3Sryker elsif ($v =~ /^OBJ_(.*)$/) 785b37fcf3Sryker { 795b37fcf3Sryker $obj{$1}=$v; 805b37fcf3Sryker $objd{$v}=$d; 815b37fcf3Sryker } 825b37fcf3Sryker } 83ba5406e9Sbeckclose IN; 845b37fcf3Sryker 855b37fcf3Sryker%ob=&expand_obj(*objd); 865b37fcf3Sryker 875b37fcf3Sryker@a=sort { $a <=> $b } keys %nid; 885b37fcf3Sryker$n=$a[$#a]+1; 895b37fcf3Sryker 905b37fcf3Sryker@lvalues=(); 915b37fcf3Sryker$lvalues=0; 925b37fcf3Sryker 935b37fcf3Srykerfor ($i=0; $i<$n; $i++) 945b37fcf3Sryker { 955b37fcf3Sryker if (!defined($nid{$i})) 965b37fcf3Sryker { 974fcf65c5Sdjm push(@out,"{NULL,NULL,NID_undef,0,NULL,0},\n"); 985b37fcf3Sryker } 995b37fcf3Sryker else 1005b37fcf3Sryker { 1015b37fcf3Sryker $sn=defined($sn{$nid{$i}})?"$sn{$nid{$i}}":"NULL"; 1025b37fcf3Sryker $ln=defined($ln{$nid{$i}})?"$ln{$nid{$i}}":"NULL"; 103c109e398Sbeck 104c109e398Sbeck if ($sn eq "NULL") { 105c109e398Sbeck $sn=$ln; 106c109e398Sbeck $sn{$nid{$i}} = $ln; 107c109e398Sbeck } 108c109e398Sbeck 109c109e398Sbeck if ($ln eq "NULL") { 110c109e398Sbeck $ln=$sn; 111c109e398Sbeck $ln{$nid{$i}} = $sn; 112c109e398Sbeck } 113c109e398Sbeck 1145b37fcf3Sryker $out ="{"; 115c109e398Sbeck $out.="\"$sn\""; 116c109e398Sbeck $out.=","."\"$ln\""; 1175b37fcf3Sryker $out.=",NID_$nid{$i},"; 118*5882d7fdSmiod if (defined($obj{$nid{$i}}) && $objd{$obj{$nid{$i}}} =~ /,/) 1195b37fcf3Sryker { 1205b37fcf3Sryker $v=$objd{$obj{$nid{$i}}}; 1215b37fcf3Sryker $v =~ s/L//g; 1225b37fcf3Sryker $v =~ s/,/ /g; 1235b37fcf3Sryker $r=&der_it($v); 1245b37fcf3Sryker $z=""; 1255b37fcf3Sryker $length=0; 1265b37fcf3Sryker foreach (unpack("C*",$r)) 1275b37fcf3Sryker { 1285b37fcf3Sryker $z.=sprintf("0x%02X,",$_); 1295b37fcf3Sryker $length++; 1305b37fcf3Sryker } 1315b37fcf3Sryker $obj_der{$obj{$nid{$i}}}=$z; 1325b37fcf3Sryker $obj_len{$obj{$nid{$i}}}=$length; 1335b37fcf3Sryker 1345b37fcf3Sryker push(@lvalues,sprintf("%-45s/* [%3d] %s */\n", 1355b37fcf3Sryker $z,$lvalues,$obj{$nid{$i}})); 1365b37fcf3Sryker $out.="$length,&(lvalues[$lvalues]),0"; 1375b37fcf3Sryker $lvalues+=$length; 1385b37fcf3Sryker } 1395b37fcf3Sryker else 1405b37fcf3Sryker { 1414fcf65c5Sdjm $out.="0,NULL,0"; 1425b37fcf3Sryker } 1435b37fcf3Sryker $out.="},\n"; 1445b37fcf3Sryker push(@out,$out); 1455b37fcf3Sryker } 1465b37fcf3Sryker } 1475b37fcf3Sryker 1485b37fcf3Sryker@a=grep(defined($sn{$nid{$_}}),0 .. $n); 1495b37fcf3Srykerforeach (sort { $sn{$nid{$a}} cmp $sn{$nid{$b}} } @a) 1505b37fcf3Sryker { 1510a5d6edeSdjm push(@sn,sprintf("%2d,\t/* \"$sn{$nid{$_}}\" */\n",$_)); 1525b37fcf3Sryker } 1535b37fcf3Sryker 1545b37fcf3Sryker@a=grep(defined($ln{$nid{$_}}),0 .. $n); 1555b37fcf3Srykerforeach (sort { $ln{$nid{$a}} cmp $ln{$nid{$b}} } @a) 1565b37fcf3Sryker { 1570a5d6edeSdjm push(@ln,sprintf("%2d,\t/* \"$ln{$nid{$_}}\" */\n",$_)); 1585b37fcf3Sryker } 1595b37fcf3Sryker 1605b37fcf3Sryker@a=grep(defined($obj{$nid{$_}}),0 .. $n); 1615b37fcf3Srykerforeach (sort obj_cmp @a) 1625b37fcf3Sryker { 1635b37fcf3Sryker $m=$obj{$nid{$_}}; 1645b37fcf3Sryker $v=$objd{$m}; 1655b37fcf3Sryker $v =~ s/L//g; 1665b37fcf3Sryker $v =~ s/,/ /g; 1670a5d6edeSdjm push(@ob,sprintf("%2d,\t/* %-32s %s */\n",$_,$m,$v)); 1685b37fcf3Sryker } 1695b37fcf3Sryker 170ba5406e9Sbeckprint OUT <<'EOF'; 171da347917Sbeck/* crypto/objects/obj_dat.h */ 172da347917Sbeck 173da347917Sbeck/* THIS FILE IS GENERATED FROM objects.h by obj_dat.pl via the 174da347917Sbeck * following command: 175da347917Sbeck * perl obj_dat.pl obj_mac.h obj_dat.h 176da347917Sbeck */ 177da347917Sbeck 1785b37fcf3Sryker/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) 1795b37fcf3Sryker * All rights reserved. 1805b37fcf3Sryker * 1815b37fcf3Sryker * This package is an SSL implementation written 1825b37fcf3Sryker * by Eric Young (eay@cryptsoft.com). 1835b37fcf3Sryker * The implementation was written so as to conform with Netscapes SSL. 1845b37fcf3Sryker * 1855b37fcf3Sryker * This library is free for commercial and non-commercial use as long as 1865b37fcf3Sryker * the following conditions are aheared to. The following conditions 1875b37fcf3Sryker * apply to all code found in this distribution, be it the RC4, RSA, 1885b37fcf3Sryker * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1895b37fcf3Sryker * included with this distribution is covered by the same copyright terms 1905b37fcf3Sryker * except that the holder is Tim Hudson (tjh@cryptsoft.com). 1915b37fcf3Sryker * 1925b37fcf3Sryker * Copyright remains Eric Young's, and as such any Copyright notices in 1935b37fcf3Sryker * the code are not to be removed. 1945b37fcf3Sryker * If this package is used in a product, Eric Young should be given attribution 1955b37fcf3Sryker * as the author of the parts of the library used. 1965b37fcf3Sryker * This can be in the form of a textual message at program startup or 1975b37fcf3Sryker * in documentation (online or textual) provided with the package. 1985b37fcf3Sryker * 1995b37fcf3Sryker * Redistribution and use in source and binary forms, with or without 2005b37fcf3Sryker * modification, are permitted provided that the following conditions 2015b37fcf3Sryker * are met: 2025b37fcf3Sryker * 1. Redistributions of source code must retain the copyright 2035b37fcf3Sryker * notice, this list of conditions and the following disclaimer. 2045b37fcf3Sryker * 2. Redistributions in binary form must reproduce the above copyright 2055b37fcf3Sryker * notice, this list of conditions and the following disclaimer in the 2065b37fcf3Sryker * documentation and/or other materials provided with the distribution. 2075b37fcf3Sryker * 3. All advertising materials mentioning features or use of this software 2085b37fcf3Sryker * must display the following acknowledgement: 2095b37fcf3Sryker * "This product includes cryptographic software written by 2105b37fcf3Sryker * Eric Young (eay@cryptsoft.com)" 2115b37fcf3Sryker * The word 'cryptographic' can be left out if the rouines from the library 2125b37fcf3Sryker * being used are not cryptographic related :-). 2135b37fcf3Sryker * 4. If you include any Windows specific code (or a derivative thereof) from 2145b37fcf3Sryker * the apps directory (application code) you must include an acknowledgement: 2155b37fcf3Sryker * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 2165b37fcf3Sryker * 2175b37fcf3Sryker * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 2185b37fcf3Sryker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2195b37fcf3Sryker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2205b37fcf3Sryker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2215b37fcf3Sryker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2225b37fcf3Sryker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2235b37fcf3Sryker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2245b37fcf3Sryker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2255b37fcf3Sryker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2265b37fcf3Sryker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2275b37fcf3Sryker * SUCH DAMAGE. 2285b37fcf3Sryker * 2295b37fcf3Sryker * The licence and distribution terms for any publically available version or 2305b37fcf3Sryker * derivative of this code cannot be changed. i.e. this code cannot simply be 2315b37fcf3Sryker * copied and put under another distribution licence 2325b37fcf3Sryker * [including the GNU Public Licence.] 2335b37fcf3Sryker */ 2345b37fcf3Sryker 2355b37fcf3SrykerEOF 2365b37fcf3Sryker 237ba5406e9Sbeckprintf OUT "#define NUM_NID %d\n",$n; 238ba5406e9Sbeckprintf OUT "#define NUM_SN %d\n",$#sn+1; 239ba5406e9Sbeckprintf OUT "#define NUM_LN %d\n",$#ln+1; 240ba5406e9Sbeckprintf OUT "#define NUM_OBJ %d\n\n",$#ob+1; 2415b37fcf3Sryker 2420a5d6edeSdjmprintf OUT "static const unsigned char lvalues[%d]={\n",$lvalues+1; 243ba5406e9Sbeckprint OUT @lvalues; 244ba5406e9Sbeckprint OUT "};\n\n"; 2455b37fcf3Sryker 2460a5d6edeSdjmprintf OUT "static const ASN1_OBJECT nid_objs[NUM_NID]={\n"; 2475b37fcf3Srykerforeach (@out) 2485b37fcf3Sryker { 2495b37fcf3Sryker if (length($_) > 75) 2505b37fcf3Sryker { 2515b37fcf3Sryker $out=""; 2525b37fcf3Sryker foreach (split(/,/)) 2535b37fcf3Sryker { 2545b37fcf3Sryker $t=$out.$_.","; 2555b37fcf3Sryker if (length($t) > 70) 2565b37fcf3Sryker { 257ba5406e9Sbeck print OUT "$out\n"; 2585b37fcf3Sryker $t="\t$_,"; 2595b37fcf3Sryker } 2605b37fcf3Sryker $out=$t; 2615b37fcf3Sryker } 2625b37fcf3Sryker chop $out; 263ba5406e9Sbeck print OUT "$out"; 2645b37fcf3Sryker } 2655b37fcf3Sryker else 266ba5406e9Sbeck { print OUT $_; } 2675b37fcf3Sryker } 268ba5406e9Sbeckprint OUT "};\n\n"; 2695b37fcf3Sryker 2700a5d6edeSdjmprintf OUT "static const unsigned int sn_objs[NUM_SN]={\n"; 271ba5406e9Sbeckprint OUT @sn; 272ba5406e9Sbeckprint OUT "};\n\n"; 2735b37fcf3Sryker 2740a5d6edeSdjmprintf OUT "static const unsigned int ln_objs[NUM_LN]={\n"; 275ba5406e9Sbeckprint OUT @ln; 276ba5406e9Sbeckprint OUT "};\n\n"; 2775b37fcf3Sryker 2780a5d6edeSdjmprintf OUT "static const unsigned int obj_objs[NUM_OBJ]={\n"; 279ba5406e9Sbeckprint OUT @ob; 280ba5406e9Sbeckprint OUT "};\n\n"; 281ba5406e9Sbeck 282ba5406e9Sbeckclose OUT; 2835b37fcf3Sryker 2845b37fcf3Srykersub der_it 2855b37fcf3Sryker { 2865b37fcf3Sryker local($v)=@_; 2875b37fcf3Sryker local(@a,$i,$ret,@r); 2885b37fcf3Sryker 2895b37fcf3Sryker @a=split(/\s+/,$v); 2905b37fcf3Sryker $ret.=pack("C*",$a[0]*40+$a[1]); 2915b37fcf3Sryker shift @a; 2925b37fcf3Sryker shift @a; 293913ec974Sbeck foreach (@a) 2945b37fcf3Sryker { 2955b37fcf3Sryker @r=(); 2965b37fcf3Sryker $t=0; 2975b37fcf3Sryker while ($_ >= 128) 2985b37fcf3Sryker { 2995b37fcf3Sryker $x=$_%128; 3005b37fcf3Sryker $_/=128; 3015b37fcf3Sryker push(@r,((($t++)?0x80:0)|$x)); 3025b37fcf3Sryker } 3035b37fcf3Sryker push(@r,((($t++)?0x80:0)|$_)); 3045b37fcf3Sryker $ret.=pack("C*",reverse(@r)); 3055b37fcf3Sryker } 3065b37fcf3Sryker return($ret); 3075b37fcf3Sryker } 308