1/*
2 * Copyright (c) 2011 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24/*
25 * Copyright (c) 2005 - 2008 Kungliga Tekniska Högskolan
26 * (Royal Institute of Technology, Stockholm, Sweden).
27 * All rights reserved.
28 *
29 * Redistribution and use in source and binary forms, with or without
30 * modification, are permitted provided that the following conditions
31 * are met:
32 *
33 * 1. Redistributions of source code must retain the above copyright
34 *    notice, this list of conditions and the following disclaimer.
35 *
36 * 2. Redistributions in binary form must reproduce the above copyright
37 *    notice, this list of conditions and the following disclaimer in the
38 *    documentation and/or other materials provided with the distribution.
39 *
40 * 3. Neither the name of the Institute nor the names of its contributors
41 *    may be used to endorse or promote products derived from this software
42 *    without specific prior written permission.
43 *
44 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
45 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
46 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
48 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
49 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
50 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
51 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
52 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
53 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
54 * SUCH DAMAGE.
55 */
56
57#ifndef _OSSL_EVP_H_
58#define _OSSL_EVP_H_    1
59
60#include <stdlib.h>
61
62#include "ossl-engine.h"
63#include "ossl-objects.h"
64
65/* symbol renaming */
66#define EVP_CIPHER_CTX_block_size		ossl_EVP_CIPHER_CTX_block_size
67#define EVP_CIPHER_CTX_cipher			ossl_EVP_CIPHER_CTX_cipher
68#define EVP_CIPHER_CTX_cleanup			ossl_EVP_CIPHER_CTX_cleanup
69#define EVP_CIPHER_CTX_flags			ossl_EVP_CIPHER_CTX_flags
70#define EVP_CIPHER_CTX_get_app_data		ossl_EVP_CIPHER_CTX_get_app_data
71#define EVP_CIPHER_CTX_init			ossl_EVP_CIPHER_CTX_init
72#define EVP_CIPHER_CTX_iv_length		ossl_EVP_CIPHER_CTX_iv_length
73#define EVP_CIPHER_CTX_key_length		ossl_EVP_CIPHER_CTX_key_length
74#define EVP_CIPHER_CTX_mode			ossl_EVP_CIPHER_CTX_mode
75#define EVP_CIPHER_CTX_set_app_data		ossl_EVP_CIPHER_CTX_set_app_data
76#define EVP_CIPHER_CTX_set_key_length		ossl_EVP_CIPHER_CTX_set_key_length
77#define EVP_CIPHER_CTX_set_padding		ossl_EVP_CIPHER_CTX_set_padding
78#define EVP_CIPHER_block_size			ossl_EVP_CIPHER_block_size
79#define EVP_CIPHER_iv_length			ossl_EVP_CIPHER_iv_length
80#define EVP_CIPHER_key_length			ossl_EVP_CIPHER_key_length
81#define EVP_CIPHER_nid				ossl_EVP_CIPHER_nid
82#define EVP_Cipher				ossl_EVP_Cipher
83#define EVP_CipherInit_ex			ossl_EVP_CipherInit_ex
84#define EVP_CipherInit				ossl_EVP_CipherInit
85#define EVP_CipherUpdate			ossl_EVP_CipherUpdate
86#define EVP_CipherFinal_ex			ossl_EVP_CipherFinal_ex
87#define EVP_Digest				ossl_EVP_Digest
88#define EVP_DigestFinal				ossl_EVP_DigestFinal
89#define EVP_DigestFinal_ex			ossl_EVP_DigestFinal_ex
90#define EVP_DigestInit				ossl_EVP_DigestInit
91#define EVP_DigestInit_ex			ossl_EVP_DigestInit_ex
92#define EVP_DigestUpdate			ossl_EVP_DigestUpdate
93#define EVP_get_digestbynid			ossl_EVP_get_digestbynid
94#define EVP_MD_CTX_block_size			ossl_EVP_MD_CTX_block_size
95#define EVP_MD_CTX_cleanup			ossl_EVP_MD_CTX_cleanup
96#define EVP_MD_CTX_copy_ex			ossl_EVP_MD_CTX_copy_ex
97#define EVP_MD_CTX_create			ossl_EVP_MD_CTX_create
98#define EVP_MD_CTX_init				ossl_EVP_MD_CTX_init
99#define EVP_MD_CTX_destroy			ossl_EVP_MD_CTX_destroy
100#define EVP_MD_CTX_md				ossl_EVP_MD_CTX_md
101#define EVP_MD_CTX_size				ossl_EVP_MD_CTX_size
102#define EVP_MD_block_size			ossl_EVP_MD_block_size
103#define EVP_MD_size				ossl_EVP_MD_size
104#define EVP_aes_128_cbc				ossl_EVP_aes_128_cbc
105#define EVP_aes_128_ecb				ossl_EVP_aes_128_ecb
106#define EVP_aes_192_cbc				ossl_EVP_aes_192_cbc
107#define EVP_aes_192_ecb				ossl_EVP_aes_192_ecb
108#define EVP_aes_256_cbc				ossl_EVP_aes_256_cbc
109#define EVP_aes_256_ecb				ossl_EVP_aes_256_ecb
110#define EVP_aes_128_cfb8			ossl_EVP_aes_128_cfb8
111#define EVP_aes_192_cfb8			ossl_EVP_aes_192_cfb8
112#define EVP_aes_256_cfb8			ossl_EVP_aes_256_cfb8
113
114#define EVP_des_cbc				ossl_EVP_des_cbc
115#define EVP_des_ecb				ossl_EVP_des_ecb
116#define EVP_des_ede3_cbc			ossl_EVP_des_ede3_cbc
117#define EVP_des_ede3_ecb			ossl_EVP_des_ede3_ecb
118#define EVP_bf_cbc				ossl_EVP_bf_cbc
119#define EVP_bf_ecb				ossl_EVP_bf_ecb
120#define EVP_cast5_cbc				ossl_EVP_cast5_cbc
121#define EVP_cast5_ecb				ossl_EVP_cast5_ecb
122#define EVP_enc_null				ossl_EVP_enc_null
123#define EVP_md2					ossl_EVP_md2
124#define EVP_md4					ossl_EVP_md4
125#define EVP_md5					ossl_EVP_md5
126#define EVP_md_null				ossl_EVP_md_null
127#define EVP_rc2_40_cbc				ossl_EVP_rc2_40_cbc
128#define EVP_rc2_64_cbc				ossl_EVP_rc2_64_cbc
129#define EVP_rc2_cbc				ossl_EVP_rc2_cbc
130#define EVP_rc4					ossl_EVP_rc4
131#define EVP_rc4_40				ossl_EVP_rc4_40
132#define EVP_camellia_128_cbc			ossl_EVP_camellia_128_cbc
133#define EVP_camellia_192_cbc			ossl_EVP_camellia_192_cbc
134#define EVP_camellia_256_cbc			ossl_EVP_camellia_256_cbc
135#define EVP_sha					ossl_EVP_sha
136#define EVP_sha1				ossl_EVP_sha1
137#define EVP_sha224				ossl_EVP_sha224
138#define EVP_sha256				ossl_EVP_sha256
139#define EVP_sha384				ossl_EVP_sha384
140#define EVP_sha512				ossl_EVP_sha512
141#define EVP_rmd128				ossl_EVP_rmd128
142#define EVP_rmd160				ossl_EVP_rmd160
143#define EVP_rmd256				ossl_EVP_rmd256
144#define EVP_rmd320				ossl_EVP_rmd320
145#define EVP_ripemd128				ossl_EVP_ripemd128
146#define EVP_ripemd160				ossl_EVP_ripemd160
147#define EVP_ripemd256				ossl_EVP_ripemd256
148#define EVP_ripemd320				ossl_EVP_ripemd320
149#define PKCS5_PBKDF2_HMAC_SHA1			ossl_PKCS5_PBKDF2_HMAC_SHA1
150#define EVP_BytesToKey				ossl_EVP_BytesToKey
151#define EVP_get_pw_prompt			ossl_EVP_get_pw_prompt
152#define EVP_set_pw_prompt			ossl_EVP_set_pw_prompt
153#define EVP_read_pw_string			ossl_EVP_read_pw_string
154#define EVP_get_cipherbyname			ossl_EVP_get_cipherbyname
155
156/*
157 * #define	OpenSSL_add_all_algorithms ossl_OpenSSL_add_all_algorithms
158 * #define	OpenSSL_add_all_algorithms_conf ossl_OpenSSL_add_all_algorithms_conf
159 * #define	OpenSSL_add_all_algorithms_noconf ossl_OpenSSL_add_all_algorithms_noconf
160 */
161#define EVP_CIPHER_CTX_ctrl			ossl_EVP_CIPHER_CTX_ctrl
162#define EVP_CIPHER_CTX_rand_key			ossl_EVP_CIPHER_CTX_rand_key
163
164#define EVP_PKEY_new				ossl_EVP_PKEY_new
165#define EVP_PKEY_get1_RSA			ossl_EVP_PKEY_get1_RSA
166#define EVP_PKEY_set1_RSA			ossl_EVP_PKEY_set1_RSA
167#define EVP_PKEY_get1_DSA			ossl_EVP_PKEY_get1_DSA
168#define EVP_PKEY_set1_DSA			ossl_EVP_PKEY_set1_DSA
169#define EVP_PKEY_free				ossl_EVP_PKEY_free
170#define EVP_PKEY_type				ossl_EVP_PKEY_type
171
172#define EVP_DecodeBlock				ossl_EVP_DecodeBlock
173#define EVP_DecodeFinal				ossl_EVP_DecodeFinal
174#define EVP_DecodeUpdate			ossl_EVP_DecodeUpdate
175#define EVP_DecodeInit				ossl_EVP_DecodeInit
176#define EVP_EncodeBlock				ossl_EVP_EncodeBlock
177#define EVP_EncodeFinal				ossl_EVP_EncodeFinal
178#define EVP_EncodeUpdate			ossl_EVP_EncodeUpdate
179#define EVP_EncodeInit				ossl_EVP_EncodeInit
180
181#define OPENSSL_free				free
182#define OPENSSL_malloc				malloc
183
184/*
185 *
186 */
187
188struct ossl_evp_pkey {
189	int	type;
190	int	save_type;
191	int	references;
192	union {
193		char *	ptr;
194		RSA *	rsa;
195		DSA *	dsa;
196		DH *	dh;
197	}
198	pkey;
199	int	save_parameters;
200};
201
202typedef struct ossl_EVP_MD_CTX		EVP_MD_CTX;
203typedef struct ossl_evp_pkey		EVP_PKEY;
204typedef struct ossl_evp_md		EVP_MD;
205typedef struct ossl_CIPHER		EVP_CIPHER;
206typedef struct ossl_CIPHER_CTX		EVP_CIPHER_CTX;
207
208#define EVP_MAX_IV_LENGTH	16
209#define EVP_MAX_BLOCK_LENGTH	32
210#define EVP_MAX_MD_SIZE		64
211
212struct ossl_CIPHER {
213	int		nid;
214	int		block_size;
215	int		key_len;
216	int		iv_len;
217	unsigned long	flags;
218
219	/* The lowest 3 bits is used as integer field for the mode the
220	 * cipher is used in (use EVP_CIPHER.._mode() to extract the
221	 * mode). The rest of the flag field is a bitfield.
222	 */
223#define EVP_CIPH_STREAM_CIPHER		0x0
224#define EVP_CIPH_ECB_MODE		0x1
225#define EVP_CIPH_CBC_MODE		0x2
226#define EVP_CIPH_CFB_MODE		0x3
227#define EVP_CIPH_OFB_MODE		0x4
228#define EVP_CIPH_CFB8_MODE		0x5
229#define EVP_CIPH_MODE			0x7
230
231#define EVP_CIPH_VARIABLE_LENGTH	0x008 /* variable key length */
232#define EVP_CIPH_CUSTOM_IV		0x010
233#define EVP_CIPH_ALWAYS_CALL_INIT	0x020
234#define EVP_CIPH_RAND_KEY		0x200
235
236#define EVP_MAX_KEY_LENGTH		32
237
238	int		(*init)(EVP_CIPHER_CTX *, const unsigned char *, const unsigned char *, int);
239	int		(*do_cipher)(EVP_CIPHER_CTX *, unsigned char *,
240				    const unsigned char *, unsigned int);
241	int		(*cleanup)(EVP_CIPHER_CTX *);
242	int		ctx_size;
243	void *		set_asn1_parameters;
244	void *		get_asn1_parameters;
245	int		(*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr);
246#define EVP_CTRL_RAND_KEY    0x6
247
248	void *		app_data;
249};
250
251struct ossl_EVP_MD_CTX {
252	const EVP_MD *	md;
253	ENGINE *	engine;
254	void *		ptr;
255};
256
257struct ossl_CIPHER_CTX {
258	const EVP_CIPHER *	cipher;
259	ENGINE *		engine;
260	int			encrypt;
261	int			buf_len; /* bytes stored in buf for EVP_CipherUpdate */
262	unsigned char		oiv[EVP_MAX_IV_LENGTH];
263	unsigned char		iv[EVP_MAX_IV_LENGTH];
264	unsigned char		buf[EVP_MAX_BLOCK_LENGTH];
265	int			num;
266	void *			app_data;
267	int			key_len;
268	unsigned long		flags;
269	void *			cipher_data;
270	int			final_used;
271	int			block_mask;
272	unsigned char		final[EVP_MAX_BLOCK_LENGTH];
273};
274
275typedef int (*ossl_evp_md_init)(EVP_MD_CTX *);
276typedef int (*ossl_evp_md_update)(EVP_MD_CTX *, const void *, size_t);
277typedef int (*ossl_evp_md_final)(void *, EVP_MD_CTX *);
278typedef int (*ossl_evp_md_cleanup)(EVP_MD_CTX *);
279
280struct ossl_evp_md {
281	int			hash_size;
282	int			block_size;
283	int			ctx_size;
284	ossl_evp_md_init	init;
285	ossl_evp_md_update	update;
286	ossl_evp_md_final	final;
287	ossl_evp_md_cleanup	cleanup;
288};
289
290typedef struct evp_Encode_Ctx_st {
291	int		num;
292	int		length;
293	unsigned char	enc_data[80];
294	int		line_num;
295	int		expect_nl;
296} EVP_ENCODE_CTX;
297
298typedef struct evp_cipher_info_st {
299	const EVP_CIPHER *	cipher;
300	unsigned char		iv[EVP_MAX_IV_LENGTH];
301} EVP_CIPHER_INFO;
302
303#if !defined(__GNUC__) && !defined(__attribute__)
304#define __attribute__(x)
305#endif
306
307/*
308 * Avaible crypto algs
309 */
310
311const EVP_MD *EVP_md_null(void);
312const EVP_MD *EVP_md2(void);
313const EVP_MD *EVP_md4(void);
314const EVP_MD *EVP_md5(void);
315const EVP_MD *EVP_sha(void);
316const EVP_MD *EVP_sha1(void);
317const EVP_MD *EVP_sha224(void);
318const EVP_MD *EVP_sha256(void);
319const EVP_MD *EVP_sha384(void);
320const EVP_MD *EVP_sha512(void);
321const EVP_MD *EVP_rmd128(void);
322const EVP_MD *EVP_rmd160(void);
323const EVP_MD *EVP_rmd256(void);
324const EVP_MD *EVP_rmd320(void);
325const EVP_MD *EVP_ripemd128(void);
326const EVP_MD *EVP_ripemd160(void);
327const EVP_MD *EVP_ripemd256(void);
328const EVP_MD *EVP_ripemd320(void);
329
330const EVP_CIPHER *EVP_aes_128_cbc(void);
331const EVP_CIPHER *EVP_aes_128_ecb(void);
332const EVP_CIPHER *EVP_aes_192_cbc(void);
333const EVP_CIPHER *EVP_aes_192_ecb(void);
334const EVP_CIPHER *EVP_aes_256_cbc(void);
335const EVP_CIPHER *EVP_aes_256_ecb(void);
336const EVP_CIPHER *EVP_aes_128_cfb8(void);
337const EVP_CIPHER *EVP_aes_192_cfb8(void);
338const EVP_CIPHER *EVP_aes_256_cfb8(void);
339const EVP_CIPHER *EVP_bf_cbc(void);
340const EVP_CIPHER *EVP_bf_ecb(void);
341const EVP_CIPHER *EVP_cast5_cbc(void);
342const EVP_CIPHER *EVP_cast5_ecb(void);
343const EVP_CIPHER *EVP_des_cbc(void);
344const EVP_CIPHER *EVP_des_ecb(void);
345const EVP_CIPHER *EVP_des_ede3_cbc(void);
346const EVP_CIPHER *EVP_des_ede3_ecb(void);
347const EVP_CIPHER *EVP_enc_null(void);
348const EVP_CIPHER *EVP_rc2_40_cbc(void);
349const EVP_CIPHER *EVP_rc2_64_cbc(void);
350const EVP_CIPHER *EVP_rc2_cbc(void);
351const EVP_CIPHER *EVP_rc4(void);
352const EVP_CIPHER *EVP_rc4_40(void);
353const EVP_CIPHER *EVP_camellia_128_cbc(void);
354const EVP_CIPHER *EVP_camellia_192_cbc(void);
355const EVP_CIPHER *EVP_camellia_256_cbc(void);
356
357size_t EVP_MD_size(const EVP_MD *);
358size_t EVP_MD_block_size(const EVP_MD *);
359
360const EVP_MD *EVP_MD_CTX_md(EVP_MD_CTX *);
361size_t EVP_MD_CTX_size(EVP_MD_CTX *);
362size_t EVP_MD_CTX_block_size(EVP_MD_CTX *);
363
364EVP_MD_CTX *EVP_MD_CTX_create(void);
365void EVP_MD_CTX_init(EVP_MD_CTX *);
366void EVP_MD_CTX_destroy(EVP_MD_CTX *);
367int EVP_MD_CTX_cleanup(EVP_MD_CTX *);
368int EVP_MD_CTX_copy_ex(EVP_MD_CTX *, const EVP_MD_CTX *);
369
370int EVP_DigestInit(EVP_MD_CTX *, const EVP_MD *);
371int EVP_DigestInit_ex(EVP_MD_CTX *, const EVP_MD *, ENGINE *);
372
373int EVP_DigestUpdate(EVP_MD_CTX *, const void *, size_t);
374int EVP_DigestFinal(EVP_MD_CTX *, void *, unsigned int *);
375int EVP_DigestFinal_ex(EVP_MD_CTX *, void *, unsigned int *);
376
377int EVP_Digest(const void *, size_t, void *, unsigned int *,
378		const EVP_MD *, ENGINE *);
379
380const EVP_MD *EVP_get_digestbynid(int nid);
381
382/*
383 *
384 */
385
386const EVP_CIPHER *EVP_get_cipherbyname(const char *);
387
388size_t EVP_CIPHER_block_size(const EVP_CIPHER *);
389size_t EVP_CIPHER_key_length(const EVP_CIPHER *);
390size_t EVP_CIPHER_iv_length(const EVP_CIPHER *);
391int EVP_CIPHER_nid(const EVP_CIPHER *);
392
393void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *);
394int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *);
395int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *, int);
396int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *, int);
397unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *);
398int EVP_CIPHER_CTX_mode(const EVP_CIPHER_CTX *);
399
400const EVP_CIPHER *EVP_CIPHER_CTX_cipher(EVP_CIPHER_CTX *);
401size_t EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *);
402size_t EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *);
403size_t EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *);
404void *EVP_CIPHER_CTX_get_app_data(EVP_CIPHER_CTX *);
405void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *, void *);
406
407int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *, int, int, void *);
408int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *, void *);
409
410
411int EVP_CipherInit_ex(EVP_CIPHER_CTX *, const EVP_CIPHER *, ENGINE *,
412    const void *, const void *, int);
413int EVP_CipherInit(EVP_CIPHER_CTX *, const EVP_CIPHER *, const void *,
414		    const void *, int);
415
416int EVP_CipherUpdate(EVP_CIPHER_CTX *, void *, int *, void *, size_t);
417int EVP_CipherFinal_ex(EVP_CIPHER_CTX *, void *, int *);
418
419int EVP_Cipher(EVP_CIPHER_CTX *, void *, const void *, size_t);
420
421int PKCS5_PBKDF2_HMAC_SHA1(const void *, size_t, const void *, size_t,
422unsigned long, size_t, void *);
423
424int EVP_BytesToKey(const EVP_CIPHER *, const EVP_MD *,
425const void *, const void *, size_t,
426unsigned int, void *, void *);
427char *EVP_get_pw_prompt(void);
428void EVP_set_pw_prompt(const char *prompt);
429int EVP_read_pw_string(char *buf, int len, const char *prompt, int verify);
430
431
432RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
433int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
434DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
435int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
436EVP_PKEY *EVP_PKEY_new(void);
437void EVP_PKEY_free(EVP_PKEY *key);
438int EVP_PKEY_type(int type);
439
440void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
441int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
442			    const unsigned char *in, int inl);
443int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
444int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
445void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
446void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
447			    const unsigned char *in, int inl);
448void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
449int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen);
450
451
452#define EVP_PKEY_NONE		NID_undef
453#define EVP_PKEY_RSA		NID_rsaEncryption
454#define EVP_PKEY_RSA2		NID_rsa
455
456#define EVP_PKEY_DSA		NID_dsa
457#define EVP_PKEY_DSA1		NID_dsa_2
458#define EVP_PKEY_DSA2		NID_dsaWithSHA
459#define EVP_PKEY_DSA3		NID_dsaWithSHA1
460#define EVP_PKEY_DSA4		NID_dsaWithSHA1_2
461#define EVP_PKEY_DH		NID_dhKeyAgreement
462
463#endif /* _OSSL_EVP_H_ */
464