=pod

=head1 NAME

EVP_sha3_224,
EVP_sha3_256,
EVP_sha3_384,
EVP_sha3_512,
EVP_shake128,
EVP_shake256
- SHA-3 For EVP

=head1 SYNOPSIS

 #include <openssl/evp.h>

 const EVP_MD *EVP_sha3_224(void);
 const EVP_MD *EVP_sha3_256(void);
 const EVP_MD *EVP_sha3_384(void);
 const EVP_MD *EVP_sha3_512(void);

 const EVP_MD *EVP_shake128(void);
 const EVP_MD *EVP_shake256(void);

=head1 DESCRIPTION

SHA-3 (Secure Hash Algorithm 3) is a family of cryptographic hash functions
standardized in NIST FIPS 202, first published in 2015. It is based on the
Keccak algorithm.

=over 4

=item EVP_sha3_224(),
EVP_sha3_256(),
EVP_sha3_384(),
EVP_sha3_512()

The SHA-3 SHA-3-224, SHA-3-256, SHA-3-384, and SHA-3-512 algorithms
respectively. They produce 224, 256, 384 and 512 bits of output from a given
input.

=item EVP_shake128(),
EVP_shake256()

The SHAKE-128 and SHAKE-256 Extendable Output Functions (XOF) that can generate
a variable hash length.

Specifically, B<EVP_shake128> provides an overall security of 128 bits, while
B<EVP_shake256> provides that of 256 bits.

=back


=head1 RETURN VALUES

These functions return a B<EVP_MD> structure that contains the
implementation of the message digest. See L<EVP_MD_meth_new(3)> for
details of the B<EVP_MD> structure.

=head1 CONFORMING TO

NIST FIPS 202.

=head1 SEE ALSO

L<evp(7)>,
L<EVP_DigestInit(3)>

=head1 COPYRIGHT

Copyright 2017-2022 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

