Provided by: libbsd-dev_0.12.1-1build1.1_amd64 bug

NAME

       MD5Init,  MD5Update,  MD5Pad,  MD5Final, MD5Transform, MD5End, MD5File, MD5FileChunk, MD5Data — calculate
       the RSA Data Security, Inc., ``MD5'' message digest

LIBRARY

       Utility functions from BSD systems (libbsd, -lbsd)

SYNOPSIS

       #include <sys/types.h>
       #include <md5.h>
       (See libbsd(7) for include usage.)

       void
       MD5Init(MD5_CTX *context);

       void
       MD5Update(MD5_CTX *context, const uint8_t *data, size_t len);

       void
       MD5Pad(MD5_CTX *context);

       void
       MD5Final(uint8_t digest[MD5_DIGEST_LENGTH], MD5_CTX *context);

       void
       MD5Transform(uint32_t state[4], uint8_t block[MD5_BLOCK_LENGTH]);

       char *
       MD5End(MD5_CTX *context, char *buf);

       char *
       MD5File(const char *filename, char *buf);

       char *
       MD5FileChunk(const char *filename, char *buf, off_t offset, off_t length);

       char *
       MD5Data(const uint8_t *data, size_t len, char *buf);

DESCRIPTION

       The MD5 functions calculate a 128-bit cryptographic checksum (digest) for any number of input  bytes.   A
       cryptographic checksum is a one-way hash-function, that is, you cannot find (except by exhaustive search)
       the  input  corresponding  to a particular output.  This net result is a “fingerprint” of the input-data,
       which doesn't disclose the actual input.

       MD4 has been broken; it should only be used where necessary for backward compatibility.  MD5 has not  yet
       (1999-02-11)  been  broken,  but  recent  attacks  have  cast some doubt on its security properties.  The
       attacks on both MD4 and MD5 are both in the nature of finding “collisions” -  that  is,  multiple  inputs
       which  hash  to  the  same  value; it is still unlikely for an attacker to be able to determine the exact
       original input given a hash value.

       The MD5Init(), MD5Update(), and MD5Final() functions  are  the  core  functions.   Allocate  an  MD5_CTX,
       initialize  it  with  MD5Init(), run over the data with MD5Update(), and finally extract the result using
       MD5Final().

       The MD5Pad() function can be used to apply padding to the  message  digest  as  in  MD5Final(),  but  the
       current context can still be used with MD5Update().

       The  MD5Transform()  function  is  used  by  MD5Update() to hash 512-bit blocks and forms the core of the
       algorithm.  Most programs should use the interface provided  by  MD5Init(),  MD5Update()  and  MD5Final()
       instead of calling MD5Transform() directly.

       MD5End()  is  a  wrapper  for  MD5Final() which converts the return value to an MD5_DIGEST_STRING_LENGTH-
       character (including the terminating '\0') ASCII string which represents the 128 bits in hexadecimal.

       MD5File() calculates the digest of a file, and uses MD5End() to return the result.  If the file cannot be
       opened, a null pointer is returned.

       MD5FileChunk() behaves like MD5File() but calculates the  digest  only  for  that  portion  of  the  file
       starting  at  offset  and  continuing  for  length bytes or until end of file is reached, whichever comes
       first.  A zero length can be specified to read until end of file.  A negative length or  offset  will  be
       ignored.   MD5Data()  calculates the digest of a chunk of data in memory, and uses MD5End() to return the
       result.

       When using MD5End(), MD5File(), MD5FileChunk(), or MD5Data(), the buf argument can be a null pointer,  in
       which  case  the  returned  string  is  allocated  with  malloc(3)  and  subsequently  must be explicitly
       deallocated using free(3) after use.  If the  buf  argument  is  non-null  it  must  point  to  at  least
       MD5_DIGEST_STRING_LENGTH characters of buffer space.

SEE ALSO

       cksum(1),   md5(1),   adler32(3),   md4(3),  rmd160(3),  sfv(3),  sha1(3),  sha2(3),  suma(3),  tiger(3),
       whirlpool(3)

       R. Rivest, The MD4 Message-Digest Algorithm, RFC 1186.

       R. Rivest, The MD5 Message-Digest Algorithm, RFC 1321.

       RSA     Laboratories,     Frequently      Asked      Questions      About      today's      Cryptography,
       <http://www.rsa.com/rsalabs/faq/>.

       H. Dobbertin, “Alf Swindles Ann”, CryptoBytes, 1(3):5, 1995.

       MJ. B. Robshaw, “On Recent Results for MD4 and MD5”, RSA Laboratories Bulletin, 4, November 12, 1996.

       Hans Dobbertin, Cryptanalysis of MD5 Compress.

HISTORY

       These functions appeared in OpenBSD 2.0.

AUTHORS

       The  original  MD5  routines  were  developed  by  RSA  Data  Security,  Inc., and published in the above
       references.  This code is derived from a public domain implementation written by Colin Plumb.

       The MD5End(), MD5File(), MD5FileChunk(), and MD5Data() helper functions are derived from code written  by
       Poul-Henning Kamp.

BUGS

       Collisions  have  been  found for the full versions of both MD4 and MD5 as well as strong attacks against
       the SHA-0 and SHA-1 family.  The use of sha2(3), or rmd160(3) is recommended instead.

Debian                                           April 29, 2004                                        MD5(3bsd)