=pod

=head1 NAME

EVP_md2
- MD2 For EVP

=head1 SYNOPSIS

 #include <openssl/evp.h>

 const EVP_MD *EVP_md2(void);

=head1 DESCRIPTION

MD2 is a cryptographic hash function standardized in RFC 1319 and designed by
Ronald Rivest. This implementation is only available with the legacy provider.

=over 4

=item EVP_md2()

The MD2 algorithm which produces a 128-bit output 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

IETF RFC 1319.

=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

