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