perl/lib/Digest/base.pm
<<
>>
Prefs
   1package Digest::base;
   2
   3use strict;
   4use vars qw($VERSION);
   5$VERSION = "1.00";
   6
   7# subclass is supposed to implement at least these
   8sub new;
   9sub clone;
  10sub add;
  11sub digest;
  12
  13sub reset {
  14    my $self = shift;
  15    $self->new(@_);  # ugly
  16}
  17
  18sub 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
  35sub 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
  54sub hexdigest {
  55    my $self = shift;
  56    return unpack("H*", $self->digest(@_));
  57}
  58
  59sub 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
  671;
  68
  69__END__
  70
  71=head1 NAME
  72
  73Digest::base - Digest base class
  74
  75=head1 SYNOPSIS
  76
  77  package Digest::Foo;
  78  use base 'Digest::base';
  79
  80=head1 DESCRIPTION
  81
  82The C<Digest::base> class provide implementations of the methods
  83C<addfile> and C<add_bits> in terms of C<add>, and of the methods
  84C<hexdigest> and C<b64digest> in terms of C<digest>.
  85
  86Digest implementations might want to inherit from this class to get
  87this implementations of the alternative I<add> and I<digest> methods.
  88A minimal subclass needs to implement the following methods by itself:
  89
  90    new
  91    clone
  92    add
  93    digest
  94
  95The arguments and expected behaviour of these methods are described in
  96L<Digest>.
  97
  98=head1 SEE ALSO
  99
 100L<Digest>
 101
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.