xref: /freebsd/crypto/openssl/doc/internal/man3/OPTIONS.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1*b077aed3SPierre Pronchery=pod
2*b077aed3SPierre Pronchery
3*b077aed3SPierre Pronchery=head1 NAME
4*b077aed3SPierre Pronchery
5*b077aed3SPierre ProncheryOPTIONS, OPT_PAIR, OPT_COMMON, OPT_ERR, OPT_EOF, OPT_HELP,
6*b077aed3SPierre Proncheryopt_init, opt_progname, opt_appname, opt_getprog, opt_help,
7*b077aed3SPierre Proncheryopt_begin, opt_next, opt_flag, opt_arg, opt_unknown, opt_cipher,
8*b077aed3SPierre Proncheryopt_cipher_any, opt_cipher_silent, opt_md,
9*b077aed3SPierre Proncheryopt_int, opt_int_arg, opt_long, opt_ulong, opt_intmax, opt_uintmax,
10*b077aed3SPierre Proncheryopt_format, opt_isdir, opt_string, opt_pair,
11*b077aed3SPierre Proncheryopt_num_rest, opt_rest, opt_legacy_okay
12*b077aed3SPierre Pronchery- Option parsing for commands and tests
13*b077aed3SPierre Pronchery
14*b077aed3SPierre Pronchery=head1 SYNOPSIS
15*b077aed3SPierre Pronchery
16*b077aed3SPierre Pronchery #include "opt.h"
17*b077aed3SPierre Pronchery
18*b077aed3SPierre Pronchery typedef struct { ... }  OPTIONS;
19*b077aed3SPierre Pronchery typedef struct { ... } OPT_PAIR;
20*b077aed3SPierre Pronchery #define OPT_COMMON
21*b077aed3SPierre Pronchery #define OPT_ERR
22*b077aed3SPierre Pronchery #define OPT_EOF
23*b077aed3SPierre Pronchery #define OPT_HELP
24*b077aed3SPierre Pronchery
25*b077aed3SPierre Pronchery char *opt_init(int argc, char **argv, const OPTIONS *o);
26*b077aed3SPierre Pronchery char *opt_progname(const char *argv0);
27*b077aed3SPierre Pronchery char *opt_appname(const char *argv0);
28*b077aed3SPierre Pronchery char *opt_getprog(void);
29*b077aed3SPierre Pronchery void opt_help(const OPTIONS *list);
30*b077aed3SPierre Pronchery
31*b077aed3SPierre Pronchery void opt_begin(void);
32*b077aed3SPierre Pronchery int opt_next(void);
33*b077aed3SPierre Pronchery char *opt_flag(void);
34*b077aed3SPierre Pronchery char *opt_arg(void);
35*b077aed3SPierre Pronchery char *opt_unknown(void);
36*b077aed3SPierre Pronchery int opt_cipher(const char *name, EVP_CIPHER **cipherp);
37*b077aed3SPierre Pronchery int opt_cipher_any(const char *name, EVP_CIPHER **cipherp);
38*b077aed3SPierre Pronchery int opt_cipher_silent(const char *name, EVP_CIPHER **cipherp);
39*b077aed3SPierre Pronchery int opt_md(const char *name, EVP_MD **mdp);
40*b077aed3SPierre Pronchery
41*b077aed3SPierre Pronchery int opt_int(const char *value, int *result);
42*b077aed3SPierre Pronchery int opt_int_arg(void);
43*b077aed3SPierre Pronchery int opt_long(const char *value, long *result);
44*b077aed3SPierre Pronchery int opt_ulong(const char *value, unsigned long *result);
45*b077aed3SPierre Pronchery int opt_intmax(const char *value, intmax_t *result);
46*b077aed3SPierre Pronchery int opt_uintmax(const char *value, uintmax_t *result);
47*b077aed3SPierre Pronchery
48*b077aed3SPierre Pronchery int opt_format(const char *s, unsigned long flags, int *result);
49*b077aed3SPierre Pronchery int opt_isdir(const char *name);
50*b077aed3SPierre Pronchery int opt_string(const char *name, const char **options);
51*b077aed3SPierre Pronchery int opt_pair(const char *name, const OPT_PAIR* pairs, int *result);
52*b077aed3SPierre Pronchery
53*b077aed3SPierre Pronchery int opt_num_rest(void);
54*b077aed3SPierre Pronchery char **opt_rest(void);
55*b077aed3SPierre Pronchery
56*b077aed3SPierre Pronchery int opt_legacy_okay(void);
57*b077aed3SPierre Pronchery
58*b077aed3SPierre Pronchery=head1 DESCRIPTION
59*b077aed3SPierre Pronchery
60*b077aed3SPierre ProncheryThe functions on this page provide a common set of option-parsing for
61*b077aed3SPierre Proncherythe OpenSSL command and the internal test programs.
62*b077aed3SPierre ProncheryIt is intended to be used like the standard getopt(3) routine, except
63*b077aed3SPierre Proncherythat multi-character flag names are supported, and a variety of parsing
64*b077aed3SPierre Proncheryand other utility functions are also provided.
65*b077aed3SPierre Pronchery
66*b077aed3SPierre ProncheryPrograms that use this should make sure to set the appropriate C<-I>
67*b077aed3SPierre Proncheryflag.
68*b077aed3SPierre Pronchery
69*b077aed3SPierre ProncheryThese routines expect a global B<BIO> named B<bio_err> to point to
70*b077aed3SPierre Proncherythe equivalent of B<stderr>. This is already done in the OpenSSL
71*b077aed3SPierre Proncheryapplication.
72*b077aed3SPierre Pronchery
73*b077aed3SPierre Pronchery=head2 Data Types
74*b077aed3SPierre Pronchery
75*b077aed3SPierre ProncheryEach program should define, near the main() routine, an enumeration
76*b077aed3SPierre Proncherythat is the set of options the program accepts. For example:
77*b077aed3SPierre Pronchery
78*b077aed3SPierre Pronchery    typedef enum OPTION_choice {
79*b077aed3SPierre Pronchery        OPT_COMMON,
80*b077aed3SPierre Pronchery        OPT_YES, OPT_NAME, OPT_COUNT, OPT_OFILE,
81*b077aed3SPierre Pronchery        ...
82*b077aed3SPierre Pronchery    } OPTION_CHOICE;
83*b077aed3SPierre Pronchery
84*b077aed3SPierre ProncheryThe first two lines must appear exactly as shown.
85*b077aed3SPierre ProncheryOPT_COMMON is a macro that expands to C<OPT_ERR = -1, OPT_EOF = 0, OPT_HELP>.
86*b077aed3SPierre ProncheryIn addition to defining symbolic names for the constants that opt_next()
87*b077aed3SPierre Proncheryreturns, it also helps guarantee that every command has a C<-help> option.
88*b077aed3SPierre ProncheryThe third line is a sample
89*b077aed3SPierre Proncheryset of flags, and the closing C<typedef> name is used for error-checking
90*b077aed3SPierre Proncheryas discussed below.
91*b077aed3SPierre ProncheryBy declaring the variable as an C<OPTION_CHOICE>, with the right warning
92*b077aed3SPierre Proncheryflags, the compiler could check that all specified options are handled.
93*b077aed3SPierre Pronchery
94*b077aed3SPierre ProncheryThe B<OPTIONS> C<typedef> specifies an option: what type of argument
95*b077aed3SPierre Proncheryit takes (if any), and an optional "help" string.  It is a C<struct>
96*b077aed3SPierre Proncherycontaining these fields:
97*b077aed3SPierre Pronchery
98*b077aed3SPierre Pronchery    const char *name;
99*b077aed3SPierre Pronchery    int retval;
100*b077aed3SPierre Pronchery    int valtype;
101*b077aed3SPierre Pronchery    const char *helpstr;
102*b077aed3SPierre Pronchery
103*b077aed3SPierre ProncheryThe B<name> is the name of the option that the user would type. Options
104*b077aed3SPierre Proncheryare words prefaced with a minus sign. If the user uses two minus signs,
105*b077aed3SPierre Proncherythis is also accepted for compatibility with other GNU software. Some
106*b077aed3SPierre Proncherynames are special, and are described below.
107*b077aed3SPierre Pronchery
108*b077aed3SPierre ProncheryThe B<retval> is the value to return if the option is found. It should be
109*b077aed3SPierre Proncheryone of the choices in the enumeration above.
110*b077aed3SPierre Pronchery
111*b077aed3SPierre ProncheryThe B<valtype> defines what the option's parameter must be. It should
112*b077aed3SPierre Proncherybe chosen from the following set:
113*b077aed3SPierre Pronchery
114*b077aed3SPierre Pronchery    \0  No value
115*b077aed3SPierre Pronchery    '-' No value
116*b077aed3SPierre Pronchery    's' A text string
117*b077aed3SPierre Pronchery    '/' A directory
118*b077aed3SPierre Pronchery    '<' Name of file to open for input
119*b077aed3SPierre Pronchery    '>' Name of file to open for output
120*b077aed3SPierre Pronchery    'n' A signed number that fits in the C<int> type
121*b077aed3SPierre Pronchery    'p' A positive number that fits in the C<int> type
122*b077aed3SPierre Pronchery    'N' A nonnegative number that fits in the C<int> type
123*b077aed3SPierre Pronchery    'M' A signed number that fits in the C<intmax_t> type
124*b077aed3SPierre Pronchery    'U' An unsigned number that fits in the C<uintmax_t> type
125*b077aed3SPierre Pronchery    'l' A signed number that fits in the C<long> type
126*b077aed3SPierre Pronchery    'u' An unsigned number that fits in the C<unsigned long> type
127*b077aed3SPierre Pronchery    'c' File in PEM, DER, or S/MIME format
128*b077aed3SPierre Pronchery    'F' A file in PEM or DER format
129*b077aed3SPierre Pronchery    'E' Like 'F' but also allows ENGINE
130*b077aed3SPierre Pronchery    'f' Any file format
131*b077aed3SPierre Pronchery
132*b077aed3SPierre ProncheryThe B<helpstr> is what to display when the user uses the help option,
133*b077aed3SPierre Proncherywhich should be C<"help">.
134*b077aed3SPierre Pronchery
135*b077aed3SPierre ProncheryA program should declare its options right after the enumeration,
136*b077aed3SPierre Proncheryand should follow the ordering of the enumeration as this helps
137*b077aed3SPierre Proncheryreadability and maintainability:
138*b077aed3SPierre Pronchery
139*b077aed3SPierre Pronchery    static OPTIONS my_options[] = {
140*b077aed3SPierre Pronchery        {"help", OPT_HELP, '-', "Display this summary"},
141*b077aed3SPierre Pronchery        {"yes", OPT_YES, '-', "Print an affirmative reply"},
142*b077aed3SPierre Pronchery        {"count", OPT_COUNT, 'p', "Repeat count"},
143*b077aed3SPierre Pronchery        {"output" OPT_OFILE, '>', "Output file; default is stdout"},
144*b077aed3SPierre Pronchery        {NULL}
145*b077aed3SPierre Pronchery    };
146*b077aed3SPierre Pronchery
147*b077aed3SPierre ProncheryNote that the B<OPT_HELP> option is explicitly listed, and the list ends with
148*b077aed3SPierre Proncheryan entry of all-null's. The other two special options, B<OPT_ERR> and B<OPT_EOF>
149*b077aed3SPierre Proncheryshould not appear in the array.
150*b077aed3SPierre Pronchery
151*b077aed3SPierre ProncheryIf the help string is too long to fit into one line, it may be continued
152*b077aed3SPierre Proncheryon multiple lines; each entry should use B<OPT_MORE_STR>, like this:
153*b077aed3SPierre Pronchery
154*b077aed3SPierre Pronchery        {"output" OPT_OFILE, '>', "Output file; default is stdout"},
155*b077aed3SPierre Pronchery        {OPT_MORE_STR, 0, 0,
156*b077aed3SPierre Pronchery         "This flag is not really needed on Unix systems"},
157*b077aed3SPierre Pronchery        {OPT_MORE_STR, 0, 0,
158*b077aed3SPierre Pronchery         "(Unix and descendents for ths win!)"}
159*b077aed3SPierre Pronchery
160*b077aed3SPierre ProncheryEach subsequent line will be indented the correct amount.
161*b077aed3SPierre Pronchery
162*b077aed3SPierre ProncheryBy default, the help display will include a standard prolog:
163*b077aed3SPierre Pronchery
164*b077aed3SPierre Pronchery    Usage: PROGRAM [options]
165*b077aed3SPierre Pronchery    Valid options are:
166*b077aed3SPierre Pronchery    ...detailed list of options...
167*b077aed3SPierre Pronchery
168*b077aed3SPierre ProncherySometimes there are parameters that should appear in the synopsis.
169*b077aed3SPierre ProncheryUse B<OPT_HELP_STR> as the first entry in your array:
170*b077aed3SPierre Pronchery
171*b077aed3SPierre Pronchery    {OPT_HELP_STR, 1, '-', Usage: %s [options] [text...]\n"}
172*b077aed3SPierre Pronchery
173*b077aed3SPierre ProncheryThe B<retval> and B<valtype> are ignored, and the B<helpstr> should
174*b077aed3SPierre Proncheryfollow the general construction as shown. The C<%s> will get the program
175*b077aed3SPierre Proncheryname.
176*b077aed3SPierre Pronchery
177*b077aed3SPierre ProncheryIf a command has a large set of options, it can be useful to break them
178*b077aed3SPierre Proncheryinto sections.  Use the macro B<OPT_SECTION> or B<OPT_SECTION_STR>
179*b077aed3SPierre Proncheryto indicate this. The two lines below are equivalent:
180*b077aed3SPierre Pronchery
181*b077aed3SPierre Pronchery    OPT_SECTION("Validation"),
182*b077aed3SPierre Pronchery    {OPT_SECTION_STR, 1, '-', "Validation options:\n"},
183*b077aed3SPierre Pronchery
184*b077aed3SPierre ProncheryIn addition to providing help about options, you can provide a description
185*b077aed3SPierre Proncheryof the parameters a command takes. These should appear at the end of
186*b077aed3SPierre Proncherythe options and are indicated by using B<OPT_PARAM_STR> or the
187*b077aed3SPierre ProncheryB<OPT_PARAMETERS> macro:
188*b077aed3SPierre Pronchery
189*b077aed3SPierre Pronchery    OPT_PARAMETERS()
190*b077aed3SPierre Pronchery    {OPT_PARAM_STR, 1, '-', "Parameters:\n"}
191*b077aed3SPierre Pronchery
192*b077aed3SPierre ProncheryEvery "option" after after this should contain the parameter and
193*b077aed3SPierre Proncherythe help string:
194*b077aed3SPierre Pronchery
195*b077aed3SPierre Pronchery    {"text", 0, 0, "Words to display (optional)"},
196*b077aed3SPierre Pronchery
197*b077aed3SPierre Pronchery=head2 Functions
198*b077aed3SPierre Pronchery
199*b077aed3SPierre ProncheryThe opt_init() function takes the I<argc> and I<argv> arguments given to main()
200*b077aed3SPierre Proncheryand a pointer I<o> to the list of options. It returns the simple program
201*b077aed3SPierre Proncheryname, as defined by opt_progname().
202*b077aed3SPierre Pronchery
203*b077aed3SPierre ProncheryThe opt_progname() function takes the full pathname C<argv[0]> in its I<arg0>
204*b077aed3SPierre Proncheryparameter and returns
205*b077aed3SPierre Proncherythe simple short name of the executable, to be used for error messages and
206*b077aed3SPierre Proncherythe like.
207*b077aed3SPierre Pronchery
208*b077aed3SPierre ProncheryThe opt_appname() function takes in its I<argv0> parameter
209*b077aed3SPierre Proncherythe "application" name (such
210*b077aed3SPierre Proncheryas the specific command from L<openssl(1)> and appends it to the program
211*b077aed3SPierre Proncheryname. This function should only be called once.
212*b077aed3SPierre Pronchery
213*b077aed3SPierre ProncheryThe opt_getprog() function returns the value set by opt_appname().
214*b077aed3SPierre Pronchery
215*b077aed3SPierre ProncheryThe opt_help() function takes a list of option definitions and prints a
216*b077aed3SPierre Proncherynicely-formatted output.
217*b077aed3SPierre Pronchery
218*b077aed3SPierre ProncheryThe opt_begin() function, which is called automatically by opt_init(),
219*b077aed3SPierre Proncherycan be used to reset the option parsing loop.
220*b077aed3SPierre Pronchery
221*b077aed3SPierre ProncheryThe opt_next() function is called, once opt_init() has been called,
222*b077aed3SPierre Proncheryin a loop to fetch each option in turn. It returns -1, or B<OPT_EOF> when the
223*b077aed3SPierre Proncheryend of arguments has been reached. This is typically done like this:
224*b077aed3SPierre Pronchery
225*b077aed3SPierre Pronchery    prog = opt_init(argc, argv, my_options);
226*b077aed3SPierre Pronchery    while ((o = opt_next()) != OPT_EOF) {
227*b077aed3SPierre Pronchery        switch (o) {
228*b077aed3SPierre Pronchery        case OPT_EOF:
229*b077aed3SPierre Pronchery        case OPT_ERR:
230*b077aed3SPierre Pronchery    opthelp:
231*b077aed3SPierre Pronchery            fprintf(stderr, "%s: Use -help for summary\n", prog);
232*b077aed3SPierre Pronchery            exit(1);
233*b077aed3SPierre Pronchery        case OPT_HELP:
234*b077aed3SPierre Pronchery            opt_help(my_options);
235*b077aed3SPierre Pronchery            exit(0);
236*b077aed3SPierre Pronchery        ...other options...
237*b077aed3SPierre Pronchery        }
238*b077aed3SPierre Pronchery    }
239*b077aed3SPierre Pronchery
240*b077aed3SPierre ProncheryWithin the option parsing loop, the following functions may be called.
241*b077aed3SPierre Pronchery
242*b077aed3SPierre ProncheryThe opt_flag() function returns the most recent option name
243*b077aed3SPierre Proncheryincluding the preceding C<->.
244*b077aed3SPierre Pronchery
245*b077aed3SPierre ProncheryThe opt_arg() function returns the option's argument value, if there is one.
246*b077aed3SPierre Pronchery
247*b077aed3SPierre ProncheryThe opt_unknown() function returns the unknown option.
248*b077aed3SPierre ProncheryIn an option list, there can be at most one option with the empty string.
249*b077aed3SPierre ProncheryThis is a "wildcard" or "unknown" option. For example, it allows an
250*b077aed3SPierre Proncheryoption to be be taken as digest algorithm, like C<-sha1>. The function
251*b077aed3SPierre Proncheryopt_md() takes the specified I<name> and fills in the digest into I<mdp>.
252*b077aed3SPierre ProncheryThe functions opt_cipher(), opt_cipher_any() and opt_cipher_silent()
253*b077aed3SPierre Proncheryeach takes the specified I<name> and fills in the cipher into I<cipherp>.
254*b077aed3SPierre ProncheryThe function opt_cipher() only accepts ciphers which are not
255*b077aed3SPierre ProncheryAEAD and are not using XTS mode.  The functions opt_cipher_any() and
256*b077aed3SPierre Proncheryopt_cipher_silent() accept any cipher, the latter not emitting an error
257*b077aed3SPierre Proncheryif the cipher is not located.
258*b077aed3SPierre Pronchery
259*b077aed3SPierre ProncheryThere are a several useful functions for parsing numbers.  These are
260*b077aed3SPierre Proncheryopt_int(), opt_long(), opt_ulong(), opt_intmax(), and opt_uintmax().  They all
261*b077aed3SPierre Proncherytake C<0x> to mean hexadecimal and C<0> to mean octal, and will do the
262*b077aed3SPierre Proncherynecessary range-checking. They return 1 if successful and fill in the
263*b077aed3SPierre ProncheryC<result> pointer with the value, or 0 on error. Note that opt_next()
264*b077aed3SPierre Proncherywill also do range-check on the argument if the appropriate B<valtype>
265*b077aed3SPierre Proncheryfield is specified for the option. This means that error-checking inside
266*b077aed3SPierre Proncherythe C<switch> C<case> can often be elided.
267*b077aed3SPierre Pronchery
268*b077aed3SPierre ProncheryThe opt_int_arg() function is a convenience abbreviation to opt_int().
269*b077aed3SPierre ProncheryIt parses and returns an integer, assuming its range has been checked before.
270*b077aed3SPierre Pronchery
271*b077aed3SPierre ProncheryThe opt_format() function takes a string value,
272*b077aed3SPierre Proncherysuch as used with the B<-informat> or similar option, and fills
273*b077aed3SPierre Proncherythe value from the constants in F<fmt.h> file.
274*b077aed3SPierre Pronchery
275*b077aed3SPierre ProncheryThe opt_isdir() function returns 1 if the specified I<name> is
276*b077aed3SPierre Proncherya directory, or 0 if not.
277*b077aed3SPierre Pronchery
278*b077aed3SPierre ProncheryThe opt_string() function checks that I<name> appears in the
279*b077aed3SPierre ProncheryNULL-terminated array of strings. It returns 1 if found,
280*b077aed3SPierre Proncheryor prints a diagnostic and returns 0 if not.
281*b077aed3SPierre Pronchery
282*b077aed3SPierre ProncheryThe opt_pair() function takes a list of I<pairs>, each of which
283*b077aed3SPierre Proncheryhas a text name and an integer. The specified I<name> is
284*b077aed3SPierre Proncheryfound on the list, it puts the index in I<*result>, and returns
285*b077aed3SPierre Pronchery1. If not found, it returns 0.
286*b077aed3SPierre Pronchery
287*b077aed3SPierre ProncheryThe following functions can be used after processing all the options.
288*b077aed3SPierre Pronchery
289*b077aed3SPierre ProncheryThe opt_num_rest() function returns what is left.
290*b077aed3SPierre Pronchery
291*b077aed3SPierre ProncheryThe opt_rest() function returns a pointer to the first non-option.
292*b077aed3SPierre ProncheryIf there were no parameters, it will point to the NULL that is
293*b077aed3SPierre Proncheryat the end of the standard I<argv> array.
294*b077aed3SPierre Pronchery
295*b077aed3SPierre ProncheryThe opt_legacy_okay() function returns true if no options have been
296*b077aed3SPierre Proncheryspecified that would preclude using legacy code paths.  Currently,
297*b077aed3SPierre Proncherythe various provider options preclude legacy operation.  This means,
298*b077aed3SPierre Proncheryfor example, that specifying both B<-provider> and B<-engine> in the
299*b077aed3SPierre Proncherysame command line will not work as expected.
300*b077aed3SPierre Pronchery
301*b077aed3SPierre Pronchery=head2 Common Options
302*b077aed3SPierre Pronchery
303*b077aed3SPierre ProncheryThere are a few groups of options that are common to many OpenSSL programs.
304*b077aed3SPierre ProncheryThese are handled with sets of macros that define common option names
305*b077aed3SPierre Proncheryand common code to handle them.  The categories are identified by a
306*b077aed3SPierre Proncheryletter:
307*b077aed3SPierre Pronchery
308*b077aed3SPierre Pronchery    V   Validation
309*b077aed3SPierre Pronchery    X   Extended certificate
310*b077aed3SPierre Pronchery    S   TLS/SSL
311*b077aed3SPierre Pronchery    R   Random state
312*b077aed3SPierre Pronchery
313*b077aed3SPierre ProncheryThe B<OPT_x_ENUM> macro is used to define the numeration values, where B<x>
314*b077aed3SPierre Proncheryis one of the letters above.  The B<OPT_x_OPTIONS> macro is used to
315*b077aed3SPierre Proncherylist the set of common options, and the B<OPT_x_CASES> is used in
316*b077aed3SPierre Proncherythe C<switch> statement.
317*b077aed3SPierre Pronchery
318*b077aed3SPierre ProncheryThe common options are used throughout the sources for the OpenSSL commands.
319*b077aed3SPierre ProncheryThey are also used with common descriptions when generating the
320*b077aed3SPierre Proncherymanpages, in the file F<doc/perlvars.pm>, which follow a similar naming
321*b077aed3SPierre Proncheryconvention.
322*b077aed3SPierre Pronchery
323*b077aed3SPierre Pronchery=head1 RETURN VALUES
324*b077aed3SPierre Pronchery
325*b077aed3SPierre ProncheryDetailed above.
326*b077aed3SPierre Pronchery
327*b077aed3SPierre Pronchery=head1 EXAMPLES
328*b077aed3SPierre Pronchery
329*b077aed3SPierre ProncheryThe best examples can be found in sources for the commands in the F<apps>
330*b077aed3SPierre Proncherydirectory of the source tree.
331*b077aed3SPierre ProncheryA notable exception is F<apps/cmp.c> which uses this API, but does
332*b077aed3SPierre Proncherythings very differently.
333*b077aed3SPierre Pronchery
334*b077aed3SPierre Pronchery=head1 COPYRIGHT
335*b077aed3SPierre Pronchery
336*b077aed3SPierre ProncheryCopyright 2021 The OpenSSL Project Authors. All Rights Reserved.
337*b077aed3SPierre Pronchery
338*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use this
339*b077aed3SPierre Proncheryfile except in compliance with the License.  You can obtain a copy in the file
340*b077aed3SPierre ProncheryLICENSE in the source distribution or at
341*b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>.
342*b077aed3SPierre Pronchery
343*b077aed3SPierre Pronchery=cut
344