]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/EVP_MAC.pod
Pass library context and property query into private key decoders
[thirdparty/openssl.git] / doc / man3 / EVP_MAC.pod
CommitLineData
567db2c1
RL
1=pod
2
3=head1 NAME
4
03888233
RL
5EVP_MAC, EVP_MAC_fetch, EVP_MAC_up_ref, EVP_MAC_free, EVP_MAC_is_a,
6EVP_MAC_number, EVP_MAC_name, EVP_MAC_names_do_all, EVP_MAC_description,
7dd0f299 7EVP_MAC_provider, EVP_MAC_get_params, EVP_MAC_gettable_params,
865adf97
MC
8EVP_MAC_CTX, EVP_MAC_CTX_new, EVP_MAC_CTX_free, EVP_MAC_CTX_dup,
9EVP_MAC_CTX_mac, EVP_MAC_CTX_get_params, EVP_MAC_CTX_set_params,
edc9ce8e 10EVP_MAC_CTX_get_mac_size, EVP_MAC_CTX_get_block_size, EVP_Q_mac,
0a8a6afd
DDO
11EVP_MAC_init, EVP_MAC_update, EVP_MAC_final, EVP_MAC_finalXOF,
12EVP_MAC_gettable_ctx_params, EVP_MAC_settable_ctx_params,
8dd233bb 13EVP_MAC_CTX_gettable_params, EVP_MAC_CTX_settable_params,
251e610c 14EVP_MAC_do_all_provided - EVP MAC routines
567db2c1
RL
15
16=head1 SYNOPSIS
17
18 #include <openssl/evp.h>
19
20 typedef struct evp_mac_st EVP_MAC;
21 typedef struct evp_mac_ctx_st EVP_MAC_CTX;
22
b4250010 23 EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
e74bd290
RL
24 const char *properties);
25 int EVP_MAC_up_ref(EVP_MAC *mac);
26 void EVP_MAC_free(EVP_MAC *mac);
7cfa1717 27 int EVP_MAC_is_a(const EVP_MAC *mac, const char *name);
506cb0f6 28 int EVP_MAC_number(const EVP_MAC *mac);
c9452d74 29 const char *EVP_MAC_name(const EVP_MAC *mac);
d84f5515
MC
30 int EVP_MAC_names_do_all(const EVP_MAC *mac,
31 void (*fn)(const char *name, void *data),
32 void *data);
03888233 33 const char *EVP_MAC_description(const EVP_MAC *mac);
7dd0f299 34 const OSSL_PROVIDER *EVP_MAC_provider(const EVP_MAC *mac);
e74bd290
RL
35 int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]);
36
865adf97
MC
37 EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac);
38 void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx);
39 EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src);
40 EVP_MAC *EVP_MAC_CTX_mac(EVP_MAC_CTX *ctx);
41 int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]);
42 int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]);
e74bd290 43
90a2576b 44 size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx);
edc9ce8e 45 size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx);
0a8a6afd
DDO
46 unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq,
47 const char *subalg, const OSSL_PARAM *params,
48 const void *key, size_t keylen,
49 const unsigned char *data, size_t datalen,
50 unsigned char *out, size_t outsize, unsigned int *outlen);
afa44486
P
51 int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen,
52 const OSSL_PARAM params[]);
567db2c1 53 int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);
e74bd290
RL
54 int EVP_MAC_final(EVP_MAC_CTX *ctx,
55 unsigned char *out, size_t *outl, size_t outsize);
a59c6972 56 int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize);
e74bd290
RL
57
58 const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac);
41f7ecf3
P
59 const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac);
60 const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac);
8dd233bb
P
61 const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx);
62 const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx);
567db2c1 63
b4250010 64 void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx,
251e610c
RL
65 void (*fn)(EVP_MAC *mac, void *arg),
66 void *arg);
d1cafb08 67
567db2c1
RL
68=head1 DESCRIPTION
69
70These types and functions help the application to calculate MACs of
71different types and with different underlying algorithms if there are
72any.
73
74MACs are a bit complex insofar that some of them use other algorithms
75for actual computation. HMAC uses a digest, and CMAC uses a cipher.
76Therefore, there are sometimes two contexts to keep track of, one for
77the MAC algorithm itself and one for the underlying computation
78algorithm if there is one.
79
80To make things less ambiguous, this manual talks about a "context" or
81"MAC context", which is to denote the MAC level context, and about a
82"underlying context", or "computation context", which is to denote the
83context for the underlying computation algorithm if there is one.
84
85=head2 Types
86
87B<EVP_MAC> is a type that holds the implementation of a MAC.
88
89B<EVP_MAC_CTX> is a context type that holds internal MAC information
90as well as a reference to a computation context, for those MACs that
91rely on an underlying computation algorithm.
92
e74bd290
RL
93=head2 Algorithm implementation fetching
94
95EVP_MAC_fetch() fetches an implementation of a MAC I<algorithm>, given
96a library context I<libctx> and a set of I<properties>.
906bced1 97See L<crypto(7)/ALGORITHM FETCHING> for further information.
e74bd290 98
b8086652
SL
99See L<OSSL_PROVIDER-default(7)/Message Authentication Code (MAC)> for the list
100of algorithms supported by the default provider.
101
e74bd290
RL
102The returned value must eventually be freed with
103L<EVP_MAC_free(3)>.
104
105EVP_MAC_up_ref() increments the reference count of an already fetched
106MAC.
107
108EVP_MAC_free() frees a fetched algorithm.
109NULL is a valid parameter, for which this function is a no-op.
110
567db2c1
RL
111=head2 Context manipulation functions
112
865adf97 113EVP_MAC_CTX_new() creates a new context for the MAC type I<mac>.
567db2c1
RL
114The created context can then be used with most other functions
115described here.
116
865adf97 117EVP_MAC_CTX_free() frees the contents of the context, including an
567db2c1 118underlying context if there is one, as well as the context itself.
e74bd290 119NULL is a valid parameter, for which this function is a no-op.
567db2c1 120
865adf97 121EVP_MAC_CTX_dup() duplicates the I<src> context and returns a newly allocated
be5fc053 122context.
567db2c1 123
865adf97 124EVP_MAC_CTX_mac() returns the B<EVP_MAC> associated with the context
e74bd290 125I<ctx>.
567db2c1
RL
126
127=head2 Computing functions
128
0a8a6afd
DDO
129EVP_Q_mac() computes the message authentication code
130of I<data> with length I<datalen>
131using the MAC algorithm I<name> and the key I<key> with length I<keylen>.
132The MAC algorithm is fetched using any given I<libctx> and property query
133string I<propq>. It takes parameters I<subalg> and further I<params>,
134both of which may be NULL if not needed.
135If I<out> is not NULL, it places the result in the memory pointed at by I<out>,
136but only if I<outsize> is sufficient (otherwise no computation is made).
137If I<out> is NULL, it allocates and uses a buffer of suitable length,
138which will be returned on success and must be freed by the caller.
139In either case, also on error,
140it assigns the number of bytes written to I<*outlen> unless I<outlen> is NULL.
141
c0e724fc 142EVP_MAC_init() sets up the underlying context I<ctx> with information given
afa44486
P
143via the I<key> and I<params> arguments. The MAC I<key> has a length of
144I<keylen> and the parameters in I<params> are processed before setting
c0e724fc 145the key. If I<key> is NULL, the key must be set via I<params> either
afa44486 146as part of this call or separately using EVP_MAC_CTX_set_params().
c0e724fc
DDO
147Providing non-NULL I<params> to this function is equivalent to calling
148EVP_MAC_CTX_set_params() with those I<params> for the same I<ctx> beforehand.
149
150EVP_MAC_init() should be called before EVP_MAC_update() and EVP_MAC_final().
567db2c1 151
e74bd290 152EVP_MAC_update() adds I<datalen> bytes from I<data> to the MAC input.
567db2c1
RL
153
154EVP_MAC_final() does the final computation and stores the result in
e74bd290
RL
155the memory pointed at by I<out> of size I<outsize>, and sets the number
156of bytes written in I<*outl> at.
ee2161e8 157If I<out> is NULL or I<outsize> is too small, then no computation
e74bd290 158is made.
567db2c1 159To figure out what the output length will be and allocate space for it
ee2161e8 160dynamically, simply call with I<out> being NULL and I<outl>
567db2c1 161pointing at a valid location, then allocate space and make a second
e74bd290
RL
162call with I<out> pointing at the allocated space.
163
a59c6972
P
164EVP_MAC_finalXOF() does the final computation for an XOF based MAC and stores
165the result in the memory pointed at by I<out> of size I<outsize>.
166
e74bd290
RL
167EVP_MAC_get_params() retrieves details about the implementation
168I<mac>.
169The set of parameters given with I<params> determine exactly what
170parameters should be retrieved.
171Note that a parameter that is unknown in the underlying context is
172simply ignored.
173
865adf97 174EVP_MAC_CTX_get_params() retrieves chosen parameters, given the
e74bd290
RL
175context I<ctx> and its underlying context.
176The set of parameters given with I<params> determine exactly what
177parameters should be retrieved.
178Note that a parameter that is unknown in the underlying context is
179simply ignored.
180
865adf97 181EVP_MAC_CTX_set_params() passes chosen parameters to the underlying
e74bd290
RL
182context, given a context I<ctx>.
183The set of parameters given with I<params> determine exactly what
184parameters are passed down.
0a8a6afd 185If I<params> are NULL, the unterlying context should do nothing and return 1.
e74bd290
RL
186Note that a parameter that is unknown in the underlying context is
187simply ignored.
188Also, what happens when a needed parameter isn't passed down is
189defined by the implementation.
190
8dd233bb
P
191EVP_MAC_gettable_params() returns an B<OSSL_PARAM> array that describes
192the retrievable and settable parameters. EVP_MAC_gettable_params()
193returns parameters that can be used with EVP_MAC_get_params().
194See L<OSSL_PARAM(3)> for the use of B<OSSL_PARAM> as a parameter descriptor.
195
196EVP_MAC_gettable_ctx_params() and EVP_MAC_CTX_gettable_params()
197return constant B<OSSL_PARAM> arrays that describe the retrievable
198parameters that can be used with EVP_MAC_CTX_get_params().
199EVP_MAC_gettable_ctx_params() returns the parameters that can be retrieved
200from the algorithm, whereas EVP_MAC_CTX_gettable_params() returns
201the parameters that can be retrieved in the context's current state.
202See L<OSSL_PARAM(3)> for the use of B<OSSL_PARAM> as a parameter descriptor.
203
204EVP_MAC_settable_ctx_params() and EVP_MAC_CTX_settable_params() return
205constant B<OSSL_PARAM> arrays that describe the settable parameters that
206can be used with EVP_MAC_CTX_set_params(). EVP_MAC_settable_ctx_params()
207returns the parameters that can be retrieved from the algorithm,
208whereas EVP_MAC_CTX_settable_params() returns the parameters that can
209be retrieved in the context's current state. See L<OSSL_PARAM(3)>
210for the use of B<OSSL_PARAM> as a parameter descriptor.
567db2c1
RL
211
212=head2 Information functions
213
90a2576b 214EVP_MAC_CTX_get_mac_size() returns the MAC output size for the given context.
567db2c1 215
edc9ce8e
P
216EVP_MAC_CTX_get_block_size() returns the MAC block size for the given context.
217Not all MAC algorithms support this.
218
7cfa1717
RL
219EVP_MAC_is_a() checks if the given I<mac> is an implementation of an
220algorithm that's identifiable with I<name>.
221
7dd0f299
RL
222EVP_MAC_provider() returns the provider that holds the implementation
223of the given I<mac>.
224
251e610c 225EVP_MAC_do_all_provided() traverses all MAC implemented by all activated
d1cafb08
RL
226providers in the given library context I<libctx>, and for each of the
227implementations, calls the given function I<fn> with the implementation method
228and the given I<arg> as argument.
229
506cb0f6
RL
230EVP_MAC_number() returns the internal dynamic number assigned to
231I<mac>.
232
c9452d74
P
233EVP_MAC_name() return the name of the given MAC. For fetched MACs
234with multiple names, only one of them is returned; it's
235recommended to use EVP_MAC_names_do_all() instead.
236
f651c727
RL
237EVP_MAC_names_do_all() traverses all names for I<mac>, and calls
238I<fn> with each name and I<data>.
239
03888233
RL
240EVP_MAC_description() returns a description of the I<mac>, meant for display
241and human consumption. The description is at the discretion of the mac
242implementation.
243
b1cabee8 244=head1 PARAMETERS
567db2c1 245
e592dbde
RL
246Parameters are identified by name as strings, and have an expected
247data type and maximum size.
248OpenSSL has a set of macros for parameter names it expects to see in
249its own MAC implementations.
250Here, we show all three, the OpenSSL macro for the parameter name, the
251name in string form, and a type description.
252
e74bd290 253The standard parameter names are:
567db2c1
RL
254
255=over 4
256
0c452a51 257=item "key" (B<OSSL_MAC_PARAM_KEY>) <octet string>
567db2c1 258
e74bd290 259Its value is the MAC key as an array of bytes.
567db2c1
RL
260
261For MACs that use an underlying computation algorithm, the algorithm
e74bd290 262must be set first, see parameter names "algorithm" below.
afc580b9 263
0c452a51 264=item "iv" (B<OSSL_MAC_PARAM_IV>) <octet string>
afc580b9 265
bbf5ccfd 266Some MAC implementations (GMAC) require an IV, this parameter sets the IV.
6e624a64 267
0c452a51 268=item "custom" (B<OSSL_MAC_PARAM_CUSTOM>) <octet string>
6e624a64 269
13b3cd7b 270Some MAC implementations (KMAC, BLAKE2) accept a Customization String,
e74bd290
RL
271this parameter sets the Customization String. The default value is the
272empty string.
6e624a64 273
0c452a51 274=item "salt" (B<OSSL_MAC_PARAM_SALT>) <octet string>
13b3cd7b
AS
275
276This option is used by BLAKE2 MAC.
277
0c452a51 278=item "xof" (B<OSSL_MAC_PARAM_XOF>) <integer>
6e624a64 279
e74bd290 280It's a simple flag, the value 0 or 1 are expected.
6e624a64
SL
281
282This option is used by KMAC.
283
36978c19 284=item "digest-noinit" (B<OSSL_MAC_PARAM_DIGEST_NOINIT>) <integer>
567db2c1 285
36978c19
SL
286A simple flag to set the MAC digest to not initialise the
287implementation specific data. The value 0 or 1 is expected.
288
289This option is used by HMAC.
290
291=item "digest-oneshot" (B<OSSL_MAC_PARAM_DIGEST_ONESHOT>) <integer>
292
293A simple flag to set the MAC digest to be a oneshot operation.
294The value 0 or 1 is expected.
295
296This option is used by HMAC.
567db2c1 297
0c452a51 298=item "properties" (B<OSSL_MAC_PARAM_PROPERTIES>) <UTF8 string>
567db2c1 299
0c452a51 300=item "digest" (B<OSSL_MAC_PARAM_DIGEST>) <UTF8 string>
567db2c1 301
0c452a51 302=item "cipher" (B<OSSL_MAC_PARAM_CIPHER>) <UTF8 string>
e74bd290 303
f3b8d77f 304For MAC implementations that use an underlying computation cipher or
9bd9c440 305digest, these parameters set what the algorithm should be.
567db2c1 306
9bd9c440 307The value is always the name of the intended algorithm,
f3b8d77f 308or the properties.
567db2c1 309
e74bd290
RL
310Note that not all algorithms may support all digests.
311HMAC does not support variable output length digests such as SHAKE128
312or SHAKE256.
567db2c1 313
0c452a51 314=item "size" (B<OSSL_MAC_PARAM_SIZE>) <unsigned integer>
567db2c1
RL
315
316For MAC implementations that support it, set the output size that
317EVP_MAC_final() should produce.
1aa01009
P
318The allowed sizes vary between MAC implementations, but must never exceed
319what can be given with a B<size_t>.
567db2c1 320
820d87bc
MC
321=item "tls-data-size" (B<OSSL_MAC_PARAM_TLS_DATA_SIZE>) <unsigned integer>
322
323This parameter is only supported by HMAC. If set then special handling is
324activated for calculating the MAC of a received mac-then-encrypt TLS record
325where variable length record padding has been used (as in the case of CBC mode
326ciphersuites). The value represents the total length of the record that is
327having the MAC calculated including the received MAC and the record padding.
328
329When used EVP_MAC_update must be called precisely twice. The first time with
330the 13 bytes of TLS "header" data, and the second time with the entire record
331including the MAC itself and any padding. The entire record length must equal
332the value passed in the "tls-data-size" parameter. The length passed in the
333B<datalen> parameter to EVP_MAC_update() should be equal to the length of the
334record after the MAC and any padding has been removed.
335
567db2c1
RL
336=back
337
e74bd290 338All these parameters should be used before the calls to any of
567db2c1
RL
339EVP_MAC_init(), EVP_MAC_update() and EVP_MAC_final() for a full
340computation.
341Anything else may give undefined results.
342
10b63e97
P
343=head1 NOTES
344
345The MAC life-cycle is described in L<life_cycle-mac(7)>. In the future,
346the transitions described there will be enforced. When this is done, it will
347not be considered a breaking change to the API.
348
bbf5ccfd
P
349The usage of the parameter names "custom", "iv" and "salt" correspond to
350the names used in the standard where the algorithm was defined.
10b63e97 351
e74bd290 352=head1 RETURN VALUES
567db2c1 353
0a8a6afd 354EVP_MAC_fetch() returns a pointer to a newly fetched B<EVP_MAC>, or
e74bd290 355NULL if allocation failed.
567db2c1 356
e74bd290
RL
357EVP_MAC_up_ref() returns 1 on success, 0 on error.
358
d84f5515
MC
359EVP_MAC_names_do_all() returns 1 if the callback was called for all names. A
360return value of 0 means that the callback was not called for any names.
361
e74bd290
RL
362EVP_MAC_free() returns nothing at all.
363
7cfa1717
RL
364EVP_MAC_is_a() returns 1 if the given method can be identified with
365the given name, otherwise 0.
366
c9452d74
P
367EVP_MAC_name() returns a name of the MAC, or NULL on error.
368
7dd0f299
RL
369EVP_MAC_provider() returns a pointer to the provider for the MAC, or
370NULL on error.
371
865adf97 372EVP_MAC_CTX_new() and EVP_MAC_CTX_dup() return a pointer to a newly
e74bd290 373created EVP_MAC_CTX, or NULL if allocation failed.
567db2c1 374
865adf97 375EVP_MAC_CTX_free() returns nothing at all.
567db2c1 376
865adf97 377EVP_MAC_CTX_get_params() and EVP_MAC_CTX_set_params() return 1 on
e74bd290 378success, 0 on error.
567db2c1 379
0a8a6afd
DDO
380EVP_Q_mac() returns a pointer to the computed MAC value, or NULL on error.
381
382EVP_MAC_init(), EVP_MAC_update(), EVP_MAC_final(), and EVP_MAC_finalXOF()
a59c6972 383return 1 on success, 0 on error.
567db2c1 384
edc9ce8e
P
385EVP_MAC_CTX_get_mac_size() returns the expected output size, or 0 if it isn't
386set. If it isn't set, a call to EVP_MAC_init() will set it.
387
388EVP_MAC_CTX_get_block_size() returns the block size, or 0 if it isn't set.
389If it isn't set, a call to EVP_MAC_init() will set it.
567db2c1 390
251e610c 391EVP_MAC_do_all_provided() returns nothing at all.
567db2c1 392
cda77422 393=head1 EXAMPLES
567db2c1
RL
394
395 #include <stdlib.h>
396 #include <stdio.h>
397 #include <string.h>
398 #include <stdarg.h>
399 #include <unistd.h>
400
401 #include <openssl/evp.h>
402 #include <openssl/err.h>
e74bd290 403 #include <openssl/params.h>
567db2c1
RL
404
405 int main() {
e74bd290
RL
406 EVP_MAC *mac = EVP_MAC_fetch(NULL, getenv("MY_MAC"), NULL);
407 const char *cipher = getenv("MY_MAC_CIPHER");
408 const char *digest = getenv("MY_MAC_DIGEST");
567db2c1
RL
409 const char *key = getenv("MY_KEY");
410 EVP_MAC_CTX *ctx = NULL;
411
412 unsigned char buf[4096];
d5b170a2 413 size_t read_l;
567db2c1
RL
414 size_t final_l;
415
416 size_t i;
417
afa44486 418 OSSL_PARAM params[3];
e74bd290
RL
419 size_t params_n = 0;
420
421 if (cipher != NULL)
422 params[params_n++] =
d5b170a2 423 OSSL_PARAM_construct_utf8_string("cipher", (char*)cipher, 0);
e74bd290
RL
424 if (digest != NULL)
425 params[params_n++] =
d5b170a2 426 OSSL_PARAM_construct_utf8_string("digest", (char*)digest, 0);
e74bd290
RL
427 params[params_n] = OSSL_PARAM_construct_end();
428
567db2c1
RL
429 if (mac == NULL
430 || key == NULL
865adf97 431 || (ctx = EVP_MAC_CTX_new(mac)) == NULL
afa44486
P
432 || !EVP_MAC_init(ctx, (const unsigned char *)key, strlen(key),
433 params))
567db2c1
RL
434 goto err;
435
38e6c490 436 while ( (read_l = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
567db2c1
RL
437 if (!EVP_MAC_update(ctx, buf, read_l))
438 goto err;
439 }
440
d5b170a2 441 if (!EVP_MAC_final(ctx, buf, &final_l, sizeof(buf)))
567db2c1
RL
442 goto err;
443
444 printf("Result: ");
445 for (i = 0; i < final_l; i++)
446 printf("%02X", buf[i]);
447 printf("\n");
448
865adf97 449 EVP_MAC_CTX_free(ctx);
e74bd290 450 EVP_MAC_free(mac);
567db2c1
RL
451 exit(0);
452
453 err:
865adf97 454 EVP_MAC_CTX_free(ctx);
e74bd290 455 EVP_MAC_free(mac);
567db2c1
RL
456 fprintf(stderr, "Something went wrong\n");
457 ERR_print_errors_fp(stderr);
458 exit (1);
459 }
460
461A run of this program, called with correct environment variables, can
462look like this:
463
464 $ MY_MAC=cmac MY_KEY=secret0123456789 MY_MAC_CIPHER=aes-128-cbc \
465 LD_LIBRARY_PATH=. ./foo < foo.c
38e6c490 466 Result: C5C06683CD9DDEF904D754505C560A4E
567db2c1
RL
467
468(in this example, that program was stored in F<foo.c> and compiled to
469F<./foo>)
470
471=head1 SEE ALSO
472
e74bd290
RL
473L<property(7)>
474L<OSSL_PARAM(3)>,
d7cea0b8
RS
475L<EVP_MAC-BLAKE2(7)>,
476L<EVP_MAC-CMAC(7)>,
477L<EVP_MAC-GMAC(7)>,
478L<EVP_MAC-HMAC(7)>,
479L<EVP_MAC-KMAC(7)>,
480L<EVP_MAC-Siphash(7)>,
10b63e97
P
481L<EVP_MAC-Poly1305(7)>,
482L<provider-mac(7)>,
483L<life_cycle-mac(7)>
567db2c1 484
be5fc053
KR
485=head1 HISTORY
486
4674aaf4 487These functions were added in OpenSSL 3.0.
be5fc053 488
567db2c1
RL
489=head1 COPYRIGHT
490
a28d06f3 491Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
567db2c1 492
4746f25a 493Licensed under the Apache License 2.0 (the "License"). You may not use
567db2c1
RL
494this file except in compliance with the License. You can obtain a copy
495in the file LICENSE in the source distribution or at
496L<https://www.openssl.org/source/license.html>.
497
498=cut