1994-07-24 03:29:56 +00:00
|
|
|
.\"
|
|
|
|
.\" ----------------------------------------------------------------------------
|
|
|
|
.\" "THE BEER-WARE LICENSE" (Revision 42):
|
2002-03-25 14:12:49 +00:00
|
|
|
.\" <phk@FreeBSD.org> wrote this file. As long as you retain this notice you
|
1994-07-24 03:29:56 +00:00
|
|
|
.\" can do whatever you want with this stuff. If we meet some day, and you think
|
|
|
|
.\" this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
|
|
|
.\" ----------------------------------------------------------------------------
|
|
|
|
.\"
|
1999-08-28 00:22:10 +00:00
|
|
|
.\" $FreeBSD$
|
1994-07-24 03:29:56 +00:00
|
|
|
.\"
|
2019-05-21 22:11:53 +00:00
|
|
|
.Dd May 21, 2019
|
1994-07-24 03:29:56 +00:00
|
|
|
.Dt MDX 3
|
2001-07-10 13:41:46 +00:00
|
|
|
.Os
|
1994-07-24 03:29:56 +00:00
|
|
|
.Sh NAME
|
|
|
|
.Nm MDXInit ,
|
|
|
|
.Nm MDXUpdate ,
|
1998-03-27 10:23:00 +00:00
|
|
|
.Nm MDXPad ,
|
1994-07-24 03:29:56 +00:00
|
|
|
.Nm MDXFinal ,
|
|
|
|
.Nm MDXEnd ,
|
|
|
|
.Nm MDXFile ,
|
2001-03-17 10:00:50 +00:00
|
|
|
.Nm MDXFileChunk ,
|
1996-02-09 00:45:45 +00:00
|
|
|
.Nm MDXData
|
1996-10-09 21:00:48 +00:00
|
|
|
.Nd calculate the RSA Data Security, Inc., ``MDX'' message digest
|
2000-04-22 16:11:30 +00:00
|
|
|
.Sh LIBRARY
|
|
|
|
.Lb libmd
|
1994-07-24 03:29:56 +00:00
|
|
|
.Sh SYNOPSIS
|
2001-10-01 16:09:29 +00:00
|
|
|
.In sys/types.h
|
|
|
|
.In mdX.h
|
1994-07-24 03:29:56 +00:00
|
|
|
.Ft void
|
|
|
|
.Fn MDXInit "MDX_CTX *context"
|
|
|
|
.Ft void
|
2006-01-17 15:35:57 +00:00
|
|
|
.Fn MDXUpdate "MDX_CTX *context" "const void *data" "unsigned int len"
|
1994-07-24 03:29:56 +00:00
|
|
|
.Ft void
|
1998-03-27 10:23:00 +00:00
|
|
|
.Fn MDXPad "MDX_CTX *context"
|
|
|
|
.Ft void
|
1994-07-24 03:29:56 +00:00
|
|
|
.Fn MDXFinal "unsigned char digest[16]" "MDX_CTX *context"
|
|
|
|
.Ft "char *"
|
1995-07-12 09:13:49 +00:00
|
|
|
.Fn MDXEnd "MDX_CTX *context" "char *buf"
|
1994-07-24 03:29:56 +00:00
|
|
|
.Ft "char *"
|
1997-08-25 05:24:31 +00:00
|
|
|
.Fn MDXFile "const char *filename" "char *buf"
|
1994-07-24 03:29:56 +00:00
|
|
|
.Ft "char *"
|
2001-03-17 10:00:50 +00:00
|
|
|
.Fn MDXFileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
|
|
|
|
.Ft "char *"
|
2006-01-17 15:35:57 +00:00
|
|
|
.Fn MDXData "const void *data" "unsigned int len" "char *buf"
|
1994-07-24 03:29:56 +00:00
|
|
|
.Sh DESCRIPTION
|
|
|
|
The MDX functions calculate a 128-bit cryptographic checksum (digest)
|
2003-10-09 23:06:06 +00:00
|
|
|
for any number of input bytes.
|
|
|
|
A cryptographic checksum is a one-way
|
1994-07-24 03:29:56 +00:00
|
|
|
hash-function, that is, you cannot find (except by exhaustive search)
|
2003-10-09 23:06:06 +00:00
|
|
|
the input corresponding to a particular output.
|
|
|
|
This net result is a
|
|
|
|
.Dq fingerprint
|
2005-02-13 22:25:33 +00:00
|
|
|
of the input-data, which does not disclose the actual input.
|
1996-10-09 21:00:48 +00:00
|
|
|
.Pp
|
2012-04-28 02:48:51 +00:00
|
|
|
MD4 is the fastest and MD5 is somewhat slower.
|
1999-02-11 20:31:49 +00:00
|
|
|
MD4 has now been broken; it should only be used where necessary for
|
|
|
|
backward compatibility.
|
|
|
|
MD5 has not yet (1999-02-11) been broken, but sufficient attacks have been
|
2003-10-09 23:06:06 +00:00
|
|
|
made that its security is in some doubt.
|
|
|
|
The attacks on both MD4 and MD5
|
|
|
|
are both in the nature of finding
|
|
|
|
.Dq collisions
|
|
|
|
\[en]
|
|
|
|
that is, multiple
|
1999-02-11 20:31:49 +00:00
|
|
|
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.
|
1996-10-09 21:00:48 +00:00
|
|
|
.Pp
|
1994-07-24 03:29:56 +00:00
|
|
|
The
|
|
|
|
.Fn MDXInit ,
|
1996-10-09 21:00:48 +00:00
|
|
|
.Fn MDXUpdate ,
|
1994-07-24 03:29:56 +00:00
|
|
|
and
|
|
|
|
.Fn MDXFinal
|
2003-10-09 23:06:06 +00:00
|
|
|
functions are the core functions.
|
|
|
|
Allocate an
|
|
|
|
.Vt MDX_CTX ,
|
|
|
|
initialize it with
|
1996-10-09 21:00:48 +00:00
|
|
|
.Fn MDXInit ,
|
1994-07-24 03:29:56 +00:00
|
|
|
run over the data with
|
1996-10-09 21:00:48 +00:00
|
|
|
.Fn MDXUpdate ,
|
1994-07-24 03:29:56 +00:00
|
|
|
and finally extract the result using
|
2018-07-20 07:01:28 +00:00
|
|
|
.Fn MDXFinal ,
|
|
|
|
which will also erase the
|
|
|
|
.Vt MDX_CTX .
|
1996-10-09 21:00:48 +00:00
|
|
|
.Pp
|
2003-03-24 16:02:05 +00:00
|
|
|
The
|
1998-03-27 10:23:00 +00:00
|
|
|
.Fn MDXPad
|
2003-03-24 16:02:05 +00:00
|
|
|
function can be used to pad message data in same way
|
1998-03-27 10:23:00 +00:00
|
|
|
as done by
|
|
|
|
.Fn MDXFinal
|
|
|
|
without terminating calculation.
|
|
|
|
.Pp
|
2003-03-24 16:02:05 +00:00
|
|
|
The
|
1994-07-24 03:29:56 +00:00
|
|
|
.Fn MDXEnd
|
2003-03-24 16:02:05 +00:00
|
|
|
function is a wrapper for
|
1996-10-09 21:00:48 +00:00
|
|
|
.Fn MDXFinal
|
|
|
|
which converts the return value to a 33-character
|
|
|
|
(including the terminating '\e0')
|
|
|
|
.Tn ASCII
|
|
|
|
string which represents the 128 bits in hexadecimal.
|
|
|
|
.Pp
|
2003-03-24 16:02:05 +00:00
|
|
|
The
|
1994-07-24 03:29:56 +00:00
|
|
|
.Fn MDXFile
|
2003-03-24 16:02:05 +00:00
|
|
|
function calculates the digest of a file, and uses
|
1996-05-28 18:57:31 +00:00
|
|
|
.Fn MDXEnd
|
1995-07-12 09:13:49 +00:00
|
|
|
to return the result.
|
1996-10-09 21:00:48 +00:00
|
|
|
If the file cannot be opened, a null pointer is returned.
|
2003-03-24 16:02:05 +00:00
|
|
|
The
|
2001-03-17 10:00:50 +00:00
|
|
|
.Fn MDXFileChunk
|
2003-03-24 16:02:05 +00:00
|
|
|
function is similar to
|
2001-03-17 10:00:50 +00:00
|
|
|
.Fn MDXFile ,
|
|
|
|
but it only calculates the digest over a byte-range of the file specified,
|
|
|
|
starting at
|
2001-04-04 10:23:27 +00:00
|
|
|
.Fa offset
|
2001-03-17 10:00:50 +00:00
|
|
|
and spanning
|
2001-04-04 10:23:27 +00:00
|
|
|
.Fa length
|
2001-03-17 10:00:50 +00:00
|
|
|
bytes.
|
|
|
|
If the
|
2001-04-04 10:23:27 +00:00
|
|
|
.Fa length
|
2001-03-17 10:00:50 +00:00
|
|
|
parameter is specified as 0, or more than the length of the remaining part
|
|
|
|
of the file,
|
|
|
|
.Fn MDXFileChunk
|
|
|
|
calculates the digest from
|
2001-04-04 10:23:27 +00:00
|
|
|
.Fa offset
|
2001-03-17 10:00:50 +00:00
|
|
|
to the end of file.
|
2003-03-24 16:02:05 +00:00
|
|
|
The
|
1994-07-24 03:29:56 +00:00
|
|
|
.Fn MDXData
|
2003-03-24 16:02:05 +00:00
|
|
|
function calculates the digest of a chunk of data in memory, and uses
|
1996-05-28 18:57:31 +00:00
|
|
|
.Fn MDXEnd
|
1995-07-12 09:13:49 +00:00
|
|
|
to return the result.
|
1996-10-09 21:00:48 +00:00
|
|
|
.Pp
|
1994-07-24 03:29:56 +00:00
|
|
|
When using
|
|
|
|
.Fn MDXEnd ,
|
1996-10-09 21:00:48 +00:00
|
|
|
.Fn MDXFile ,
|
1995-07-12 09:13:49 +00:00
|
|
|
or
|
1994-07-24 03:29:56 +00:00
|
|
|
.Fn MDXData ,
|
2001-07-15 07:53:42 +00:00
|
|
|
the
|
2001-04-04 10:23:27 +00:00
|
|
|
.Fa buf
|
1996-10-09 21:00:48 +00:00
|
|
|
argument can be a null pointer, in which case the returned string
|
|
|
|
is allocated with
|
1995-07-12 09:13:49 +00:00
|
|
|
.Xr malloc 3
|
|
|
|
and subsequently must be explicitly deallocated using
|
1994-07-24 03:29:56 +00:00
|
|
|
.Xr free 3
|
|
|
|
after use.
|
2001-07-15 07:53:42 +00:00
|
|
|
If the
|
2001-04-04 10:23:27 +00:00
|
|
|
.Fa buf
|
1996-10-09 21:00:48 +00:00
|
|
|
argument is non-null it must point to at least 33 characters of buffer space.
|
2019-05-21 22:11:53 +00:00
|
|
|
.Sh ERRORS
|
|
|
|
The
|
|
|
|
.Fn MDXEnd
|
|
|
|
function called with a null buf argument may fail and return NULL if:
|
|
|
|
.Bl -tag -width Er
|
|
|
|
.It Bq Er ENOMEM
|
|
|
|
Insufficient storage space is available.
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn MDXFile
|
|
|
|
and
|
|
|
|
.Fn MDXFileChunk
|
2020-10-09 19:12:44 +00:00
|
|
|
may return NULL when underlying
|
2019-05-21 22:11:53 +00:00
|
|
|
.Xr open 2 ,
|
|
|
|
.Xr fstat 2 ,
|
|
|
|
.Xr lseek 2 ,
|
|
|
|
or
|
|
|
|
.Xr MDXEnd 2
|
|
|
|
fail.
|
1994-07-24 03:29:56 +00:00
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr md4 3 ,
|
1999-02-26 04:25:01 +00:00
|
|
|
.Xr md5 3 ,
|
2016-05-29 01:15:36 +00:00
|
|
|
.Xr ripemd 3 ,
|
|
|
|
.Xr sha 3 ,
|
|
|
|
.Xr sha256 3 ,
|
|
|
|
.Xr sha512 3 ,
|
|
|
|
.Xr skein 3
|
1996-10-09 21:00:48 +00:00
|
|
|
.Rs
|
|
|
|
.%A R. Rivest
|
|
|
|
.%T The MD4 Message-Digest Algorithm
|
|
|
|
.%O RFC 1186
|
|
|
|
.Re
|
|
|
|
.Rs
|
|
|
|
.%A R. Rivest
|
|
|
|
.%T The MD5 Message-Digest Algorithm
|
|
|
|
.%O RFC 1321
|
|
|
|
.Re
|
|
|
|
.Rs
|
1999-02-11 20:31:49 +00:00
|
|
|
.%A H. Dobbertin
|
|
|
|
.%T Alf Swindles Ann
|
|
|
|
.%J CryptoBytes
|
|
|
|
.%N 1(3):5
|
|
|
|
.%D 1995
|
|
|
|
.Re
|
|
|
|
.Rs
|
|
|
|
.%A MJ. B. Robshaw
|
|
|
|
.%T On Recent Results for MD2, MD4 and MD5
|
|
|
|
.%J RSA Laboratories Bulletin
|
|
|
|
.%N 4
|
|
|
|
.%D November 12, 1996
|
1996-10-09 21:00:48 +00:00
|
|
|
.Re
|
2005-01-20 09:17:07 +00:00
|
|
|
.Sh HISTORY
|
|
|
|
These functions appeared in
|
|
|
|
.Fx 2.0 .
|
1998-03-19 07:34:22 +00:00
|
|
|
.Sh AUTHORS
|
1996-10-09 21:00:48 +00:00
|
|
|
The original MDX routines were developed by
|
|
|
|
.Tn RSA
|
|
|
|
Data Security, Inc., and published in the above references.
|
1998-03-19 07:34:22 +00:00
|
|
|
This code is derived directly from these implementations by
|
2014-06-23 08:23:05 +00:00
|
|
|
.An Poul-Henning Kamp Aq Mt phk@FreeBSD.org .
|
1996-10-09 21:00:48 +00:00
|
|
|
.Pp
|
1994-07-24 03:29:56 +00:00
|
|
|
Phk ristede runen.
|
|
|
|
.Sh BUGS
|
2019-05-21 22:17:00 +00:00
|
|
|
The
|
|
|
|
.Tn MD5
|
|
|
|
algorithm has been proven to be vulnerable to practical collision
|
|
|
|
attacks and should not be relied upon to produce unique outputs,
|
|
|
|
.Em nor should they be used as part of a cryptographic signature scheme.
|