]> jfr.im git - irc/SurrealServices/srsv.git/commitdiff
Removed tracking of the old Date/ and Digest/ folders.
authormusashix90 <redacted>
Tue, 15 Jan 2013 18:26:15 +0000 (18:26 +0000)
committermusashix90 <redacted>
Tue, 15 Jan 2013 18:26:15 +0000 (18:26 +0000)
The last commit should have involved an svn mv for some files.

git-svn-id: http://svn.tabris.net/repos/srsv@3598 70d4eda1-72e9-0310-a436-91e5bd24443c

branches/mus-0.4.x-devel/Date/Parse.pm [deleted file]
branches/mus-0.4.x-devel/Digest/SHA/PurePerl.pm [deleted file]

diff --git a/branches/mus-0.4.x-devel/Date/Parse.pm b/branches/mus-0.4.x-devel/Date/Parse.pm
deleted file mode 100644 (file)
index ceb8dcd..0000000
+++ /dev/null
@@ -1,379 +0,0 @@
-# Date::Parse $Id: //depot/TimeDate/lib/Date/Parse.pm#22 $
-#
-# Copyright (c) 1995 Graham Barr. All rights reserved. This program is free
-# software; you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-
-package Date::Parse;
-
-require 5.000;
-use strict;
-use vars qw($VERSION @ISA @EXPORT);
-use Time::Local;
-use Carp;
-use Time::Zone;
-use Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&strtotime &str2time &strptime);
-
-$VERSION = "2.27";
-
-my %month = (
-       january         => 0,
-       february        => 1,
-       march           => 2,
-       april           => 3,
-       may             => 4,
-       june            => 5,
-       july            => 6,
-       august          => 7,
-       september       => 8,
-       sept            => 8,
-       october         => 9,
-       november        => 10,
-       december        => 11,
-       );
-
-my %day = (
-       sunday          => 0,
-       monday          => 1,
-       tuesday         => 2,
-       tues            => 2,
-       wednesday       => 3,
-       wednes          => 3,
-       thursday        => 4,
-       thur            => 4,
-       thurs           => 4,
-       friday          => 5,
-       saturday        => 6,
-       );
-
-my @suf = (qw(th st nd rd th th th th th th)) x 3;
-@suf[11,12,13] = qw(th th th);
-
-#Abbreviations
-
-map { $month{substr($_,0,3)} = $month{$_} } keys %month;
-map { $day{substr($_,0,3)}   = $day{$_} }   keys %day;
-
-my $strptime = <<'ESQ';
- my %month = map { lc $_ } %$mon_ref;
- my $daypat = join("|", map { lc $_ } reverse sort keys %$day_ref);
- my $monpat = join("|", reverse sort keys %month);
- my $sufpat = join("|", reverse sort map { lc $_ } @$suf_ref);
-
- my %ampm = (
-       'a' => 0,  # AM
-       'p' => 12, # PM
-       );
-
- my($AM, $PM) = (0,12);
-
-sub {
-
-  my $dtstr = lc shift;
-  my $merid = 24;
-
-  my($year,$month,$day,$hh,$mm,$ss,$zone,$dst,$frac);
-
-  $zone = tz_offset(shift) if @_;
-
-  1 while $dtstr =~ s#\([^\(\)]*\)# #o;
-
-  $dtstr =~ s#(\A|\n|\Z)# #sog;
-
-  # ignore day names
-  $dtstr =~ s#([\d\w\s])[\.\,]\s#$1 #sog;
-  $dtstr =~ s/,/ /g;
-  $dtstr =~ s#($daypat)\s*(den\s)?# #o;
-  # Time: 12:00 or 12:00:00 with optional am/pm
-
-  return unless $dtstr =~ /\S/;
-  
-  if ($dtstr =~ s/\s(\d{4})([-:]?)(\d\d?)\2(\d\d?)(?:[Tt ](\d\d?)(?:([-:]?)(\d\d?)(?:\6(\d\d?)(?:[.,](\d+))?)?)?)?(?=\D)/ /) {
-    ($year,$month,$day,$hh,$mm,$ss,$frac) = ($1,$3-1,$4,$5,$7,$8,$9);
-  }
-
-  unless (defined $hh) {
-    if ($dtstr =~ s#[:\s](\d\d?):(\d\d?)(:(\d\d?)(?:\.\d+)?)?\s*(?:([ap])\.?m?\.?)?\s# #o) {
-      ($hh,$mm,$ss) = ($1,$2,$4 || 0);
-      $merid = $ampm{$5} if $5;
-    }
-
-    # Time: 12 am
-    
-    elsif ($dtstr =~ s#\s(\d\d?)\s*([ap])\.?m?\.?\s# #o) {
-      ($hh,$mm,$ss) = ($1,0,0);
-      $merid = $ampm{$2};
-    }
-  }
-    
-  if (defined $hh and $hh <= 12 and $dtstr =~ s# ([ap])\.?m?\.?\s# #o) {
-    $merid = $ampm{$1};
-  }
-
-
-  unless (defined $year) {
-    # Date: 12-June-96 (using - . or /)
-    
-    if ($dtstr =~ s#\s(\d\d?)([\-\./])($monpat)(\2(\d\d+))?\s# #o) {
-      ($month,$day) = ($month{$3},$1);
-      $year = $5 if $5;
-    }
-    
-    # Date: 12-12-96 (using '-', '.' or '/' )
-    
-    elsif ($dtstr =~ s#\s(\d+)([\-\./])(\d\d?)(\2(\d+))?\s# #o) {
-      ($month,$day) = ($1 - 1,$3);
-
-      if ($5) {
-       $year = $5;
-       # Possible match for 1995-01-24 (short mainframe date format);
-       ($year,$month,$day) = ($1, $3 - 1, $5) if $month > 12;
-       return if length($year) > 2 and $year < 1901;
-      }
-    }
-    elsif ($dtstr =~ s#\s(\d+)\s*($sufpat)?\s*($monpat)# #o) {
-      ($month,$day) = ($month{$3},$1);
-    }
-    elsif ($dtstr =~ s#($monpat)\s*(\d+)\s*($sufpat)?\s# #o) {
-      ($month,$day) = ($month{$1},$2);
-    }
-
-    # Date: 961212
-
-    elsif ($dtstr =~ s#\s(\d\d)(\d\d)(\d\d)\s# #o) {
-      ($year,$month,$day) = ($1,$2-1,$3);
-    }
-
-    $year = $1 if !defined($year) and $dtstr =~ s#\s(\d{2}(\d{2})?)[\s\.,]# #o;
-
-  }
-
-  # Zone
-
-  $dst = 1 if $dtstr =~ s#\bdst\b##o;
-
-  if ($dtstr =~ s#\s"?([a-z]{3,4})(dst|\d+[a-z]*|_[a-z]+)?"?\s# #o) {
-    $dst = 1 if $2 and $2 eq 'dst';
-    $zone = tz_offset($1);
-    return unless defined $zone;
-  }
-  elsif ($dtstr =~ s#\s([a-z]{3,4})?([\-\+]?)-?(\d\d?):?(\d\d)?(00)?\s# #o) {
-    my $m = defined($4) ? "$2$4" : 0;
-    my $h = "$2$3";
-    $zone = defined($1) ? tz_offset($1) : 0;
-    return unless defined $zone;
-    $zone += 60 * ($m + (60 * $h));
-  }
-
-  if ($dtstr =~ /\S/) {
-    # now for some dumb dates
-    if ($dtstr =~ s/^\s*(ut?|z)\s*$//) {
-      $zone = 0;
-    }
-    elsif ($dtstr =~ s#\s([a-z]{3,4})?([\-\+]?)-?(\d\d?)(\d\d)?(00)?\s# #o) {
-      my $m = defined($4) ? "$2$4" : 0;
-      my $h = "$2$3";
-      $zone = defined($1) ? tz_offset($1) : 0;
-      return unless defined $zone;
-      $zone += 60 * ($m + (60 * $h));
-    }
-
-    return if $dtstr =~ /\S/o;
-  }
-
-  if (defined $hh) {
-    if ($hh == 12) {
-      $hh = 0 if $merid == $AM;
-    }
-    elsif ($merid == $PM) {
-      $hh += 12;
-    }
-  }
-
-  $year -= 1900 if defined $year && $year > 1900;
-
-  $zone += 3600 if defined $zone && $dst;
-  $ss += "0.$frac" if $frac;
-
-  return ($ss,$mm,$hh,$day,$month,$year,$zone);
-}
-ESQ
-
-use vars qw($day_ref $mon_ref $suf_ref $obj);
-
-sub gen_parser
-{
- local($day_ref,$mon_ref,$suf_ref,$obj) = @_;
-
- if($obj)
-  {
-   my $obj_strptime = $strptime;
-   substr($obj_strptime,index($strptime,"sub")+6,0) = <<'ESQ';
- shift; # package
-ESQ
-   my $sub = eval "$obj_strptime" or die $@;
-   return $sub;
-  }
-
- eval "$strptime" or die $@;
-
-}
-
-*strptime = gen_parser(\%day,\%month,\@suf);
-
-sub str2time
-{
- my @t = strptime(@_);
-
- return undef
-       unless @t;
-
- my($ss,$mm,$hh,$day,$month,$year,$zone) = @t;
- my @lt  = localtime(time);
-
- $hh    ||= 0;
- $mm    ||= 0;
- $ss    ||= 0;
-
- my $frac = $ss - int($ss);
- $ss = int $ss;
-
- $month = $lt[4]
-       unless(defined $month);
-
- $day  = $lt[3]
-       unless(defined $day);
-
- $year = ($month > $lt[4]) ? ($lt[5] - 1) : $lt[5]
-       unless(defined $year);
-
- return undef
-       unless($month <= 11 && $day >= 1 && $day <= 31
-               && $hh <= 23 && $mm <= 59 && $ss <= 59);
-
- my $result;
-
- if (defined $zone) {
-   $result = eval {
-     local $SIG{__DIE__} = sub {}; # Ick!
-     timegm($ss,$mm,$hh,$day,$month,$year);
-   };
-   return undef
-     if !defined $result
-        or $result == -1
-           && join("",$ss,$mm,$hh,$day,$month,$year)
-               ne "595923311169";
-   $result -= $zone;
- }
- else {
-   $result = eval {
-     local $SIG{__DIE__} = sub {}; # Ick!
-     timelocal($ss,$mm,$hh,$day,$month,$year);
-   };
-   return undef
-     if !defined $result
-        or $result == -1
-           && join("",$ss,$mm,$hh,$day,$month,$year)
-               ne join("",(localtime(-1))[0..5]);
- }
-
- return $result + $frac;
-}
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Date::Parse - Parse date strings into time values
-
-=head1 SYNOPSIS
-
-       use Date::Parse;
-       
-       $time = str2time($date);
-       
-       ($ss,$mm,$hh,$day,$month,$year,$zone) = strptime($date);
-
-=head1 DESCRIPTION
-
-C<Date::Parse> provides two routines for parsing date strings into time values.
-
-=over 4
-
-=item str2time(DATE [, ZONE])
-
-C<str2time> parses C<DATE> and returns a unix time value, or undef upon failure.
-C<ZONE>, if given, specifies the timezone to assume when parsing if the
-date string does not specify a timezome.
-
-=item strptime(DATE [, ZONE])
-
-C<strptime> takes the same arguments as str2time but returns an array of
-values C<($ss,$mm,$hh,$day,$month,$year,$zone)>. Elements are only defined
-if they could be extracted from the date string. The C<$zone> element is
-the timezone offset in seconds from GMT. An empty array is returned upon
-failure.
-
-=head1 MULTI-LANGUAGE SUPPORT
-
-Date::Parse is capable of parsing dates in several languages, these are
-English, French, German and Italian.
-
-       $lang = Date::Language->new('German');
-       $lang->str2time("25 Jun 1996 21:09:55 +0100");
-
-=head1 EXAMPLE DATES
-
-Below is a sample list of dates that are known to be parsable with Date::Parse
-
- 1995:01:24T09:08:17.1823213           ISO-8601
- 1995-01-24T09:08:17.1823213
- Wed, 16 Jun 94 07:29:35 CST           Comma and day name are optional 
- Thu, 13 Oct 94 10:13:13 -0700
- Wed, 9 Nov 1994 09:50:32 -0500 (EST)  Text in ()'s will be ignored.
- 21 dec 17:05                          Will be parsed in the current time zone
- 21-dec 17:05
- 21/dec 17:05
- 21/dec/93 17:05
- 1999 10:02:18 "GMT"
- 16 Nov 94 22:28:20 PST 
-
-=head1 LIMITATION
-
-Date::Parse uses Time::Local internally, so is limited to only parsing dates
-which result in valid values for Time::Local::timelocal
-
-=head1 BUGS
-
-When both the month and the date are specified in the date as numbers
-they are always parsed assuming that the month number comes before the
-date. This is the usual format used in American dates.
-
-The reason why it is like this and not dynamic is that it must be
-deterministic. Several people have suggested using the current locale,
-but this will not work as the date being parsed may not be in the format
-of the current locale.
-
-My plans to address this, which will be in a future release, is to allow
-the programmer to state what order they want these values parsed in.
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995 Graham Barr. All rights reserved. This program is free
-software; you can redistribute it and/or modify it under the same terms
-as Perl itself.
-
-=cut
-
-# $Id: //depot/TimeDate/lib/Date/Parse.pm#22 $
-
diff --git a/branches/mus-0.4.x-devel/Digest/SHA/PurePerl.pm b/branches/mus-0.4.x-devel/Digest/SHA/PurePerl.pm
deleted file mode 100644 (file)
index 0226b20..0000000
+++ /dev/null
@@ -1,1426 +0,0 @@
-package Digest::SHA::PurePerl;
-
-require 5.003000;
-
-use strict;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-use integer;
-use FileHandle;
-
-$VERSION = '5.45';
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT_OK = ();               # see "SHA and HMAC-SHA functions" below
-
-# 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;
-}
-
-# ref. src/sha.c and sha/sha64bit.c from Digest::SHA
-
-my $MAX32 = 0xffffffff;
-my $TWO32 = 4294967296;
-
-my $uses64bit = (((1 << 16) << 16) << 16) << 15;
-
-
-my @H01 = (                    # SHA-1 initial hash value
-       0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476,
-       0xc3d2e1f0
-);
-
-my @H0224 = (                  # SHA-224 initial hash value
-       0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
-       0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
-);
-
-my @H0256 = (                  # SHA-256 initial hash value
-       0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
-       0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
-);
-
-my(@H0384, @H0512);            # filled in later if $uses64bit
-
-# Routines with a "_c_" prefix return Perl code-fragments which are
-# eval'ed at initialization.  This technique emulates the behavior
-# of the C preprocessor, allowing the optimized transform code from
-# Digest::SHA to be more easily translated into Perl.
-
-sub _c_SL32 {                  # code to shift $x left by $n bits
-       my($x, $n) = @_;
-       "($x << $n)";           # even works for 64-bit integers
-                               # since the upper 32 bits are
-                               # eventually discarded in _digcpy
-}
-
-sub _c_SR32 {                  # code to shift $x right by $n bits
-       my($x, $n) = @_;
-       my $mask = (1 << (32 - $n)) - 1;
-       "(($x >> $n) & $mask)";         # "use integer" does arithmetic
-                                       # shift, so clear upper bits
-}
-
-sub _c_Ch { my($x, $y, $z) = @_; "($z ^ ($x & ($y ^ $z)))" }
-sub _c_Pa { my($x, $y, $z) = @_; "($x ^ $y ^ $z)" }
-sub _c_Ma { my($x, $y, $z) = @_; "(($x & $y) | ($z & ($x | $y)))" }
-
-sub _c_ROTR {                  # code to rotate $x right by $n bits
-       my($x, $n) = @_;
-       "(" . _c_SR32($x, $n) . " | " . _c_SL32($x, 32 - $n) . ")";
-}
-
-sub _c_ROTL {                  # code to rotate $x left by $n bits
-       my($x, $n) = @_;
-       "(" . _c_SL32($x, $n) . " | " . _c_SR32($x, 32 - $n) . ")";
-}
-
-sub _c_SIGMA0 {                        # ref. NIST SHA standard
-       my($x) = @_;
-       "(" . _c_ROTR($x,  2) . " ^ " . _c_ROTR($x, 13) . " ^ " .
-               _c_ROTR($x, 22) . ")";
-}
-
-sub _c_SIGMA1 {
-       my($x) = @_;
-       "(" . _c_ROTR($x,  6) . " ^ " . _c_ROTR($x, 11) . " ^ " .
-               _c_ROTR($x, 25) . ")";
-}
-
-sub _c_sigma0 {
-       my($x) = @_;
-       "(" . _c_ROTR($x,  7) . " ^ " . _c_ROTR($x, 18) . " ^ " .
-               _c_SR32($x,  3) . ")";
-}
-
-sub _c_sigma1 {
-       my($x) = @_;
-       "(" . _c_ROTR($x, 17) . " ^ " . _c_ROTR($x, 19) . " ^ " .
-               _c_SR32($x, 10) . ")";
-}
-
-sub _c_M1Ch {                  # ref. Digest::SHA sha.c (sha1 routine)
-       my($a, $b, $c, $d, $e, $k, $w) = @_;
-       "$e += " . _c_ROTL($a, 5) . " + " . _c_Ch($b, $c, $d) .
-               " + $k + $w; $b = " . _c_ROTL($b, 30) . ";\n";
-}
-
-sub _c_M1Pa {
-       my($a, $b, $c, $d, $e, $k, $w) = @_;
-       "$e += " . _c_ROTL($a, 5) . " + " . _c_Pa($b, $c, $d) .
-               " + $k + $w; $b = " . _c_ROTL($b, 30) . ";\n";
-}
-
-sub _c_M1Ma {
-       my($a, $b, $c, $d, $e, $k, $w) = @_;
-       "$e += " . _c_ROTL($a, 5) . " + " . _c_Ma($b, $c, $d) .
-               " + $k + $w; $b = " . _c_ROTL($b, 30) . ";\n";
-}
-
-sub _c_M11Ch { my($k, $w) = @_; _c_M1Ch('$a', '$b', '$c', '$d', '$e', $k, $w) }
-sub _c_M11Pa { my($k, $w) = @_; _c_M1Pa('$a', '$b', '$c', '$d', '$e', $k, $w) }
-sub _c_M11Ma { my($k, $w) = @_; _c_M1Ma('$a', '$b', '$c', '$d', '$e', $k, $w) }
-sub _c_M12Ch { my($k, $w) = @_; _c_M1Ch('$e', '$a', '$b', '$c', '$d', $k, $w) }
-sub _c_M12Pa { my($k, $w) = @_; _c_M1Pa('$e', '$a', '$b', '$c', '$d', $k, $w) }
-sub _c_M12Ma { my($k, $w) = @_; _c_M1Ma('$e', '$a', '$b', '$c', '$d', $k, $w) }
-sub _c_M13Ch { my($k, $w) = @_; _c_M1Ch('$d', '$e', '$a', '$b', '$c', $k, $w) }
-sub _c_M13Pa { my($k, $w) = @_; _c_M1Pa('$d', '$e', '$a', '$b', '$c', $k, $w) }
-sub _c_M13Ma { my($k, $w) = @_; _c_M1Ma('$d', '$e', '$a', '$b', '$c', $k, $w) }
-sub _c_M14Ch { my($k, $w) = @_; _c_M1Ch('$c', '$d', '$e', '$a', '$b', $k, $w) }
-sub _c_M14Pa { my($k, $w) = @_; _c_M1Pa('$c', '$d', '$e', '$a', '$b', $k, $w) }
-sub _c_M14Ma { my($k, $w) = @_; _c_M1Ma('$c', '$d', '$e', '$a', '$b', $k, $w) }
-sub _c_M15Ch { my($k, $w) = @_; _c_M1Ch('$b', '$c', '$d', '$e', '$a', $k, $w) }
-sub _c_M15Pa { my($k, $w) = @_; _c_M1Pa('$b', '$c', '$d', '$e', '$a', $k, $w) }
-sub _c_M15Ma { my($k, $w) = @_; _c_M1Ma('$b', '$c', '$d', '$e', '$a', $k, $w) }
-
-sub _c_W11 { my($s) = @_; '$W[' . (($s +  0) & 0xf) . ']' }
-sub _c_W12 { my($s) = @_; '$W[' . (($s + 13) & 0xf) . ']' }
-sub _c_W13 { my($s) = @_; '$W[' . (($s +  8) & 0xf) . ']' }
-sub _c_W14 { my($s) = @_; '$W[' . (($s +  2) & 0xf) . ']' }
-
-sub _c_A1 {
-       my($s) = @_;
-       my $tmp = _c_W11($s) . " ^ " . _c_W12($s) . " ^ " .
-               _c_W13($s) . " ^ " . _c_W14($s);
-       "((\$tmp = $tmp), (" . _c_W11($s) . " = " . _c_ROTL('$tmp', 1) . "))";
-}
-
-# The following code emulates the "sha1" routine from Digest::SHA sha.c
-
-my $sha1_code = '
-
-my($K1, $K2, $K3, $K4) = (     # SHA-1 constants
-       0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6
-);
-
-sub _sha1 {
-       my($self, $block) = @_;
-       my(@W, $a, $b, $c, $d, $e, $tmp);
-
-       @W = unpack("N16", $block);
-       ($a, $b, $c, $d, $e) = @{$self->{H}};
-' .
-       _c_M11Ch('$K1', '$W[ 0]'  ) . _c_M12Ch('$K1', '$W[ 1]'  ) .
-       _c_M13Ch('$K1', '$W[ 2]'  ) . _c_M14Ch('$K1', '$W[ 3]'  ) .
-       _c_M15Ch('$K1', '$W[ 4]'  ) . _c_M11Ch('$K1', '$W[ 5]'  ) .
-       _c_M12Ch('$K1', '$W[ 6]'  ) . _c_M13Ch('$K1', '$W[ 7]'  ) .
-       _c_M14Ch('$K1', '$W[ 8]'  ) . _c_M15Ch('$K1', '$W[ 9]'  ) .
-       _c_M11Ch('$K1', '$W[10]'  ) . _c_M12Ch('$K1', '$W[11]'  ) .
-       _c_M13Ch('$K1', '$W[12]'  ) . _c_M14Ch('$K1', '$W[13]'  ) .
-       _c_M15Ch('$K1', '$W[14]'  ) . _c_M11Ch('$K1', '$W[15]'  ) .
-       _c_M12Ch('$K1', _c_A1( 0) ) . _c_M13Ch('$K1', _c_A1( 1) ) .
-       _c_M14Ch('$K1', _c_A1( 2) ) . _c_M15Ch('$K1', _c_A1( 3) ) .
-       _c_M11Pa('$K2', _c_A1( 4) ) . _c_M12Pa('$K2', _c_A1( 5) ) .
-       _c_M13Pa('$K2', _c_A1( 6) ) . _c_M14Pa('$K2', _c_A1( 7) ) .
-       _c_M15Pa('$K2', _c_A1( 8) ) . _c_M11Pa('$K2', _c_A1( 9) ) .
-       _c_M12Pa('$K2', _c_A1(10) ) . _c_M13Pa('$K2', _c_A1(11) ) .
-       _c_M14Pa('$K2', _c_A1(12) ) . _c_M15Pa('$K2', _c_A1(13) ) .
-       _c_M11Pa('$K2', _c_A1(14) ) . _c_M12Pa('$K2', _c_A1(15) ) .
-       _c_M13Pa('$K2', _c_A1( 0) ) . _c_M14Pa('$K2', _c_A1( 1) ) .
-       _c_M15Pa('$K2', _c_A1( 2) ) . _c_M11Pa('$K2', _c_A1( 3) ) .
-       _c_M12Pa('$K2', _c_A1( 4) ) . _c_M13Pa('$K2', _c_A1( 5) ) .
-       _c_M14Pa('$K2', _c_A1( 6) ) . _c_M15Pa('$K2', _c_A1( 7) ) .
-       _c_M11Ma('$K3', _c_A1( 8) ) . _c_M12Ma('$K3', _c_A1( 9) ) .
-       _c_M13Ma('$K3', _c_A1(10) ) . _c_M14Ma('$K3', _c_A1(11) ) .
-       _c_M15Ma('$K3', _c_A1(12) ) . _c_M11Ma('$K3', _c_A1(13) ) .
-       _c_M12Ma('$K3', _c_A1(14) ) . _c_M13Ma('$K3', _c_A1(15) ) .
-       _c_M14Ma('$K3', _c_A1( 0) ) . _c_M15Ma('$K3', _c_A1( 1) ) .
-       _c_M11Ma('$K3', _c_A1( 2) ) . _c_M12Ma('$K3', _c_A1( 3) ) .
-       _c_M13Ma('$K3', _c_A1( 4) ) . _c_M14Ma('$K3', _c_A1( 5) ) .
-       _c_M15Ma('$K3', _c_A1( 6) ) . _c_M11Ma('$K3', _c_A1( 7) ) .
-       _c_M12Ma('$K3', _c_A1( 8) ) . _c_M13Ma('$K3', _c_A1( 9) ) .
-       _c_M14Ma('$K3', _c_A1(10) ) . _c_M15Ma('$K3', _c_A1(11) ) .
-       _c_M11Pa('$K4', _c_A1(12) ) . _c_M12Pa('$K4', _c_A1(13) ) .
-       _c_M13Pa('$K4', _c_A1(14) ) . _c_M14Pa('$K4', _c_A1(15) ) .
-       _c_M15Pa('$K4', _c_A1( 0) ) . _c_M11Pa('$K4', _c_A1( 1) ) .
-       _c_M12Pa('$K4', _c_A1( 2) ) . _c_M13Pa('$K4', _c_A1( 3) ) .
-       _c_M14Pa('$K4', _c_A1( 4) ) . _c_M15Pa('$K4', _c_A1( 5) ) .
-       _c_M11Pa('$K4', _c_A1( 6) ) . _c_M12Pa('$K4', _c_A1( 7) ) .
-       _c_M13Pa('$K4', _c_A1( 8) ) . _c_M14Pa('$K4', _c_A1( 9) ) .
-       _c_M15Pa('$K4', _c_A1(10) ) . _c_M11Pa('$K4', _c_A1(11) ) .
-       _c_M12Pa('$K4', _c_A1(12) ) . _c_M13Pa('$K4', _c_A1(13) ) .
-       _c_M14Pa('$K4', _c_A1(14) ) . _c_M15Pa('$K4', _c_A1(15) ) .
-
-'      $self->{H}->[0] += $a; $self->{H}->[1] += $b; $self->{H}->[2] += $c;
-       $self->{H}->[3] += $d; $self->{H}->[4] += $e;
-}
-';
-
-eval($sha1_code);
-
-sub _c_M2 {                    # ref. Digest::SHA sha.c (sha256 routine)
-       my($a, $b, $c, $d, $e, $f, $g, $h, $w) = @_;
-       "\$T1 = $h + " . _c_SIGMA1($e) . " + " . _c_Ch($e, $f, $g) .
-               " + \$K256[\$i++] + $w; $h = \$T1 + " . _c_SIGMA0($a) .
-               " + " . _c_Ma($a, $b, $c) . "; $d += \$T1;\n";
-}
-
-sub _c_M21 { _c_M2('$a', '$b', '$c', '$d', '$e', '$f', '$g', '$h', $_[0]) }
-sub _c_M22 { _c_M2('$h', '$a', '$b', '$c', '$d', '$e', '$f', '$g', $_[0]) }
-sub _c_M23 { _c_M2('$g', '$h', '$a', '$b', '$c', '$d', '$e', '$f', $_[0]) }
-sub _c_M24 { _c_M2('$f', '$g', '$h', '$a', '$b', '$c', '$d', '$e', $_[0]) }
-sub _c_M25 { _c_M2('$e', '$f', '$g', '$h', '$a', '$b', '$c', '$d', $_[0]) }
-sub _c_M26 { _c_M2('$d', '$e', '$f', '$g', '$h', '$a', '$b', '$c', $_[0]) }
-sub _c_M27 { _c_M2('$c', '$d', '$e', '$f', '$g', '$h', '$a', '$b', $_[0]) }
-sub _c_M28 { _c_M2('$b', '$c', '$d', '$e', '$f', '$g', '$h', '$a', $_[0]) }
-
-sub _c_W21 { my($s) = @_; '$W[' . (($s +  0) & 0xf) . ']' }
-sub _c_W22 { my($s) = @_; '$W[' . (($s + 14) & 0xf) . ']' }
-sub _c_W23 { my($s) = @_; '$W[' . (($s +  9) & 0xf) . ']' }
-sub _c_W24 { my($s) = @_; '$W[' . (($s +  1) & 0xf) . ']' }
-
-sub _c_A2 {
-       my($s) = @_;
-       "(" . _c_W21($s) . " += " . _c_sigma1(_c_W22($s)) . " + " .
-               _c_W23($s) . " + " . _c_sigma0(_c_W24($s)) . ")";
-}
-
-# The following code emulates the "sha256" routine from Digest::SHA sha.c
-
-my $sha256_code = '
-
-my @K256 = (                   # SHA-224/256 constants
-       0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-       0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-       0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-       0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-       0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-       0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-       0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-       0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-       0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-       0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-       0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-       0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-       0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-       0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-       0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-       0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-);
-
-sub _sha256 {
-       my($self, $block) = @_;
-       my(@W, $a, $b, $c, $d, $e, $f, $g, $h, $i, $T1);
-
-       @W = unpack("N16", $block);
-       ($a, $b, $c, $d, $e, $f, $g, $h) = @{$self->{H}};
-' .
-       _c_M21('$W[ 0]' ) . _c_M22('$W[ 1]' ) . _c_M23('$W[ 2]' ) .
-       _c_M24('$W[ 3]' ) . _c_M25('$W[ 4]' ) . _c_M26('$W[ 5]' ) .
-       _c_M27('$W[ 6]' ) . _c_M28('$W[ 7]' ) . _c_M21('$W[ 8]' ) .
-       _c_M22('$W[ 9]' ) . _c_M23('$W[10]' ) . _c_M24('$W[11]' ) .
-       _c_M25('$W[12]' ) . _c_M26('$W[13]' ) . _c_M27('$W[14]' ) .
-       _c_M28('$W[15]' ) .
-       _c_M21(_c_A2( 0)) . _c_M22(_c_A2( 1)) . _c_M23(_c_A2( 2)) .
-       _c_M24(_c_A2( 3)) . _c_M25(_c_A2( 4)) . _c_M26(_c_A2( 5)) .
-       _c_M27(_c_A2( 6)) . _c_M28(_c_A2( 7)) . _c_M21(_c_A2( 8)) .
-       _c_M22(_c_A2( 9)) . _c_M23(_c_A2(10)) . _c_M24(_c_A2(11)) .
-       _c_M25(_c_A2(12)) . _c_M26(_c_A2(13)) . _c_M27(_c_A2(14)) .
-       _c_M28(_c_A2(15)) . _c_M21(_c_A2( 0)) . _c_M22(_c_A2( 1)) .
-       _c_M23(_c_A2( 2)) . _c_M24(_c_A2( 3)) . _c_M25(_c_A2( 4)) .
-       _c_M26(_c_A2( 5)) . _c_M27(_c_A2( 6)) . _c_M28(_c_A2( 7)) .
-       _c_M21(_c_A2( 8)) . _c_M22(_c_A2( 9)) . _c_M23(_c_A2(10)) .
-       _c_M24(_c_A2(11)) . _c_M25(_c_A2(12)) . _c_M26(_c_A2(13)) .
-       _c_M27(_c_A2(14)) . _c_M28(_c_A2(15)) . _c_M21(_c_A2( 0)) .
-       _c_M22(_c_A2( 1)) . _c_M23(_c_A2( 2)) . _c_M24(_c_A2( 3)) .
-       _c_M25(_c_A2( 4)) . _c_M26(_c_A2( 5)) . _c_M27(_c_A2( 6)) .
-       _c_M28(_c_A2( 7)) . _c_M21(_c_A2( 8)) . _c_M22(_c_A2( 9)) .
-       _c_M23(_c_A2(10)) . _c_M24(_c_A2(11)) . _c_M25(_c_A2(12)) .
-       _c_M26(_c_A2(13)) . _c_M27(_c_A2(14)) . _c_M28(_c_A2(15)) .
-
-'      $self->{H}->[0] += $a; $self->{H}->[1] += $b; $self->{H}->[2] += $c;
-       $self->{H}->[3] += $d; $self->{H}->[4] += $e; $self->{H}->[5] += $f;
-       $self->{H}->[6] += $g; $self->{H}->[7] += $h;
-}
-';
-
-eval($sha256_code);
-
-sub _sha512_placeholder { return }
-my $sha512 = \&_sha512_placeholder;
-
-my $_64bit_code = '
-
-BEGIN { $^W = 0 }      # suppress warnings triggered by 64-bit constants
-
-my @K512 = (
-       0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f,
-       0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019,
-       0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242,
-       0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,
-       0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235,
-       0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3,
-       0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275,
-       0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,
-       0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f,
-       0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725,
-       0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc,
-       0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,
-       0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6,
-       0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001,
-       0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218,
-       0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8,
-       0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99,
-       0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb,
-       0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc,
-       0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,
-       0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915,
-       0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207,
-       0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba,
-       0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b,
-       0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc,
-       0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a,
-       0x5fcb6fab3ad6faec, 0x6c44198c4a475817);
-
-@H0384 = (
-       0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17,
-       0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511,
-       0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4);
-
-@H0512 = (
-       0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b,
-       0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
-       0x1f83d9abfb41bd6b, 0x5be0cd19137e2179);
-
-sub _c_SL64 { my($x, $n) = @_; "($x << $n)" }
-
-sub _c_SR64 {
-       my($x, $n) = @_;
-       my $mask = (1 << (64 - $n)) - 1;
-       "(($x >> $n) & $mask)";
-}
-
-sub _c_ROTRQ {
-       my($x, $n) = @_;
-       "(" . _c_SR64($x, $n) . " | " . _c_SL64($x, 64 - $n) . ")";
-}
-
-sub _c_SIGMAQ0 {
-       my($x) = @_;
-       "(" . _c_ROTRQ($x, 28) . " ^ " .  _c_ROTRQ($x, 34) . " ^ " .
-               _c_ROTRQ($x, 39) . ")";
-}
-
-sub _c_SIGMAQ1 {
-       my($x) = @_;
-       "(" . _c_ROTRQ($x, 14) . " ^ " .  _c_ROTRQ($x, 18) . " ^ " .
-               _c_ROTRQ($x, 41) . ")";
-}
-
-sub _c_sigmaQ0 {
-       my($x) = @_;
-       "(" . _c_ROTRQ($x, 1) . " ^ " .  _c_ROTRQ($x, 8) . " ^ " .
-               _c_SR64($x, 7) . ")";
-}
-
-sub _c_sigmaQ1 {
-       my($x) = @_;
-       "(" . _c_ROTRQ($x, 19) . " ^ " .  _c_ROTRQ($x, 61) . " ^ " .
-               _c_SR64($x, 6) . ")";
-}
-
-my $sha512_code = q/
-sub _sha512 {
-       my($self, $block) = @_;
-       my(@N, @W, $a, $b, $c, $d, $e, $f, $g, $h, $T1, $T2);
-
-       @N = unpack("N32", $block);
-       ($a, $b, $c, $d, $e, $f, $g, $h) = @{$self->{H}};
-       for ( 0 .. 15) { $W[$_] = (($N[2*$_] << 16) << 16) | $N[2*$_+1] }
-       for (16 .. 79) { $W[$_] = / .
-               _c_sigmaQ1(q/$W[$_- 2]/) . q/ + $W[$_- 7] + / .
-               _c_sigmaQ0(q/$W[$_-15]/) . q/ + $W[$_-16] }
-       for ( 0 .. 79) {
-               $T1 = $h + / . _c_SIGMAQ1(q/$e/) .
-                       q/ + (($g) ^ (($e) & (($f) ^ ($g)))) +
-                               $K512[$_] + $W[$_];
-               $T2 = / . _c_SIGMAQ0(q/$a/) .
-                       q/ + ((($a) & ($b)) | (($c) & (($a) | ($b))));
-               $h = $g; $g = $f; $f = $e; $e = $d + $T1;
-               $d = $c; $c = $b; $b = $a; $a = $T1 + $T2;
-       }
-       $self->{H}->[0] += $a; $self->{H}->[1] += $b; $self->{H}->[2] += $c;
-       $self->{H}->[3] += $d; $self->{H}->[4] += $e; $self->{H}->[5] += $f;
-       $self->{H}->[6] += $g; $self->{H}->[7] += $h;
-}
-/;
-
-eval($sha512_code);
-$sha512 = \&_sha512;
-
-';
-
-eval($_64bit_code) if $uses64bit;
-
-sub _SETBIT {
-       my($self, $pos) = @_;
-       my @c = unpack("C*", $self->{block});
-       $c[$pos >> 3] = 0x00 unless defined $c[$pos >> 3];
-       $c[$pos >> 3] |= (0x01 << (7 - $pos % 8));
-       $self->{block} = pack("C*", @c);
-}
-
-sub _CLRBIT {
-       my($self, $pos) = @_;
-       my @c = unpack("C*", $self->{block});
-       $c[$pos >> 3] = 0x00 unless defined $c[$pos >> 3];
-       $c[$pos >> 3] &= ~(0x01 << (7 - $pos % 8));
-       $self->{block} = pack("C*", @c);
-}
-
-sub _BYTECNT {
-       my($bitcnt) = @_;
-       $bitcnt > 0 ? 1 + (($bitcnt - 1) >> 3) : 0;
-}
-
-sub _digcpy {
-       my($self) = @_;
-       my @dig;
-       for (@{$self->{H}}) {
-               push(@dig, (($_>>16)>>16) & $MAX32) if $self->{alg} >= 384;
-               push(@dig, $_ & $MAX32);
-       }
-       $self->{digest} = pack("N" . ($self->{digestlen}>>2), @dig);
-}
-
-sub _sharewind {
-       my($self) = @_;
-       my $alg = $self->{alg};
-       $self->{block} = ""; $self->{blockcnt} = 0;
-       $self->{blocksize} = $alg <= 256 ? 512 : 1024;
-       for (qw(lenll lenlh lenhl lenhh)) { $self->{$_} = 0 }
-       $self->{digestlen} = $alg == 1 ? 20 : $alg/8;
-       if    ($alg == 1)   { $self->{sha} = \&_sha1;   $self->{H} = [@H01]   }
-       elsif ($alg == 224) { $self->{sha} = \&_sha256; $self->{H} = [@H0224] }
-       elsif ($alg == 256) { $self->{sha} = \&_sha256; $self->{H} = [@H0256] }
-       elsif ($alg == 384) { $self->{sha} = $sha512;   $self->{H} = [@H0384] }
-       elsif ($alg == 512) { $self->{sha} = $sha512;   $self->{H} = [@H0512] }
-       push(@{$self->{H}}, 0) while scalar(@{$self->{H}}) < 8;
-       $self;
-}
-
-sub _shaopen {
-       my($alg) = @_;
-       my($self);
-       return unless grep { $alg == $_ } (1, 224, 256, 384, 512);
-       return if ($alg >= 384 && !$uses64bit);
-       $self->{alg} = $alg;
-       _sharewind($self);
-}
-
-sub _shadirect {
-       my($bitstr, $bitcnt, $self) = @_;
-       my $savecnt = $bitcnt;
-       my $offset = 0;
-       my $blockbytes = $self->{blocksize} >> 3;
-       while ($bitcnt >= $self->{blocksize}) {
-               &{$self->{sha}}($self, substr($bitstr, $offset, $blockbytes));
-               $offset += $blockbytes;
-               $bitcnt -= $self->{blocksize};
-       }
-       if ($bitcnt > 0) {
-               $self->{block} = substr($bitstr, $offset, _BYTECNT($bitcnt));
-               $self->{blockcnt} = $bitcnt;
-       }
-       $savecnt;
-}
-
-sub _shabytes {
-       my($bitstr, $bitcnt, $self) = @_;
-       my($numbits);
-       my $savecnt = $bitcnt;
-       if ($self->{blockcnt} + $bitcnt >= $self->{blocksize}) {
-               $numbits = $self->{blocksize} - $self->{blockcnt};
-               $self->{block} .= substr($bitstr, 0, $numbits >> 3);
-               $bitcnt -= $numbits;
-               $bitstr = substr($bitstr, $numbits >> 3, _BYTECNT($bitcnt));
-               &{$self->{sha}}($self, $self->{block});
-               $self->{block} = "";
-               $self->{blockcnt} = 0;
-               _shadirect($bitstr, $bitcnt, $self);
-       }
-       else {
-               $self->{block} .= substr($bitstr, 0, _BYTECNT($bitcnt));
-               $self->{blockcnt} += $bitcnt;
-       }
-       $savecnt;
-}
-
-sub _shabits {
-       my($bitstr, $bitcnt, $self) = @_;
-       my($i, @buf);
-       my $numbytes = _BYTECNT($bitcnt);
-       my $savecnt = $bitcnt;
-       my $gap = 8 - $self->{blockcnt} % 8;
-       my @c = unpack("C*", $self->{block});
-       my @b = unpack("C" . $numbytes, $bitstr);
-       $c[$self->{blockcnt}>>3] &= (~0 << $gap);
-       $c[$self->{blockcnt}>>3] |= $b[0] >> (8 - $gap);
-       $self->{block} = pack("C*", @c);
-       $self->{blockcnt} += ($bitcnt < $gap) ? $bitcnt : $gap;
-       return($savecnt) if $bitcnt < $gap;
-       if ($self->{blockcnt} == $self->{blocksize}) {
-               &{$self->{sha}}($self, $self->{block});
-               $self->{block} = "";
-               $self->{blockcnt} = 0;
-       }
-       return($savecnt) if ($bitcnt -= $gap) == 0;
-       for ($i = 0; $i < $numbytes - 1; $i++) {
-               $buf[$i] = (($b[$i] << $gap) & 0xff) | ($b[$i+1] >> (8 - $gap));
-       }
-       $buf[$numbytes-1] = ($b[$numbytes-1] << $gap) & 0xff;
-       _shabytes(pack("C*", @buf), $bitcnt, $self);
-       $savecnt;
-}
-
-sub _shawrite {
-       my($bitstr, $bitcnt, $self) = @_;
-       return(0) unless $bitcnt > 0;
-       no integer;
-       if (($self->{lenll} += $bitcnt) >= $TWO32) {
-               $self->{lenll} -= $TWO32;
-               if (++$self->{lenlh} >= $TWO32) {
-                       $self->{lenlh} -= $TWO32;
-                       if (++$self->{lenhl} >= $TWO32) {
-                               $self->{lenhl} -= $TWO32;
-                               if (++$self->{lenhh} >= $TWO32) {
-                                       $self->{lenhh} -= $TWO32;
-                               }
-                       }
-               }
-       }
-       use integer;
-       my $blockcnt = $self->{blockcnt};
-       return(_shadirect($bitstr, $bitcnt, $self)) if $blockcnt == 0;
-       return(_shabytes ($bitstr, $bitcnt, $self)) if $blockcnt % 8 == 0;
-       return(_shabits  ($bitstr, $bitcnt, $self));
-}
-
-sub _shafinish {
-       my($self) = @_;
-       my $LENPOS = $self->{alg} <= 256 ? 448 : 896;
-       _SETBIT($self, $self->{blockcnt}++);
-       while ($self->{blockcnt} > $LENPOS) {
-               if ($self->{blockcnt} < $self->{blocksize}) {
-                       _CLRBIT($self, $self->{blockcnt}++);
-               }
-               else {
-                       &{$self->{sha}}($self, $self->{block});
-                       $self->{block} = "";
-                       $self->{blockcnt} = 0;
-               }
-       }
-       while ($self->{blockcnt} < $LENPOS) {
-               _CLRBIT($self, $self->{blockcnt}++);
-       }
-       if ($self->{blocksize} > 512) {
-               $self->{block} .= pack("N", $self->{lenhh} & $MAX32);
-               $self->{block} .= pack("N", $self->{lenhl} & $MAX32);
-       }
-       $self->{block} .= pack("N", $self->{lenlh} & $MAX32);
-       $self->{block} .= pack("N", $self->{lenll} & $MAX32);
-       &{$self->{sha}}($self, $self->{block});
-}
-
-sub _shadigest { my($self) = @_; _digcpy($self); $self->{digest} }
-
-sub _shahex {
-       my($self) = @_;
-       _digcpy($self);
-       join("", unpack("H*", $self->{digest}));
-}
-
-sub _shabase64 {
-       my($self) = @_;
-       _digcpy($self);
-       my $b64 = pack("u", $self->{digest});
-       $b64 =~ s/^.//mg;
-       $b64 =~ s/\n//g;
-       $b64 =~ tr|` -_|AA-Za-z0-9+/|;
-       my $numpads = (3 - length($self->{digest}) % 3) % 3;
-       $b64 =~ s/.{$numpads}$// if $numpads;
-       $b64;
-}
-
-sub _shadsize { my($self) = @_; $self->{digestlen} }
-
-sub _shacpy {
-       my($to, $from) = @_;
-       $to->{alg} = $from->{alg};
-       $to->{sha} = $from->{sha};
-       $to->{H} = [@{$from->{H}}];
-       $to->{block} = $from->{block};
-       $to->{blockcnt} = $from->{blockcnt};
-       $to->{blocksize} = $from->{blocksize};
-       for (qw(lenhh lenhl lenlh lenll)) { $to->{$_} = $from->{$_} }
-       $to->{digestlen} = $from->{digestlen};
-       $to;
-}
-
-sub _shadup { my($self) = @_; my($copy); _shacpy($copy, $self) }
-
-sub _shadump {
-       my $file = shift;
-       $file = "-" if (!defined($file) || $file eq "");
-
-       my $fh = FileHandle->new($file, "w") or return;
-       my $self = shift;
-       my $is32bit = $self->{alg} <= 256;
-       my $fmt = $is32bit ? ":%08x" : ":%016x";
-
-       printf $fh "alg:%d\n", $self->{alg};
-
-       printf $fh "H";
-       for (@{$self->{H}}) { printf $fh $fmt, $is32bit ? $_ & $MAX32 : $_ }
-
-       printf $fh "\nblock";
-       my @c = unpack("C*", $self->{block});
-       push(@c, 0x00) while scalar(@c) < ($self->{blocksize} >> 3);
-       for (@c) { printf $fh ":%02x", $_ }
-
-       printf $fh "\nblockcnt:%u\n", $self->{blockcnt};
-
-       printf $fh "lenhh:%lu\n", $self->{lenhh} & $MAX32;
-       printf $fh "lenhl:%lu\n", $self->{lenhl} & $MAX32;
-       printf $fh "lenlh:%lu\n", $self->{lenlh} & $MAX32;
-       printf $fh "lenll:%lu\n", $self->{lenll} & $MAX32;
-
-       close($fh);
-       $self;
-}
-
-sub _match {
-       my($fh, $tag) = @_;
-       my @f;
-       while (<$fh>) {
-               s/^\s+//;
-               s/\s+$//;
-               next if (/^(#|$)/);
-               @f = split(/[:\s]+/);
-               last;
-       }
-       shift(@f) eq $tag or return;
-       return(@f);
-}
-
-sub _shaload {
-       my $file = shift;
-       $file = "-" if (!defined($file) || $file eq "");
-
-       my $fh = FileHandle->new($file, "r") or return;
-
-       my @f = _match($fh, "alg") or return;
-       my $self = _shaopen(shift(@f)) or return;
-
-       @f = _match($fh, "H") or return;
-       my $numxdigits = $self->{alg} <= 256 ? 8 : 16;
-       for (@f) { $_ = "0" . $_ while length($_) < $numxdigits }
-       for (@f) { $_ = substr($_, 1) while length($_) > $numxdigits }
-       @{$self->{H}} = map { $self->{alg} <= 256 ? hex($_) :
-               ((hex(substr($_, 0, 8)) << 16) << 16) |
-               hex(substr($_, 8)) } @f;
-
-       @f = _match($fh, "block") or return;
-       for (@f) { $self->{block} .= chr(hex($_)) }
-
-       @f = _match($fh, "blockcnt") or return;
-       $self->{blockcnt} = shift(@f);
-       $self->{block} = substr($self->{block},0,_BYTECNT($self->{blockcnt}));
-
-       @f = _match($fh, "lenhh") or return;
-       $self->{lenhh} = shift(@f);
-       @f = _match($fh, "lenhl") or return;
-       $self->{lenhl} = shift(@f);
-       @f = _match($fh, "lenlh") or return;
-       $self->{lenlh} = shift(@f);
-       @f = _match($fh, "lenll") or return;
-       $self->{lenll} = shift(@f);
-
-       close($fh);
-       $self;
-}
-
-# ref. src/hmac.c from Digest::SHA
-
-sub _hmacopen {
-       my($alg, $key) = @_;
-       my($self);
-       $self->{isha} = _shaopen($alg) or return;
-       $self->{osha} = _shaopen($alg) or return;
-       if (length($key) > $self->{osha}->{blocksize} >> 3) {
-               $self->{ksha} = _shaopen($alg) or return;
-               _shawrite($key, length($key) << 3, $self->{ksha});
-               _shafinish($self->{ksha});
-               $key = _shadigest($self->{ksha});
-       }
-       $key .= chr(0x00)
-               while length($key) < $self->{osha}->{blocksize} >> 3;
-       my @k = unpack("C*", $key);
-       for (@k) { $_ ^= 0x5c }
-       _shawrite(pack("C*", @k), $self->{osha}->{blocksize}, $self->{osha});
-       for (@k) { $_ ^= (0x5c ^ 0x36) }
-       _shawrite(pack("C*", @k), $self->{isha}->{blocksize}, $self->{isha});
-       $self;
-}
-
-sub _hmacwrite {
-       my($bitstr, $bitcnt, $self) = @_;
-       _shawrite($bitstr, $bitcnt, $self->{isha});
-}
-
-sub _hmacfinish {
-       my($self) = @_;
-       _shafinish($self->{isha});
-       _shawrite(_shadigest($self->{isha}),
-                       $self->{isha}->{digestlen} << 3, $self->{osha});
-       _shafinish($self->{osha});
-}
-
-sub _hmacdigest { my($self) = @_; _shadigest($self->{osha}) }
-sub _hmachex    { my($self) = @_; _shahex($self->{osha})    }
-sub _hmacbase64 { my($self) = @_; _shabase64($self->{osha}) }
-
-# SHA and HMAC-SHA functions
-
-my @suffix_extern = ("", "_hex", "_base64");
-my @suffix_intern = ("digest", "hex", "base64");
-
-my($i, $alg);
-for $alg (1, 224, 256, 384, 512) {
-       for $i (0 .. 2) {
-               my $fcn = 'sub sha' . $alg . $suffix_extern[$i] . ' {
-                       my $state = _shaopen(' . $alg . ') or return;
-                       for (@_) { _shawrite($_, length($_) << 3, $state) }
-                       _shafinish($state);
-                       _sha' . $suffix_intern[$i] . '($state);
-               }';
-               eval($fcn);
-               push(@EXPORT_OK, 'sha' . $alg . $suffix_extern[$i]);
-               $fcn = 'sub hmac_sha' . $alg . $suffix_extern[$i] . ' {
-                       my $state = _hmacopen(' . $alg . ', pop(@_)) or return;
-                       for (@_) { _hmacwrite($_, length($_) << 3, $state) }
-                       _hmacfinish($state);
-                       _hmac' . $suffix_intern[$i] . '($state);
-               }';
-               eval($fcn);
-               push(@EXPORT_OK, 'hmac_sha' . $alg . $suffix_extern[$i]);
-       }
-}
-
-# OOP methods
-
-sub hashsize  { my $self = shift; _shadsize($self) << 3 }
-sub algorithm { my $self = shift; $self->{alg} }
-
-sub add {
-       my $self = shift;
-       for (@_) { _shawrite($_, length($_) << 3, $self) }
-       $self;
-}
-
-sub digest {
-       my $self = shift;
-       _shafinish($self);
-       my $rsp = _shadigest($self);
-       _sharewind($self);
-       $rsp;
-}
-
-sub _Hexdigest {
-       my $self = shift;
-       _shafinish($self);
-       my $rsp = _shahex($self);
-       _sharewind($self);
-       $rsp;
-}
-
-sub _B64digest {
-       my $self = shift;
-       _shafinish($self);
-       my $rsp = _shabase64($self);
-       _sharewind($self);
-       $rsp;
-}
-
-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);
-               }
-               my $self = _shaopen($alg) or return;
-               return(_shacpy($class, $self));
-       }
-       $alg = 1 unless defined $alg;
-       my $self = _shaopen($alg) or return;
-       bless($self, $class);
-       $self;
-}
-
-sub clone {
-       my $self = shift;
-       my $copy = _shadup($self) or return;
-       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 {
-    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;
-       open(FH, "<$file") 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) or return;
-       return($self);
-}
-
-sub load {
-       my $class = shift;
-       my $file = shift || "";
-       if (ref($class)) {      # instance method
-               my $self = _shaload($file) or return;
-               return(_shacpy($class, $self));
-       }
-       my $self = _shaload($file) or return;
-       bless($self, $class);
-       return($self);
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Digest::SHA::PurePerl - Perl implementation of SHA-1/224/256/384/512
-
-=head1 SYNOPSIS
-
-In programs:
-
-               # Functional interface
-
-       use Digest::SHA::PurePerl 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::PurePerl;
-
-       $sha = Digest::SHA::PurePerl->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::PurePerl 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::PurePerl 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::PurePerl is written entirely in Perl.  If your platform
-has a C compiler, you should install the functionally equivalent
-(but much faster) L<Digest::SHA> 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::PurePerl 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::PurePerl->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::PurePerl;
-       $bits = "110" x 148 . "11";
-       $sha = Digest::SHA::PurePerl->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::PurePerl;
-       Digest::SHA::PurePerl->new->add("Shaw" x 1962)->dump;
-
-As an added convenience, the Digest::SHA::PurePerl 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::PurePerl 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 Perl installation supports 64-bit integers, 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::PurePerl 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::PurePerl 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::PurePerl 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>
-
-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     <mshelor@cpan.org>
-
-=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-2007 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