MDX(3)

NAME
MDXInit, MDXUpdate, MDXFinal, MDXEnd, MDXFile, MDXData - calculate the RSA Data Security, Inc., “MDX” message digest

LIBRARY
libc

SYNOPSIS
#include <sys/types.h>
#include <mdX.h>
void
MDXInit(MDX_CTX *context);
void
MDXUpdate(MDX_CTX *context, const unsigned char *data, unsigned int len);
void
MDXFinal(unsigned char digest[16], MDX_CTX *context);
char *
MDXEnd(MDX_CTX *context, char *buf);
char *
MDXFile(const char *filename, char *buf);
char *
MDXData(const unsigned char *data, unsigned int len, char *buf);

DESCRIPTION
The MDX 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.

MD2 is the slowest, MD4 is the fastest and MD5 is somewhere in the middle. MD2 can only be used for Privacy-Enhanced Mail. MD4 has been criticized for being too weak, so MD5 was developed in response as ``MD4 with safety-belts''. When in doubt, use MD5.

The MDXInit(), MDXUpdate(), and MDXFinal() functions are the core functions. Allocate an MDX_CTX, initialize it with MDXInit(), run over the data with MDXUpdate(), and finally extract the result using MDXFinal().

MDXEnd() is a wrapper for MDXFinal() which converts the return value to a 33-character (including the terminating '\0') ASCII string which represents the 128 bits in hexadecimal.

MDXFile() calculates the digest of a file, and uses MDXEnd() to return the result. If the file cannot be opened, a null pointer is returned. MDXData() calculates the digest of a chunk of data in memory, and uses MDXEnd() to return the result.

When using MDXEnd(), MDXFile(), or MDXData(), 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 33 characters of buffer space.

SEE ALSO
md2(3), md4(3), md5(3), openssl_MD2(3), openssl_MD4(3), openssl_MD5(3) B. Kaliski, The MD2 Message-Digest Algorithm, RFC 1319. 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.

HISTORY
These functions appeared in NetBSD 1.3.

AUTHORS
-nosplit The original MDX routines were developed by RSA Data Security, Inc., and published in the above references. This code is derived directly from these implementations by Poul-Henning Kamp <phk@login.dkuug.dk>.

Phk ristede runen.

BUGS
No method is known to exist which finds two files having the same hash value, nor to find a file with a specific hash value. There is on the other hand no guarantee that such a method doesn't exist.