xref: /freebsd/crypto/openssl/doc/man3/EVP_MD_meth_new.pod (revision a7148ab39c03abd4d1a84997c70bf96f15dd2a09)
1e71b7053SJung-uk Kim=pod
2e71b7053SJung-uk Kim
3e71b7053SJung-uk Kim=head1 NAME
4e71b7053SJung-uk Kim
5b077aed3SPierre ProncheryEVP_MD_meth_new, EVP_MD_meth_dup, EVP_MD_meth_free,
6b077aed3SPierre ProncheryEVP_MD_meth_set_input_blocksize,
7e71b7053SJung-uk KimEVP_MD_meth_set_result_size, EVP_MD_meth_set_app_datasize,
8e71b7053SJung-uk KimEVP_MD_meth_set_flags, EVP_MD_meth_set_init, EVP_MD_meth_set_update,
9e71b7053SJung-uk KimEVP_MD_meth_set_final, EVP_MD_meth_set_copy, EVP_MD_meth_set_cleanup,
10e71b7053SJung-uk KimEVP_MD_meth_set_ctrl, EVP_MD_meth_get_input_blocksize,
11e71b7053SJung-uk KimEVP_MD_meth_get_result_size, EVP_MD_meth_get_app_datasize,
12e71b7053SJung-uk KimEVP_MD_meth_get_flags, EVP_MD_meth_get_init, EVP_MD_meth_get_update,
13e71b7053SJung-uk KimEVP_MD_meth_get_final, EVP_MD_meth_get_copy, EVP_MD_meth_get_cleanup,
14e71b7053SJung-uk KimEVP_MD_meth_get_ctrl
15b077aed3SPierre Pronchery- Routines to build up legacy EVP_MD methods
16e71b7053SJung-uk Kim
17e71b7053SJung-uk Kim=head1 SYNOPSIS
18e71b7053SJung-uk Kim
19e71b7053SJung-uk Kim #include <openssl/evp.h>
20e71b7053SJung-uk Kim
21b077aed3SPierre ProncheryThe following functions have been deprecated since OpenSSL 3.0, and can be
22b077aed3SPierre Proncheryhidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value,
23b077aed3SPierre Proncherysee L<openssl_user_macros(7)>:
24b077aed3SPierre Pronchery
25e71b7053SJung-uk Kim EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type);
26e71b7053SJung-uk Kim void EVP_MD_meth_free(EVP_MD *md);
27e71b7053SJung-uk Kim EVP_MD *EVP_MD_meth_dup(const EVP_MD *md);
28e71b7053SJung-uk Kim
29e71b7053SJung-uk Kim int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize);
30e71b7053SJung-uk Kim int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize);
31e71b7053SJung-uk Kim int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize);
32e71b7053SJung-uk Kim int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags);
33e71b7053SJung-uk Kim int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx));
34e71b7053SJung-uk Kim int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx,
35e71b7053SJung-uk Kim                                                      const void *data,
36e71b7053SJung-uk Kim                                                      size_t count));
37e71b7053SJung-uk Kim int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx,
38e71b7053SJung-uk Kim                                                    unsigned char *md));
39e71b7053SJung-uk Kim int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to,
40e71b7053SJung-uk Kim                                                  const EVP_MD_CTX *from));
41e71b7053SJung-uk Kim int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx));
42e71b7053SJung-uk Kim int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd,
43e71b7053SJung-uk Kim                                                  int p1, void *p2));
44e71b7053SJung-uk Kim
45e71b7053SJung-uk Kim int EVP_MD_meth_get_input_blocksize(const EVP_MD *md);
46e71b7053SJung-uk Kim int EVP_MD_meth_get_result_size(const EVP_MD *md);
47e71b7053SJung-uk Kim int EVP_MD_meth_get_app_datasize(const EVP_MD *md);
48e71b7053SJung-uk Kim unsigned long EVP_MD_meth_get_flags(const EVP_MD *md);
49e71b7053SJung-uk Kim int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx);
50e71b7053SJung-uk Kim int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx,
51e71b7053SJung-uk Kim                                                 const void *data,
52e71b7053SJung-uk Kim                                                 size_t count);
53e71b7053SJung-uk Kim int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx,
54e71b7053SJung-uk Kim                                                unsigned char *md);
55e71b7053SJung-uk Kim int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to,
56e71b7053SJung-uk Kim                                               const EVP_MD_CTX *from);
57e71b7053SJung-uk Kim int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx);
58e71b7053SJung-uk Kim int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd,
59e71b7053SJung-uk Kim                                               int p1, void *p2);
60e71b7053SJung-uk Kim
61e71b7053SJung-uk Kim=head1 DESCRIPTION
62e71b7053SJung-uk Kim
63b077aed3SPierre ProncheryAll of the functions described on this page are deprecated.
64b077aed3SPierre ProncheryApplications should instead use the OSSL_PROVIDER APIs.
65b077aed3SPierre Pronchery
66e71b7053SJung-uk KimThe B<EVP_MD> type is a structure for digest method implementation.
67e71b7053SJung-uk KimIt can also have associated public/private key signing and verifying
68e71b7053SJung-uk Kimroutines.
69e71b7053SJung-uk Kim
70e71b7053SJung-uk KimEVP_MD_meth_new() creates a new B<EVP_MD> structure.
71b077aed3SPierre ProncheryThese B<EVP_MD> structures are reference counted.
72e71b7053SJung-uk Kim
73e71b7053SJung-uk KimEVP_MD_meth_dup() creates a copy of B<md>.
74e71b7053SJung-uk Kim
75b077aed3SPierre ProncheryEVP_MD_meth_free() decrements the reference count for the B<EVP_MD> structure.
76b077aed3SPierre ProncheryIf the reference count drops to 0 then the structure is freed.
77*a7148ab3SEnji CooperIf the argument is NULL, nothing is done.
78e71b7053SJung-uk Kim
79e71b7053SJung-uk KimEVP_MD_meth_set_input_blocksize() sets the internal input block size
80e71b7053SJung-uk Kimfor the method B<md> to B<blocksize> bytes.
81e71b7053SJung-uk Kim
82e71b7053SJung-uk KimEVP_MD_meth_set_result_size() sets the size of the result that the
83e71b7053SJung-uk Kimdigest method in B<md> is expected to produce to B<resultsize> bytes.
84e71b7053SJung-uk Kim
85e71b7053SJung-uk KimThe digest method may have its own private data, which OpenSSL will
86e71b7053SJung-uk Kimallocate for it.  EVP_MD_meth_set_app_datasize() should be used to
87e71b7053SJung-uk Kimset the size for it to B<datasize>.
88e71b7053SJung-uk Kim
89e71b7053SJung-uk KimEVP_MD_meth_set_flags() sets the flags to describe optional
90e71b7053SJung-uk Kimbehaviours in the particular B<md>.  Several flags can be or'd
91e71b7053SJung-uk Kimtogether.  The available flags are:
92e71b7053SJung-uk Kim
93e71b7053SJung-uk Kim=over 4
94e71b7053SJung-uk Kim
95e71b7053SJung-uk Kim=item EVP_MD_FLAG_ONESHOT
96e71b7053SJung-uk Kim
9717f01e99SJung-uk KimThis digest method can only handle one block of input.
9817f01e99SJung-uk Kim
9917f01e99SJung-uk Kim=item EVP_MD_FLAG_XOF
10017f01e99SJung-uk Kim
10117f01e99SJung-uk KimThis digest method is an extensible-output function (XOF) and supports
10217f01e99SJung-uk Kimthe B<EVP_MD_CTRL_XOF_LEN> control.
103e71b7053SJung-uk Kim
104e71b7053SJung-uk Kim=item EVP_MD_FLAG_DIGALGID_NULL
105e71b7053SJung-uk Kim
106e71b7053SJung-uk KimWhen setting up a DigestAlgorithmIdentifier, this flag will have the
107e71b7053SJung-uk Kimparameter set to NULL by default.  Use this for PKCS#1.  I<Note: if
108e71b7053SJung-uk Kimcombined with EVP_MD_FLAG_DIGALGID_ABSENT, the latter will override.>
109e71b7053SJung-uk Kim
110e71b7053SJung-uk Kim=item EVP_MD_FLAG_DIGALGID_ABSENT
111e71b7053SJung-uk Kim
112e71b7053SJung-uk KimWhen setting up a DigestAlgorithmIdentifier, this flag will have the
113e71b7053SJung-uk Kimparameter be left absent by default.  I<Note: if combined with
114e71b7053SJung-uk KimEVP_MD_FLAG_DIGALGID_NULL, the latter will be overridden.>
115e71b7053SJung-uk Kim
116e71b7053SJung-uk Kim=item EVP_MD_FLAG_DIGALGID_CUSTOM
117e71b7053SJung-uk Kim
118e71b7053SJung-uk KimCustom DigestAlgorithmIdentifier handling via ctrl, with
119e71b7053SJung-uk KimB<EVP_MD_FLAG_DIGALGID_ABSENT> as default.  I<Note: if combined with
120e71b7053SJung-uk KimEVP_MD_FLAG_DIGALGID_NULL, the latter will be overridden.>
121e71b7053SJung-uk KimCurrently unused.
122e71b7053SJung-uk Kim
12317f01e99SJung-uk Kim=item EVP_MD_FLAG_FIPS
12417f01e99SJung-uk Kim
12517f01e99SJung-uk KimThis digest method is suitable for use in FIPS mode.
12617f01e99SJung-uk KimCurrently unused.
12717f01e99SJung-uk Kim
128e71b7053SJung-uk Kim=back
129e71b7053SJung-uk Kim
130e71b7053SJung-uk KimEVP_MD_meth_set_init() sets the digest init function for B<md>.
13117f01e99SJung-uk KimThe digest init function is called by EVP_Digest(), EVP_DigestInit(),
132e71b7053SJung-uk KimEVP_DigestInit_ex(), EVP_SignInit, EVP_SignInit_ex(), EVP_VerifyInit()
133e71b7053SJung-uk Kimand EVP_VerifyInit_ex().
134e71b7053SJung-uk Kim
135e71b7053SJung-uk KimEVP_MD_meth_set_update() sets the digest update function for B<md>.
13617f01e99SJung-uk KimThe digest update function is called by EVP_Digest(), EVP_DigestUpdate() and
137e71b7053SJung-uk KimEVP_SignUpdate().
138e71b7053SJung-uk Kim
139e71b7053SJung-uk KimEVP_MD_meth_set_final() sets the digest final function for B<md>.
14017f01e99SJung-uk KimThe digest final function is called by EVP_Digest(), EVP_DigestFinal(),
141e71b7053SJung-uk KimEVP_DigestFinal_ex(), EVP_SignFinal() and EVP_VerifyFinal().
142e71b7053SJung-uk Kim
143e71b7053SJung-uk KimEVP_MD_meth_set_copy() sets the function for B<md> to do extra
144e71b7053SJung-uk Kimcomputations after the method's private data structure has been copied
145e71b7053SJung-uk Kimfrom one B<EVP_MD_CTX> to another.  If all that's needed is to copy
146e71b7053SJung-uk Kimthe data, there is no need for this copy function.
147e71b7053SJung-uk KimNote that the copy function is passed two B<EVP_MD_CTX *>, the private
148b077aed3SPierre Proncherydata structure is then available with EVP_MD_CTX_get0_md_data().
149e71b7053SJung-uk KimThis copy function is called by EVP_MD_CTX_copy() and
150e71b7053SJung-uk KimEVP_MD_CTX_copy_ex().
151e71b7053SJung-uk Kim
152e71b7053SJung-uk KimEVP_MD_meth_set_cleanup() sets the function for B<md> to do extra
153e71b7053SJung-uk Kimcleanup before the method's private data structure is cleaned out and
154e71b7053SJung-uk Kimfreed.
155e71b7053SJung-uk KimNote that the cleanup function is passed a B<EVP_MD_CTX *>, the
156b077aed3SPierre Proncheryprivate data structure is then available with EVP_MD_CTX_get0_md_data().
157e71b7053SJung-uk KimThis cleanup function is called by EVP_MD_CTX_reset() and
158e71b7053SJung-uk KimEVP_MD_CTX_free().
159e71b7053SJung-uk Kim
160e71b7053SJung-uk KimEVP_MD_meth_set_ctrl() sets the control function for B<md>.
16117f01e99SJung-uk KimSee L<EVP_MD_CTX_ctrl(3)> for the available controls.
162e71b7053SJung-uk Kim
163e71b7053SJung-uk KimEVP_MD_meth_get_input_blocksize(), EVP_MD_meth_get_result_size(),
164e71b7053SJung-uk KimEVP_MD_meth_get_app_datasize(), EVP_MD_meth_get_flags(),
165e71b7053SJung-uk KimEVP_MD_meth_get_init(), EVP_MD_meth_get_update(),
166e71b7053SJung-uk KimEVP_MD_meth_get_final(), EVP_MD_meth_get_copy(),
167e71b7053SJung-uk KimEVP_MD_meth_get_cleanup() and EVP_MD_meth_get_ctrl() are all used
168e71b7053SJung-uk Kimto retrieve the method data given with the EVP_MD_meth_set_*()
169e71b7053SJung-uk Kimfunctions above.
170e71b7053SJung-uk Kim
171e71b7053SJung-uk Kim=head1 RETURN VALUES
172e71b7053SJung-uk Kim
173e71b7053SJung-uk KimEVP_MD_meth_new() and EVP_MD_meth_dup() return a pointer to a newly
174e71b7053SJung-uk Kimcreated B<EVP_MD>, or NULL on failure.
175e71b7053SJung-uk KimAll EVP_MD_meth_set_*() functions return 1.
176e71b7053SJung-uk KimEVP_MD_get_input_blocksize(), EVP_MD_meth_get_result_size(),
177e71b7053SJung-uk KimEVP_MD_meth_get_app_datasize() and EVP_MD_meth_get_flags() return the
178e71b7053SJung-uk Kimindicated sizes or flags.
179e71b7053SJung-uk KimAll other EVP_CIPHER_meth_get_*() functions return pointers to their
180e71b7053SJung-uk Kimrespective B<md> function.
181e71b7053SJung-uk Kim
182e71b7053SJung-uk Kim=head1 SEE ALSO
183e71b7053SJung-uk Kim
184e71b7053SJung-uk KimL<EVP_DigestInit(3)>, L<EVP_SignInit(3)>, L<EVP_VerifyInit(3)>
185e71b7053SJung-uk Kim
186e71b7053SJung-uk Kim=head1 HISTORY
187e71b7053SJung-uk Kim
188b077aed3SPierre ProncheryAll of these functions were deprecated in OpenSSL 3.0.
189b077aed3SPierre Pronchery
190e71b7053SJung-uk KimThe B<EVP_MD> structure was openly available in OpenSSL before version
191b077aed3SPierre Pronchery1.1.
192b077aed3SPierre ProncheryThe functions described here were added in OpenSSL 1.1.
193b077aed3SPierre ProncheryThe B<EVP_MD> structure created with these functions became reference
194b077aed3SPierre Proncherycounted in OpenSSL 3.0.
195e71b7053SJung-uk Kim
196e71b7053SJung-uk Kim=head1 COPYRIGHT
197e71b7053SJung-uk Kim
198*a7148ab3SEnji CooperCopyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved.
199e71b7053SJung-uk Kim
200b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
201e71b7053SJung-uk Kimthis file except in compliance with the License.  You can obtain a copy
202e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at
203e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>.
204e71b7053SJung-uk Kim
205e71b7053SJung-uk Kim=cut
206