xref: /freebsd/lib/libmd/mdX.3 (revision f778764443157b925d5c04050d2627cf0279606a)
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