=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 a special digest that's used by the KMAC EVP_MAC
implementation (see L<EVP_MAC-KMAC(7)>).

=head2 Identities

This implementation is only available with the default provider, and
includes the following varieties:

=over 4

=item KECCAK-KMAC-128

Known names are "KECCAK-KMAC-128" and "KECCAK-KMAC128"

=item KECCAK-KMAC-256

Known names are "KECCAK-KMAC-256" and "KECCAK-KMAC256"

=item SHAKE-128

Known names are "SHAKE-128" and "SHAKE128"

=item SHAKE-256

Known names are "SHAKE-256" and "SHAKE256"

=back

=head2 Gettable Parameters

This implementation supports the common gettable parameters described
in L<EVP_MD-common(7)>.

=head2 Settable Context Parameters

These implementations support the following L<OSSL_PARAM(3)> entries,
settable for an B<EVP_MD_CTX> with L<EVP_MD_CTX_set_params(3)>:

=over 4

=item "xoflen" (B<OSSL_DIGEST_PARAM_XOFLEN>) <unsigned integer>

Sets the digest length for extendable output functions.
The length of the "xoflen" parameter should not exceed that of a B<size_t>.

=back

=head1 SEE ALSO

L<EVP_MD_CTX_set_params(3)>, L<provider-digest(7)>, L<OSSL_PROVIDER-default(7)>

=head1 COPYRIGHT

Copyright 2020 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
