]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/crypto.c
Import of old SSLeay release: SSLeay 0.9.0b
[thirdparty/openssl.git] / crypto / crypto.c
CommitLineData
d02b48c6 1/* crypto/crypto.c */
58964a49 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
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/* If you are happy to use the assmbler version of bn/bn_mulw.c, define
60 * BN_ASM */
61#ifndef BN_ASM
62#undef BN_ASM
58964a49 63#define X86_ASM
d02b48c6
RE
64#endif
65
66#ifndef DES_ASM
67#undef DES_ASM
68#endif
69
70#ifndef BF_ASM
71#undef BF_ASM
72#endif
73
74/* The following defines are only to break the compiles into chunks.
75 * If you wish to not compile some sections, use the 'NO_XXX' macros
76 */
77#ifndef CRYPTO_SUBSET
78/* Define all subset symbols. */
79#define CRYPTO_LIB_SUBSET
80#define CRYPTO_ASN1_SUBSET
81#define CRYPTO_BN_SUBSET
82#define CRYPTO_BUFFER_SUBSET
83#define CRYPTO_BIO_SUBSET
84#define CRYPTO_CONF_SUBSET
85#define CRYPTO_DES_SUBSET
86#define CRYPTO_DH_SUBSET
87#define CRYPTO_DSA_SUBSET
88#define CRYPTO_ERROR_SUBSET
89#define CRYPTO_EVP_SUBSET
90#define CRYPTO_IDEA_SUBSET
91#define CRYPTO_LHASH_SUBSET
92#define CRYPTO_MD_SUBSET
93#define CRYPTO_MDC2_SUBSET
94#define CRYPTO_METH_SUBSET
95#define CRYPTO_OBJECTS_SUBSET
96#define CRYPTO_PEM_SUBSET
97#define CRYPTO_RAND_SUBSET
98#define CRYPTO_RC_SUBSET
58964a49
RE
99#define CRYPTO_BLOWFISH_SUBSET
100#define CRYPTO_CAST_SUBSET
d02b48c6
RE
101#define CRYPTO_RSA_SUBSET
102#define CRYPTO_SHA_SUBSET
58964a49 103#define CRYPTO_HMAC_SUBSET
d02b48c6
RE
104#define CRYPTO_SHA1_SUBSET
105#define CRYPTO_STACK_SUBSET
106#define CRYPTO_TXT_DB_SUBSET
107#define CRYPTO_X509_SUBSET
108#define CRYPTO_PKCS7_SUBSET
109#endif
110
111#include <stdio.h>
112#include <stdlib.h>
113#include <string.h>
114
115#define USE_SOCKETS
116#include "../e_os.h"
117
118#include "buffer.h"
119#include "bio.h"
120#include "stack.h"
121#include "lhash.h"
122
123#include "err.h"
124
125#include "bn.h"
126#include "evp.h"
127
128#include "rand.h"
129#include "conf.h"
130#include "txt_db.h"
131
132#include "x509.h"
133#include "pkcs7.h"
134#include "pem.h"
135#include "asn1.h"
136#include "objects.h"
137
138#ifdef CRYPTO_LIB_SUBSET
139#include "cryptlib.c"
140#include "mem.c"
141#include "cversion.c"
142#endif
143
144#ifdef CRYPTO_ASN1_SUBSET
145#include "asn1/a_meth.c"
146#include "asn1/a_bitstr.c"
147#include "asn1/a_d2i_fp.c"
148#include "asn1/a_dup.c"
149#include "asn1/a_hdr.c"
150#include "asn1/a_i2d_fp.c"
151#include "asn1/a_int.c"
152#include "asn1/a_bool.c"
153#include "asn1/a_bytes.c"
154#include "asn1/a_object.c"
155#include "asn1/a_octet.c"
156#include "asn1/a_print.c"
157#include "asn1/a_set.c"
158#include "asn1/a_sign.c"
159#include "asn1/a_type.c"
160#include "asn1/a_utctm.c"
161#include "asn1/a_verify.c"
162#include "asn1/a_digest.c"
163#include "asn1/asn1_err.c"
164#include "asn1/asn1_lib.c"
165#include "asn1/asn1_par.c"
166#ifndef NO_DH
167#include "asn1/d2i_dhp.c"
168#include "asn1/i2d_dhp.c"
169#endif
170#ifndef NO_DSA
171#include "asn1/d2i_dsap.c"
172#include "asn1/i2d_dsap.c"
173#include "asn1/d2i_s_pr.c"
174#include "asn1/i2d_s_pr.c"
175#include "asn1/d2i_s_pu.c"
176#include "asn1/i2d_s_pu.c"
177#endif
178#ifndef NO_RSA
179#include "asn1/d2i_r_pr.c"
180#include "asn1/i2d_r_pr.c"
181#include "asn1/d2i_r_pu.c"
182#include "asn1/i2d_r_pu.c"
183#include "asn1/n_pkey.c"
184#endif
185#include "asn1/d2i_pr.c"
186#include "asn1/d2i_pu.c"
187#include "asn1/i2d_pr.c"
188#include "asn1/i2d_pu.c"
189#include "asn1/f_int.c"
190#include "asn1/f_string.c"
191#include "asn1/p7_dgst.c"
192#include "asn1/p7_enc.c"
193#include "asn1/p7_enc_c.c"
194#include "asn1/p7_evp.c"
195#include "asn1/p7_i_s.c"
196#include "asn1/p7_lib.c"
197#include "asn1/p7_recip.c"
198#include "asn1/p7_s_e.c"
199#include "asn1/p7_signd.c"
200#include "asn1/p7_signi.c"
201#include "asn1/t_pkey.c"
202#include "asn1/t_req.c"
203#include "asn1/t_x509.c"
204#include "asn1/x_algor.c"
205#include "asn1/x_attrib.c"
206#include "asn1/x_exten.c"
207#include "asn1/x_cinf.c"
208#include "asn1/x_crl.c"
209#include "asn1/x_info.c"
210#include "asn1/x_name.c"
211#include "asn1/x_pkey.c"
212#include "asn1/x_pubkey.c"
213#include "asn1/x_req.c"
214#include "asn1/x_sig.c"
215#include "asn1/x_spki.c"
216#include "asn1/x_val.c"
217#include "asn1/x_x509.c"
218#endif
58964a49 219
d02b48c6
RE
220#ifdef CRYPTO_BN_SUBSET
221#include "bn/bn_add.c"
222#include "bn/bn_div.c"
223#include "bn/bn_exp.c"
224#include "bn/bn_mont.c"
225#include "bn/bn_recp.c"
226#include "bn/bn_gcd.c"
227#include "bn/bn_lib.c"
228#include "bn/bn_mod.c"
229#include "bn/bn_mul.c"
230#ifndef BN_ASM
231#include "bn/bn_mulw.c"
232#endif
233#include "bn/bn_prime.c"
234#include "bn/bn_rand.c"
235#include "bn/bn_shift.c"
236#include "bn/bn_sqr.c"
237#include "bn/bn_sub.c"
238#include "bn/bn_word.c"
239#include "bn/bn_print.c"
240#include "bn/bn_err.c"
58964a49 241#include "bn/bn_blind.c"
d02b48c6 242#endif
58964a49 243
d02b48c6
RE
244#ifdef CRYPTO_BIO_SUBSET
245#include "bio/bf_buff.c"
246#include "bio/bf_null.c"
247#include "bio/bf_nbio.c"
248#include "bio/bio_cb.c"
249#include "bio/bio_lib.c"
250#include "bio/bss_fd.c"
251#include "bio/bss_file.c"
252#include "bio/bss_mem.c"
253#include "bio/bss_null.c"
254#ifdef VMS
255#include "bio/bss_rtcp.c"
256#endif
257#include "bio/bss_sock.c"
258#include "bio/bss_conn.c"
259#include "bio/bss_acpt.c"
260#include "bio/b_sock.c"
261#include "bio/b_print.c"
262#include "bio/b_dump.c"
263#include "bio/bio_err.c"
264#endif
58964a49 265
d02b48c6
RE
266#ifdef CRYPTO_BUFFER_SUBSET
267#include "buffer/buf_err.c"
268#include "buffer/buffer.c"
269#endif
58964a49 270
d02b48c6
RE
271#ifdef CRYPTO_CONF_SUBSET
272#include "conf/conf.c"
273#include "conf/conf_err.c"
274#endif
58964a49 275
d02b48c6
RE
276#ifdef CRYPTO_DES_SUBSET
277#include "des/read_pwd.c"
278#ifndef NO_DES
279#ifndef DES_ASM
280#include "des/fcrypt_b.c"
281#include "des/des_enc.c"
282#endif
d02b48c6
RE
283#include "des/cbc_cksm.c"
284#include "des/xcbc_enc.c"
285#include "des/cbc_enc.c"
d02b48c6
RE
286#include "des/cfb64ede.c"
287#include "des/cfb64enc.c"
288#include "des/cfb_enc.c"
289#include "des/ecb3_enc.c"
290#include "des/ecb_enc.c"
291#include "des/enc_read.c"
292#include "des/enc_writ.c"
293#include "des/fcrypt.c"
294#include "des/ofb64ede.c"
295#include "des/ofb64enc.c"
296#include "des/ofb_enc.c"
297#include "des/pcbc_enc.c"
298#include "des/qud_cksm.c"
299#include "des/rand_key.c"
300#include "des/read2pwd.c"
301#include "des/rpc_enc.c"
302#include "des/set_key.c"
303#include "des/str2key.c"
304#include "des/supp.c"
305#endif
306#endif
58964a49 307
d02b48c6
RE
308#ifdef CRYPTO_DH_SUBSET
309#ifndef NO_DH
310#include "dh/dh_check.c"
311#include "dh/dh_err.c"
312#include "dh/dh_gen.c"
313#include "dh/dh_key.c"
314#include "dh/dh_lib.c"
315#endif
316#endif
58964a49 317
d02b48c6
RE
318#ifdef CRYPTO_DSA_SUBSET
319#ifndef NO_DSA
320#include "dsa/dsa_gen.c"
321#include "dsa/dsa_key.c"
322#include "dsa/dsa_lib.c"
323#include "dsa/dsa_sign.c"
324#include "dsa/dsa_vrf.c"
325#include "dsa/dsa_err.c"
326#endif
327#endif
58964a49 328
d02b48c6
RE
329#ifdef CRYPTO_ERROR_SUBSET
330#include "err/err.c"
331#include "err/err_all.c"
332#include "err/err_prn.c"
333#endif
58964a49 334
d02b48c6
RE
335#ifdef CRYPTO_EVP_SUBSET
336#include "evp/bio_md.c"
337#include "evp/bio_b64.c"
338#include "evp/bio_enc.c"
339#include "evp/c_all.c"
340#include "evp/digest.c"
341#ifndef NO_DES
342#include "evp/e_cbc_3d.c"
343#include "evp/e_cfb_3d.c"
344#include "evp/e_ecb_3d.c"
345#include "evp/e_ofb_3d.c"
346#include "evp/e_cbc_d.c"
347#include "evp/e_cfb_d.c"
348#include "evp/e_xcbc_d.c"
349#include "evp/e_ecb_d.c"
350#include "evp/e_ofb_d.c"
351#endif
352#ifndef NO_IDEA
353#include "evp/e_cbc_i.c"
354#include "evp/e_cfb_i.c"
355#include "evp/e_ecb_i.c"
356#include "evp/e_ofb_i.c"
357#endif
358#ifndef NO_RC2
359#include "evp/e_cbc_r2.c"
360#include "evp/e_cfb_r2.c"
361#include "evp/e_ecb_r2.c"
362#include "evp/e_ofb_r2.c"
363#endif
364#ifndef NO_BLOWFISH
365#include "evp/e_cbc_bf.c"
366#include "evp/e_cfb_bf.c"
367#include "evp/e_ecb_bf.c"
368#include "evp/e_ofb_bf.c"
369#endif
58964a49
RE
370#ifndef NO_CAST
371#include "evp/e_cbc_c.c"
372#include "evp/e_cfb_c.c"
373#include "evp/e_ecb_c.c"
374#include "evp/e_ofb_c.c"
375#endif
d02b48c6
RE
376#ifndef NO_RC4
377#include "evp/e_rc4.c"
378#endif
379#include "evp/names.c"
380#include "evp/e_null.c"
381#include "evp/encode.c"
382#include "evp/evp_enc.c"
383#include "evp/evp_err.c"
384#include "evp/evp_key.c"
385#include "evp/m_null.c"
386#include "evp/p_lib.c"
387#ifndef NO_RSA
388#include "evp/p_open.c"
389#include "evp/p_seal.c"
390#endif
391#include "evp/p_sign.c"
392#include "evp/p_verify.c"
393#endif
58964a49 394
d02b48c6
RE
395#ifdef CRYPTO_IDEA_SUBSET
396#ifndef NO_IDEA
397#include "idea/i_cbc.c"
398#include "idea/i_cfb64.c"
399#include "idea/i_ecb.c"
400#include "idea/i_ofb64.c"
401#include "idea/i_skey.c"
402#endif
403#endif
58964a49
RE
404
405#ifdef CRYPTO_BLOWFISH_SUBSET
d02b48c6
RE
406#ifndef NO_BLOWFISH
407#include "bf/bf_cfb64.c"
408#include "bf/bf_ecb.c"
409#ifndef BF_ASM
410#include "bf/bf_enc.c"
411#endif
d02b48c6
RE
412#include "bf/bf_ofb64.c"
413#include "bf/bf_skey.c"
414#endif
415#endif
58964a49
RE
416
417#ifdef CRYPTO_CAST_SUBSET
418#ifndef NO_CAST
419#include "cast/c_cfb64.c"
420#include "cast/c_ecb.c"
421#ifndef CAST_ASM
422#include "cast/c_enc.c"
423#endif
424#include "cast/c_ofb64.c"
425#include "cast/c_skey.c"
426#endif
427#endif
428
d02b48c6
RE
429#ifdef CRYPTO_LHASH_SUBSET
430#include "lhash/lh_stats.c"
431#include "lhash/lhash.c"
432#endif
58964a49 433
d02b48c6
RE
434#ifdef CRYPTO_MD_SUBSET
435#ifndef NO_MD2
58964a49
RE
436#include "md2/md2_dgst.c"
437#include "md2/md2_one.c"
d02b48c6
RE
438#include "evp/m_md2.c"
439#endif
440#ifndef NO_MD5
58964a49
RE
441#include "md5/md5_dgst.c"
442#include "md5/md5_one.c"
d02b48c6
RE
443#include "evp/m_md5.c"
444#endif
445#endif
58964a49 446
d02b48c6
RE
447#ifdef CRYPTO_MDC2_SUBSET
448#ifndef NO_MDC2
449#include "mdc2/mdc2dgst.c"
450#include "mdc2/mdc2_one.c"
451#include "evp/m_mdc2.c"
452#endif
453#endif
58964a49 454
d02b48c6
RE
455#ifdef CRYPTO_OBJECTS_SUBSET
456#include "objects/obj_dat.c"
457#include "objects/obj_err.c"
458#include "objects/obj_lib.c"
459#endif
58964a49 460
d02b48c6
RE
461#ifdef CRYPTO_PEM_SUBSET
462#include "pem/pem_err.c"
463#include "pem/pem_info.c"
464#include "pem/pem_lib.c"
465#include "pem/pem_all.c"
466#ifndef NO_RSA
467#include "pem/pem_seal.c"
468#include "pem/pem_sign.c"
469#endif
470#endif
58964a49 471
d02b48c6
RE
472#ifdef CRYPTO_RAND_SUBSET
473#include "rand/md_rand.c"
474#include "rand/randfile.c"
475#endif
58964a49 476
d02b48c6 477#ifdef CRYPTO_RC_SUBSET
58964a49 478#ifndef NO_RC2
d02b48c6
RE
479#include "rc2/rc2_cbc.c"
480#include "rc2/rc2_ecb.c"
481#include "rc2/rc2_skey.c"
482#include "rc2/rc2cfb64.c"
483#include "rc2/rc2ofb64.c"
58964a49
RE
484#endif
485#ifndef NO_RC4
486#include "rc4/rc4_skey.c"
487#ifndef RC4_ASM
d02b48c6
RE
488#include "rc4/rc4_enc.c"
489#endif
490#endif
58964a49
RE
491#endif
492
493#ifdef CRYPTO_HMAC_SUBSET
494#include "hmac/hmac.c"
495#endif
496
d02b48c6
RE
497#ifdef CRYPTO_RSA_SUBSET
498#ifndef NO_RSA
58964a49 499#include "rsa/rsa_eay.c"
d02b48c6
RE
500#include "rsa/rsa_err.c"
501#include "rsa/rsa_gen.c"
502#include "rsa/rsa_lib.c"
503#include "rsa/rsa_sign.c"
504#include "rsa/rsa_saos.c"
505#endif
506#endif
58964a49 507
d02b48c6
RE
508#ifdef CRYPTO_SHA1_SUBSET
509#ifndef NO_SHA1
510#include "sha/sha1_one.c"
511#include "sha/sha1dgst.c"
512#include "evp/m_dss1.c"
513#include "evp/m_sha1.c"
514#endif
515#endif
58964a49 516
d02b48c6
RE
517#ifdef CRYPTO_SHA_SUBSET
518#ifndef NO_SHA
519#include "evp/m_dss.c"
520#include "sha/sha_dgst.c"
521#include "sha/sha_one.c"
522#include "evp/m_sha.c"
523#endif
524#endif
58964a49 525
d02b48c6
RE
526#ifdef CRYPTO_STACK_SUBSET
527#include "stack/stack.c"
528#endif
58964a49 529
d02b48c6
RE
530#ifdef CRYPTO_TXT_DB_SUBSET
531#include "txt_db/txt_db.c"
532#endif
58964a49 533
d02b48c6
RE
534#ifdef CRYPTO_X509_SUBSET
535#include "x509/x509_cmp.c"
536#include "x509/x509_d2.c"
537#include "x509/x509_def.c"
538#include "x509/x509_err.c"
539#include "x509/x509_ext.c"
540#include "x509/x509_lu.c"
541#include "x509/x509_obj.c"
542#include "x509/x509_r2x.c"
543#include "x509/x509_req.c"
544#include "x509/x509_set.c"
545#include "x509/x509_v3.c"
546#include "x509/x509_vfy.c"
547#include "x509/x509name.c"
548#include "x509/x509pack.c"
549#include "x509/x509rset.c"
550#include "x509/x509type.c"
551#include "x509/x_all.c"
552#include "x509/x509_txt.c"
553#include "x509/by_dir.c"
554#include "x509/by_file.c"
555#include "x509/v3_net.c"
556#include "x509/v3_x509.c"
557#endif
58964a49
RE
558
559
560#ifdef CRYPTO_PKCS7_SUBSET /* I have an explicit removal of 7 lines */
d02b48c6
RE
561#include "pkcs7/pk7_lib.c"
562#include "pkcs7/pkcs7err.c"
58964a49
RE
563#include "pkcs7/pk7_doit.c"
564#endif /* CRYPTO_PKCS7_SUBSET */
d02b48c6 565