summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/evp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/evp.h')
-rw-r--r--src/lib/libcrypto/evp/evp.h259
1 files changed, 95 insertions, 164 deletions
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h
index bdd3b7ecaa..f29e0ba8f0 100644
--- a/src/lib/libcrypto/evp/evp.h
+++ b/src/lib/libcrypto/evp/evp.h
@@ -75,6 +75,10 @@
75#include <openssl/bio.h> 75#include <openssl/bio.h>
76#endif 76#endif
77 77
78#ifdef OPENSSL_FIPS
79#include <openssl/fips.h>
80#endif
81
78/* 82/*
79#define EVP_RC2_KEY_SIZE 16 83#define EVP_RC2_KEY_SIZE 16
80#define EVP_RC4_KEY_SIZE 16 84#define EVP_RC4_KEY_SIZE 16
@@ -82,7 +86,7 @@
82#define EVP_CAST5_KEY_SIZE 16 86#define EVP_CAST5_KEY_SIZE 16
83#define EVP_RC5_32_12_16_KEY_SIZE 16 87#define EVP_RC5_32_12_16_KEY_SIZE 16
84*/ 88*/
85#define EVP_MAX_MD_SIZE 64 /* longest known is SHA512 */ 89#define EVP_MAX_MD_SIZE 64 /* longest known SHA512 */
86#define EVP_MAX_KEY_LENGTH 32 90#define EVP_MAX_KEY_LENGTH 32
87#define EVP_MAX_IV_LENGTH 16 91#define EVP_MAX_IV_LENGTH 16
88#define EVP_MAX_BLOCK_LENGTH 32 92#define EVP_MAX_BLOCK_LENGTH 32
@@ -96,13 +100,11 @@
96#define EVP_PK_RSA 0x0001 100#define EVP_PK_RSA 0x0001
97#define EVP_PK_DSA 0x0002 101#define EVP_PK_DSA 0x0002
98#define EVP_PK_DH 0x0004 102#define EVP_PK_DH 0x0004
99#define EVP_PK_EC 0x0008
100#define EVP_PKT_SIGN 0x0010 103#define EVP_PKT_SIGN 0x0010
101#define EVP_PKT_ENC 0x0020 104#define EVP_PKT_ENC 0x0020
102#define EVP_PKT_EXCH 0x0040 105#define EVP_PKT_EXCH 0x0040
103#define EVP_PKS_RSA 0x0100 106#define EVP_PKS_RSA 0x0100
104#define EVP_PKS_DSA 0x0200 107#define EVP_PKS_DSA 0x0200
105#define EVP_PKS_EC 0x0400
106#define EVP_PKT_EXP 0x1000 /* <= 512 bit key */ 108#define EVP_PKT_EXP 0x1000 /* <= 512 bit key */
107 109
108#define EVP_PKEY_NONE NID_undef 110#define EVP_PKEY_NONE NID_undef
@@ -114,7 +116,6 @@
114#define EVP_PKEY_DSA3 NID_dsaWithSHA1 116#define EVP_PKEY_DSA3 NID_dsaWithSHA1
115#define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 117#define EVP_PKEY_DSA4 NID_dsaWithSHA1_2
116#define EVP_PKEY_DH NID_dhKeyAgreement 118#define EVP_PKEY_DH NID_dhKeyAgreement
117#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
118 119
119#ifdef __cplusplus 120#ifdef __cplusplus
120extern "C" { 121extern "C" {
@@ -139,9 +140,6 @@ struct evp_pkey_st
139#ifndef OPENSSL_NO_DH 140#ifndef OPENSSL_NO_DH
140 struct dh_st *dh; /* DH */ 141 struct dh_st *dh; /* DH */
141#endif 142#endif
142#ifndef OPENSSL_NO_EC
143 struct ec_key_st *ec; /* ECC */
144#endif
145 } pkey; 143 } pkey;
146 int save_parameters; 144 int save_parameters;
147 STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ 145 STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
@@ -227,58 +225,39 @@ struct env_md_st
227 int md_size; 225 int md_size;
228 unsigned long flags; 226 unsigned long flags;
229 int (*init)(EVP_MD_CTX *ctx); 227 int (*init)(EVP_MD_CTX *ctx);
230 int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count); 228 int (*update)(EVP_MD_CTX *ctx,const void *data,unsigned long count);
231 int (*final)(EVP_MD_CTX *ctx,unsigned char *md); 229 int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
232 int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from); 230 int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
233 int (*cleanup)(EVP_MD_CTX *ctx); 231 int (*cleanup)(EVP_MD_CTX *ctx);
234 232
235 /* FIXME: prototype these some day */ 233 /* FIXME: prototype these some day */
236 int (*sign)(int type, const unsigned char *m, unsigned int m_length, 234 int (*sign)();
237 unsigned char *sigret, unsigned int *siglen, void *key); 235 int (*verify)();
238 int (*verify)(int type, const unsigned char *m, unsigned int m_length,
239 const unsigned char *sigbuf, unsigned int siglen,
240 void *key);
241 int required_pkey_type[5]; /*EVP_PKEY_xxx */ 236 int required_pkey_type[5]; /*EVP_PKEY_xxx */
242 int block_size; 237 int block_size;
243 int ctx_size; /* how big does the ctx->md_data need to be */ 238 int ctx_size; /* how big does the ctx->md_data need to be */
244 } /* EVP_MD */; 239 } /* EVP_MD */;
245 240
246typedef int evp_sign_method(int type,const unsigned char *m,
247 unsigned int m_length,unsigned char *sigret,
248 unsigned int *siglen, void *key);
249typedef int evp_verify_method(int type,const unsigned char *m,
250 unsigned int m_length,const unsigned char *sigbuf,
251 unsigned int siglen, void *key);
252
253#define EVP_MD_FLAG_ONESHOT 0x0001 /* digest can only handle a single 241#define EVP_MD_FLAG_ONESHOT 0x0001 /* digest can only handle a single
254 * block */ 242 * block */
243#define EVP_MD_FLAG_FIPS 0x0400 /* Note if suitable for use in FIPS mode */
255 244
256#define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} 245#define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0}
257 246
258#ifndef OPENSSL_NO_DSA 247#ifndef OPENSSL_NO_DSA
259#define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ 248#define EVP_PKEY_DSA_method DSA_sign,DSA_verify, \
260 (evp_verify_method *)DSA_verify, \
261 {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ 249 {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \
262 EVP_PKEY_DSA4,0} 250 EVP_PKEY_DSA4,0}
263#else 251#else
264#define EVP_PKEY_DSA_method EVP_PKEY_NULL_method 252#define EVP_PKEY_DSA_method EVP_PKEY_NULL_method
265#endif 253#endif
266 254
267#ifndef OPENSSL_NO_ECDSA
268#define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \
269 (evp_verify_method *)ECDSA_verify, \
270 {EVP_PKEY_EC,0,0,0}
271#else
272#define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method
273#endif
274
275#ifndef OPENSSL_NO_RSA 255#ifndef OPENSSL_NO_RSA
276#define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ 256#define EVP_PKEY_RSA_method RSA_sign,RSA_verify, \
277 (evp_verify_method *)RSA_verify, \
278 {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} 257 {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
279#define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ 258#define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \
280 (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ 259 RSA_sign_ASN1_OCTET_STRING, \
281 (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ 260 RSA_verify_ASN1_OCTET_STRING, \
282 {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} 261 {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
283#else 262#else
284#define EVP_PKEY_RSA_method EVP_PKEY_NULL_method 263#define EVP_PKEY_RSA_method EVP_PKEY_NULL_method
@@ -304,6 +283,9 @@ struct env_md_ctx_st
304#define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data 283#define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data
305 * in EVP_MD_CTX_cleanup */ 284 * in EVP_MD_CTX_cleanup */
306 285
286#define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* Allow use of non FIPS digest
287 * in FIPS mode */
288
307struct evp_cipher_st 289struct evp_cipher_st
308 { 290 {
309 int nid; 291 int nid;
@@ -345,8 +327,10 @@ struct evp_cipher_st
345#define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 327#define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80
346/* Don't use standard block padding */ 328/* Don't use standard block padding */
347#define EVP_CIPH_NO_PADDING 0x100 329#define EVP_CIPH_NO_PADDING 0x100
348/* cipher handles random key generation */ 330/* Note if suitable for use in FIPS mode */
349#define EVP_CIPH_RAND_KEY 0x200 331#define EVP_CIPH_FLAG_FIPS 0x400
332/* Allow non FIPS cipher in FIPS mode */
333#define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x800
350 334
351/* ctrl() values */ 335/* ctrl() values */
352 336
@@ -356,7 +340,7 @@ struct evp_cipher_st
356#define EVP_CTRL_SET_RC2_KEY_BITS 0x3 340#define EVP_CTRL_SET_RC2_KEY_BITS 0x3
357#define EVP_CTRL_GET_RC5_ROUNDS 0x4 341#define EVP_CTRL_GET_RC5_ROUNDS 0x4
358#define EVP_CTRL_SET_RC5_ROUNDS 0x5 342#define EVP_CTRL_SET_RC5_ROUNDS 0x5
359#define EVP_CTRL_RAND_KEY 0x6 343#define EVP_CTRL_SET_ACSS_MODE 0x6
360 344
361typedef struct evp_cipher_info_st 345typedef struct evp_cipher_info_st
362 { 346 {
@@ -418,47 +402,45 @@ typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
418 (char *)(dh)) 402 (char *)(dh))
419#endif 403#endif
420 404
421#ifndef OPENSSL_NO_EC
422#define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\
423 (char *)(eckey))
424#endif
425
426/* Add some extra combinations */ 405/* Add some extra combinations */
427#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) 406#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
428#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) 407#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
429#define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) 408#define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
430#define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) 409#define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
431 410
432int EVP_MD_type(const EVP_MD *md); 411#define EVP_MD_type(e) ((e)->type)
433#define EVP_MD_nid(e) EVP_MD_type(e) 412#define EVP_MD_nid(e) EVP_MD_type(e)
434#define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) 413#define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e))
435int EVP_MD_pkey_type(const EVP_MD *md); 414#define EVP_MD_pkey_type(e) ((e)->pkey_type)
436int EVP_MD_size(const EVP_MD *md); 415#define EVP_MD_size(e) ((e)->md_size)
437int EVP_MD_block_size(const EVP_MD *md); 416#define EVP_MD_block_size(e) ((e)->block_size)
438 417
439const EVP_MD * EVP_MD_CTX_md(const EVP_MD_CTX *ctx); 418#define EVP_MD_CTX_md(e) ((e)->digest)
440#define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) 419#define EVP_MD_CTX_size(e) EVP_MD_size((e)->digest)
441#define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) 420#define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)->digest)
442#define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) 421#define EVP_MD_CTX_type(e) EVP_MD_type((e)->digest)
443 422
444int EVP_CIPHER_nid(const EVP_CIPHER *cipher); 423#define EVP_CIPHER_nid(e) ((e)->nid)
445#define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) 424#define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e))
446int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); 425#define EVP_CIPHER_block_size(e) ((e)->block_size)
447int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); 426#define EVP_CIPHER_key_length(e) ((e)->key_len)
448int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); 427#define EVP_CIPHER_iv_length(e) ((e)->iv_len)
449unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); 428#define EVP_CIPHER_flags(e) ((e)->flags)
450#define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) 429#define EVP_CIPHER_mode(e) (((e)->flags) & EVP_CIPH_MODE)
451 430
452const EVP_CIPHER * EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); 431#define EVP_CIPHER_CTX_cipher(e) ((e)->cipher)
453int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); 432#define EVP_CIPHER_CTX_nid(e) ((e)->cipher->nid)
454int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); 433#define EVP_CIPHER_CTX_block_size(e) ((e)->cipher->block_size)
455int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); 434#define EVP_CIPHER_CTX_key_length(e) ((e)->key_len)
456int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); 435#define EVP_CIPHER_CTX_iv_length(e) ((e)->cipher->iv_len)
457void * EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); 436#define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data)
458void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); 437#define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d))
459#define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) 438#define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
460unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); 439#define EVP_CIPHER_CTX_flags(e) ((e)->cipher->flags)
461#define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) 440#define EVP_CIPHER_CTX_set_flags(ctx,flgs) ((ctx)->flags|=(flgs))
441#define EVP_CIPHER_CTX_clear_flags(ctx,flgs) ((ctx)->flags&=~(flgs))
442#define EVP_CIPHER_CTX_test_flags(ctx,flgs) ((ctx)->flags&(flgs))
443#define EVP_CIPHER_CTX_mode(e) ((e)->cipher->flags & EVP_CIPH_MODE)
462 444
463#define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) 445#define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80)
464#define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) 446#define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80)
@@ -483,10 +465,7 @@ void BIO_set_md(BIO *,const EVP_MD *md);
483#define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) 465#define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL)
484#define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) 466#define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp)
485 467
486int EVP_Cipher(EVP_CIPHER_CTX *c, 468#define EVP_Cipher(c,o,i,l) (c)->cipher->do_cipher((c),(o),(i),(l))
487 unsigned char *out,
488 const unsigned char *in,
489 unsigned int inl);
490 469
491#define EVP_add_cipher_alias(n,alias) \ 470#define EVP_add_cipher_alias(n,alias) \
492 OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) 471 OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
@@ -502,14 +481,14 @@ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
502EVP_MD_CTX *EVP_MD_CTX_create(void); 481EVP_MD_CTX *EVP_MD_CTX_create(void);
503void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); 482void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
504int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in); 483int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);
505void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); 484#define EVP_MD_CTX_set_flags(ctx,flgs) ((ctx)->flags|=(flgs))
506void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); 485#define EVP_MD_CTX_clear_flags(ctx,flgs) ((ctx)->flags&=~(flgs))
507int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx,int flags); 486#define EVP_MD_CTX_test_flags(ctx,flgs) ((ctx)->flags&(flgs))
508int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); 487int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
509int EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d, 488int EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
510 size_t cnt); 489 unsigned int cnt);
511int EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s); 490int EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
512int EVP_Digest(const void *data, size_t count, 491int EVP_Digest(void *data, unsigned int count,
513 unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); 492 unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl);
514 493
515int EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in); 494int EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in);
@@ -517,7 +496,7 @@ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
517int EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s); 496int EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
518 497
519int EVP_read_pw_string(char *buf,int length,const char *prompt,int verify); 498int EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
520void EVP_set_pw_prompt(const char *prompt); 499void EVP_set_pw_prompt(char *prompt);
521char * EVP_get_pw_prompt(void); 500char * EVP_get_pw_prompt(void);
522 501
523int EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md, 502int EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
@@ -556,48 +535,43 @@ int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
556int EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s, 535int EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s,
557 EVP_PKEY *pkey); 536 EVP_PKEY *pkey);
558 537
559int EVP_VerifyFinal(EVP_MD_CTX *ctx,const unsigned char *sigbuf, 538int EVP_VerifyFinal(EVP_MD_CTX *ctx,unsigned char *sigbuf,
560 unsigned int siglen,EVP_PKEY *pkey); 539 unsigned int siglen,EVP_PKEY *pkey);
561 540
562int EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type, 541int EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,unsigned char *ek,
563 const unsigned char *ek, int ekl, const unsigned char *iv, 542 int ekl,unsigned char *iv,EVP_PKEY *priv);
564 EVP_PKEY *priv);
565int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); 543int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
566 544
567int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, 545int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek,
568 unsigned char **ek, int *ekl, unsigned char *iv, 546 int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
569 EVP_PKEY **pubk, int npubk);
570int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl); 547int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
571 548
572void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); 549void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
573void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl, 550void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
574 const unsigned char *in,int inl); 551 int *outl,unsigned char *in,int inl);
575void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl); 552void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
576int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); 553int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
577 554
578void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); 555void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
579int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl, 556int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
580 const unsigned char *in, int inl); 557 unsigned char *in, int inl);
581int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned 558int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
582 char *out, int *outl); 559 char *out, int *outl);
583int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); 560int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
584 561
585void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); 562void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
586int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); 563int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
587EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
588void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
589int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); 564int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
590int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); 565int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
591int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); 566int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
592int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
593 567
594#ifndef OPENSSL_NO_BIO 568#ifndef OPENSSL_NO_BIO
595BIO_METHOD *BIO_f_md(void); 569BIO_METHOD *BIO_f_md(void);
596BIO_METHOD *BIO_f_base64(void); 570BIO_METHOD *BIO_f_base64(void);
597BIO_METHOD *BIO_f_cipher(void); 571BIO_METHOD *BIO_f_cipher(void);
598BIO_METHOD *BIO_f_reliable(void); 572BIO_METHOD *BIO_f_reliable(void);
599void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,const unsigned char *k, 573void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,unsigned char *k,
600 const unsigned char *i, int enc); 574 unsigned char *i, int enc);
601#endif 575#endif
602 576
603const EVP_MD *EVP_md_null(void); 577const EVP_MD *EVP_md_null(void);
@@ -615,8 +589,7 @@ const EVP_MD *EVP_sha(void);
615const EVP_MD *EVP_sha1(void); 589const EVP_MD *EVP_sha1(void);
616const EVP_MD *EVP_dss(void); 590const EVP_MD *EVP_dss(void);
617const EVP_MD *EVP_dss1(void); 591const EVP_MD *EVP_dss1(void);
618const EVP_MD *EVP_ecdsa(void); 592#ifdef OPENSSL_FIPS
619#endif
620#ifndef OPENSSL_NO_SHA256 593#ifndef OPENSSL_NO_SHA256
621const EVP_MD *EVP_sha224(void); 594const EVP_MD *EVP_sha224(void);
622const EVP_MD *EVP_sha256(void); 595const EVP_MD *EVP_sha256(void);
@@ -625,6 +598,8 @@ const EVP_MD *EVP_sha256(void);
625const EVP_MD *EVP_sha384(void); 598const EVP_MD *EVP_sha384(void);
626const EVP_MD *EVP_sha512(void); 599const EVP_MD *EVP_sha512(void);
627#endif 600#endif
601#endif
602#endif
628#ifndef OPENSSL_NO_MDC2 603#ifndef OPENSSL_NO_MDC2
629const EVP_MD *EVP_mdc2(void); 604const EVP_MD *EVP_mdc2(void);
630#endif 605#endif
@@ -742,36 +717,8 @@ const EVP_CIPHER *EVP_aes_256_ofb(void);
742const EVP_CIPHER *EVP_aes_256_ctr(void); 717const EVP_CIPHER *EVP_aes_256_ctr(void);
743#endif 718#endif
744#endif 719#endif
745#ifndef OPENSSL_NO_CAMELLIA 720#ifndef OPENSSL_NO_ACSS
746const EVP_CIPHER *EVP_camellia_128_ecb(void); 721const EVP_CIPHER *EVP_acss(void);
747const EVP_CIPHER *EVP_camellia_128_cbc(void);
748const EVP_CIPHER *EVP_camellia_128_cfb1(void);
749const EVP_CIPHER *EVP_camellia_128_cfb8(void);
750const EVP_CIPHER *EVP_camellia_128_cfb128(void);
751# define EVP_camellia_128_cfb EVP_camellia_128_cfb128
752const EVP_CIPHER *EVP_camellia_128_ofb(void);
753const EVP_CIPHER *EVP_camellia_192_ecb(void);
754const EVP_CIPHER *EVP_camellia_192_cbc(void);
755const EVP_CIPHER *EVP_camellia_192_cfb1(void);
756const EVP_CIPHER *EVP_camellia_192_cfb8(void);
757const EVP_CIPHER *EVP_camellia_192_cfb128(void);
758# define EVP_camellia_192_cfb EVP_camellia_192_cfb128
759const EVP_CIPHER *EVP_camellia_192_ofb(void);
760const EVP_CIPHER *EVP_camellia_256_ecb(void);
761const EVP_CIPHER *EVP_camellia_256_cbc(void);
762const EVP_CIPHER *EVP_camellia_256_cfb1(void);
763const EVP_CIPHER *EVP_camellia_256_cfb8(void);
764const EVP_CIPHER *EVP_camellia_256_cfb128(void);
765# define EVP_camellia_256_cfb EVP_camellia_256_cfb128
766const EVP_CIPHER *EVP_camellia_256_ofb(void);
767#endif
768
769#ifndef OPENSSL_NO_SEED
770const EVP_CIPHER *EVP_seed_ecb(void);
771const EVP_CIPHER *EVP_seed_cbc(void);
772const EVP_CIPHER *EVP_seed_cfb128(void);
773# define EVP_seed_cfb EVP_seed_cfb128
774const EVP_CIPHER *EVP_seed_ofb(void);
775#endif 722#endif
776 723
777void OPENSSL_add_all_algorithms_noconf(void); 724void OPENSSL_add_all_algorithms_noconf(void);
@@ -798,12 +745,10 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
798const EVP_MD *EVP_get_digestbyname(const char *name); 745const EVP_MD *EVP_get_digestbyname(const char *name);
799void EVP_cleanup(void); 746void EVP_cleanup(void);
800 747
801int EVP_PKEY_decrypt(unsigned char *dec_key, 748int EVP_PKEY_decrypt(unsigned char *dec_key,unsigned char *enc_key,
802 const unsigned char *enc_key,int enc_key_len, 749 int enc_key_len,EVP_PKEY *private_key);
803 EVP_PKEY *private_key);
804int EVP_PKEY_encrypt(unsigned char *enc_key, 750int EVP_PKEY_encrypt(unsigned char *enc_key,
805 const unsigned char *key,int key_len, 751 unsigned char *key,int key_len,EVP_PKEY *pub_key);
806 EVP_PKEY *pub_key);
807int EVP_PKEY_type(int type); 752int EVP_PKEY_type(int type);
808int EVP_PKEY_bits(EVP_PKEY *pkey); 753int EVP_PKEY_bits(EVP_PKEY *pkey);
809int EVP_PKEY_size(EVP_PKEY *pkey); 754int EVP_PKEY_size(EVP_PKEY *pkey);
@@ -824,31 +769,24 @@ struct dh_st;
824int EVP_PKEY_set1_DH(EVP_PKEY *pkey,struct dh_st *key); 769int EVP_PKEY_set1_DH(EVP_PKEY *pkey,struct dh_st *key);
825struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); 770struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
826#endif 771#endif
827#ifndef OPENSSL_NO_EC 772
828struct ec_key_st;
829int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey,struct ec_key_st *key);
830struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
831#endif
832 773
833EVP_PKEY * EVP_PKEY_new(void); 774EVP_PKEY * EVP_PKEY_new(void);
834void EVP_PKEY_free(EVP_PKEY *pkey); 775void EVP_PKEY_free(EVP_PKEY *pkey);
835 776EVP_PKEY * d2i_PublicKey(int type,EVP_PKEY **a, unsigned char **pp,
836EVP_PKEY * d2i_PublicKey(int type,EVP_PKEY **a, const unsigned char **pp,
837 long length); 777 long length);
838int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); 778int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
839 779
840EVP_PKEY * d2i_PrivateKey(int type,EVP_PKEY **a, const unsigned char **pp, 780EVP_PKEY * d2i_PrivateKey(int type,EVP_PKEY **a, unsigned char **pp,
841 long length); 781 long length);
842EVP_PKEY * d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, 782EVP_PKEY * d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
843 long length); 783 long length);
844int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); 784int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
845 785
846int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); 786int EVP_PKEY_copy_parameters(EVP_PKEY *to,EVP_PKEY *from);
847int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); 787int EVP_PKEY_missing_parameters(EVP_PKEY *pkey);
848int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode); 788int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode);
849int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); 789int EVP_PKEY_cmp_parameters(EVP_PKEY *a,EVP_PKEY *b);
850
851int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
852 790
853int EVP_CIPHER_type(const EVP_CIPHER *ctx); 791int EVP_CIPHER_type(const EVP_CIPHER *ctx);
854 792
@@ -865,7 +803,7 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
865 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, 803 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
866 int en_de); 804 int en_de);
867int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, 805int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
868 const unsigned char *salt, int saltlen, int iter, 806 unsigned char *salt, int saltlen, int iter,
869 int keylen, unsigned char *out); 807 int keylen, unsigned char *out);
870int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, 808int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
871 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, 809 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
@@ -888,32 +826,30 @@ void ERR_load_EVP_strings(void);
888/* Error codes for the EVP functions. */ 826/* Error codes for the EVP functions. */
889 827
890/* Function codes. */ 828/* Function codes. */
891#define EVP_F_AES_INIT_KEY 133 829#define EVP_F_AES_INIT_KEY 129
892#define EVP_F_CAMELLIA_INIT_KEY 159
893#define EVP_F_D2I_PKEY 100 830#define EVP_F_D2I_PKEY 100
894#define EVP_F_DSAPKEY2PKCS8 134 831#define EVP_F_EVP_ADD_CIPHER 130
895#define EVP_F_DSA_PKEY2PKCS8 135 832#define EVP_F_EVP_ADD_DIGEST 131
896#define EVP_F_ECDSA_PKEY2PKCS8 129 833#define EVP_F_EVP_CIPHERINIT 123
897#define EVP_F_ECKEY_PKEY2PKCS8 132
898#define EVP_F_EVP_CIPHERINIT_EX 123
899#define EVP_F_EVP_CIPHER_CTX_CTRL 124 834#define EVP_F_EVP_CIPHER_CTX_CTRL 124
900#define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 835#define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122
901#define EVP_F_EVP_DECRYPTFINAL_EX 101 836#define EVP_F_EVP_DECRYPTFINAL 101
902#define EVP_F_EVP_DIGESTINIT_EX 128 837#define EVP_F_EVP_DIGESTINIT 128
903#define EVP_F_EVP_ENCRYPTFINAL_EX 127 838#define EVP_F_EVP_ENCRYPTFINAL 127
904#define EVP_F_EVP_MD_CTX_COPY_EX 110 839#define EVP_F_EVP_GET_CIPHERBYNAME 132
840#define EVP_F_EVP_GET_DIGESTBYNAME 133
841#define EVP_F_EVP_MD_CTX_COPY 110
905#define EVP_F_EVP_OPENINIT 102 842#define EVP_F_EVP_OPENINIT 102
906#define EVP_F_EVP_PBE_ALG_ADD 115 843#define EVP_F_EVP_PBE_ALG_ADD 115
907#define EVP_F_EVP_PBE_CIPHERINIT 116 844#define EVP_F_EVP_PBE_CIPHERINIT 116
908#define EVP_F_EVP_PKCS82PKEY 111 845#define EVP_F_EVP_PKCS82PKEY 111
909#define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 846#define EVP_F_EVP_PKCS8_SET_BROKEN 112
847#define EVP_F_EVP_PKEY2PKCS8 113
910#define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 848#define EVP_F_EVP_PKEY_COPY_PARAMETERS 103
911#define EVP_F_EVP_PKEY_DECRYPT 104 849#define EVP_F_EVP_PKEY_DECRYPT 104
912#define EVP_F_EVP_PKEY_ENCRYPT 105 850#define EVP_F_EVP_PKEY_ENCRYPT 105
913#define EVP_F_EVP_PKEY_GET1_DH 119 851#define EVP_F_EVP_PKEY_GET1_DH 119
914#define EVP_F_EVP_PKEY_GET1_DSA 120 852#define EVP_F_EVP_PKEY_GET1_DSA 120
915#define EVP_F_EVP_PKEY_GET1_ECDSA 130
916#define EVP_F_EVP_PKEY_GET1_EC_KEY 131
917#define EVP_F_EVP_PKEY_GET1_RSA 121 853#define EVP_F_EVP_PKEY_GET1_RSA 121
918#define EVP_F_EVP_PKEY_NEW 106 854#define EVP_F_EVP_PKEY_NEW 106
919#define EVP_F_EVP_RIJNDAEL 126 855#define EVP_F_EVP_RIJNDAEL 126
@@ -921,32 +857,28 @@ void ERR_load_EVP_strings(void);
921#define EVP_F_EVP_VERIFYFINAL 108 857#define EVP_F_EVP_VERIFYFINAL 108
922#define EVP_F_PKCS5_PBE_KEYIVGEN 117 858#define EVP_F_PKCS5_PBE_KEYIVGEN 117
923#define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 859#define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118
924#define EVP_F_PKCS8_SET_BROKEN 112
925#define EVP_F_RC2_MAGIC_TO_METH 109 860#define EVP_F_RC2_MAGIC_TO_METH 109
926#define EVP_F_RC5_CTRL 125 861#define EVP_F_RC5_CTRL 125
927 862
928/* Reason codes. */ 863/* Reason codes. */
929#define EVP_R_AES_KEY_SETUP_FAILED 143 864#define EVP_R_AES_KEY_SETUP_FAILED 140
930#define EVP_R_ASN1_LIB 140
931#define EVP_R_BAD_BLOCK_LENGTH 136 865#define EVP_R_BAD_BLOCK_LENGTH 136
932#define EVP_R_BAD_DECRYPT 100 866#define EVP_R_BAD_DECRYPT 100
933#define EVP_R_BAD_KEY_LENGTH 137 867#define EVP_R_BAD_KEY_LENGTH 137
934#define EVP_R_BN_DECODE_ERROR 112 868#define EVP_R_BN_DECODE_ERROR 112
935#define EVP_R_BN_PUBKEY_ERROR 113 869#define EVP_R_BN_PUBKEY_ERROR 113
936#define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157
937#define EVP_R_CIPHER_PARAMETER_ERROR 122 870#define EVP_R_CIPHER_PARAMETER_ERROR 122
938#define EVP_R_CTRL_NOT_IMPLEMENTED 132 871#define EVP_R_CTRL_NOT_IMPLEMENTED 132
939#define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 872#define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133
940#define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 873#define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138
941#define EVP_R_DECODE_ERROR 114 874#define EVP_R_DECODE_ERROR 114
942#define EVP_R_DIFFERENT_KEY_TYPES 101 875#define EVP_R_DIFFERENT_KEY_TYPES 101
876#define EVP_R_DISABLED_FOR_FIPS 141
943#define EVP_R_ENCODE_ERROR 115 877#define EVP_R_ENCODE_ERROR 115
944#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 878#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119
945#define EVP_R_EXPECTING_AN_RSA_KEY 127 879#define EVP_R_EXPECTING_AN_RSA_KEY 127
946#define EVP_R_EXPECTING_A_DH_KEY 128 880#define EVP_R_EXPECTING_A_DH_KEY 128
947#define EVP_R_EXPECTING_A_DSA_KEY 129 881#define EVP_R_EXPECTING_A_DSA_KEY 129
948#define EVP_R_EXPECTING_A_ECDSA_KEY 141
949#define EVP_R_EXPECTING_A_EC_KEY 142
950#define EVP_R_INITIALIZATION_ERROR 134 882#define EVP_R_INITIALIZATION_ERROR 134
951#define EVP_R_INPUT_NOT_INITIALIZED 111 883#define EVP_R_INPUT_NOT_INITIALIZED 111
952#define EVP_R_INVALID_KEY_LENGTH 130 884#define EVP_R_INVALID_KEY_LENGTH 130
@@ -971,7 +903,6 @@ void ERR_load_EVP_strings(void);
971#define EVP_R_UNSUPPORTED_SALT_TYPE 126 903#define EVP_R_UNSUPPORTED_SALT_TYPE 126
972#define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 904#define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109
973#define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 905#define EVP_R_WRONG_PUBLIC_KEY_TYPE 110
974#define EVP_R_SEED_KEY_SETUP_FAILED 162
975 906
976#ifdef __cplusplus 907#ifdef __cplusplus
977} 908}