xref: /freebsd/crypto/openssl/doc/man3/EVP_DigestInit.pod (revision 17f01e9963948a18f55eb97173123702c5dae671)
1e71b7053SJung-uk Kim=pod
2e71b7053SJung-uk Kim
3e71b7053SJung-uk Kim=head1 NAME
4e71b7053SJung-uk Kim
5*17f01e99SJung-uk KimEVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy,
6*17f01e99SJung-uk KimEVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, EVP_MD_CTX_set_flags,
7*17f01e99SJung-uk KimEVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags,
8*17f01e99SJung-uk KimEVP_Digest, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate,
9e71b7053SJung-uk KimEVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal,
10*17f01e99SJung-uk KimEVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags,
11*17f01e99SJung-uk KimEVP_MD_CTX_md, EVP_MD_CTX_type, EVP_MD_CTX_size, EVP_MD_CTX_block_size,
12*17f01e99SJung-uk KimEVP_MD_CTX_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn,
13e71b7053SJung-uk KimEVP_md_null,
14*17f01e99SJung-uk KimEVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj,
15*17f01e99SJung-uk KimEVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx - EVP digest routines
16e71b7053SJung-uk Kim
17e71b7053SJung-uk Kim=head1 SYNOPSIS
18e71b7053SJung-uk Kim
19e71b7053SJung-uk Kim #include <openssl/evp.h>
20e71b7053SJung-uk Kim
21e71b7053SJung-uk Kim EVP_MD_CTX *EVP_MD_CTX_new(void);
22e71b7053SJung-uk Kim int EVP_MD_CTX_reset(EVP_MD_CTX *ctx);
23e71b7053SJung-uk Kim void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
24e71b7053SJung-uk Kim void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2);
25e71b7053SJung-uk Kim void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
26e71b7053SJung-uk Kim void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
27e71b7053SJung-uk Kim int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);
28e71b7053SJung-uk Kim
29*17f01e99SJung-uk Kim int EVP_Digest(const void *data, size_t count, unsigned char *md,
30*17f01e99SJung-uk Kim                unsigned int *size, const EVP_MD *type, ENGINE *impl);
31e71b7053SJung-uk Kim int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
32e71b7053SJung-uk Kim int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
33e71b7053SJung-uk Kim int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
34e71b7053SJung-uk Kim int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len);
35e71b7053SJung-uk Kim
36e71b7053SJung-uk Kim int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in);
37e71b7053SJung-uk Kim
38e71b7053SJung-uk Kim int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
39e71b7053SJung-uk Kim int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
40e71b7053SJung-uk Kim
41e71b7053SJung-uk Kim int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in);
42e71b7053SJung-uk Kim
43e71b7053SJung-uk Kim int EVP_MD_type(const EVP_MD *md);
44e71b7053SJung-uk Kim int EVP_MD_pkey_type(const EVP_MD *md);
45e71b7053SJung-uk Kim int EVP_MD_size(const EVP_MD *md);
46e71b7053SJung-uk Kim int EVP_MD_block_size(const EVP_MD *md);
47*17f01e99SJung-uk Kim unsigned long EVP_MD_flags(const EVP_MD *md);
48e71b7053SJung-uk Kim
49e71b7053SJung-uk Kim const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
50*17f01e99SJung-uk Kim int EVP_MD_CTX_size(const EVP_MD_CTX *ctx);
51*17f01e99SJung-uk Kim int EVP_MD_CTX_block_size(const EVP_MD_CTX *ctx);
52*17f01e99SJung-uk Kim int EVP_MD_CTX_type(const EVP_MD_CTX *ctx);
53e71b7053SJung-uk Kim void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx);
54*17f01e99SJung-uk Kim int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx,
55*17f01e99SJung-uk Kim                                              const void *data, size_t count);
56*17f01e99SJung-uk Kim void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx,
57*17f01e99SJung-uk Kim                               int (*update)(EVP_MD_CTX *ctx,
58*17f01e99SJung-uk Kim                                             const void *data, size_t count));
59e71b7053SJung-uk Kim
60e71b7053SJung-uk Kim const EVP_MD *EVP_md_null(void);
61e71b7053SJung-uk Kim
62e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbyname(const char *name);
63e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbynid(int type);
64e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o);
65e71b7053SJung-uk Kim
66*17f01e99SJung-uk Kim EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx);
67e71b7053SJung-uk Kim void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
68e71b7053SJung-uk Kim
69e71b7053SJung-uk Kim=head1 DESCRIPTION
70e71b7053SJung-uk Kim
71e71b7053SJung-uk KimThe EVP digest routines are a high level interface to message digests,
72e71b7053SJung-uk Kimand should be used instead of the cipher-specific functions.
73e71b7053SJung-uk Kim
74e71b7053SJung-uk Kim=over 4
75e71b7053SJung-uk Kim
76e71b7053SJung-uk Kim=item EVP_MD_CTX_new()
77e71b7053SJung-uk Kim
78e71b7053SJung-uk KimAllocates and returns a digest context.
79e71b7053SJung-uk Kim
80e71b7053SJung-uk Kim=item EVP_MD_CTX_reset()
81e71b7053SJung-uk Kim
82e71b7053SJung-uk KimResets the digest context B<ctx>.  This can be used to reuse an already
83e71b7053SJung-uk Kimexisting context.
84e71b7053SJung-uk Kim
85e71b7053SJung-uk Kim=item EVP_MD_CTX_free()
86e71b7053SJung-uk Kim
87e71b7053SJung-uk KimCleans up digest context B<ctx> and frees up the space allocated to it.
88e71b7053SJung-uk Kim
89e71b7053SJung-uk Kim=item EVP_MD_CTX_ctrl()
90e71b7053SJung-uk Kim
91*17f01e99SJung-uk KimPerforms digest-specific control actions on context B<ctx>. The control command
92*17f01e99SJung-uk Kimis indicated in B<cmd> and any additional arguments in B<p1> and B<p2>.
93*17f01e99SJung-uk KimEVP_MD_CTX_ctrl() must be called after EVP_DigestInit_ex(). Other restrictions
94*17f01e99SJung-uk Kimmay apply depending on the control type and digest implementation.
95*17f01e99SJung-uk KimSee L</CONTROLS> below for more information.
96e71b7053SJung-uk Kim
97e71b7053SJung-uk Kim=item EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags()
98e71b7053SJung-uk Kim
99e71b7053SJung-uk KimSets, clears and tests B<ctx> flags.  See L</FLAGS> below for more information.
100e71b7053SJung-uk Kim
101*17f01e99SJung-uk Kim=item EVP_Digest()
102*17f01e99SJung-uk Kim
103*17f01e99SJung-uk KimA wrapper around the Digest Init_ex, Update and Final_ex functions.
104*17f01e99SJung-uk KimHashes B<count> bytes of data at B<data> using a digest B<type> from ENGINE
105*17f01e99SJung-uk KimB<impl>. The digest value is placed in B<md> and its length is written at B<size>
106*17f01e99SJung-uk Kimif the pointer is not NULL. At most B<EVP_MAX_MD_SIZE> bytes will be written.
107*17f01e99SJung-uk KimIf B<impl> is NULL the default implementation of digest B<type> is used.
108*17f01e99SJung-uk Kim
109e71b7053SJung-uk Kim=item EVP_DigestInit_ex()
110e71b7053SJung-uk Kim
111e71b7053SJung-uk KimSets up digest context B<ctx> to use a digest B<type> from ENGINE B<impl>.
112e71b7053SJung-uk KimB<type> will typically be supplied by a function such as EVP_sha1().  If
113e71b7053SJung-uk KimB<impl> is NULL then the default implementation of digest B<type> is used.
114e71b7053SJung-uk Kim
115e71b7053SJung-uk Kim=item EVP_DigestUpdate()
116e71b7053SJung-uk Kim
117e71b7053SJung-uk KimHashes B<cnt> bytes of data at B<d> into the digest context B<ctx>. This
118e71b7053SJung-uk Kimfunction can be called several times on the same B<ctx> to hash additional
119e71b7053SJung-uk Kimdata.
120e71b7053SJung-uk Kim
121e71b7053SJung-uk Kim=item EVP_DigestFinal_ex()
122e71b7053SJung-uk Kim
123e71b7053SJung-uk KimRetrieves the digest value from B<ctx> and places it in B<md>. If the B<s>
124e71b7053SJung-uk Kimparameter is not NULL then the number of bytes of data written (i.e. the
125e71b7053SJung-uk Kimlength of the digest) will be written to the integer at B<s>, at most
126e71b7053SJung-uk KimB<EVP_MAX_MD_SIZE> bytes will be written.  After calling EVP_DigestFinal_ex()
127e71b7053SJung-uk Kimno additional calls to EVP_DigestUpdate() can be made, but
128e71b7053SJung-uk KimEVP_DigestInit_ex() can be called to initialize a new digest operation.
129e71b7053SJung-uk Kim
130e71b7053SJung-uk Kim=item EVP_DigestFinalXOF()
131e71b7053SJung-uk Kim
132e71b7053SJung-uk KimInterfaces to extendable-output functions, XOFs, such as SHAKE128 and SHAKE256.
133e71b7053SJung-uk KimIt retrieves the digest value from B<ctx> and places it in B<len>-sized <B>md.
134e71b7053SJung-uk KimAfter calling this function no additional calls to EVP_DigestUpdate() can be
135e71b7053SJung-uk Kimmade, but EVP_DigestInit_ex() can be called to initialize a new operation.
136e71b7053SJung-uk Kim
137e71b7053SJung-uk Kim=item EVP_MD_CTX_copy_ex()
138e71b7053SJung-uk Kim
139e71b7053SJung-uk KimCan be used to copy the message digest state from B<in> to B<out>. This is
140e71b7053SJung-uk Kimuseful if large amounts of data are to be hashed which only differ in the last
141e71b7053SJung-uk Kimfew bytes.
142e71b7053SJung-uk Kim
143e71b7053SJung-uk Kim=item EVP_DigestInit()
144e71b7053SJung-uk Kim
145e71b7053SJung-uk KimBehaves in the same way as EVP_DigestInit_ex() except it always uses the
146*17f01e99SJung-uk Kimdefault digest implementation and calls EVP_MD_CTX_reset().
147e71b7053SJung-uk Kim
148e71b7053SJung-uk Kim=item EVP_DigestFinal()
149e71b7053SJung-uk Kim
150e71b7053SJung-uk KimSimilar to EVP_DigestFinal_ex() except the digest context B<ctx> is
151e71b7053SJung-uk Kimautomatically cleaned up.
152e71b7053SJung-uk Kim
153e71b7053SJung-uk Kim=item EVP_MD_CTX_copy()
154e71b7053SJung-uk Kim
155e71b7053SJung-uk KimSimilar to EVP_MD_CTX_copy_ex() except the destination B<out> does not have to
156e71b7053SJung-uk Kimbe initialized.
157e71b7053SJung-uk Kim
158e71b7053SJung-uk Kim=item EVP_MD_size(),
159e71b7053SJung-uk KimEVP_MD_CTX_size()
160e71b7053SJung-uk Kim
161e71b7053SJung-uk KimReturn the size of the message digest when passed an B<EVP_MD> or an
162e71b7053SJung-uk KimB<EVP_MD_CTX> structure, i.e. the size of the hash.
163e71b7053SJung-uk Kim
164e71b7053SJung-uk Kim=item EVP_MD_block_size(),
165e71b7053SJung-uk KimEVP_MD_CTX_block_size()
166e71b7053SJung-uk Kim
167e71b7053SJung-uk KimReturn the block size of the message digest when passed an B<EVP_MD> or an
168e71b7053SJung-uk KimB<EVP_MD_CTX> structure.
169e71b7053SJung-uk Kim
170e71b7053SJung-uk Kim=item EVP_MD_type(),
171e71b7053SJung-uk KimEVP_MD_CTX_type()
172e71b7053SJung-uk Kim
173e71b7053SJung-uk KimReturn the NID of the OBJECT IDENTIFIER representing the given message digest
174e71b7053SJung-uk Kimwhen passed an B<EVP_MD> structure.  For example, C<EVP_MD_type(EVP_sha1())>
175e71b7053SJung-uk Kimreturns B<NID_sha1>. This function is normally used when setting ASN1 OIDs.
176e71b7053SJung-uk Kim
177e71b7053SJung-uk Kim=item EVP_MD_CTX_md_data()
178e71b7053SJung-uk Kim
179e71b7053SJung-uk KimReturn the digest method private data for the passed B<EVP_MD_CTX>.
180e71b7053SJung-uk KimThe space is allocated by OpenSSL and has the size originally set with
181e71b7053SJung-uk KimEVP_MD_meth_set_app_datasize().
182e71b7053SJung-uk Kim
183e71b7053SJung-uk Kim=item EVP_MD_CTX_md()
184e71b7053SJung-uk Kim
185e71b7053SJung-uk KimReturns the B<EVP_MD> structure corresponding to the passed B<EVP_MD_CTX>.
186e71b7053SJung-uk Kim
187*17f01e99SJung-uk Kim=item EVP_MD_CTX_set_update_fn()
188*17f01e99SJung-uk Kim
189*17f01e99SJung-uk KimSets the update function for B<ctx> to B<update>.
190*17f01e99SJung-uk KimThis is the function that is called by EVP_DigestUpdate. If not set, the
191*17f01e99SJung-uk Kimupdate function from the B<EVP_MD> type specified at initialization is used.
192*17f01e99SJung-uk Kim
193*17f01e99SJung-uk Kim=item EVP_MD_CTX_update_fn()
194*17f01e99SJung-uk Kim
195*17f01e99SJung-uk KimReturns the update function for B<ctx>.
196*17f01e99SJung-uk Kim
197*17f01e99SJung-uk Kim=item EVP_MD_flags()
198*17f01e99SJung-uk Kim
199*17f01e99SJung-uk KimReturns the B<md> flags. Note that these are different from the B<EVP_MD_CTX>
200*17f01e99SJung-uk Kimones. See L<EVP_MD_meth_set_flags(3)> for more information.
201*17f01e99SJung-uk Kim
202e71b7053SJung-uk Kim=item EVP_MD_pkey_type()
203e71b7053SJung-uk Kim
204e71b7053SJung-uk KimReturns the NID of the public key signing algorithm associated with this
205e71b7053SJung-uk Kimdigest. For example EVP_sha1() is associated with RSA so this will return
206e71b7053SJung-uk KimB<NID_sha1WithRSAEncryption>. Since digests and signature algorithms are no
207e71b7053SJung-uk Kimlonger linked this function is only retained for compatibility reasons.
208e71b7053SJung-uk Kim
209e71b7053SJung-uk Kim=item EVP_md_null()
210e71b7053SJung-uk Kim
211e71b7053SJung-uk KimA "null" message digest that does nothing: i.e. the hash it returns is of zero
212e71b7053SJung-uk Kimlength.
213e71b7053SJung-uk Kim
214e71b7053SJung-uk Kim=item EVP_get_digestbyname(),
215e71b7053SJung-uk KimEVP_get_digestbynid(),
216e71b7053SJung-uk KimEVP_get_digestbyobj()
217e71b7053SJung-uk Kim
218e71b7053SJung-uk KimReturns an B<EVP_MD> structure when passed a digest name, a digest B<NID> or an
219e71b7053SJung-uk KimB<ASN1_OBJECT> structure respectively.
220e71b7053SJung-uk Kim
221*17f01e99SJung-uk Kim=item EVP_MD_CTX_pkey_ctx()
222*17f01e99SJung-uk Kim
223*17f01e99SJung-uk KimReturns the B<EVP_PKEY_CTX> assigned to B<ctx>. The returned pointer should not
224*17f01e99SJung-uk Kimbe freed by the caller.
225*17f01e99SJung-uk Kim
226e71b7053SJung-uk Kim=item EVP_MD_CTX_set_pkey_ctx()
227e71b7053SJung-uk Kim
228e71b7053SJung-uk KimAssigns an B<EVP_PKEY_CTX> to B<EVP_MD_CTX>. This is usually used to provide
229*17f01e99SJung-uk Kima customized B<EVP_PKEY_CTX> to L<EVP_DigestSignInit(3)> or
230e71b7053SJung-uk KimL<EVP_DigestVerifyInit(3)>. The B<pctx> passed to this function should be freed
231e71b7053SJung-uk Kimby the caller. A NULL B<pctx> pointer is also allowed to clear the B<EVP_PKEY_CTX>
232e71b7053SJung-uk Kimassigned to B<ctx>. In such case, freeing the cleared B<EVP_PKEY_CTX> or not
233e71b7053SJung-uk Kimdepends on how the B<EVP_PKEY_CTX> is created.
234e71b7053SJung-uk Kim
235e71b7053SJung-uk Kim=back
236e71b7053SJung-uk Kim
237*17f01e99SJung-uk Kim=head1 CONTROLS
238*17f01e99SJung-uk Kim
239*17f01e99SJung-uk KimEVP_MD_CTX_ctrl() can be used to send the following standard controls:
240*17f01e99SJung-uk Kim
241*17f01e99SJung-uk Kim=over 4
242*17f01e99SJung-uk Kim
243*17f01e99SJung-uk Kim=item EVP_MD_CTRL_MICALG
244*17f01e99SJung-uk Kim
245*17f01e99SJung-uk KimGets the digest Message Integrity Check algorithm string. This is used when
246*17f01e99SJung-uk Kimcreating S/MIME multipart/signed messages, as specified in RFC 3851.
247*17f01e99SJung-uk KimThe string value is written to B<p2>.
248*17f01e99SJung-uk Kim
249*17f01e99SJung-uk Kim=item EVP_MD_CTRL_XOF_LEN
250*17f01e99SJung-uk Kim
251*17f01e99SJung-uk KimThis control sets the digest length for extendable output functions to B<p1>.
252*17f01e99SJung-uk KimSending this control directly should not be necessary, the use of
253*17f01e99SJung-uk KimC<EVP_DigestFinalXOF()> is preferred.
254*17f01e99SJung-uk KimCurrently used by SHAKE.
255*17f01e99SJung-uk Kim
256*17f01e99SJung-uk Kim=back
257*17f01e99SJung-uk Kim
258e71b7053SJung-uk Kim=head1 FLAGS
259e71b7053SJung-uk Kim
260e71b7053SJung-uk KimEVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags() and EVP_MD_CTX_test_flags()
261e71b7053SJung-uk Kimcan be used the manipulate and test these B<EVP_MD_CTX> flags:
262e71b7053SJung-uk Kim
263e71b7053SJung-uk Kim=over 4
264e71b7053SJung-uk Kim
265e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_ONESHOT
266e71b7053SJung-uk Kim
267e71b7053SJung-uk KimThis flag instructs the digest to optimize for one update only, if possible.
268e71b7053SJung-uk Kim
269e71b7053SJung-uk Kim=for comment EVP_MD_CTX_FLAG_CLEANED is internal, don't mention it
270e71b7053SJung-uk Kim
271e71b7053SJung-uk Kim=for comment EVP_MD_CTX_FLAG_REUSE is internal, don't mention it
272e71b7053SJung-uk Kim
273e71b7053SJung-uk Kim=for comment We currently avoid documenting flags that are only bit holder:
274e71b7053SJung-uk KimEVP_MD_CTX_FLAG_NON_FIPS_ALLOW, EVP_MD_CTX_FLAGS_PAD_*
275e71b7053SJung-uk Kim
276e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_NO_INIT
277e71b7053SJung-uk Kim
278e71b7053SJung-uk KimThis flag instructs EVP_DigestInit() and similar not to initialise the
279e71b7053SJung-uk Kimimplementation specific data.
280e71b7053SJung-uk Kim
281e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_FINALISE
282e71b7053SJung-uk Kim
283e71b7053SJung-uk KimSome functions such as EVP_DigestSign only finalise copies of internal
284e71b7053SJung-uk Kimcontexts so additional data can be included after the finalisation call.
285e71b7053SJung-uk KimThis is inefficient if this functionality is not required, and can be
286e71b7053SJung-uk Kimdisabled with this flag.
287e71b7053SJung-uk Kim
288e71b7053SJung-uk Kim=back
289e71b7053SJung-uk Kim
290e71b7053SJung-uk Kim=head1 RETURN VALUES
291e71b7053SJung-uk Kim
292e71b7053SJung-uk Kim=over 4
293e71b7053SJung-uk Kim
294e71b7053SJung-uk Kim=item EVP_DigestInit_ex(),
295e71b7053SJung-uk KimEVP_DigestUpdate(),
296e71b7053SJung-uk KimEVP_DigestFinal_ex()
297e71b7053SJung-uk Kim
298e71b7053SJung-uk KimReturns 1 for
299e71b7053SJung-uk Kimsuccess and 0 for failure.
300e71b7053SJung-uk Kim
301e71b7053SJung-uk Kim=item EVP_MD_CTX_ctrl()
302e71b7053SJung-uk Kim
303e71b7053SJung-uk KimReturns 1 if successful or 0 for failure.
304e71b7053SJung-uk Kim
305e71b7053SJung-uk Kim=item EVP_MD_CTX_copy_ex()
306e71b7053SJung-uk Kim
307e71b7053SJung-uk KimReturns 1 if successful or 0 for failure.
308e71b7053SJung-uk Kim
309e71b7053SJung-uk Kim=item EVP_MD_type(),
310*17f01e99SJung-uk KimEVP_MD_pkey_type()
311e71b7053SJung-uk Kim
312e71b7053SJung-uk KimReturns the NID of the corresponding OBJECT IDENTIFIER or NID_undef if none
313e71b7053SJung-uk Kimexists.
314e71b7053SJung-uk Kim
315e71b7053SJung-uk Kim=item EVP_MD_size(),
316e71b7053SJung-uk KimEVP_MD_block_size(),
317e71b7053SJung-uk KimEVP_MD_CTX_size(),
318e71b7053SJung-uk KimEVP_MD_CTX_block_size()
319e71b7053SJung-uk Kim
320e71b7053SJung-uk KimReturns the digest or block size in bytes.
321e71b7053SJung-uk Kim
322e71b7053SJung-uk Kim=item EVP_md_null()
323e71b7053SJung-uk Kim
324e71b7053SJung-uk KimReturns a pointer to the B<EVP_MD> structure of the "null" message digest.
325e71b7053SJung-uk Kim
326e71b7053SJung-uk Kim=item EVP_get_digestbyname(),
327e71b7053SJung-uk KimEVP_get_digestbynid(),
328e71b7053SJung-uk KimEVP_get_digestbyobj()
329e71b7053SJung-uk Kim
330e71b7053SJung-uk KimReturns either an B<EVP_MD> structure or NULL if an error occurs.
331e71b7053SJung-uk Kim
332e71b7053SJung-uk Kim=item EVP_MD_CTX_set_pkey_ctx()
333e71b7053SJung-uk Kim
334e71b7053SJung-uk KimThis function has no return value.
335e71b7053SJung-uk Kim
336e71b7053SJung-uk Kim=back
337e71b7053SJung-uk Kim
338e71b7053SJung-uk Kim=head1 NOTES
339e71b7053SJung-uk Kim
340e71b7053SJung-uk KimThe B<EVP> interface to message digests should almost always be used in
341e71b7053SJung-uk Kimpreference to the low level interfaces. This is because the code then becomes
342e71b7053SJung-uk Kimtransparent to the digest used and much more flexible.
343e71b7053SJung-uk Kim
344e71b7053SJung-uk KimNew applications should use the SHA-2 (such as L<EVP_sha256(3)>) or the SHA-3
345e71b7053SJung-uk Kimdigest algorithms (such as L<EVP_sha3_512(3)>). The other digest algorithms
346e71b7053SJung-uk Kimare still in common use.
347e71b7053SJung-uk Kim
348e71b7053SJung-uk KimFor most applications the B<impl> parameter to EVP_DigestInit_ex() will be
349e71b7053SJung-uk Kimset to NULL to use the default digest implementation.
350e71b7053SJung-uk Kim
351e71b7053SJung-uk KimThe functions EVP_DigestInit(), EVP_DigestFinal() and EVP_MD_CTX_copy() are
352e71b7053SJung-uk Kimobsolete but are retained to maintain compatibility with existing code. New
353e71b7053SJung-uk Kimapplications should use EVP_DigestInit_ex(), EVP_DigestFinal_ex() and
354e71b7053SJung-uk KimEVP_MD_CTX_copy_ex() because they can efficiently reuse a digest context
355e71b7053SJung-uk Kiminstead of initializing and cleaning it up on each call and allow non default
356e71b7053SJung-uk Kimimplementations of digests to be specified.
357e71b7053SJung-uk Kim
358e71b7053SJung-uk KimIf digest contexts are not cleaned up after use,
359e71b7053SJung-uk Kimmemory leaks will occur.
360e71b7053SJung-uk Kim
361e71b7053SJung-uk KimEVP_MD_CTX_size(), EVP_MD_CTX_block_size(), EVP_MD_CTX_type(),
362e71b7053SJung-uk KimEVP_get_digestbynid() and EVP_get_digestbyobj() are defined as
363e71b7053SJung-uk Kimmacros.
364e71b7053SJung-uk Kim
365e71b7053SJung-uk KimEVP_MD_CTX_ctrl() sends commands to message digests for additional configuration
366e71b7053SJung-uk Kimor control.
367e71b7053SJung-uk Kim
368da327cd2SJung-uk Kim=head1 EXAMPLES
369e71b7053SJung-uk Kim
370e71b7053SJung-uk KimThis example digests the data "Test Message\n" and "Hello World\n", using the
371e71b7053SJung-uk Kimdigest name passed on the command line.
372e71b7053SJung-uk Kim
373e71b7053SJung-uk Kim #include <stdio.h>
374c9cf7b5cSJung-uk Kim #include <string.h>
375e71b7053SJung-uk Kim #include <openssl/evp.h>
376e71b7053SJung-uk Kim
377c9cf7b5cSJung-uk Kim int main(int argc, char *argv[])
378e71b7053SJung-uk Kim {
379e71b7053SJung-uk Kim     EVP_MD_CTX *mdctx;
380e71b7053SJung-uk Kim     const EVP_MD *md;
381e71b7053SJung-uk Kim     char mess1[] = "Test Message\n";
382e71b7053SJung-uk Kim     char mess2[] = "Hello World\n";
383e71b7053SJung-uk Kim     unsigned char md_value[EVP_MAX_MD_SIZE];
384c9cf7b5cSJung-uk Kim     unsigned int md_len, i;
385e71b7053SJung-uk Kim
386e71b7053SJung-uk Kim     if (argv[1] == NULL) {
387e71b7053SJung-uk Kim         printf("Usage: mdtest digestname\n");
388e71b7053SJung-uk Kim         exit(1);
389e71b7053SJung-uk Kim     }
390e71b7053SJung-uk Kim
391e71b7053SJung-uk Kim     md = EVP_get_digestbyname(argv[1]);
392e71b7053SJung-uk Kim     if (md == NULL) {
393e71b7053SJung-uk Kim         printf("Unknown message digest %s\n", argv[1]);
394e71b7053SJung-uk Kim         exit(1);
395e71b7053SJung-uk Kim     }
396e71b7053SJung-uk Kim
397e71b7053SJung-uk Kim     mdctx = EVP_MD_CTX_new();
398e71b7053SJung-uk Kim     EVP_DigestInit_ex(mdctx, md, NULL);
399e71b7053SJung-uk Kim     EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
400e71b7053SJung-uk Kim     EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
401e71b7053SJung-uk Kim     EVP_DigestFinal_ex(mdctx, md_value, &md_len);
402e71b7053SJung-uk Kim     EVP_MD_CTX_free(mdctx);
403e71b7053SJung-uk Kim
404e71b7053SJung-uk Kim     printf("Digest is: ");
405e71b7053SJung-uk Kim     for (i = 0; i < md_len; i++)
406e71b7053SJung-uk Kim         printf("%02x", md_value[i]);
407e71b7053SJung-uk Kim     printf("\n");
408e71b7053SJung-uk Kim
409e71b7053SJung-uk Kim     exit(0);
410e71b7053SJung-uk Kim }
411e71b7053SJung-uk Kim
412e71b7053SJung-uk Kim=head1 SEE ALSO
413e71b7053SJung-uk Kim
414*17f01e99SJung-uk KimL<EVP_MD_meth_new(3)>,
415e71b7053SJung-uk KimL<dgst(1)>,
416e71b7053SJung-uk KimL<evp(7)>
417e71b7053SJung-uk Kim
418e71b7053SJung-uk KimThe full list of digest algorithms are provided below.
419e71b7053SJung-uk Kim
420e71b7053SJung-uk KimL<EVP_blake2b512(3)>,
421e71b7053SJung-uk KimL<EVP_md2(3)>,
422e71b7053SJung-uk KimL<EVP_md4(3)>,
423e71b7053SJung-uk KimL<EVP_md5(3)>,
424e71b7053SJung-uk KimL<EVP_mdc2(3)>,
425e71b7053SJung-uk KimL<EVP_ripemd160(3)>,
426e71b7053SJung-uk KimL<EVP_sha1(3)>,
427e71b7053SJung-uk KimL<EVP_sha224(3)>,
428e71b7053SJung-uk KimL<EVP_sha3_224(3)>,
429e71b7053SJung-uk KimL<EVP_sm3(3)>,
430e71b7053SJung-uk KimL<EVP_whirlpool(3)>
431e71b7053SJung-uk Kim
432e71b7053SJung-uk Kim=head1 HISTORY
433e71b7053SJung-uk Kim
4346935a639SJung-uk KimThe EVP_MD_CTX_create() and EVP_MD_CTX_destroy() functions were renamed to
4356935a639SJung-uk KimEVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0, respectively.
436e71b7053SJung-uk Kim
437e71b7053SJung-uk KimThe link between digests and signing algorithms was fixed in OpenSSL 1.0 and
438e71b7053SJung-uk Kimlater, so now EVP_sha1() can be used with RSA and DSA.
439e71b7053SJung-uk Kim
4406935a639SJung-uk KimThe EVP_dss1() function was removed in OpenSSL 1.1.0.
441e71b7053SJung-uk Kim
4426935a639SJung-uk KimThe EVP_MD_CTX_set_pkey_ctx() function was added in 1.1.1.
443e71b7053SJung-uk Kim
444e71b7053SJung-uk Kim=head1 COPYRIGHT
445e71b7053SJung-uk Kim
446da327cd2SJung-uk KimCopyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
447e71b7053SJung-uk Kim
448e71b7053SJung-uk KimLicensed under the OpenSSL license (the "License").  You may not use
449e71b7053SJung-uk Kimthis file except in compliance with the License.  You can obtain a copy
450e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at
451e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>.
452e71b7053SJung-uk Kim
453e71b7053SJung-uk Kim=cut
454