=pod

=head1 NAME

MDC2, MDC2_Init, MDC2_Update, MDC2_Final - MDC2 hash function

=head1 SYNOPSIS

 #include <openssl/mdc2.h>

 unsigned char *MDC2(const unsigned char *d, unsigned long n,
                  unsigned char *md);

 int MDC2_Init(MDC2_CTX *c);
 int MDC2_Update(MDC2_CTX *c, const unsigned char *data,
                  unsigned long len);
 int MDC2_Final(unsigned char *md, MDC2_CTX *c);

=head1 DESCRIPTION

MDC2 is a method to construct hash functions with 128 bit output from
block ciphers.  These functions are an implementation of MDC2 with
DES.

MDC2() computes the MDC2 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
MDC2_DIGEST_LENGTH == 16 bytes of output). If B<md> is NULL, the digest
is placed in a static array.

The following functions may be used if the message is not completely
stored in memory:

MDC2_Init() initializes a B<MDC2_CTX> structure.

MDC2_Update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).

MDC2_Final() places the message digest in B<md>, which must have space
for MDC2_DIGEST_LENGTH == 16 bytes of output, and erases the B<MDC2_CTX>.

Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the
hash functions directly.

=head1 RETURN VALUES

MDC2() returns a pointer to the hash value.

MDC2_Init(), MDC2_Update() and MDC2_Final() return 1 for success, 0 otherwise.

=head1 CONFORMING TO

ISO/IEC 10118-2, with DES

=head1 SEE ALSO

L<EVP_DigestInit(3)>

=head1 COPYRIGHT

Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (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
