r3617 - in /packages/libdigest-perl: ./ branches/ branches/upstream/
branches/upstream/current/ branches/upstream/current/Digest/
branches/upstream/current/t/ tags/
segre at users.alioth.debian.org
segre at users.alioth.debian.org
Sun Sep 3 02:14:43 UTC 2006
Author: segre
Date: Sun Sep 3 02:14:42 2006
New Revision: 3617
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=3617
Log:
[svn-inject] Installing original source of libdigest-perl
Added:
packages/libdigest-perl/
packages/libdigest-perl/branches/
packages/libdigest-perl/branches/upstream/
packages/libdigest-perl/branches/upstream/current/
packages/libdigest-perl/branches/upstream/current/Changes
packages/libdigest-perl/branches/upstream/current/Digest/
packages/libdigest-perl/branches/upstream/current/Digest.pm
packages/libdigest-perl/branches/upstream/current/Digest/base.pm
packages/libdigest-perl/branches/upstream/current/Digest/file.pm
packages/libdigest-perl/branches/upstream/current/MANIFEST
packages/libdigest-perl/branches/upstream/current/Makefile.PL
packages/libdigest-perl/branches/upstream/current/README
packages/libdigest-perl/branches/upstream/current/digest-bench (with props)
packages/libdigest-perl/branches/upstream/current/t/
packages/libdigest-perl/branches/upstream/current/t/base.t
packages/libdigest-perl/branches/upstream/current/t/digest.t
packages/libdigest-perl/branches/upstream/current/t/file.t
packages/libdigest-perl/tags/
Added: packages/libdigest-perl/branches/upstream/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/Changes?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/Changes (added)
+++ packages/libdigest-perl/branches/upstream/current/Changes Sun Sep 3 02:14:42 2006
@@ -1,0 +1,150 @@
+2006-13-20 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.15.
+
+ Improved documentation.
+
+
+
+2005-11-26 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.14
+
+ Documentation tweaks.
+
+
+
+2005-10-18 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.13
+
+ Fixed documentation typo.
+
+
+
+2005-09-29 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.12
+
+ Fix documentation typo. Patch by <steve at fisharerojo.org>.
+
+
+
+2005-09-11 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.11
+
+ Make Digest->new("SHA-224") work. Patch by Mark Shelor
+ <shelor at cpan.org>.
+
+
+
+2004-11-08 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.10
+
+ Added Digest::file module which provide convenience functions
+ that calculate digests of files.
+
+
+
+2004-11-05 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.09
+
+ Fix trivial documentation typo.
+
+
+
+2004-04-29 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.08
+
+ Make Digest->new("CRC-16"), Digest->new("CRC-32") and
+ Digest->new("CRC-CCITT") work.
+ Patch by Oliver Maul <oliver at maul.tv>.
+
+
+
+2004-04-25 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.07
+
+ Updated benchmark.
+
+
+
+2004-04-01 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.06
+
+ Added MIME::Base64 dependency.
+
+ Minor doc tweak.
+
+
+
+2003-12-01 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.05
+
+ Drop Digest::MD5 dependency. Avoids circular dependency
+ now that Digest::MD5 depend on this package to inherit
+ Digest::base.
+
+ Included a section about digest speed with benchmark
+ results for some implementations of this API.
+
+
+
+2003-11-29 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.04
+
+ Doc tweaks to unconfuse search.cpan.org.
+
+
+
+2003-11-28 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.03
+
+ Added add_bits() method as requested by the
+ Digest::SHA author Mark Shelor.
+
+ Added Digest::base class that Digest implementations
+ can use to get default implementations of addfile(),
+ add_bits(), hexdigest() and b64digest().
+
+ Digest->new("SHA-256") and similar should work now
+ given that you have either Digest::SHA or Digest::SHA2
+ installed.
+
+
+
+2003-01-18 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.02
+
+ Sync up with version bundled with perl-5.8.
+ Patch by Jarkko Hietaniemi <jhi at iki.fi>.
+
+ Override INSTALLDIRS for 5.8 as suggested by
+ Guido Ostkamp <Guido.Ostkamp at t-online.de>.
+
+
+
+2003-01-04 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.01
+
+ Document the clone() method.
+
+
+
+2001-03-13 Gisle Aas <gisle at ActiveState.com>
+
+ Release 1.00
+
+ Broken out of the Digest-MD5-2.12 distribution and made into
+ a separate dist.
Added: packages/libdigest-perl/branches/upstream/current/Digest.pm
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/Digest.pm?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/Digest.pm (added)
+++ packages/libdigest-perl/branches/upstream/current/Digest.pm Sun Sep 3 02:14:42 2006
@@ -1,0 +1,315 @@
+package Digest;
+
+use strict;
+use vars qw($VERSION %MMAP $AUTOLOAD);
+
+$VERSION = "1.15";
+
+%MMAP = (
+ "SHA-1" => ["Digest::SHA1", ["Digest::SHA", 1], ["Digest::SHA2", 1]],
+ "SHA-224" => [["Digest::SHA", 224]],
+ "SHA-256" => [["Digest::SHA", 256], ["Digest::SHA2", 256]],
+ "SHA-384" => [["Digest::SHA", 384], ["Digest::SHA2", 384]],
+ "SHA-512" => [["Digest::SHA", 512], ["Digest::SHA2", 512]],
+ "HMAC-MD5" => "Digest::HMAC_MD5",
+ "HMAC-SHA-1" => "Digest::HMAC_SHA1",
+ "CRC-16" => [["Digest::CRC", type => "crc16"]],
+ "CRC-32" => [["Digest::CRC", type => "crc32"]],
+ "CRC-CCITT" => [["Digest::CRC", type => "crcccitt"]],
+);
+
+sub new
+{
+ shift; # class ignored
+ my $algorithm = shift;
+ my $impl = $MMAP{$algorithm} || do {
+ $algorithm =~ s/\W+//;
+ "Digest::$algorithm";
+ };
+ $impl = [$impl] unless ref($impl);
+ my $err;
+ for (@$impl) {
+ my $class = $_;
+ my @args;
+ ($class, @args) = @$class if ref($class);
+ no strict 'refs';
+ unless (exists ${"$class\::"}{"VERSION"}) {
+ eval "require $class";
+ if ($@) {
+ $err ||= $@;
+ next;
+ }
+ }
+ return $class->new(@args, @_);
+ }
+ die $err;
+}
+
+sub AUTOLOAD
+{
+ my $class = shift;
+ my $algorithm = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
+ $class->new($algorithm, @_);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest - Modules that calculate message digests
+
+=head1 SYNOPSIS
+
+ $md5 = Digest->new("MD5");
+ $sha1 = Digest->new("SHA-1");
+ $sha256 = Digest->new("SHA-256");
+ $sha384 = Digest->new("SHA-384");
+ $sha512 = Digest->new("SHA-512");
+
+ $hmac = Digest->HMAC_MD5($key);
+
+=head1 DESCRIPTION
+
+The C<Digest::> modules calculate digests, also called "fingerprints"
+or "hashes", of some data, called a message. The digest is (usually)
+some small/fixed size string. The actual size of the digest depend of
+the algorithm used. The message is simply a sequence of arbitrary
+bytes or bits.
+
+An important property of the digest algorithms is that the digest is
+I<likely> to change if the message change in some way. Another
+property is that digest functions are one-way functions, that is it
+should be I<hard> to find a message that correspond to some given
+digest. Algorithms differ in how "likely" and how "hard", as well as
+how efficient they are to compute.
+
+Note that the properties of the algorithms change over time, as the
+algorithms are analyzed and machines grow faster. If your application
+for instance depends on it being "impossible" to generate the same
+digest for a different message it is wise to make it easy to plug in
+stronger algorithms as the one used grow weaker. Using the interface
+documented here should make it easy to change algorithms later.
+
+All C<Digest::> modules provide the same programming interface. A
+functional interface for simple use, as well as an object oriented
+interface that can handle messages of arbitrary length and which can
+read files directly.
+
+The digest can be delivered in three formats:
+
+=over 8
+
+=item I<binary>
+
+This is the most compact form, but it is not well suited for printing
+or embedding in places that can't handle arbitrary data.
+
+=item I<hex>
+
+A twice as long string of lowercase hexadecimal digits.
+
+=item I<base64>
+
+A string of portable printable characters. This is the base64 encoded
+representation of the digest with any trailing padding removed. The
+string will be about 30% longer than the binary version.
+L<MIME::Base64> tells you more about this encoding.
+
+=back
+
+
+The functional interface is simply importable functions with the same
+name as the algorithm. The functions take the message as argument and
+return the digest. Example:
+
+ use Digest::MD5 qw(md5);
+ $digest = md5($message);
+
+There are also versions of the functions with "_hex" or "_base64"
+appended to the name, which returns the digest in the indicated form.
+
+=head1 OO INTERFACE
+
+The following methods are available for all C<Digest::> modules:
+
+=over 4
+
+=item $ctx = Digest->XXX($arg,...)
+
+=item $ctx = Digest->new(XXX => $arg,...)
+
+=item $ctx = Digest::XXX->new($arg,...)
+
+The constructor returns some object that encapsulate the state of the
+message-digest algorithm. You can add data to the object and finally
+ask for the digest. The "XXX" should of course be replaced by the proper
+name of the digest algorithm you want to use.
+
+The two first forms are simply syntactic sugar which automatically
+load the right module on first use. The second form allow you to use
+algorithm names which contains letters which are not legal perl
+identifiers, e.g. "SHA-1". If no implementation for the given algorithm
+can be found, then an exception is raised.
+
+If new() is called as an instance method (i.e. $ctx->new) it will just
+reset the state the object to the state of a newly created object. No
+new object is created in this case, and the return value is the
+reference to the object (i.e. $ctx).
+
+=item $other_ctx = $ctx->clone
+
+The clone method creates a copy of the digest state object and returns
+a reference to the copy.
+
+=item $ctx->reset
+
+This is just an alias for $ctx->new.
+
+=item $ctx->add( $data )
+
+=item $ctx->add( $chunk1, $chunk2, ... )
+
+The string value of the $data provided as argument is appended to the
+message we calculate the digest for. The return value is the $ctx
+object itself.
+
+If more arguments are provided then they are all appended to the
+message, thus all these lines will have the same effect on the state
+of the $ctx object:
+
+ $ctx->add("a"); $ctx->add("b"); $ctx->add("c");
+ $ctx->add("a")->add("b")->add("c");
+ $ctx->add("a", "b", "c");
+ $ctx->add("abc");
+
+Most algorithms are only defined for strings of bytes and this method
+might therefore croak if the provided arguments contain chars with
+ordinal number above 255.
+
+=item $ctx->addfile( $io_handle )
+
+The $io_handle is read until EOF and the content is appended to the
+message we calculate the digest for. The return value is the $ctx
+object itself.
+
+The addfile() method will croak() if it fails reading data for some
+reason. If it croaks it is unpredictable what the state of the $ctx
+object will be in. The addfile() method might have been able to read
+the file partially before it failed. It is probably wise to discard
+or reset the $ctx object if this occurs.
+
+In most cases you want to make sure that the $io_handle is in
+"binmode" before you pass it as argument to the addfile() method.
+
+=item $ctx->add_bits( $data, $nbits )
+
+=item $ctx->add_bits( $bitstring )
+
+The add_bits() method is an alternative to add() that allow partial
+bytes to be appended to the message. Most users should just ignore
+this method as partial bytes is very unlikely to be of any practical
+use.
+
+The two argument form of add_bits() will add the first $nbits bits
+from $data. For the last potentially partial byte only the high order
+C<< $nbits % 8 >> bits are used. If $nbits is greater than C<<
+length($data) * 8 >>, then this method would do the same as C<<
+$ctx->add($data) >>.
+
+The one argument form of add_bits() takes a $bitstring of "1" and "0"
+chars as argument. It's a shorthand for C<< $ctx->add_bits(pack("B*",
+$bitstring), length($bitstring)) >>.
+
+The return value is the $ctx object itself.
+
+This example shows two calls that should have the same effect:
+
+ $ctx->add_bits("111100001010");
+ $ctx->add_bits("\xF0\xA0", 12);
+
+Most digest algorithms are byte based and for these it is not possible
+to add bits that are not a multiple of 8, and the add_bits() method
+will croak if you try.
+
+=item $ctx->digest
+
+Return the binary digest for the message.
+
+Note that the C<digest> operation is effectively a destructive,
+read-once operation. Once it has been performed, the $ctx object is
+automatically C<reset> and can be used to calculate another digest
+value. Call $ctx->clone->digest if you want to calculate the digest
+without resetting the digest state.
+
+=item $ctx->hexdigest
+
+Same as $ctx->digest, but will return the digest in hexadecimal form.
+
+=item $ctx->b64digest
+
+Same as $ctx->digest, but will return the digest as a base64 encoded
+string.
+
+=back
+
+=head1 Digest speed
+
+This table should give some indication on the relative speed of
+different algorithms. It is sorted by throughput based on a benchmark
+done with of some implementations of this API:
+
+ Algorithm Size Implementation MB/s
+
+ MD4 128 Digest::MD4 v1.3 165.0
+ MD5 128 Digest::MD5 v2.33 98.8
+ SHA-256 256 Digest::SHA2 v1.1.0 66.7
+ SHA-1 160 Digest::SHA v4.3.1 58.9
+ SHA-1 160 Digest::SHA1 v2.10 48.8
+ SHA-256 256 Digest::SHA v4.3.1 41.3
+ Haval-256 256 Digest::Haval256 v1.0.4 39.8
+ SHA-384 384 Digest::SHA2 v1.1.0 19.6
+ SHA-512 512 Digest::SHA2 v1.1.0 19.3
+ SHA-384 384 Digest::SHA v4.3.1 19.2
+ SHA-512 512 Digest::SHA v4.3.1 19.2
+ Whirlpool 512 Digest::Whirlpool v1.0.2 13.0
+ MD2 128 Digest::MD2 v2.03 9.5
+
+ Adler-32 32 Digest::Adler32 v0.03 1.3
+ CRC-16 16 Digest::CRC v0.05 1.1
+ CRC-32 32 Digest::CRC v0.05 1.1
+ MD5 128 Digest::Perl::MD5 v1.5 1.0
+ CRC-CCITT 16 Digest::CRC v0.05 0.8
+
+These numbers was achieved Apr 2004 with ActivePerl-5.8.3 running
+under Linux on a P4 2.8 GHz CPU. The last 5 entries differ by being
+pure perl implementations of the algorithms, which explains why they
+are so slow.
+
+=head1 SEE ALSO
+
+L<Digest::Adler32>, L<Digest::CRC>, L<Digest::Haval256>,
+L<Digest::HMAC>, L<Digest::MD2>, L<Digest::MD4>, L<Digest::MD5>,
+L<Digest::SHA>, L<Digest::SHA1>, L<Digest::SHA2>, L<Digest::Whirlpool>
+
+New digest implementations should consider subclassing from L<Digest::base>.
+
+L<MIME::Base64>
+
+http://en.wikipedia.org/wiki/Cryptographic_hash_function
+
+=head1 AUTHOR
+
+Gisle Aas <gisle at aas.no>
+
+The C<Digest::> interface is based on the interface originally
+developed by Neil Winton for his C<MD5> module.
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+ Copyright 1998-2006 Gisle Aas.
+ Copyright 1995,1996 Neil Winton.
+
+=cut
Added: packages/libdigest-perl/branches/upstream/current/Digest/base.pm
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/Digest/base.pm?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/Digest/base.pm (added)
+++ packages/libdigest-perl/branches/upstream/current/Digest/base.pm Sun Sep 3 02:14:42 2006
@@ -1,0 +1,100 @@
+package Digest::base;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = "1.00";
+
+# subclass is supposed to implement at least these
+sub new;
+sub clone;
+sub add;
+sub digest;
+
+sub reset {
+ my $self = shift;
+ $self->new(@_); # ugly
+}
+
+sub addfile {
+ my ($self, $handle) = @_;
+
+ my $n;
+ my $buf = "";
+
+ while (($n = read($handle, $buf, 4*1024))) {
+ $self->add($buf);
+ }
+ unless (defined $n) {
+ require Carp;
+ Carp::croak("Read failed: $!");
+ }
+
+ $self;
+}
+
+sub add_bits {
+ my $self = shift;
+ my $bits;
+ my $nbits;
+ if (@_ == 1) {
+ my $arg = shift;
+ $bits = pack("B*", $arg);
+ $nbits = length($arg);
+ }
+ else {
+ ($bits, $nbits) = @_;
+ }
+ if (($nbits % 8) != 0) {
+ require Carp;
+ Carp::croak("Number of bits must be multiple of 8 for this algorithm");
+ }
+ return $self->add(substr($bits, 0, $nbits/8));
+}
+
+sub hexdigest {
+ my $self = shift;
+ return unpack("H*", $self->digest(@_));
+}
+
+sub b64digest {
+ my $self = shift;
+ require MIME::Base64;
+ my $b64 = MIME::Base64::encode($self->digest(@_), "");
+ $b64 =~ s/=+$//;
+ return $b64;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest::base - Digest base class
+
+=head1 SYNOPSIS
+
+ package Digest::Foo;
+ use base 'Digest::base';
+
+=head1 DESCRIPTION
+
+The C<Digest::base> class provide implementations of the methods
+C<addfile> and C<add_bits> in terms of C<add>, and of the methods
+C<hexdigest> and C<b64digest> in terms of C<digest>.
+
+Digest implementations might want to inherit from this class to get
+this implementations of the alternative I<add> and I<digest> methods.
+A minimal subclass needs to implement the following methods by itself:
+
+ new
+ clone
+ add
+ digest
+
+The arguments and expected behaviour of these methods are described in
+L<Digest>.
+
+=head1 SEE ALSO
+
+L<Digest>
Added: packages/libdigest-perl/branches/upstream/current/Digest/file.pm
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/Digest/file.pm?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/Digest/file.pm (added)
+++ packages/libdigest-perl/branches/upstream/current/Digest/file.pm Sun Sep 3 02:14:42 2006
@@ -1,0 +1,85 @@
+package Digest::file;
+
+use strict;
+
+use Exporter ();
+use Carp qw(croak);
+use Digest ();
+
+use vars qw($VERSION @ISA @EXPORT_OK);
+
+$VERSION = "1.00";
+ at ISA = qw(Exporter);
+ at EXPORT_OK = qw(digest_file_ctx digest_file digest_file_hex digest_file_base64);
+
+sub digest_file_ctx {
+ my $file = shift;
+ croak("No digest algorithm specified") unless @_;
+ local *F;
+ open(F, $file) || croak("Can't open '$file': $!");
+ binmode(F);
+ my $ctx = Digest->new(@_);
+ $ctx->addfile(*F);
+ close(F);
+ return $ctx;
+}
+
+sub digest_file {
+ digest_file_ctx(@_)->digest;
+}
+
+sub digest_file_hex {
+ digest_file_ctx(@_)->hexdigest;
+}
+
+sub digest_file_base64 {
+ digest_file_ctx(@_)->b64digest;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest::file - Calculate digests of files
+
+=head1 SYNOPSIS
+
+ # Poor mans "md5sum" command
+ use Digest::file qw(digest_file_hex);
+ for (@ARGV) {
+ print digest_file_hex($_, "MD5"), " $_\n";
+ }
+
+=head1 DESCRIPTION
+
+This module provide 3 convenience functions to calculate the digest
+of files. The following functions are provided:
+
+=over
+
+=item digest_file( $file, $algorithm, [$arg,...] )
+
+This function will calculate and return the binary digest of the bytes
+of the given file. The function will croak if it fails to open or
+read the file.
+
+The $algorithm is a string like "MD2", "MD5", "SHA-1", "SHA-512".
+Additional arguments are passed to the constructor for the
+implementation of the given algorithm.
+
+=item digest_file_hex( $file, $algorithm, [$arg,...] )
+
+Same as digest_file(), but return the digest in hex form.
+
+=item digest_file_base64( $file, $algorithm, [$arg,...] )
+
+Same as digest_file(), but return the digest as a base64 encoded
+string.
+
+=back
+
+=head1 SEE ALSO
+
+L<Digest>
Added: packages/libdigest-perl/branches/upstream/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/MANIFEST?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/MANIFEST (added)
+++ packages/libdigest-perl/branches/upstream/current/MANIFEST Sun Sep 3 02:14:42 2006
@@ -1,0 +1,11 @@
+Changes
+Digest.pm
+Digest/base.pm
+Digest/file.pm
+digest-bench
+MANIFEST
+Makefile.PL
+README
+t/base.t
+t/digest.t
+t/file.t
Added: packages/libdigest-perl/branches/upstream/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/Makefile.PL?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/Makefile.PL (added)
+++ packages/libdigest-perl/branches/upstream/current/Makefile.PL Sun Sep 3 02:14:42 2006
@@ -1,0 +1,10 @@
+require 5.004;
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ 'NAME' => 'Digest',
+ 'VERSION_FROM' => 'Digest.pm',
+ ($] >= 5.008 ? ('INSTALLDIRS' => 'perl') : ()),
+ 'PREREQ_PM' => { 'MIME::Base64' => 0, },
+ 'dist' => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+);
Added: packages/libdigest-perl/branches/upstream/current/README
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/README?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/README (added)
+++ packages/libdigest-perl/branches/upstream/current/README Sun Sep 3 02:14:42 2006
@@ -1,0 +1,11 @@
+This is just a simple frontend module for autoloading of various
+Digest:: modules. It also provide documentation of the interface that
+all Digest:: modules should provide.
+
+You will need perl version 5.004 or better to install this module.
+
+Copyright 1998-2006 Gisle Aas.
+Copyright 1995-1996 Neil Winton.
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
Added: packages/libdigest-perl/branches/upstream/current/digest-bench
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/digest-bench?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/digest-bench (added)
+++ packages/libdigest-perl/branches/upstream/current/digest-bench Sun Sep 3 02:14:42 2006
@@ -1,0 +1,28 @@
+#!/usr/bin/perl -w
+
+use strict;
+die unless @ARGV;
+
+my($mod, @args) = @ARGV;
+
+eval "require $mod"; die $@ if $@;
+
+$a = substr(join("", "a" .. "z",) x 800, 0, 8 * 1024);
+my $count = 4*1024;
+
+use Time::HiRes qw(time);
+
+my $before = time;
+my $ctx = $mod->new(@args);
+for (1 .. $count) {
+ $ctx->add($a);
+}
+print $ctx->hexdigest, "\n";
+
+my $sec = time - $before;
+my $bytes = length($a) * $count;
+
+print "$bytes/$sec\n";
+
+my $vers = do { no strict 'refs'; ${$mod . '::VERSION'} };
+printf "$mod $vers\t%.2f MB/s\n", $bytes/(1024*1024*$sec)
Propchange: packages/libdigest-perl/branches/upstream/current/digest-bench
------------------------------------------------------------------------------
svn:executable =
Added: packages/libdigest-perl/branches/upstream/current/t/base.t
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/t/base.t?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/t/base.t (added)
+++ packages/libdigest-perl/branches/upstream/current/t/base.t Sun Sep 3 02:14:42 2006
@@ -1,0 +1,76 @@
+#!perl -w
+
+use Test qw(plan ok);
+plan tests => 12;
+
+{
+ package LenDigest;
+ require Digest::base;
+ use vars qw(@ISA);
+ @ISA = qw(Digest::base);
+
+ sub new {
+ my $class = shift;
+ my $str = "";
+ bless \$str, $class;
+ }
+
+ sub add {
+ my $self = shift;
+ $$self .= join("", @_);
+ return $self;
+ }
+
+ sub digest {
+ my $self = shift;
+ my $len = length($$self);
+ my $first = ($len > 0) ? substr($$self, 0, 1) : "X";
+ $$self = "";
+ return sprintf "$first%04d", $len;
+ }
+}
+
+my $ctx = LenDigest->new;
+ok($ctx->digest, "X0000");
+ok($ctx->hexdigest, "5830303030");
+ok($ctx->b64digest, "WDAwMDA");
+
+$ctx->add("foo");
+ok($ctx->digest, "f0003");
+
+$ctx->add("foo");
+ok($ctx->hexdigest, "6630303033");
+
+$ctx->add("foo");
+ok($ctx->b64digest, "ZjAwMDM");
+
+open(F, ">xxtest$$") || die;
+binmode(F);
+print F "abc" x 100, "\n";
+close(F) || die;
+
+open(F, "xxtest$$") || die;
+$ctx->addfile(*F);
+close(F);
+unlink("xxtest$$") || warn;
+
+ok($ctx->digest, "a0301");
+
+eval {
+ $ctx->add_bits("1010");
+};
+ok($@ =~ /^Number of bits must be multiple of 8/);
+
+$ctx->add_bits("01010101");
+ok($ctx->digest, "U0001");
+
+eval {
+ $ctx->add_bits("abc", 12);
+};
+ok($@ =~ /^Number of bits must be multiple of 8/);
+
+$ctx->add_bits("abc", 16);
+ok($ctx->digest, "a0002");
+
+$ctx->add_bits("abc", 32);
+ok($ctx->digest, "a0003");
Added: packages/libdigest-perl/branches/upstream/current/t/digest.t
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/t/digest.t?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/t/digest.t (added)
+++ packages/libdigest-perl/branches/upstream/current/t/digest.t Sun Sep 3 02:14:42 2006
@@ -1,0 +1,36 @@
+print "1..3\n";
+
+use Digest;
+
+{
+ package Digest::Dummy;
+ use vars qw($VERSION @ISA);
+ $VERSION = 1;
+
+ require Digest::base;
+ @ISA = qw(Digest::base);
+
+ sub new {
+ my $class = shift;
+ my $d = shift || "ooo";
+ bless { d => $d }, $class;
+ }
+ sub add {}
+ sub digest { shift->{d} }
+}
+
+my $d;
+$d = Digest->new("Dummy");
+print "not " unless $d->digest eq "ooo";
+print "ok 1\n";
+
+$d = Digest->Dummy;
+print "not " unless $d->digest eq "ooo";
+print "ok 2\n";
+
+$Digest::MMAP{"Dummy-24"} = [["NotThere"], "NotThereEither", ["Digest::Dummy", 24]];
+$d = Digest->new("Dummy-24");
+print "not " unless $d->digest eq "24";
+print "ok 3\n";
+
+
Added: packages/libdigest-perl/branches/upstream/current/t/file.t
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libdigest-perl/branches/upstream/current/t/file.t?rev=3617&op=file
==============================================================================
--- packages/libdigest-perl/branches/upstream/current/t/file.t (added)
+++ packages/libdigest-perl/branches/upstream/current/t/file.t Sun Sep 3 02:14:42 2006
@@ -1,0 +1,46 @@
+#!perl -w
+
+use Test qw(plan ok);
+plan tests => 5;
+
+{
+ package Digest::Foo;
+ require Digest::base;
+ use vars qw(@ISA $VERSION);
+ @ISA = qw(Digest::base);
+
+ sub new {
+ my $class = shift;
+ my $str = "";
+ bless \$str, $class;
+ }
+
+ sub add {
+ my $self = shift;
+ $$self .= join("", @_);
+ return $self;
+ }
+
+ sub digest {
+ my $self = shift;
+ return sprintf "%04d", length($$self);
+ }
+}
+
+use Digest::file qw(digest_file digest_file_hex digest_file_base64);
+
+my $file = "test-$$";
+die if -f $file;
+open(F, ">$file") || die "Can't create '$file': $!";
+binmode(F);
+print F "foo\0\n";
+close(F) || die "Can't write '$file': $!";
+
+ok(digest_file($file, "Foo"), "0005");
+ok(digest_file_hex($file, "Foo"), "30303035");
+ok(digest_file_base64($file, "Foo"), "MDAwNQ");
+
+unlink($file) || warn "Can't unlink '$file': $!";
+
+ok(eval { digest_file("not-there.txt", "Foo") }, undef);
+ok($@);
More information about the Pkg-perl-cvs-commits
mailing list