xref: /freebsd/crypto/openssl/doc/man3/EVP_DigestInit.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
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