Commit | Line | Data |
b12d758c |
1 | #!perl -w |
2 | |
3 | use Test qw(plan ok); |
4 | plan tests => 12; |
5 | |
6 | { |
7 | package LenDigest; |
8 | require Digest::base; |
9 | use vars qw(@ISA); |
10 | @ISA = qw(Digest::base); |
11 | |
12 | sub new { |
13 | my $class = shift; |
14 | my $str = ""; |
15 | bless \$str, $class; |
16 | } |
17 | |
18 | sub add { |
19 | my $self = shift; |
20 | $$self .= join("", @_); |
21 | return $self; |
22 | } |
23 | |
24 | sub digest { |
25 | my $self = shift; |
26 | my $len = length($$self); |
27 | my $first = ($len > 0) ? substr($$self, 0, 1) : "X"; |
28 | $$self = ""; |
29 | return sprintf "$first%04d", $len; |
30 | } |
31 | } |
32 | |
33 | my $ctx = LenDigest->new; |
34 | ok($ctx->digest, "X0000"); |
cf0d1c66 |
35 | |
36 | my $EBCDIC = ord('A') == 193; |
37 | |
38 | if ($EBCDIC) { |
39 | ok($ctx->hexdigest, "e7f0f0f0f0"); |
40 | ok($ctx->b64digest, "5/Dw8PA"); |
41 | } else { |
42 | ok($ctx->hexdigest, "5830303030"); |
43 | ok($ctx->b64digest, "WDAwMDA"); |
44 | } |
b12d758c |
45 | |
46 | $ctx->add("foo"); |
47 | ok($ctx->digest, "f0003"); |
48 | |
49 | $ctx->add("foo"); |
cf0d1c66 |
50 | ok($ctx->hexdigest, $EBCDIC ? "86f0f0f0f3" : "6630303033"); |
b12d758c |
51 | |
52 | $ctx->add("foo"); |
cf0d1c66 |
53 | ok($ctx->b64digest, $EBCDIC ? "hvDw8PM" : "ZjAwMDM"); |
b12d758c |
54 | |
55 | open(F, ">xxtest$$") || die; |
56 | binmode(F); |
57 | print F "abc" x 100, "\n"; |
58 | close(F) || die; |
59 | |
60 | open(F, "xxtest$$") || die; |
61 | $ctx->addfile(*F); |
62 | close(F); |
63 | unlink("xxtest$$") || warn; |
64 | |
65 | ok($ctx->digest, "a0301"); |
66 | |
67 | eval { |
68 | $ctx->add_bits("1010"); |
69 | }; |
70 | ok($@ =~ /^Number of bits must be multiple of 8/); |
71 | |
cf0d1c66 |
72 | $ctx->add_bits($EBCDIC ? "11100100" : "01010101"); |
b12d758c |
73 | ok($ctx->digest, "U0001"); |
74 | |
75 | eval { |
76 | $ctx->add_bits("abc", 12); |
77 | }; |
78 | ok($@ =~ /^Number of bits must be multiple of 8/); |
79 | |
80 | $ctx->add_bits("abc", 16); |
81 | ok($ctx->digest, "a0002"); |
82 | |
83 | $ctx->add_bits("abc", 32); |
84 | ok($ctx->digest, "a0003"); |