]> git.ipfire.org Git - thirdparty/openssl.git/blame - apps/apps.h
Remove JPAKE
[thirdparty/openssl.git] / apps / apps.h
CommitLineData
58964a49 1/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
2 * All rights reserved.
3 *
4 * This package is an SSL implementation written
5 * by Eric Young (eay@cryptsoft.com).
6 * The implementation was written so as to conform with Netscapes SSL.
0f113f3e 7 *
d02b48c6
RE
8 * This library is free for commercial and non-commercial use as long as
9 * the following conditions are aheared to. The following conditions
10 * apply to all code found in this distribution, be it the RC4, RSA,
11 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12 * included with this distribution is covered by the same copyright terms
13 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
0f113f3e 14 *
d02b48c6
RE
15 * Copyright remains Eric Young's, and as such any Copyright notices in
16 * the code are not to be removed.
17 * If this package is used in a product, Eric Young should be given attribution
18 * as the author of the parts of the library used.
19 * This can be in the form of a textual message at program startup or
20 * in documentation (online or textual) provided with the package.
0f113f3e 21 *
d02b48c6
RE
22 * Redistribution and use in source and binary forms, with or without
23 * modification, are permitted provided that the following conditions
24 * are met:
25 * 1. Redistributions of source code must retain the copyright
26 * notice, this list of conditions and the following disclaimer.
27 * 2. Redistributions in binary form must reproduce the above copyright
28 * notice, this list of conditions and the following disclaimer in the
29 * documentation and/or other materials provided with the distribution.
30 * 3. All advertising materials mentioning features or use of this software
31 * must display the following acknowledgement:
32 * "This product includes cryptographic software written by
33 * Eric Young (eay@cryptsoft.com)"
34 * The word 'cryptographic' can be left out if the rouines from the library
35 * being used are not cryptographic related :-).
0f113f3e 36 * 4. If you include any Windows specific code (or a derivative thereof) from
d02b48c6
RE
37 * the apps directory (application code) you must include an acknowledgement:
38 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
0f113f3e 39 *
d02b48c6
RE
40 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50 * SUCH DAMAGE.
0f113f3e 51 *
d02b48c6
RE
52 * The licence and distribution terms for any publically available version or
53 * derivative of this code cannot be changed. i.e. this code cannot simply be
54 * copied and put under another distribution licence
55 * [including the GNU Public Licence.]
56 */
a661b653
BM
57/* ====================================================================
58 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
59 *
60 * Redistribution and use in source and binary forms, with or without
61 * modification, are permitted provided that the following conditions
62 * are met:
63 *
64 * 1. Redistributions of source code must retain the above copyright
0f113f3e 65 * notice, this list of conditions and the following disclaimer.
a661b653
BM
66 *
67 * 2. Redistributions in binary form must reproduce the above copyright
68 * notice, this list of conditions and the following disclaimer in
69 * the documentation and/or other materials provided with the
70 * distribution.
71 *
72 * 3. All advertising materials mentioning features or use of this
73 * software must display the following acknowledgment:
74 * "This product includes software developed by the OpenSSL Project
75 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
76 *
77 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
78 * endorse or promote products derived from this software without
79 * prior written permission. For written permission, please contact
80 * openssl-core@openssl.org.
81 *
82 * 5. Products derived from this software may not be called "OpenSSL"
83 * nor may "OpenSSL" appear in their names without prior written
84 * permission of the OpenSSL Project.
85 *
86 * 6. Redistributions of any form whatsoever must retain the following
87 * acknowledgment:
88 * "This product includes software developed by the OpenSSL Project
89 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
90 *
91 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
92 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
93 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
94 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
95 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
96 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
97 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
98 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
99 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
100 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
101 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
102 * OF THE POSSIBILITY OF SUCH DAMAGE.
103 * ====================================================================
104 *
105 * This product includes cryptographic software written by Eric Young
106 * (eay@cryptsoft.com). This product includes software written by Tim
107 * Hudson (tjh@cryptsoft.com).
108 *
109 */
d02b48c6
RE
110
111#ifndef HEADER_APPS_H
0f113f3e
MC
112# define HEADER_APPS_H
113
114# include "e_os.h"
3b061a00 115# include <assert.h>
0f113f3e 116
568b8020 117# include <openssl/e_os2.h>
03f887ca 118# include <openssl/ossl_typ.h>
0f113f3e
MC
119# include <openssl/bio.h>
120# include <openssl/x509.h>
121# include <openssl/lhash.h>
122# include <openssl/conf.h>
123# include <openssl/txt_db.h>
124# ifndef OPENSSL_NO_ENGINE
125# include <openssl/engine.h>
126# endif
127# ifndef OPENSSL_NO_OCSP
128# include <openssl/ocsp.h>
129# endif
130# include <openssl/ossl_typ.h>
7e1b7485
RS
131# ifndef OPENSSL_SYS_NETWARE
132# include <signal.h>
133# endif
d02b48c6 134
7e1b7485
RS
135# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE)
136# define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
137# else
138# define openssl_fdset(a,b) FD_SET(a, b)
139# endif
140
ea5e0c1c
VD
141# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \
142 defined(INTMAX_MAX) && defined(UINTMAX_MAX)
143int opt_imax(const char *value, intmax_t *result);
144int opt_umax(const char *value, uintmax_t *result);
145# else
146# define opt_imax opt_long
147# define opt_umax opt_ulong
33254e1c
RL
148# define intmax_t long
149# define uintmax_t unsigned long
ea5e0c1c
VD
150# endif
151
18295f0c
RL
152/*
153 * quick macro when you need to pass an unsigned char instead of a char.
154 * this is true for some implementations of the is*() functions, for
155 * example.
156 */
157#define _UC(c) ((unsigned char)(c))
158
7e1b7485
RS
159int app_RAND_load_file(const char *file, int dont_warn);
160int app_RAND_write_file(const char *file);
0f113f3e
MC
161/*
162 * When `file' is NULL, use defaults. `bio_e' is for error messages.
163 */
a31011e8
BM
164void app_RAND_allow_write_file(void);
165long app_RAND_load_files(char *file); /* `file' is a list of files to read,
166 * separated by LIST_SEPARATOR_CHAR
167 * (see e_os.h). The string is
168 * destroyed! */
169
d02b48c6 170extern char *default_config_file;
7e1b7485
RS
171extern BIO *bio_in;
172extern BIO *bio_out;
d02b48c6 173extern BIO *bio_err;
a60994df
RL
174BIO *dup_bio_in(int format);
175BIO *dup_bio_out(int format);
bdd58d98
RL
176BIO *bio_open_owner(const char *filename, int format, int private);
177BIO *bio_open_default(const char *filename, char mode, int format);
178BIO *bio_open_default_quiet(const char *filename, char mode, int format);
296f54ee
RL
179CONF *app_load_config(const char *filename);
180CONF *app_load_config_quiet(const char *filename);
181int app_load_modules(const CONF *config);
7e1b7485 182void unbuffer(FILE *fp);
e1b9840e 183void wait_for_async(SSL *s);
d02b48c6 184
7e1b7485
RS
185/*
186 * Common verification options.
187 */
188# define OPT_V_ENUM \
189 OPT_V__FIRST=2000, \
190 OPT_V_POLICY, OPT_V_PURPOSE, OPT_V_VERIFY_NAME, OPT_V_VERIFY_DEPTH, \
191 OPT_V_ATTIME, OPT_V_VERIFY_HOSTNAME, OPT_V_VERIFY_EMAIL, \
192 OPT_V_VERIFY_IP, OPT_V_IGNORE_CRITICAL, OPT_V_ISSUER_CHECKS, \
193 OPT_V_CRL_CHECK, OPT_V_CRL_CHECK_ALL, OPT_V_POLICY_CHECK, \
194 OPT_V_EXPLICIT_POLICY, OPT_V_INHIBIT_ANY, OPT_V_INHIBIT_MAP, \
195 OPT_V_X509_STRICT, OPT_V_EXTENDED_CRL, OPT_V_USE_DELTAS, \
196 OPT_V_POLICY_PRINT, OPT_V_CHECK_SS_SIG, OPT_V_TRUSTED_FIRST, \
197 OPT_V_SUITEB_128_ONLY, OPT_V_SUITEB_128, OPT_V_SUITEB_192, \
d35ff2c0 198 OPT_V_PARTIAL_CHAIN, OPT_V_NO_ALT_CHAINS, OPT_V_NO_CHECK_TIME, \
7e1b7485
RS
199 OPT_V__LAST
200
201# define OPT_V_OPTIONS \
32eabe34
MR
202 { "policy", OPT_V_POLICY, 's', "adds policy to the acceptable policy set"}, \
203 { "purpose", OPT_V_PURPOSE, 's', \
5e136d7a
VD
204 "certificate chain purpose"}, \
205 { "verify_name", OPT_V_VERIFY_NAME, 's', "verification policy name"}, \
32eabe34 206 { "verify_depth", OPT_V_VERIFY_DEPTH, 'p', \
5e136d7a
VD
207 "chain depth limit"}, \
208 { "attime", OPT_V_ATTIME, 'M', "verification epoch time" }, \
32eabe34 209 { "verify_hostname", OPT_V_VERIFY_HOSTNAME, 's', \
5e136d7a 210 "expected peer hostname" }, \
32eabe34 211 { "verify_email", OPT_V_VERIFY_EMAIL, 's', \
5e136d7a 212 "expected peer email" }, \
32eabe34 213 { "verify_ip", OPT_V_VERIFY_IP, 's', \
5e136d7a 214 "expected peer IP address" }, \
32eabe34 215 { "ignore_critical", OPT_V_IGNORE_CRITICAL, '-', \
5e136d7a 216 "permit unhandled critical extensions"}, \
d33def66 217 { "issuer_checks", OPT_V_ISSUER_CHECKS, '-', "(deprecated)"}, \
5e136d7a
VD
218 { "crl_check", OPT_V_CRL_CHECK, '-', "check leaf certificate revocation" }, \
219 { "crl_check_all", OPT_V_CRL_CHECK_ALL, '-', "check full chain revocation" }, \
220 { "policy_check", OPT_V_POLICY_CHECK, '-', "perform rfc5280 policy checks"}, \
221 { "explicit_policy", OPT_V_EXPLICIT_POLICY, '-', \
222 "set policy variable require-explicit-policy"}, \
223 { "inhibit_any", OPT_V_INHIBIT_ANY, '-', \
224 "set policy variable inihibit-any-policy"}, \
225 { "inhibit_map", OPT_V_INHIBIT_MAP, '-', \
226 "set policy variable inihibit-policy-mapping"}, \
32eabe34 227 { "x509_strict", OPT_V_X509_STRICT, '-', \
5e136d7a 228 "disable certificate compatibility work-arounds"}, \
32eabe34 229 { "extended_crl", OPT_V_EXTENDED_CRL, '-', \
5e136d7a 230 "enable extended CRL features"}, \
32eabe34 231 { "use_deltas", OPT_V_USE_DELTAS, '-', \
5e136d7a
VD
232 "use delta CRLs"}, \
233 { "policy_print", OPT_V_POLICY_PRINT, '-', \
234 "print policy processing diagnostics"}, \
32eabe34 235 { "check_ss_sig", OPT_V_CHECK_SS_SIG, '-', \
5e136d7a 236 "check root CA self-signatures"}, \
32eabe34 237 { "trusted_first", OPT_V_TRUSTED_FIRST, '-', \
5e136d7a
VD
238 "search trust store first (default)" }, \
239 { "suiteB_128_only", OPT_V_SUITEB_128_ONLY, '-', "Suite B 128-bit-only mode"}, \
32eabe34 240 { "suiteB_128", OPT_V_SUITEB_128, '-', \
5e136d7a
VD
241 "Suite B 128-bit mode allowing 192-bit algorithms"}, \
242 { "suiteB_192", OPT_V_SUITEB_192, '-', "Suite B 192-bit-only mode" }, \
32eabe34 243 { "partial_chain", OPT_V_PARTIAL_CHAIN, '-', \
5e136d7a
VD
244 "accept chains anchored by intermediate trust-store CAs"}, \
245 { "no_alt_chains", OPT_V_NO_ALT_CHAINS, '-', "(deprecated)" }, \
246 { "no_check_time", OPT_V_NO_CHECK_TIME, '-', "ignore certificate validity time" }
7e1b7485
RS
247
248# define OPT_V_CASES \
249 OPT_V__FIRST: case OPT_V__LAST: break; \
250 case OPT_V_POLICY: \
251 case OPT_V_PURPOSE: \
252 case OPT_V_VERIFY_NAME: \
253 case OPT_V_VERIFY_DEPTH: \
254 case OPT_V_ATTIME: \
255 case OPT_V_VERIFY_HOSTNAME: \
256 case OPT_V_VERIFY_EMAIL: \
257 case OPT_V_VERIFY_IP: \
258 case OPT_V_IGNORE_CRITICAL: \
259 case OPT_V_ISSUER_CHECKS: \
260 case OPT_V_CRL_CHECK: \
261 case OPT_V_CRL_CHECK_ALL: \
262 case OPT_V_POLICY_CHECK: \
263 case OPT_V_EXPLICIT_POLICY: \
264 case OPT_V_INHIBIT_ANY: \
265 case OPT_V_INHIBIT_MAP: \
266 case OPT_V_X509_STRICT: \
267 case OPT_V_EXTENDED_CRL: \
268 case OPT_V_USE_DELTAS: \
269 case OPT_V_POLICY_PRINT: \
270 case OPT_V_CHECK_SS_SIG: \
271 case OPT_V_TRUSTED_FIRST: \
272 case OPT_V_SUITEB_128_ONLY: \
273 case OPT_V_SUITEB_128: \
274 case OPT_V_SUITEB_192: \
275 case OPT_V_PARTIAL_CHAIN: \
d35ff2c0
DW
276 case OPT_V_NO_ALT_CHAINS: \
277 case OPT_V_NO_CHECK_TIME
d02b48c6 278
7e1b7485
RS
279/*
280 * Common "extended"? options.
281 */
282# define OPT_X_ENUM \
283 OPT_X__FIRST=1000, \
284 OPT_X_KEY, OPT_X_CERT, OPT_X_CHAIN, OPT_X_CHAIN_BUILD, \
285 OPT_X_CERTFORM, OPT_X_KEYFORM, \
286 OPT_X__LAST
287
288# define OPT_X_OPTIONS \
32eabe34
MR
289 { "xkey", OPT_X_KEY, '<', "key for Extended certificates"}, \
290 { "xcert", OPT_X_CERT, '<', "cert for Extended certificates"}, \
291 { "xchain", OPT_X_CHAIN, '<', "chain for Extended certificates"}, \
292 { "xchain_build", OPT_X_CHAIN_BUILD, '-', \
293 "build certificate chain for the extended certificates"}, \
294 { "xcertform", OPT_X_CERTFORM, 'F', \
295 "format of Extended certificate (PEM or DER) PEM default " }, \
296 { "xkeyform", OPT_X_KEYFORM, 'F', \
297 "format of Exnteded certificate's key (PEM or DER) PEM default"}
7e1b7485
RS
298
299# define OPT_X_CASES \
300 OPT_X__FIRST: case OPT_X__LAST: break; \
301 case OPT_X_KEY: \
302 case OPT_X_CERT: \
303 case OPT_X_CHAIN: \
304 case OPT_X_CHAIN_BUILD: \
305 case OPT_X_CERTFORM: \
306 case OPT_X_KEYFORM
f10f4447 307
7e1b7485
RS
308/*
309 * Common SSL options.
310 * Any changes here must be coordinated with ../ssl/ssl_conf.c
311 */
312# define OPT_S_ENUM \
313 OPT_S__FIRST=3000, \
314 OPT_S_NOSSL3, OPT_S_NOTLS1, OPT_S_NOTLS1_1, OPT_S_NOTLS1_2, \
32eabe34 315 OPT_S_BUGS, OPT_S_NO_COMP, OPT_S_NOTICKET, \
7e1b7485
RS
316 OPT_S_SERVERPREF, OPT_S_LEGACYRENEG, OPT_S_LEGACYCONN, \
317 OPT_S_ONRESUMP, OPT_S_NOLEGACYCONN, OPT_S_STRICT, OPT_S_SIGALGS, \
318 OPT_S_CLIENTSIGALGS, OPT_S_CURVES, OPT_S_NAMEDCURVE, OPT_S_CIPHER, \
cc5a9ba4 319 OPT_S_DHPARAM, OPT_S_DEBUGBROKE, OPT_S_COMP, \
7e1b7485
RS
320 OPT_S__LAST
321
322# define OPT_S_OPTIONS \
32eabe34
MR
323 {"no_ssl3", OPT_S_NOSSL3, '-',"Just disable SSLv3" }, \
324 {"no_tls1", OPT_S_NOTLS1, '-', "Just disable TLSv1"}, \
325 {"no_tls1_1", OPT_S_NOTLS1_1, '-', "Just disable TLSv1.1" }, \
326 {"no_tls1_2", OPT_S_NOTLS1_2, '-', "Just disable TLSv1.2"}, \
327 {"bugs", OPT_S_BUGS, '-', "Turn on SSL bug compatibility"}, \
cc5a9ba4 328 {"no_comp", OPT_S_NO_COMP, '-', "Disable SSL/TLS compression (default)" }, \
dc5744cb 329 {"comp", OPT_S_COMP, '-', "Use SSL/TLS-level compression" }, \
32eabe34
MR
330 {"no_ticket", OPT_S_NOTICKET, '-', \
331 "Disable use of TLS session tickets"}, \
332 {"serverpref", OPT_S_SERVERPREF, '-', "Use server's cipher preferences"}, \
333 {"legacy_renegotiation", OPT_S_LEGACYRENEG, '-', \
334 "Enable use of legacy renegotiation (dangerous)"}, \
335 {"legacy_server_connect", OPT_S_LEGACYCONN, '-', \
336 "Allow initial connection to servers that don't support RI"}, \
337 {"no_resumption_on_reneg", OPT_S_ONRESUMP, '-', \
338 "Disallow session resumption on renegotiation"}, \
339 {"no_legacy_server_connect", OPT_S_NOLEGACYCONN, '-', \
340 "Disallow initial connection to servers that don't support RI"}, \
341 {"strict", OPT_S_STRICT, '-', \
342 "Enforce strict certificate checks as per TLS standard"}, \
ad775e04
HK
343 {"sigalgs", OPT_S_SIGALGS, 's', \
344 "Signature algorithms to support (colon-separated list)" }, \
345 {"client_sigalgs", OPT_S_CLIENTSIGALGS, 's', \
346 "Signature algorithms to support for client certificate" \
347 " authentication (colon-separated list)" }, \
348 {"curves", OPT_S_CURVES, 's', \
349 "Elliptic curves to advertise (colon-separated list)" }, \
350 {"named_curve", OPT_S_NAMEDCURVE, 's', \
351 "Elliptic curve used for ECDHE (server-side only)" }, \
32eabe34
MR
352 {"cipher", OPT_S_CIPHER, 's', "Specify cipher list to be used"}, \
353 {"dhparam", OPT_S_DHPARAM, '<', \
354 "DH parameter file to use, in cert file if not specified"}, \
355 {"debug_broken_protocol", OPT_S_DEBUGBROKE, '-', \
356 "Perform all sorts of protocol violations for testing purposes"}
7e1b7485
RS
357
358# define OPT_S_CASES \
359 OPT_S__FIRST: case OPT_S__LAST: break; \
360 case OPT_S_NOSSL3: \
361 case OPT_S_NOTLS1: \
362 case OPT_S_NOTLS1_1: \
363 case OPT_S_NOTLS1_2: \
364 case OPT_S_BUGS: \
cc5a9ba4 365 case OPT_S_NO_COMP: \
dc5744cb 366 case OPT_S_COMP: \
7e1b7485
RS
367 case OPT_S_NOTICKET: \
368 case OPT_S_SERVERPREF: \
369 case OPT_S_LEGACYRENEG: \
370 case OPT_S_LEGACYCONN: \
371 case OPT_S_ONRESUMP: \
372 case OPT_S_NOLEGACYCONN: \
373 case OPT_S_STRICT: \
374 case OPT_S_SIGALGS: \
375 case OPT_S_CLIENTSIGALGS: \
376 case OPT_S_CURVES: \
377 case OPT_S_NAMEDCURVE: \
378 case OPT_S_CIPHER: \
379 case OPT_S_DHPARAM: \
380 case OPT_S_DEBUGBROKE
d02b48c6 381
7e1b7485
RS
382/*
383 * Option parsing.
384 */
385extern const char OPT_HELP_STR[];
386extern const char OPT_MORE_STR[];
387typedef struct options_st {
388 const char *name;
389 int retval;
390 /*
391 * value type: - no value (also the value zero), n number, p positive
6755ff11
MR
392 * number, u unsigned, l long, s string, < input file, > output file,
393 * f any format, F der/pem format , E der/pem/engine format identifier.
394 * l, n and u include zero; p does not.
7e1b7485
RS
395 */
396 int valtype;
397 const char *helpstr;
398} OPTIONS;
399
3e8e688f
RS
400/*
401 * A string/int pairing; widely use for option value lookup, hence the
402 * name OPT_PAIR. But that name is misleading in s_cb.c, so we also use
403 * the "generic" name STRINT_PAIR.
404 */
405typedef struct string_int_pair_st {
7e1b7485
RS
406 const char *name;
407 int retval;
3e8e688f 408} OPT_PAIR, STRINT_PAIR;
7e1b7485
RS
409
410/* Flags to pass into opt_format; see FORMAT_xxx, below. */
411# define OPT_FMT_PEMDER (1L << 1)
412# define OPT_FMT_PKCS12 (1L << 2)
413# define OPT_FMT_SMIME (1L << 3)
414# define OPT_FMT_ENGINE (1L << 4)
415# define OPT_FMT_MSBLOB (1L << 5)
416# define OPT_FMT_NETSCAPE (1L << 6)
417# define OPT_FMT_NSS (1L << 7)
418# define OPT_FMT_TEXT (1L << 8)
419# define OPT_FMT_HTTP (1L << 9)
420# define OPT_FMT_PVK (1L << 10)
0c20802c 421# define OPT_FMT_PDE (OPT_FMT_PEMDER | OPT_FMT_ENGINE)
7e1b7485
RS
422# define OPT_FMT_ANY ( \
423 OPT_FMT_PEMDER | OPT_FMT_PKCS12 | OPT_FMT_SMIME | \
424 OPT_FMT_ENGINE | OPT_FMT_MSBLOB | OPT_FMT_NETSCAPE | \
425 OPT_FMT_NSS | OPT_FMT_TEXT | OPT_FMT_HTTP | OPT_FMT_PVK)
426
427char *opt_progname(const char *argv0);
428char *opt_getprog(void);
429char *opt_init(int ac, char **av, const OPTIONS * o);
430int opt_next();
431int opt_format(const char *s, unsigned long flags, int *result);
432int opt_int(const char *arg, int *result);
433int opt_ulong(const char *arg, unsigned long *result);
434int opt_long(const char *arg, long *result);
d94a1a70
VD
435#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \
436 defined(INTMAX_MAX) && defined(UINTMAX_MAX)
03f887ca
VD
437int opt_imax(const char *arg, intmax_t *result);
438int opt_umax(const char *arg, uintmax_t *result);
439#endif
7e1b7485
RS
440int opt_pair(const char *arg, const OPT_PAIR * pairs, int *result);
441int opt_cipher(const char *name, const EVP_CIPHER **cipherp);
442int opt_md(const char *name, const EVP_MD **mdp);
443char *opt_arg(void);
444char *opt_flag(void);
445char *opt_unknown(void);
446char *opt_reset(void);
447char **opt_rest(void);
448int opt_num_rest(void);
449int opt_verify(int i, X509_VERIFY_PARAM *vpm);
450void opt_help(const OPTIONS * list);
451int opt_format_error(const char *s, unsigned long flags);
452int opt_next(void);
7bf7333d 453
0f113f3e 454typedef struct args_st {
7e1b7485
RS
455 int size;
456 int argc;
457 char **argv;
0f113f3e 458} ARGS;
7bf7333d 459
0f113f3e
MC
460# define PW_MIN_LENGTH 4
461typedef struct pw_cb_data {
462 const void *password;
463 const char *prompt_info;
464} PW_CB_DATA;
d02b48c6 465
0f113f3e 466int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data);
30b4c272 467
40889b9c
LJ
468int setup_ui_method(void);
469void destroy_ui_method(void);
2fe5adc3 470
7e1b7485 471int chopup_args(ARGS *arg, char *buf);
0f113f3e 472# ifdef HEADER_X509_H
954ef7ef 473int dump_cert_text(BIO *out, X509 *x);
0f113f3e
MC
474void print_name(BIO *out, const char *title, X509_NAME *nm,
475 unsigned long lflags);
476# endif
7e1b7485
RS
477void print_bignum_var(BIO *, BIGNUM *, const char*, int, unsigned char *);
478void print_array(BIO *, const char *, int, const unsigned char *);
8ca533e3 479int set_cert_ex(unsigned long *flags, const char *arg);
a657546f 480int set_name_ex(unsigned long *flags, const char *arg);
791bd0cd
DSH
481int set_ext_copy(int *copy_type, const char *arg);
482int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
7e1b7485
RS
483int app_passwd(char *arg1, char *arg2, char **pass1, char **pass2);
484int add_oid_section(CONF *conf);
485X509 *load_cert(const char *file, int format,
0f113f3e 486 const char *pass, ENGINE *e, const char *cert_descrip);
0090a686 487X509_CRL *load_crl(const char *infile, int format);
7e1b7485
RS
488int load_cert_crl_http(const char *url, X509 **pcert, X509_CRL **pcrl);
489EVP_PKEY *load_key(const char *file, int format, int maybe_stdin,
0f113f3e 490 const char *pass, ENGINE *e, const char *key_descrip);
7e1b7485 491EVP_PKEY *load_pubkey(const char *file, int format, int maybe_stdin,
0f113f3e 492 const char *pass, ENGINE *e, const char *key_descrip);
0996dc54
VD
493int load_certs(const char *file, STACK_OF(X509) **certs, int format,
494 const char *pass, ENGINE *e, const char *cert_descrip);
495int load_crls(const char *file, STACK_OF(X509_CRL) **crls, int format,
496 const char *pass, ENGINE *e, const char *cert_descrip);
2b6bcb70
MC
497X509_STORE *setup_verify(char *CAfile, char *CApath,
498 int noCAfile, int noCApath);
499int ctx_set_verify_locations(SSL_CTX *ctx, const char *CAfile,
500 const char *CApath, int noCAfile, int noCApath);
333b070e
RS
501# ifdef OPENSSL_NO_ENGINE
502# define setup_engine(engine, debug) NULL
503# else
7e1b7485 504ENGINE *setup_engine(const char *engine, int debug);
0f113f3e 505# endif
0f113f3e 506# ifndef OPENSSL_NO_OCSP
7e1b7485 507OCSP_RESPONSE *process_responder(OCSP_REQUEST *req,
0f113f3e
MC
508 const char *host, const char *path,
509 const char *port, int use_ssl,
82c49427 510 STACK_OF(CONF_VALUE) *headers,
0f113f3e
MC
511 int req_timeout);
512# endif
67c8e7f4 513
ee306a13
DSH
514/* Functions defined in ca.c and also used in ocsp.c */
515int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
0f113f3e
MC
516 ASN1_GENERALIZEDTIME **pinvtm, const char *str);
517
518# define DB_type 0
519# define DB_exp_date 1
520# define DB_rev_date 2
521# define DB_serial 3 /* index - unique */
522# define DB_file 4
523# define DB_name 5 /* index - unique when active and not
524 * disabled */
525# define DB_NUMBER 6
526
527# define DB_TYPE_REV 'R'
528# define DB_TYPE_EXP 'E'
529# define DB_TYPE_VAL 'V'
530
531typedef struct db_attr_st {
532 int unique_subject;
533} DB_ATTR;
534typedef struct ca_db_st {
535 DB_ATTR attributes;
536 TXT_DB *db;
537} CA_DB;
f85b68cd 538
68dc6824 539void* app_malloc(int sz, const char *what);
f85b68cd 540BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
0f113f3e
MC
541int save_serial(char *serialfile, char *suffix, BIGNUM *serial,
542 ASN1_INTEGER **retai);
4c771796 543int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
64674bcc 544int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
f85b68cd
RL
545CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
546int index_index(CA_DB *db);
7d727231 547int save_index(const char *dbfile, const char *suffix, CA_DB *db);
0f113f3e
MC
548int rotate_index(const char *dbfile, const char *new_suffix,
549 const char *old_suffix);
f85b68cd 550void free_index(CA_DB *db);
0f113f3e
MC
551# define index_name_cmp_noconst(a, b) \
552 index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
553 (const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
c869da88 554int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
ff990440 555int parse_yesno(const char *str, int def);
ee306a13 556
db4c08f0 557X509_NAME *parse_name(const char *str, long chtype, int multirdn);
c431798e 558int args_verify(char ***pargs, int *pargc,
7e1b7485 559 int *badarg, X509_VERIFY_PARAM **pm);
ecf3a1fb 560void policies_print(X509_STORE_CTX *ctx);
a9164153 561int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
0c20802c 562int pkey_ctrl_string(EVP_PKEY_CTX *ctx, const char *value);
7e1b7485 563int init_gen_str(EVP_PKEY_CTX **pctx,
0f113f3e 564 const char *algname, ENGINE *e, int do_param);
7e1b7485 565int do_X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
0f113f3e 566 STACK_OF(OPENSSL_STRING) *sigopts);
7e1b7485 567int do_X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
0f113f3e 568 STACK_OF(OPENSSL_STRING) *sigopts);
7e1b7485 569int do_X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
0f113f3e
MC
570 STACK_OF(OPENSSL_STRING) *sigopts);
571# ifndef OPENSSL_NO_PSK
f3b7bdad 572extern char *psk_key;
0f113f3e 573# endif
eee6c81a 574
71fa4513 575unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
71fa4513 576
a70da5b3 577void print_cert_checks(BIO *bio, X509 *x,
0f113f3e
MC
578 const char *checkhost,
579 const char *checkemail, const char *checkip);
a70da5b3 580
0090a686
DSH
581void store_setup_crl_download(X509_STORE *st);
582
7e1b7485 583/* See OPT_FMT_xxx, above. */
bdd58d98
RL
584/* On some platforms, it's important to distinguish between text and binary
585 * files. On some, there might even be specific file formats for different
586 * contents. The FORMAT_xxx macros are meant to express an intent with the
587 * file being read or created.
588 */
d303b9d8 589# define B_FORMAT_TEXT 0x8000
0f113f3e 590# define FORMAT_UNDEF 0
bdd58d98
RL
591# define FORMAT_TEXT (1 | B_FORMAT_TEXT) /* Generic text */
592# define FORMAT_BINARY 2 /* Generic binary */
593# define FORMAT_BASE64 (3 | B_FORMAT_TEXT) /* Base64 */
594# define FORMAT_ASN1 4 /* ASN.1/DER */
595# define FORMAT_PEM (5 | B_FORMAT_TEXT)
596# define FORMAT_PKCS12 6
597# define FORMAT_SMIME (7 | B_FORMAT_TEXT)
598# define FORMAT_ENGINE 8 /* Not really a file format */
d303b9d8
RL
599# define FORMAT_PEMRSA (9 | B_FORMAT_TEXT) /* PEM RSAPubicKey format */
600# define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */
601# define FORMAT_MSBLOB 11 /* MS Key blob format */
602# define FORMAT_PVK 12 /* MS PVK file format */
603# define FORMAT_HTTP 13 /* Download using HTTP */
604# define FORMAT_NSS 14 /* NSS keylog format */
0f113f3e
MC
605
606# define EXT_COPY_NONE 0
607# define EXT_COPY_ADD 1
608# define EXT_COPY_ALL 2
609
610# define NETSCAPE_CERT_HDR "certificate"
611
612# define APP_PASS_LEN 1024
613
614# define SERIAL_RAND_BITS 64
64674bcc 615
2fa45e6e 616int app_hex(char);
ffa10187 617int app_isdir(const char *);
7e1b7485 618int app_access(const char *, int flag);
0f113f3e
MC
619int raw_read_stdin(void *, int);
620int raw_write_stdout(const void *, int);
0a39d8f2 621
0f113f3e
MC
622# define TM_START 0
623# define TM_STOP 1
624double app_tminterval(int stop, int usertime);
ee2ffc27 625
df2ee0e2
BL
626/* this is an accident waiting to happen (-Wshadow is your friend) */
627extern int verify_depth;
628extern int verify_quiet;
629extern int verify_error;
630extern int verify_return_error;
631
7e1b7485
RS
632# include "progs.h"
633
ee2ffc27 634#endif