1e71b7053SJung-uk Kim=pod 2e71b7053SJung-uk Kim 3e71b7053SJung-uk Kim=head1 NAME 4e71b7053SJung-uk Kim 5b077aed3SPierre ProncheryEVP_MD_fetch, EVP_MD_up_ref, EVP_MD_free, 6b077aed3SPierre ProncheryEVP_MD_get_params, EVP_MD_gettable_params, 717f01e99SJung-uk KimEVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy, 8b077aed3SPierre ProncheryEVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, 9b077aed3SPierre ProncheryEVP_MD_CTX_set_params, EVP_MD_CTX_get_params, 10b077aed3SPierre ProncheryEVP_MD_settable_ctx_params, EVP_MD_gettable_ctx_params, 11b077aed3SPierre ProncheryEVP_MD_CTX_settable_params, EVP_MD_CTX_gettable_params, 12b077aed3SPierre ProncheryEVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags, 13b077aed3SPierre ProncheryEVP_Q_digest, EVP_Digest, EVP_DigestInit_ex2, EVP_DigestInit_ex, EVP_DigestInit, 14b077aed3SPierre ProncheryEVP_DigestUpdate, EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, 15b077aed3SPierre ProncheryEVP_MD_is_a, EVP_MD_get0_name, EVP_MD_get0_description, 16b077aed3SPierre ProncheryEVP_MD_names_do_all, EVP_MD_get0_provider, EVP_MD_get_type, 17b077aed3SPierre ProncheryEVP_MD_get_pkey_type, EVP_MD_get_size, EVP_MD_get_block_size, EVP_MD_get_flags, 18b077aed3SPierre ProncheryEVP_MD_CTX_get0_name, EVP_MD_CTX_md, EVP_MD_CTX_get0_md, EVP_MD_CTX_get1_md, 19b077aed3SPierre ProncheryEVP_MD_CTX_get_type, EVP_MD_CTX_get_size, EVP_MD_CTX_get_block_size, 20b077aed3SPierre ProncheryEVP_MD_CTX_get0_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn, 21e71b7053SJung-uk KimEVP_md_null, 2217f01e99SJung-uk KimEVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj, 23b077aed3SPierre ProncheryEVP_MD_CTX_get_pkey_ctx, EVP_MD_CTX_set_pkey_ctx, 24b077aed3SPierre ProncheryEVP_MD_do_all_provided, 25b077aed3SPierre ProncheryEVP_MD_type, EVP_MD_nid, EVP_MD_name, EVP_MD_pkey_type, EVP_MD_size, 26b077aed3SPierre ProncheryEVP_MD_block_size, EVP_MD_flags, EVP_MD_CTX_size, EVP_MD_CTX_block_size, 27b077aed3SPierre ProncheryEVP_MD_CTX_type, EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_md_data 28b077aed3SPierre Pronchery- EVP digest routines 29e71b7053SJung-uk Kim 30e71b7053SJung-uk Kim=head1 SYNOPSIS 31e71b7053SJung-uk Kim 32e71b7053SJung-uk Kim #include <openssl/evp.h> 33e71b7053SJung-uk Kim 34b077aed3SPierre Pronchery EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, 35b077aed3SPierre Pronchery const char *properties); 36b077aed3SPierre Pronchery int EVP_MD_up_ref(EVP_MD *md); 37b077aed3SPierre Pronchery void EVP_MD_free(EVP_MD *md); 38b077aed3SPierre Pronchery int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); 39b077aed3SPierre Pronchery const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); 40e71b7053SJung-uk Kim EVP_MD_CTX *EVP_MD_CTX_new(void); 41e71b7053SJung-uk Kim int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); 42e71b7053SJung-uk Kim void EVP_MD_CTX_free(EVP_MD_CTX *ctx); 43e71b7053SJung-uk Kim void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2); 44b077aed3SPierre Pronchery int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); 45b077aed3SPierre Pronchery int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); 46b077aed3SPierre Pronchery const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); 47b077aed3SPierre Pronchery const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); 48b077aed3SPierre Pronchery const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); 49b077aed3SPierre Pronchery const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); 50e71b7053SJung-uk Kim void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); 51e71b7053SJung-uk Kim void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); 52e71b7053SJung-uk Kim int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); 53e71b7053SJung-uk Kim 54b077aed3SPierre Pronchery int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, const char *propq, 55b077aed3SPierre Pronchery const void *data, size_t datalen, 56b077aed3SPierre Pronchery unsigned char *md, size_t *mdlen); 5717f01e99SJung-uk Kim int EVP_Digest(const void *data, size_t count, unsigned char *md, 5817f01e99SJung-uk Kim unsigned int *size, const EVP_MD *type, ENGINE *impl); 59b077aed3SPierre Pronchery int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, 60b077aed3SPierre Pronchery const OSSL_PARAM params[]); 61e71b7053SJung-uk Kim int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); 62e71b7053SJung-uk Kim int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); 63e71b7053SJung-uk Kim int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); 64e71b7053SJung-uk Kim int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); 65e71b7053SJung-uk Kim 66e71b7053SJung-uk Kim int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); 67e71b7053SJung-uk Kim 68e71b7053SJung-uk Kim int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); 69e71b7053SJung-uk Kim int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); 70e71b7053SJung-uk Kim 71e71b7053SJung-uk Kim int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in); 72e71b7053SJung-uk Kim 73b077aed3SPierre Pronchery const char *EVP_MD_get0_name(const EVP_MD *md); 74b077aed3SPierre Pronchery const char *EVP_MD_get0_description(const EVP_MD *md); 75b077aed3SPierre Pronchery int EVP_MD_is_a(const EVP_MD *md, const char *name); 76b077aed3SPierre Pronchery int EVP_MD_names_do_all(const EVP_MD *md, 77b077aed3SPierre Pronchery void (*fn)(const char *name, void *data), 78b077aed3SPierre Pronchery void *data); 79b077aed3SPierre Pronchery const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); 80b077aed3SPierre Pronchery int EVP_MD_get_type(const EVP_MD *md); 81b077aed3SPierre Pronchery int EVP_MD_get_pkey_type(const EVP_MD *md); 82b077aed3SPierre Pronchery int EVP_MD_get_size(const EVP_MD *md); 83b077aed3SPierre Pronchery int EVP_MD_get_block_size(const EVP_MD *md); 84b077aed3SPierre Pronchery unsigned long EVP_MD_get_flags(const EVP_MD *md); 85e71b7053SJung-uk Kim 86b077aed3SPierre Pronchery const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); 87b077aed3SPierre Pronchery EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); 88b077aed3SPierre Pronchery const char *EVP_MD_CTX_get0_name(const EVP_MD_CTX *ctx); 89b077aed3SPierre Pronchery int EVP_MD_CTX_get_size(const EVP_MD_CTX *ctx); 90b077aed3SPierre Pronchery int EVP_MD_CTX_get_block_size(const EVP_MD_CTX *ctx); 91b077aed3SPierre Pronchery int EVP_MD_CTX_get_type(const EVP_MD_CTX *ctx); 92b077aed3SPierre Pronchery void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); 93e71b7053SJung-uk Kim 94e71b7053SJung-uk Kim const EVP_MD *EVP_md_null(void); 95e71b7053SJung-uk Kim 96e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbyname(const char *name); 97e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbynid(int type); 98e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o); 99e71b7053SJung-uk Kim 100b077aed3SPierre Pronchery EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); 101e71b7053SJung-uk Kim void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); 102e71b7053SJung-uk Kim 103b077aed3SPierre Pronchery void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, 104b077aed3SPierre Pronchery void (*fn)(EVP_MD *mac, void *arg), 105b077aed3SPierre Pronchery void *arg); 106b077aed3SPierre Pronchery 107b077aed3SPierre Pronchery #define EVP_MD_type EVP_MD_get_type 108b077aed3SPierre Pronchery #define EVP_MD_nid EVP_MD_get_type 109b077aed3SPierre Pronchery #define EVP_MD_name EVP_MD_get0_name 110b077aed3SPierre Pronchery #define EVP_MD_pkey_type EVP_MD_get_pkey_type 111b077aed3SPierre Pronchery #define EVP_MD_size EVP_MD_get_size 112b077aed3SPierre Pronchery #define EVP_MD_block_size EVP_MD_get_block_size 113b077aed3SPierre Pronchery #define EVP_MD_flags EVP_MD_get_flags 114b077aed3SPierre Pronchery #define EVP_MD_CTX_size EVP_MD_CTX_get_size 115b077aed3SPierre Pronchery #define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size 116b077aed3SPierre Pronchery #define EVP_MD_CTX_type EVP_MD_CTX_get_type 117b077aed3SPierre Pronchery #define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx 118b077aed3SPierre Pronchery #define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data 119b077aed3SPierre Pronchery 120b077aed3SPierre ProncheryThe following functions have been deprecated since OpenSSL 3.0, and can be 121b077aed3SPierre Proncheryhidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value, 122b077aed3SPierre Proncherysee L<openssl_user_macros(7)>: 123b077aed3SPierre Pronchery 124b077aed3SPierre Pronchery const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); 125b077aed3SPierre Pronchery 126b077aed3SPierre Pronchery int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, 127b077aed3SPierre Pronchery const void *data, size_t count); 128b077aed3SPierre Pronchery 129b077aed3SPierre Pronchery void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, 130b077aed3SPierre Pronchery int (*update)(EVP_MD_CTX *ctx, 131b077aed3SPierre Pronchery const void *data, size_t count)); 132b077aed3SPierre Pronchery 133e71b7053SJung-uk Kim=head1 DESCRIPTION 134e71b7053SJung-uk Kim 13558f35182SJung-uk KimThe EVP digest routines are a high-level interface to message digests, 136b077aed3SPierre Proncheryand should be used instead of the digest-specific functions. 137b077aed3SPierre Pronchery 138b077aed3SPierre ProncheryThe B<EVP_MD> type is a structure for digest method implementation. 139e71b7053SJung-uk Kim 140e71b7053SJung-uk Kim=over 4 141e71b7053SJung-uk Kim 142b077aed3SPierre Pronchery=item EVP_MD_fetch() 143b077aed3SPierre Pronchery 144b077aed3SPierre ProncheryFetches the digest implementation for the given I<algorithm> from any 145b077aed3SPierre Proncheryprovider offering it, within the criteria given by the I<properties>. 146b077aed3SPierre ProncherySee L<crypto(7)/ALGORITHM FETCHING> for further information. 147b077aed3SPierre Pronchery 148b077aed3SPierre ProncheryThe returned value must eventually be freed with EVP_MD_free(). 149b077aed3SPierre Pronchery 150b077aed3SPierre ProncheryFetched B<EVP_MD> structures are reference counted. 151b077aed3SPierre Pronchery 152b077aed3SPierre Pronchery=item EVP_MD_up_ref() 153b077aed3SPierre Pronchery 154b077aed3SPierre ProncheryIncrements the reference count for an B<EVP_MD> structure. 155b077aed3SPierre Pronchery 156b077aed3SPierre Pronchery=item EVP_MD_free() 157b077aed3SPierre Pronchery 158b077aed3SPierre ProncheryDecrements the reference count for the fetched B<EVP_MD> structure. 159b077aed3SPierre ProncheryIf the reference count drops to 0 then the structure is freed. 160*a7148ab3SEnji CooperIf the argument is NULL, nothing is done. 161b077aed3SPierre Pronchery 162e71b7053SJung-uk Kim=item EVP_MD_CTX_new() 163e71b7053SJung-uk Kim 164e71b7053SJung-uk KimAllocates and returns a digest context. 165e71b7053SJung-uk Kim 166e71b7053SJung-uk Kim=item EVP_MD_CTX_reset() 167e71b7053SJung-uk Kim 168b077aed3SPierre ProncheryResets the digest context I<ctx>. This can be used to reuse an already 169e71b7053SJung-uk Kimexisting context. 170e71b7053SJung-uk Kim 171e71b7053SJung-uk Kim=item EVP_MD_CTX_free() 172e71b7053SJung-uk Kim 173b077aed3SPierre ProncheryCleans up digest context I<ctx> and frees up the space allocated to it. 174*a7148ab3SEnji CooperIf the argument is NULL, nothing is done. 175e71b7053SJung-uk Kim 176e71b7053SJung-uk Kim=item EVP_MD_CTX_ctrl() 177e71b7053SJung-uk Kim 178b077aed3SPierre ProncheryI<This is a legacy method. EVP_MD_CTX_set_params() and EVP_MD_CTX_get_params() 179b077aed3SPierre Proncheryis the mechanism that should be used to set and get parameters that are used by 180b077aed3SPierre Proncheryproviders.> 181b077aed3SPierre Pronchery 182b077aed3SPierre ProncheryPerforms digest-specific control actions on context I<ctx>. The control command 183b077aed3SPierre Proncheryis indicated in I<cmd> and any additional arguments in I<p1> and I<p2>. 184b077aed3SPierre ProncheryEVP_MD_CTX_ctrl() must be called after EVP_DigestInit_ex2(). Other restrictions 18517f01e99SJung-uk Kimmay apply depending on the control type and digest implementation. 186b077aed3SPierre Pronchery 187b077aed3SPierre ProncheryIf this function happens to be used with a fetched B<EVP_MD>, it will 188b077aed3SPierre Proncherytranslate the controls that are known to OpenSSL into L<OSSL_PARAM(3)> 189b077aed3SPierre Proncheryparameters with keys defined by OpenSSL and call EVP_MD_CTX_get_params() or 190b077aed3SPierre ProncheryEVP_MD_CTX_set_params() as is appropriate for each control command. 191b077aed3SPierre Pronchery 192b077aed3SPierre ProncherySee L</CONTROLS> below for more information, including what translations are 193b077aed3SPierre Proncherybeing done. 194b077aed3SPierre Pronchery 195b077aed3SPierre Pronchery=item EVP_MD_get_params() 196b077aed3SPierre Pronchery 197b077aed3SPierre ProncheryRetrieves the requested list of I<params> from a MD I<md>. 198b077aed3SPierre ProncherySee L</PARAMETERS> below for more information. 199b077aed3SPierre Pronchery 200b077aed3SPierre Pronchery=item EVP_MD_CTX_get_params() 201b077aed3SPierre Pronchery 202b077aed3SPierre ProncheryRetrieves the requested list of I<params> from a MD context I<ctx>. 203b077aed3SPierre ProncherySee L</PARAMETERS> below for more information. 204b077aed3SPierre Pronchery 205b077aed3SPierre Pronchery=item EVP_MD_CTX_set_params() 206b077aed3SPierre Pronchery 207b077aed3SPierre ProncherySets the list of I<params> into a MD context I<ctx>. 208b077aed3SPierre ProncherySee L</PARAMETERS> below for more information. 209b077aed3SPierre Pronchery 210b077aed3SPierre Pronchery=item EVP_MD_gettable_params() 211b077aed3SPierre Pronchery 212b077aed3SPierre ProncheryGet a constant L<OSSL_PARAM(3)> array that describes the retrievable parameters 213b077aed3SPierre Proncherythat can be used with EVP_MD_get_params(). 214b077aed3SPierre Pronchery 215b077aed3SPierre Pronchery=item EVP_MD_gettable_ctx_params(), EVP_MD_CTX_gettable_params() 216b077aed3SPierre Pronchery 217b077aed3SPierre ProncheryGet a constant L<OSSL_PARAM(3)> array that describes the retrievable parameters 218b077aed3SPierre Proncherythat can be used with EVP_MD_CTX_get_params(). EVP_MD_gettable_ctx_params() 219b077aed3SPierre Proncheryreturns the parameters that can be retrieved from the algorithm, whereas 220b077aed3SPierre ProncheryEVP_MD_CTX_gettable_params() returns the parameters that can be retrieved 221b077aed3SPierre Proncheryin the context's current state. 222b077aed3SPierre Pronchery 223b077aed3SPierre Pronchery=item EVP_MD_settable_ctx_params(), EVP_MD_CTX_settable_params() 224b077aed3SPierre Pronchery 225b077aed3SPierre ProncheryGet a constant L<OSSL_PARAM(3)> array that describes the settable parameters 226b077aed3SPierre Proncherythat can be used with EVP_MD_CTX_set_params(). EVP_MD_settable_ctx_params() 227b077aed3SPierre Proncheryreturns the parameters that can be set from the algorithm, whereas 228b077aed3SPierre ProncheryEVP_MD_CTX_settable_params() returns the parameters that can be set in the 229b077aed3SPierre Proncherycontext's current state. 230e71b7053SJung-uk Kim 231e71b7053SJung-uk Kim=item EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags() 232e71b7053SJung-uk Kim 233b077aed3SPierre ProncherySets, clears and tests I<ctx> flags. See L</FLAGS> below for more information. 234b077aed3SPierre Pronchery 235b077aed3SPierre Pronchery=item EVP_Q_digest() is a quick one-shot digest function. 236b077aed3SPierre Pronchery 237b077aed3SPierre ProncheryIt hashes I<datalen> bytes of data at I<data> using the digest algorithm 238b077aed3SPierre ProncheryI<name>, which is fetched using the optional I<libctx> and I<propq> parameters. 239b077aed3SPierre ProncheryThe digest value is placed in I<md> and its length is written at I<mdlen> 240b077aed3SPierre Proncheryif the pointer is not NULL. At most B<EVP_MAX_MD_SIZE> bytes will be written. 241e71b7053SJung-uk Kim 24217f01e99SJung-uk Kim=item EVP_Digest() 24317f01e99SJung-uk Kim 24417f01e99SJung-uk KimA wrapper around the Digest Init_ex, Update and Final_ex functions. 245b077aed3SPierre ProncheryHashes I<count> bytes of data at I<data> using a digest I<type> from ENGINE 246b077aed3SPierre ProncheryI<impl>. The digest value is placed in I<md> and its length is written at I<size> 24717f01e99SJung-uk Kimif the pointer is not NULL. At most B<EVP_MAX_MD_SIZE> bytes will be written. 248b077aed3SPierre ProncheryIf I<impl> is NULL the default implementation of digest I<type> is used. 249b077aed3SPierre Pronchery 250b077aed3SPierre Pronchery=item EVP_DigestInit_ex2() 251b077aed3SPierre Pronchery 252b077aed3SPierre ProncherySets up digest context I<ctx> to use a digest I<type>. 253b077aed3SPierre ProncheryI<type> is typically supplied by a function such as EVP_sha1(), or a 254b077aed3SPierre Proncheryvalue explicitly fetched with EVP_MD_fetch(). 255b077aed3SPierre Pronchery 256b077aed3SPierre ProncheryThe parameters B<params> are set on the context after initialisation. 257b077aed3SPierre Pronchery 258b077aed3SPierre ProncheryThe I<type> parameter can be NULL if I<ctx> has been already initialized 259b077aed3SPierre Proncherywith another EVP_DigestInit_ex() call and has not been reset with 260b077aed3SPierre ProncheryEVP_MD_CTX_reset(). 26117f01e99SJung-uk Kim 262e71b7053SJung-uk Kim=item EVP_DigestInit_ex() 263e71b7053SJung-uk Kim 264b077aed3SPierre ProncherySets up digest context I<ctx> to use a digest I<type>. 265b077aed3SPierre ProncheryI<type> is typically supplied by a function such as EVP_sha1(), or a 266b077aed3SPierre Proncheryvalue explicitly fetched with EVP_MD_fetch(). 267b077aed3SPierre Pronchery 268b077aed3SPierre ProncheryIf I<impl> is non-NULL, its implementation of the digest I<type> is used if 269b077aed3SPierre Proncherythere is one, and if not, the default implementation is used. 270b077aed3SPierre Pronchery 271b077aed3SPierre ProncheryThe I<type> parameter can be NULL if I<ctx> has been already initialized 272b077aed3SPierre Proncherywith another EVP_DigestInit_ex() call and has not been reset with 273b077aed3SPierre ProncheryEVP_MD_CTX_reset(). 274e71b7053SJung-uk Kim 275e71b7053SJung-uk Kim=item EVP_DigestUpdate() 276e71b7053SJung-uk Kim 277b077aed3SPierre ProncheryHashes I<cnt> bytes of data at I<d> into the digest context I<ctx>. This 278b077aed3SPierre Proncheryfunction can be called several times on the same I<ctx> to hash additional 279e71b7053SJung-uk Kimdata. 280e71b7053SJung-uk Kim 281e71b7053SJung-uk Kim=item EVP_DigestFinal_ex() 282e71b7053SJung-uk Kim 283b077aed3SPierre ProncheryRetrieves the digest value from I<ctx> and places it in I<md>. If the I<s> 284e71b7053SJung-uk Kimparameter is not NULL then the number of bytes of data written (i.e. the 285b077aed3SPierre Proncherylength of the digest) will be written to the integer at I<s>, at most 286e71b7053SJung-uk KimB<EVP_MAX_MD_SIZE> bytes will be written. After calling EVP_DigestFinal_ex() 287e71b7053SJung-uk Kimno additional calls to EVP_DigestUpdate() can be made, but 288b077aed3SPierre ProncheryEVP_DigestInit_ex2() can be called to initialize a new digest operation. 289e71b7053SJung-uk Kim 290e71b7053SJung-uk Kim=item EVP_DigestFinalXOF() 291e71b7053SJung-uk Kim 292e71b7053SJung-uk KimInterfaces to extendable-output functions, XOFs, such as SHAKE128 and SHAKE256. 293b077aed3SPierre ProncheryIt retrieves the digest value from I<ctx> and places it in I<len>-sized I<md>. 294e71b7053SJung-uk KimAfter calling this function no additional calls to EVP_DigestUpdate() can be 295b077aed3SPierre Proncherymade, but EVP_DigestInit_ex2() can be called to initialize a new operation. 296e71b7053SJung-uk Kim 297e71b7053SJung-uk Kim=item EVP_MD_CTX_copy_ex() 298e71b7053SJung-uk Kim 299b077aed3SPierre ProncheryCan be used to copy the message digest state from I<in> to I<out>. This is 300e71b7053SJung-uk Kimuseful if large amounts of data are to be hashed which only differ in the last 301e71b7053SJung-uk Kimfew bytes. 302e71b7053SJung-uk Kim 303e71b7053SJung-uk Kim=item EVP_DigestInit() 304e71b7053SJung-uk Kim 305b077aed3SPierre ProncheryBehaves in the same way as EVP_DigestInit_ex2() except it doesn't set any 306b077aed3SPierre Proncheryparameters and calls EVP_MD_CTX_reset() so it cannot be used with an I<type> 307b077aed3SPierre Proncheryof NULL. 308e71b7053SJung-uk Kim 309e71b7053SJung-uk Kim=item EVP_DigestFinal() 310e71b7053SJung-uk Kim 311b077aed3SPierre ProncherySimilar to EVP_DigestFinal_ex() except after computing the digest 312b077aed3SPierre Proncherythe digest context I<ctx> is automatically cleaned up with EVP_MD_CTX_reset(). 313e71b7053SJung-uk Kim 314e71b7053SJung-uk Kim=item EVP_MD_CTX_copy() 315e71b7053SJung-uk Kim 316b077aed3SPierre ProncherySimilar to EVP_MD_CTX_copy_ex() except the destination I<out> does not have to 317e71b7053SJung-uk Kimbe initialized. 318e71b7053SJung-uk Kim 319b077aed3SPierre Pronchery=item EVP_MD_is_a() 320b077aed3SPierre Pronchery 321b077aed3SPierre ProncheryReturns 1 if I<md> is an implementation of an algorithm that's 322b077aed3SPierre Proncheryidentifiable with I<name>, otherwise 0. 323b077aed3SPierre Pronchery 324b077aed3SPierre ProncheryIf I<md> is a legacy digest (it's the return value from the likes of 325b077aed3SPierre ProncheryEVP_sha256() rather than the result of an EVP_MD_fetch()), only cipher 326b077aed3SPierre Proncherynames registered with the default library context (see 327b077aed3SPierre ProncheryL<OSSL_LIB_CTX(3)>) will be considered. 328b077aed3SPierre Pronchery 329b077aed3SPierre Pronchery=item EVP_MD_get0_name(), 330b077aed3SPierre ProncheryEVP_MD_CTX_get0_name() 331b077aed3SPierre Pronchery 332b077aed3SPierre ProncheryReturn the name of the given message digest. For fetched message 333b077aed3SPierre Proncherydigests with multiple names, only one of them is returned; it's 334b077aed3SPierre Proncheryrecommended to use EVP_MD_names_do_all() instead. 335b077aed3SPierre Pronchery 336b077aed3SPierre Pronchery=item EVP_MD_names_do_all() 337b077aed3SPierre Pronchery 338b077aed3SPierre ProncheryTraverses all names for the I<md>, and calls I<fn> with each name and 339b077aed3SPierre ProncheryI<data>. This is only useful with fetched B<EVP_MD>s. 340b077aed3SPierre Pronchery 341b077aed3SPierre Pronchery=item EVP_MD_get0_description() 342b077aed3SPierre Pronchery 343b077aed3SPierre ProncheryReturns a description of the digest, meant for display and human consumption. 344b077aed3SPierre ProncheryThe description is at the discretion of the digest implementation. 345b077aed3SPierre Pronchery 346b077aed3SPierre Pronchery=item EVP_MD_get0_provider() 347b077aed3SPierre Pronchery 348b077aed3SPierre ProncheryReturns an B<OSSL_PROVIDER> pointer to the provider that implements the given 349b077aed3SPierre ProncheryB<EVP_MD>. 350b077aed3SPierre Pronchery 351b077aed3SPierre Pronchery=item EVP_MD_get_size(), 352b077aed3SPierre ProncheryEVP_MD_CTX_get_size() 353e71b7053SJung-uk Kim 354e71b7053SJung-uk KimReturn the size of the message digest when passed an B<EVP_MD> or an 355e71b7053SJung-uk KimB<EVP_MD_CTX> structure, i.e. the size of the hash. 356e71b7053SJung-uk Kim 357b077aed3SPierre Pronchery=item EVP_MD_get_block_size(), 358b077aed3SPierre ProncheryEVP_MD_CTX_get_block_size() 359e71b7053SJung-uk Kim 360e71b7053SJung-uk KimReturn the block size of the message digest when passed an B<EVP_MD> or an 361e71b7053SJung-uk KimB<EVP_MD_CTX> structure. 362e71b7053SJung-uk Kim 363b077aed3SPierre Pronchery=item EVP_MD_get_type(), 364b077aed3SPierre ProncheryEVP_MD_CTX_get_type() 365e71b7053SJung-uk Kim 366e71b7053SJung-uk KimReturn the NID of the OBJECT IDENTIFIER representing the given message digest 367b077aed3SPierre Proncherywhen passed an B<EVP_MD> structure. For example, C<EVP_MD_get_type(EVP_sha1())> 368e71b7053SJung-uk Kimreturns B<NID_sha1>. This function is normally used when setting ASN1 OIDs. 369e71b7053SJung-uk Kim 370b077aed3SPierre Pronchery=item EVP_MD_CTX_get0_md_data() 371e71b7053SJung-uk Kim 372e71b7053SJung-uk KimReturn the digest method private data for the passed B<EVP_MD_CTX>. 373e71b7053SJung-uk KimThe space is allocated by OpenSSL and has the size originally set with 374e71b7053SJung-uk KimEVP_MD_meth_set_app_datasize(). 375e71b7053SJung-uk Kim 376b077aed3SPierre Pronchery=item EVP_MD_CTX_get0_md(), EVP_MD_CTX_get1_md() 377e71b7053SJung-uk Kim 378b077aed3SPierre ProncheryEVP_MD_CTX_get0_md() returns 379b077aed3SPierre Proncherythe B<EVP_MD> structure corresponding to the passed B<EVP_MD_CTX>. This 380b077aed3SPierre Proncherywill be the same B<EVP_MD> object originally passed to EVP_DigestInit_ex2() (or 381b077aed3SPierre Proncheryother similar function) when the EVP_MD_CTX was first initialised. Note that 382b077aed3SPierre Proncherywhere explicit fetch is in use (see L<EVP_MD_fetch(3)>) the value returned from 383b077aed3SPierre Proncherythis function will not have its reference count incremented and therefore it 384b077aed3SPierre Proncheryshould not be used after the EVP_MD_CTX is freed. 385b077aed3SPierre ProncheryEVP_MD_CTX_get1_md() is the same except the ownership is passed to the 386b077aed3SPierre Proncherycaller and is from the passed B<EVP_MD_CTX>. 387e71b7053SJung-uk Kim 38817f01e99SJung-uk Kim=item EVP_MD_CTX_set_update_fn() 38917f01e99SJung-uk Kim 390b077aed3SPierre ProncherySets the update function for I<ctx> to I<update>. 391b077aed3SPierre ProncheryThis is the function that is called by EVP_DigestUpdate(). If not set, the 39217f01e99SJung-uk Kimupdate function from the B<EVP_MD> type specified at initialization is used. 39317f01e99SJung-uk Kim 39417f01e99SJung-uk Kim=item EVP_MD_CTX_update_fn() 39517f01e99SJung-uk Kim 396b077aed3SPierre ProncheryReturns the update function for I<ctx>. 39717f01e99SJung-uk Kim 398b077aed3SPierre Pronchery=item EVP_MD_get_flags() 39917f01e99SJung-uk Kim 400b077aed3SPierre ProncheryReturns the I<md> flags. Note that these are different from the B<EVP_MD_CTX> 40117f01e99SJung-uk Kimones. See L<EVP_MD_meth_set_flags(3)> for more information. 40217f01e99SJung-uk Kim 403b077aed3SPierre Pronchery=item EVP_MD_get_pkey_type() 404e71b7053SJung-uk Kim 405e71b7053SJung-uk KimReturns the NID of the public key signing algorithm associated with this 406e71b7053SJung-uk Kimdigest. For example EVP_sha1() is associated with RSA so this will return 407e71b7053SJung-uk KimB<NID_sha1WithRSAEncryption>. Since digests and signature algorithms are no 408e71b7053SJung-uk Kimlonger linked this function is only retained for compatibility reasons. 409e71b7053SJung-uk Kim 410e71b7053SJung-uk Kim=item EVP_md_null() 411e71b7053SJung-uk Kim 412e71b7053SJung-uk KimA "null" message digest that does nothing: i.e. the hash it returns is of zero 413e71b7053SJung-uk Kimlength. 414e71b7053SJung-uk Kim 415e71b7053SJung-uk Kim=item EVP_get_digestbyname(), 416e71b7053SJung-uk KimEVP_get_digestbynid(), 417e71b7053SJung-uk KimEVP_get_digestbyobj() 418e71b7053SJung-uk Kim 419e71b7053SJung-uk KimReturns an B<EVP_MD> structure when passed a digest name, a digest B<NID> or an 420e71b7053SJung-uk KimB<ASN1_OBJECT> structure respectively. 421e71b7053SJung-uk Kim 422b077aed3SPierre ProncheryThe EVP_get_digestbyname() function is present for backwards compatibility with 423b077aed3SPierre ProncheryOpenSSL prior to version 3 and is different to the EVP_MD_fetch() function 424b077aed3SPierre Proncherysince it does not attempt to "fetch" an implementation of the cipher. 425b077aed3SPierre ProncheryAdditionally, it only knows about digests that are built-in to OpenSSL and have 426b077aed3SPierre Proncheryan associated NID. Similarly EVP_get_digestbynid() and EVP_get_digestbyobj() 427b077aed3SPierre Proncheryalso return objects without an associated implementation. 42817f01e99SJung-uk Kim 429b077aed3SPierre ProncheryWhen the digest objects returned by these functions are used (such as in a call 430b077aed3SPierre Proncheryto EVP_DigestInit_ex()) an implementation of the digest will be implicitly 431b077aed3SPierre Proncheryfetched from the loaded providers. This fetch could fail if no suitable 432b077aed3SPierre Proncheryimplementation is available. Use EVP_MD_fetch() instead to explicitly fetch 433b077aed3SPierre Proncherythe algorithm and an associated implementation from a provider. 434b077aed3SPierre Pronchery 435b077aed3SPierre ProncherySee L<crypto(7)/ALGORITHM FETCHING> for more information about fetching. 436b077aed3SPierre Pronchery 437b077aed3SPierre ProncheryThe digest objects returned from these functions do not need to be freed with 438b077aed3SPierre ProncheryEVP_MD_free(). 439b077aed3SPierre Pronchery 440b077aed3SPierre Pronchery=item EVP_MD_CTX_get_pkey_ctx() 441b077aed3SPierre Pronchery 442b077aed3SPierre ProncheryReturns the B<EVP_PKEY_CTX> assigned to I<ctx>. The returned pointer should not 44317f01e99SJung-uk Kimbe freed by the caller. 44417f01e99SJung-uk Kim 445e71b7053SJung-uk Kim=item EVP_MD_CTX_set_pkey_ctx() 446e71b7053SJung-uk Kim 447e71b7053SJung-uk KimAssigns an B<EVP_PKEY_CTX> to B<EVP_MD_CTX>. This is usually used to provide 44817f01e99SJung-uk Kima customized B<EVP_PKEY_CTX> to L<EVP_DigestSignInit(3)> or 449b077aed3SPierre ProncheryL<EVP_DigestVerifyInit(3)>. The I<pctx> passed to this function should be freed 450b077aed3SPierre Proncheryby the caller. A NULL I<pctx> pointer is also allowed to clear the B<EVP_PKEY_CTX> 451b077aed3SPierre Proncheryassigned to I<ctx>. In such case, freeing the cleared B<EVP_PKEY_CTX> or not 452e71b7053SJung-uk Kimdepends on how the B<EVP_PKEY_CTX> is created. 453e71b7053SJung-uk Kim 454b077aed3SPierre Pronchery=item EVP_MD_do_all_provided() 455b077aed3SPierre Pronchery 456b077aed3SPierre ProncheryTraverses all messages digests implemented by all activated providers 457b077aed3SPierre Proncheryin the given library context I<libctx>, and for each of the implementations, 458b077aed3SPierre Proncherycalls the given function I<fn> with the implementation method and the given 459b077aed3SPierre ProncheryI<arg> as argument. 460b077aed3SPierre Pronchery 461b077aed3SPierre Pronchery=back 462b077aed3SPierre Pronchery 463b077aed3SPierre Pronchery=head1 PARAMETERS 464b077aed3SPierre Pronchery 465b077aed3SPierre ProncherySee L<OSSL_PARAM(3)> for information about passing parameters. 466b077aed3SPierre Pronchery 467b077aed3SPierre ProncheryEVP_MD_CTX_set_params() can be used with the following OSSL_PARAM keys: 468b077aed3SPierre Pronchery 469b077aed3SPierre Pronchery=over 4 470b077aed3SPierre Pronchery 471b077aed3SPierre Pronchery=item "xoflen" (B<OSSL_DIGEST_PARAM_XOFLEN>) <unsigned integer> 472b077aed3SPierre Pronchery 473b077aed3SPierre ProncherySets the digest length for extendable output functions. 474b077aed3SPierre ProncheryIt is used by the SHAKE algorithm and should not exceed what can be given 475b077aed3SPierre Proncheryusing a B<size_t>. 476b077aed3SPierre Pronchery 477b077aed3SPierre Pronchery=item "pad-type" (B<OSSL_DIGEST_PARAM_PAD_TYPE>) <unsigned integer> 478b077aed3SPierre Pronchery 479b077aed3SPierre ProncherySets the padding type. 480b077aed3SPierre ProncheryIt is used by the MDC2 algorithm. 481b077aed3SPierre Pronchery 482b077aed3SPierre Pronchery=back 483b077aed3SPierre Pronchery 484b077aed3SPierre ProncheryEVP_MD_CTX_get_params() can be used with the following OSSL_PARAM keys: 485b077aed3SPierre Pronchery 486b077aed3SPierre Pronchery=over 4 487b077aed3SPierre Pronchery 48844096ebdSEnji Cooper=item "micalg" (B<OSSL_DIGEST_PARAM_MICALG>) <UTF8 string>. 489b077aed3SPierre Pronchery 490b077aed3SPierre ProncheryGets the digest Message Integrity Check algorithm string. This is used when 491b077aed3SPierre Proncherycreating S/MIME multipart/signed messages, as specified in RFC 3851. 492b077aed3SPierre ProncheryIt may be used by external engines or providers. 493b077aed3SPierre Pronchery 494e71b7053SJung-uk Kim=back 495e71b7053SJung-uk Kim 49617f01e99SJung-uk Kim=head1 CONTROLS 49717f01e99SJung-uk Kim 49817f01e99SJung-uk KimEVP_MD_CTX_ctrl() can be used to send the following standard controls: 49917f01e99SJung-uk Kim 50017f01e99SJung-uk Kim=over 4 50117f01e99SJung-uk Kim 50217f01e99SJung-uk Kim=item EVP_MD_CTRL_MICALG 50317f01e99SJung-uk Kim 50417f01e99SJung-uk KimGets the digest Message Integrity Check algorithm string. This is used when 50517f01e99SJung-uk Kimcreating S/MIME multipart/signed messages, as specified in RFC 3851. 506b077aed3SPierre ProncheryThe string value is written to I<p2>. 507b077aed3SPierre Pronchery 508b077aed3SPierre ProncheryWhen used with a fetched B<EVP_MD>, EVP_MD_CTX_get_params() gets called with 509b077aed3SPierre Proncheryan L<OSSL_PARAM(3)> item with the key "micalg" (B<OSSL_DIGEST_PARAM_MICALG>). 51017f01e99SJung-uk Kim 51117f01e99SJung-uk Kim=item EVP_MD_CTRL_XOF_LEN 51217f01e99SJung-uk Kim 513b077aed3SPierre ProncheryThis control sets the digest length for extendable output functions to I<p1>. 51417f01e99SJung-uk KimSending this control directly should not be necessary, the use of 515b077aed3SPierre ProncheryEVP_DigestFinalXOF() is preferred. 51617f01e99SJung-uk KimCurrently used by SHAKE. 51717f01e99SJung-uk Kim 518b077aed3SPierre ProncheryWhen used with a fetched B<EVP_MD>, EVP_MD_CTX_get_params() gets called with 519b077aed3SPierre Proncheryan L<OSSL_PARAM(3)> item with the key "xoflen" (B<OSSL_DIGEST_PARAM_XOFLEN>). 520b077aed3SPierre Pronchery 52117f01e99SJung-uk Kim=back 52217f01e99SJung-uk Kim 523e71b7053SJung-uk Kim=head1 FLAGS 524e71b7053SJung-uk Kim 525e71b7053SJung-uk KimEVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags() and EVP_MD_CTX_test_flags() 526e71b7053SJung-uk Kimcan be used the manipulate and test these B<EVP_MD_CTX> flags: 527e71b7053SJung-uk Kim 528e71b7053SJung-uk Kim=over 4 529e71b7053SJung-uk Kim 530e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_ONESHOT 531e71b7053SJung-uk Kim 532e71b7053SJung-uk KimThis flag instructs the digest to optimize for one update only, if possible. 533e71b7053SJung-uk Kim 534*a7148ab3SEnji Cooper=item EVP_MD_CTX_FLAG_CLEANED 535e71b7053SJung-uk Kim 536*a7148ab3SEnji CooperThis flag is for internal use only and I<must not> be used in user code. 537*a7148ab3SEnji Cooper 538*a7148ab3SEnji Cooper=item EVP_MD_CTX_FLAG_REUSE 539*a7148ab3SEnji Cooper 540*a7148ab3SEnji CooperThis flag is for internal use only and I<must not> be used in user code. 541e71b7053SJung-uk Kim 542e71b7053SJung-uk Kim=for comment We currently avoid documenting flags that are only bit holder: 543e71b7053SJung-uk KimEVP_MD_CTX_FLAG_NON_FIPS_ALLOW, EVP_MD_CTX_FLAGS_PAD_* 544e71b7053SJung-uk Kim 545e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_NO_INIT 546e71b7053SJung-uk Kim 547e71b7053SJung-uk KimThis flag instructs EVP_DigestInit() and similar not to initialise the 548e71b7053SJung-uk Kimimplementation specific data. 549e71b7053SJung-uk Kim 550e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_FINALISE 551e71b7053SJung-uk Kim 552e71b7053SJung-uk KimSome functions such as EVP_DigestSign only finalise copies of internal 553e71b7053SJung-uk Kimcontexts so additional data can be included after the finalisation call. 554e71b7053SJung-uk KimThis is inefficient if this functionality is not required, and can be 555e71b7053SJung-uk Kimdisabled with this flag. 556e71b7053SJung-uk Kim 557e71b7053SJung-uk Kim=back 558e71b7053SJung-uk Kim 559e71b7053SJung-uk Kim=head1 RETURN VALUES 560e71b7053SJung-uk Kim 561e71b7053SJung-uk Kim=over 4 562e71b7053SJung-uk Kim 563b077aed3SPierre Pronchery=item EVP_MD_fetch() 564e71b7053SJung-uk Kim 565b077aed3SPierre ProncheryReturns a pointer to a B<EVP_MD> for success or NULL for failure. 566b077aed3SPierre Pronchery 567b077aed3SPierre Pronchery=item EVP_MD_up_ref() 568b077aed3SPierre Pronchery 569b077aed3SPierre ProncheryReturns 1 for success or 0 for failure. 570b077aed3SPierre Pronchery 571b077aed3SPierre Pronchery=item EVP_Q_digest(), 572b077aed3SPierre ProncheryEVP_Digest(), 573b077aed3SPierre ProncheryEVP_DigestInit_ex2(), 574b077aed3SPierre ProncheryEVP_DigestInit_ex(), 575b077aed3SPierre ProncheryEVP_DigestInit(), 576b077aed3SPierre ProncheryEVP_DigestUpdate(), 577b077aed3SPierre ProncheryEVP_DigestFinal_ex(), 578b077aed3SPierre ProncheryEVP_DigestFinalXOF(), and 579b077aed3SPierre ProncheryEVP_DigestFinal() 580b077aed3SPierre Pronchery 581b077aed3SPierre Proncheryreturn 1 for 582e71b7053SJung-uk Kimsuccess and 0 for failure. 583e71b7053SJung-uk Kim 584e71b7053SJung-uk Kim=item EVP_MD_CTX_ctrl() 585e71b7053SJung-uk Kim 586e71b7053SJung-uk KimReturns 1 if successful or 0 for failure. 587e71b7053SJung-uk Kim 588b077aed3SPierre Pronchery=item EVP_MD_CTX_set_params(), 589b077aed3SPierre ProncheryEVP_MD_CTX_get_params() 590b077aed3SPierre Pronchery 591b077aed3SPierre ProncheryReturns 1 if successful or 0 for failure. 592b077aed3SPierre Pronchery 593b077aed3SPierre Pronchery=item EVP_MD_CTX_settable_params(), 594b077aed3SPierre ProncheryEVP_MD_CTX_gettable_params() 595b077aed3SPierre Pronchery 596b077aed3SPierre ProncheryReturn an array of constant L<OSSL_PARAM(3)>s, or NULL if there is none 597b077aed3SPierre Proncheryto get. 598b077aed3SPierre Pronchery 599e71b7053SJung-uk Kim=item EVP_MD_CTX_copy_ex() 600e71b7053SJung-uk Kim 601e71b7053SJung-uk KimReturns 1 if successful or 0 for failure. 602e71b7053SJung-uk Kim 603b077aed3SPierre Pronchery=item EVP_MD_get_type(), 604b077aed3SPierre ProncheryEVP_MD_get_pkey_type() 605e71b7053SJung-uk Kim 606e71b7053SJung-uk KimReturns the NID of the corresponding OBJECT IDENTIFIER or NID_undef if none 607e71b7053SJung-uk Kimexists. 608e71b7053SJung-uk Kim 609b077aed3SPierre Pronchery=item EVP_MD_get_size(), 610b077aed3SPierre ProncheryEVP_MD_get_block_size(), 611b077aed3SPierre ProncheryEVP_MD_CTX_get_size(), 612b077aed3SPierre ProncheryEVP_MD_CTX_get_block_size() 613e71b7053SJung-uk Kim 614b077aed3SPierre ProncheryReturns the digest or block size in bytes or -1 for failure. 615e71b7053SJung-uk Kim 616e71b7053SJung-uk Kim=item EVP_md_null() 617e71b7053SJung-uk Kim 618e71b7053SJung-uk KimReturns a pointer to the B<EVP_MD> structure of the "null" message digest. 619e71b7053SJung-uk Kim 620e71b7053SJung-uk Kim=item EVP_get_digestbyname(), 621e71b7053SJung-uk KimEVP_get_digestbynid(), 622e71b7053SJung-uk KimEVP_get_digestbyobj() 623e71b7053SJung-uk Kim 624e71b7053SJung-uk KimReturns either an B<EVP_MD> structure or NULL if an error occurs. 625e71b7053SJung-uk Kim 626e71b7053SJung-uk Kim=item EVP_MD_CTX_set_pkey_ctx() 627e71b7053SJung-uk Kim 628e71b7053SJung-uk KimThis function has no return value. 629e71b7053SJung-uk Kim 630b077aed3SPierre Pronchery=item EVP_MD_names_do_all() 631b077aed3SPierre Pronchery 632b077aed3SPierre ProncheryReturns 1 if the callback was called for all names. A return value of 0 means 633b077aed3SPierre Proncherythat the callback was not called for any names. 634b077aed3SPierre Pronchery 635e71b7053SJung-uk Kim=back 636e71b7053SJung-uk Kim 637e71b7053SJung-uk Kim=head1 NOTES 638e71b7053SJung-uk Kim 639e71b7053SJung-uk KimThe B<EVP> interface to message digests should almost always be used in 64058f35182SJung-uk Kimpreference to the low-level interfaces. This is because the code then becomes 641e71b7053SJung-uk Kimtransparent to the digest used and much more flexible. 642e71b7053SJung-uk Kim 643e71b7053SJung-uk KimNew applications should use the SHA-2 (such as L<EVP_sha256(3)>) or the SHA-3 644e71b7053SJung-uk Kimdigest algorithms (such as L<EVP_sha3_512(3)>). The other digest algorithms 645e71b7053SJung-uk Kimare still in common use. 646e71b7053SJung-uk Kim 647b077aed3SPierre ProncheryFor most applications the I<impl> parameter to EVP_DigestInit_ex() will be 648e71b7053SJung-uk Kimset to NULL to use the default digest implementation. 649e71b7053SJung-uk Kim 650b077aed3SPierre ProncheryIgnoring failure returns of EVP_DigestInit_ex(), EVP_DigestInit_ex2(), or 651b077aed3SPierre ProncheryEVP_DigestInit() can lead to undefined behavior on subsequent calls 652b077aed3SPierre Proncheryupdating or finalizing the B<EVP_MD_CTX> such as the EVP_DigestUpdate() or 653b077aed3SPierre ProncheryEVP_DigestFinal() functions. The only valid calls on the B<EVP_MD_CTX> 654b077aed3SPierre Proncherywhen initialization fails are calls that attempt another initialization of 655b077aed3SPierre Proncherythe context or release the context. 656b077aed3SPierre Pronchery 657e71b7053SJung-uk KimThe functions EVP_DigestInit(), EVP_DigestFinal() and EVP_MD_CTX_copy() are 658e71b7053SJung-uk Kimobsolete but are retained to maintain compatibility with existing code. New 659e71b7053SJung-uk Kimapplications should use EVP_DigestInit_ex(), EVP_DigestFinal_ex() and 660e71b7053SJung-uk KimEVP_MD_CTX_copy_ex() because they can efficiently reuse a digest context 661e71b7053SJung-uk Kiminstead of initializing and cleaning it up on each call and allow non default 662e71b7053SJung-uk Kimimplementations of digests to be specified. 663e71b7053SJung-uk Kim 664e71b7053SJung-uk KimIf digest contexts are not cleaned up after use, 665e71b7053SJung-uk Kimmemory leaks will occur. 666e71b7053SJung-uk Kim 667b077aed3SPierre ProncheryEVP_MD_CTX_get0_name(), EVP_MD_CTX_get_size(), EVP_MD_CTX_get_block_size(), 668b077aed3SPierre ProncheryEVP_MD_CTX_get_type(), EVP_get_digestbynid() and EVP_get_digestbyobj() are 669b077aed3SPierre Proncherydefined as macros. 670e71b7053SJung-uk Kim 671e71b7053SJung-uk KimEVP_MD_CTX_ctrl() sends commands to message digests for additional configuration 672e71b7053SJung-uk Kimor control. 673e71b7053SJung-uk Kim 674da327cd2SJung-uk Kim=head1 EXAMPLES 675e71b7053SJung-uk Kim 676e71b7053SJung-uk KimThis example digests the data "Test Message\n" and "Hello World\n", using the 677e71b7053SJung-uk Kimdigest name passed on the command line. 678e71b7053SJung-uk Kim 679e71b7053SJung-uk Kim #include <stdio.h> 680c9cf7b5cSJung-uk Kim #include <string.h> 681e71b7053SJung-uk Kim #include <openssl/evp.h> 682e71b7053SJung-uk Kim 683c9cf7b5cSJung-uk Kim int main(int argc, char *argv[]) 684e71b7053SJung-uk Kim { 685e71b7053SJung-uk Kim EVP_MD_CTX *mdctx; 686e71b7053SJung-uk Kim const EVP_MD *md; 687e71b7053SJung-uk Kim char mess1[] = "Test Message\n"; 688e71b7053SJung-uk Kim char mess2[] = "Hello World\n"; 689e71b7053SJung-uk Kim unsigned char md_value[EVP_MAX_MD_SIZE]; 690c9cf7b5cSJung-uk Kim unsigned int md_len, i; 691e71b7053SJung-uk Kim 692e71b7053SJung-uk Kim if (argv[1] == NULL) { 693e71b7053SJung-uk Kim printf("Usage: mdtest digestname\n"); 694e71b7053SJung-uk Kim exit(1); 695e71b7053SJung-uk Kim } 696e71b7053SJung-uk Kim 697e71b7053SJung-uk Kim md = EVP_get_digestbyname(argv[1]); 698e71b7053SJung-uk Kim if (md == NULL) { 699e71b7053SJung-uk Kim printf("Unknown message digest %s\n", argv[1]); 700e71b7053SJung-uk Kim exit(1); 701e71b7053SJung-uk Kim } 702e71b7053SJung-uk Kim 703e71b7053SJung-uk Kim mdctx = EVP_MD_CTX_new(); 704b077aed3SPierre Pronchery if (!EVP_DigestInit_ex2(mdctx, md, NULL)) { 705b077aed3SPierre Pronchery printf("Message digest initialization failed.\n"); 706b077aed3SPierre Pronchery EVP_MD_CTX_free(mdctx); 707b077aed3SPierre Pronchery exit(1); 708b077aed3SPierre Pronchery } 709b077aed3SPierre Pronchery if (!EVP_DigestUpdate(mdctx, mess1, strlen(mess1))) { 710b077aed3SPierre Pronchery printf("Message digest update failed.\n"); 711b077aed3SPierre Pronchery EVP_MD_CTX_free(mdctx); 712b077aed3SPierre Pronchery exit(1); 713b077aed3SPierre Pronchery } 714b077aed3SPierre Pronchery if (!EVP_DigestUpdate(mdctx, mess2, strlen(mess2))) { 715b077aed3SPierre Pronchery printf("Message digest update failed.\n"); 716b077aed3SPierre Pronchery EVP_MD_CTX_free(mdctx); 717b077aed3SPierre Pronchery exit(1); 718b077aed3SPierre Pronchery } 719b077aed3SPierre Pronchery if (!EVP_DigestFinal_ex(mdctx, md_value, &md_len)) { 720b077aed3SPierre Pronchery printf("Message digest finalization failed.\n"); 721b077aed3SPierre Pronchery EVP_MD_CTX_free(mdctx); 722b077aed3SPierre Pronchery exit(1); 723b077aed3SPierre Pronchery } 724e71b7053SJung-uk Kim EVP_MD_CTX_free(mdctx); 725e71b7053SJung-uk Kim 726e71b7053SJung-uk Kim printf("Digest is: "); 727e71b7053SJung-uk Kim for (i = 0; i < md_len; i++) 728e71b7053SJung-uk Kim printf("%02x", md_value[i]); 729e71b7053SJung-uk Kim printf("\n"); 730e71b7053SJung-uk Kim 731e71b7053SJung-uk Kim exit(0); 732e71b7053SJung-uk Kim } 733e71b7053SJung-uk Kim 734e71b7053SJung-uk Kim=head1 SEE ALSO 735e71b7053SJung-uk Kim 73617f01e99SJung-uk KimL<EVP_MD_meth_new(3)>, 737b077aed3SPierre ProncheryL<openssl-dgst(1)>, 738b077aed3SPierre ProncheryL<evp(7)>, 739b077aed3SPierre ProncheryL<OSSL_PROVIDER(3)>, 740b077aed3SPierre ProncheryL<OSSL_PARAM(3)>, 741b077aed3SPierre ProncheryL<property(7)>, 742b077aed3SPierre ProncheryL<crypto(7)/ALGORITHM FETCHING>, 743b077aed3SPierre ProncheryL<provider-digest(7)>, 744b077aed3SPierre ProncheryL<life_cycle-digest(7)> 745e71b7053SJung-uk Kim 746e71b7053SJung-uk KimThe full list of digest algorithms are provided below. 747e71b7053SJung-uk Kim 748e71b7053SJung-uk KimL<EVP_blake2b512(3)>, 749e71b7053SJung-uk KimL<EVP_md2(3)>, 750e71b7053SJung-uk KimL<EVP_md4(3)>, 751e71b7053SJung-uk KimL<EVP_md5(3)>, 752e71b7053SJung-uk KimL<EVP_mdc2(3)>, 753e71b7053SJung-uk KimL<EVP_ripemd160(3)>, 754e71b7053SJung-uk KimL<EVP_sha1(3)>, 755e71b7053SJung-uk KimL<EVP_sha224(3)>, 756e71b7053SJung-uk KimL<EVP_sha3_224(3)>, 757e71b7053SJung-uk KimL<EVP_sm3(3)>, 758e71b7053SJung-uk KimL<EVP_whirlpool(3)> 759e71b7053SJung-uk Kim 760e71b7053SJung-uk Kim=head1 HISTORY 761e71b7053SJung-uk Kim 7626935a639SJung-uk KimThe EVP_MD_CTX_create() and EVP_MD_CTX_destroy() functions were renamed to 7636935a639SJung-uk KimEVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0, respectively. 764e71b7053SJung-uk Kim 765e71b7053SJung-uk KimThe link between digests and signing algorithms was fixed in OpenSSL 1.0 and 766e71b7053SJung-uk Kimlater, so now EVP_sha1() can be used with RSA and DSA. 767e71b7053SJung-uk Kim 7686935a639SJung-uk KimThe EVP_dss1() function was removed in OpenSSL 1.1.0. 769e71b7053SJung-uk Kim 770b077aed3SPierre ProncheryThe EVP_MD_CTX_set_pkey_ctx() function was added in OpenSSL 1.1.1. 771b077aed3SPierre Pronchery 772b077aed3SPierre ProncheryThe EVP_Q_digest(), EVP_DigestInit_ex2(), 773b077aed3SPierre ProncheryEVP_MD_fetch(), EVP_MD_free(), EVP_MD_up_ref(), 774b077aed3SPierre ProncheryEVP_MD_get_params(), EVP_MD_CTX_set_params(), EVP_MD_CTX_get_params(), 775b077aed3SPierre ProncheryEVP_MD_gettable_params(), EVP_MD_gettable_ctx_params(), 776b077aed3SPierre ProncheryEVP_MD_settable_ctx_params(), EVP_MD_CTX_settable_params() and 777b077aed3SPierre ProncheryEVP_MD_CTX_gettable_params() functions were added in OpenSSL 3.0. 778b077aed3SPierre Pronchery 779b077aed3SPierre ProncheryThe EVP_MD_type(), EVP_MD_nid(), EVP_MD_name(), EVP_MD_pkey_type(), 780b077aed3SPierre ProncheryEVP_MD_size(), EVP_MD_block_size(), EVP_MD_flags(), EVP_MD_CTX_size(), 781b077aed3SPierre ProncheryEVP_MD_CTX_block_size(), EVP_MD_CTX_type(), and EVP_MD_CTX_md_data() 782b077aed3SPierre Proncheryfunctions were renamed to include C<get> or C<get0> in their names in 783b077aed3SPierre ProncheryOpenSSL 3.0, respectively. The old names are kept as non-deprecated 784b077aed3SPierre Proncheryalias macros. 785b077aed3SPierre Pronchery 786b077aed3SPierre ProncheryThe EVP_MD_CTX_md() function was deprecated in OpenSSL 3.0; use 787b077aed3SPierre ProncheryEVP_MD_CTX_get0_md() instead. 788b077aed3SPierre ProncheryEVP_MD_CTX_update_fn() and EVP_MD_CTX_set_update_fn() were deprecated 789b077aed3SPierre Proncheryin OpenSSL 3.0. 790e71b7053SJung-uk Kim 791e71b7053SJung-uk Kim=head1 COPYRIGHT 792e71b7053SJung-uk Kim 79344096ebdSEnji CooperCopyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved. 794e71b7053SJung-uk Kim 795b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License"). You may not use 796e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 797e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 798e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 799e71b7053SJung-uk Kim 800e71b7053SJung-uk Kim=cut 801