xref: /openbsd-src/usr.bin/openssl/apps.h (revision d563dd374491d70deea8bc22af867b94d7ee7a04)
1*d563dd37Stb /* $OpenBSD: apps.h,v 1.42 2025/01/02 13:11:26 tb Exp $ */
2dab3f910Sjsing /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3dab3f910Sjsing  * All rights reserved.
4dab3f910Sjsing  *
5dab3f910Sjsing  * This package is an SSL implementation written
6dab3f910Sjsing  * by Eric Young (eay@cryptsoft.com).
7dab3f910Sjsing  * The implementation was written so as to conform with Netscapes SSL.
8dab3f910Sjsing  *
9dab3f910Sjsing  * This library is free for commercial and non-commercial use as long as
10dab3f910Sjsing  * the following conditions are aheared to.  The following conditions
11dab3f910Sjsing  * apply to all code found in this distribution, be it the RC4, RSA,
12dab3f910Sjsing  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13dab3f910Sjsing  * included with this distribution is covered by the same copyright terms
14dab3f910Sjsing  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15dab3f910Sjsing  *
16dab3f910Sjsing  * Copyright remains Eric Young's, and as such any Copyright notices in
17dab3f910Sjsing  * the code are not to be removed.
18dab3f910Sjsing  * If this package is used in a product, Eric Young should be given attribution
19dab3f910Sjsing  * as the author of the parts of the library used.
20dab3f910Sjsing  * This can be in the form of a textual message at program startup or
21dab3f910Sjsing  * in documentation (online or textual) provided with the package.
22dab3f910Sjsing  *
23dab3f910Sjsing  * Redistribution and use in source and binary forms, with or without
24dab3f910Sjsing  * modification, are permitted provided that the following conditions
25dab3f910Sjsing  * are met:
26dab3f910Sjsing  * 1. Redistributions of source code must retain the copyright
27dab3f910Sjsing  *    notice, this list of conditions and the following disclaimer.
28dab3f910Sjsing  * 2. Redistributions in binary form must reproduce the above copyright
29dab3f910Sjsing  *    notice, this list of conditions and the following disclaimer in the
30dab3f910Sjsing  *    documentation and/or other materials provided with the distribution.
31dab3f910Sjsing  * 3. All advertising materials mentioning features or use of this software
32dab3f910Sjsing  *    must display the following acknowledgement:
33dab3f910Sjsing  *    "This product includes cryptographic software written by
34dab3f910Sjsing  *     Eric Young (eay@cryptsoft.com)"
35dab3f910Sjsing  *    The word 'cryptographic' can be left out if the rouines from the library
36dab3f910Sjsing  *    being used are not cryptographic related :-).
37dab3f910Sjsing  * 4. If you include any Windows specific code (or a derivative thereof) from
38dab3f910Sjsing  *    the apps directory (application code) you must include an acknowledgement:
39dab3f910Sjsing  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40dab3f910Sjsing  *
41dab3f910Sjsing  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42dab3f910Sjsing  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43dab3f910Sjsing  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44dab3f910Sjsing  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45dab3f910Sjsing  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46dab3f910Sjsing  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47dab3f910Sjsing  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48dab3f910Sjsing  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49dab3f910Sjsing  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50dab3f910Sjsing  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51dab3f910Sjsing  * SUCH DAMAGE.
52dab3f910Sjsing  *
53dab3f910Sjsing  * The licence and distribution terms for any publically available version or
54dab3f910Sjsing  * derivative of this code cannot be changed.  i.e. this code cannot simply be
55dab3f910Sjsing  * copied and put under another distribution licence
56dab3f910Sjsing  * [including the GNU Public Licence.]
57dab3f910Sjsing  */
58dab3f910Sjsing /* ====================================================================
59dab3f910Sjsing  * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
60dab3f910Sjsing  *
61dab3f910Sjsing  * Redistribution and use in source and binary forms, with or without
62dab3f910Sjsing  * modification, are permitted provided that the following conditions
63dab3f910Sjsing  * are met:
64dab3f910Sjsing  *
65dab3f910Sjsing  * 1. Redistributions of source code must retain the above copyright
66dab3f910Sjsing  *    notice, this list of conditions and the following disclaimer.
67dab3f910Sjsing  *
68dab3f910Sjsing  * 2. Redistributions in binary form must reproduce the above copyright
69dab3f910Sjsing  *    notice, this list of conditions and the following disclaimer in
70dab3f910Sjsing  *    the documentation and/or other materials provided with the
71dab3f910Sjsing  *    distribution.
72dab3f910Sjsing  *
73dab3f910Sjsing  * 3. All advertising materials mentioning features or use of this
74dab3f910Sjsing  *    software must display the following acknowledgment:
75dab3f910Sjsing  *    "This product includes software developed by the OpenSSL Project
76dab3f910Sjsing  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77dab3f910Sjsing  *
78dab3f910Sjsing  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79dab3f910Sjsing  *    endorse or promote products derived from this software without
80dab3f910Sjsing  *    prior written permission. For written permission, please contact
81dab3f910Sjsing  *    openssl-core@openssl.org.
82dab3f910Sjsing  *
83dab3f910Sjsing  * 5. Products derived from this software may not be called "OpenSSL"
84dab3f910Sjsing  *    nor may "OpenSSL" appear in their names without prior written
85dab3f910Sjsing  *    permission of the OpenSSL Project.
86dab3f910Sjsing  *
87dab3f910Sjsing  * 6. Redistributions of any form whatsoever must retain the following
88dab3f910Sjsing  *    acknowledgment:
89dab3f910Sjsing  *    "This product includes software developed by the OpenSSL Project
90dab3f910Sjsing  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91dab3f910Sjsing  *
92dab3f910Sjsing  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93dab3f910Sjsing  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94dab3f910Sjsing  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95dab3f910Sjsing  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96dab3f910Sjsing  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97dab3f910Sjsing  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98dab3f910Sjsing  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99dab3f910Sjsing  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100dab3f910Sjsing  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101dab3f910Sjsing  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102dab3f910Sjsing  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103dab3f910Sjsing  * OF THE POSSIBILITY OF SUCH DAMAGE.
104dab3f910Sjsing  * ====================================================================
105dab3f910Sjsing  *
106dab3f910Sjsing  * This product includes cryptographic software written by Eric Young
107dab3f910Sjsing  * (eay@cryptsoft.com).  This product includes software written by Tim
108dab3f910Sjsing  * Hudson (tjh@cryptsoft.com).
109dab3f910Sjsing  *
110dab3f910Sjsing  */
111dab3f910Sjsing 
112dab3f910Sjsing #ifndef HEADER_APPS_H
113dab3f910Sjsing #define HEADER_APPS_H
114dab3f910Sjsing 
115dab3f910Sjsing #include <openssl/opensslconf.h>
116dab3f910Sjsing 
117dab3f910Sjsing #include <openssl/bio.h>
118dab3f910Sjsing #include <openssl/conf.h>
119dab3f910Sjsing #include <openssl/lhash.h>
120dab3f910Sjsing #include <openssl/ossl_typ.h>
121dab3f910Sjsing #include <openssl/txt_db.h>
122dab3f910Sjsing #include <openssl/x509.h>
1235827cb97Sbcook #include <openssl/ui.h>
124dab3f910Sjsing 
125dab3f910Sjsing #ifndef OPENSSL_NO_OCSP
126dab3f910Sjsing #include <openssl/ocsp.h>
127dab3f910Sjsing #endif
128dab3f910Sjsing 
12923cc9d40Stb #include <openssl/ssl.h>
13023cc9d40Stb 
1319bc487adSdoug #include <unistd.h>
1329bc487adSdoug 
133e6f673fdStb /* numbers in us */
134e6f673fdStb #define DGRAM_RCV_TIMEOUT         250000
135e6f673fdStb #define DGRAM_SND_TIMEOUT         250000
136e6f673fdStb 
137dab3f910Sjsing extern CONF *config;
138dab3f910Sjsing extern char *default_config_file;
139dab3f910Sjsing extern BIO *bio_err;
140dab3f910Sjsing 
141dab3f910Sjsing #define PW_MIN_LENGTH 4
142dab3f910Sjsing typedef struct pw_cb_data {
143dab3f910Sjsing 	const void *password;
144dab3f910Sjsing 	const char *prompt_info;
145dab3f910Sjsing } PW_CB_DATA;
146dab3f910Sjsing 
147dab3f910Sjsing int password_callback(char *buf, int bufsiz, int verify, void *cb_data);
148dab3f910Sjsing 
1495827cb97Sbcook int setup_ui(void);
1505827cb97Sbcook void destroy_ui(void);
1515827cb97Sbcook 
1525827cb97Sbcook extern UI_METHOD *ui_method;
1535827cb97Sbcook int ui_open(UI *ui);
1545827cb97Sbcook int ui_read(UI *ui, UI_STRING *uis);
1555827cb97Sbcook int ui_write(UI *ui, UI_STRING *uis);
1565827cb97Sbcook int ui_close(UI *ui);
157dab3f910Sjsing 
158dab3f910Sjsing int str2fmt(char *s);
159dab3f910Sjsing void program_name(char *in, char *out, int size);
160dab3f910Sjsing #ifdef HEADER_X509_H
161dab3f910Sjsing int dump_cert_text(BIO *out, X509 *x);
162dab3f910Sjsing void print_name(BIO *out, const char *title, X509_NAME *nm,
163dab3f910Sjsing     unsigned long lflags);
164dab3f910Sjsing #endif
165dab3f910Sjsing int set_cert_ex(unsigned long *flags, const char *arg);
166dab3f910Sjsing int set_name_ex(unsigned long *flags, const char *arg);
167dab3f910Sjsing int set_ext_copy(int *copy_type, const char *arg);
168dab3f910Sjsing int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
169dab3f910Sjsing int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
170dab3f910Sjsing int add_oid_section(BIO *err, CONF *conf);
171dab3f910Sjsing X509 *load_cert(BIO *err, const char *file, int format,
1725284dfeaSbcook     const char *pass, const char *cert_descrip);
173dab3f910Sjsing EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
1745284dfeaSbcook     const char *pass, const char *key_descrip);
175dab3f910Sjsing EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
1765284dfeaSbcook     const char *pass, const char *key_descrip);
177dab3f910Sjsing STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
1785284dfeaSbcook     const char *pass, const char *cert_descrip);
179dab3f910Sjsing STACK_OF(X509_CRL) *load_crls(BIO *err, const char *file, int format,
1805284dfeaSbcook     const char *pass, const char *cert_descrip);
181dab3f910Sjsing X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
182dab3f910Sjsing 
183dab3f910Sjsing #ifndef OPENSSL_NO_OCSP
184dab3f910Sjsing OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
185dab3f910Sjsing     char *host, char *path, char *port, int use_ssl,
186dab3f910Sjsing     STACK_OF(CONF_VALUE) *headers, int req_timeout);
187dab3f910Sjsing #endif
188dab3f910Sjsing 
189dab3f910Sjsing int load_config(BIO *err, CONF *cnf);
190dab3f910Sjsing char *make_config_name(void);
191dab3f910Sjsing 
192dab3f910Sjsing /* Functions defined in ca.c and also used in ocsp.c */
193dab3f910Sjsing int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
194dab3f910Sjsing     ASN1_GENERALIZEDTIME **pinvtm, const char *str);
195dab3f910Sjsing 
196dab3f910Sjsing #define DB_type         0
197dab3f910Sjsing #define DB_exp_date     1
198dab3f910Sjsing #define DB_rev_date     2
199dab3f910Sjsing #define DB_serial       3       /* index - unique */
200dab3f910Sjsing #define DB_file         4
201dab3f910Sjsing #define DB_name         5       /* index - unique when active and not disabled */
202dab3f910Sjsing #define DB_NUMBER       6
203dab3f910Sjsing 
204dab3f910Sjsing #define DB_TYPE_REV	'R'
205dab3f910Sjsing #define DB_TYPE_EXP	'E'
206dab3f910Sjsing #define DB_TYPE_VAL	'V'
207080bcdd8Sinoguchi #define DB_TYPE_SUSP	'S'
208dab3f910Sjsing 
209dab3f910Sjsing typedef struct db_attr_st {
210dab3f910Sjsing 	int unique_subject;
211dab3f910Sjsing } DB_ATTR;
212dab3f910Sjsing typedef struct ca_db_st {
213dab3f910Sjsing 	DB_ATTR attributes;
214dab3f910Sjsing 	TXT_DB *db;
215dab3f910Sjsing } CA_DB;
216dab3f910Sjsing 
217dab3f910Sjsing BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
218dab3f910Sjsing int save_serial(char *serialfile, char *suffix, BIGNUM *serial,
219dab3f910Sjsing     ASN1_INTEGER **retai);
220dab3f910Sjsing int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
221dab3f910Sjsing int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
222dab3f910Sjsing CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
223dab3f910Sjsing int index_index(CA_DB *db);
224dab3f910Sjsing int save_index(const char *dbfile, const char *suffix, CA_DB *db);
225dab3f910Sjsing int rotate_index(const char *dbfile, const char *new_suffix,
226dab3f910Sjsing     const char *old_suffix);
227dab3f910Sjsing void free_index(CA_DB *db);
228dab3f910Sjsing #define index_name_cmp_noconst(a, b) \
229dab3f910Sjsing 	index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
230dab3f910Sjsing 	(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
231dab3f910Sjsing int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
232dab3f910Sjsing int parse_yesno(const char *str, int def);
233dab3f910Sjsing 
234dab3f910Sjsing X509_NAME *parse_name(char *str, long chtype, int multirdn);
235dab3f910Sjsing int args_verify(char ***pargs, int *pargc, int *badarg, BIO *err,
236dab3f910Sjsing     X509_VERIFY_PARAM **pm);
237dab3f910Sjsing int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
238dab3f910Sjsing int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
2395284dfeaSbcook int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, const char *algname,
240dab3f910Sjsing     int do_param);
241dab3f910Sjsing int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
242dab3f910Sjsing     STACK_OF(OPENSSL_STRING) *sigopts);
243dab3f910Sjsing int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
244dab3f910Sjsing     STACK_OF(OPENSSL_STRING) *sigopts);
245dab3f910Sjsing int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
246dab3f910Sjsing     STACK_OF(OPENSSL_STRING) *sigopts);
247dab3f910Sjsing 
248dab3f910Sjsing unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
249dab3f910Sjsing 
250dab3f910Sjsing #define FORMAT_UNDEF    0
251dab3f910Sjsing #define FORMAT_ASN1     1
252dab3f910Sjsing #define FORMAT_TEXT     2
253dab3f910Sjsing #define FORMAT_PEM      3
254b1044e52Stb 
255dab3f910Sjsing #define FORMAT_PKCS12   5
256dab3f910Sjsing #define FORMAT_SMIME    6
2575284dfeaSbcook 
2585137bbbdStb #define FORMAT_PEMRSA	9	/* PEM RSAPublicKey format */
2595137bbbdStb #define FORMAT_ASN1RSA	10	/* DER RSAPublicKey format */
260dab3f910Sjsing #define FORMAT_MSBLOB	11	/* MS Key blob format */
261dab3f910Sjsing #define FORMAT_PVK	12	/* MS PVK file format */
262dab3f910Sjsing 
263dab3f910Sjsing #define EXT_COPY_NONE	0
264dab3f910Sjsing #define EXT_COPY_ADD	1
265dab3f910Sjsing #define EXT_COPY_ALL	2
266dab3f910Sjsing 
267dab3f910Sjsing #define APP_PASS_LEN	1024
268dab3f910Sjsing 
269dab3f910Sjsing #define SERIAL_RAND_BITS	64
270dab3f910Sjsing 
271dab3f910Sjsing int app_isdir(const char *);
272dab3f910Sjsing 
273f5e75c9eScheloha #define TM_RESET	0
274f5e75c9eScheloha #define TM_GET		1
275f5e75c9eScheloha double app_timer_real(int);
276f5e75c9eScheloha double app_timer_user(int);
277dab3f910Sjsing 
278dab3f910Sjsing #define OPENSSL_NO_SSL_INTERN
279dab3f910Sjsing 
2806b8b4364Sjsing struct option {
2816b8b4364Sjsing 	const char *name;
2826b8b4364Sjsing 	const char *argname;
2836b8b4364Sjsing 	const char *desc;
2846b8b4364Sjsing 	enum {
2856b8b4364Sjsing 		OPTION_ARG,
286b1649c7eSjsing 		OPTION_ARGV_FUNC,
2870ee7f8aeSjsing 		OPTION_ARG_FORMAT,
288ec4a4065Sjsing 		OPTION_ARG_FUNC,
289644a601eSjsing 		OPTION_ARG_INT,
290751065ffSjsing 		OPTION_ARG_LONG,
291ea1128d8Sderaadt 		OPTION_ARG_TIME,
2921cb342c7Sjsing 		OPTION_DISCARD,
2930c2cbfefSjsing 		OPTION_FUNC,
2946b8b4364Sjsing 		OPTION_FLAG,
295f9a600f9Sjsing 		OPTION_FLAG_ORD,
2966b8b4364Sjsing 		OPTION_VALUE,
2971cb342c7Sjsing 		OPTION_VALUE_AND,
2981cb342c7Sjsing 		OPTION_VALUE_OR,
2996fde9eb9Sinoguchi 		OPTION_UL_VALUE_OR,
300ac908323Sinoguchi 		OPTION_ORDER,
3016b8b4364Sjsing 	} type;
3026b8b4364Sjsing 	union {
3036b8b4364Sjsing 		char **arg;
304d16f2e55Sjsing 		int (*argfunc)(char *arg);
305b1649c7eSjsing 		int (*argvfunc)(int argc, char **argv, int *argsused);
3066b8b4364Sjsing 		int *flag;
307d16f2e55Sjsing 		int (*func)(void);
308751065ffSjsing 		long *lvalue;
3096b8b4364Sjsing 		int *value;
3106fde9eb9Sinoguchi 		unsigned long *ulvalue;
311e7036f67Sderaadt 		time_t *tvalue;
312ac908323Sinoguchi 		int *order;
3136b8b4364Sjsing 	} opt;
3146b8b4364Sjsing 	const int value;
3156fde9eb9Sinoguchi 	const unsigned long ulvalue;
316ac908323Sinoguchi 	int *order;
3176b8b4364Sjsing };
3186b8b4364Sjsing 
319ea149709Sguenther void options_usage(const struct option *opts);
320ea149709Sguenther int options_parse(int argc, char **argv, const struct option *opts,
321ea149709Sguenther     char **unnamed, int *argsused);
3226b8b4364Sjsing 
3234071f800Sinoguchi void show_cipher(const OBJ_NAME *name, void *arg);
324b0100c00Stb 
325b0100c00Stb int asn1parse_main(int argc, char **argv);
326b0100c00Stb int ca_main(int argc, char **argv);
327b0100c00Stb int certhash_main(int argc, char **argv);
328b0100c00Stb int ciphers_main(int argc, char **argv);
329b0100c00Stb int cms_main(int argc, char **argv);
330b0100c00Stb int crl2pkcs7_main(int argc, char **argv);
331b0100c00Stb int crl_main(int argc, char **argv);
332b0100c00Stb int dgst_main(int argc, char **argv);
333b0100c00Stb int dh_main(int argc, char **argv);
334b0100c00Stb int dhparam_main(int argc, char **argv);
335b0100c00Stb int dsa_main(int argc, char **argv);
336b0100c00Stb int dsaparam_main(int argc, char **argv);
337b0100c00Stb int ec_main(int argc, char **argv);
338b0100c00Stb int ecparam_main(int argc, char **argv);
339b0100c00Stb int enc_main(int argc, char **argv);
340b0100c00Stb int errstr_main(int argc, char **argv);
341b0100c00Stb int gendh_main(int argc, char **argv);
342b0100c00Stb int gendsa_main(int argc, char **argv);
343b0100c00Stb int genpkey_main(int argc, char **argv);
344b0100c00Stb int genrsa_main(int argc, char **argv);
345b0100c00Stb int ocsp_main(int argc, char **argv);
346b0100c00Stb int passwd_main(int argc, char **argv);
347b0100c00Stb int pkcs7_main(int argc, char **argv);
348b0100c00Stb int pkcs8_main(int argc, char **argv);
349b0100c00Stb int pkcs12_main(int argc, char **argv);
350b0100c00Stb int pkey_main(int argc, char **argv);
351b0100c00Stb int pkeyparam_main(int argc, char **argv);
352b0100c00Stb int pkeyutl_main(int argc, char **argv);
353b0100c00Stb int prime_main(int argc, char **argv);
354b0100c00Stb int rand_main(int argc, char **argv);
355b0100c00Stb int req_main(int argc, char **argv);
356b0100c00Stb int rsa_main(int argc, char **argv);
357b0100c00Stb int rsautl_main(int argc, char **argv);
358b0100c00Stb int s_client_main(int argc, char **argv);
359b0100c00Stb int s_server_main(int argc, char **argv);
360b0100c00Stb int s_time_main(int argc, char **argv);
361b0100c00Stb int sess_id_main(int argc, char **argv);
362b0100c00Stb int smime_main(int argc, char **argv);
363b0100c00Stb int speed_main(int argc, char **argv);
364b0100c00Stb int ts_main(int argc, char **argv);
365b0100c00Stb int verify_main(int argc, char **argv);
366b0100c00Stb int version_main(int argc, char **argv);
367b0100c00Stb int x509_main(int argc, char **argv);
368b0100c00Stb 
36923cc9d40Stb #define PORT            4433
37023cc9d40Stb #define PORT_STR        "4433"
37123cc9d40Stb #define PROTOCOL        "tcp"
37223cc9d40Stb 
37323cc9d40Stb extern int verify_depth;
37423cc9d40Stb extern int verify_return_error;
37523cc9d40Stb 
37623cc9d40Stb int do_server(int port, int type, int *ret,
37723cc9d40Stb     int (*cb)(int s, unsigned char *context),
37823cc9d40Stb     unsigned char *context, int naccept);
37923cc9d40Stb int verify_callback(int ok, X509_STORE_CTX *ctx);
38023cc9d40Stb int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
38123cc9d40Stb int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
38223cc9d40Stb int ssl_print_tmp_key(BIO *out, SSL *s);
38323cc9d40Stb int init_client(int *sock, char *server, char *port, int type, int af);
38423cc9d40Stb int extract_port(char *str, short *port_ptr);
38523cc9d40Stb int extract_host_port(char *str, char **host_ptr, unsigned char *ip, char **p);
38623cc9d40Stb 
38723cc9d40Stb long bio_dump_callback(BIO *bio, int cmd, const char *argp, int argi,
38823cc9d40Stb     long argl, long ret);
38923cc9d40Stb 
39023cc9d40Stb void apps_ssl_info_callback(const SSL *s, int where, int ret);
39123cc9d40Stb void msg_cb(int write_p, int version, int content_type, const void *buf,
39223cc9d40Stb     size_t len, SSL *ssl, void *arg);
39323cc9d40Stb void tlsext_cb(SSL *s, int client_server, int type, unsigned char *data,
39423cc9d40Stb     int len, void *arg);
39523cc9d40Stb 
39623cc9d40Stb int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
39723cc9d40Stb     unsigned int *cookie_len);
39823cc9d40Stb int verify_cookie_callback(SSL *ssl, const unsigned char *cookie,
39923cc9d40Stb     unsigned int cookie_len);
40023cc9d40Stb 
401dab3f910Sjsing #endif
402