diff options
author | ryker <> | 1998-10-05 20:13:14 +0000 |
---|---|---|
committer | ryker <> | 1998-10-05 20:13:14 +0000 |
commit | aeeae06a79815dc190061534d47236cec09f9e32 (patch) | |
tree | 851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libcrypto/evp/evp.h | |
parent | a4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff) | |
download | openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.gz openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.bz2 openbsd-aeeae06a79815dc190061534d47236cec09f9e32.zip |
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs.
Note that routines such as sslv2_init and friends that use RSA will
not work due to lack of RSA in this library.
Needs documentation and help from ports for easy upgrade to full
functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/evp/evp.h')
-rw-r--r-- | src/lib/libcrypto/evp/evp.h | 793 |
1 files changed, 793 insertions, 0 deletions
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h new file mode 100644 index 0000000000..b39fad93a4 --- /dev/null +++ b/src/lib/libcrypto/evp/evp.h | |||
@@ -0,0 +1,793 @@ | |||
1 | /* crypto/evp/evp.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 | #ifndef HEADER_ENVELOPE_H | ||
60 | #define HEADER_ENVELOPE_H | ||
61 | |||
62 | #ifdef __cplusplus | ||
63 | extern "C" { | ||
64 | #endif | ||
65 | |||
66 | #ifndef NO_MD2 | ||
67 | #include "md2.h" | ||
68 | #endif | ||
69 | #ifndef NO_MD5 | ||
70 | #include "md5.h" | ||
71 | #endif | ||
72 | #if !defined(NO_SHA) || !defined(NO_SHA1) | ||
73 | #include "sha.h" | ||
74 | #endif | ||
75 | #ifndef NO_RIPEMD | ||
76 | #include "ripemd.h" | ||
77 | #endif | ||
78 | #ifndef NO_DES | ||
79 | #include "des.h" | ||
80 | #endif | ||
81 | #ifndef NO_RC4 | ||
82 | #include "rc4.h" | ||
83 | #endif | ||
84 | #ifndef NO_RC2 | ||
85 | #include "rc2.h" | ||
86 | #endif | ||
87 | #ifndef NO_RC5 | ||
88 | #include "rc5.h" | ||
89 | #endif | ||
90 | #ifndef NO_BLOWFISH | ||
91 | #include "blowfish.h" | ||
92 | #endif | ||
93 | #ifndef NO_CAST | ||
94 | #include "cast.h" | ||
95 | #endif | ||
96 | #ifndef NO_IDEA | ||
97 | #include "idea.h" | ||
98 | #endif | ||
99 | #ifndef NO_MDC2 | ||
100 | #include "mdc2.h" | ||
101 | #endif | ||
102 | |||
103 | #define EVP_RC2_KEY_SIZE 16 | ||
104 | #define EVP_RC4_KEY_SIZE 16 | ||
105 | #define EVP_BLOWFISH_KEY_SIZE 16 | ||
106 | #define EVP_CAST5_KEY_SIZE 16 | ||
107 | #define EVP_RC5_32_12_16_KEY_SIZE 16 | ||
108 | #define EVP_MAX_MD_SIZE (16+20) /* The SSLv3 md5+sha1 type */ | ||
109 | #define EVP_MAX_KEY_LENGTH 24 | ||
110 | #define EVP_MAX_IV_LENGTH 8 | ||
111 | |||
112 | #ifndef NO_RSA | ||
113 | #include "rsa.h" | ||
114 | #else | ||
115 | #define RSA long | ||
116 | #endif | ||
117 | |||
118 | #ifndef NO_DSA | ||
119 | #include "dsa.h" | ||
120 | #else | ||
121 | #define DSA long | ||
122 | #endif | ||
123 | |||
124 | #ifndef NO_DH | ||
125 | #include "dh.h" | ||
126 | #else | ||
127 | #define DH long | ||
128 | #endif | ||
129 | |||
130 | #include "objects.h" | ||
131 | |||
132 | #define EVP_PK_RSA 0x0001 | ||
133 | #define EVP_PK_DSA 0x0002 | ||
134 | #define EVP_PK_DH 0x0004 | ||
135 | #define EVP_PKT_SIGN 0x0010 | ||
136 | #define EVP_PKT_ENC 0x0020 | ||
137 | #define EVP_PKT_EXCH 0x0040 | ||
138 | #define EVP_PKS_RSA 0x0100 | ||
139 | #define EVP_PKS_DSA 0x0200 | ||
140 | #define EVP_PKT_EXP 0x1000 /* <= 512 bit key */ | ||
141 | |||
142 | #define EVP_PKEY_NONE NID_undef | ||
143 | #define EVP_PKEY_RSA NID_rsaEncryption | ||
144 | #define EVP_PKEY_RSA2 NID_rsa | ||
145 | #define EVP_PKEY_DSA NID_dsa | ||
146 | #define EVP_PKEY_DSA1 NID_dsa_2 | ||
147 | #define EVP_PKEY_DSA2 NID_dsaWithSHA | ||
148 | #define EVP_PKEY_DSA3 NID_dsaWithSHA1 | ||
149 | #define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 | ||
150 | #define EVP_PKEY_DH NID_dhKeyAgreement | ||
151 | |||
152 | /* Type needs to be a bit field | ||
153 | * Sub-type needs to be for variations on the method, as in, can it do | ||
154 | * arbitary encryption.... */ | ||
155 | typedef struct evp_pkey_st | ||
156 | { | ||
157 | int type; | ||
158 | int save_type; | ||
159 | int references; | ||
160 | union { | ||
161 | char *ptr; | ||
162 | struct rsa_st *rsa; /* RSA */ | ||
163 | struct dsa_st *dsa; /* DSA */ | ||
164 | struct dh_st *dh; /* DH */ | ||
165 | } pkey; | ||
166 | int save_parameters; | ||
167 | #ifdef HEADER_STACK_H | ||
168 | STACK /* X509_ATTRIBUTE */ *attributes; /* [ 0 ] */ | ||
169 | #else | ||
170 | char /* X509_ATTRIBUTE */ *attributes; /* [ 0 ] */ | ||
171 | #endif | ||
172 | } EVP_PKEY; | ||
173 | |||
174 | #define EVP_PKEY_MO_SIGN 0x0001 | ||
175 | #define EVP_PKEY_MO_VERIFY 0x0002 | ||
176 | #define EVP_PKEY_MO_ENCRYPT 0x0004 | ||
177 | #define EVP_PKEY_MO_DECRYPT 0x0008 | ||
178 | |||
179 | #if 0 | ||
180 | /* This structure is required to tie the message digest and signing together. | ||
181 | * The lookup can be done by md/pkey_method, oid, oid/pkey_method, or | ||
182 | * oid, md and pkey. | ||
183 | * This is required because for various smart-card perform the digest and | ||
184 | * signing/verification on-board. To handle this case, the specific | ||
185 | * EVP_MD and EVP_PKEY_METHODs need to be closely associated. | ||
186 | * When a PKEY is created, it will have a EVP_PKEY_METHOD ossociated with it. | ||
187 | * This can either be software or a token to provide the required low level | ||
188 | * routines. | ||
189 | */ | ||
190 | typedef struct evp_pkey_md_st | ||
191 | { | ||
192 | int oid; | ||
193 | EVP_MD *md; | ||
194 | EVP_PKEY_METHOD *pkey; | ||
195 | } EVP_PKEY_MD; | ||
196 | |||
197 | #define EVP_rsa_md2() | ||
198 | EVP_PKEY_MD_add(NID_md2WithRSAEncryption,\ | ||
199 | EVP_rsa_pkcs1(),EVP_md2()) | ||
200 | #define EVP_rsa_md5() | ||
201 | EVP_PKEY_MD_add(NID_md5WithRSAEncryption,\ | ||
202 | EVP_rsa_pkcs1(),EVP_md5()) | ||
203 | #define EVP_rsa_sha0() | ||
204 | EVP_PKEY_MD_add(NID_shaWithRSAEncryption,\ | ||
205 | EVP_rsa_pkcs1(),EVP_sha()) | ||
206 | #define EVP_rsa_sha1() | ||
207 | EVP_PKEY_MD_add(NID_sha1WithRSAEncryption,\ | ||
208 | EVP_rsa_pkcs1(),EVP_sha1()) | ||
209 | #define EVP_rsa_ripemd160() | ||
210 | EVP_PKEY_MD_add(NID_ripemd160WithRSA,\ | ||
211 | EVP_rsa_pkcs1(),EVP_ripemd160()) | ||
212 | #define EVP_rsa_mdc2() | ||
213 | EVP_PKEY_MD_add(NID_mdc2WithRSA,\ | ||
214 | EVP_rsa_octet_string(),EVP_mdc2()) | ||
215 | #define EVP_dsa_sha() | ||
216 | EVP_PKEY_MD_add(NID_dsaWithSHA,\ | ||
217 | EVP_dsa(),EVP_mdc2()) | ||
218 | #define EVP_dsa_sha1() | ||
219 | EVP_PKEY_MD_add(NID_dsaWithSHA1,\ | ||
220 | EVP_dsa(),EVP_sha1()) | ||
221 | |||
222 | typedef struct evp_pkey_method_st | ||
223 | { | ||
224 | char *name; | ||
225 | int flags; | ||
226 | int type; /* RSA, DSA, an SSLeay specific constant */ | ||
227 | int oid; /* For the pub-key type */ | ||
228 | int encrypt_oid; /* pub/priv key encryption */ | ||
229 | |||
230 | int (*sign)(); | ||
231 | int (*verify)(); | ||
232 | struct { | ||
233 | int | ||
234 | int (*set)(); /* get and/or set the underlying type */ | ||
235 | int (*get)(); | ||
236 | int (*encrypt)(); | ||
237 | int (*decrypt)(); | ||
238 | int (*i2d)(); | ||
239 | int (*d2i)(); | ||
240 | int (*dup)(); | ||
241 | } pub,priv; | ||
242 | int (*set_asn1_parameters)(); | ||
243 | int (*get_asn1_parameters)(); | ||
244 | } EVP_PKEY_METHOD; | ||
245 | #endif | ||
246 | |||
247 | #ifndef EVP_MD | ||
248 | typedef struct env_md_st | ||
249 | { | ||
250 | int type; | ||
251 | int pkey_type; | ||
252 | int md_size; | ||
253 | void (*init)(); | ||
254 | void (*update)(); | ||
255 | void (*final)(); | ||
256 | |||
257 | int (*sign)(); | ||
258 | int (*verify)(); | ||
259 | int required_pkey_type[5]; /*EVP_PKEY_xxx */ | ||
260 | int block_size; | ||
261 | int ctx_size; /* how big does the ctx need to be */ | ||
262 | } EVP_MD; | ||
263 | |||
264 | #define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} | ||
265 | |||
266 | #ifndef NO_DSA | ||
267 | #define EVP_PKEY_DSA_method DSA_sign,DSA_verify, \ | ||
268 | {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ | ||
269 | EVP_PKEY_DSA4,0} | ||
270 | #else | ||
271 | #define EVP_PKEY_DSA_method EVP_PKEY_NULL_method | ||
272 | #endif | ||
273 | |||
274 | #ifndef NO_RSA | ||
275 | #define EVP_PKEY_RSA_method RSA_sign,RSA_verify, \ | ||
276 | {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} | ||
277 | #define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ | ||
278 | RSA_sign_ASN1_OCTET_STRING, \ | ||
279 | RSA_verify_ASN1_OCTET_STRING, \ | ||
280 | {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} | ||
281 | #else | ||
282 | #define EVP_PKEY_RSA_method EVP_PKEY_NULL_method | ||
283 | #define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method | ||
284 | #endif | ||
285 | |||
286 | #endif /* !EVP_MD */ | ||
287 | |||
288 | typedef struct env_md_ctx_st | ||
289 | { | ||
290 | EVP_MD *digest; | ||
291 | union { | ||
292 | unsigned char base[4]; | ||
293 | #ifndef NO_MD2 | ||
294 | MD2_CTX md2; | ||
295 | #endif | ||
296 | #ifndef NO_MD5 | ||
297 | MD5_CTX md5; | ||
298 | #endif | ||
299 | #ifndef NO_MD5 | ||
300 | RIPEMD160_CTX ripemd160; | ||
301 | #endif | ||
302 | #if !defined(NO_SHA) || !defined(NO_SHA1) | ||
303 | SHA_CTX sha; | ||
304 | #endif | ||
305 | #ifndef NO_MDC2 | ||
306 | MDC2_CTX mdc2; | ||
307 | #endif | ||
308 | } md; | ||
309 | } EVP_MD_CTX; | ||
310 | |||
311 | typedef struct evp_cipher_st | ||
312 | { | ||
313 | int nid; | ||
314 | int block_size; | ||
315 | int key_len; | ||
316 | int iv_len; | ||
317 | void (*init)(); /* init for encryption */ | ||
318 | void (*do_cipher)(); /* encrypt data */ | ||
319 | void (*cleanup)(); /* used by cipher method */ | ||
320 | int ctx_size; /* how big the ctx needs to be */ | ||
321 | /* int set_asn1_parameters(EVP_CIPHER_CTX,ASN1_TYPE *); */ | ||
322 | int (*set_asn1_parameters)(); /* Populate a ASN1_TYPE with parameters */ | ||
323 | /* int get_asn1_parameters(EVP_CIPHER_CTX,ASN1_TYPE *); */ | ||
324 | int (*get_asn1_parameters)(); /* Get parameters from a ASN1_TYPE */ | ||
325 | } EVP_CIPHER; | ||
326 | |||
327 | typedef struct evp_cipher_info_st | ||
328 | { | ||
329 | EVP_CIPHER *cipher; | ||
330 | unsigned char iv[EVP_MAX_IV_LENGTH]; | ||
331 | } EVP_CIPHER_INFO; | ||
332 | |||
333 | typedef struct evp_cipher_ctx_st | ||
334 | { | ||
335 | EVP_CIPHER *cipher; | ||
336 | int encrypt; /* encrypt or decrypt */ | ||
337 | int buf_len; /* number we have left */ | ||
338 | |||
339 | unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ | ||
340 | unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ | ||
341 | unsigned char buf[EVP_MAX_IV_LENGTH]; /* saved partial block */ | ||
342 | int num; /* used by cfb/ofb mode */ | ||
343 | |||
344 | char *app_data; /* aplication stuff */ | ||
345 | union { | ||
346 | #ifndef NO_RC4 | ||
347 | struct | ||
348 | { | ||
349 | unsigned char key[EVP_RC4_KEY_SIZE]; | ||
350 | RC4_KEY ks; /* working key */ | ||
351 | } rc4; | ||
352 | #endif | ||
353 | #ifndef NO_DES | ||
354 | des_key_schedule des_ks;/* key schedule */ | ||
355 | struct | ||
356 | { | ||
357 | des_key_schedule ks;/* key schedule */ | ||
358 | C_Block inw; | ||
359 | C_Block outw; | ||
360 | } desx_cbc; | ||
361 | struct | ||
362 | { | ||
363 | des_key_schedule ks1;/* key schedule */ | ||
364 | des_key_schedule ks2;/* key schedule (for ede) */ | ||
365 | des_key_schedule ks3;/* key schedule (for ede3) */ | ||
366 | } des_ede; | ||
367 | #endif | ||
368 | #ifndef NO_IDEA | ||
369 | IDEA_KEY_SCHEDULE idea_ks;/* key schedule */ | ||
370 | #endif | ||
371 | #ifndef NO_RC2 | ||
372 | RC2_KEY rc2_ks;/* key schedule */ | ||
373 | #endif | ||
374 | #ifndef NO_RC5 | ||
375 | RC5_32_KEY rc5_ks;/* key schedule */ | ||
376 | #endif | ||
377 | #ifndef NO_BLOWFISH | ||
378 | BF_KEY bf_ks;/* key schedule */ | ||
379 | #endif | ||
380 | #ifndef NO_CAST | ||
381 | CAST_KEY cast_ks;/* key schedule */ | ||
382 | #endif | ||
383 | } c; | ||
384 | } EVP_CIPHER_CTX; | ||
385 | |||
386 | typedef struct evp_Encode_Ctx_st | ||
387 | { | ||
388 | int num; /* number saved in a partial encode/decode */ | ||
389 | int length; /* The length is either the output line length | ||
390 | * (in input bytes) or the shortest input line | ||
391 | * length that is ok. Once decoding begins, | ||
392 | * the length is adjusted up each time a longer | ||
393 | * line is decoded */ | ||
394 | unsigned char enc_data[80]; /* data to encode */ | ||
395 | int line_num; /* number read on current line */ | ||
396 | int expect_nl; | ||
397 | } EVP_ENCODE_CTX; | ||
398 | |||
399 | #define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ | ||
400 | (char *)(rsa)) | ||
401 | #define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ | ||
402 | (char *)(dsa)) | ||
403 | #define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ | ||
404 | (char *)(dh)) | ||
405 | |||
406 | /* Add some extra combinations */ | ||
407 | #define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) | ||
408 | #define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) | ||
409 | #define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) | ||
410 | #define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) | ||
411 | |||
412 | #define EVP_MD_type(e) ((e)->type) | ||
413 | #define EVP_MD_pkey_type(e) ((e)->pkey_type) | ||
414 | #define EVP_MD_size(e) ((e)->md_size) | ||
415 | #define EVP_MD_block_size(e) ((e)->block_size) | ||
416 | |||
417 | #define EVP_MD_CTX_size(e) EVP_MD_size((e)->digest) | ||
418 | #define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)->digest) | ||
419 | #define EVP_MD_CTX_type(e) ((e)->digest) | ||
420 | |||
421 | #define EVP_CIPHER_nid(e) ((e)->nid) | ||
422 | #define EVP_CIPHER_block_size(e) ((e)->block_size) | ||
423 | #define EVP_CIPHER_key_length(e) ((e)->key_len) | ||
424 | #define EVP_CIPHER_iv_length(e) ((e)->iv_len) | ||
425 | |||
426 | #define EVP_CIPHER_CTX_cipher(e) ((e)->cipher) | ||
427 | #define EVP_CIPHER_CTX_nid(e) ((e)->cipher->nid) | ||
428 | #define EVP_CIPHER_CTX_block_size(e) ((e)->cipher->block_size) | ||
429 | #define EVP_CIPHER_CTX_key_length(e) ((e)->cipher->key_len) | ||
430 | #define EVP_CIPHER_CTX_iv_length(e) ((e)->cipher->iv_len) | ||
431 | #define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data) | ||
432 | #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d)) | ||
433 | |||
434 | #define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) | ||
435 | #define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) | ||
436 | |||
437 | #define EVP_SignInit(a,b) EVP_DigestInit(a,b) | ||
438 | #define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) | ||
439 | #define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) | ||
440 | #define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) | ||
441 | #define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) | ||
442 | #define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) | ||
443 | |||
444 | #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) | ||
445 | #define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) | ||
446 | #define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) | ||
447 | #define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) | ||
448 | |||
449 | #define EVP_Cipher(c,o,i,l) (c)->cipher->do_cipher((c),(o),(i),(l)) | ||
450 | |||
451 | #ifndef NOPROTO | ||
452 | |||
453 | void EVP_DigestInit(EVP_MD_CTX *ctx, EVP_MD *type); | ||
454 | void EVP_DigestUpdate(EVP_MD_CTX *ctx,unsigned char *d,unsigned int cnt); | ||
455 | void EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s); | ||
456 | |||
457 | int EVP_read_pw_string(char *buf,int length,char *prompt,int verify); | ||
458 | void EVP_set_pw_prompt(char *prompt); | ||
459 | char * EVP_get_pw_prompt(void); | ||
460 | |||
461 | int EVP_BytesToKey(EVP_CIPHER *type,EVP_MD *md,unsigned char *salt, | ||
462 | unsigned char *data, int datal, int count, | ||
463 | unsigned char *key,unsigned char *iv); | ||
464 | |||
465 | EVP_CIPHER *EVP_get_cipherbyname(char *name); | ||
466 | |||
467 | void EVP_EncryptInit(EVP_CIPHER_CTX *ctx,EVP_CIPHER *type, | ||
468 | unsigned char *key, unsigned char *iv); | ||
469 | void EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
470 | int *outl, unsigned char *in, int inl); | ||
471 | void EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); | ||
472 | |||
473 | void EVP_DecryptInit(EVP_CIPHER_CTX *ctx,EVP_CIPHER *type, | ||
474 | unsigned char *key, unsigned char *iv); | ||
475 | void EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
476 | int *outl, unsigned char *in, int inl); | ||
477 | int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); | ||
478 | |||
479 | void EVP_CipherInit(EVP_CIPHER_CTX *ctx,EVP_CIPHER *type, unsigned char *key, | ||
480 | unsigned char *iv,int enc); | ||
481 | void EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
482 | int *outl, unsigned char *in, int inl); | ||
483 | int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); | ||
484 | |||
485 | int EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s, | ||
486 | EVP_PKEY *pkey); | ||
487 | |||
488 | int EVP_VerifyFinal(EVP_MD_CTX *ctx,unsigned char *sigbuf, | ||
489 | unsigned int siglen,EVP_PKEY *pkey); | ||
490 | |||
491 | int EVP_OpenInit(EVP_CIPHER_CTX *ctx,EVP_CIPHER *type,unsigned char *ek, | ||
492 | int ekl,unsigned char *iv,EVP_PKEY *priv); | ||
493 | int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); | ||
494 | |||
495 | int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek, | ||
496 | int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk); | ||
497 | void EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl); | ||
498 | |||
499 | void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); | ||
500 | void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out, | ||
501 | int *outl,unsigned char *in,int inl); | ||
502 | void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl); | ||
503 | int EVP_EncodeBlock(unsigned char *t, unsigned char *f, int n); | ||
504 | |||
505 | void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); | ||
506 | int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl, | ||
507 | unsigned char *in, int inl); | ||
508 | int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned | ||
509 | char *out, int *outl); | ||
510 | int EVP_DecodeBlock(unsigned char *t, unsigned | ||
511 | char *f, int n); | ||
512 | |||
513 | void ERR_load_EVP_strings(void ); | ||
514 | |||
515 | void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); | ||
516 | void EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); | ||
517 | |||
518 | #ifdef HEADER_BIO_H | ||
519 | BIO_METHOD *BIO_f_md(void); | ||
520 | BIO_METHOD *BIO_f_base64(void); | ||
521 | BIO_METHOD *BIO_f_cipher(void); | ||
522 | void BIO_set_cipher(BIO *b,EVP_CIPHER *c,unsigned char *k, | ||
523 | unsigned char *i, int enc); | ||
524 | #endif | ||
525 | |||
526 | EVP_MD *EVP_md_null(void); | ||
527 | EVP_MD *EVP_md2(void); | ||
528 | EVP_MD *EVP_md5(void); | ||
529 | EVP_MD *EVP_sha(void); | ||
530 | EVP_MD *EVP_sha1(void); | ||
531 | EVP_MD *EVP_dss(void); | ||
532 | EVP_MD *EVP_dss1(void); | ||
533 | EVP_MD *EVP_mdc2(void); | ||
534 | EVP_MD *EVP_ripemd160(void); | ||
535 | |||
536 | EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ | ||
537 | EVP_CIPHER *EVP_des_ecb(void); | ||
538 | EVP_CIPHER *EVP_des_ede(void); | ||
539 | EVP_CIPHER *EVP_des_ede3(void); | ||
540 | EVP_CIPHER *EVP_des_cfb(void); | ||
541 | EVP_CIPHER *EVP_des_ede_cfb(void); | ||
542 | EVP_CIPHER *EVP_des_ede3_cfb(void); | ||
543 | EVP_CIPHER *EVP_des_ofb(void); | ||
544 | EVP_CIPHER *EVP_des_ede_ofb(void); | ||
545 | EVP_CIPHER *EVP_des_ede3_ofb(void); | ||
546 | EVP_CIPHER *EVP_des_cbc(void); | ||
547 | EVP_CIPHER *EVP_des_ede_cbc(void); | ||
548 | EVP_CIPHER *EVP_des_ede3_cbc(void); | ||
549 | EVP_CIPHER *EVP_desx_cbc(void); | ||
550 | EVP_CIPHER *EVP_rc4(void); | ||
551 | EVP_CIPHER *EVP_rc4_40(void); | ||
552 | EVP_CIPHER *EVP_idea_ecb(void); | ||
553 | EVP_CIPHER *EVP_idea_cfb(void); | ||
554 | EVP_CIPHER *EVP_idea_ofb(void); | ||
555 | EVP_CIPHER *EVP_idea_cbc(void); | ||
556 | EVP_CIPHER *EVP_rc2_ecb(void); | ||
557 | EVP_CIPHER *EVP_rc2_cbc(void); | ||
558 | EVP_CIPHER *EVP_rc2_40_cbc(void); | ||
559 | EVP_CIPHER *EVP_rc2_cfb(void); | ||
560 | EVP_CIPHER *EVP_rc2_ofb(void); | ||
561 | EVP_CIPHER *EVP_bf_ecb(void); | ||
562 | EVP_CIPHER *EVP_bf_cbc(void); | ||
563 | EVP_CIPHER *EVP_bf_cfb(void); | ||
564 | EVP_CIPHER *EVP_bf_ofb(void); | ||
565 | EVP_CIPHER *EVP_cast5_ecb(void); | ||
566 | EVP_CIPHER *EVP_cast5_cbc(void); | ||
567 | EVP_CIPHER *EVP_cast5_cfb(void); | ||
568 | EVP_CIPHER *EVP_cast5_ofb(void); | ||
569 | EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); | ||
570 | EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); | ||
571 | EVP_CIPHER *EVP_rc5_32_12_16_cfb(void); | ||
572 | EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); | ||
573 | |||
574 | void SSLeay_add_all_algorithms(void); | ||
575 | void SSLeay_add_all_ciphers(void); | ||
576 | void SSLeay_add_all_digests(void); | ||
577 | |||
578 | int EVP_add_cipher(EVP_CIPHER *cipher); | ||
579 | int EVP_add_digest(EVP_MD *digest); | ||
580 | int EVP_add_alias(char *name,char *alias); | ||
581 | int EVP_delete_alias(char *name); | ||
582 | |||
583 | EVP_CIPHER *EVP_get_cipherbyname(char *name); | ||
584 | EVP_MD *EVP_get_digestbyname(char *name); | ||
585 | void EVP_cleanup(void); | ||
586 | |||
587 | int EVP_PKEY_decrypt(unsigned char *dec_key,unsigned char *enc_key, | ||
588 | int enc_key_len,EVP_PKEY *private_key); | ||
589 | int EVP_PKEY_encrypt(unsigned char *enc_key, | ||
590 | unsigned char *key,int key_len,EVP_PKEY *pub_key); | ||
591 | int EVP_PKEY_type(int type); | ||
592 | int EVP_PKEY_bits(EVP_PKEY *pkey); | ||
593 | int EVP_PKEY_size(EVP_PKEY *pkey); | ||
594 | int EVP_PKEY_assign(EVP_PKEY *pkey,int type,char *key); | ||
595 | EVP_PKEY * EVP_PKEY_new(void); | ||
596 | void EVP_PKEY_free(EVP_PKEY *pkey); | ||
597 | EVP_PKEY * d2i_PublicKey(int type,EVP_PKEY **a, unsigned char **pp, | ||
598 | long length); | ||
599 | int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); | ||
600 | |||
601 | EVP_PKEY * d2i_PrivateKey(int type,EVP_PKEY **a, unsigned char **pp, | ||
602 | long length); | ||
603 | int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); | ||
604 | |||
605 | int EVP_PKEY_copy_parameters(EVP_PKEY *to,EVP_PKEY *from); | ||
606 | int EVP_PKEY_missing_parameters(EVP_PKEY *pkey); | ||
607 | int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode); | ||
608 | int EVP_PKEY_cmp_parameters(EVP_PKEY *a,EVP_PKEY *b); | ||
609 | |||
610 | /* calls methods */ | ||
611 | int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); | ||
612 | int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); | ||
613 | |||
614 | /* These are used by EVP_CIPHER methods */ | ||
615 | int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type); | ||
616 | int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type); | ||
617 | |||
618 | #else | ||
619 | |||
620 | void EVP_DigestInit(); | ||
621 | void EVP_DigestUpdate(); | ||
622 | void EVP_DigestFinal(); | ||
623 | |||
624 | int EVP_read_pw_string(); | ||
625 | void EVP_set_pw_prompt(); | ||
626 | char * EVP_get_pw_prompt(); | ||
627 | |||
628 | int EVP_BytesToKey(); | ||
629 | |||
630 | EVP_CIPHER *EVP_get_cipherbyname(); | ||
631 | |||
632 | void EVP_EncryptInit(); | ||
633 | void EVP_EncryptUpdate(); | ||
634 | void EVP_EncryptFinal(); | ||
635 | |||
636 | void EVP_DecryptInit(); | ||
637 | void EVP_DecryptUpdate(); | ||
638 | int EVP_DecryptFinal(); | ||
639 | |||
640 | void EVP_CipherInit(); | ||
641 | void EVP_CipherUpdate(); | ||
642 | int EVP_CipherFinal(); | ||
643 | |||
644 | int EVP_SignFinal(); | ||
645 | |||
646 | int EVP_VerifyFinal(); | ||
647 | |||
648 | int EVP_OpenInit(); | ||
649 | int EVP_OpenFinal(); | ||
650 | |||
651 | int EVP_SealInit(); | ||
652 | void EVP_SealFinal(); | ||
653 | |||
654 | void EVP_EncodeInit(); | ||
655 | void EVP_EncodeUpdate(); | ||
656 | void EVP_EncodeFinal(); | ||
657 | int EVP_EncodeBlock(); | ||
658 | |||
659 | void EVP_DecodeInit(); | ||
660 | int EVP_DecodeUpdate(); | ||
661 | int EVP_DecodeFinal(); | ||
662 | int EVP_DecodeBlock(); | ||
663 | |||
664 | void ERR_load_EVP_strings(); | ||
665 | |||
666 | void EVP_CIPHER_CTX_init(); | ||
667 | void EVP_CIPHER_CTX_cleanup(); | ||
668 | |||
669 | #ifdef HEADER_BIO_H | ||
670 | BIO_METHOD *BIO_f_md(); | ||
671 | BIO_METHOD *BIO_f_base64(); | ||
672 | BIO_METHOD *BIO_f_cipher(); | ||
673 | void BIO_set_cipher(); | ||
674 | #endif | ||
675 | |||
676 | EVP_MD *EVP_md_null(); | ||
677 | EVP_MD *EVP_md2(); | ||
678 | EVP_MD *EVP_md5(); | ||
679 | EVP_MD *EVP_sha(); | ||
680 | EVP_MD *EVP_sha1(); | ||
681 | EVP_MD *EVP_dss(); | ||
682 | EVP_MD *EVP_dss1(); | ||
683 | EVP_MD *EVP_mdc2(); | ||
684 | |||
685 | EVP_CIPHER *EVP_enc_null(); | ||
686 | EVP_CIPHER *EVP_des_ecb(); | ||
687 | EVP_CIPHER *EVP_des_ede(); | ||
688 | EVP_CIPHER *EVP_des_ede3(); | ||
689 | EVP_CIPHER *EVP_des_cfb(); | ||
690 | EVP_CIPHER *EVP_des_ede_cfb(); | ||
691 | EVP_CIPHER *EVP_des_ede3_cfb(); | ||
692 | EVP_CIPHER *EVP_des_ofb(); | ||
693 | EVP_CIPHER *EVP_des_ede_ofb(); | ||
694 | EVP_CIPHER *EVP_des_ede3_ofb(); | ||
695 | EVP_CIPHER *EVP_des_cbc(); | ||
696 | EVP_CIPHER *EVP_des_ede_cbc(); | ||
697 | EVP_CIPHER *EVP_des_ede3_cbc(); | ||
698 | EVP_CIPHER *EVP_desx_cbc(); | ||
699 | EVP_CIPHER *EVP_rc4(); | ||
700 | EVP_CIPHER *EVP_rc4_40(); | ||
701 | EVP_CIPHER *EVP_idea_ecb(); | ||
702 | EVP_CIPHER *EVP_idea_cfb(); | ||
703 | EVP_CIPHER *EVP_idea_ofb(); | ||
704 | EVP_CIPHER *EVP_idea_cbc(); | ||
705 | EVP_CIPHER *EVP_rc2_ecb(); | ||
706 | EVP_CIPHER *EVP_rc2_cbc(); | ||
707 | EVP_CIPHER *EVP_rc2_40_cbc(); | ||
708 | EVP_CIPHER *EVP_rc2_cfb(); | ||
709 | EVP_CIPHER *EVP_rc2_ofb(); | ||
710 | EVP_CIPHER *EVP_bf_ecb(); | ||
711 | EVP_CIPHER *EVP_bf_cbc(); | ||
712 | EVP_CIPHER *EVP_bf_cfb(); | ||
713 | EVP_CIPHER *EVP_bf_ofb(); | ||
714 | EVP_CIPHER *EVP_cast5_ecb(); | ||
715 | EVP_CIPHER *EVP_cast5_cbc(); | ||
716 | EVP_CIPHER *EVP_cast5_cfb(); | ||
717 | EVP_CIPHER *EVP_cast5_ofb(); | ||
718 | EVP_CIPHER *EVP_rc5_32_12_16_cbc(); | ||
719 | EVP_CIPHER *EVP_rc5_32_12_16_ecb(); | ||
720 | EVP_CIPHER *EVP_rc5_32_12_16_cfb(); | ||
721 | EVP_CIPHER *EVP_rc5_32_12_16_ofb(); | ||
722 | |||
723 | void SSLeay_add_all_algorithms(); | ||
724 | void SSLeay_add_all_ciphers(); | ||
725 | void SSLeay_add_all_digests(); | ||
726 | |||
727 | int EVP_add_cipher(); | ||
728 | int EVP_add_digest(); | ||
729 | int EVP_add_alias(); | ||
730 | int EVP_delete_alias(); | ||
731 | |||
732 | EVP_CIPHER *EVP_get_cipherbyname(); | ||
733 | EVP_MD *EVP_get_digestbyname(); | ||
734 | void EVP_cleanup(); | ||
735 | |||
736 | int EVP_PKEY_decrypt(); | ||
737 | int EVP_PKEY_encrypt(); | ||
738 | int EVP_PKEY_type(); | ||
739 | int EVP_PKEY_bits(); | ||
740 | int EVP_PKEY_size(); | ||
741 | int EVP_PKEY_assign(); | ||
742 | EVP_PKEY * EVP_PKEY_new(); | ||
743 | void EVP_PKEY_free(); | ||
744 | EVP_PKEY * d2i_PublicKey(); | ||
745 | int i2d_PublicKey(); | ||
746 | |||
747 | EVP_PKEY * d2i_PrivateKey(); | ||
748 | int i2d_PrivateKey(); | ||
749 | |||
750 | int EVP_PKEY_copy_parameters(); | ||
751 | int EVP_PKEY_missing_parameters(); | ||
752 | int EVP_PKEY_save_parameters(); | ||
753 | int EVP_PKEY_cmp_parameters(); | ||
754 | |||
755 | int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); | ||
756 | int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); | ||
757 | |||
758 | int EVP_CIPHER_set_asn1_iv(); | ||
759 | int EVP_CIPHER_get_asn1_iv(); | ||
760 | |||
761 | #endif | ||
762 | |||
763 | /* BEGIN ERROR CODES */ | ||
764 | /* Error codes for the EVP functions. */ | ||
765 | |||
766 | /* Function codes. */ | ||
767 | #define EVP_F_D2I_PKEY 100 | ||
768 | #define EVP_F_EVP_DECRYPTFINAL 101 | ||
769 | #define EVP_F_EVP_OPENINIT 102 | ||
770 | #define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 | ||
771 | #define EVP_F_EVP_PKEY_DECRYPT 104 | ||
772 | #define EVP_F_EVP_PKEY_ENCRYPT 105 | ||
773 | #define EVP_F_EVP_PKEY_NEW 106 | ||
774 | #define EVP_F_EVP_SIGNFINAL 107 | ||
775 | #define EVP_F_EVP_VERIFYFINAL 108 | ||
776 | |||
777 | /* Reason codes. */ | ||
778 | #define EVP_R_BAD_DECRYPT 100 | ||
779 | #define EVP_R_DIFFERENT_KEY_TYPES 101 | ||
780 | #define EVP_R_IV_TOO_LARGE 102 | ||
781 | #define EVP_R_MISSING_PARMATERS 103 | ||
782 | #define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 | ||
783 | #define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 | ||
784 | #define EVP_R_PUBLIC_KEY_NOT_RSA 106 | ||
785 | #define EVP_R_UNSUPPORTED_CIPHER 107 | ||
786 | #define EVP_R_WRONG_FINAL_BLOCK_LENGTH 108 | ||
787 | #define EVP_R_WRONG_PUBLIC_KEY_TYPE 109 | ||
788 | |||
789 | #ifdef __cplusplus | ||
790 | } | ||
791 | #endif | ||
792 | #endif | ||
793 | |||