=pod

=head1 NAME

EVP_whirlpool
- WHIRLPOOL For EVP

=head1 SYNOPSIS

 #include <openssl/evp.h>

 const EVP_MD *EVP_whirlpool(void);

=head1 DESCRIPTION

WHIRLPOOL is a cryptographic hash function standardized in ISO/IEC 10118-3:2004
designed by Vincent Rijmen and Paulo S. L. M. Barreto. This implementation is
only available with the legacy provider.

=over 4

=item EVP_whirlpool()

The WHIRLPOOL algorithm that produces a message digest of 512-bits from a given
input.

=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

ISO/IEC 10118-3:2004.

=head1 SEE ALSO

L<evp(7)>,
L<provider(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

