| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 23:47:13 +08:00
										 |  |  | EVP_MD_fetch, EVP_MD_up_ref, EVP_MD_free, | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | EVP_MD_get_params, EVP_MD_gettable_params, | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | EVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy, | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | EVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, | 
					
						
							|  |  |  | EVP_MD_CTX_set_params, EVP_MD_CTX_get_params, | 
					
						
							|  |  |  | EVP_MD_CTX_settable_params, EVP_MD_CTX_gettable_params, | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags, | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | EVP_Digest, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate, | 
					
						
							| 
									
										
										
										
											2017-08-11 04:39:40 +08:00
										 |  |  | EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, | 
					
						
							| 
									
										
										
										
											2019-07-11 04:59:07 +08:00
										 |  |  | EVP_MD_name, EVP_MD_provider, | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags, | 
					
						
							| 
									
										
										
										
											2019-07-11 04:24:00 +08:00
										 |  |  | EVP_MD_CTX_name, | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | EVP_MD_CTX_md, EVP_MD_CTX_type, EVP_MD_CTX_size, EVP_MD_CTX_block_size, | 
					
						
							|  |  |  | EVP_MD_CTX_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn, | 
					
						
							| 
									
										
										
										
											2018-07-04 15:26:05 +08:00
										 |  |  | EVP_md_null, | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj, | 
					
						
							| 
									
										
										
										
											2019-07-13 13:02:54 +08:00
										 |  |  | EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx, | 
					
						
							|  |  |  | EVP_MD_do_all_ex | 
					
						
							|  |  |  | - EVP digest routines | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/evp.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-18 18:24:55 +08:00
										 |  |  |  EVP_MD *EVP_MD_fetch(OPENSSL_CTX *ctx, const char *algorithm, | 
					
						
							|  |  |  |                       const char *properties); | 
					
						
							| 
									
										
										
										
											2019-09-03 23:47:13 +08:00
										 |  |  |  int EVP_MD_up_ref(EVP_MD *md); | 
					
						
							|  |  |  |  void EVP_MD_free(EVP_MD *md); | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  |  int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); | 
					
						
							|  |  |  |  const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); | 
					
						
							| 
									
										
										
										
											2015-12-01 10:19:11 +08:00
										 |  |  |  EVP_MD_CTX *EVP_MD_CTX_new(void); | 
					
						
							|  |  |  |  int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); | 
					
						
							|  |  |  |  void EVP_MD_CTX_free(EVP_MD_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2016-12-17 06:00:43 +08:00
										 |  |  |  void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2); | 
					
						
							| 
									
										
										
										
											2019-06-24 12:43:55 +08:00
										 |  |  |  int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  |  int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  |  const OSSL_PARAM *EVP_MD_CTX_settable_params(const EVP_MD *digest); | 
					
						
							|  |  |  |  const OSSL_PARAM *EVP_MD_CTX_gettable_params(const EVP_MD *digest); | 
					
						
							| 
									
										
										
										
											2018-07-04 15:26:05 +08:00
										 |  |  |  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); | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  |  int EVP_Digest(const void *data, size_t count, unsigned char *md, | 
					
						
							|  |  |  |                 unsigned int *size, const EVP_MD *type, ENGINE *impl); | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  |  int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); | 
					
						
							| 
									
										
										
										
											2004-05-21 05:39:50 +08:00
										 |  |  |  int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); | 
					
						
							| 
									
										
										
										
											2017-01-21 02:58:49 +08:00
										 |  |  |  int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); | 
					
						
							| 
									
										
										
										
											2017-08-11 04:39:40 +08:00
										 |  |  |  int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-19 21:27:53 +08:00
										 |  |  |  int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); | 
					
						
							| 
									
										
										
										
											2017-01-21 02:58:49 +08:00
										 |  |  |  int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-19 21:27:53 +08:00
										 |  |  |  int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in); | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 04:24:00 +08:00
										 |  |  |  const char *EVP_MD_name(const EVP_MD *md); | 
					
						
							| 
									
										
										
										
											2019-07-11 04:59:07 +08:00
										 |  |  |  const OSSL_PROVIDER *EVP_MD_provider(const EVP_MD *md); | 
					
						
							| 
									
										
										
										
											2012-04-11 06:28:01 +08:00
										 |  |  |  int EVP_MD_type(const EVP_MD *md); | 
					
						
							| 
									
										
										
										
											2016-05-21 08:52:46 +08:00
										 |  |  |  int EVP_MD_pkey_type(const EVP_MD *md); | 
					
						
							| 
									
										
										
										
											2012-04-11 06:28:01 +08:00
										 |  |  |  int EVP_MD_size(const EVP_MD *md); | 
					
						
							|  |  |  |  int EVP_MD_block_size(const EVP_MD *md); | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  |  unsigned long EVP_MD_flags(const EVP_MD *md); | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-11 06:28:01 +08:00
										 |  |  |  const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2019-07-11 04:24:00 +08:00
										 |  |  |  const char *EVP_MD_CTX_name(const EVP_MD_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2015-12-01 10:19:11 +08:00
										 |  |  |  int EVP_MD_CTX_size(const EVP_MD *ctx); | 
					
						
							|  |  |  |  int EVP_MD_CTX_block_size(const EVP_MD *ctx); | 
					
						
							|  |  |  |  int EVP_MD_CTX_type(const EVP_MD *ctx); | 
					
						
							| 
									
										
										
										
											2018-07-04 15:26:05 +08:00
										 |  |  |  void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  |  int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, | 
					
						
							|  |  |  |                                               const void *data, size_t count); | 
					
						
							|  |  |  |  void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, | 
					
						
							|  |  |  |                                int (*update)(EVP_MD_CTX *ctx, | 
					
						
							|  |  |  |                                              const void *data, size_t count)); | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-09 10:51:02 +08:00
										 |  |  |  const EVP_MD *EVP_md_null(void); | 
					
						
							| 
									
										
										
										
											2017-07-17 05:41:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  |  const EVP_MD *EVP_get_digestbyname(const char *name); | 
					
						
							| 
									
										
										
										
											2015-12-01 10:19:11 +08:00
										 |  |  |  const EVP_MD *EVP_get_digestbynid(int type); | 
					
						
							|  |  |  |  const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o); | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  |  EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); | 
					
						
							| 
									
										
										
										
											2018-09-05 15:19:17 +08:00
										 |  |  |  void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-13 13:02:54 +08:00
										 |  |  |  void EVP_MD_do_all_ex(OPENSSL_CTX *libctx, | 
					
						
							|  |  |  |                        void (*fn)(EVP_MD *mac, void *arg), | 
					
						
							|  |  |  |                        void *arg); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-14 22:50:26 +08:00
										 |  |  | The EVP digest routines are a high level interface to message digests, | 
					
						
							| 
									
										
										
										
											2019-09-03 23:47:13 +08:00
										 |  |  | and should be used instead of the digest-specific functions. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The B<EVP_MD> type is a structure for digest method implementation. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =over 4 | 
					
						
							| 
									
										
										
										
											2015-12-01 10:19:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-18 18:24:55 +08:00
										 |  |  | =item EVP_MD_fetch() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Fetches the digest implementation for the given B<algorithm> from any | 
					
						
							|  |  |  | provider offering it, within the criteria given by the B<properties>. | 
					
						
							|  |  |  | See L<provider(7)/Fetching algorithms> for further information. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 23:47:13 +08:00
										 |  |  | The returned value must eventually be freed with EVP_MD_free(). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Fetched B<EVP_MD> structures are reference counted. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_up_ref() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Increments the reference count for an B<EVP_MD> structure. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_free() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Decrements the reference count for the fetched B<EVP_MD> structure. | 
					
						
							|  |  |  | If the reference count drops to 0 then the structure is freed. | 
					
						
							| 
									
										
										
										
											2019-07-18 18:24:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_new() | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 09:24:51 +08:00
										 |  |  | Allocates and returns a digest context. | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_reset() | 
					
						
							| 
									
										
										
										
											2016-12-17 06:00:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Resets the digest context B<ctx>.  This can be used to reuse an already | 
					
						
							|  |  |  | existing context. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_free() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Cleans up digest context B<ctx> and frees up the space allocated to it. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_ctrl() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-07 10:05:23 +08:00
										 |  |  | This is a legacy method. EVP_MD_CTX_set_params() and EVP_MD_CTX_get_params() | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | is the mechanism that should be used to set and get parameters that are used by | 
					
						
							|  |  |  | providers. | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | Performs digest-specific control actions on context B<ctx>. The control command | 
					
						
							|  |  |  | is indicated in B<cmd> and any additional arguments in B<p1> and B<p2>. | 
					
						
							|  |  |  | EVP_MD_CTX_ctrl() must be called after EVP_DigestInit_ex(). Other restrictions | 
					
						
							|  |  |  | may apply depending on the control type and digest implementation. | 
					
						
							|  |  |  | See L</CONTROLS> below for more information. | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | =item EVP_MD_get_params() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Retrieves the requested list of B<params> from a MD B<md>. | 
					
						
							|  |  |  | See L</PARAMS> below for more information. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_get_params() | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Retrieves the requested list of B<params> from a MD context B<ctx>. | 
					
						
							|  |  |  | See L</PARAMS> below for more information. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | =item EVP_MD_CTX_set_params() | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | Sets the list of B<params> into a MD context B<ctx>. | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | See L</PARAMS> below for more information. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | =item EVP_MD_gettable_params(), EVP_MD_CTX_gettable_params(), | 
					
						
							|  |  |  | EVP_MD_CTX_settable_params() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Get a B<OSSL_PARAM> array that describes the retrievable and settable | 
					
						
							|  |  |  | parameters, i.e. parameters that can be used with EVP_MD_get_params(), | 
					
						
							|  |  |  | EVP_MD_CTX_get_params() and EVP_MD_CTX_set_params(), respectively. | 
					
						
							|  |  |  | See L<OSSL_PARAM(3)> for the use of B<OSSL_PARAM> as parameter descriptor. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:26:05 +08:00
										 |  |  | =item EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sets, clears and tests B<ctx> flags.  See L</FLAGS> below for more information. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | =item EVP_Digest() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A wrapper around the Digest Init_ex, Update and Final_ex functions. | 
					
						
							|  |  |  | Hashes B<count> bytes of data at B<data> using a digest B<type> from ENGINE | 
					
						
							|  |  |  | B<impl>. The digest value is placed in B<md> and its length is written at B<size> | 
					
						
							|  |  |  | if the pointer is not NULL. At most B<EVP_MAX_MD_SIZE> bytes will be written. | 
					
						
							|  |  |  | If B<impl> is NULL the default implementation of digest B<type> is used. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_DigestInit_ex() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-18 18:24:55 +08:00
										 |  |  | Sets up digest context B<ctx> to use a digest B<type>. | 
					
						
							|  |  |  | B<type> is typically supplied by a function such as EVP_sha1(), or a | 
					
						
							|  |  |  | value explicitly fetched with EVP_MD_fetch(). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If B<impl> is non-NULL, its implementation of the digest B<type> is used if | 
					
						
							|  |  |  | there is one, and if not, the default implementation is used. | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item EVP_DigestUpdate() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Hashes B<cnt> bytes of data at B<d> into the digest context B<ctx>. This | 
					
						
							|  |  |  | function can be called several times on the same B<ctx> to hash additional | 
					
						
							|  |  |  | data. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_DigestFinal_ex() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Retrieves the digest value from B<ctx> and places it in B<md>. If the B<s> | 
					
						
							|  |  |  | parameter is not NULL then the number of bytes of data written (i.e. the | 
					
						
							|  |  |  | length of the digest) will be written to the integer at B<s>, at most | 
					
						
							|  |  |  | B<EVP_MAX_MD_SIZE> bytes will be written.  After calling EVP_DigestFinal_ex() | 
					
						
							| 
									
										
										
										
											2017-08-11 04:39:40 +08:00
										 |  |  | no additional calls to EVP_DigestUpdate() can be made, but | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | EVP_DigestInit_ex() can be called to initialize a new digest operation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_DigestFinalXOF() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Interfaces to extendable-output functions, XOFs, such as SHAKE128 and SHAKE256. | 
					
						
							|  |  |  | It retrieves the digest value from B<ctx> and places it in B<len>-sized <B>md. | 
					
						
							|  |  |  | After calling this function no additional calls to EVP_DigestUpdate() can be | 
					
						
							|  |  |  | made, but EVP_DigestInit_ex() can be called to initialize a new operation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_copy_ex() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Can be used to copy the message digest state from B<in> to B<out>. This is | 
					
						
							|  |  |  | useful if large amounts of data are to be hashed which only differ in the last | 
					
						
							| 
									
										
										
										
											2018-02-16 09:24:51 +08:00
										 |  |  | few bytes. | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item EVP_DigestInit() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 09:24:51 +08:00
										 |  |  | Behaves in the same way as EVP_DigestInit_ex() except it always uses the | 
					
						
							|  |  |  | default digest implementation. | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item EVP_DigestFinal() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Similar to EVP_DigestFinal_ex() except the digest context B<ctx> is | 
					
						
							|  |  |  | automatically cleaned up. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_copy() | 
					
						
							| 
									
										
										
										
											2017-08-11 04:39:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Similar to EVP_MD_CTX_copy_ex() except the destination B<out> does not have to | 
					
						
							|  |  |  | be initialized. | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 04:24:00 +08:00
										 |  |  | =item EVP_MD_name(), | 
					
						
							|  |  |  | EVP_MD_CTX_name() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Return the name of the given message digest. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 04:59:07 +08:00
										 |  |  | =item EVP_MD_provider() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns an B<OSSL_PROVIDER> pointer to the provider that implements the given | 
					
						
							|  |  |  | B<EVP_MD>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_size(), | 
					
						
							|  |  |  | EVP_MD_CTX_size() | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Return the size of the message digest when passed an B<EVP_MD> or an | 
					
						
							|  |  |  | B<EVP_MD_CTX> structure, i.e. the size of the hash. | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_block_size(), | 
					
						
							|  |  |  | EVP_MD_CTX_block_size() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Return the block size of the message digest when passed an B<EVP_MD> or an | 
					
						
							|  |  |  | B<EVP_MD_CTX> structure. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_type(), | 
					
						
							|  |  |  | EVP_MD_CTX_type() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Return the NID of the OBJECT IDENTIFIER representing the given message digest | 
					
						
							|  |  |  | when passed an B<EVP_MD> structure.  For example, C<EVP_MD_type(EVP_sha1())> | 
					
						
							|  |  |  | returns B<NID_sha1>. This function is normally used when setting ASN1 OIDs. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:26:05 +08:00
										 |  |  | =item EVP_MD_CTX_md_data() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Return the digest method private data for the passed B<EVP_MD_CTX>. | 
					
						
							|  |  |  | The space is allocated by OpenSSL and has the size originally set with | 
					
						
							|  |  |  | EVP_MD_meth_set_app_datasize(). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_md() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-30 00:28:07 +08:00
										 |  |  | Returns the B<EVP_MD> structure corresponding to the passed B<EVP_MD_CTX>. This | 
					
						
							|  |  |  | will be the same B<EVP_MD> object originally passed to EVP_DigestInit_ex() (or | 
					
						
							|  |  |  | other similar function) when the EVP_MD_CTX was first initialised. Note that | 
					
						
							|  |  |  | where explicit fetch is in use (see L<EVP_MD_fetch(3)>) the value returned from | 
					
						
							|  |  |  | this function will not have its reference count incremented and therefore it | 
					
						
							|  |  |  | should not be used after the EVP_MD_CTX is freed. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | =item EVP_MD_CTX_set_update_fn() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sets the update function for B<ctx> to B<update>. | 
					
						
							|  |  |  | This is the function that is called by EVP_DigestUpdate. If not set, the | 
					
						
							|  |  |  | update function from the B<EVP_MD> type specified at initialization is used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_update_fn() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns the update function for B<ctx>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_flags() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns the B<md> flags. Note that these are different from the B<EVP_MD_CTX> | 
					
						
							|  |  |  | ones. See L<EVP_MD_meth_set_flags(3)> for more information. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_pkey_type() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Returns the NID of the public key signing algorithm associated with this | 
					
						
							|  |  |  | digest. For example EVP_sha1() is associated with RSA so this will return | 
					
						
							|  |  |  | B<NID_sha1WithRSAEncryption>. Since digests and signature algorithms are no | 
					
						
							|  |  |  | longer linked this function is only retained for compatibility reasons. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_md_null() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A "null" message digest that does nothing: i.e. the hash it returns is of zero | 
					
						
							|  |  |  | length. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_get_digestbyname(), | 
					
						
							|  |  |  | EVP_get_digestbynid(), | 
					
						
							|  |  |  | EVP_get_digestbyobj() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns an B<EVP_MD> structure when passed a digest name, a digest B<NID> or an | 
					
						
							|  |  |  | B<ASN1_OBJECT> structure respectively. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | =item EVP_MD_CTX_pkey_ctx() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns the B<EVP_PKEY_CTX> assigned to B<ctx>. The returned pointer should not | 
					
						
							|  |  |  | be freed by the caller. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 15:19:17 +08:00
										 |  |  | =item EVP_MD_CTX_set_pkey_ctx() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Assigns an B<EVP_PKEY_CTX> to B<EVP_MD_CTX>. This is usually used to provide | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | a customized B<EVP_PKEY_CTX> to L<EVP_DigestSignInit(3)> or | 
					
						
							| 
									
										
										
										
											2018-09-05 22:01:33 +08:00
										 |  |  | L<EVP_DigestVerifyInit(3)>. The B<pctx> passed to this function should be freed | 
					
						
							| 
									
										
										
										
											2018-09-06 10:36:11 +08:00
										 |  |  | by the caller. A NULL B<pctx> pointer is also allowed to clear the B<EVP_PKEY_CTX> | 
					
						
							| 
									
										
										
										
											2018-09-05 22:01:33 +08:00
										 |  |  | assigned to B<ctx>. In such case, freeing the cleared B<EVP_PKEY_CTX> or not | 
					
						
							|  |  |  | depends on how the B<EVP_PKEY_CTX> is created. | 
					
						
							| 
									
										
										
										
											2018-09-05 15:19:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-13 13:02:54 +08:00
										 |  |  | =item EVP_MD_do_all_ex() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Traverses all messages digests implemented by all activated providers | 
					
						
							|  |  |  | in the given library context I<libctx>, and for each of the implementations, | 
					
						
							|  |  |  | calls the given function I<fn> with the implementation method and the given | 
					
						
							|  |  |  | I<arg> as argument. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =back | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | =head1 PARAMS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | See L<OSSL_PARAM(3)> for information about passing parameters. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EVP_MD_CTX_set_params() can be used with the following OSSL_PARAM keys: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item OSSL_PARAM_DIGEST_KEY_XOFLEN <size_t> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sets the digest length for extendable output functions. | 
					
						
							|  |  |  | It is used by the SHAKE algorithm. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item OSSL_PARAM_DIGEST_KEY_PAD_TYPE <int> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sets the pad type. | 
					
						
							|  |  |  | It is used by the MDC2 algorithm. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EVP_MD_CTX_get_params() can be used with the following OSSL_PARAM keys: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item OSSL_PARAM_DIGEST_KEY_MICALG <utf8string>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Gets the digest Message Integrity Check algorithm string. This is used when | 
					
						
							|  |  |  | creating S/MIME multipart/signed messages, as specified in RFC 3851. | 
					
						
							|  |  |  | It may be used by external engines or providers. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | =head1 CONTROLS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EVP_MD_CTX_ctrl() can be used to send the following standard controls: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTRL_MICALG | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Gets the digest Message Integrity Check algorithm string. This is used when | 
					
						
							|  |  |  | creating S/MIME multipart/signed messages, as specified in RFC 3851. | 
					
						
							|  |  |  | The string value is written to B<p2>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTRL_XOF_LEN | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This control sets the digest length for extendable output functions to B<p1>. | 
					
						
							|  |  |  | Sending this control directly should not be necessary, the use of | 
					
						
							|  |  |  | C<EVP_DigestFinalXOF()> is preferred. | 
					
						
							|  |  |  | Currently used by SHAKE. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:26:05 +08:00
										 |  |  | =head1 FLAGS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags() and EVP_MD_CTX_test_flags() | 
					
						
							|  |  |  | can be used the manipulate and test these B<EVP_MD_CTX> flags: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_FLAG_ONESHOT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This flag instructs the digest to optimize for one update only, if possible. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =for comment EVP_MD_CTX_FLAG_CLEANED is internal, don't mention it | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =for comment EVP_MD_CTX_FLAG_REUSE is internal, don't mention it | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =for comment We currently avoid documenting flags that are only bit holder: | 
					
						
							|  |  |  | EVP_MD_CTX_FLAG_NON_FIPS_ALLOW, EVP_MD_CTX_FLAGS_PAD_* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_FLAG_NO_INIT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This flag instructs EVP_DigestInit() and similar not to initialise the | 
					
						
							|  |  |  | implementation specific data. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_MD_CTX_FLAG_FINALISE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some functions such as EVP_DigestSign only finalise copies of internal | 
					
						
							|  |  |  | contexts so additional data can be included after the finalisation call. | 
					
						
							|  |  |  | This is inefficient if this functionality is not required, and can be | 
					
						
							|  |  |  | disabled with this flag. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-18 18:24:55 +08:00
										 |  |  | =item EVP_MD_fetch() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns a pointer to a B<EVP_MD> for success or NULL for failure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 23:47:13 +08:00
										 |  |  | =item EVP_MD_up_ref() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns 1 for success or 0 for failure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_DigestInit_ex(), | 
					
						
							|  |  |  | EVP_DigestUpdate(), | 
					
						
							|  |  |  | EVP_DigestFinal_ex() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns 1 for | 
					
						
							| 
									
										
										
										
											2001-03-09 10:51:02 +08:00
										 |  |  | success and 0 for failure. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_ctrl() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns 1 if successful or 0 for failure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | =item EVP_MD_CTX_set_params(), | 
					
						
							|  |  |  | EVP_MD_CTX_get_params() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns 1 if successful or 0 for failure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Add missing EVP param utility functions
These functions were missing for a completes API:
EVP_MD_get_params(), EVP_CIPHER_get_params(), EVP_CIPHER_CTX_set_params(),
and EVP_CIPHER_CTX_get_params
Additionally, we also add all the corresponding parameter descriptor
returning functions, along the correspoding provider dispatches:
EVP_MD_gettable_params(), EVP_MD_CTX_settable_params(),
EVP_MD_CTX_gettable_params(), EVP_CIPHER_gettable_params(),
EVP_CIPHER_CTX_settable_params(), and EVP_CIPHER_CTX_gettable_params()
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9576)
											
										 
											2019-08-12 20:56:18 +08:00
										 |  |  | =item EVP_MD_CTX_settable_params(), | 
					
						
							|  |  |  | EVP_MD_CTX_gettable_params() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Return an array of constant B<OSSL_PARAM>s, or NULL if there is none | 
					
						
							|  |  |  | to get. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_CTX_copy_ex() | 
					
						
							| 
									
										
										
										
											2016-12-17 06:00:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Returns 1 if successful or 0 for failure. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_type(), | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | EVP_MD_pkey_type() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Returns the NID of the corresponding OBJECT IDENTIFIER or NID_undef if none | 
					
						
							|  |  |  | exists. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =item EVP_MD_size(), | 
					
						
							|  |  |  | EVP_MD_block_size(), | 
					
						
							|  |  |  | EVP_MD_CTX_size(), | 
					
						
							|  |  |  | EVP_MD_CTX_block_size() | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | Returns the digest or block size in bytes. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_md_null() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns a pointer to the B<EVP_MD> structure of the "null" message digest. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item EVP_get_digestbyname(), | 
					
						
							|  |  |  | EVP_get_digestbynid(), | 
					
						
							|  |  |  | EVP_get_digestbyobj() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns either an B<EVP_MD> structure or NULL if an error occurs. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 15:19:17 +08:00
										 |  |  | =item EVP_MD_CTX_set_pkey_ctx() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This function has no return value. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | =back | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The B<EVP> interface to message digests should almost always be used in | 
					
						
							|  |  |  | preference to the low level interfaces. This is because the code then becomes | 
					
						
							|  |  |  | transparent to the digest used and much more flexible. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | New applications should use the SHA-2 (such as L<EVP_sha256(3)>) or the SHA-3 | 
					
						
							| 
									
										
										
										
											2018-02-28 04:29:32 +08:00
										 |  |  | digest algorithms (such as L<EVP_sha3_512(3)>). The other digest algorithms | 
					
						
							|  |  |  | are still in common use. | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | For most applications the B<impl> parameter to EVP_DigestInit_ex() will be | 
					
						
							|  |  |  | set to NULL to use the default digest implementation. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-27 00:35:54 +08:00
										 |  |  | The functions EVP_DigestInit(), EVP_DigestFinal() and EVP_MD_CTX_copy() are | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | obsolete but are retained to maintain compatibility with existing code. New | 
					
						
							| 
									
										
										
										
											2014-08-27 00:35:54 +08:00
										 |  |  | applications should use EVP_DigestInit_ex(), EVP_DigestFinal_ex() and | 
					
						
							| 
									
										
										
										
											2001-10-16 10:22:59 +08:00
										 |  |  | EVP_MD_CTX_copy_ex() because they can efficiently reuse a digest context | 
					
						
							|  |  |  | instead of initializing and cleaning it up on each call and allow non default | 
					
						
							|  |  |  | implementations of digests to be specified. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 13:42:11 +08:00
										 |  |  | If digest contexts are not cleaned up after use, | 
					
						
							| 
									
										
										
										
											2014-08-27 00:35:54 +08:00
										 |  |  | memory leaks will occur. | 
					
						
							| 
									
										
										
										
											2001-03-09 10:51:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 04:24:00 +08:00
										 |  |  | EVP_MD_CTX_name(), EVP_MD_CTX_size(), EVP_MD_CTX_block_size(), | 
					
						
							|  |  |  | EVP_MD_CTX_type(), EVP_get_digestbynid() and EVP_get_digestbyobj() are defined | 
					
						
							|  |  |  | as macros. | 
					
						
							| 
									
										
										
										
											2012-04-11 06:28:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-17 06:00:43 +08:00
										 |  |  | EVP_MD_CTX_ctrl() sends commands to message digests for additional configuration | 
					
						
							|  |  |  | or control. | 
					
						
							| 
									
										
										
										
											2012-04-11 06:28:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 02:26:08 +08:00
										 |  |  | =head1 EXAMPLES | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This example digests the data "Test Message\n" and "Hello World\n", using the | 
					
						
							|  |  |  | digest name passed on the command line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <stdio.h> | 
					
						
							| 
									
										
										
										
											2018-10-08 16:36:49 +08:00
										 |  |  |  #include <string.h> | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  |  #include <openssl/evp.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-08 16:36:49 +08:00
										 |  |  |  int main(int argc, char *argv[]) | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  |  { | 
					
						
							| 
									
										
										
										
											2016-11-19 07:10:05 +08:00
										 |  |  |      EVP_MD_CTX *mdctx; | 
					
						
							|  |  |  |      const EVP_MD *md; | 
					
						
							|  |  |  |      char mess1[] = "Test Message\n"; | 
					
						
							|  |  |  |      char mess2[] = "Hello World\n"; | 
					
						
							|  |  |  |      unsigned char md_value[EVP_MAX_MD_SIZE]; | 
					
						
							| 
									
										
										
										
											2018-10-08 16:36:49 +08:00
										 |  |  |      unsigned int md_len, i; | 
					
						
							| 
									
										
										
										
											2016-11-19 07:10:05 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |      if (argv[1] == NULL) { | 
					
						
							|  |  |  |          printf("Usage: mdtest digestname\n"); | 
					
						
							|  |  |  |          exit(1); | 
					
						
							|  |  |  |      } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      md = EVP_get_digestbyname(argv[1]); | 
					
						
							|  |  |  |      if (md == NULL) { | 
					
						
							|  |  |  |          printf("Unknown message digest %s\n", argv[1]); | 
					
						
							|  |  |  |          exit(1); | 
					
						
							|  |  |  |      } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      mdctx = EVP_MD_CTX_new(); | 
					
						
							|  |  |  |      EVP_DigestInit_ex(mdctx, md, NULL); | 
					
						
							|  |  |  |      EVP_DigestUpdate(mdctx, mess1, strlen(mess1)); | 
					
						
							|  |  |  |      EVP_DigestUpdate(mdctx, mess2, strlen(mess2)); | 
					
						
							|  |  |  |      EVP_DigestFinal_ex(mdctx, md_value, &md_len); | 
					
						
							|  |  |  |      EVP_MD_CTX_free(mdctx); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      printf("Digest is: "); | 
					
						
							|  |  |  |      for (i = 0; i < md_len; i++) | 
					
						
							|  |  |  |          printf("%02x", md_value[i]); | 
					
						
							|  |  |  |      printf("\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      exit(0); | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  |  } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-15 04:47:07 +08:00
										 |  |  | L<EVP_MD_meth_new(3)>, | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<dgst(1)>, | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | L<evp(7)>, | 
					
						
							|  |  |  | L<OSSL_PROVIDER(3)>, | 
					
						
							|  |  |  | L<OSSL_PARAM(3)> | 
					
						
							| 
									
										
										
										
											2000-02-07 07:26:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | The full list of digest algorithms are provided below. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | L<EVP_blake2b512(3)>, | 
					
						
							|  |  |  | L<EVP_md2(3)>, | 
					
						
							|  |  |  | L<EVP_md4(3)>, | 
					
						
							|  |  |  | L<EVP_md5(3)>, | 
					
						
							|  |  |  | L<EVP_mdc2(3)>, | 
					
						
							|  |  |  | L<EVP_ripemd160(3)>, | 
					
						
							|  |  |  | L<EVP_sha1(3)>, | 
					
						
							|  |  |  | L<EVP_sha224(3)>, | 
					
						
							|  |  |  | L<EVP_sha3_224(3)>, | 
					
						
							| 
									
										
										
										
											2017-10-30 17:59:00 +08:00
										 |  |  | L<EVP_sm3(3)>, | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | L<EVP_whirlpool(3)> | 
					
						
							| 
									
										
										
										
											2019-07-18 18:24:55 +08:00
										 |  |  | L<provider(7)/Fetching algorithms> | 
					
						
							| 
									
										
										
										
											2017-10-31 15:43:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-07 01:44:54 +08:00
										 |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 08:02:36 +08:00
										 |  |  | The EVP_MD_CTX_create() and EVP_MD_CTX_destroy() functions were renamed to | 
					
						
							|  |  |  | EVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0, respectively. | 
					
						
							| 
									
										
										
										
											2015-12-01 10:19:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-24 21:01:40 +08:00
										 |  |  | The link between digests and signing algorithms was fixed in OpenSSL 1.0 and | 
					
						
							| 
									
										
										
										
											2017-07-03 00:16:38 +08:00
										 |  |  | later, so now EVP_sha1() can be used with RSA and DSA. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 08:02:36 +08:00
										 |  |  | The EVP_dss1() function was removed in OpenSSL 1.1.0. | 
					
						
							| 
									
										
										
										
											2009-07-24 21:01:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 08:02:36 +08:00
										 |  |  | The EVP_MD_CTX_set_pkey_ctx() function was added in 1.1.1. | 
					
						
							| 
									
										
										
										
											2018-09-05 15:19:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 23:47:13 +08:00
										 |  |  | The EVP_MD_fetch(), EVP_MD_free(), EVP_MD_up_ref(), EVP_MD_CTX_set_params() | 
					
						
							|  |  |  | and EVP_MD_CTX_get_params() functions were added in 3.0. | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-11 18:27:59 +08:00
										 |  |  | Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | this file except in compliance with the License.  You can obtain a copy | 
					
						
							|  |  |  | in the file LICENSE in the source distribution or at | 
					
						
							|  |  |  | L<https://www.openssl.org/source/license.html>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut |