File | /opt/wise/lib/perl5/5.10.0/Digest/base.pm | Statements Executed | 8 | Total Time | 0.00041 seconds |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine | |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | Digest::base:: | BEGIN |
0 | 0 | 0 | 0 | 0 | Digest::base:: | add_bits |
0 | 0 | 0 | 0 | 0 | Digest::base:: | addfile |
0 | 0 | 0 | 0 | 0 | Digest::base:: | b64digest |
0 | 0 | 0 | 0 | 0 | Digest::base:: | hexdigest |
0 | 0 | 0 | 0 | 0 | Digest::base:: | reset |
Line | Stmts. | Exclusive Time | Avg. | Code |
---|---|---|---|---|
1 | package Digest::base; | |||
2 | ||||
3 | 3 | 4.3e-5 | 1.4e-5 | use strict; # spent 9µs making 1 call to strict::import |
4 | 3 | 0.00036 | 0.00012 | use vars qw($VERSION); # spent 25µs making 1 call to vars::import |
5 | 1 | 1.0e-6 | 1.0e-6 | $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 | 3.0e-6 | 3.0e-6 | 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> |