CL implementation of MD5

A fast implementation of MD5 message-digests

Prompted by discussions on the cmucl-help mailing list over an efficient implementation of MD5 message-digests for CMU CL, I tuned a silly implementation of MD5 I had done a while ago, with much help and input from other developers and users on the cmucl-help mailing list, to a level where it is competitive with the standard md5sum utility for large files. It performed within a factor of 1.15-1.5 of the md5sum utility on 40-60 MB files both on UltraSPARC and AMD K6-2-550 hardware, using current (this was before the 18d release) binaries of CMU CL.

That was in 2001, and the result of this effort was available from here and in various tweaked versions from other places. I've now produced a new consolidated version with asdf packaging that is tuned to some degree for CMU CL, SBCL and LispWorks and consolidates all other tweaks and fixes I'm aware of.


Versions of md5.lisp downloaded from this site prior to 22-03-2003 did contain a bug in the handling of padding which caused wrong message-digests being calculated for data whose length was exactly 56 + X*64 bytes. This bug has been fixed since version 1.8 (released in March 2003) and all later versions available from here.

The implementation has been placed into the public domain (see the file COPYING in the distribution), is provided "as is", and has no warranty of any kind. The authors assume no responsibility for the consequences of any use of this software.

The current release can be downloaded from here:

or you can get the release, sources and git repository access from the project's page at GitHub: