=pod

=head1 NAME

RIPEMD160, RIPEMD160_Init, RIPEMD160_Update, RIPEMD160_Final -
RIPEMD-160 hash function

=head1 SYNOPSIS

 #include <openssl/ripemd.h>

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

 void RIPEMD160_Init(RIPEMD160_CTX *c);
 void RIPEMD160_Update(RIPEMD_CTX *c, const void *data,
                  unsigned long len);
 void RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c);

=head1 DESCRIPTION

RIPEMD-160 is a cryptographic hash function with a
160 bit output.

RIPEMD160() computes the RIPEMD-160 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
RIPEMD160_DIGEST_LENGTH == 20 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:

RIPEMD160_Init() initializes a B<RIPEMD160_CTX> structure.

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

RIPEMD160_Final() places the message digest in B<md>, which must have
space for RIPEMD160_DIGEST_LENGTH == 20 bytes of output, and erases
the B<RIPEMD160_CTX>.

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

=head1 RETURN VALUES

RIPEMD160() returns a pointer to the hash value. 

RIPEMD160_Init(), RIPEMD160_Update() and RIPEMD160_Final() do not
return values.

=head1 CONFORMING TO

ISO/IEC 10118-3 (draft) (??)

=head1 SEE ALSO

L<sha(3)|sha(3)>, L<hmac(3)|hmac(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)>

=head1 HISTORY

RIPEMD160(), RIPEMD160_Init(), RIPEMD160_Update() and
RIPEMD160_Final() are available since SSLeay 0.9.0.

=cut
