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.