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