155714Skris#!/usr/local/bin/perl 255714Skris 3127128Snectar# fixes bug in floating point emulation on sparc64 when 4127128Snectar# this script produces off-by-one output on sparc64 5238405Sjkimuse integer; 6127128Snectar 755714Skrissub obj_cmp 855714Skris { 955714Skris local(@a,@b,$_,$r); 1055714Skris 1155714Skris $A=$obj_len{$obj{$nid{$a}}}; 1255714Skris $B=$obj_len{$obj{$nid{$b}}}; 1355714Skris 1455714Skris $r=($A-$B); 1555714Skris return($r) if $r != 0; 1655714Skris 1755714Skris $A=$obj_der{$obj{$nid{$a}}}; 1855714Skris $B=$obj_der{$obj{$nid{$b}}}; 1955714Skris 2055714Skris return($A cmp $B); 2155714Skris } 2255714Skris 2355714Skrissub expand_obj 2455714Skris { 2555714Skris local(*v)=@_; 2655714Skris local($k,$d); 2755714Skris local($i); 2855714Skris 2955714Skris do { 3055714Skris $i=0; 3155714Skris foreach $k (keys %v) 3255714Skris { 3355714Skris if (($v{$k} =~ s/(OBJ_[^,]+),/$v{$1},/)) 3455714Skris { $i++; } 3555714Skris } 3655714Skris } while($i); 3755714Skris foreach $k (keys %v) 3855714Skris { 3955714Skris @a=split(/,/,$v{$k}); 4055714Skris $objn{$k}=$#a+1; 4155714Skris } 4255714Skris return(%objn); 4355714Skris } 4455714Skris 4559191Skrisopen (IN,"$ARGV[0]") || die "Can't open input file $ARGV[0]"; 4659191Skrisopen (OUT,">$ARGV[1]") || die "Can't open output file $ARGV[1]"; 4759191Skris 4859191Skriswhile (<IN>) 4955714Skris { 5055714Skris next unless /^\#define\s+(\S+)\s+(.*)$/; 5155714Skris $v=$1; 5255714Skris $d=$2; 5368651Skris $d =~ s/^\"//; 5468651Skris $d =~ s/\"$//; 5555714Skris if ($v =~ /^SN_(.*)$/) 5668651Skris { 5768651Skris if(defined $snames{$d}) 5868651Skris { 5968651Skris print "WARNING: Duplicate short name \"$d\"\n"; 6068651Skris } 6168651Skris else 6268651Skris { $snames{$d} = "X"; } 6368651Skris $sn{$1}=$d; 6468651Skris } 6555714Skris elsif ($v =~ /^LN_(.*)$/) 6668651Skris { 6768651Skris if(defined $lnames{$d}) 6868651Skris { 6968651Skris print "WARNING: Duplicate long name \"$d\"\n"; 7068651Skris } 7168651Skris else 7268651Skris { $lnames{$d} = "X"; } 7368651Skris $ln{$1}=$d; 7468651Skris } 7555714Skris elsif ($v =~ /^NID_(.*)$/) 7655714Skris { $nid{$d}=$1; } 7755714Skris elsif ($v =~ /^OBJ_(.*)$/) 7855714Skris { 7955714Skris $obj{$1}=$v; 8055714Skris $objd{$v}=$d; 8155714Skris } 8255714Skris } 8359191Skrisclose IN; 8455714Skris 8555714Skris%ob=&expand_obj(*objd); 8655714Skris 8755714Skris@a=sort { $a <=> $b } keys %nid; 8855714Skris$n=$a[$#a]+1; 8955714Skris 9055714Skris@lvalues=(); 9155714Skris$lvalues=0; 9255714Skris 9355714Skrisfor ($i=0; $i<$n; $i++) 9455714Skris { 9555714Skris if (!defined($nid{$i})) 9655714Skris { 97160814Ssimon push(@out,"{NULL,NULL,NID_undef,0,NULL,0},\n"); 9855714Skris } 9955714Skris else 10055714Skris { 10155714Skris $sn=defined($sn{$nid{$i}})?"$sn{$nid{$i}}":"NULL"; 10255714Skris $ln=defined($ln{$nid{$i}})?"$ln{$nid{$i}}":"NULL"; 10368651Skris 10468651Skris if ($sn eq "NULL") { 10568651Skris $sn=$ln; 10668651Skris $sn{$nid{$i}} = $ln; 10768651Skris } 10868651Skris 10968651Skris if ($ln eq "NULL") { 11068651Skris $ln=$sn; 11168651Skris $ln{$nid{$i}} = $sn; 11268651Skris } 11368651Skris 11455714Skris $out ="{"; 11568651Skris $out.="\"$sn\""; 11668651Skris $out.=","."\"$ln\""; 11755714Skris $out.=",NID_$nid{$i},"; 118269682Sjkim if (defined($obj{$nid{$i}}) && $objd{$obj{$nid{$i}}} =~ /,/) 11955714Skris { 12055714Skris $v=$objd{$obj{$nid{$i}}}; 12155714Skris $v =~ s/L//g; 12255714Skris $v =~ s/,/ /g; 12355714Skris $r=&der_it($v); 12455714Skris $z=""; 12555714Skris $length=0; 12655714Skris foreach (unpack("C*",$r)) 12755714Skris { 12855714Skris $z.=sprintf("0x%02X,",$_); 12955714Skris $length++; 13055714Skris } 13155714Skris $obj_der{$obj{$nid{$i}}}=$z; 13255714Skris $obj_len{$obj{$nid{$i}}}=$length; 13355714Skris 13455714Skris push(@lvalues,sprintf("%-45s/* [%3d] %s */\n", 13555714Skris $z,$lvalues,$obj{$nid{$i}})); 13655714Skris $out.="$length,&(lvalues[$lvalues]),0"; 13755714Skris $lvalues+=$length; 13855714Skris } 13955714Skris else 14055714Skris { 141160814Ssimon $out.="0,NULL,0"; 14255714Skris } 14355714Skris $out.="},\n"; 14455714Skris push(@out,$out); 14555714Skris } 14655714Skris } 14755714Skris 14855714Skris@a=grep(defined($sn{$nid{$_}}),0 .. $n); 14955714Skrisforeach (sort { $sn{$nid{$a}} cmp $sn{$nid{$b}} } @a) 15055714Skris { 151238405Sjkim push(@sn,sprintf("%2d,\t/* \"$sn{$nid{$_}}\" */\n",$_)); 15255714Skris } 15355714Skris 15455714Skris@a=grep(defined($ln{$nid{$_}}),0 .. $n); 15555714Skrisforeach (sort { $ln{$nid{$a}} cmp $ln{$nid{$b}} } @a) 15655714Skris { 157238405Sjkim push(@ln,sprintf("%2d,\t/* \"$ln{$nid{$_}}\" */\n",$_)); 15855714Skris } 15955714Skris 16055714Skris@a=grep(defined($obj{$nid{$_}}),0 .. $n); 16155714Skrisforeach (sort obj_cmp @a) 16255714Skris { 16355714Skris $m=$obj{$nid{$_}}; 16455714Skris $v=$objd{$m}; 16555714Skris $v =~ s/L//g; 16655714Skris $v =~ s/,/ /g; 167238405Sjkim push(@ob,sprintf("%2d,\t/* %-32s %s */\n",$_,$m,$v)); 16855714Skris } 16955714Skris 17059191Skrisprint OUT <<'EOF'; 17189837Skris/* crypto/objects/obj_dat.h */ 17289837Skris 17389837Skris/* THIS FILE IS GENERATED FROM objects.h by obj_dat.pl via the 17489837Skris * following command: 175109998Smarkm * perl obj_dat.pl obj_mac.h obj_dat.h 17689837Skris */ 17789837Skris 17855714Skris/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) 17955714Skris * All rights reserved. 18055714Skris * 18155714Skris * This package is an SSL implementation written 18255714Skris * by Eric Young (eay@cryptsoft.com). 18355714Skris * The implementation was written so as to conform with Netscapes SSL. 18455714Skris * 18555714Skris * This library is free for commercial and non-commercial use as long as 18655714Skris * the following conditions are aheared to. The following conditions 18755714Skris * apply to all code found in this distribution, be it the RC4, RSA, 18855714Skris * lhash, DES, etc., code; not just the SSL code. The SSL documentation 18955714Skris * included with this distribution is covered by the same copyright terms 19055714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com). 19155714Skris * 19255714Skris * Copyright remains Eric Young's, and as such any Copyright notices in 19355714Skris * the code are not to be removed. 19455714Skris * If this package is used in a product, Eric Young should be given attribution 19555714Skris * as the author of the parts of the library used. 19655714Skris * This can be in the form of a textual message at program startup or 19755714Skris * in documentation (online or textual) provided with the package. 19855714Skris * 19955714Skris * Redistribution and use in source and binary forms, with or without 20055714Skris * modification, are permitted provided that the following conditions 20155714Skris * are met: 20255714Skris * 1. Redistributions of source code must retain the copyright 20355714Skris * notice, this list of conditions and the following disclaimer. 20455714Skris * 2. Redistributions in binary form must reproduce the above copyright 20555714Skris * notice, this list of conditions and the following disclaimer in the 20655714Skris * documentation and/or other materials provided with the distribution. 20755714Skris * 3. All advertising materials mentioning features or use of this software 20855714Skris * must display the following acknowledgement: 20955714Skris * "This product includes cryptographic software written by 21055714Skris * Eric Young (eay@cryptsoft.com)" 21155714Skris * The word 'cryptographic' can be left out if the rouines from the library 21255714Skris * being used are not cryptographic related :-). 21355714Skris * 4. If you include any Windows specific code (or a derivative thereof) from 21455714Skris * the apps directory (application code) you must include an acknowledgement: 21555714Skris * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 21655714Skris * 21755714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 21855714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21955714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22055714Skris * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22155714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22255714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22355714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22455714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22555714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22655714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 22755714Skris * SUCH DAMAGE. 22855714Skris * 22955714Skris * The licence and distribution terms for any publically available version or 23055714Skris * derivative of this code cannot be changed. i.e. this code cannot simply be 23155714Skris * copied and put under another distribution licence 23255714Skris * [including the GNU Public Licence.] 23355714Skris */ 23455714Skris 23555714SkrisEOF 23655714Skris 23759191Skrisprintf OUT "#define NUM_NID %d\n",$n; 23859191Skrisprintf OUT "#define NUM_SN %d\n",$#sn+1; 23959191Skrisprintf OUT "#define NUM_LN %d\n",$#ln+1; 24059191Skrisprintf OUT "#define NUM_OBJ %d\n\n",$#ob+1; 24155714Skris 242238405Sjkimprintf OUT "static const unsigned char lvalues[%d]={\n",$lvalues+1; 24359191Skrisprint OUT @lvalues; 24459191Skrisprint OUT "};\n\n"; 24555714Skris 246238405Sjkimprintf OUT "static const ASN1_OBJECT nid_objs[NUM_NID]={\n"; 24755714Skrisforeach (@out) 24855714Skris { 24955714Skris if (length($_) > 75) 25055714Skris { 25155714Skris $out=""; 25255714Skris foreach (split(/,/)) 25355714Skris { 25455714Skris $t=$out.$_.","; 25555714Skris if (length($t) > 70) 25655714Skris { 25759191Skris print OUT "$out\n"; 25855714Skris $t="\t$_,"; 25955714Skris } 26055714Skris $out=$t; 26155714Skris } 26255714Skris chop $out; 26359191Skris print OUT "$out"; 26455714Skris } 26555714Skris else 26659191Skris { print OUT $_; } 26755714Skris } 26859191Skrisprint OUT "};\n\n"; 26955714Skris 270238405Sjkimprintf OUT "static const unsigned int sn_objs[NUM_SN]={\n"; 27159191Skrisprint OUT @sn; 27259191Skrisprint OUT "};\n\n"; 27355714Skris 274238405Sjkimprintf OUT "static const unsigned int ln_objs[NUM_LN]={\n"; 27559191Skrisprint OUT @ln; 27659191Skrisprint OUT "};\n\n"; 27755714Skris 278238405Sjkimprintf OUT "static const unsigned int obj_objs[NUM_OBJ]={\n"; 27959191Skrisprint OUT @ob; 28059191Skrisprint OUT "};\n\n"; 28155714Skris 28259191Skrisclose OUT; 28359191Skris 28455714Skrissub der_it 28555714Skris { 28655714Skris local($v)=@_; 28755714Skris local(@a,$i,$ret,@r); 28855714Skris 28955714Skris @a=split(/\s+/,$v); 29055714Skris $ret.=pack("C*",$a[0]*40+$a[1]); 29155714Skris shift @a; 29255714Skris shift @a; 29355714Skris foreach (@a) 29455714Skris { 29555714Skris @r=(); 29655714Skris $t=0; 29755714Skris while ($_ >= 128) 29855714Skris { 29955714Skris $x=$_%128; 30055714Skris $_/=128; 30155714Skris push(@r,((($t++)?0x80:0)|$x)); 30255714Skris } 30355714Skris push(@r,((($t++)?0x80:0)|$_)); 30455714Skris $ret.=pack("C*",reverse(@r)); 30555714Skris } 30655714Skris return($ret); 30755714Skris } 308