mirror of
https://github.com/openssl/openssl.git
synced 2025-04-06 20:20:50 +08:00
102 lines
2.8 KiB
Plaintext
102 lines
2.8 KiB
Plaintext
=pod
|
|
|
|
=head1 NAME
|
|
|
|
EVP_MD-SHAKE, EVP_MD-KECCAK-KMAC
|
|
- The SHAKE / KECCAK family EVP_MD implementations
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Support for computing SHAKE or KECCAK-KMAC digests through the
|
|
B<EVP_MD> API.
|
|
|
|
KECCAK-KMAC is an Extendable Output Function (XOF), with a definition
|
|
similar to SHAKE, used by the KMAC EVP_MAC implementation (see
|
|
L<EVP_MAC-KMAC(7)>).
|
|
|
|
=head2 Identities
|
|
|
|
This implementation is available in the FIPS provider as well as the default
|
|
provider, and includes the following varieties:
|
|
|
|
=over 4
|
|
|
|
=item KECCAK-KMAC-128
|
|
|
|
Known names are "KECCAK-KMAC-128" and "KECCAK-KMAC128". This is used
|
|
by L<EVP_MAC-KMAC128(7)>. Using the notation from NIST FIPS 202
|
|
(Section 6.2), we have S<KECCAK-KMAC-128(M, d)> = S<KECCAK[256](M || 00, d)>
|
|
(see the description of KMAC128 in Appendix A of NIST SP 800-185).
|
|
|
|
=item KECCAK-KMAC-256
|
|
|
|
Known names are "KECCAK-KMAC-256" and "KECCAK-KMAC256". This is used
|
|
by L<EVP_MAC-KMAC256(7)>. Using the notation from NIST FIPS 202
|
|
(Section 6.2), we have S<KECCAK-KMAC-256(M, d)> = S<KECCAK[512](M || 00, d)>
|
|
(see the description of KMAC256 in Appendix A of NIST SP 800-185).
|
|
|
|
=item SHAKE-128
|
|
|
|
Known names are "SHAKE-128" and "SHAKE128".
|
|
|
|
=item SHAKE-256
|
|
|
|
Known names are "SHAKE-256" and "SHAKE256".
|
|
|
|
=back
|
|
|
|
=head2 Parameters
|
|
|
|
This implementation supports the following L<OSSL_PARAM(3)> entries:
|
|
|
|
=over 4
|
|
|
|
=item "xoflen" (B<OSSL_DIGEST_PARAM_XOFLEN>) <unsigned integer>
|
|
|
|
Sets or Gets the digest length for extendable output functions.
|
|
The length of the "xoflen" parameter should not exceed that of a B<size_t>.
|
|
|
|
The SHAKE-128 and SHAKE-256 implementations do not have any default digest
|
|
length.
|
|
|
|
This parameter must be set before calling either EVP_DigestFinal_ex() or
|
|
EVP_DigestFinal(), since these functions were not designed to handle variable
|
|
length output. It is recommended to either use EVP_DigestSqueeze() or
|
|
EVP_DigestFinalXOF() instead.
|
|
|
|
=item "size" (B<OSSL_DIGEST_PARAM_SIZE>) <unsigned integer>
|
|
|
|
An alias of "xoflen".
|
|
|
|
=back
|
|
|
|
See L<EVP_DigestInit(3)/PARAMETERS> for further information related to parameters
|
|
|
|
=head1 NOTES
|
|
|
|
For SHAKE-128, to ensure the maximum security strength of 128 bits, the output
|
|
length passed to EVP_DigestFinalXOF() should be at least 32.
|
|
|
|
For SHAKE-256, to ensure the maximum security strength of 256 bits, the output
|
|
length passed to EVP_DigestFinalXOF() should be at least 64.
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<EVP_MD_CTX_set_params(3)>, L<provider-digest(7)>, L<OSSL_PROVIDER-default(7)>
|
|
|
|
=head1 HISTORY
|
|
|
|
Since OpenSSL 3.4 the SHAKE-128 and SHAKE-256 implementations have no default
|
|
digest length.
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
Copyright 2020-2024 The OpenSSL Project Authors. All Rights Reserved.
|
|
|
|
Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
this file except in compliance with the License. You can obtain a copy
|
|
in the file LICENSE in the source distribution or at
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
=cut
|