1 | #! /usr/bin/env perl
|
---|
2 | # Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
|
---|
3 | #
|
---|
4 | # Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
5 | # this file except in compliance with the License. You can obtain a copy
|
---|
6 | # in the file LICENSE in the source distribution or at
|
---|
7 | # https://www.openssl.org/source/license.html
|
---|
8 |
|
---|
9 | # Generate progs.h file by looking for command mains in list of C files
|
---|
10 | # passed on the command line.
|
---|
11 |
|
---|
12 | use strict;
|
---|
13 | use warnings;
|
---|
14 | use lib '.';
|
---|
15 | use configdata qw/@disablables %unified_info/;
|
---|
16 |
|
---|
17 | my $opt = shift @ARGV;
|
---|
18 | die "Unrecognised option, must be -C or -H\n"
|
---|
19 | unless ($opt eq '-H' || $opt eq '-C');
|
---|
20 |
|
---|
21 | my %commands = ();
|
---|
22 | my $cmdre = qr/^\s*int\s+([a-z_][a-z0-9_]*)_main\(\s*int\s+argc\s*,/;
|
---|
23 | my $apps_openssl = shift @ARGV;
|
---|
24 | my $YEAR = [localtime()]->[5] + 1900;
|
---|
25 |
|
---|
26 | # because the program apps/openssl has object files as sources, and
|
---|
27 | # they then have the corresponding C files as source, we need to chain
|
---|
28 | # the lookups in %unified_info
|
---|
29 | my @openssl_source =
|
---|
30 | map { @{$unified_info{sources}->{$_}} }
|
---|
31 | grep { /\.o$/
|
---|
32 | && !$unified_info{attributes}->{sources}->{$apps_openssl}->{$_}->{nocheck} }
|
---|
33 | @{$unified_info{sources}->{$apps_openssl}};
|
---|
34 |
|
---|
35 | foreach my $filename (@openssl_source) {
|
---|
36 | open F, $filename or die "Couldn't open $filename: $!\n";
|
---|
37 | foreach ( grep /$cmdre/, <F> ) {
|
---|
38 | my @foo = /$cmdre/;
|
---|
39 | $commands{$1} = 1;
|
---|
40 | }
|
---|
41 | close F;
|
---|
42 | }
|
---|
43 |
|
---|
44 | @ARGV = sort keys %commands;
|
---|
45 |
|
---|
46 | if ($opt eq '-H') {
|
---|
47 | print <<"EOF";
|
---|
48 | /*
|
---|
49 | * WARNING: do not edit!
|
---|
50 | * Generated by apps/progs.pl
|
---|
51 | *
|
---|
52 | * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved.
|
---|
53 | *
|
---|
54 | * Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
55 | * this file except in compliance with the License. You can obtain a copy
|
---|
56 | * in the file LICENSE in the source distribution or at
|
---|
57 | * https://www.openssl.org/source/license.html
|
---|
58 | */
|
---|
59 |
|
---|
60 | #include "function.h"
|
---|
61 |
|
---|
62 | EOF
|
---|
63 |
|
---|
64 | foreach (@ARGV) {
|
---|
65 | printf "extern int %s_main(int argc, char *argv[]);\n", $_;
|
---|
66 | }
|
---|
67 | print "\n";
|
---|
68 |
|
---|
69 | foreach (@ARGV) {
|
---|
70 | printf "extern const OPTIONS %s_options[];\n", $_;
|
---|
71 | }
|
---|
72 | print "\n";
|
---|
73 | print "extern FUNCTION functions[];\n";
|
---|
74 | }
|
---|
75 |
|
---|
76 | if ($opt eq '-C') {
|
---|
77 | print <<"EOF";
|
---|
78 | /*
|
---|
79 | * WARNING: do not edit!
|
---|
80 | * Generated by apps/progs.pl
|
---|
81 | *
|
---|
82 | * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved.
|
---|
83 | *
|
---|
84 | * Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
85 | * this file except in compliance with the License. You can obtain a copy
|
---|
86 | * in the file LICENSE in the source distribution or at
|
---|
87 | * https://www.openssl.org/source/license.html
|
---|
88 | */
|
---|
89 |
|
---|
90 | #include "progs.h"
|
---|
91 |
|
---|
92 | EOF
|
---|
93 |
|
---|
94 | my %cmd_disabler = (
|
---|
95 | ciphers => "sock",
|
---|
96 | genrsa => "rsa",
|
---|
97 | gendsa => "dsa",
|
---|
98 | dsaparam => "dsa",
|
---|
99 | gendh => "dh",
|
---|
100 | dhparam => "dh",
|
---|
101 | ecparam => "ec",
|
---|
102 | );
|
---|
103 | my %cmd_deprecated = (
|
---|
104 | # The format of this table is:
|
---|
105 | # [0] = alternative command to use instead
|
---|
106 | # [1] = deprecented in this version
|
---|
107 | # [2] = preprocessor conditional for exclusing irrespective of deprecation
|
---|
108 | # rsa => [ "pkey", "3_0", "rsa" ],
|
---|
109 | # genrsa => [ "genpkey", "3_0", "rsa" ],
|
---|
110 | rsautl => [ "pkeyutl", "3_0", "rsa" ],
|
---|
111 | # dhparam => [ "pkeyparam", "3_0", "dh" ],
|
---|
112 | # dsaparam => [ "pkeyparam", "3_0", "dsa" ],
|
---|
113 | # dsa => [ "pkey", "3_0", "dsa" ],
|
---|
114 | # gendsa => [ "genpkey", "3_0", "dsa" ],
|
---|
115 | # ec => [ "pkey", "3_0", "ec" ],
|
---|
116 | # ecparam => [ "pkeyparam", "3_0", "ec" ],
|
---|
117 | );
|
---|
118 |
|
---|
119 | print "FUNCTION functions[] = {\n";
|
---|
120 | foreach my $cmd ( @ARGV ) {
|
---|
121 | my $str =
|
---|
122 | " {FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options, NULL, NULL},\n";
|
---|
123 | if ($cmd =~ /^s_/) {
|
---|
124 | print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n";
|
---|
125 | } elsif (my $deprecated = $cmd_deprecated{$cmd}) {
|
---|
126 | my @dep = @{$deprecated};
|
---|
127 | my $daltprg = $dep[0];
|
---|
128 | my $dver = $dep[1];
|
---|
129 | my $dsys = $dep[2];
|
---|
130 | print "#if !defined(OPENSSL_NO_DEPRECATED_" . $dver . ")";
|
---|
131 | if ($dsys) {
|
---|
132 | print " && !defined(OPENSSL_NO_" . uc($dsys) . ")";
|
---|
133 | }
|
---|
134 | $dver =~ s/_/./g;
|
---|
135 | my $dalt = "\"" . $daltprg . "\", \"" . $dver . "\"";
|
---|
136 | $str =~ s/NULL, NULL/$dalt/;
|
---|
137 | print "\n${str}#endif\n";
|
---|
138 | } elsif (grep { $cmd eq $_ } @disablables) {
|
---|
139 | print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n";
|
---|
140 | } elsif (my $disabler = $cmd_disabler{$cmd}) {
|
---|
141 | print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n";
|
---|
142 | } else {
|
---|
143 | print $str;
|
---|
144 | }
|
---|
145 | }
|
---|
146 |
|
---|
147 | my %md_disabler = (
|
---|
148 | blake2b512 => "blake2",
|
---|
149 | blake2s256 => "blake2",
|
---|
150 | );
|
---|
151 | foreach my $cmd (
|
---|
152 | "md2", "md4", "md5",
|
---|
153 | "sha1", "sha224", "sha256", "sha384",
|
---|
154 | "sha512", "sha512-224", "sha512-256",
|
---|
155 | "sha3-224", "sha3-256", "sha3-384", "sha3-512",
|
---|
156 | "shake128", "shake256",
|
---|
157 | "mdc2", "rmd160", "blake2b512", "blake2s256",
|
---|
158 | "sm3"
|
---|
159 | ) {
|
---|
160 | my $str = " {FT_md, \"$cmd\", dgst_main, NULL, NULL},\n";
|
---|
161 | if (grep { $cmd eq $_ } @disablables) {
|
---|
162 | print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n";
|
---|
163 | } elsif (my $disabler = $md_disabler{$cmd}) {
|
---|
164 | print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n";
|
---|
165 | } else {
|
---|
166 | print $str;
|
---|
167 | }
|
---|
168 | }
|
---|
169 |
|
---|
170 | my %cipher_disabler = (
|
---|
171 | des3 => "des",
|
---|
172 | desx => "des",
|
---|
173 | cast5 => "cast",
|
---|
174 | );
|
---|
175 | foreach my $cmd (
|
---|
176 | "aes-128-cbc", "aes-128-ecb",
|
---|
177 | "aes-192-cbc", "aes-192-ecb",
|
---|
178 | "aes-256-cbc", "aes-256-ecb",
|
---|
179 | "aria-128-cbc", "aria-128-cfb",
|
---|
180 | "aria-128-ctr", "aria-128-ecb", "aria-128-ofb",
|
---|
181 | "aria-128-cfb1", "aria-128-cfb8",
|
---|
182 | "aria-192-cbc", "aria-192-cfb",
|
---|
183 | "aria-192-ctr", "aria-192-ecb", "aria-192-ofb",
|
---|
184 | "aria-192-cfb1", "aria-192-cfb8",
|
---|
185 | "aria-256-cbc", "aria-256-cfb",
|
---|
186 | "aria-256-ctr", "aria-256-ecb", "aria-256-ofb",
|
---|
187 | "aria-256-cfb1", "aria-256-cfb8",
|
---|
188 | "camellia-128-cbc", "camellia-128-ecb",
|
---|
189 | "camellia-192-cbc", "camellia-192-ecb",
|
---|
190 | "camellia-256-cbc", "camellia-256-ecb",
|
---|
191 | "base64", "zlib",
|
---|
192 | "des", "des3", "desx", "idea", "seed", "rc4", "rc4-40",
|
---|
193 | "rc2", "bf", "cast", "rc5",
|
---|
194 | "des-ecb", "des-ede", "des-ede3",
|
---|
195 | "des-cbc", "des-ede-cbc","des-ede3-cbc",
|
---|
196 | "des-cfb", "des-ede-cfb","des-ede3-cfb",
|
---|
197 | "des-ofb", "des-ede-ofb","des-ede3-ofb",
|
---|
198 | "idea-cbc","idea-ecb", "idea-cfb", "idea-ofb",
|
---|
199 | "seed-cbc","seed-ecb", "seed-cfb", "seed-ofb",
|
---|
200 | "rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc",
|
---|
201 | "bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb",
|
---|
202 | "cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
|
---|
203 | "cast-cbc", "rc5-cbc", "rc5-ecb", "rc5-cfb", "rc5-ofb",
|
---|
204 | "sm4-cbc", "sm4-ecb", "sm4-cfb", "sm4-ofb", "sm4-ctr"
|
---|
205 | ) {
|
---|
206 | my $str = " {FT_cipher, \"$cmd\", enc_main, enc_options, NULL},\n";
|
---|
207 | (my $algo = $cmd) =~ s/-.*//g;
|
---|
208 | if ($cmd eq "zlib") {
|
---|
209 | print "#ifdef ZLIB\n${str}#endif\n";
|
---|
210 | } elsif (grep { $algo eq $_ } @disablables) {
|
---|
211 | print "#ifndef OPENSSL_NO_" . uc($algo) . "\n${str}#endif\n";
|
---|
212 | } elsif (my $disabler = $cipher_disabler{$algo}) {
|
---|
213 | print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n";
|
---|
214 | } else {
|
---|
215 | print $str;
|
---|
216 | }
|
---|
217 | }
|
---|
218 |
|
---|
219 | print " {0, NULL, NULL, NULL, NULL}\n};\n";
|
---|
220 | }
|
---|