source: trunk/third/openssl/apps/apps.h @ 19843

Revision 19843, 11.7 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r19842, which included commits to RCS files with non-trunk default branches.
Line 
1/* apps/apps.h */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to.  The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 *    notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 *    notice, this list of conditions and the following disclaimer in the
30 *    documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 *    must display the following acknowledgement:
33 *    "This product includes cryptographic software written by
34 *     Eric Young (eay@cryptsoft.com)"
35 *    The word 'cryptographic' can be left out if the rouines from the library
36 *    being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 *    the apps directory (application code) you must include an acknowledgement:
39 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58/* ====================================================================
59 * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
60 *
61 * Redistribution and use in source and binary forms, with or without
62 * modification, are permitted provided that the following conditions
63 * are met:
64 *
65 * 1. Redistributions of source code must retain the above copyright
66 *    notice, this list of conditions and the following disclaimer.
67 *
68 * 2. Redistributions in binary form must reproduce the above copyright
69 *    notice, this list of conditions and the following disclaimer in
70 *    the documentation and/or other materials provided with the
71 *    distribution.
72 *
73 * 3. All advertising materials mentioning features or use of this
74 *    software must display the following acknowledgment:
75 *    "This product includes software developed by the OpenSSL Project
76 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77 *
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79 *    endorse or promote products derived from this software without
80 *    prior written permission. For written permission, please contact
81 *    openssl-core@openssl.org.
82 *
83 * 5. Products derived from this software may not be called "OpenSSL"
84 *    nor may "OpenSSL" appear in their names without prior written
85 *    permission of the OpenSSL Project.
86 *
87 * 6. Redistributions of any form whatsoever must retain the following
88 *    acknowledgment:
89 *    "This product includes software developed by the OpenSSL Project
90 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91 *
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103 * OF THE POSSIBILITY OF SUCH DAMAGE.
104 * ====================================================================
105 *
106 * This product includes cryptographic software written by Eric Young
107 * (eay@cryptsoft.com).  This product includes software written by Tim
108 * Hudson (tjh@cryptsoft.com).
109 *
110 */
111
112#ifndef HEADER_APPS_H
113#define HEADER_APPS_H
114
115#include "e_os.h"
116
117#include <openssl/buffer.h>
118#include <openssl/bio.h>
119#include <openssl/crypto.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#include <openssl/ossl_typ.h>
128
129int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
130int app_RAND_write_file(const char *file, BIO *bio_e);
131/* When `file' is NULL, use defaults.
132 * `bio_e' is for error messages. */
133void app_RAND_allow_write_file(void);
134long app_RAND_load_files(char *file); /* `file' is a list of files to read,
135                                       * separated by LIST_SEPARATOR_CHAR
136                                       * (see e_os.h).  The string is
137                                       * destroyed! */
138
139#ifdef OPENSSL_SYS_WIN32
140#define rename(from,to) WIN32_rename((from),(to))
141int WIN32_rename(char *oldname,char *newname);
142#endif
143
144/* VMS below version 7.0 doesn't have strcasecmp() */
145#ifdef OPENSSL_SYS_VMS
146#define strcasecmp(str1,str2) VMS_strcasecmp((str1),(str2))
147int VMS_strcasecmp(const char *str1, const char *str2);
148#endif
149
150#ifndef MONOLITH
151
152#define MAIN(a,v)       main(a,v)
153
154#ifndef NON_MAIN
155CONF *config=NULL;
156BIO *bio_err=NULL;
157#else
158extern CONF *config;
159extern BIO *bio_err;
160#endif
161
162#else
163
164#define MAIN(a,v)       PROG(a,v)
165extern CONF *config;
166extern char *default_config_file;
167extern BIO *bio_err;
168
169#endif
170
171#include <signal.h>
172
173#ifdef SIGPIPE
174#define do_pipe_sig()   signal(SIGPIPE,SIG_IGN)
175#else
176#define do_pipe_sig()
177#endif
178
179#if defined(MONOLITH) && !defined(OPENSSL_C)
180#  define apps_startup() \
181                do_pipe_sig()
182#  define apps_shutdown()
183#else
184#  ifndef OPENSSL_NO_ENGINE
185#    if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
186     defined(OPENSSL_SYS_WIN32)
187#      ifdef _O_BINARY
188#        define apps_startup() \
189                        do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
190                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
191                        ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
192#      else
193#        define apps_startup() \
194                        do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
195                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
196                        ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
197#      endif
198#    else
199#      define apps_startup() \
200                        do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
201                        ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); \
202                        setup_ui_method(); } while(0)
203#    endif
204#    define apps_shutdown() \
205                        do { CONF_modules_unload(1); destroy_ui_method(); \
206                        EVP_cleanup(); ENGINE_cleanup(); \
207                        CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
208                        ERR_free_strings(); } while(0)
209#  else
210#    if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN16) || \
211     defined(OPENSSL_SYS_WIN32)
212#      ifdef _O_BINARY
213#        define apps_startup() \
214                        do { _fmode=_O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
215                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
216                        setup_ui_method(); } while(0)
217#      else
218#        define apps_startup() \
219                        do { _fmode=O_BINARY; do_pipe_sig(); CRYPTO_malloc_init(); \
220                        ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
221                        setup_ui_method(); } while(0)
222#      endif
223#    else
224#      define apps_startup() \
225                        do { do_pipe_sig(); OpenSSL_add_all_algorithms(); \
226                        ERR_load_crypto_strings(); \
227                        setup_ui_method(); } while(0)
228#    endif
229#    define apps_shutdown() \
230                        do { CONF_modules_unload(1); destroy_ui_method(); \
231                        EVP_cleanup(); \
232                        CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); \
233                        ERR_free_strings(); } while(0)
234#  endif
235#endif
236
237typedef struct args_st
238        {
239        char **data;
240        int count;
241        } ARGS;
242
243#define PW_MIN_LENGTH 4
244typedef struct pw_cb_data
245        {
246        const void *password;
247        const char *prompt_info;
248        } PW_CB_DATA;
249
250int password_callback(char *buf, int bufsiz, int verify,
251        PW_CB_DATA *cb_data);
252
253int setup_ui_method(void);
254void destroy_ui_method(void);
255
256int should_retry(int i);
257int args_from_file(char *file, int *argc, char **argv[]);
258int str2fmt(char *s);
259void program_name(char *in,char *out,int size);
260int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
261#ifdef HEADER_X509_H
262int dump_cert_text(BIO *out, X509 *x);
263void print_name(BIO *out, char *title, X509_NAME *nm, unsigned long lflags);
264#endif
265int set_cert_ex(unsigned long *flags, const char *arg);
266int set_name_ex(unsigned long *flags, const char *arg);
267int set_ext_copy(int *copy_type, const char *arg);
268int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
269int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
270int add_oid_section(BIO *err, CONF *conf);
271X509 *load_cert(BIO *err, const char *file, int format,
272        const char *pass, ENGINE *e, const char *cert_descrip);
273EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
274        const char *pass, ENGINE *e, const char *key_descrip);
275EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
276        const char *pass, ENGINE *e, const char *key_descrip);
277STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
278        const char *pass, ENGINE *e, const char *cert_descrip);
279X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
280#ifndef OPENSSL_NO_ENGINE
281ENGINE *setup_engine(BIO *err, const char *engine, int debug);
282#endif
283
284int load_config(BIO *err, CONF *cnf);
285char *make_config_name(void);
286
287/* Functions defined in ca.c and also used in ocsp.c */
288int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
289                        ASN1_GENERALIZEDTIME **pinvtm, char *str);
290int make_serial_index(TXT_DB *db);
291
292X509_NAME *do_subject(char *str, long chtype);
293
294#define FORMAT_UNDEF    0
295#define FORMAT_ASN1     1
296#define FORMAT_TEXT     2
297#define FORMAT_PEM      3
298#define FORMAT_NETSCAPE 4
299#define FORMAT_PKCS12   5
300#define FORMAT_SMIME    6
301#define FORMAT_ENGINE   7
302#define FORMAT_IISSGC   8       /* XXX this stupid macro helps us to avoid
303                                 * adding yet another param to load_*key() */
304
305#define EXT_COPY_NONE   0
306#define EXT_COPY_ADD    1
307#define EXT_COPY_ALL    2
308
309#define NETSCAPE_CERT_HDR       "certificate"
310
311#define APP_PASS_LEN    1024
312
313#endif
Note: See TracBrowser for help on using the repository browser.