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