Change 33958 by [EMAIL PROTECTED] on 2008/05/31 13:00:52 Integrate: [ 33779] Upgrade to Digest-SHA-5.47 [ 33780] Fix makefile for core building [ 33781] Tweaks to Digest-SHA's Makefile.PL that casued problems in the core. [ 33782] Somedays, Perforce makes me cranky. Fix perforce resolve of the changes to Digest-SHA's Makefile.PL.
Affected files ... ... //depot/maint-5.10/perl/MANIFEST#31 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/Changes#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/Makefile.PL#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/README#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/SHA.pm#3 delete ... //depot/maint-5.10/perl/ext/Digest/SHA/SHA.xs#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/bin/shasum#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/lib/Digest/SHA.pm#1 branch ... //depot/maint-5.10/perl/ext/Digest/SHA/src/hmac.c#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/src/hmac.h#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/src/sha.c#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/src/sha.h#3 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/allfcns.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/base64.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/bitbuf.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/dumpload.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/fips198.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/gg.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/gglong.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/hmacsha.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/ireland.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/methods.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/nistbit.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/nistbyte.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/rfc2202.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/sha1.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/sha224.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/sha256.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/sha384.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/sha512.t#2 integrate ... //depot/maint-5.10/perl/ext/Digest/SHA/t/woodbury.t#2 integrate Differences ... ==== //depot/maint-5.10/perl/MANIFEST#31 (text) ==== Index: perl/MANIFEST --- perl/MANIFEST#30~33957~ 2008-05-31 05:27:26.000000000 -0700 +++ perl/MANIFEST 2008-05-31 06:00:52.000000000 -0700 @@ -378,9 +378,9 @@ ext/Digest/MD5/typemap Digest::MD5 extension ext/Digest/SHA/bin/shasum shasum script ext/Digest/SHA/Changes Digest::SHA changes +ext/Digest/SHA/lib/Digest/SHA.pm Digest::SHA extension ext/Digest/SHA/Makefile.PL Digest::SHA Makefile.PL ext/Digest/SHA/README Digest::SHA README -ext/Digest/SHA/SHA.pm Digest::SHA extension ext/Digest/SHA/SHA.xs Digest::SHA extension ext/Digest/SHA/src/hmac.c Digest::SHA extension ext/Digest/SHA/src/hmac.h Digest::SHA extension ==== //depot/maint-5.10/perl/ext/Digest/SHA/Changes#3 (text) ==== Index: perl/ext/Digest/SHA/Changes --- perl/ext/Digest/SHA/Changes#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/Changes 2008-05-31 06:00:52.000000000 -0700 @@ -1,5 +1,14 @@ Revision history for Perl extension Digest::SHA. +5.47 Wed Apr 30 04:00:54 MST 2008 + - modified Makefile.PL to install in core for Perls >= 5.10 + -- thanks to Jerry Hedden for patch + - changed from #include <> to #include "" in SHA.xs + -- some platforms not able to find SHA source files + -- thanks to Alexandr Ciornii for testing + - moved .pm file to appropriate lib directory + - minor addition to META.yml + 5.46 Wed Apr 9 05:04:00 MST 2008 - modified Addfile to recognize leading and trailing whitespace in filenames (ref. rt.cpan.org #34690) ==== //depot/maint-5.10/perl/ext/Digest/SHA/Makefile.PL#2 (text) ==== Index: perl/ext/Digest/SHA/Makefile.PL --- perl/ext/Digest/SHA/Makefile.PL#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/Makefile.PL 2008-05-31 06:00:52.000000000 -0700 @@ -1,14 +1,19 @@ -require 5.006000; +require 5.003000; use ExtUtils::MakeMaker; use Getopt::Std; use Config; +my $PM = 'lib/Digest/SHA.pm'; + +my $PERL_CORE = 0; +$PERL_CORE = 1 if grep { $_ eq 'PERL_CORE=1' } @ARGV; + my %opts; getopts('tx', \%opts); -my @defines = ('-DSHA_PERL_MODULE'); - +my @defines; +push(@defines, '-DSHA_PERL_MODULE') if $] >= 5.004; push(@defines, '-DSHA_THREAD_SAFE') if $opts{'t'}; push(@defines, '-DNO_SHA_384_512') if $opts{'x'}; @@ -23,14 +28,20 @@ my $define = join(' ', @defines); -WriteMakefile( +my %att = ( 'NAME' => 'Digest::SHA', - 'VERSION_FROM' => 'SHA.pm', - 'PREREQ_PM' => {}, - 'AUTHOR' => 'Mark Shelor <[EMAIL PROTECTED]>', + 'VERSION_FROM' => $PM, 'LIBS' => [''], - MAN3PODS => {}, # Pods will be built by installman. 'DEFINE' => $define, 'INC' => '-I.', - 'NO_META' => 1, + $PERL_CORE ? () : ( + 'EXE_FILES' => [ 'shasum' ], + 'INSTALLDIRS' => ($] >= 5.010) ? 'perl' : 'site', + 'MAN3PODS' => {}, # Pods will be built by installman. + ), ); + +my $MMversion = $ExtUtils::MakeMaker::VERSION || 0; +$att{NO_META} = 1 unless $MMversion < 6.10_03; + +WriteMakefile(%att); ==== //depot/maint-5.10/perl/ext/Digest/SHA/README#3 (text) ==== Index: perl/ext/Digest/SHA/README --- perl/ext/Digest/SHA/README#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/README 2008-05-31 06:00:52.000000000 -0700 @@ -1,4 +1,4 @@ -Digest::SHA version 5.46 +Digest::SHA version 5.47 ======================== Digest::SHA is a complete implementation of the NIST Secure Hash ==== //depot/maint-5.10/perl/ext/Digest/SHA/SHA.xs#2 (text) ==== Index: perl/ext/Digest/SHA/SHA.xs --- perl/ext/Digest/SHA/SHA.xs#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/SHA.xs 2008-05-31 06:00:52.000000000 -0700 @@ -2,8 +2,8 @@ #include "perl.h" #include "XSUB.h" -#include <src/sha.c> -#include <src/hmac.c> +#include "src/sha.c" +#include "src/hmac.c" static int ix2alg[] = {1,1,1,224,224,224,256,256,256,384,384,384,512,512,512}; @@ -12,8 +12,8 @@ PROTOTYPES: ENABLE -#include <src/sha.h> -#include <src/hmac.h> +#include "src/sha.h" +#include "src/hmac.h" #ifndef INT2PTR #define INT2PTR(p, i) (p) (i) ==== //depot/maint-5.10/perl/ext/Digest/SHA/bin/shasum#3 (xtext) ==== Index: perl/ext/Digest/SHA/bin/shasum --- perl/ext/Digest/SHA/bin/shasum#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/bin/shasum 2008-05-31 06:00:52.000000000 -0700 @@ -4,8 +4,8 @@ # # Copyright (C) 2003-2008 Mark Shelor, All Rights Reserved # - # Version: 5.46 - # Wed Apr 9 05:04:00 MST 2008 + # Version: 5.47 + # Wed Apr 30 04:00:54 MST 2008 =head1 NAME @@ -74,7 +74,7 @@ use FileHandle; use Getopt::Long; -my $VERSION = "5.46"; +my $VERSION = "5.47"; # Try to use Digest::SHA, since it's faster. If not installed, ==== //depot/maint-5.10/perl/ext/Digest/SHA/lib/Digest/SHA.pm#1 (text) ==== Index: perl/ext/Digest/SHA/lib/Digest/SHA.pm --- /dev/null 2008-05-07 15:08:24.549929899 -0700 +++ perl/ext/Digest/SHA/lib/Digest/SHA.pm 2008-05-31 06:00:52.000000000 -0700 @@ -0,0 +1,668 @@ +package Digest::SHA; + +require 5.003000; + +use strict; +use integer; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); + +$VERSION = '5.46'; + +require Exporter; +require DynaLoader; [EMAIL PROTECTED] = qw(Exporter DynaLoader); [EMAIL PROTECTED] = qw( + hmac_sha1 hmac_sha1_base64 hmac_sha1_hex + hmac_sha224 hmac_sha224_base64 hmac_sha224_hex + hmac_sha256 hmac_sha256_base64 hmac_sha256_hex + hmac_sha384 hmac_sha384_base64 hmac_sha384_hex + hmac_sha512 hmac_sha512_base64 hmac_sha512_hex + sha1 sha1_base64 sha1_hex + sha224 sha224_base64 sha224_hex + sha256 sha256_base64 sha256_hex + sha384 sha384_base64 sha384_hex + sha512 sha512_base64 sha512_hex); + +# If possible, inherit from Digest::base (which depends on MIME::Base64) + +*addfile = \&Addfile; + +eval { + require MIME::Base64; + require Digest::base; + push(@ISA, 'Digest::base'); +}; +if ($@) { + *hexdigest = \&Hexdigest; + *b64digest = \&B64digest; +} + +# The following routines aren't time-critical, so they can be left in Perl + +sub new { + my($class, $alg) = @_; + $alg =~ s/\D+//g if defined $alg; + if (ref($class)) { # instance method + unless (defined($alg) && ($alg != $class->algorithm)) { + sharewind($$class); + return($class); + } + shaclose($$class) if $$class; + $$class = shaopen($alg) || return; + return($class); + } + $alg = 1 unless defined $alg; + my $state = shaopen($alg) || return; + my $self = \$state; + bless($self, $class); + return($self); +} + +sub DESTROY { + my $self = shift; + shaclose($$self) if $$self; +} + +sub clone { + my $self = shift; + my $state = shadup($$self) || return; + my $copy = \$state; + bless($copy, ref($self)); + return($copy); +} + +*reset = \&new; + +sub add_bits { + my($self, $data, $nbits) = @_; + unless (defined $nbits) { + $nbits = length($data); + $data = pack("B*", $data); + } + shawrite($data, $nbits, $$self); + return($self); +} + +sub _bail { + my $msg = shift; + + require Carp; + Carp::croak("$msg: $!"); +} + +sub _addfile { # this is "addfile" from Digest::base 1.00 + my ($self, $handle) = @_; + + my $n; + my $buf = ""; + + while (($n = read($handle, $buf, 4096))) { + $self->add($buf); + } + _bail("Read failed") unless defined $n; + + $self; +} + +sub Addfile { + my ($self, $file, $mode) = @_; + + return(_addfile($self, $file)) unless ref(\$file) eq 'SCALAR'; + + $mode = defined($mode) ? $mode : ""; + my ($binary, $portable) = map { $_ eq $mode } ("b", "p"); + my $text = -T $file; + + local *FH; + # protect any leading or trailing whitespace in $file; + # otherwise, 2-arg "open" will ignore them + $file =~ s#^(\s)#./$1#; + open(FH, "< $file\0") or _bail("Open failed"); + binmode(FH) if $binary || $portable; + + unless ($portable && $text) { + $self->_addfile(*FH); + close(FH); + return($self); + } + + my ($n1, $n2); + my ($buf1, $buf2) = ("", ""); + + while (($n1 = read(FH, $buf1, 4096))) { + while (substr($buf1, -1) eq "\015") { + $n2 = read(FH, $buf2, 4096); + _bail("Read failed") unless defined $n2; + last unless $n2; + $buf1 .= $buf2; + } + $buf1 =~ s/\015?\015\012/\012/g; # DOS/Windows + $buf1 =~ s/\015/\012/g; # early MacOS + $self->add($buf1); + } + _bail("Read failed") unless defined $n1; + close(FH); + + $self; +} + +sub dump { + my $self = shift; + my $file = shift || ""; + + shadump($file, $$self) || return; + return($self); +} + +sub load { + my $class = shift; + my $file = shift || ""; + if (ref($class)) { # instance method + shaclose($$class) if $$class; + $$class = shaload($file) || return; + return($class); + } + my $state = shaload($file) || return; + my $self = \$state; + bless($self, $class); + return($self); +} + +Digest::SHA->bootstrap($VERSION); + +1; +__END__ + +=head1 NAME + +Digest::SHA - Perl extension for SHA-1/224/256/384/512 + +=head1 SYNOPSIS + +In programs: + + # Functional interface + + use Digest::SHA qw(sha1 sha1_hex sha1_base64 ...); + + $digest = sha1($data); + $digest = sha1_hex($data); + $digest = sha1_base64($data); + + $digest = sha256($data); + $digest = sha384_hex($data); + $digest = sha512_base64($data); + + # Object-oriented + + use Digest::SHA; + + $sha = Digest::SHA->new($alg); + + $sha->add($data); # feed data into stream + + $sha->addfile(*F); + $sha->addfile($filename); + + $sha->add_bits($bits); + $sha->add_bits($data, $nbits); + + $sha_copy = $sha->clone; # if needed, make copy of + $sha->dump($file); # current digest state, + $sha->load($file); # or save it on disk + + $digest = $sha->digest; # compute digest + $digest = $sha->hexdigest; + $digest = $sha->b64digest; + +From the command line: + + $ shasum files + + $ shasum --help + +=head1 SYNOPSIS (HMAC-SHA) + + # Functional interface only + + use Digest::SHA qw(hmac_sha1 hmac_sha1_hex ...); + + $digest = hmac_sha1($data, $key); + $digest = hmac_sha224_hex($data, $key); + $digest = hmac_sha256_base64($data, $key); + +=head1 ABSTRACT + +Digest::SHA is a complete implementation of the NIST Secure Hash +Standard. It gives Perl programmers a convenient way to calculate +SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512 message digests. +The module can handle all types of input, including partial-byte +data. + +=head1 DESCRIPTION + +Digest::SHA is written in C for speed. If your platform lacks a +C compiler, you can install the functionally equivalent (but much +slower) L<Digest::SHA::PurePerl> module. + +The programming interface is easy to use: it's the same one found +in CPAN's L<Digest> module. So, if your applications currently +use L<Digest::MD5> and you'd prefer the stronger security of SHA, +it's a simple matter to convert them. + +The interface provides two ways to calculate digests: all-at-once, +or in stages. To illustrate, the following short program computes +the SHA-256 digest of "hello world" using each approach: + + use Digest::SHA qw(sha256_hex); + + $data = "hello world"; + @frags = split(//, $data); + + # all-at-once (Functional style) + $digest1 = sha256_hex($data); + + # in-stages (OOP style) + $state = Digest::SHA->new(256); + for (@frags) { $state->add($_) } + $digest2 = $state->hexdigest; + + print $digest1 eq $digest2 ? + "whew!\n" : "oops!\n"; + +To calculate the digest of an n-bit message where I<n> is not a +multiple of 8, use the I<add_bits()> method. For example, consider +the 446-bit message consisting of the bit-string "110" repeated +148 times, followed by "11". Here's how to display its SHA-1 +digest: + + use Digest::SHA; + $bits = "110" x 148 . "11"; + $sha = Digest::SHA->new(1)->add_bits($bits); + print $sha->hexdigest, "\n"; + +Note that for larger bit-strings, it's more efficient to use the +two-argument version I<add_bits($data, $nbits)>, where I<$data> is +in the customary packed binary format used for Perl strings. + +The module also lets you save intermediate SHA states to disk, or +display them on standard output. The I<dump()> method generates +portable, human-readable text describing the current state of +computation. You can subsequently retrieve the file with I<load()> +to resume where the calculation left off. + +To see what a state description looks like, just run the following: + + use Digest::SHA; + Digest::SHA->new->add("Shaw" x 1962)->dump; + +As an added convenience, the Digest::SHA module offers routines to +calculate keyed hashes using the HMAC-SHA-1/224/256/384/512 +algorithms. These services exist in functional form only, and +mimic the style and behavior of the I<sha()>, I<sha_hex()>, and +I<sha_base64()> functions. + + # Test vector from draft-ietf-ipsec-ciph-sha-256-01.txt + + use Digest::SHA qw(hmac_sha256_hex); + print hmac_sha256_hex("Hi There", chr(0x0b) x 32), "\n"; + +=head1 NIST STATEMENT ON SHA-1 + +I<NIST was recently informed that researchers had discovered a way +to "break" the current Federal Information Processing Standard SHA-1 +algorithm, which has been in effect since 1994. The researchers +have not yet published their complete results, so NIST has not +confirmed these findings. However, the researchers are a reputable +research team with expertise in this area.> + +I<Due to advances in computing power, NIST already planned to phase +out SHA-1 in favor of the larger and stronger hash functions (SHA-224, +SHA-256, SHA-384 and SHA-512) by 2010. New developments should use +the larger and stronger hash functions.> + +ref. L<http://www.csrc.nist.gov/pki/HashWorkshop/NIST%20Statement/Burr_Mar2005.html> + +=head1 PADDING OF BASE64 DIGESTS + +By convention, CPAN Digest modules do B<not> pad their Base64 output. +Problems can occur when feeding such digests to other software that +expects properly padded Base64 encodings. + +For the time being, any necessary padding must be done by the user. +Fortunately, this is a simple operation: if the length of a Base64-encoded +digest isn't a multiple of 4, simply append "=" characters to the end +of the digest until it is: + + while (length($b64_digest) % 4) { + $b64_digest .= '='; + } + +To illustrate, I<sha256_base64("abc")> is computed to be + + ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0 + +which has a length of 43. So, the properly padded version is + + ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= + +=head1 EXPORT + +None by default. + +=head1 EXPORTABLE FUNCTIONS + +Provided your C compiler supports a 64-bit type (e.g. the I<long +long> of C99, or I<__int64> used by Microsoft C/C++), all of these +functions will be available for use. Otherwise, you won't be able +to perform the SHA-384 and SHA-512 transforms, both of which require +64-bit operations. + +I<Functional style> + +=over 4 + +=item B<sha1($data, ...)> + +=item B<sha224($data, ...)> + +=item B<sha256($data, ...)> + +=item B<sha384($data, ...)> + +=item B<sha512($data, ...)> + +Logically joins the arguments into a single string, and returns +its SHA-1/224/256/384/512 digest encoded as a binary string. + +=item B<sha1_hex($data, ...)> + +=item B<sha224_hex($data, ...)> + +=item B<sha256_hex($data, ...)> + +=item B<sha384_hex($data, ...)> + +=item B<sha512_hex($data, ...)> + +Logically joins the arguments into a single string, and returns +its SHA-1/224/256/384/512 digest encoded as a hexadecimal string. + +=item B<sha1_base64($data, ...)> + +=item B<sha224_base64($data, ...)> + +=item B<sha256_base64($data, ...)> + +=item B<sha384_base64($data, ...)> + +=item B<sha512_base64($data, ...)> + +Logically joins the arguments into a single string, and returns +its SHA-1/224/256/384/512 digest encoded as a Base64 string. + +It's important to note that the resulting string does B<not> contain +the padding characters typical of Base64 encodings. This omission is +deliberate, and is done to maintain compatibility with the family of +CPAN Digest modules. See L</"PADDING OF BASE64 DIGESTS"> for details. + +=back + +I<OOP style> + +=over 4 + +=item B<new($alg)> + +Returns a new Digest::SHA object. Allowed values for I<$alg> are +1, 224, 256, 384, or 512. It's also possible to use common string +representations of the algorithm (e.g. "sha256", "SHA-384"). If +the argument is missing, SHA-1 will be used by default. + +Invoking I<new> as an instance method will not create a new object; +instead, it will simply reset the object to the initial state +associated with I<$alg>. If the argument is missing, the object +will continue using the same algorithm that was selected at creation. + +=item B<reset($alg)> + +This method has exactly the same effect as I<new($alg)>. In fact, +I<reset> is just an alias for I<new>. + +=item B<hashsize> + +Returns the number of digest bits for this object. The values are +160, 224, 256, 384, and 512 for SHA-1, SHA-224, SHA-256, SHA-384, +and SHA-512, respectively. + +=item B<algorithm> + +Returns the digest algorithm for this object. The values are 1, +224, 256, 384, and 512 for SHA-1, SHA-224, SHA-256, SHA-384, and +SHA-512, respectively. + +=item B<clone> + +Returns a duplicate copy of the object. + +=item B<add($data, ...)> + +Logically joins the arguments into a single string, and uses it to +update the current digest state. In other words, the following +statements have the same effect: + + $sha->add("a"); $sha->add("b"); $sha->add("c"); + $sha->add("a")->add("b")->add("c"); + $sha->add("a", "b", "c"); + $sha->add("abc"); + +The return value is the updated object itself. + +=item B<add_bits($data, $nbits)> + +=item B<add_bits($bits)> + +Updates the current digest state by appending bits to it. The +return value is the updated object itself. + +The first form causes the most-significant I<$nbits> of I<$data> +to be appended to the stream. The I<$data> argument is in the +customary binary format used for Perl strings. + +The second form takes an ASCII string of "0" and "1" characters as +its argument. It's equivalent to + + $sha->add_bits(pack("B*", $bits), length($bits)); + +So, the following two statements do the same thing: + + $sha->add_bits("111100001010"); + $sha->add_bits("\xF0\xA0", 12); + +=item B<addfile(*FILE)> + +Reads from I<FILE> until EOF, and appends that data to the current +state. The return value is the updated object itself. + +=item B<addfile($filename [, $mode])> + +Reads the contents of I<$filename>, and appends that data to the current +state. The return value is the updated object itself. + +By default, I<$filename> is simply opened and read; no special modes +or I/O disciplines are used. To change this, set the optional I<$mode> +argument to one of the following values: + + "b" read file in binary mode + + "p" use portable mode + +The "p" mode is handy since it ensures that the digest value of +I<$filename> will be the same when computed on different operating +systems. It accomplishes this by internally translating all newlines +in text files to UNIX format before calculating the digest; on the other +hand, binary files are read in raw mode with no translation whatsoever. + +For a fuller discussion of newline formats, refer to CPAN module +L<File::LocalizeNewlines>. Its "universal line separator" regex forms +the basis of I<addfile>'s portable mode processing. + +=item B<dump($filename)> + +Provides persistent storage of intermediate SHA states by writing +a portable, human-readable representation of the current state to +I<$filename>. If the argument is missing, or equal to the empty +string, the state information will be written to STDOUT. + +=item B<load($filename)> + +Returns a Digest::SHA object representing the intermediate SHA +state that was previously dumped to I<$filename>. If called as a +class method, a new object is created; if called as an instance +method, the object is reset to the state contained in I<$filename>. +If the argument is missing, or equal to the empty string, the state +information will be read from STDIN. + +=item B<digest> + +Returns the digest encoded as a binary string. + +Note that the I<digest> method is a read-once operation. Once it +has been performed, the Digest::SHA object is automatically reset +in preparation for calculating another digest value. Call +I<$sha-E<gt>clone-E<gt>digest> if it's necessary to preserve the +original digest state. + +=item B<hexdigest> + +Returns the digest encoded as a hexadecimal string. + +Like I<digest>, this method is a read-once operation. Call +I<$sha-E<gt>clone-E<gt>hexdigest> if it's necessary to preserve +the original digest state. + +This method is inherited if L<Digest::base> is installed on your +system. Otherwise, a functionally equivalent substitute is used. + +=item B<b64digest> + +Returns the digest encoded as a Base64 string. + +Like I<digest>, this method is a read-once operation. Call +I<$sha-E<gt>clone-E<gt>b64digest> if it's necessary to preserve +the original digest state. + +This method is inherited if L<Digest::base> is installed on your +system. Otherwise, a functionally equivalent substitute is used. + +It's important to note that the resulting string does B<not> contain +the padding characters typical of Base64 encodings. This omission is +deliberate, and is done to maintain compatibility with the family of +CPAN Digest modules. See L</"PADDING OF BASE64 DIGESTS"> for details. + +=back + +I<HMAC-SHA-1/224/256/384/512> + +=over 4 + +=item B<hmac_sha1($data, $key)> + +=item B<hmac_sha224($data, $key)> + +=item B<hmac_sha256($data, $key)> + +=item B<hmac_sha384($data, $key)> + +=item B<hmac_sha512($data, $key)> + +Returns the HMAC-SHA-1/224/256/384/512 digest of I<$data>/I<$key>, +with the result encoded as a binary string. Multiple I<$data> +arguments are allowed, provided that I<$key> is the last argument +in the list. + +=item B<hmac_sha1_hex($data, $key)> + +=item B<hmac_sha224_hex($data, $key)> + +=item B<hmac_sha256_hex($data, $key)> + +=item B<hmac_sha384_hex($data, $key)> + +=item B<hmac_sha512_hex($data, $key)> + +Returns the HMAC-SHA-1/224/256/384/512 digest of I<$data>/I<$key>, +with the result encoded as a hexadecimal string. Multiple I<$data> +arguments are allowed, provided that I<$key> is the last argument +in the list. + +=item B<hmac_sha1_base64($data, $key)> + +=item B<hmac_sha224_base64($data, $key)> + +=item B<hmac_sha256_base64($data, $key)> + +=item B<hmac_sha384_base64($data, $key)> + +=item B<hmac_sha512_base64($data, $key)> + +Returns the HMAC-SHA-1/224/256/384/512 digest of I<$data>/I<$key>, +with the result encoded as a Base64 string. Multiple I<$data> +arguments are allowed, provided that I<$key> is the last argument +in the list. + +It's important to note that the resulting string does B<not> contain +the padding characters typical of Base64 encodings. This omission is +deliberate, and is done to maintain compatibility with the family of +CPAN Digest modules. See L</"PADDING OF BASE64 DIGESTS"> for details. + +=back + +=head1 SEE ALSO + +L<Digest>, L<Digest::SHA::PurePerl> + +The Secure Hash Standard (FIPS PUB 180-2) can be found at: + +L<http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf> + +The Keyed-Hash Message Authentication Code (HMAC): + +L<http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf> + +=head1 AUTHOR + + Mark Shelor <[EMAIL PROTECTED]> + +=head1 ACKNOWLEDGMENTS + +The author is particularly grateful to + + Gisle Aas + Chris Carey + Jim Doble + Julius Duque + Jeffrey Friedl + Robert Gilmour + Brian Gladman + Adam Kennedy + Andy Lester + Alex Muntada + Steve Peters + Chris Skiscim + Martin Thurn + Gunnar Wolf + Adam Woodbury + +for their valuable comments and suggestions. + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2003-2008 Mark Shelor + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +L<perlartistic> + +=cut ==== //depot/maint-5.10/perl/ext/Digest/SHA/src/hmac.c#3 (text) ==== Index: perl/ext/Digest/SHA/src/hmac.c --- perl/ext/Digest/SHA/src/hmac.c#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/src/hmac.c 2008-05-31 06:00:52.000000000 -0700 @@ -3,10 +3,10 @@ * * Ref: FIPS PUB 198 The Keyed-Hash Message Authentication Code * - * Copyright (C) 2003-2007 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2008 Mark Shelor, All Rights Reserved * - * Version: 5.46 - * Wed Apr 9 05:04:00 MST 2008 + * Version: 5.47 + * Wed Apr 30 04:00:54 MST 2008 * */ ==== //depot/maint-5.10/perl/ext/Digest/SHA/src/hmac.h#3 (text) ==== Index: perl/ext/Digest/SHA/src/hmac.h --- perl/ext/Digest/SHA/src/hmac.h#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/src/hmac.h 2008-05-31 06:00:52.000000000 -0700 @@ -3,10 +3,10 @@ * * Ref: FIPS PUB 198 The Keyed-Hash Message Authentication Code * - * Copyright (C) 2003-2007 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2008 Mark Shelor, All Rights Reserved * - * Version: 5.46 - * Wed Apr 9 05:04:00 MST 2008 + * Version: 5.47 + * Wed Apr 30 04:00:54 MST 2008 * */ ==== //depot/maint-5.10/perl/ext/Digest/SHA/src/sha.c#3 (text) ==== Index: perl/ext/Digest/SHA/src/sha.c --- perl/ext/Digest/SHA/src/sha.c#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/src/sha.c 2008-05-31 06:00:52.000000000 -0700 @@ -3,10 +3,10 @@ * * Ref: NIST FIPS PUB 180-2 Secure Hash Standard * - * Copyright (C) 2003-2007 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2008 Mark Shelor, All Rights Reserved * - * Version: 5.46 - * Wed Apr 9 05:04:00 MST 2008 + * Version: 5.47 + * Wed Apr 30 04:00:54 MST 2008 * */ ==== //depot/maint-5.10/perl/ext/Digest/SHA/src/sha.h#3 (text) ==== Index: perl/ext/Digest/SHA/src/sha.h --- perl/ext/Digest/SHA/src/sha.h#2~33717~ 2008-04-21 15:03:15.000000000 -0700 +++ perl/ext/Digest/SHA/src/sha.h 2008-05-31 06:00:52.000000000 -0700 @@ -3,10 +3,10 @@ * * Ref: NIST FIPS PUB 180-2 Secure Hash Standard * - * Copyright (C) 2003-2007 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2008 Mark Shelor, All Rights Reserved * - * Version: 5.46 - * Wed Apr 9 05:04:00 MST 2008 + * Version: 5.47 + * Wed Apr 30 04:00:54 MST 2008 * */ ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/allfcns.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/allfcns.t --- perl/ext/Digest/SHA/t/allfcns.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/allfcns.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw( hmac_sha1 hmac_sha1_base64 hmac_sha1_hex ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/base64.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/base64.t --- perl/ext/Digest/SHA/t/base64.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/base64.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha1_base64 sha224_base64 sha256_base64 sha384_base64 sha512_base64)); ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/bitbuf.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/bitbuf.t --- perl/ext/Digest/SHA/t/bitbuf.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/bitbuf.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/dumpload.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/dumpload.t --- perl/ext/Digest/SHA/t/dumpload.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/dumpload.t 2008-05-31 06:00:52.000000000 -0700 @@ -4,7 +4,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha384_hex sha512_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/fips198.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/fips198.t --- perl/ext/Digest/SHA/t/fips198.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/fips198.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(hmac_sha1_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/gg.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/gg.t --- perl/ext/Digest/SHA/t/gg.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/gg.t 2008-05-31 06:00:52.000000000 -0700 @@ -7,7 +7,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/gglong.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/gglong.t --- perl/ext/Digest/SHA/t/gglong.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/gglong.t 2008-05-31 06:00:52.000000000 -0700 @@ -8,7 +8,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/hmacsha.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/hmacsha.t --- perl/ext/Digest/SHA/t/hmacsha.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/hmacsha.t 2008-05-31 06:00:52.000000000 -0700 @@ -5,7 +5,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(hmac_sha256_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/ireland.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/ireland.t --- perl/ext/Digest/SHA/t/ireland.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/ireland.t 2008-05-31 06:00:52.000000000 -0700 @@ -4,7 +4,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/methods.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/methods.t --- perl/ext/Digest/SHA/t/methods.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/methods.t 2008-05-31 06:00:52.000000000 -0700 @@ -4,7 +4,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/nistbit.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/nistbit.t --- perl/ext/Digest/SHA/t/nistbit.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/nistbit.t 2008-05-31 06:00:52.000000000 -0700 @@ -7,7 +7,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/nistbyte.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/nistbyte.t --- perl/ext/Digest/SHA/t/nistbyte.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/nistbyte.t 2008-05-31 06:00:52.000000000 -0700 @@ -7,7 +7,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw()); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/rfc2202.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/rfc2202.t --- perl/ext/Digest/SHA/t/rfc2202.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/rfc2202.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(hmac_sha1_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/sha1.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/sha1.t --- perl/ext/Digest/SHA/t/sha1.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/sha1.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha1_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/sha224.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/sha224.t --- perl/ext/Digest/SHA/t/sha224.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/sha224.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha224_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/sha256.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/sha256.t --- perl/ext/Digest/SHA/t/sha256.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/sha256.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha256_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/sha384.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/sha384.t --- perl/ext/Digest/SHA/t/sha384.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/sha384.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha384_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/sha512.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/sha512.t --- perl/ext/Digest/SHA/t/sha512.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/sha512.t 2008-05-31 06:00:52.000000000 -0700 @@ -3,7 +3,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(sha512_hex)); } ==== //depot/maint-5.10/perl/ext/Digest/SHA/t/woodbury.t#2 (text) ==== Index: perl/ext/Digest/SHA/t/woodbury.t --- perl/ext/Digest/SHA/t/woodbury.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/ext/Digest/SHA/t/woodbury.t 2008-05-31 06:00:52.000000000 -0700 @@ -7,7 +7,7 @@ my $MODULE; BEGIN { - $MODULE = ($ENV{PERL_CORE} || -e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl"; + $MODULE = ($ENV{PERL_CORE} || -d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl"; eval "require $MODULE" || die $@; $MODULE->import(qw(hmac_sha256_hex hmac_sha384_hex hmac_sha512_hex)); } End of Patch.