package Digest::Adler32; use strict; use vars qw($VERSION @ISA); $VERSION = '0.03'; require Digest::base; @ISA=qw(Digest::base); sub new { my $class = shift; if (ref $class) { $$class = 1; # reset return $class; } my $adler_state = 1; return bless \$adler_state, $class; } sub clone { my $self = shift; my $adler_state = $$self; return bless \$adler_state, ref($self); } # Based on RFC 1950 section 9 sub add { my $self = shift; my $s1 = $$self & 0x0000FFFF; my $s2 = ($$self >> 16) & 0x0000FFFF; for my $buf (@_) { for my $c (unpack("C*", $buf)) { $s1 = ($s1 + $c ) % 65521; $s2 = ($s2 + $s1) % 65521; } } $$self = ($s2 << 16) + $s1; return $self; } sub digest { my $self = shift; my $digest = pack("N", $$self); $$self = 1; # reset return $digest; } 1; =head1 NAME Digest::Adler32 - The Adler-32 checksum =head1 SYNOPSIS use Digest::Adler32; $a32 = Digest::Adler32->new; # add stuff $a32->add($some_data); $a32->addfile(*STDIN); # get digest print "Adler32: ", $a32->hexdigest, "\n"; =head1 DESCRIPTION The C module implements the Adler-32 checksum as specified in RFC 1950. The interface provided by this module is specified in L, but no functional interface is provided. A binary digest will be 4 bytes long. A hex digest will be 8 characters long. A base64 digest will be 6 characters long. =head1 SEE ALSO L, L =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Copyright 1996 L. Peter Deutsch and Jean-Loup Gailly Copyright 2001,2003 Gisle Aas =cut