ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/Digest/base.pm
Revision: 1.1
Committed: Thu Jun 30 14:27:10 2005 UTC (21 years, 3 months ago) by root
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.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>