1e1051a39Sopenharmony_ci#! /usr/bin/env perl 2e1051a39Sopenharmony_ci# Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci# 4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci# this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci 9e1051a39Sopenharmony_ciuse Getopt::Std; 10e1051a39Sopenharmony_ciuse FindBin; 11e1051a39Sopenharmony_ciuse lib "$FindBin::Bin/../../util/perl"; 12e1051a39Sopenharmony_ciuse OpenSSL::copyright; 13e1051a39Sopenharmony_ci 14e1051a39Sopenharmony_ciour($opt_n); 15e1051a39Sopenharmony_cigetopts('n'); 16e1051a39Sopenharmony_ci 17e1051a39Sopenharmony_ci# The year the output file is generated. 18e1051a39Sopenharmony_cimy $YEAR = OpenSSL::copyright::latest(($0, $ARGV[1], $ARGV[0])); 19e1051a39Sopenharmony_ci 20e1051a39Sopenharmony_ciopen (NUMIN,"$ARGV[1]") || die "Can't open number file $ARGV[1]"; 21e1051a39Sopenharmony_ci$max_nid=0; 22e1051a39Sopenharmony_ci$o=0; 23e1051a39Sopenharmony_ciwhile(<NUMIN>) 24e1051a39Sopenharmony_ci { 25e1051a39Sopenharmony_ci s|\R$||; 26e1051a39Sopenharmony_ci $o++; 27e1051a39Sopenharmony_ci s/#.*$//; 28e1051a39Sopenharmony_ci next if /^\s*$/; 29e1051a39Sopenharmony_ci $_ = 'X'.$_; 30e1051a39Sopenharmony_ci ($Cname,$mynum) = split; 31e1051a39Sopenharmony_ci $Cname =~ s/^X//; 32e1051a39Sopenharmony_ci if (defined($nidn{$mynum})) 33e1051a39Sopenharmony_ci { die "$ARGV[1]:$o:There's already an object with NID ",$mynum," on line ",$order{$mynum},"\n"; } 34e1051a39Sopenharmony_ci if (defined($nid{$Cname})) 35e1051a39Sopenharmony_ci { die "$ARGV[1]:$o:There's already an object with name ",$Cname," on line ",$order{$nid{$Cname}},"\n"; } 36e1051a39Sopenharmony_ci $nid{$Cname} = $mynum; 37e1051a39Sopenharmony_ci $nidn{$mynum} = $Cname; 38e1051a39Sopenharmony_ci $order{$mynum} = $o; 39e1051a39Sopenharmony_ci $max_nid = $mynum if $mynum > $max_nid; 40e1051a39Sopenharmony_ci } 41e1051a39Sopenharmony_ciclose NUMIN; 42e1051a39Sopenharmony_ci 43e1051a39Sopenharmony_ciopen (IN,"$ARGV[0]") || die "Can't open input file $ARGV[0]"; 44e1051a39Sopenharmony_ci$Cname=""; 45e1051a39Sopenharmony_ci$o=0; 46e1051a39Sopenharmony_ciwhile (<IN>) 47e1051a39Sopenharmony_ci { 48e1051a39Sopenharmony_ci s|\R$||; 49e1051a39Sopenharmony_ci $o++; 50e1051a39Sopenharmony_ci if (/^!module\s+(.*)$/) 51e1051a39Sopenharmony_ci { 52e1051a39Sopenharmony_ci $module = $1."-"; 53e1051a39Sopenharmony_ci $module =~ s/\./_/g; 54e1051a39Sopenharmony_ci $module =~ s/-/_/g; 55e1051a39Sopenharmony_ci } 56e1051a39Sopenharmony_ci if (/^!global$/) 57e1051a39Sopenharmony_ci { $module = ""; } 58e1051a39Sopenharmony_ci if (/^!Cname\s+(.*)$/) 59e1051a39Sopenharmony_ci { $Cname = $1; } 60e1051a39Sopenharmony_ci if (/^!Alias\s+(.+?)\s+(.*)$/) 61e1051a39Sopenharmony_ci { 62e1051a39Sopenharmony_ci $Cname = $module.$1; 63e1051a39Sopenharmony_ci $myoid = $2; 64e1051a39Sopenharmony_ci $myoid = &process_oid($myoid); 65e1051a39Sopenharmony_ci $Cname =~ s/-/_/g; 66e1051a39Sopenharmony_ci $ordern{$o} = $Cname; 67e1051a39Sopenharmony_ci $order{$Cname} = $o; 68e1051a39Sopenharmony_ci $obj{$Cname} = $myoid; 69e1051a39Sopenharmony_ci $_ = ""; 70e1051a39Sopenharmony_ci $Cname = ""; 71e1051a39Sopenharmony_ci } 72e1051a39Sopenharmony_ci s/!.*$//; 73e1051a39Sopenharmony_ci s/#.*$//; 74e1051a39Sopenharmony_ci next if /^\s*$/; 75e1051a39Sopenharmony_ci ($myoid,$mysn,$myln) = split ':'; 76e1051a39Sopenharmony_ci $mysn =~ s/^\s*//; 77e1051a39Sopenharmony_ci $mysn =~ s/\s*$//; 78e1051a39Sopenharmony_ci $myln =~ s/^\s*//; 79e1051a39Sopenharmony_ci $myln =~ s/\s*$//; 80e1051a39Sopenharmony_ci $myoid =~ s/^\s*//; 81e1051a39Sopenharmony_ci $myoid =~ s/\s*$//; 82e1051a39Sopenharmony_ci if ($myoid ne "") 83e1051a39Sopenharmony_ci { 84e1051a39Sopenharmony_ci $myoid = &process_oid($myoid); 85e1051a39Sopenharmony_ci } 86e1051a39Sopenharmony_ci 87e1051a39Sopenharmony_ci if ($Cname eq "" && ($myln =~ /^[_A-Za-z][\w.-]*$/ )) 88e1051a39Sopenharmony_ci { 89e1051a39Sopenharmony_ci $Cname = $myln; 90e1051a39Sopenharmony_ci $Cname =~ s/\./_/g; 91e1051a39Sopenharmony_ci $Cname =~ s/-/_/g; 92e1051a39Sopenharmony_ci if ($Cname ne "" && defined($ln{$module.$Cname})) 93e1051a39Sopenharmony_ci { die "objects.txt:$o:There's already an object with long name ",$ln{$module.$Cname}," on line ",$order{$module.$Cname},"\n"; } 94e1051a39Sopenharmony_ci } 95e1051a39Sopenharmony_ci if ($Cname eq "") 96e1051a39Sopenharmony_ci { 97e1051a39Sopenharmony_ci $Cname = $mysn; 98e1051a39Sopenharmony_ci $Cname =~ s/-/_/g; 99e1051a39Sopenharmony_ci if ($Cname ne "" && defined($sn{$module.$Cname})) 100e1051a39Sopenharmony_ci { die "objects.txt:$o:There's already an object with short name ",$sn{$module.$Cname}," on line ",$order{$module.$Cname},"\n"; } 101e1051a39Sopenharmony_ci } 102e1051a39Sopenharmony_ci if ($Cname eq "") 103e1051a39Sopenharmony_ci { 104e1051a39Sopenharmony_ci $Cname = $myln; 105e1051a39Sopenharmony_ci $Cname =~ s/-/_/g; 106e1051a39Sopenharmony_ci $Cname =~ s/\./_/g; 107e1051a39Sopenharmony_ci $Cname =~ s/ /_/g; 108e1051a39Sopenharmony_ci if ($Cname ne "" && defined($ln{$module.$Cname})) 109e1051a39Sopenharmony_ci { die "objects.txt:$o:There's already an object with long name ",$ln{$module.$Cname}," on line ",$order{$module.$Cname},"\n"; } 110e1051a39Sopenharmony_ci } 111e1051a39Sopenharmony_ci $Cname =~ s/\./_/g; 112e1051a39Sopenharmony_ci $Cname =~ s/-/_/g; 113e1051a39Sopenharmony_ci $Cname = $module.$Cname; 114e1051a39Sopenharmony_ci $ordern{$o} = $Cname; 115e1051a39Sopenharmony_ci $order{$Cname} = $o; 116e1051a39Sopenharmony_ci $sn{$Cname} = $mysn; 117e1051a39Sopenharmony_ci $ln{$Cname} = $myln; 118e1051a39Sopenharmony_ci $obj{$Cname} = $myoid; 119e1051a39Sopenharmony_ci if (!defined($nid{$Cname})) 120e1051a39Sopenharmony_ci { 121e1051a39Sopenharmony_ci $max_nid++; 122e1051a39Sopenharmony_ci $nid{$Cname} = $max_nid; 123e1051a39Sopenharmony_ci $nidn{$max_nid} = $Cname; 124e1051a39Sopenharmony_ciprint STDERR "Added OID $Cname\n"; 125e1051a39Sopenharmony_ci } 126e1051a39Sopenharmony_ci $Cname=""; 127e1051a39Sopenharmony_ci } 128e1051a39Sopenharmony_ciclose IN; 129e1051a39Sopenharmony_ci 130e1051a39Sopenharmony_ciif ( $opt_n ) { 131e1051a39Sopenharmony_ci foreach (sort { $a <=> $b } keys %nidn) 132e1051a39Sopenharmony_ci { 133e1051a39Sopenharmony_ci print $nidn{$_},"\t\t",$_,"\n"; 134e1051a39Sopenharmony_ci } 135e1051a39Sopenharmony_ci exit; 136e1051a39Sopenharmony_ci} 137e1051a39Sopenharmony_ci 138e1051a39Sopenharmony_ciprint <<"EOF"; 139e1051a39Sopenharmony_ci/* 140e1051a39Sopenharmony_ci * WARNING: do not edit! 141e1051a39Sopenharmony_ci * Generated by crypto/objects/objects.pl 142e1051a39Sopenharmony_ci * 143e1051a39Sopenharmony_ci * Copyright 2000-$YEAR The OpenSSL Project Authors. All Rights Reserved. 144e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License"). You may not use 145e1051a39Sopenharmony_ci * this file except in compliance with the License. You can obtain a copy 146e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at 147e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html 148e1051a39Sopenharmony_ci */ 149e1051a39Sopenharmony_ci 150e1051a39Sopenharmony_ci#ifndef OPENSSL_OBJ_MAC_H 151e1051a39Sopenharmony_ci# define OPENSSL_OBJ_MAC_H 152e1051a39Sopenharmony_ci# pragma once 153e1051a39Sopenharmony_ci 154e1051a39Sopenharmony_ci#define SN_undef "UNDEF" 155e1051a39Sopenharmony_ci#define LN_undef "undefined" 156e1051a39Sopenharmony_ci#define NID_undef 0 157e1051a39Sopenharmony_ci#define OBJ_undef 0L 158e1051a39Sopenharmony_ciEOF 159e1051a39Sopenharmony_ci 160e1051a39Sopenharmony_cisub expand 161e1051a39Sopenharmony_ci { 162e1051a39Sopenharmony_ci my $string = shift; 163e1051a39Sopenharmony_ci 164e1051a39Sopenharmony_ci 1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; 165e1051a39Sopenharmony_ci 166e1051a39Sopenharmony_ci return $string; 167e1051a39Sopenharmony_ci } 168e1051a39Sopenharmony_ci 169e1051a39Sopenharmony_ciforeach (sort { $a <=> $b } keys %ordern) 170e1051a39Sopenharmony_ci { 171e1051a39Sopenharmony_ci $Cname=$ordern{$_}; 172e1051a39Sopenharmony_ci print "\n"; 173e1051a39Sopenharmony_ci print expand("#define SN_$Cname\t\t\"$sn{$Cname}\"\n") if $sn{$Cname} ne ""; 174e1051a39Sopenharmony_ci print expand("#define LN_$Cname\t\t\"$ln{$Cname}\"\n") if $ln{$Cname} ne ""; 175e1051a39Sopenharmony_ci print expand("#define NID_$Cname\t\t$nid{$Cname}\n") if $nid{$Cname} ne ""; 176e1051a39Sopenharmony_ci print expand("#define OBJ_$Cname\t\t$obj{$Cname}\n") if $obj{$Cname} ne ""; 177e1051a39Sopenharmony_ci } 178e1051a39Sopenharmony_ci 179e1051a39Sopenharmony_ciprint <<EOF; 180e1051a39Sopenharmony_ci 181e1051a39Sopenharmony_ci#endif /* OPENSSL_OBJ_MAC_H */ 182e1051a39Sopenharmony_ciEOF 183e1051a39Sopenharmony_ci 184e1051a39Sopenharmony_cisub process_oid 185e1051a39Sopenharmony_ci { 186e1051a39Sopenharmony_ci local($oid)=@_; 187e1051a39Sopenharmony_ci local(@a,$oid_pref); 188e1051a39Sopenharmony_ci 189e1051a39Sopenharmony_ci @a = split(/\s+/,$myoid); 190e1051a39Sopenharmony_ci $pref_oid = ""; 191e1051a39Sopenharmony_ci $pref_sep = ""; 192e1051a39Sopenharmony_ci if (!($a[0] =~ /^[0-9]+$/)) 193e1051a39Sopenharmony_ci { 194e1051a39Sopenharmony_ci $a[0] =~ s/-/_/g; 195e1051a39Sopenharmony_ci if (!defined($obj{$a[0]})) 196e1051a39Sopenharmony_ci { die "$ARGV[0]:$o:Undefined identifier ",$a[0],"\n"; } 197e1051a39Sopenharmony_ci $pref_oid = "OBJ_" . $a[0]; 198e1051a39Sopenharmony_ci $pref_sep = ","; 199e1051a39Sopenharmony_ci shift @a; 200e1051a39Sopenharmony_ci } 201e1051a39Sopenharmony_ci $oids = join('L,',@a) . "L"; 202e1051a39Sopenharmony_ci if ($oids ne "L") 203e1051a39Sopenharmony_ci { 204e1051a39Sopenharmony_ci $oids = $pref_oid . $pref_sep . $oids; 205e1051a39Sopenharmony_ci } 206e1051a39Sopenharmony_ci else 207e1051a39Sopenharmony_ci { 208e1051a39Sopenharmony_ci $oids = $pref_oid; 209e1051a39Sopenharmony_ci } 210e1051a39Sopenharmony_ci return($oids); 211e1051a39Sopenharmony_ci } 212