1c9502b53SPoul-Henning Kamp.\" 2c9502b53SPoul-Henning Kamp.\" ---------------------------------------------------------------------------- 3c9502b53SPoul-Henning Kamp.\" "THE BEER-WARE LICENSE" (Revision 42): 442c159feSPoul-Henning Kamp.\" <phk@FreeBSD.org> 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.\" 97f3dea24SPeter Wemm.\" $FreeBSD$ 10c9502b53SPoul-Henning Kamp.\" 1148ee93d6SGarrett Wollman.Dd February 11, 1999 12c9502b53SPoul-Henning Kamp.Dt MDX 3 13a307d598SRuslan Ermilov.Os 14c9502b53SPoul-Henning Kamp.Sh NAME 15c9502b53SPoul-Henning Kamp.Nm MDXInit , 16c9502b53SPoul-Henning Kamp.Nm MDXUpdate , 17c6bcf724SPoul-Henning Kamp.Nm MDXPad , 18c9502b53SPoul-Henning Kamp.Nm MDXFinal , 19c9502b53SPoul-Henning Kamp.Nm MDXEnd , 20c9502b53SPoul-Henning Kamp.Nm MDXFile , 218a24546cSPoul-Henning Kamp.Nm MDXFileChunk , 22c211e812SMike Pritchard.Nm MDXData 2304422105SGarrett Wollman.Nd calculate the RSA Data Security, Inc., ``MDX'' message digest 249452ceebSAlexey Zelkin.Sh LIBRARY 259452ceebSAlexey Zelkin.Lb libmd 26c9502b53SPoul-Henning Kamp.Sh SYNOPSIS 2732eef9aeSRuslan Ermilov.In sys/types.h 2832eef9aeSRuslan Ermilov.In mdX.h 29c9502b53SPoul-Henning Kamp.Ft void 30c9502b53SPoul-Henning Kamp.Fn MDXInit "MDX_CTX *context" 31c9502b53SPoul-Henning Kamp.Ft void 3209589ca8SBruce Evans.Fn MDXUpdate "MDX_CTX *context" "const unsigned char *data" "unsigned int len" 33c9502b53SPoul-Henning Kamp.Ft void 34c6bcf724SPoul-Henning Kamp.Fn MDXPad "MDX_CTX *context" 35c6bcf724SPoul-Henning Kamp.Ft void 36c9502b53SPoul-Henning Kamp.Fn MDXFinal "unsigned char digest[16]" "MDX_CTX *context" 37c9502b53SPoul-Henning Kamp.Ft "char *" 3805f65b29SPoul-Henning Kamp.Fn MDXEnd "MDX_CTX *context" "char *buf" 39c9502b53SPoul-Henning Kamp.Ft "char *" 40f7787644SJoerg Wunsch.Fn MDXFile "const char *filename" "char *buf" 41c9502b53SPoul-Henning Kamp.Ft "char *" 428a24546cSPoul-Henning Kamp.Fn MDXFileChunk "const char *filename" "char *buf" "off_t offset" "off_t length" 438a24546cSPoul-Henning Kamp.Ft "char *" 4409589ca8SBruce Evans.Fn MDXData "const unsigned char *data" "unsigned int len" "char *buf" 45c9502b53SPoul-Henning Kamp.Sh DESCRIPTION 46c9502b53SPoul-Henning KampThe MDX functions calculate a 128-bit cryptographic checksum (digest) 47c9502b53SPoul-Henning Kampfor any number of input bytes. A cryptographic checksum is a one-way 48c9502b53SPoul-Henning Kamphash-function, that is, you cannot find (except by exhaustive search) 49c9502b53SPoul-Henning Kampthe input corresponding to a particular output. This net result is 50c9502b53SPoul-Henning Kampa ``fingerprint'' of the input-data, which doesn't disclose the actual 51c9502b53SPoul-Henning Kampinput. 5204422105SGarrett Wollman.Pp 53c9502b53SPoul-Henning KampMD2 is the slowest, MD4 is the fastest and MD5 is somewhere in the middle. 54c9502b53SPoul-Henning KampMD2 can only be used for Privacy-Enhanced Mail. 5548ee93d6SGarrett WollmanMD4 has now been broken; it should only be used where necessary for 5648ee93d6SGarrett Wollmanbackward compatibility. 5748ee93d6SGarrett WollmanMD5 has not yet (1999-02-11) been broken, but sufficient attacks have been 5848ee93d6SGarrett Wollmanmade that its security is in some doubt. The attacks on both MD4 and MD5 5948ee93d6SGarrett Wollmanare both in the nature of finding ``collisions'' \- that is, multiple 6048ee93d6SGarrett Wollmaninputs which hash to the same value; it is still unlikely for an attacker 6148ee93d6SGarrett Wollmanto be able to determine the exact original input given a hash value. 6204422105SGarrett Wollman.Pp 63c9502b53SPoul-Henning KampThe 64c9502b53SPoul-Henning Kamp.Fn MDXInit , 6504422105SGarrett Wollman.Fn MDXUpdate , 66c9502b53SPoul-Henning Kampand 67c9502b53SPoul-Henning Kamp.Fn MDXFinal 6804422105SGarrett Wollmanfunctions are the core functions. Allocate an MDX_CTX, initialize it with 6904422105SGarrett Wollman.Fn MDXInit , 70c9502b53SPoul-Henning Kamprun over the data with 7104422105SGarrett Wollman.Fn MDXUpdate , 72c9502b53SPoul-Henning Kampand finally extract the result using 73c9502b53SPoul-Henning Kamp.Fn MDXFinal . 7404422105SGarrett Wollman.Pp 750552350eSPhilippe CharnierThe 76c6bcf724SPoul-Henning Kamp.Fn MDXPad 770552350eSPhilippe Charnierfunction can be used to pad message data in same way 78c6bcf724SPoul-Henning Kampas done by 79c6bcf724SPoul-Henning Kamp.Fn MDXFinal 80c6bcf724SPoul-Henning Kampwithout terminating calculation. 81c6bcf724SPoul-Henning Kamp.Pp 820552350eSPhilippe CharnierThe 83c9502b53SPoul-Henning Kamp.Fn MDXEnd 840552350eSPhilippe Charnierfunction is a wrapper for 8504422105SGarrett Wollman.Fn MDXFinal 8604422105SGarrett Wollmanwhich converts the return value to a 33-character 8704422105SGarrett Wollman(including the terminating '\e0') 8804422105SGarrett Wollman.Tn ASCII 8904422105SGarrett Wollmanstring which represents the 128 bits in hexadecimal. 9004422105SGarrett Wollman.Pp 910552350eSPhilippe CharnierThe 92c9502b53SPoul-Henning Kamp.Fn MDXFile 930552350eSPhilippe Charnierfunction calculates the digest of a file, and uses 94228a1015SJohn Polstra.Fn MDXEnd 9505f65b29SPoul-Henning Kampto return the result. 9604422105SGarrett WollmanIf the file cannot be opened, a null pointer is returned. 970552350eSPhilippe CharnierThe 988a24546cSPoul-Henning Kamp.Fn MDXFileChunk 990552350eSPhilippe Charnierfunction is similar to 1008a24546cSPoul-Henning Kamp.Fn MDXFile , 1018a24546cSPoul-Henning Kampbut it only calculates the digest over a byte-range of the file specified, 1028a24546cSPoul-Henning Kampstarting at 1037e5d6de0SRuslan Ermilov.Fa offset 1048a24546cSPoul-Henning Kampand spanning 1057e5d6de0SRuslan Ermilov.Fa length 1068a24546cSPoul-Henning Kampbytes. 1078a24546cSPoul-Henning KampIf the 1087e5d6de0SRuslan Ermilov.Fa length 1098a24546cSPoul-Henning Kampparameter is specified as 0, or more than the length of the remaining part 1108a24546cSPoul-Henning Kampof the file, 1118a24546cSPoul-Henning Kamp.Fn MDXFileChunk 1128a24546cSPoul-Henning Kampcalculates the digest from 1137e5d6de0SRuslan Ermilov.Fa offset 1148a24546cSPoul-Henning Kampto the end of file. 1150552350eSPhilippe CharnierThe 116c9502b53SPoul-Henning Kamp.Fn MDXData 1170552350eSPhilippe Charnierfunction calculates the digest of a chunk of data in memory, and uses 118228a1015SJohn Polstra.Fn MDXEnd 11905f65b29SPoul-Henning Kampto return the result. 12004422105SGarrett Wollman.Pp 121c9502b53SPoul-Henning KampWhen using 122c9502b53SPoul-Henning Kamp.Fn MDXEnd , 12304422105SGarrett Wollman.Fn MDXFile , 12405f65b29SPoul-Henning Kampor 125c9502b53SPoul-Henning Kamp.Fn MDXData , 12605f65b29SPoul-Henning Kampthe 1277e5d6de0SRuslan Ermilov.Fa buf 12804422105SGarrett Wollmanargument can be a null pointer, in which case the returned string 12904422105SGarrett Wollmanis allocated with 13005f65b29SPoul-Henning Kamp.Xr malloc 3 13105f65b29SPoul-Henning Kampand subsequently must be explicitly deallocated using 132c9502b53SPoul-Henning Kamp.Xr free 3 133c9502b53SPoul-Henning Kampafter use. 13405f65b29SPoul-Henning KampIf the 1357e5d6de0SRuslan Ermilov.Fa buf 13604422105SGarrett Wollmanargument is non-null it must point to at least 33 characters of buffer space. 137c9502b53SPoul-Henning Kamp.Sh SEE ALSO 138c9502b53SPoul-Henning Kamp.Xr md2 3 , 139c9502b53SPoul-Henning Kamp.Xr md4 3 , 140c177a86bSGarrett Wollman.Xr md5 3 , 141c177a86bSGarrett Wollman.Xr sha 3 14204422105SGarrett Wollman.Rs 14304422105SGarrett Wollman.%A B. Kaliski 14404422105SGarrett Wollman.%T The MD2 Message-Digest Algorithm 14504422105SGarrett Wollman.%O RFC 1319 14604422105SGarrett Wollman.Re 14704422105SGarrett Wollman.Rs 14804422105SGarrett Wollman.%A R. Rivest 14904422105SGarrett Wollman.%T The MD4 Message-Digest Algorithm 15004422105SGarrett Wollman.%O RFC 1186 15104422105SGarrett Wollman.Re 15204422105SGarrett Wollman.Rs 15304422105SGarrett Wollman.%A R. Rivest 15404422105SGarrett Wollman.%T The MD5 Message-Digest Algorithm 15504422105SGarrett Wollman.%O RFC 1321 15604422105SGarrett Wollman.Re 15704422105SGarrett Wollman.Rs 15804422105SGarrett Wollman.%A RSA Laboratories 15904422105SGarrett Wollman.%T Frequently Asked Questions About today's Cryptography 16048ee93d6SGarrett Wollman.%O \&<http://www.rsa.com/rsalabs/faq/> 16148ee93d6SGarrett Wollman.Re 16248ee93d6SGarrett Wollman.Rs 16348ee93d6SGarrett Wollman.%A H. Dobbertin 16448ee93d6SGarrett Wollman.%T Alf Swindles Ann 16548ee93d6SGarrett Wollman.%J CryptoBytes 16648ee93d6SGarrett Wollman.%N 1(3):5 16748ee93d6SGarrett Wollman.%D 1995 16848ee93d6SGarrett Wollman.Re 16948ee93d6SGarrett Wollman.Rs 17048ee93d6SGarrett Wollman.%A MJ. B. Robshaw 17148ee93d6SGarrett Wollman.%T On Recent Results for MD2, MD4 and MD5 17248ee93d6SGarrett Wollman.%J RSA Laboratories Bulletin 17348ee93d6SGarrett Wollman.%N 4 17448ee93d6SGarrett Wollman.%D November 12, 1996 17504422105SGarrett Wollman.Re 176a5941fc2SPhilippe Charnier.Sh AUTHORS 17704422105SGarrett WollmanThe original MDX routines were developed by 17804422105SGarrett Wollman.Tn RSA 17904422105SGarrett WollmanData Security, Inc., and published in the above references. 180a5941fc2SPhilippe CharnierThis code is derived directly from these implementations by 18142c159feSPoul-Henning Kamp.An Poul-Henning Kamp Aq phk@FreeBSD.org 18204422105SGarrett Wollman.Pp 183c9502b53SPoul-Henning KampPhk ristede runen. 184c9502b53SPoul-Henning Kamp.Sh HISTORY 185c9502b53SPoul-Henning KampThese functions appeared in 1866c65d959SMike Pritchard.Fx 2.0 . 187c9502b53SPoul-Henning Kamp.Sh BUGS 188c9502b53SPoul-Henning KampNo method is known to exist which finds two files having the same hash value, 189c9502b53SPoul-Henning Kampnor to find a file with a specific hash value. 190c9502b53SPoul-Henning KampThere is on the other hand no guarantee that such a method doesn't exist. 19104422105SGarrett Wollman.Pp 19204422105SGarrett WollmanMD2 has only been licensed for use in Privacy Enhanced Mail. 193c9502b53SPoul-Henning KampUse MD4 or MD5 if that isn't what you're doing. 194