1c9502b53SPoul-Henning Kamp.\" 2c9502b53SPoul-Henning Kamp.\" ---------------------------------------------------------------------------- 3c9502b53SPoul-Henning Kamp.\" "THE BEER-WARE LICENSE" (Revision 42): 4c9502b53SPoul-Henning Kamp.\" <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you 5c9502b53SPoul-Henning Kamp.\" can do whatever you want with this stuff. If we meet some day, and you think 6c9502b53SPoul-Henning Kamp.\" this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 7c9502b53SPoul-Henning Kamp.\" ---------------------------------------------------------------------------- 8c9502b53SPoul-Henning Kamp.\" 9f7787644SJoerg Wunsch.\" $Id: mdX.3,v 1.10 1997/03/19 00:52:58 bde Exp $ 10c9502b53SPoul-Henning Kamp.\" 1104422105SGarrett Wollman.Dd October 9, 1996 12c9502b53SPoul-Henning Kamp.Dt MDX 3 13c9502b53SPoul-Henning Kamp.Os FreeBSD 2 14c9502b53SPoul-Henning Kamp.Sh NAME 15c9502b53SPoul-Henning Kamp.Nm MDXInit , 16c9502b53SPoul-Henning Kamp.Nm MDXUpdate , 17c9502b53SPoul-Henning Kamp.Nm MDXFinal , 18c9502b53SPoul-Henning Kamp.Nm MDXEnd , 19c9502b53SPoul-Henning Kamp.Nm MDXFile , 20c211e812SMike Pritchard.Nm MDXData 2104422105SGarrett Wollman.Nd calculate the RSA Data Security, Inc., ``MDX'' message digest 22c9502b53SPoul-Henning Kamp.Sh SYNOPSIS 2352377df3SPoul-Henning Kamp.Fd #include <sys/types.h> 24c9502b53SPoul-Henning Kamp.Fd #include <mdX.h> 25c9502b53SPoul-Henning Kamp.Ft void 26c9502b53SPoul-Henning Kamp.Fn MDXInit "MDX_CTX *context" 27c9502b53SPoul-Henning Kamp.Ft void 2809589ca8SBruce Evans.Fn MDXUpdate "MDX_CTX *context" "const unsigned char *data" "unsigned int len" 29c9502b53SPoul-Henning Kamp.Ft void 30c9502b53SPoul-Henning Kamp.Fn MDXFinal "unsigned char digest[16]" "MDX_CTX *context" 31c9502b53SPoul-Henning Kamp.Ft "char *" 3205f65b29SPoul-Henning Kamp.Fn MDXEnd "MDX_CTX *context" "char *buf" 33c9502b53SPoul-Henning Kamp.Ft "char *" 34f7787644SJoerg Wunsch.Fn MDXFile "const char *filename" "char *buf" 35c9502b53SPoul-Henning Kamp.Ft "char *" 3609589ca8SBruce Evans.Fn MDXData "const unsigned char *data" "unsigned int len" "char *buf" 37c9502b53SPoul-Henning Kamp.Sh DESCRIPTION 38c9502b53SPoul-Henning KampThe MDX functions calculate a 128-bit cryptographic checksum (digest) 39c9502b53SPoul-Henning Kampfor any number of input bytes. A cryptographic checksum is a one-way 40c9502b53SPoul-Henning Kamphash-function, that is, you cannot find (except by exhaustive search) 41c9502b53SPoul-Henning Kampthe input corresponding to a particular output. This net result is 42c9502b53SPoul-Henning Kampa ``fingerprint'' of the input-data, which doesn't disclose the actual 43c9502b53SPoul-Henning Kampinput. 4404422105SGarrett Wollman.Pp 45c9502b53SPoul-Henning KampMD2 is the slowest, MD4 is the fastest and MD5 is somewhere in the middle. 46c9502b53SPoul-Henning KampMD2 can only be used for Privacy-Enhanced Mail. 4704422105SGarrett WollmanMD4 has been criticized for being too weak, so MD5 was developed in 4804422105SGarrett Wollmanresponse as ``MD4 with safety-belts''. When in doubt, use MD5. 4904422105SGarrett Wollman.Pp 50c9502b53SPoul-Henning KampThe 51c9502b53SPoul-Henning Kamp.Fn MDXInit , 5204422105SGarrett Wollman.Fn MDXUpdate , 53c9502b53SPoul-Henning Kampand 54c9502b53SPoul-Henning Kamp.Fn MDXFinal 5504422105SGarrett Wollmanfunctions are the core functions. Allocate an MDX_CTX, initialize it with 5604422105SGarrett Wollman.Fn MDXInit , 57c9502b53SPoul-Henning Kamprun over the data with 5804422105SGarrett Wollman.Fn MDXUpdate , 59c9502b53SPoul-Henning Kampand finally extract the result using 60c9502b53SPoul-Henning Kamp.Fn MDXFinal . 6104422105SGarrett Wollman.Pp 62c9502b53SPoul-Henning Kamp.Fn MDXEnd 6305f65b29SPoul-Henning Kampis a wrapper for 6404422105SGarrett Wollman.Fn MDXFinal 6504422105SGarrett Wollmanwhich converts the return value to a 33-character 6604422105SGarrett Wollman(including the terminating '\e0') 6704422105SGarrett Wollman.Tn ASCII 6804422105SGarrett Wollmanstring which represents the 128 bits in hexadecimal. 6904422105SGarrett Wollman.Pp 70c9502b53SPoul-Henning Kamp.Fn MDXFile 7105f65b29SPoul-Henning Kampcalculates the digest of a file, and uses 72228a1015SJohn Polstra.Fn MDXEnd 7305f65b29SPoul-Henning Kampto return the result. 7404422105SGarrett WollmanIf the file cannot be opened, a null pointer is returned. 75c9502b53SPoul-Henning Kamp.Fn MDXData 7605f65b29SPoul-Henning Kampcalculates the digest of a chunk of data in memory, and uses 77228a1015SJohn Polstra.Fn MDXEnd 7805f65b29SPoul-Henning Kampto return the result. 7904422105SGarrett Wollman.Pp 80c9502b53SPoul-Henning KampWhen using 81c9502b53SPoul-Henning Kamp.Fn MDXEnd , 8204422105SGarrett Wollman.Fn MDXFile , 8305f65b29SPoul-Henning Kampor 84c9502b53SPoul-Henning Kamp.Fn MDXData , 8505f65b29SPoul-Henning Kampthe 8605f65b29SPoul-Henning Kamp.Ar buf 8704422105SGarrett Wollmanargument can be a null pointer, in which case the returned string 8804422105SGarrett Wollmanis allocated with 8905f65b29SPoul-Henning Kamp.Xr malloc 3 9005f65b29SPoul-Henning Kampand subsequently must be explicitly deallocated using 91c9502b53SPoul-Henning Kamp.Xr free 3 92c9502b53SPoul-Henning Kampafter use. 9305f65b29SPoul-Henning KampIf the 9405f65b29SPoul-Henning Kamp.Ar buf 9504422105SGarrett Wollmanargument is non-null it must point to at least 33 characters of buffer space. 96c9502b53SPoul-Henning Kamp.Sh SEE ALSO 97c9502b53SPoul-Henning Kamp.Xr md2 3 , 98c9502b53SPoul-Henning Kamp.Xr md4 3 , 99c9502b53SPoul-Henning Kamp.Xr md5 3 10004422105SGarrett Wollman.Rs 10104422105SGarrett Wollman.%A B. Kaliski 10204422105SGarrett Wollman.%T The MD2 Message-Digest Algorithm 10304422105SGarrett Wollman.%O RFC 1319 10404422105SGarrett Wollman.Re 10504422105SGarrett Wollman.Rs 10604422105SGarrett Wollman.%A R. Rivest 10704422105SGarrett Wollman.%T The MD4 Message-Digest Algorithm 10804422105SGarrett Wollman.%O RFC 1186 10904422105SGarrett Wollman.Re 11004422105SGarrett Wollman.Rs 11104422105SGarrett Wollman.%A R. Rivest 11204422105SGarrett Wollman.%T The MD5 Message-Digest Algorithm 11304422105SGarrett Wollman.%O RFC 1321 11404422105SGarrett Wollman.Re 11504422105SGarrett Wollman.Rs 11604422105SGarrett Wollman.%A RSA Laboratories 11704422105SGarrett Wollman.%T Frequently Asked Questions About today's Cryptography 11804422105SGarrett Wollman.Re 119c9502b53SPoul-Henning Kamp.Sh AUTHOR 12004422105SGarrett WollmanThe original MDX routines were developed by 12104422105SGarrett Wollman.Tn RSA 12204422105SGarrett WollmanData Security, Inc., and published in the above references. 123c9502b53SPoul-Henning KampThis code is derived directly from these implementations by Poul-Henning Kamp 12404422105SGarrett Wollman.Aq Li phk@login.dkuug.dk 12504422105SGarrett Wollman.Pp 126c9502b53SPoul-Henning KampPhk ristede runen. 127c9502b53SPoul-Henning Kamp.Sh HISTORY 128c9502b53SPoul-Henning KampThese functions appeared in 1296c65d959SMike Pritchard.Fx 2.0 . 130c9502b53SPoul-Henning Kamp.Sh BUGS 131c9502b53SPoul-Henning KampNo method is known to exist which finds two files having the same hash value, 132c9502b53SPoul-Henning Kampnor to find a file with a specific hash value. 133c9502b53SPoul-Henning KampThere is on the other hand no guarantee that such a method doesn't exist. 13404422105SGarrett Wollman.Pp 13504422105SGarrett WollmanMD2 has only been licensed for use in Privacy Enhanced Mail. 136c9502b53SPoul-Henning KampUse MD4 or MD5 if that isn't what you're doing. 137c9502b53SPoul-Henning Kamp.Sh COPYRIGHT 138