evp.h 51.8 KB
Newer Older
1
/* crypto/evp/evp.h */
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 * 
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 * 
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 * 
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * 
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 */

#ifndef HEADER_ENVELOPE_H
#define HEADER_ENVELOPE_H

62 63 64 65 66 67 68 69
#ifdef OPENSSL_ALGORITHM_DEFINES
# include <openssl/opensslconf.h>
#else
# define OPENSSL_ALGORITHM_DEFINES
# include <openssl/opensslconf.h>
# undef OPENSSL_ALGORITHM_DEFINES
#endif

70
#include <openssl/ossl_typ.h>
71

72 73
#include <openssl/symhacks.h>

74
#ifndef OPENSSL_NO_BIO
75 76
#include <openssl/bio.h>
#endif
77

78
/*
79 80 81 82 83
#define EVP_RC2_KEY_SIZE		16
#define EVP_RC4_KEY_SIZE		16
#define EVP_BLOWFISH_KEY_SIZE		16
#define EVP_CAST5_KEY_SIZE		16
#define EVP_RC5_32_12_16_KEY_SIZE	16
84
*/
85
#define EVP_MAX_MD_SIZE			64	/* longest known is SHA512 */
86 87
#define EVP_MAX_KEY_LENGTH		32
#define EVP_MAX_IV_LENGTH		16
88
#define EVP_MAX_BLOCK_LENGTH		32
89

90
#define PKCS5_SALT_LEN			8
91 92
/* Default PKCS#5 iteration count */
#define PKCS5_DEFAULT_ITER		2048
93

94
#include <openssl/objects.h>
95 96 97 98

#define EVP_PK_RSA	0x0001
#define EVP_PK_DSA	0x0002
#define EVP_PK_DH	0x0004
99
#define EVP_PK_EC	0x0008
100 101 102 103 104
#define EVP_PKT_SIGN	0x0010
#define EVP_PKT_ENC	0x0020
#define EVP_PKT_EXCH	0x0040
#define EVP_PKS_RSA	0x0100
#define EVP_PKS_DSA	0x0200
105
#define EVP_PKS_EC	0x0400
106 107 108 109 110 111
#define EVP_PKT_EXP	0x1000 /* <= 512 bit key */

#define EVP_PKEY_NONE	NID_undef
#define EVP_PKEY_RSA	NID_rsaEncryption
#define EVP_PKEY_RSA2	NID_rsa
#define EVP_PKEY_DSA	NID_dsa
112
#define EVP_PKEY_DSA1	NID_dsa_2
113 114
#define EVP_PKEY_DSA2	NID_dsaWithSHA
#define EVP_PKEY_DSA3	NID_dsaWithSHA1
115
#define EVP_PKEY_DSA4	NID_dsaWithSHA1_2
116
#define EVP_PKEY_DH	NID_dhKeyAgreement
117
#define EVP_PKEY_EC	NID_X9_62_id_ecPublicKey
118
#define EVP_PKEY_HMAC	NID_hmac
119
#define EVP_PKEY_CMAC	NID_cmac
120

121 122 123 124
#ifdef	__cplusplus
extern "C" {
#endif

125 126
/* Type needs to be a bit field
 * Sub-type needs to be for variations on the method, as in, can it do
U
Ulf Möller 已提交
127
 * arbitrary encryption.... */
128
struct evp_pkey_st
129 130 131 132
	{
	int type;
	int save_type;
	int references;
133
	const EVP_PKEY_ASN1_METHOD *ameth;
134
	ENGINE *engine;
135 136
	union	{
		char *ptr;
137
#ifndef OPENSSL_NO_RSA
138
		struct rsa_st *rsa;	/* RSA */
139
#endif
140
#ifndef OPENSSL_NO_DSA
141
		struct dsa_st *dsa;	/* DSA */
142
#endif
143
#ifndef OPENSSL_NO_DH
144
		struct dh_st *dh;	/* DH */
B
Bodo Möller 已提交
145
#endif
146
#ifndef OPENSSL_NO_EC
N
Nils Larsch 已提交
147
		struct ec_key_st *ec;	/* ECC */
148
#endif
149 150
		} pkey;
	int save_parameters;
B
Ben Laurie 已提交
151
	STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
152
	} /* EVP_PKEY */;
153

154 155 156 157 158
#define EVP_PKEY_MO_SIGN	0x0001
#define EVP_PKEY_MO_VERIFY	0x0002
#define EVP_PKEY_MO_ENCRYPT	0x0004
#define EVP_PKEY_MO_DECRYPT	0x0008

159
#ifndef EVP_MD
160
struct env_md_st
161 162 163
	{
	int type;
	int pkey_type;
164
	int md_size;
165 166
	unsigned long flags;
	int (*init)(EVP_MD_CTX *ctx);
167
	int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count);
168 169
	int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
	int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
B
Ben Laurie 已提交
170
	int (*cleanup)(EVP_MD_CTX *ctx);
171

172
	/* FIXME: prototype these some day */
173 174 175 176 177
	int (*sign)(int type, const unsigned char *m, unsigned int m_length,
		    unsigned char *sigret, unsigned int *siglen, void *key);
	int (*verify)(int type, const unsigned char *m, unsigned int m_length,
		      const unsigned char *sigbuf, unsigned int siglen,
		      void *key);
178
	int required_pkey_type[5]; /*EVP_PKEY_xxx */
179 180
	int block_size;
	int ctx_size; /* how big does the ctx->md_data need to be */
181 182
	/* control function */
	int (*md_ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2);
183
	} /* EVP_MD */;
184

185 186 187 188 189 190 191
typedef int evp_sign_method(int type,const unsigned char *m,
			    unsigned int m_length,unsigned char *sigret,
			    unsigned int *siglen, void *key);
typedef int evp_verify_method(int type,const unsigned char *m,
			    unsigned int m_length,const unsigned char *sigbuf,
			    unsigned int siglen, void *key);

192 193
#define EVP_MD_FLAG_ONESHOT	0x0001 /* digest can only handle a single
					* block */
194

195 196 197 198 199 200 201 202 203
#define EVP_MD_FLAG_PKEY_DIGEST	0x0002 /* digest is a "clone" digest used
					* which is a copy of an existing
					* one for a specific public key type.
					* EVP_dss1() etc */

/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */

#define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE	0x0004

204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
/* DigestAlgorithmIdentifier flags... */

#define EVP_MD_FLAG_DIGALGID_MASK		0x0018

/* NULL or absent parameter accepted. Use NULL */

#define EVP_MD_FLAG_DIGALGID_NULL		0x0000

/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */

#define EVP_MD_FLAG_DIGALGID_ABSENT		0x0008

/* Custom handling via ctrl */

#define EVP_MD_FLAG_DIGALGID_CUSTOM		0x0018

D
Dr. Stephen Henson 已提交
220 221
#define EVP_MD_FLAG_FIPS	0x0400 /* Note if suitable for use in FIPS mode */

222 223 224
/* Digest ctrls */

#define	EVP_MD_CTRL_DIGALGID			0x1
225
#define	EVP_MD_CTRL_MICALG			0x2
226 227 228 229 230

/* Minimum Algorithm specific ctrl value */

#define	EVP_MD_CTRL_ALG_CTRL			0x1000

231 232
#define EVP_PKEY_NULL_method	NULL,NULL,{0,0,0,0}

233
#ifndef OPENSSL_NO_DSA
234 235
#define EVP_PKEY_DSA_method	(evp_sign_method *)DSA_sign, \
				(evp_verify_method *)DSA_verify, \
236 237
				{EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \
					EVP_PKEY_DSA4,0}
238 239 240 241
#else
#define EVP_PKEY_DSA_method	EVP_PKEY_NULL_method
#endif

B
Bodo Möller 已提交
242
#ifndef OPENSSL_NO_ECDSA
243 244
#define EVP_PKEY_ECDSA_method   (evp_sign_method *)ECDSA_sign, \
				(evp_verify_method *)ECDSA_verify, \
245
                                 {EVP_PKEY_EC,0,0,0}
B
Bodo Möller 已提交
246 247 248 249
#else   
#define EVP_PKEY_ECDSA_method   EVP_PKEY_NULL_method
#endif

250
#ifndef OPENSSL_NO_RSA
251 252
#define EVP_PKEY_RSA_method	(evp_sign_method *)RSA_sign, \
				(evp_verify_method *)RSA_verify, \
253 254
				{EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
#define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \
255 256
				(evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \
				(evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \
257 258 259 260 261 262 263 264
				{EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
#else
#define EVP_PKEY_RSA_method	EVP_PKEY_NULL_method
#define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method
#endif

#endif /* !EVP_MD */

265
struct env_md_ctx_st
266
	{
B
Ben Laurie 已提交
267
	const EVP_MD *digest;
268
	ENGINE *engine; /* functional reference if 'digest' is ENGINE-provided */
269
	unsigned long flags;
270
	void *md_data;
271 272
	/* Public key context for sign/verify */
	EVP_PKEY_CTX *pctx;
273 274
	/* Update function: usually copied from EVP_MD */
	int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count);
275 276 277 278 279 280
	} /* EVP_MD_CTX */;

/* values for EVP_MD_CTX flags */

#define EVP_MD_CTX_FLAG_ONESHOT		0x0001 /* digest update will be called
						* once only */
B
Ben Laurie 已提交
281 282
#define EVP_MD_CTX_FLAG_CLEANED		0x0002 /* context has already been
						* cleaned */
283 284
#define EVP_MD_CTX_FLAG_REUSE		0x0004 /* Don't free up ctx->md_data
						* in EVP_MD_CTX_cleanup */
285 286 287
/* FIPS and pad options are ignored in 1.0.0, definitions are here
 * so we don't accidentally reuse the values for other purposes.
 */
288

289 290
#define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW	0x0008	/* Allow use of non FIPS digest
						 * in FIPS mode */
291

292 293 294 295 296 297 298 299
/* The following PAD options are also currently ignored in 1.0.0, digest
 * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*()
 * instead.
 */
#define EVP_MD_CTX_FLAG_PAD_MASK	0xF0	/* RSA mode to use */
#define EVP_MD_CTX_FLAG_PAD_PKCS1	0x00	/* PKCS#1 v1.5 mode */
#define EVP_MD_CTX_FLAG_PAD_X931	0x10	/* X9.31 mode */
#define EVP_MD_CTX_FLAG_PAD_PSS		0x20	/* PSS mode */
300

301
#define EVP_MD_CTX_FLAG_NO_INIT		0x0100 /* Don't initialize md_data */
302

D
 
Dr. Stephen Henson 已提交
303
struct evp_cipher_st
304 305
	{
	int nid;
306 307 308
	int block_size;
	int key_len;		/* Default value for variable length ciphers */
	int iv_len;
D
 
Dr. Stephen Henson 已提交
309
	unsigned long flags;	/* Various flags */
B
Ben Laurie 已提交
310 311 312
	int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key,
		    const unsigned char *iv, int enc);	/* init key */
	int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out,
313
			 const unsigned char *in, size_t inl);/* encrypt/decrypt data */
D
 
Dr. Stephen Henson 已提交
314
	int (*cleanup)(EVP_CIPHER_CTX *); /* cleanup ctx */
315
	int ctx_size;		/* how big ctx->cipher_data needs to be */
D
 
Dr. Stephen Henson 已提交
316 317 318
	int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Populate a ASN1_TYPE with parameters */
	int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Get parameters from a ASN1_TYPE */
	int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Miscellaneous operations */
319
	void *app_data;		/* Application data */
320
	} /* EVP_CIPHER */;
D
 
Dr. Stephen Henson 已提交
321 322 323

/* Values for cipher flags */

324
/* Modes for ciphers */
D
 
Dr. Stephen Henson 已提交
325

326
#define		EVP_CIPH_STREAM_CIPHER		0x0
D
 
Dr. Stephen Henson 已提交
327 328 329 330
#define		EVP_CIPH_ECB_MODE		0x1
#define		EVP_CIPH_CBC_MODE		0x2
#define		EVP_CIPH_CFB_MODE		0x3
#define		EVP_CIPH_OFB_MODE		0x4
331
#define		EVP_CIPH_CTR_MODE		0x5
332
#define 	EVP_CIPH_MODE			0xF0007
D
 
Dr. Stephen Henson 已提交
333 334
/* Set if variable length cipher */
#define 	EVP_CIPH_VARIABLE_LENGTH	0x8
335 336 337 338
/* Set if the iv handling should be done by the cipher itself */
#define 	EVP_CIPH_CUSTOM_IV		0x10
/* Set if the cipher's init() function should be called if key is NULL */
#define 	EVP_CIPH_ALWAYS_CALL_INIT	0x20
D
Dr. Stephen Henson 已提交
339 340 341 342
/* Call ctrl() to init cipher parameters */
#define 	EVP_CIPH_CTRL_INIT		0x40
/* Don't use standard key length function */
#define 	EVP_CIPH_CUSTOM_KEY_LENGTH	0x80
343 344
/* Don't use standard block padding */
#define 	EVP_CIPH_NO_PADDING		0x100
345 346
/* cipher handles random key generation */
#define 	EVP_CIPH_RAND_KEY		0x200
347
/* cipher has its own additional copying logic */
348
#define 	EVP_CIPH_CUSTOM_COPY		0x400
349 350 351 352
/* Allow use default ASN1 get/set iv */
#define		EVP_CIPH_FLAG_DEFAULT_ASN1	0x1000
/* Buffer length in bits not bytes: CFB1 mode only */
#define		EVP_CIPH_FLAG_LENGTH_BITS	0x2000
D
Dr. Stephen Henson 已提交
353 354 355 356
/* Note if suitable for use in FIPS mode */
#define		EVP_CIPH_FLAG_FIPS		0x4000
/* Allow non FIPS cipher in FIPS mode */
#define		EVP_CIPH_FLAG_NON_FIPS_ALLOW	0x8000
D
 
Dr. Stephen Henson 已提交
357

D
Dr. Stephen Henson 已提交
358 359 360 361 362 363 364 365
/* ctrl() values */

#define		EVP_CTRL_INIT			0x0
#define 	EVP_CTRL_SET_KEY_LENGTH		0x1
#define 	EVP_CTRL_GET_RC2_KEY_BITS	0x2
#define 	EVP_CTRL_SET_RC2_KEY_BITS	0x3
#define 	EVP_CTRL_GET_RC5_ROUNDS		0x4
#define 	EVP_CTRL_SET_RC5_ROUNDS		0x5
366
#define 	EVP_CTRL_RAND_KEY		0x6
367
#define 	EVP_CTRL_PBE_PRF_NID		0x7
368
#define 	EVP_CTRL_COPY			0x8
369 370 371

typedef struct evp_cipher_info_st
	{
B
Ben Laurie 已提交
372
	const EVP_CIPHER *cipher;
373 374 375
	unsigned char iv[EVP_MAX_IV_LENGTH];
	} EVP_CIPHER_INFO;

D
 
Dr. Stephen Henson 已提交
376
struct evp_cipher_ctx_st
377
	{
B
Ben Laurie 已提交
378
	const EVP_CIPHER *cipher;
379
	ENGINE *engine;	/* functional reference if 'cipher' is ENGINE-provided */
380
	int encrypt;		/* encrypt or decrypt */
381
	int buf_len;		/* number we have left */
382 383 384

	unsigned char  oiv[EVP_MAX_IV_LENGTH];	/* original iv */
	unsigned char  iv[EVP_MAX_IV_LENGTH];	/* working iv */
385
	unsigned char buf[EVP_MAX_BLOCK_LENGTH];/* saved partial block */
386 387
	int num;				/* used by cfb/ofb mode */

D
 
Dr. Stephen Henson 已提交
388
	void *app_data;		/* application stuff */
389
	int key_len;		/* May change for variable length cipher */
390
	unsigned long flags;	/* Various flags */
391
	void *cipher_data; /* per EVP data */
392
	int final_used;
393 394
	int block_mask;
	unsigned char final[EVP_MAX_BLOCK_LENGTH];/* possible final block */
395
	} /* EVP_CIPHER_CTX */;
396 397 398

typedef struct evp_Encode_Ctx_st
	{
399 400
	int num;	/* number saved in a partial encode/decode */
	int length;	/* The length is either the output line length
401 402 403 404 405 406
			 * (in input bytes) or the shortest input line
			 * length that is ok.  Once decoding begins,
			 * the length is adjusted up each time a longer
			 * line is decoded */
	unsigned char enc_data[80];	/* data to encode */
	int line_num;	/* number read on current line */
407
	int expect_nl;
408 409
	} EVP_ENCODE_CTX;

410
/* Password based encryption function */
411
typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
D
 
Dr. Stephen Henson 已提交
412 413
		ASN1_TYPE *param, const EVP_CIPHER *cipher,
                const EVP_MD *md, int en_de);
414

415
#ifndef OPENSSL_NO_RSA
416 417
#define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
					(char *)(rsa))
418 419
#endif

420
#ifndef OPENSSL_NO_DSA
421 422
#define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
					(char *)(dsa))
423 424
#endif

425
#ifndef OPENSSL_NO_DH
426 427
#define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\
					(char *)(dh))
428
#endif
429

430 431 432
#ifndef OPENSSL_NO_EC
#define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\
                                        (char *)(eckey))
B
Bodo Möller 已提交
433 434
#endif

435 436 437 438 439 440
/* Add some extra combinations */
#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
#define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
#define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))

D
Dr. Stephen Henson 已提交
441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
/* Macros to reduce FIPS dependencies: do NOT use in applications */
#define M_EVP_MD_size(e)		((e)->md_size)
#define M_EVP_MD_block_size(e)		((e)->block_size)
#define M_EVP_MD_CTX_set_flags(ctx,flgs) ((ctx)->flags|=(flgs))
#define M_EVP_MD_CTX_clear_flags(ctx,flgs) ((ctx)->flags&=~(flgs))
#define M_EVP_MD_CTX_test_flags(ctx,flgs) ((ctx)->flags&(flgs))
#define M_EVP_MD_type(e)			((e)->type)
#define M_EVP_MD_CTX_type(e)		M_EVP_MD_type(M_EVP_MD_CTX_md(e))
#define M_EVP_MD_CTX_md(e)			((e)->digest)

#define M_EVP_CIPHER_CTX_iv_length(e)	(e->cipher->iv_len)
#define M_EVP_CIPHER_CTX_flags(e)	(e->cipher->flags)
#define M_EVP_CIPHER_CTX_mode(e)	(M_EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE)

#define M_EVP_CIPHER_CTX_set_flags(ctx,flgs) ((ctx)->flags|=(flgs))

N
Nils Larsch 已提交
457
int EVP_MD_type(const EVP_MD *md);
B
Ben Laurie 已提交
458 459
#define EVP_MD_nid(e)			EVP_MD_type(e)
#define EVP_MD_name(e)			OBJ_nid2sn(EVP_MD_nid(e))
N
Nils Larsch 已提交
460
int EVP_MD_pkey_type(const EVP_MD *md);	
461 462
int EVP_MD_size(const EVP_MD *md);
int EVP_MD_block_size(const EVP_MD *md);
D
Dr. Stephen Henson 已提交
463
unsigned long EVP_MD_flags(const EVP_MD *md);
464

N
Nils Larsch 已提交
465 466 467 468
const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
#define EVP_MD_CTX_size(e)		EVP_MD_size(EVP_MD_CTX_md(e))
#define EVP_MD_CTX_block_size(e)	EVP_MD_block_size(EVP_MD_CTX_md(e))
#define EVP_MD_CTX_type(e)		EVP_MD_type(EVP_MD_CTX_md(e))
469

N
Nils Larsch 已提交
470
int EVP_CIPHER_nid(const EVP_CIPHER *cipher);
B
Ben Laurie 已提交
471
#define EVP_CIPHER_name(e)		OBJ_nid2sn(EVP_CIPHER_nid(e))
472 473 474
int EVP_CIPHER_block_size(const EVP_CIPHER *cipher);
int EVP_CIPHER_key_length(const EVP_CIPHER *cipher);
int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher);
N
Nils Larsch 已提交
475 476 477 478 479
unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher);
#define EVP_CIPHER_mode(e)		(EVP_CIPHER_flags(e) & EVP_CIPH_MODE)

const EVP_CIPHER * EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
480 481 482
int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
483
int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);
N
Nils Larsch 已提交
484 485
void * EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
486
#define EVP_CIPHER_CTX_type(c)         EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
N
Nils Larsch 已提交
487 488
unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx);
#define EVP_CIPHER_CTX_mode(e)		(EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE)
489 490 491 492

#define EVP_ENCODE_LENGTH(l)	(((l+2)/3*4)+(l/48+1)*2+80)
#define EVP_DECODE_LENGTH(l)	((l+3)/4*3+80)

D
 
Dr. Stephen Henson 已提交
493
#define EVP_SignInit_ex(a,b,c)		EVP_DigestInit_ex(a,b,c)
494 495
#define EVP_SignInit(a,b)		EVP_DigestInit(a,b)
#define EVP_SignUpdate(a,b,c)		EVP_DigestUpdate(a,b,c)
D
 
Dr. Stephen Henson 已提交
496
#define	EVP_VerifyInit_ex(a,b,c)	EVP_DigestInit_ex(a,b,c)
497 498 499 500
#define	EVP_VerifyInit(a,b)		EVP_DigestInit(a,b)
#define	EVP_VerifyUpdate(a,b,c)		EVP_DigestUpdate(a,b,c)
#define EVP_OpenUpdate(a,b,c,d,e)	EVP_DecryptUpdate(a,b,c,d,e)
#define EVP_SealUpdate(a,b,c,d,e)	EVP_EncryptUpdate(a,b,c,d,e)	
501 502
#define EVP_DigestSignUpdate(a,b,c)	EVP_DigestUpdate(a,b,c)
#define EVP_DigestVerifyUpdate(a,b,c)	EVP_DigestUpdate(a,b,c)
503

B
Ben Laurie 已提交
504 505 506 507 508
#ifdef CONST_STRICT
void BIO_set_md(BIO *,const EVP_MD *md);
#else
# define BIO_set_md(b,md)		BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md)
#endif
509 510
#define BIO_get_md(b,mdp)		BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp)
#define BIO_get_md_ctx(b,mdcp)     BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp)
511
#define BIO_set_md_ctx(b,mdcp)     BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp)
512
#define BIO_get_cipher_status(b)	BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL)
513
#define BIO_get_cipher_ctx(b,c_pp)	BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp)
514

515
__owur int EVP_Cipher(EVP_CIPHER_CTX *c,
516 517 518
		unsigned char *out,
		const unsigned char *in,
		unsigned int inl);
519

520 521 522 523 524 525 526 527 528
#define EVP_add_cipher_alias(n,alias) \
	OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
#define EVP_add_digest_alias(n,alias) \
	OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
#define EVP_delete_cipher_alias(alias) \
	OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS);
#define EVP_delete_digest_alias(alias) \
	OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS);

D
Dr. Stephen Henson 已提交
529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576
#ifdef OPENSSL_FIPS
void FIPS_md_ctx_init(EVP_MD_CTX *ctx);
EVP_MD_CTX *FIPS_md_ctx_create(void);
void FIPS_md_ctx_destroy(EVP_MD_CTX *ctx);
int FIPS_digestinit(EVP_MD_CTX *ctx, const EVP_MD *type);
int FIPS_digestupdate(EVP_MD_CTX *ctx, const void *data, size_t count);
int FIPS_digestfinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size);
int FIPS_digest(const void *data, size_t count,
		unsigned char *md, unsigned int *size, const EVP_MD *type);
int FIPS_md_ctx_cleanup(EVP_MD_CTX *ctx);
int     FIPS_md_ctx_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in);  


void FIPS_cipher_ctx_init(EVP_CIPHER_CTX *ctx);
int FIPS_cipher_ctx_cleanup(EVP_CIPHER_CTX *c);
EVP_CIPHER_CTX *FIPS_cipher_ctx_new(void);
void FIPS_cipher_ctx_free(EVP_CIPHER_CTX *ctx);
int FIPS_cipherinit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
	     const unsigned char *key, const unsigned char *iv, int enc);
int FIPS_cipher_ctx_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
int FIPS_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
			const unsigned char *in, unsigned int inl);

#endif

#if defined(OPENSSL_FIPSCANISTER) && defined(OPENSSL_FIPSEVP)

#define EVP_MD_CTX_init FIPS_md_ctx_init
#define EVP_MD_CTX_cleanup FIPS_md_ctx_cleanup
#define EVP_MD_CTX_create FIPS_md_ctx_create
#define EVP_MD_CTX_destroy FIPS_md_ctx_destroy
#define EVP_DigestInit_ex(ctx, type, impl) FIPS_digestinit(ctx, type)
#define EVP_DigestUpdate FIPS_digestupdate
#define EVP_Digest(data, count, md, size, type, impl) \
			FIPS_digest(data, count, md, size, type)
#define EVP_DigestFinal_ex FIPS_digestfinal
#define EVP_MD_CTX_copy_ex FIPS_md_ctx_copy

#define EVP_CipherInit_ex(ctx, cipher, impl, key, iv, enc) \
				FIPS_cipherinit(ctx, cipher, key, iv, enc)

#define EVP_CIPHER_CTX_init FIPS_cipher_ctx_init
#define EVP_CIPHER_CTX_cleanup FIPS_cipher_ctx_cleanup
#define EVP_Cipher FIPS_cipher
#define EVP_CIPHER_CTX_ctrl FIPS_cipher_ctx_ctrl

#else

577 578 579 580
void	EVP_MD_CTX_init(EVP_MD_CTX *ctx);
int	EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
EVP_MD_CTX *EVP_MD_CTX_create(void);
void	EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
581 582
__owur int	EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
__owur int	EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
583
			 size_t cnt);
584 585
__owur int	EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
__owur int	EVP_Digest(const void *data, size_t count,
D
 
Dr. Stephen Henson 已提交
586
		unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl);
D
Dr. Stephen Henson 已提交
587 588 589 590 591 592
#endif

__owur int     EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);  
void	EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
void	EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
int 	EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx,int flags);
D
 
Dr. Stephen Henson 已提交
593

594 595 596
__owur int     EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in);  
__owur int	EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
__owur int	EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
597

B
Ben Laurie 已提交
598
int	EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
D
Dr. Stephen Henson 已提交
599
int	EVP_read_pw_string_min(char *buf,int minlen,int maxlen,const char *prompt,int verify);
600
void	EVP_set_pw_prompt(const char *prompt);
601 602
char *	EVP_get_pw_prompt(void);

603
__owur int	EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
604
		const unsigned char *salt, const unsigned char *data,
605
		int datal, int count, unsigned char *key,unsigned char *iv);
606

607 608 609 610
void	EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);
void	EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
int 	EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx,int flags);

611
__owur int	EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher,
B
Ben Laurie 已提交
612
		const unsigned char *key, const unsigned char *iv);
613
__owur int	EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl,
614
		const unsigned char *key, const unsigned char *iv);
615
__owur int	EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
616
		int *outl, const unsigned char *in, int inl);
617 618
__owur int	EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
__owur int	EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
619

620
__owur int	EVP_DecryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher,
621
		const unsigned char *key, const unsigned char *iv);
622
__owur int	EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl,
623
		const unsigned char *key, const unsigned char *iv);
624
__owur int	EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
625
		int *outl, const unsigned char *in, int inl);
626 627
__owur int	EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
__owur int	EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
628

629
__owur int	EVP_CipherInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher,
B
Ben Laurie 已提交
630 631
		       const unsigned char *key,const unsigned char *iv,
		       int enc);
632
__owur int	EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl,
633 634
		       const unsigned char *key,const unsigned char *iv,
		       int enc);
635
__owur int	EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
636
		int *outl, const unsigned char *in, int inl);
637 638
__owur int	EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
__owur int	EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
639

640
__owur int	EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s,
641
		EVP_PKEY *pkey);
642

643
__owur int	EVP_VerifyFinal(EVP_MD_CTX *ctx,const unsigned char *sigbuf,
644
		unsigned int siglen,EVP_PKEY *pkey);
645

646
__owur int	EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
647
			const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
648
__owur int	EVP_DigestSignFinal(EVP_MD_CTX *ctx,
649
			unsigned char *sigret, size_t *siglen);
650

651
__owur int	EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
652
			const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
653
__owur int	EVP_DigestVerifyFinal(EVP_MD_CTX *ctx,
654
			unsigned char *sig, size_t siglen);
655

656
__owur int	EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,
657 658
		const unsigned char *ek, int ekl, const unsigned char *iv,
		EVP_PKEY *priv);
659
__owur int	EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
660

661
__owur int	EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
662 663
		 unsigned char **ek, int *ekl, unsigned char *iv,
		EVP_PKEY **pubk, int npubk);
664
__owur int	EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
665 666

void	EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
667 668 669 670
void	EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
		const unsigned char *in,int inl);
void	EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
int	EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
671 672 673

void	EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
int	EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
674 675 676 677
		const unsigned char *in, int inl);
int	EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
		char *out, int *outl);
int	EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
678

679
void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
D
 
Dr. Stephen Henson 已提交
680
int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
681 682
EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
683
int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
684
int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
D
 
Dr. Stephen Henson 已提交
685
int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
686
int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
687

688
#ifndef OPENSSL_NO_BIO
689 690 691
BIO_METHOD *BIO_f_md(void);
BIO_METHOD *BIO_f_base64(void);
BIO_METHOD *BIO_f_cipher(void);
B
Ben Laurie 已提交
692
BIO_METHOD *BIO_f_reliable(void);
693
__owur int BIO_set_cipher(BIO *b,const EVP_CIPHER *c,const unsigned char *k,
694
		const unsigned char *i, int enc);
695 696
#endif

D
 
Dr. Stephen Henson 已提交
697
const EVP_MD *EVP_md_null(void);
698
#ifndef OPENSSL_NO_MD2
D
 
Dr. Stephen Henson 已提交
699
const EVP_MD *EVP_md2(void);
700
#endif
701
#ifndef OPENSSL_NO_MD4
D
 
Dr. Stephen Henson 已提交
702
const EVP_MD *EVP_md4(void);
703
#endif
704
#ifndef OPENSSL_NO_MD5
D
 
Dr. Stephen Henson 已提交
705
const EVP_MD *EVP_md5(void);
706
#endif
707
#ifndef OPENSSL_NO_SHA
D
 
Dr. Stephen Henson 已提交
708 709 710 711
const EVP_MD *EVP_sha(void);
const EVP_MD *EVP_sha1(void);
const EVP_MD *EVP_dss(void);
const EVP_MD *EVP_dss1(void);
B
Bodo Möller 已提交
712
const EVP_MD *EVP_ecdsa(void);
713
#endif
714 715 716 717 718 719 720 721
#ifndef OPENSSL_NO_SHA256
const EVP_MD *EVP_sha224(void);
const EVP_MD *EVP_sha256(void);
#endif
#ifndef OPENSSL_NO_SHA512
const EVP_MD *EVP_sha384(void);
const EVP_MD *EVP_sha512(void);
#endif
722
#ifndef OPENSSL_NO_MDC2
D
 
Dr. Stephen Henson 已提交
723
const EVP_MD *EVP_mdc2(void);
724
#endif
725
#ifndef OPENSSL_NO_RIPEMD
D
 
Dr. Stephen Henson 已提交
726
const EVP_MD *EVP_ripemd160(void);
727
#endif
728 729 730
#ifndef OPENSSL_NO_WHIRLPOOL
const EVP_MD *EVP_whirlpool(void);
#endif
D
 
Dr. Stephen Henson 已提交
731
const EVP_CIPHER *EVP_enc_null(void);		/* does nothing :-) */
732
#ifndef OPENSSL_NO_DES
D
 
Dr. Stephen Henson 已提交
733 734 735
const EVP_CIPHER *EVP_des_ecb(void);
const EVP_CIPHER *EVP_des_ede(void);
const EVP_CIPHER *EVP_des_ede3(void);
L
Lutz Jänicke 已提交
736 737
const EVP_CIPHER *EVP_des_ede_ecb(void);
const EVP_CIPHER *EVP_des_ede3_ecb(void);
738 739 740 741 742 743 744 745 746 747 748 749 750 751
const EVP_CIPHER *EVP_des_cfb64(void);
# define EVP_des_cfb EVP_des_cfb64
const EVP_CIPHER *EVP_des_cfb1(void);
const EVP_CIPHER *EVP_des_cfb8(void);
const EVP_CIPHER *EVP_des_ede_cfb64(void);
# define EVP_des_ede_cfb EVP_des_ede_cfb64
#if 0
const EVP_CIPHER *EVP_des_ede_cfb1(void);
const EVP_CIPHER *EVP_des_ede_cfb8(void);
#endif
const EVP_CIPHER *EVP_des_ede3_cfb64(void);
# define EVP_des_ede3_cfb EVP_des_ede3_cfb64
const EVP_CIPHER *EVP_des_ede3_cfb1(void);
const EVP_CIPHER *EVP_des_ede3_cfb8(void);
D
 
Dr. Stephen Henson 已提交
752 753 754 755 756 757 758
const EVP_CIPHER *EVP_des_ofb(void);
const EVP_CIPHER *EVP_des_ede_ofb(void);
const EVP_CIPHER *EVP_des_ede3_ofb(void);
const EVP_CIPHER *EVP_des_cbc(void);
const EVP_CIPHER *EVP_des_ede_cbc(void);
const EVP_CIPHER *EVP_des_ede3_cbc(void);
const EVP_CIPHER *EVP_desx_cbc(void);
759 760 761
/* This should now be supported through the dev_crypto ENGINE. But also, why are
 * rc4 and md5 declarations made here inside a "NO_DES" precompiler branch? */
#if 0
762 763
# ifdef OPENSSL_OPENBSD_DEV_CRYPTO
const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void);
B
Ben Laurie 已提交
764
const EVP_CIPHER *EVP_dev_crypto_rc4(void);
B
Ben Laurie 已提交
765
const EVP_MD *EVP_dev_crypto_md5(void);
766
# endif
767
#endif
768
#endif
769
#ifndef OPENSSL_NO_RC4
D
 
Dr. Stephen Henson 已提交
770 771
const EVP_CIPHER *EVP_rc4(void);
const EVP_CIPHER *EVP_rc4_40(void);
772
#endif
773
#ifndef OPENSSL_NO_IDEA
D
 
Dr. Stephen Henson 已提交
774
const EVP_CIPHER *EVP_idea_ecb(void);
775 776
const EVP_CIPHER *EVP_idea_cfb64(void);
# define EVP_idea_cfb EVP_idea_cfb64
D
 
Dr. Stephen Henson 已提交
777 778
const EVP_CIPHER *EVP_idea_ofb(void);
const EVP_CIPHER *EVP_idea_cbc(void);
779
#endif
780
#ifndef OPENSSL_NO_RC2
D
 
Dr. Stephen Henson 已提交
781 782 783 784
const EVP_CIPHER *EVP_rc2_ecb(void);
const EVP_CIPHER *EVP_rc2_cbc(void);
const EVP_CIPHER *EVP_rc2_40_cbc(void);
const EVP_CIPHER *EVP_rc2_64_cbc(void);
785 786
const EVP_CIPHER *EVP_rc2_cfb64(void);
# define EVP_rc2_cfb EVP_rc2_cfb64
D
 
Dr. Stephen Henson 已提交
787
const EVP_CIPHER *EVP_rc2_ofb(void);
788
#endif
789
#ifndef OPENSSL_NO_BF
D
 
Dr. Stephen Henson 已提交
790 791
const EVP_CIPHER *EVP_bf_ecb(void);
const EVP_CIPHER *EVP_bf_cbc(void);
792 793
const EVP_CIPHER *EVP_bf_cfb64(void);
# define EVP_bf_cfb EVP_bf_cfb64
D
 
Dr. Stephen Henson 已提交
794
const EVP_CIPHER *EVP_bf_ofb(void);
795
#endif
796
#ifndef OPENSSL_NO_CAST
D
 
Dr. Stephen Henson 已提交
797 798
const EVP_CIPHER *EVP_cast5_ecb(void);
const EVP_CIPHER *EVP_cast5_cbc(void);
799 800
const EVP_CIPHER *EVP_cast5_cfb64(void);
# define EVP_cast5_cfb EVP_cast5_cfb64
D
 
Dr. Stephen Henson 已提交
801
const EVP_CIPHER *EVP_cast5_ofb(void);
802
#endif
803
#ifndef OPENSSL_NO_RC5
D
 
Dr. Stephen Henson 已提交
804 805
const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
806 807
const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
D
 
Dr. Stephen Henson 已提交
808
const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
809
#endif
810
#ifndef OPENSSL_NO_AES
D
 
Dr. Stephen Henson 已提交
811 812
const EVP_CIPHER *EVP_aes_128_ecb(void);
const EVP_CIPHER *EVP_aes_128_cbc(void);
813 814 815 816
const EVP_CIPHER *EVP_aes_128_cfb1(void);
const EVP_CIPHER *EVP_aes_128_cfb8(void);
const EVP_CIPHER *EVP_aes_128_cfb128(void);
# define EVP_aes_128_cfb EVP_aes_128_cfb128
817 818
const EVP_CIPHER *EVP_aes_128_ofb(void);
const EVP_CIPHER *EVP_aes_128_ctr(void);
D
 
Dr. Stephen Henson 已提交
819 820
const EVP_CIPHER *EVP_aes_192_ecb(void);
const EVP_CIPHER *EVP_aes_192_cbc(void);
821 822 823 824
const EVP_CIPHER *EVP_aes_192_cfb1(void);
const EVP_CIPHER *EVP_aes_192_cfb8(void);
const EVP_CIPHER *EVP_aes_192_cfb128(void);
# define EVP_aes_192_cfb EVP_aes_192_cfb128
825 826
const EVP_CIPHER *EVP_aes_192_ofb(void);
const EVP_CIPHER *EVP_aes_192_ctr(void);
D
 
Dr. Stephen Henson 已提交
827 828
const EVP_CIPHER *EVP_aes_256_ecb(void);
const EVP_CIPHER *EVP_aes_256_cbc(void);
829 830 831 832
const EVP_CIPHER *EVP_aes_256_cfb1(void);
const EVP_CIPHER *EVP_aes_256_cfb8(void);
const EVP_CIPHER *EVP_aes_256_cfb128(void);
# define EVP_aes_256_cfb EVP_aes_256_cfb128
833 834 835
const EVP_CIPHER *EVP_aes_256_ofb(void);
const EVP_CIPHER *EVP_aes_256_ctr(void);
#endif
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858
#ifndef OPENSSL_NO_CAMELLIA
const EVP_CIPHER *EVP_camellia_128_ecb(void);
const EVP_CIPHER *EVP_camellia_128_cbc(void);
const EVP_CIPHER *EVP_camellia_128_cfb1(void);
const EVP_CIPHER *EVP_camellia_128_cfb8(void);
const EVP_CIPHER *EVP_camellia_128_cfb128(void);
# define EVP_camellia_128_cfb EVP_camellia_128_cfb128
const EVP_CIPHER *EVP_camellia_128_ofb(void);
const EVP_CIPHER *EVP_camellia_192_ecb(void);
const EVP_CIPHER *EVP_camellia_192_cbc(void);
const EVP_CIPHER *EVP_camellia_192_cfb1(void);
const EVP_CIPHER *EVP_camellia_192_cfb8(void);
const EVP_CIPHER *EVP_camellia_192_cfb128(void);
# define EVP_camellia_192_cfb EVP_camellia_192_cfb128
const EVP_CIPHER *EVP_camellia_192_ofb(void);
const EVP_CIPHER *EVP_camellia_256_ecb(void);
const EVP_CIPHER *EVP_camellia_256_cbc(void);
const EVP_CIPHER *EVP_camellia_256_cfb1(void);
const EVP_CIPHER *EVP_camellia_256_cfb8(void);
const EVP_CIPHER *EVP_camellia_256_cfb128(void);
# define EVP_camellia_256_cfb EVP_camellia_256_cfb128
const EVP_CIPHER *EVP_camellia_256_ofb(void);
#endif
859

B
Bodo Möller 已提交
860 861 862 863 864 865 866 867
#ifndef OPENSSL_NO_SEED
const EVP_CIPHER *EVP_seed_ecb(void);
const EVP_CIPHER *EVP_seed_cbc(void);
const EVP_CIPHER *EVP_seed_cfb128(void);
# define EVP_seed_cfb EVP_seed_cfb128
const EVP_CIPHER *EVP_seed_ofb(void);
#endif

868 869 870 871 872 873 874 875 876 877 878
void OPENSSL_add_all_algorithms_noconf(void);
void OPENSSL_add_all_algorithms_conf(void);

#ifdef OPENSSL_LOAD_CONF
#define OpenSSL_add_all_algorithms() \
		OPENSSL_add_all_algorithms_conf()
#else
#define OpenSSL_add_all_algorithms() \
		OPENSSL_add_all_algorithms_noconf()
#endif

879 880 881 882 883
void OpenSSL_add_all_ciphers(void);
void OpenSSL_add_all_digests(void);
#define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms()
#define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers()
#define SSLeay_add_all_digests() OpenSSL_add_all_digests()
884

D
 
Dr. Stephen Henson 已提交
885 886
int EVP_add_cipher(const EVP_CIPHER *cipher);
int EVP_add_digest(const EVP_MD *digest);
887

B
Ben Laurie 已提交
888 889
const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
const EVP_MD *EVP_get_digestbyname(const char *name);
890 891
void EVP_cleanup(void);

892 893 894 895 896 897 898 899 900 901
void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph,
		const char *from, const char *to, void *x), void *arg);
void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph,
		const char *from, const char *to, void *x), void *arg);

void EVP_MD_do_all(void (*fn)(const EVP_MD *ciph,
		const char *from, const char *to, void *x), void *arg);
void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *ciph,
		const char *from, const char *to, void *x), void *arg);

902
int		EVP_PKEY_decrypt_old(unsigned char *dec_key,
903 904
			const unsigned char *enc_key,int enc_key_len,
			EVP_PKEY *private_key);
905
int		EVP_PKEY_encrypt_old(unsigned char *enc_key,
906 907
			const unsigned char *key,int key_len,
			EVP_PKEY *pub_key);
908
int		EVP_PKEY_type(int type);
909 910
int		EVP_PKEY_id(const EVP_PKEY *pkey);
int		EVP_PKEY_base_id(const EVP_PKEY *pkey);
911
int		EVP_PKEY_bits(EVP_PKEY *pkey);
912
int		EVP_PKEY_size(EVP_PKEY *pkey);
913 914
int 		EVP_PKEY_set_type(EVP_PKEY *pkey,int type);
int		EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len);
915
int 		EVP_PKEY_assign(EVP_PKEY *pkey,int type,void *key);
916
void *		EVP_PKEY_get0(EVP_PKEY *pkey);
917

918
#ifndef OPENSSL_NO_RSA
919 920 921
struct rsa_st;
int EVP_PKEY_set1_RSA(EVP_PKEY *pkey,struct rsa_st *key);
struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
D
Dr. Stephen Henson 已提交
922
#endif
923
#ifndef OPENSSL_NO_DSA
924 925 926
struct dsa_st;
int EVP_PKEY_set1_DSA(EVP_PKEY *pkey,struct dsa_st *key);
struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
D
Dr. Stephen Henson 已提交
927
#endif
928
#ifndef OPENSSL_NO_DH
929 930 931
struct dh_st;
int EVP_PKEY_set1_DH(EVP_PKEY *pkey,struct dh_st *key);
struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
D
Dr. Stephen Henson 已提交
932
#endif
933 934 935 936
#ifndef OPENSSL_NO_EC
struct ec_key_st;
int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey,struct ec_key_st *key);
struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
B
Bodo Möller 已提交
937
#endif
938

939 940
EVP_PKEY *	EVP_PKEY_new(void);
void		EVP_PKEY_free(EVP_PKEY *pkey);
941

942
EVP_PKEY *	d2i_PublicKey(int type,EVP_PKEY **a, const unsigned char **pp,
943
			long length);
944 945
int		i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);

946
EVP_PKEY *	d2i_PrivateKey(int type,EVP_PKEY **a, const unsigned char **pp,
947
			long length);
948
EVP_PKEY *	d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
949
			long length);
950 951
int		i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);

R
Richard Levitte 已提交
952 953
int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
954
int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode);
R
Richard Levitte 已提交
955
int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);
956

R
Richard Levitte 已提交
957
int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
958

959 960 961 962 963 964 965
int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
				int indent, ASN1_PCTX *pctx);
int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
				int indent, ASN1_PCTX *pctx);
int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
				int indent, ASN1_PCTX *pctx);

966 967
int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);

968
int EVP_CIPHER_type(const EVP_CIPHER *ctx);
969

970 971 972 973 974 975 976
/* calls methods */
int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);

/* These are used by EVP_CIPHER methods */
int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
977

978
/* PKCS5 password based encryption */
979
int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
D
 
Dr. Stephen Henson 已提交
980
			 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
981
			 int en_de);
982
int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
983
			   const unsigned char *salt, int saltlen, int iter,
B
Ben Laurie 已提交
984
			   int keylen, unsigned char *out);
985 986 987 988
int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
			   const unsigned char *salt, int saltlen, int iter,
			   const EVP_MD *digest,
		      int keylen, unsigned char *out);
989
int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
D
 
Dr. Stephen Henson 已提交
990
			 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
991
			 int en_de);
992

993 994
void PKCS5_PBE_add(void);

995 996
int EVP_PBE_CipherInit (ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
	     ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de);
997 998 999 1000 1001 1002 1003 1004 1005 1006

/* PBE type */

/* Can appear as the outermost AlgorithmIdentifier */
#define EVP_PBE_TYPE_OUTER	0x0
/* Is an PRF type OID */
#define EVP_PBE_TYPE_PRF	0x1

int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, int md_nid,
	     EVP_PBE_KEYGEN *keygen);
D
 
Dr. Stephen Henson 已提交
1007
int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md,
1008
		    EVP_PBE_KEYGEN *keygen);
1009 1010
int EVP_PBE_find(int type, int pbe_nid,
			int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen);
1011 1012
void EVP_PBE_cleanup(void);

1013 1014
#define ASN1_PKEY_ALIAS		0x1
#define ASN1_PKEY_DYNAMIC	0x2
1015
#define ASN1_PKEY_SIGPARAM_NULL	0x4
1016

1017
#define ASN1_PKEY_CTRL_PKCS7_SIGN	0x1
1018
#define ASN1_PKEY_CTRL_PKCS7_ENCRYPT	0x2
1019
#define ASN1_PKEY_CTRL_DEFAULT_MD_NID	0x3
D
Dr. Stephen Henson 已提交
1020 1021
#define ASN1_PKEY_CTRL_CMS_SIGN		0x5
#define ASN1_PKEY_CTRL_CMS_ENVELOPE	0x7
1022

1023 1024
int EVP_PKEY_asn1_get_count(void);
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
1025 1026 1027
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
					const char *str, int len);
1028 1029
int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
int EVP_PKEY_asn1_add_alias(int to, int from);
1030 1031 1032
int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, int *ppkey_flags,
				const char **pinfo, const char **ppem_str,
					const EVP_PKEY_ASN1_METHOD *ameth);
1033

1034
const EVP_PKEY_ASN1_METHOD* EVP_PKEY_get0_asn1(EVP_PKEY *pkey);
1035
EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags,
1036
					const char *pem_str, const char *info);
1037 1038
void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, 
			const EVP_PKEY_ASN1_METHOD *src);
1039
void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
1040 1041 1042 1043 1044 1045 1046 1047
void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
		int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub),
		int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk),
		int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),
		int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent,
							ASN1_PCTX *pctx),
		int (*pkey_size)(const EVP_PKEY *pk),
		int (*pkey_bits)(const EVP_PKEY *pk));
1048 1049 1050 1051 1052 1053
void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
		int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf),
		int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk),
		int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,
							ASN1_PCTX *pctx));
void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
1054
		int (*param_decode)(EVP_PKEY *pkey,
1055
				const unsigned char **pder, int derlen),
1056
		int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder),
1057 1058 1059 1060
		int (*param_missing)(const EVP_PKEY *pk),
		int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from),
		int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),
		int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
1061
							ASN1_PCTX *pctx));
1062

1063 1064 1065
void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
		void (*pkey_free)(EVP_PKEY *pkey));
void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
1066
		int (*pkey_ctrl)(EVP_PKEY *pkey, int op,
1067
							long arg1, void *arg2));
1068

1069

1070
#define EVP_PKEY_OP_UNDEFINED		0
1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081
#define EVP_PKEY_OP_PARAMGEN		(1<<1)
#define EVP_PKEY_OP_KEYGEN		(1<<2)
#define EVP_PKEY_OP_SIGN		(1<<3)
#define EVP_PKEY_OP_VERIFY		(1<<4)
#define EVP_PKEY_OP_VERIFYRECOVER	(1<<5)
#define EVP_PKEY_OP_SIGNCTX		(1<<6)
#define EVP_PKEY_OP_VERIFYCTX		(1<<7)
#define EVP_PKEY_OP_ENCRYPT		(1<<8)
#define EVP_PKEY_OP_DECRYPT		(1<<9)
#define EVP_PKEY_OP_DERIVE		(1<<10)

D
Dr. Stephen Henson 已提交
1082
#define EVP_PKEY_OP_TYPE_SIG	\
1083 1084 1085
	(EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \
		| EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX)

D
Dr. Stephen Henson 已提交
1086 1087
#define EVP_PKEY_OP_TYPE_CRYPT \
	(EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT)
1088

D
Dr. Stephen Henson 已提交
1089 1090 1091 1092
#define EVP_PKEY_OP_TYPE_NOGEN \
	(EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE)

#define EVP_PKEY_OP_TYPE_GEN \
1093 1094 1095
		(EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN)

#define	 EVP_PKEY_CTX_set_signature_md(ctx, md)	\
D
Dr. Stephen Henson 已提交
1096
		EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG,  \
1097
					EVP_PKEY_CTRL_MD, 0, (void *)md)
1098

1099
#define EVP_PKEY_CTRL_MD		1
1100 1101 1102 1103
#define EVP_PKEY_CTRL_PEER_KEY		2

#define EVP_PKEY_CTRL_PKCS7_ENCRYPT	3
#define EVP_PKEY_CTRL_PKCS7_DECRYPT	4
1104

1105
#define EVP_PKEY_CTRL_PKCS7_SIGN	5
1106

1107 1108 1109 1110
#define EVP_PKEY_CTRL_SET_MAC_KEY	6

#define EVP_PKEY_CTRL_DIGESTINIT	7

1111 1112 1113
/* Used by GOST key encryption in TLS */
#define EVP_PKEY_CTRL_SET_IV 		8

D
Dr. Stephen Henson 已提交
1114 1115 1116 1117
#define EVP_PKEY_CTRL_CMS_ENCRYPT	9
#define EVP_PKEY_CTRL_CMS_DECRYPT	10
#define EVP_PKEY_CTRL_CMS_SIGN		11

1118 1119
#define EVP_PKEY_CTRL_CIPHER		12

1120 1121
#define EVP_PKEY_ALG_CTRL		0x1000

1122

1123
#define EVP_PKEY_FLAG_AUTOARGLEN	2
1124 1125 1126 1127
/* Method handles all operations: don't assume any digest related
 * defaults.
 */
#define EVP_PKEY_FLAG_SIGCTX_CUSTOM	4
1128

1129
const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type);
1130
EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags);
1131 1132 1133
void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,
				const EVP_PKEY_METHOD *meth);
void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src);
1134
void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth);
1135 1136
int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth);

D
Dr. Stephen Henson 已提交
1137 1138
EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
1139
EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
1140
void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
1141

1142 1143
int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
				int cmd, int p1, void *p2);
1144 1145
int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
						const char *value);
1146

1147 1148 1149
int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx);
void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);

1150
EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,
1151
				const unsigned char *key, int keylen);
1152

D
Dr. Stephen Henson 已提交
1153 1154
void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data);
void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx);
1155 1156
EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);

1157 1158
EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);

D
Dr. Stephen Henson 已提交
1159 1160
void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
1161

1162 1163
int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
1164 1165
			unsigned char *sig, size_t *siglen,
			const unsigned char *tbs, size_t tbslen);
1166 1167
int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
1168 1169
			const unsigned char *sig, size_t siglen,
			const unsigned char *tbs, size_t tbslen);
1170 1171
int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
1172 1173
			unsigned char *rout, size_t *routlen,
			const unsigned char *sig, size_t siglen);
1174 1175
int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
1176 1177
			unsigned char *out, size_t *outlen,
			const unsigned char *in, size_t inlen);
1178 1179
int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
1180 1181
			unsigned char *out, size_t *outlen,
			const unsigned char *in, size_t inlen);
1182

1183 1184
int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
1185
int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
1186

D
Dr. Stephen Henson 已提交
1187 1188 1189 1190 1191 1192 1193 1194
typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);

int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);

void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
1195 1196
EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);

D
Dr. Stephen Henson 已提交
1197 1198
int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);

1199 1200 1201
void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
	int (*init)(EVP_PKEY_CTX *ctx));

1202 1203 1204
void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth,
	int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src));

1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217
void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
	void (*cleanup)(EVP_PKEY_CTX *ctx));

void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
	int (*paramgen_init)(EVP_PKEY_CTX *ctx),
	int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));

void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
	int (*keygen_init)(EVP_PKEY_CTX *ctx),
	int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));

void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
	int (*sign_init)(EVP_PKEY_CTX *ctx),
1218 1219
	int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
					const unsigned char *tbs, size_t tbslen));
1220 1221 1222

void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
	int (*verify_init)(EVP_PKEY_CTX *ctx),
1223 1224
	int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,
					const unsigned char *tbs, size_t tbslen));
1225 1226 1227 1228

void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth,
	int (*verify_recover_init)(EVP_PKEY_CTX *ctx),
	int (*verify_recover)(EVP_PKEY_CTX *ctx,
1229 1230
					unsigned char *sig, size_t *siglen,
					const unsigned char *tbs, size_t tbslen));
1231 1232 1233

void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
	int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
1234
	int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
1235 1236 1237 1238 1239 1240 1241 1242 1243
					EVP_MD_CTX *mctx));

void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
	int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
	int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig,int siglen,
					EVP_MD_CTX *mctx));

void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
	int (*encrypt_init)(EVP_PKEY_CTX *ctx),
1244
	int (*encryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
1245
					const unsigned char *in, size_t inlen));
1246 1247 1248

void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
	int (*decrypt_init)(EVP_PKEY_CTX *ctx),
1249 1250
	int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
					const unsigned char *in, size_t inlen));
1251 1252 1253

void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
	int (*derive_init)(EVP_PKEY_CTX *ctx),
1254
	int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen));
1255 1256 1257 1258 1259 1260

void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
	int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2),
	int (*ctrl_str)(EVP_PKEY_CTX *ctx,
					const char *type, const char *value));

1261
/* BEGIN ERROR CODES */
1262 1263 1264
/* The following lines are auto generated by the script mkerr.pl. Any changes
 * made after this point may be overwritten when the script is next run.
 */
1265
void ERR_load_EVP_strings(void);
1266

1267 1268 1269
/* Error codes for the EVP functions. */

/* Function codes. */
1270
#define EVP_F_AESNI_INIT_KEY				 165
1271
#define EVP_F_AES_INIT_KEY				 133
1272
#define EVP_F_CAMELLIA_INIT_KEY				 159
1273
#define EVP_F_D2I_PKEY					 100
1274
#define EVP_F_DO_SIGVER_INIT				 161
B
Bodo Möller 已提交
1275 1276
#define EVP_F_DSAPKEY2PKCS8				 134
#define EVP_F_DSA_PKEY2PKCS8				 135
B
Bodo Möller 已提交
1277
#define EVP_F_ECDSA_PKEY2PKCS8				 129
B
Bodo Möller 已提交
1278 1279
#define EVP_F_ECKEY_PKEY2PKCS8				 132
#define EVP_F_EVP_CIPHERINIT_EX				 123
1280
#define EVP_F_EVP_CIPHER_CTX_COPY			 163
D
 
Dr. Stephen Henson 已提交
1281
#define EVP_F_EVP_CIPHER_CTX_CTRL			 124
D
 
Dr. Stephen Henson 已提交
1282
#define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH		 122
B
Bodo Möller 已提交
1283 1284 1285 1286
#define EVP_F_EVP_DECRYPTFINAL_EX			 101
#define EVP_F_EVP_DIGESTINIT_EX				 128
#define EVP_F_EVP_ENCRYPTFINAL_EX			 127
#define EVP_F_EVP_MD_CTX_COPY_EX			 110
1287
#define EVP_F_EVP_MD_SIZE				 162
1288
#define EVP_F_EVP_OPENINIT				 102
1289
#define EVP_F_EVP_PBE_ALG_ADD				 115
1290
#define EVP_F_EVP_PBE_ALG_ADD_TYPE			 160
1291 1292
#define EVP_F_EVP_PBE_CIPHERINIT			 116
#define EVP_F_EVP_PKCS82PKEY				 111
1293
#define EVP_F_EVP_PKCS82PKEY_BROKEN			 136
B
Bodo Möller 已提交
1294
#define EVP_F_EVP_PKEY2PKCS8_BROKEN			 113
1295
#define EVP_F_EVP_PKEY_COPY_PARAMETERS			 103
1296
#define EVP_F_EVP_PKEY_CTX_CTRL				 137
1297
#define EVP_F_EVP_PKEY_CTX_CTRL_STR			 150
1298
#define EVP_F_EVP_PKEY_CTX_DUP				 156
1299
#define EVP_F_EVP_PKEY_DECRYPT				 104
1300
#define EVP_F_EVP_PKEY_DECRYPT_INIT			 138
1301
#define EVP_F_EVP_PKEY_DECRYPT_OLD			 151
D
Dr. Stephen Henson 已提交
1302 1303
#define EVP_F_EVP_PKEY_DERIVE				 153
#define EVP_F_EVP_PKEY_DERIVE_INIT			 154
1304
#define EVP_F_EVP_PKEY_DERIVE_SET_PEER			 155
1305
#define EVP_F_EVP_PKEY_ENCRYPT				 105
1306
#define EVP_F_EVP_PKEY_ENCRYPT_INIT			 139
1307
#define EVP_F_EVP_PKEY_ENCRYPT_OLD			 152
1308 1309
#define EVP_F_EVP_PKEY_GET1_DH				 119
#define EVP_F_EVP_PKEY_GET1_DSA				 120
B
Bodo Möller 已提交
1310
#define EVP_F_EVP_PKEY_GET1_ECDSA			 130
1311
#define EVP_F_EVP_PKEY_GET1_EC_KEY			 131
1312
#define EVP_F_EVP_PKEY_GET1_RSA				 121
D
Dr. Stephen Henson 已提交
1313 1314
#define EVP_F_EVP_PKEY_KEYGEN				 146
#define EVP_F_EVP_PKEY_KEYGEN_INIT			 147
1315
#define EVP_F_EVP_PKEY_NEW				 106
D
Dr. Stephen Henson 已提交
1316 1317
#define EVP_F_EVP_PKEY_PARAMGEN				 148
#define EVP_F_EVP_PKEY_PARAMGEN_INIT			 149
1318 1319 1320 1321 1322 1323
#define EVP_F_EVP_PKEY_SIGN				 140
#define EVP_F_EVP_PKEY_SIGN_INIT			 141
#define EVP_F_EVP_PKEY_VERIFY				 142
#define EVP_F_EVP_PKEY_VERIFY_INIT			 143
#define EVP_F_EVP_PKEY_VERIFY_RECOVER			 144
#define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT		 145
1324
#define EVP_F_EVP_RIJNDAEL				 126
1325 1326
#define EVP_F_EVP_SIGNFINAL				 107
#define EVP_F_EVP_VERIFYFINAL				 108
1327
#define EVP_F_INT_CTX_NEW				 157
1328 1329
#define EVP_F_PKCS5_PBE_KEYIVGEN			 117
#define EVP_F_PKCS5_V2_PBE_KEYIVGEN			 118
1330
#define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN			 164
B
Bodo Möller 已提交
1331
#define EVP_F_PKCS8_SET_BROKEN				 112
1332
#define EVP_F_PKEY_SET_TYPE				 158
1333
#define EVP_F_RC2_MAGIC_TO_METH				 109
D
 
Dr. Stephen Henson 已提交
1334
#define EVP_F_RC5_CTRL					 125
1335 1336

/* Reason codes. */
A
Andy Polyakov 已提交
1337
#define EVP_R_AES_IV_SETUP_FAILED			 162
1338
#define EVP_R_AES_KEY_SETUP_FAILED			 143
B
Bodo Möller 已提交
1339
#define EVP_R_ASN1_LIB					 140
1340
#define EVP_R_BAD_BLOCK_LENGTH				 136
1341
#define EVP_R_BAD_DECRYPT				 100
1342
#define EVP_R_BAD_KEY_LENGTH				 137
1343 1344
#define EVP_R_BN_DECODE_ERROR				 112
#define EVP_R_BN_PUBKEY_ERROR				 113
1345
#define EVP_R_BUFFER_TOO_SMALL				 155
1346
#define EVP_R_CAMELLIA_KEY_SETUP_FAILED			 157
1347
#define EVP_R_CIPHER_PARAMETER_ERROR			 122
1348
#define EVP_R_COMMAND_NOT_SUPPORTED			 147
D
 
Dr. Stephen Henson 已提交
1349 1350
#define EVP_R_CTRL_NOT_IMPLEMENTED			 132
#define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED		 133
1351
#define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH		 138
1352
#define EVP_R_DECODE_ERROR				 114
1353
#define EVP_R_DIFFERENT_KEY_TYPES			 101
1354
#define EVP_R_DIFFERENT_PARAMETERS			 153
1355 1356
#define EVP_R_ENCODE_ERROR				 115
#define EVP_R_EVP_PBE_CIPHERINIT_ERROR			 119
1357 1358 1359
#define EVP_R_EXPECTING_AN_RSA_KEY			 127
#define EVP_R_EXPECTING_A_DH_KEY			 128
#define EVP_R_EXPECTING_A_DSA_KEY			 129
B
Bodo Möller 已提交
1360
#define EVP_R_EXPECTING_A_ECDSA_KEY			 141
1361
#define EVP_R_EXPECTING_A_EC_KEY			 142
D
 
Dr. Stephen Henson 已提交
1362
#define EVP_R_INITIALIZATION_ERROR			 134
U
Ulf Möller 已提交
1363
#define EVP_R_INPUT_NOT_INITIALIZED			 111
1364
#define EVP_R_INVALID_DIGEST				 152
D
 
Dr. Stephen Henson 已提交
1365
#define EVP_R_INVALID_KEY_LENGTH			 130
1366
#define EVP_R_INVALID_OPERATION				 148
1367
#define EVP_R_IV_TOO_LARGE				 102
1368
#define EVP_R_KEYGEN_FAILURE				 120
1369
#define EVP_R_MESSAGE_DIGEST_IS_NULL			 159
1370
#define EVP_R_METHOD_NOT_SUPPORTED			 144
U
Ulf Möller 已提交
1371
#define EVP_R_MISSING_PARAMETERS			 103
1372
#define EVP_R_NO_CIPHER_SET				 131
1373
#define EVP_R_NO_DEFAULT_DIGEST				 158
1374
#define EVP_R_NO_DIGEST_SET				 139
1375
#define EVP_R_NO_DSA_PARAMETERS				 116
1376
#define EVP_R_NO_KEY_SET				 154
1377
#define EVP_R_NO_OPERATION_SET				 149
1378 1379
#define EVP_R_NO_SIGN_FUNCTION_CONFIGURED		 104
#define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED		 105
1380 1381
#define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE	 150
#define EVP_R_OPERATON_NOT_INITIALIZED			 151
1382
#define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE			 117
1383 1384
#define EVP_R_PRIVATE_KEY_DECODE_ERROR			 145
#define EVP_R_PRIVATE_KEY_ENCODE_ERROR			 146
1385
#define EVP_R_PUBLIC_KEY_NOT_RSA			 106
D
Dr. Stephen Henson 已提交
1386 1387
#define EVP_R_UNKNOWN_CIPHER				 160
#define EVP_R_UNKNOWN_DIGEST				 161
1388
#define EVP_R_UNKNOWN_PBE_ALGORITHM			 121
D
 
Dr. Stephen Henson 已提交
1389
#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS		 135
1390
#define EVP_R_UNSUPPORTED_ALGORITHM			 156
1391
#define EVP_R_UNSUPPORTED_CIPHER			 107
1392 1393
#define EVP_R_UNSUPPORTED_KEYLENGTH			 123
#define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION	 124
1394
#define EVP_R_UNSUPPORTED_KEY_SIZE			 108
1395
#define EVP_R_UNSUPPORTED_PRF				 125
1396
#define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM		 118
1397
#define EVP_R_UNSUPPORTED_SALT_TYPE			 126
1398 1399
#define EVP_R_WRONG_FINAL_BLOCK_LENGTH			 109
#define EVP_R_WRONG_PUBLIC_KEY_TYPE			 110
1400

1401 1402 1403 1404
#ifdef  __cplusplus
}
#endif
#endif