This change fixes deviations on 64-bit implementations of LispWorks,
where sys:int32 arithmetic is not performed modulo 2^32, but rather
overflows to 64-bit values, yielding wrong results.
This is compatible to the SBCL addition of the same name and signature.
The current implementation supports CMUCL, SBCL, CCL and LispWorks
external-format handling, as well as identity transform for 8bit
characters in other implementations.
In all previous versions, if an update-md5-state call received a
sequence which exactly filled a partially filled buffer, then that
buffer block was ignored and the agregate data not updated.
Since the code in question was needlessly convoluted, rewrote those
sections to make them clearer. Added another test-suite to test whether
padding works correctly, when compared with md5sum.
o This takes on board comments by Raymond Toy, and drops optimizations
and implementation-specific cruft that isn't really needed.
o The code has been reorganized quite a bit, to better expose the
structure
o md5-checksum is renamed to md5-digest.
o Added doc-strings and comments where necessary, added documentation to
the file comment.
o Added md5sum-sequence function.
o Fixed restriction on <512MB of input, we now support unlimited amounts
of input, as required by the spec. Since this causes one possibly
bignum addition per call to update-md5-block, the user can revert
to the old behaviour by putting :md5-small-length on *features* prior
to compiling/loading the code.
o Added test suite that is contained in Appendix A.5 of RFC 1321.
using kernel:32bit-logical-* instead of the silly signed-byte acrobatics
that were previously needed to get the various logical and ash operations
optimized. Also added rudimentary file-comment.