[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/Digest/ -> base.pm (source)

   1  package Digest::base;
   2  
   3  use strict;
   4  use vars qw($VERSION);
   5  $VERSION = "1.00";
   6  
   7  # subclass is supposed to implement at least these
   8  sub new;
   9  sub clone;
  10  sub add;
  11  sub digest;
  12  
  13  sub reset {
  14      my $self = shift;
  15      $self->new(@_);  # ugly
  16  }
  17  
  18  sub addfile {
  19      my ($self, $handle) = @_;
  20  
  21      my $n;
  22      my $buf = "";
  23  
  24      while (($n = read($handle, $buf, 4*1024))) {
  25          $self->add($buf);
  26      }
  27      unless (defined $n) {
  28      require Carp;
  29      Carp::croak("Read failed: $!");
  30      }
  31  
  32      $self;
  33  }
  34  
  35  sub add_bits {
  36      my $self = shift;
  37      my $bits;
  38      my $nbits;
  39      if (@_ == 1) {
  40      my $arg = shift;
  41      $bits = pack("B*", $arg);
  42      $nbits = length($arg);
  43      }
  44      else {
  45      ($bits, $nbits) = @_;
  46      }
  47      if (($nbits % 8) != 0) {
  48      require Carp;
  49      Carp::croak("Number of bits must be multiple of 8 for this algorithm");
  50      }
  51      return $self->add(substr($bits, 0, $nbits/8));
  52  }
  53  
  54  sub hexdigest {
  55      my $self = shift;
  56      return unpack("H*", $self->digest(@_));
  57  }
  58  
  59  sub b64digest {
  60      my $self = shift;
  61      require MIME::Base64;
  62      my $b64 = MIME::Base64::encode($self->digest(@_), "");
  63      $b64 =~ s/=+$//;
  64      return $b64;
  65  }
  66  
  67  1;
  68  
  69  __END__
  70  
  71  =head1 NAME
  72  
  73  Digest::base - Digest base class
  74  
  75  =head1 SYNOPSIS
  76  
  77    package Digest::Foo;
  78    use base 'Digest::base';
  79  
  80  =head1 DESCRIPTION
  81  
  82  The C<Digest::base> class provide implementations of the methods
  83  C<addfile> and C<add_bits> in terms of C<add>, and of the methods
  84  C<hexdigest> and C<b64digest> in terms of C<digest>.
  85  
  86  Digest implementations might want to inherit from this class to get
  87  this implementations of the alternative I<add> and I<digest> methods.
  88  A minimal subclass needs to implement the following methods by itself:
  89  
  90      new
  91      clone
  92      add
  93      digest
  94  
  95  The arguments and expected behaviour of these methods are described in
  96  L<Digest>.
  97  
  98  =head1 SEE ALSO
  99  
 100  L<Digest>


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1