2010-09-30   Gisle Aas <gisle@ActiveState.com>

   Release 2.50

   Florian Ragwitz (1):
      Fix compilation with c++ compilers

   Gisle Aas (1):
      Fix repository specification in META.yml



2010-09-25   Gisle Aas <gisle@ActiveState.com>

   Release 2.50

   Chris 'BinGOs' Williams (1):
      Amended tests to work with perl core.

   Florian Ragwitz (3):
      Attach context pointers using sv magic
      Add failing test for thread cloning
      Clone MD5 contexts on thread cloning
      get_md5_ctx should never return anything but a valid pointer

   Gisle Aas (1):
      perl-5.6 no longer supported

   Jesse Vincent (1):
      Preserve utf8ness of argument [RT#44927]



2010-07-03   Gisle Aas <gisle@ActiveState.com>

   Release 2.40

   Marc Pignat (1):
      Safer alignment test [RT#35823]

   Robin Barker (1):
      consting in new ext/

   Gisle Aas (1):
      Remove the MacOS branch of this test



2009-06-09   Gisle Aas <gisle@ActiveState.com>

   Release 2.39

   Nicholas Clark (2):
      Get rid of the PERL_CORE hacks
      Sync core: Rename ext/Digest/MD5 to ext/Digest-MD5

   Jerry Hedden (1):
      Handle non-numeric version numbers in ext/Digest/MD5/Makefile.PL



2008-11-14   Gisle Aas <gisle@ActiveState.com>

   Release 2.38

   The 2.37 tarball was infected by various '._*' files.
   Thank you, Mac OS X!

   Applied warning fix from Geoff Richards [RT#19643]

   Applied compatiblity fix from Alexandr Ciornii [RT#30348]



2008-11-12   Gisle Aas <gisle@ActiveState.com>

   Release 2.37

   Sync up with consting changes from the perl core.



2005-11-30   Gisle Aas <gisle@ActiveState.com>

   Release 2.36

   Fix documentation typo.



2005-11-26   Gisle Aas <gisle@ActiveState.com>

   Release 2.35

   Forgot to incorporate fixes already applied to bleadperl :-(
     - doc typo
     - consting
     - unused my_na
     - USE_HEAP_INSTEAD_OF_STACK for Symbian



2005-11-26   Gisle Aas <gisle@ActiveState.com>

   Release 2.34

   Document that it is now easy to generate different messages that produce the
   same MD5 digest.

   Use XSLoader; perl-5.6 is now required.

   Tweaks to the processing of $? after running the test program.



2003-12-07   Gisle Aas <gisle@ActiveState.com>

   Release 2.33
   
   Enable explicit context passing for slight performance
   improvement in threaded perls.
   
   Tweaks to the Makefile.PL so that it is suitable both for
   core and CPAN use.



2003-12-05   Gisle Aas <gisle@ActiveState.com>

   Release 2.32

   Don't run u32align test program on HP-UX 10.20 as it
   will hang.  Patch by H.Merijn Brand <h.m.brand@hccnet.nl>.

   Fixed documentation typo.



2003-11-28   Gisle Aas <gisle@ActiveState.com>

   Release 2.31

   Inherit add_bits() from Digest::base if available.



2003-10-09   Gisle Aas <gisle@ActiveState.com>

   Release 2.30

   Some tweaks to make the module build on perl-5.004 and
   perl-5.005 again.



2003-10-06   Gisle Aas <gisle@ActiveState.com>

   Release 2.29

   Another try.  Forgot to update the test checksums.



2003-10-06   Gisle Aas <gisle@ActiveState.com>

   Release 2.28

   Fix minor documentation typo.



2003-08-04   Gisle Aas <gisle@ActiveState.com>

   Release 2.27

   Avoid having to figure how to compile alignment test program
   on MS-Windows by just assume free alignment as for i386.  Source
   builds on Windows was apparently broken.



2003-07-21   Gisle Aas <gisle@ActiveState.com>

   Release 2.26

   Don't assume PerlIO_read() works like fread() even though
   it was documented like that for perl 5.6.  It returns negative
   on read failure.

   Kill test #3 in t/badfile.t.  I don't know a reliable way
   to test read failures on a file handle.  Seems better not to
   test than to make many worry.



2003-07-04   Gisle Aas <gisle@ActiveState.com>

   Release 2.25

   The $md5->addfile method now croaks if it discovers
   errors on the handle after reading from it.  This should
   make it more difficult to end up with the wrong digest
   just because you are to lazy to check the error status
   on your file handles after reading from them.

   Improved documentation.

   Sync up with bleadperl; even safer patchlevel include.



2003-03-09   Gisle Aas <gisle@ActiveState.com>

   Release 2.24

   Don't let the $^W test get confused by lexical warnings.

   Sync up with bleadperl; safer patchlevel include.



2003-01-18   Gisle Aas <gisle@ActiveState.com>

   Release 2.23

   Override INSTALLDIRS for 5.8 as suggested by
   Guido Ostkamp <Guido.Ostkamp@t-online.de>.



2003-01-04   Gisle Aas <gisle@ActiveState.com>

   Release 2.22.

   Added clone method.
   Contributed by Holger Smolinski <holger@kunterbunt.bb.bawue.de>



2002-12-27   Gisle Aas <gisle@ActiveState.com>

   Release 2.21

   Minor tweaks sync up with bleadperl:
     - VMS optimizer tweaks to the Makefile.PL
     - MacOS support
     - Added alignment test

   Added example to the MD5 POD that shows how to calculate the
   digest of Unicode strings.



2002-05-05   Gisle Aas <gisle@ActiveState.com>

   Release 2.20

   More synchronization with tweaks Jarkko have done to the
   bleadperl test suite. This time various EBCDIC hacks.

   Outside PERL_CORE the md5-aaa.t test loaded the wrong version of
   the module (and would fail if no previous Digest::MD5 was installed).
   Patch by Mike Stok <mike@stok.co.uk>



2002-05-01   Gisle Aas <gisle@ActiveState.com>

   Release 2.19

   One more test suite update from Jarkko to sync it
   even better with bleadperl.



2002-05-01   Gisle Aas <gisle@ActiveState.com>

   Release 2.18

   Changes #12954 and #16173 from bleadperl.  Documentation typo fix
   and some signed/unsigned mismatches that Microsoft's C compiler
   complained about.

   The EBCDIC-aware md5-aaa.t from bleadperl.



2002-04-25   Gisle Aas <gisle@ActiveState.com>

   Release 2.17

   The SvPVbyte in perl-5.6.1 is buggy.  Use the one from 5.7.3
   instead.

   Give warning if the function interface is used as instance
   methods:  $md5->md5_hex().



2001-09-07   Gisle Aas <gisle@ActiveState.com>

   Release 2.16

   Sync up with the bleadperl version:
      - use SvPVbyte() if available
      - fixes to make the code 'gcc -Wall'-clean



2001-08-27   Gisle Aas <gisle@ActiveState.com>

   Release 2.15

   Avoid exit() in Makefile.PL and bleadperl redefinition of printf
   in the alignment test program.
   Patch by Doug MacEachern <dougm@covalent.net>.



2001-07-18   Gisle Aas <gisle@ActiveState.com>

   Release 2.14

   Try to warn if the functional interface is used as methods,
   i.e. Digest::MD5->md5_hex("foo") will make noise if -w is
   enabled.

   Document the missing padding for the base64 digests.

   If both XS bootstrap and locating Digest::Perl::MD5 fails
   re-raise the original XS bootstrap exception.



2001-03-13   Gisle Aas <gisle@ActiveState.com>

   Release 2.13

   Moved all other Digest:: modules out of the Digest-MD5 dist.



2000-09-18   Gisle Aas <gisle@ActiveState.com>

   Release 2.12

   Avoid pointer cast warning for machines with bigger ints
   than pointers.  Patch by Robin Barker <rmb1@cise.npl.co.uk>.



2000-08-19   Gisle Aas <gisle@ActiveState.com>

   Release 2.11
   
   The fallback code introduced in 2.10 did only work for
   perl-5.6.0.  It should now for for perl5.004 and 5.005
   as well.  Patch by Ville Skyttä <ville@office.popsystems.com>.



2000-08-18   Gisle Aas <gisle@ActiveState.com>

   Release 2.10

   Digest::MD5 will now try to fallback to the pure perl
   implementation of Digest::Perl::MD5 if bootstrap fails.

   Added a bit internal paranoia about casting the IV
   in the Digest::MD5 object to the MD5_CTX* pointer.



1999-08-06   Gisle Aas <gisle@aas.no>

   Release 2.09

   Documentation update.



1999-07-28   Gisle Aas <gisle@aas.no>

   Release 2.08

   The addfile() methods could trigger a core dump when passed
   a filehandle that had failed to open.



1999-04-26   Gisle Aas <gisle@aas.no>

   Release 2.07

   The Digest::SHA1 module failed on some 64-bit systems, because I
   assumed there was a correspondence between the U32 size and
   BYTEORDER.  This version use 'unsigned long' as Uwe's original
   SHA module did.

   The module should now work better when liked statically with perl,
   because we now use a safer module-loaded test in Digest.pm.

   Assume we know the outcome of the alignment test on VMS. Patch by
   Chuck Lane <lane@duphy4.physics.drexel.edu>



1999-03-26   Gisle Aas <gisle@aas.no>

   Release 2.06

   Avoid LONG and BYTE types in SHA.xs as they was in conflict
   with similar definitions in <winnt.h>.

   Patch by Marko Asplund <aspa@hip.fi> to make the the alignment
   test program link successfully with sfio-perl.

   Fixed a typo in MD5.xs that might have affected 64-bit systems.
   Spotted by Nick Ing-Simmons



1999-03-15   Gisle Aas <gisle@aas.no>

   Release 2.05

   Included Digest::SHA1 based on Uwe Hollerbach's SHA module.



1999-03-05   Gisle Aas <gisle@aas.no>

   Release 2.04

   Avoid the -o option when compiling alignment test program
   for Win32 as suggested by Gurusamy Sarathy.

   DEC Compiler bug workaround.  Contributed by D Roland Walker
   <walker@ncbi.nlm.nih.gov>

   Having references to a local variable called "na" was not
   very safe either.  Some older versions of Perl can apparently
   macroize this into something completely different.



1999-02-27   Gisle Aas <gisle@aas.no>

   Release 2.03

   Patch from Christopher J. Madsen <chris_madsen@geocities.com> that
   should help getting the u32align test program to compile with
   Visual C++ 5 on Windows NT.

   Got rid of references to PL_na.



1999-01-31   Gisle Aas <gisle@aas.no>

   Release 2.02

   Added a hints file as workaround for an IRIX compiler bug.
   Contributed by D Roland Walker <walker@ncbi.nlm.nih.gov>.

   Note that the rfc2202 test can still fail on some DEC Alpha,
   because of a compiler bug that affects the perl 'x' operator.
   The Digest:: modules should work and be safe to install anyway.



1998-12-18   Gisle Aas <aas@sn.no>

   Release 2.01

   Some casts and tweaks to make picky compilers more happy.



1998-11-04   Gisle Aas <aas@sn.no>

   Release 2.00.

   Taken out Digest::SHA1 as this module will be provided from Uwe
   Hollerbach later.

   Some tweaks to MD2.xs and MD5.xs since "na" disappeared in
   perl5.005_53



1998-10-30   Gisle Aas <aas@sn.no>

   Release 1.99_60

   The 1.99_59 release introduced compilation problems for big-endian
   systems with free U32 alignment.  Bug reported, and fix suggested
   by Paul J. Schinder <schinder@pobox.com>.



1998-10-28   Gisle Aas <aas@sn.no>

   Release 1.99_59

   Makefile.PL will run a test program to find out if U32 values can
   be aligned anywhere.  This hopefully cures the core dumps reported
   on Solaris and other big endian systems.  Thanks to Graham Barr for
   debugging this.



1998-10-28   Gisle Aas <aas@sn.no>

   Release 1.99_58

   Should be very close to a 2.00 release now.  Need some success
   reports from people running on big-endian machines first I think.

   Added a Digest::MD2 implementation.

   Wrote Digest.pm documentation.  This define the interface that all
   Digest:: modules should provide.

   Avoided some code duplication in MD5.xs

   Fixed typo, that prevented Digest::SHA1::sha1_base64() from working.



1998-10-27   Gisle Aas <aas@sn.no>

   Release 1.99_57

   Rewritten most of the MD5 C code to make it real fast (especially
   on little-endian machines without alignment restrictions for U32).
   Compared to MD5-1.7 we can process files 4 times as fast and we
   digest small stuff in memory 7 times faster.  I came to these
   conclusions after these tests (gcc -O2, i586, Linux):

   First tested calculation of the digest of a 31 MB file, using
   perl -le 'print Digest::MD5->new->addfile(*STDIN)->hexdigest'
   and similar stuff:

      MD5-1.7:                 21.06s
      Digest::MD5-1.99_57:      5.23s
      md5sum (GNU textutils):   4.90s

   As you can see, we do nearly as good as the md5sum program.  I
   think the reason we don't beat md5sum is that perl always insist on
   loading extra modules like Config.pm, Carp.pm, strict.pm, vars.pm,
   AutoLoader.pm and DynaLoader.pm.  When I simply wrapped the MD5.xs
   hasher code in a C program I managed to process the file in 4.68s.

   Then we calculated the digest of the same 6 byte sting, 20000
   times:

      MD5-1.7:                 11.81s
      Digest::MD5-1.99_57:      1.68s

   Digest::MD5 benefit from making this into a plain procedure call
   instead of a static method call.


   Other changes in this release are:

   Documentation update

   Internal MD5.xs cleanup.

   $md5->digest will automatically reset now.

   Digest::HMAC methods add() and addfile() did not return the
   correct object.

   Added Digest.pm loading module.  I am not sure this is a good idea.

   Added Digest::SHA1 and Digest::HMAC_SHA1 module.  The Digest::SHA1
   module is just a wrapper around SHA.pm.  I hope to get the author
   of SHA.pm to move his module to the Digest:: category.



1998-10-25   Gisle Aas <aas@sn.no>

   Release 1.99_56

   Fix memcpy_byteswap() function in MD5.xs.  Must be careful with
   htovl() as it might evaluate its arguments more than once.



1998-10-25   Gisle Aas <aas@sn.no>

   Release 1.99_55

   Grahams HMAC_MD5.pm splitted into two modules.  Digest::HMAC and
   Digest::HMAC_MD5.  Also provide functional interface.  Documentation
   is still lacking.

   Included RFC 2202 based test for HMAC-MD5.



1998-10-24   Gisle Aas <aas@sn.no>

   Release 1.99_54

   Included HMAC_MD5.pm, contributed by Graham Barr <gbarr@ti.com>.

   I have a hard time to make up my mind :-)  md5_bin() renamed back
   to md5().   Functions are not exported by default any more.

   Try to Encode/Decode with memcpy_byteswap for 32-bit big-endian
   machines.



1998-10-23   Gisle Aas <aas@sn.no>

   Release 1.99_53

   Renamed core module as Digest::MD5.  Leave a MD5.pm stub for
   legacy code.

   The md5() function renamed as md5_bin().

   The constructor, Digest::MD5->new, no longer takes any extra
   arguments.

   Added some new tests.

   Updated the documentation.

   $md5->b64digest implemented with same base64 encoder as md5_base64.



1998-10-23   Gisle Aas <aas@sn.no>

   Release 1.99_52

   Patch from Graham Barr which make it work for big-endian machines
   again.



1998-10-22   Gisle Aas <aas@sn.no>

   Release 1.99_51

   The MD5 class is now subclassable.

   The add() and addfile() methods now return $self.

   The reset() method is just an alias for new().

   The constructor (MD5->new) now takes optional arguments which are
   automatically added.  It means that we can now write:

      MD5->new($data)->hexdigest;

   New $md5->b64digest method.

   New functions that are exported on request: md5, md5_hex, md5_base64

   Included RFC 1321

   Barely started to update the documentation.



1998-10-22   Gisle Aas <aas@sn.no>

   Release 1.99_50

   Much better performance (more than twice as fast now).  Mostly
   because we use Copy/Zero instead of the original MD5_memcpy and
   MD5_memset functions.

   The addfile() and hexdigest() methods are now XS implemented.

   All RSA functions now included in MD5.xs and made static.

   Use perl's Copy/Zero.

   Random cleanup, simplifications and reformatting.
   Merged things better with the perl configuration.



Neil Winton's versions below:


*** 96/06/20 Version 1.7

MD5 is now completely 64-bit clean (I hope). The basic MD5 code uses
32-bit quantities and requires a typedef UINT4 to be defined in
global.h. Perl configuration data (the value of BYTEORDER) is used to
determine if unsigned longs have 4 or 8 bytes. On 64-bit platforms (eg
DEC Alpha) then it assumes that "unsigned int" will be a 32-bit type.
If this is incorrect then adding -DUINT4_IS_LONG to the DEFINES line in
Makefile.PL will override this.

On some machines (at least Cray that I know of) there is no 32-bit
integer type. In this case defining TRUNCATE_UINT4 (which is done
automatically for a Cray) will ensure that 64-bit values are masked
down to 32 bits. I have done my best to test this but without easy
access to a true 64-bit machine I can not totally guarantee it (unless
anyone wants to lend me a spare Cray :-)

There is one remaining limitation for 64-bit enabled processors. The
amount of data passed to any single call to the underlying MD5
routines is limited to (2^32 - 1) bytes -- that's 4 gigabytes. I'm
sorry if that's a real problem for you ...

And finally, a minor compilation warning (unsigned char * used with
function having char * prototype) has also been eliminated.

*** 96/04/09 Version 1.6

Re-generated module framework using h2xs to pick up the latest module
conventions for versions etc. You can now say "use MD5 1.6;" and things
should work correctly. MD5.pod has been integrated into MD5.pm and
CHANGES renamed to Changes. There is a fairly comprehensive test.pl
which can be invoked via "make test". There are no functional changes
to the MD5 routines themselves.

*** 96/03/14 Version 1.5.3

Fixed addfile method to accept type-glob references for the file-handle
(eg \*STDOUT). This is more consistent with other routines and is now the
recommended way of passing file-handles. The documentation now gives more
examples as to how the routines might be used.

*** 96/03/12 Version 1.5.2

Minor fixes from Christopher J Madsen <madsen@computek.net> to provide
support for building on OS/2 (and to work around a perl -w bug).

Remove warning about possible difference between add('foo', 'bar') and
add('foobar'). This is not true (it may have been true in the earliest
version of the module but is no longer the case).

*** 96/03/08 Version 1.5.1

Add CHANGES file to make it easier for people to figure out what has
been going on. (Meant to do this as part of 1.5)

*** 96/03/05 Version 1.5

Add hash() and hexhash() methods at the suggestion/request of Gary
Howland <gary@kampai.euronet.nl> before inclusion in a wider library
of cryptography modules.

*** 96/02/27 Version 1.4

Finally fixed the pesky Solaris dynamic loading bug. All kudos to Ken
Pizzini <kenp@spry.com>!

*** 95/11/29 Version 1.3.1

Add explanations of current known problems.

*** 95/06/02 Version 1.3

Fix problems with scope resolution in addfile() reported by
Jean-Claude Giese <Jean-Claude.Giese@loria.fr>. Basically ARGV is
always implicitly in package main while other filehandles aren't.
 
*** 95/05/23 Version 1.2.1

[Changes pre 1.2.1 not recorded]
