The official description
of this algorithm can be found on the site of the RSA
Data Security, Inc. The following is a quote from this description.
The algorithm takes as input a message of arbitrary length and produces
as output a 128-bit "fingerprint" or "message digest"
of the input. It is conjectured that it is computationally infeasible to
produce two messages having the same message digest, or to produce any
message having a given prespecified target message digest. The MD5 algorithm
is intended for digital signature applications, where a large file must
be "compressed" in a secure manner before being encrypted with
a private (secret) key under a public-key cryptosystem such as RSA.
A Reference Implementation in the C language is also given at
the above site. In this paper, a direct translation into Ada is presented.
It was originally written by Rolf Ebert. (Unfortunately no more
credit can be given to the author, because neither postal nor e-mail address
are known.) This code, however, was missing required copyright references.
Except for some minor code changes, I only added comments and references
to the RSA Data Security, Inc. to Rolf Ebert's original code to make its
publication conform to the RSA copyright.