=pod

=head1 NAME

SHA1, SHA1_Init, SHA1_Update, SHA1_Final - Secure Hash Algorithm

=head1 SYNOPSIS

 #include <openssl/sha.h>

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

 void SHA1_Init(SHA_CTX *c);
 void SHA1_Update(SHA_CTX *c, const void *data,
                  unsigned long len);
 void SHA1_Final(unsigned char *md, SHA_CTX *c);

=head1 DESCRIPTION

SHA-1 (Secure Hash Algorithm) is a cryptographic hash function with a
160 bit output.

SHA1() computes the SHA-1 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_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:

SHA1_Init() initializes a B<SHA_CTX> structure.

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

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

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

The predecessor of SHA-1, SHA, is also implemented, but it should be
used only when backward compatibility is required.

=head1 RETURN VALUES

SHA1() returns a pointer to the hash value. 

SHA1_Init(), SHA1_Update() and SHA1_Final() do not return values.

=head1 CONFORMING TO

SHA: US Federal Information Processing Standard FIPS PUB 180 (Secure Hash
Standard),
SHA-1: US Federal Information Processing Standard FIPS PUB 180-1 (Secure Hash
Standard),
ANSI X9.30

=head1 SEE ALSO

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

=head1 HISTORY

SHA1(), SHA1_Init(), SHA1_Update() and SHA1_Final() are available in all
versions of SSLeay and OpenSSL.

=cut
