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