Poly1305
Karel Miko
7 years ago
74 | 74 | xcbc_state state; |
75 | 75 | int id; |
76 | 76 | } *Crypt__Mac__XCBC; |
77 | ||
78 | typedef struct poly1305_struct { /* used by Crypt::Mac::Poly1305 */ | |
79 | poly1305_state state; | |
80 | int id; | |
81 | } *Crypt__Mac__Poly1305; | |
77 | 82 | |
78 | 83 | typedef struct cbc_struct { /* used by Crypt::Mode::CBC */ |
79 | 84 | int cipher_id, cipher_rounds; |
445 | 450 | INCLUDE: inc/CryptX_Mac_Pelican.xs.inc |
446 | 451 | INCLUDE: inc/CryptX_Mac_PMAC.xs.inc |
447 | 452 | INCLUDE: inc/CryptX_Mac_XCBC.xs.inc |
453 | INCLUDE: inc/CryptX_Mac_Poly1305.xs.inc | |
448 | 454 | |
449 | 455 | INCLUDE: inc/CryptX_Mode_CBC.xs.inc |
450 | 456 | INCLUDE: inc/CryptX_Mode_ECB.xs.inc |
10 | 10 | glob('src/ltc/*/*/*/*/*.c'), |
11 | 11 | ); |
12 | 12 | my $myextlib = "src/liballinone$Config{lib_ext}"; |
13 | my $mycflags = "$Config{cccdlflags} $Config{ccflags} $Config{optimize} -Iltm -Iltc/headers -DLTC_SOURCE -DLTC_NO_TEST -DLTC_NO_PROTOTYPES -DLTM_DESC"; | |
13 | my $mycflags = "$Config{cccdlflags} $Config{ccflags} $Config{optimize} -Iltm -Iltc/headers -DLTC_SOURCE -DLTC_NO_TEST -DLTC_NO_FILE -DLTC_NO_PROTOTYPES -DLTM_DESC"; | |
14 | 14 | |
15 | 15 | #FIX: gcc with -flto is a trouble maker see https://github.com/DCIT/perl-CryptX/issues/32 |
16 | 16 | $mycflags =~ s/-flto\b//g; |
3 | 3 | |
4 | 4 | use strict; |
5 | 5 | use warnings; |
6 | our $VERSION = '0.001'; | |
6 | our $VERSION = '[%(pmver || "0.000")%]'; | |
7 | 7 | |
8 | 8 | use base qw(Crypt::Mac Exporter); |
9 | 9 | our %EXPORT_TAGS = ( all => [qw( [%lc_name%] [%lc_name%]_hex [%lc_name%]_b64 [%lc_name%]_b64u )] ); |
19 | 19 | sub [%lc_name%]_hex { Crypt::Mac::[%orig_name%]->new(shift, shift)->add(@_)->hexmac } |
20 | 20 | sub [%lc_name%]_b64 { Crypt::Mac::[%orig_name%]->new(shift, shift)->add(@_)->b64mac } |
21 | 21 | sub [%lc_name%]_b64u { Crypt::Mac::[%orig_name%]->new(shift, shift)->add(@_)->b64umac } |
22 | [%-ELSIF lc_name == 'pelican' %] | |
22 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
23 | 23 | sub new { my $class = shift; _new(@_) } |
24 | 24 | sub [%lc_name%] { Crypt::Mac::[%orig_name%]->new(shift)->add(@_)->mac } |
25 | 25 | sub [%lc_name%]_hex { Crypt::Mac::[%orig_name%]->new(shift)->add(@_)->hexmac } |
54 | 54 | $[%lc_name%]_hex = [%lc_name%]_hex('SHA256', $key, 'data buffer'); |
55 | 55 | $[%lc_name%]_b64 = [%lc_name%]_b64('SHA256', $key, 'data buffer'); |
56 | 56 | $[%lc_name%]_b64u = [%lc_name%]_b64u('SHA256', $key, 'data buffer'); |
57 | [%-ELSIF lc_name == 'pelican' %] | |
57 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
58 | 58 | $[%lc_name%]_raw = [%lc_name%]($key, 'data buffer'); |
59 | 59 | $[%lc_name%]_hex = [%lc_name%]_hex($key, 'data buffer'); |
60 | 60 | $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'data buffer'); |
71 | 71 | |
72 | 72 | [%-IF lc_name == 'hmac' %] |
73 | 73 | $d = Crypt::Mac::[%orig_name%]->new('SHA256', $key); |
74 | [%-ELSIF lc_name == 'pelican' %] | |
74 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
75 | 75 | $d = Crypt::Mac::[%orig_name%]->new($key); |
76 | 76 | [%-ELSE%] |
77 | 77 | $d = Crypt::Mac::[%orig_name%]->new($cipher_name, $key); |
110 | 110 | $[%lc_name%]_raw = [%lc_name%]($hash_name, $key, 'data buffer'); |
111 | 111 | #or |
112 | 112 | $[%lc_name%]_raw = [%lc_name%]($hash_name, $key, 'any data', 'more data', 'even more data'); |
113 | [%-ELSIF lc_name == 'pelican' %] | |
113 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
114 | 114 | $[%lc_name%]_raw = [%lc_name%]($key, 'data buffer'); |
115 | 115 | #or |
116 | 116 | $[%lc_name%]_raw = [%lc_name%]($key, 'any data', 'more data', 'even more data'); |
128 | 128 | $[%lc_name%]_hex = [%lc_name%]_hex($hash_name, $key, 'data buffer'); |
129 | 129 | #or |
130 | 130 | $[%lc_name%]_hex = [%lc_name%]_hex($hash_name, $key, 'any data', 'more data', 'even more data'); |
131 | [%-ELSIF lc_name == 'pelican' %] | |
131 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
132 | 132 | $[%lc_name%]_hex = [%lc_name%]_hex($key, 'data buffer'); |
133 | 133 | #or |
134 | 134 | $[%lc_name%]_hex = [%lc_name%]_hex($key, 'any data', 'more data', 'even more data'); |
146 | 146 | $[%lc_name%]_b64 = [%lc_name%]_b64($hash_name, $key, 'data buffer'); |
147 | 147 | #or |
148 | 148 | $[%lc_name%]_b64 = [%lc_name%]_b64($hash_name, $key, 'any data', 'more data', 'even more data'); |
149 | [%-ELSIF lc_name == 'pelican' %] | |
149 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
150 | 150 | $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'data buffer'); |
151 | 151 | #or |
152 | 152 | $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'any data', 'more data', 'even more data'); |
164 | 164 | $[%lc_name%]_b64url = [%lc_name%]_b64u($hash_name, $key, 'data buffer'); |
165 | 165 | #or |
166 | 166 | $[%lc_name%]_b64url = [%lc_name%]_b64u($hash_name, $key, 'any data', 'more data', 'even more data'); |
167 | [%-ELSIF lc_name == 'pelican' %] | |
167 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
168 | 168 | $[%lc_name%]_b64url = [%lc_name%]_b64u($key, 'data buffer'); |
169 | 169 | #or |
170 | 170 | $[%lc_name%]_b64url = [%lc_name%]_b64u($key, 'any data', 'more data', 'even more data'); |
180 | 180 | |
181 | 181 | [%-IF lc_name == 'hmac' %] |
182 | 182 | $d = Crypt::Mac::[%orig_name%]->new($hash_name, $key); |
183 | [%-ELSIF lc_name == 'pelican' %] | |
183 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
184 | 184 | $d = Crypt::Mac::[%orig_name%]->new($key); |
185 | 185 | [%-ELSE%] |
186 | 186 | $d = Crypt::Mac::[%orig_name%]->new($cipher_name, $key); |
4 | 4 | Crypt::Mac::[%orig_name%] |
5 | 5 | [%-IF lc_name == 'hmac' %] |
6 | 6 | _new(char * hash_name, SV * key) |
7 | [%-ELSIF lc_name == 'pelican' %] | |
7 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
8 | 8 | _new(SV * key) |
9 | 9 | [%-ELSE%] |
10 | 10 | _new(char * cipher_name, SV * key) |
19 | 19 | |
20 | 20 | id = find_hash(hash_name); |
21 | 21 | if(id==-1) croak("FATAL: find_hash failed for '%s'", hash_name); |
22 | [%-ELSIF lc_name == 'pelican' %] | |
22 | [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
23 | 23 | [%-ELSE%] |
24 | 24 | int id; |
25 | 25 | |
33 | 33 | Newz(0, RETVAL, 1, struct [%lc_name%]_struct); |
34 | 34 | if (!RETVAL) croak("FATAL: Newz failed"); |
35 | 35 | |
36 | [%-IF lc_name == 'pelican' %] | |
36 | [%-IF lc_name == 'pelican' || lc_name == 'poly1305' %] | |
37 | 37 | rv = [%lc_name%]_init(&RETVAL->state, k, (unsigned long)k_len); |
38 | 38 | [%-ELSE%] |
39 | 39 | rv = [%lc_name%]_init(&RETVAL->state, id, k, (unsigned long)k_len); |
27 | 27 | Pelican => { info=>'Message authentication code Pelican (AES based MAC)', urls=>['http://eprint.iacr.org/2005/088.pdf'] }, |
28 | 28 | PMAC => { info=>'Message authentication code PMAC', urls=>['https://en.wikipedia.org/wiki/PMAC_%28cryptography%29'] }, |
29 | 29 | XCBC => { info=>'Message authentication code XCBC (RFC 3566)', urls=>['https://www.ietf.org/rfc/rfc3566.txt'] }, |
30 | Poly1305=> { info=>'Message authentication code Poly1305 (RFC 7539)', urls=>['https://www.ietf.org/rfc/rfc7539.txt'] }, | |
30 | 31 | ); |
31 | 32 | |
32 | 33 | my @test_strings = ( '', '123', "test\0test\0test\n"); |
34 | ||
35 | my ($pmver) = grep { /^our\s+\$VERSION/ } read_file("$FindBin::Bin/../lib/Crypt/Mac.pm"); | |
36 | $pmver =~ s/our\s+\$VERSION\s*=\s*'(.*?)'.*$/$1/s; | |
33 | 37 | |
34 | 38 | for my $n (keys %list) { |
35 | 39 | warn "Processing mac: '$n'\n"; |
36 | 40 | my $data = { |
37 | 41 | comment => "### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY!", |
42 | pmver => $pmver, | |
38 | 43 | orig_name => $n, |
39 | 44 | uc_name => uc($n), |
40 | 45 | lc_name => lc($n), |
49 | 54 | require Crypt::Mac::Pelican; |
50 | 55 | require Crypt::Mac::PMAC; |
51 | 56 | require Crypt::Mac::XCBC; |
57 | require Crypt::Mac::Poly1305; | |
52 | 58 | |
53 | 59 | for (@test_strings) { |
54 | 60 | if ($n eq 'HMAC') { |
62 | 68 | push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Pelican->new('12345678901234561234567890123456')->add($_)->mac), data=>pp($_), args=>"'12345678901234561234567890123456'" }; |
63 | 69 | push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaa')->add($_)->mac), data=>pp($_), args=>"'aaaaaaaaaaaaaaaa'" }; |
64 | 70 | push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add($_)->mac), data=>pp($_), args=>"'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'" }; |
71 | } | |
72 | elsif ($n eq 'Poly1305') { | |
73 | push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add($_)->mac), data=>pp($_), args=>"'12345678901234561234567890123456'" }; | |
74 | push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add($_)->mac), data=>pp($_), args=>"'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'" }; | |
65 | 75 | } |
66 | 76 | else { |
67 | 77 | push @{$data->{t_strings}}, { mac=>unpack('H*', "Crypt::Mac::$n"->new('AES', '1234567890123456')->add($_)->mac), data=>pp($_), args=>"'AES','1234567890123456'" }; |
88 | 98 | copy("$pm_out.$$", $pm_out) and warn("Writting '$pm_out'\n") unless equal_files("$pm_out.$$", $pm_out); |
89 | 99 | unlink "$pm_out.$$"; |
90 | 100 | |
91 | my $xs_out = catfile($outdir_l, "CryptX_Mac_$n.xs.inc"); | |
101 | my $xs_out = catfile($outdir_l, "../inc/CryptX_Mac_$n.xs.inc"); | |
92 | 102 | my $xs_tt = Template->new(ABSOLUTE=>1) || die $Template::ERROR, "\n"; |
93 | 103 | $xs_tt->process("$FindBin::Bin/Mac.xs.inc.tt", $data, "$xs_out.$$", {binmode=>1}) || die $xs_tt->error(), "\n"; |
94 | 104 | copy("$xs_out.$$", $xs_out) and warn("Writting '$xs_out'\n") unless equal_files("$xs_out.$$", $xs_out); |
0 | MODULE = CryptX PACKAGE = Crypt::Mac::Poly1305 | |
1 | ||
2 | ### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY! | |
3 | ||
4 | Crypt::Mac::Poly1305 | |
5 | _new(SV * key) | |
6 | CODE: | |
7 | { | |
8 | STRLEN k_len=0; | |
9 | unsigned char *k=NULL; | |
10 | int rv; | |
11 | ||
12 | if (!SvPOK(key)) croak("FATAL: key must be string/buffer scalar"); | |
13 | k = (unsigned char *) SvPVbyte(key, k_len); | |
14 | ||
15 | Newz(0, RETVAL, 1, struct poly1305_struct); | |
16 | if (!RETVAL) croak("FATAL: Newz failed"); | |
17 | ||
18 | rv = poly1305_init(&RETVAL->state, k, (unsigned long)k_len); | |
19 | if (rv != CRYPT_OK) croak("FATAL: poly1305_init failed: %s", error_to_string(rv)); | |
20 | } | |
21 | OUTPUT: | |
22 | RETVAL | |
23 | ||
24 | void | |
25 | DESTROY(Crypt::Mac::Poly1305 self) | |
26 | CODE: | |
27 | Safefree(self); | |
28 | ||
29 | Crypt::Mac::Poly1305 | |
30 | clone(Crypt::Mac::Poly1305 self) | |
31 | CODE: | |
32 | Newz(0, RETVAL, 1, struct poly1305_struct); | |
33 | if (!RETVAL) croak("FATAL: Newz failed"); | |
34 | Copy(&self->state, &RETVAL->state, 1, struct poly1305_struct); | |
35 | OUTPUT: | |
36 | RETVAL | |
37 | ||
38 | void | |
39 | _add_single(Crypt::Mac::Poly1305 self, SV * data) | |
40 | CODE: | |
41 | { | |
42 | int rv; | |
43 | STRLEN in_data_len; | |
44 | unsigned char *in_data; | |
45 | ||
46 | in_data = (unsigned char *)SvPVbyte(data, in_data_len); | |
47 | if (in_data_len>0) { | |
48 | rv = poly1305_process(&self->state, in_data, (unsigned long)in_data_len); | |
49 | if (rv != CRYPT_OK) croak("FATAL: poly1305_process failed: %s", error_to_string(rv)); | |
50 | } | |
51 | } | |
52 | ||
53 | SV * | |
54 | mac(Crypt::Mac::Poly1305 self) | |
55 | CODE: | |
56 | { | |
57 | char mac[MAXBLOCKSIZE]; | |
58 | unsigned long mac_len; | |
59 | int rv; | |
60 | ||
61 | mac_len = sizeof(mac); | |
62 | rv = poly1305_done(&self->state, (unsigned char*)mac, &mac_len); | |
63 | if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv)); | |
64 | RETVAL = newSVpvn(mac, mac_len); | |
65 | } | |
66 | OUTPUT: | |
67 | RETVAL | |
68 | ||
69 | SV * | |
70 | b64mac(Crypt::Mac::Poly1305 self) | |
71 | CODE: | |
72 | { | |
73 | unsigned char mac[MAXBLOCKSIZE]; | |
74 | unsigned long mac_len; | |
75 | int rv; | |
76 | unsigned long outlen; | |
77 | char mac_base64[MAXBLOCKSIZE*2 + 1]; | |
78 | ||
79 | mac_len = sizeof(mac); | |
80 | rv = poly1305_done(&self->state, mac, &mac_len); | |
81 | if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv)); | |
82 | outlen = sizeof(mac_base64); | |
83 | rv = base64_encode(mac, mac_len, (unsigned char*)mac_base64, &outlen); | |
84 | if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv)); | |
85 | RETVAL = newSVpvn(mac_base64, outlen); | |
86 | } | |
87 | OUTPUT: | |
88 | RETVAL | |
89 | ||
90 | SV * | |
91 | b64umac(Crypt::Mac::Poly1305 self) | |
92 | CODE: | |
93 | { | |
94 | unsigned char mac[MAXBLOCKSIZE]; | |
95 | unsigned long mac_len; | |
96 | int rv; | |
97 | unsigned long outlen; | |
98 | char mac_base64[MAXBLOCKSIZE*2 + 1]; | |
99 | ||
100 | mac_len = sizeof(mac); | |
101 | rv = poly1305_done(&self->state, mac, &mac_len); | |
102 | if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv)); | |
103 | outlen = sizeof(mac_base64); | |
104 | rv = base64url_encode(mac, mac_len, (unsigned char*)mac_base64, &outlen); | |
105 | if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv)); | |
106 | RETVAL = newSVpvn(mac_base64, outlen); | |
107 | } | |
108 | OUTPUT: | |
109 | RETVAL | |
110 | ||
111 | SV * | |
112 | hexmac(Crypt::Mac::Poly1305 self) | |
113 | CODE: | |
114 | { | |
115 | unsigned char mac[MAXBLOCKSIZE]; | |
116 | unsigned long mac_len, i; | |
117 | int rv; | |
118 | char mac_hex[MAXBLOCKSIZE*2 + 1]; | |
119 | ||
120 | mac_len = sizeof(mac); | |
121 | rv = poly1305_done(&self->state, mac, &mac_len); | |
122 | if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv)); | |
123 | mac_hex[0] = '\0'; | |
124 | for(i=0; i<mac_len; i++) | |
125 | sprintf(&mac_hex[2*i], "%02x", mac[i]); | |
126 | RETVAL = newSVpvn(mac_hex, strlen(mac_hex)); | |
127 | } | |
128 | OUTPUT: | |
129 | RETVAL |
0 | package Crypt::Mac::Poly1305; | |
1 | ||
2 | ### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY! | |
3 | ||
4 | use strict; | |
5 | use warnings; | |
6 | our $VERSION = '0.047'; | |
7 | ||
8 | use base qw(Crypt::Mac Exporter); | |
9 | our %EXPORT_TAGS = ( all => [qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u )] ); | |
10 | our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); | |
11 | our @EXPORT = qw(); | |
12 | ||
13 | use CryptX; | |
14 | sub new { my $class = shift; _new(@_) } | |
15 | sub poly1305 { Crypt::Mac::Poly1305->new(shift)->add(@_)->mac } | |
16 | sub poly1305_hex { Crypt::Mac::Poly1305->new(shift)->add(@_)->hexmac } | |
17 | sub poly1305_b64 { Crypt::Mac::Poly1305->new(shift)->add(@_)->b64mac } | |
18 | sub poly1305_b64u { Crypt::Mac::Poly1305->new(shift)->add(@_)->b64umac } | |
19 | ||
20 | 1; | |
21 | ||
22 | =pod | |
23 | ||
24 | =head1 NAME | |
25 | ||
26 | Crypt::Mac::Poly1305 - Message authentication code Poly1305 (RFC 7539) | |
27 | ||
28 | =head1 SYNOPSIS | |
29 | ||
30 | ### Functional interface: | |
31 | use Crypt::Mac::Poly1305 qw( poly1305 poly1305_hex ); | |
32 | ||
33 | # calculate MAC from string/buffer | |
34 | $poly1305_raw = poly1305($key, 'data buffer'); | |
35 | $poly1305_hex = poly1305_hex($key, 'data buffer'); | |
36 | $poly1305_b64 = poly1305_b64($key, 'data buffer'); | |
37 | $poly1305_b64u = poly1305_b64u($key, 'data buffer'); | |
38 | ||
39 | ### OO interface: | |
40 | use Crypt::Mac::Poly1305; | |
41 | ||
42 | $d = Crypt::Mac::Poly1305->new($key); | |
43 | $d->add('any data'); | |
44 | $d->addfile('filename.dat'); | |
45 | $d->addfile(*FILEHANDLE); | |
46 | $result_raw = $d->mac; # raw bytes | |
47 | $result_hex = $d->hexmac; # hexadecimal form | |
48 | $result_b64 = $d->b64mac; # Base64 form | |
49 | $result_b64u = $d->b64umac; # Base64 URL Safe form | |
50 | ||
51 | =head1 DESCRIPTION | |
52 | ||
53 | Provides an interface to the Poly1305 message authentication code (MAC) algorithm. | |
54 | ||
55 | =head1 EXPORT | |
56 | ||
57 | Nothing is exported by default. | |
58 | ||
59 | You can export selected functions: | |
60 | ||
61 | use Crypt::Mac::Poly1305 qw(poly1305 poly1305_hex ); | |
62 | ||
63 | Or all of them at once: | |
64 | ||
65 | use Crypt::Mac::Poly1305 ':all'; | |
66 | ||
67 | =head1 FUNCTIONS | |
68 | ||
69 | =head2 poly1305 | |
70 | ||
71 | Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a binary string. | |
72 | ||
73 | $poly1305_raw = poly1305($key, 'data buffer'); | |
74 | #or | |
75 | $poly1305_raw = poly1305($key, 'any data', 'more data', 'even more data'); | |
76 | ||
77 | =head2 poly1305_hex | |
78 | ||
79 | Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a hexadecimal string. | |
80 | ||
81 | $poly1305_hex = poly1305_hex($key, 'data buffer'); | |
82 | #or | |
83 | $poly1305_hex = poly1305_hex($key, 'any data', 'more data', 'even more data'); | |
84 | ||
85 | =head2 poly1305_b64 | |
86 | ||
87 | Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a Base64 string. | |
88 | ||
89 | $poly1305_b64 = poly1305_b64($key, 'data buffer'); | |
90 | #or | |
91 | $poly1305_b64 = poly1305_b64($key, 'any data', 'more data', 'even more data'); | |
92 | ||
93 | =head2 poly1305_b64u | |
94 | ||
95 | Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5). | |
96 | ||
97 | $poly1305_b64url = poly1305_b64u($key, 'data buffer'); | |
98 | #or | |
99 | $poly1305_b64url = poly1305_b64u($key, 'any data', 'more data', 'even more data'); | |
100 | ||
101 | =head1 METHODS | |
102 | ||
103 | =head2 new | |
104 | ||
105 | $d = Crypt::Mac::Poly1305->new($key); | |
106 | ||
107 | =head2 clone | |
108 | ||
109 | $d->clone(); | |
110 | ||
111 | =head2 reset | |
112 | ||
113 | $d->reset(); | |
114 | ||
115 | =head2 add | |
116 | ||
117 | $d->add('any data'); | |
118 | #or | |
119 | $d->add('any data', 'more data', 'even more data'); | |
120 | ||
121 | =head2 addfile | |
122 | ||
123 | $d->addfile('filename.dat'); | |
124 | #or | |
125 | $d->addfile(*FILEHANDLE); | |
126 | ||
127 | =head2 mac | |
128 | ||
129 | $result_raw = $d->mac(); | |
130 | ||
131 | =head2 hexmac | |
132 | ||
133 | $result_hex = $d->hexmac(); | |
134 | ||
135 | =head2 b64mac | |
136 | ||
137 | $result_b64 = $d->b64mac(); | |
138 | ||
139 | =head2 b64umac | |
140 | ||
141 | $result_b64url = $d->b64umac(); | |
142 | ||
143 | =head1 SEE ALSO | |
144 | ||
145 | =over | |
146 | ||
147 | =item * L<CryptX|CryptX> | |
148 | ||
149 | =item * L<https://www.ietf.org/rfc/rfc7539.txt|https://www.ietf.org/rfc/rfc7539.txt> | |
150 | ||
151 | =back | |
152 | ||
153 | =cut | |
154 | ||
155 | __END__⏎ |
4 | 4 | |
5 | 5 | plan skip_all => "File::Find not installed" unless eval { require File::Find }; |
6 | 6 | plan skip_all => "Test::Pod not installed" unless eval { require Test::Pod }; |
7 | plan tests => 81; | |
7 | plan tests => 82; | |
8 | 8 | |
9 | 9 | my @files; |
10 | 10 | File::Find::find({ wanted=>sub { push @files, $_ if /\.pm$/ }, no_chdir=>1 }, 'lib'); |
30 | 30 | is( f9_hex('Blowfish','12345678901234561234567890123456',""), '063daede33be0e37', 'F9/func+hex/4'); |
31 | 31 | is( f9_b64('Blowfish','12345678901234561234567890123456',""), 'Bj2u3jO+Djc=', 'F9/func+b64/4'); |
32 | 32 | is( f9_b64u('Blowfish','12345678901234561234567890123456',""), 'Bj2u3jO-Djc', 'F9/func+b64u/4'); |
33 | is( unpack('H*', Crypt::Mac::F9->new('AES','1234567890123456')->add("123")->mac), 'b3ec60e084566cd17423b3636d395f30', 'F9/oo+raw/5'); | |
34 | is( Crypt::Mac::F9->new('AES','1234567890123456')->add("123")->hexmac, 'b3ec60e084566cd17423b3636d395f30', 'F9/oo+hex/5'); | |
35 | is( unpack('H*', f9('AES','1234567890123456',"123")), 'b3ec60e084566cd17423b3636d395f30', 'F9/func+raw/5'); | |
36 | is( f9_hex('AES','1234567890123456',"123"), 'b3ec60e084566cd17423b3636d395f30', 'F9/func+hex/5'); | |
37 | is( f9_b64('AES','1234567890123456',"123"), 's+xg4IRWbNF0I7NjbTlfMA==', 'F9/func+b64/5'); | |
38 | is( f9_b64u('AES','1234567890123456',"123"), 's-xg4IRWbNF0I7NjbTlfMA', 'F9/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::F9->new('AES','12345678901234561234567890123456')->add("123")->mac), 'ea9a400b9a8dceaec669c1dea926d567', 'F9/oo+raw/6'); | |
40 | is( Crypt::Mac::F9->new('AES','12345678901234561234567890123456')->add("123")->hexmac, 'ea9a400b9a8dceaec669c1dea926d567', 'F9/oo+hex/6'); | |
41 | is( unpack('H*', f9('AES','12345678901234561234567890123456',"123")), 'ea9a400b9a8dceaec669c1dea926d567', 'F9/func+raw/6'); | |
42 | is( f9_hex('AES','12345678901234561234567890123456',"123"), 'ea9a400b9a8dceaec669c1dea926d567', 'F9/func+hex/6'); | |
43 | is( f9_b64('AES','12345678901234561234567890123456',"123"), '6ppAC5qNzq7GacHeqSbVZw==', 'F9/func+b64/6'); | |
44 | is( f9_b64u('AES','12345678901234561234567890123456',"123"), '6ppAC5qNzq7GacHeqSbVZw', 'F9/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::F9->new('Blowfish','1234567890123456')->add("123")->mac), '1fdb454cb94a332b', 'F9/oo+raw/7'); | |
46 | is( Crypt::Mac::F9->new('Blowfish','1234567890123456')->add("123")->hexmac, '1fdb454cb94a332b', 'F9/oo+hex/7'); | |
47 | is( unpack('H*', f9('Blowfish','1234567890123456',"123")), '1fdb454cb94a332b', 'F9/func+raw/7'); | |
48 | is( f9_hex('Blowfish','1234567890123456',"123"), '1fdb454cb94a332b', 'F9/func+hex/7'); | |
49 | is( f9_b64('Blowfish','1234567890123456',"123"), 'H9tFTLlKMys=', 'F9/func+b64/7'); | |
50 | is( f9_b64u('Blowfish','1234567890123456',"123"), 'H9tFTLlKMys', 'F9/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::F9->new('Blowfish','12345678901234561234567890123456')->add("123")->mac), '1fdb454cb94a332b', 'F9/oo+raw/8'); | |
52 | is( Crypt::Mac::F9->new('Blowfish','12345678901234561234567890123456')->add("123")->hexmac, '1fdb454cb94a332b', 'F9/oo+hex/8'); | |
53 | is( unpack('H*', f9('Blowfish','12345678901234561234567890123456',"123")), '1fdb454cb94a332b', 'F9/func+raw/8'); | |
54 | is( f9_hex('Blowfish','12345678901234561234567890123456',"123"), '1fdb454cb94a332b', 'F9/func+hex/8'); | |
55 | is( f9_b64('Blowfish','12345678901234561234567890123456',"123"), 'H9tFTLlKMys=', 'F9/func+b64/8'); | |
56 | is( f9_b64u('Blowfish','12345678901234561234567890123456',"123"), 'H9tFTLlKMys', 'F9/func+b64u/8'); | |
33 | is( unpack('H*', Crypt::Mac::F9->new('AES','1234567890123456')->add(123)->mac), 'b3ec60e084566cd17423b3636d395f30', 'F9/oo+raw/5'); | |
34 | is( Crypt::Mac::F9->new('AES','1234567890123456')->add(123)->hexmac, 'b3ec60e084566cd17423b3636d395f30', 'F9/oo+hex/5'); | |
35 | is( unpack('H*', f9('AES','1234567890123456',123)), 'b3ec60e084566cd17423b3636d395f30', 'F9/func+raw/5'); | |
36 | is( f9_hex('AES','1234567890123456',123), 'b3ec60e084566cd17423b3636d395f30', 'F9/func+hex/5'); | |
37 | is( f9_b64('AES','1234567890123456',123), 's+xg4IRWbNF0I7NjbTlfMA==', 'F9/func+b64/5'); | |
38 | is( f9_b64u('AES','1234567890123456',123), 's-xg4IRWbNF0I7NjbTlfMA', 'F9/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::F9->new('AES','12345678901234561234567890123456')->add(123)->mac), 'ea9a400b9a8dceaec669c1dea926d567', 'F9/oo+raw/6'); | |
40 | is( Crypt::Mac::F9->new('AES','12345678901234561234567890123456')->add(123)->hexmac, 'ea9a400b9a8dceaec669c1dea926d567', 'F9/oo+hex/6'); | |
41 | is( unpack('H*', f9('AES','12345678901234561234567890123456',123)), 'ea9a400b9a8dceaec669c1dea926d567', 'F9/func+raw/6'); | |
42 | is( f9_hex('AES','12345678901234561234567890123456',123), 'ea9a400b9a8dceaec669c1dea926d567', 'F9/func+hex/6'); | |
43 | is( f9_b64('AES','12345678901234561234567890123456',123), '6ppAC5qNzq7GacHeqSbVZw==', 'F9/func+b64/6'); | |
44 | is( f9_b64u('AES','12345678901234561234567890123456',123), '6ppAC5qNzq7GacHeqSbVZw', 'F9/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::F9->new('Blowfish','1234567890123456')->add(123)->mac), '1fdb454cb94a332b', 'F9/oo+raw/7'); | |
46 | is( Crypt::Mac::F9->new('Blowfish','1234567890123456')->add(123)->hexmac, '1fdb454cb94a332b', 'F9/oo+hex/7'); | |
47 | is( unpack('H*', f9('Blowfish','1234567890123456',123)), '1fdb454cb94a332b', 'F9/func+raw/7'); | |
48 | is( f9_hex('Blowfish','1234567890123456',123), '1fdb454cb94a332b', 'F9/func+hex/7'); | |
49 | is( f9_b64('Blowfish','1234567890123456',123), 'H9tFTLlKMys=', 'F9/func+b64/7'); | |
50 | is( f9_b64u('Blowfish','1234567890123456',123), 'H9tFTLlKMys', 'F9/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::F9->new('Blowfish','12345678901234561234567890123456')->add(123)->mac), '1fdb454cb94a332b', 'F9/oo+raw/8'); | |
52 | is( Crypt::Mac::F9->new('Blowfish','12345678901234561234567890123456')->add(123)->hexmac, '1fdb454cb94a332b', 'F9/oo+hex/8'); | |
53 | is( unpack('H*', f9('Blowfish','12345678901234561234567890123456',123)), '1fdb454cb94a332b', 'F9/func+raw/8'); | |
54 | is( f9_hex('Blowfish','12345678901234561234567890123456',123), '1fdb454cb94a332b', 'F9/func+hex/8'); | |
55 | is( f9_b64('Blowfish','12345678901234561234567890123456',123), 'H9tFTLlKMys=', 'F9/func+b64/8'); | |
56 | is( f9_b64u('Blowfish','12345678901234561234567890123456',123), 'H9tFTLlKMys', 'F9/func+b64u/8'); | |
57 | 57 | is( unpack('H*', Crypt::Mac::F9->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '9fa4876ee09966ff8c1ae43b05e0b155', 'F9/oo+raw/9'); |
58 | 58 | is( Crypt::Mac::F9->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '9fa4876ee09966ff8c1ae43b05e0b155', 'F9/oo+hex/9'); |
59 | 59 | is( unpack('H*', f9('AES','1234567890123456',"test\0test\0test\n")), '9fa4876ee09966ff8c1ae43b05e0b155', 'F9/func+raw/9'); |
30 | 30 | is( hmac_hex('Whirlpool','secretkey',""), '742456ee0548c7fe7e81fb86a05b291d0fa37bc95f1ce562a8a4f4e7bd37a5862a16647963ec3b934355cff410f0d0d8b98fa531f56547a85c1eb1ab25b22a5e', 'HMAC/func+hex/4'); |
31 | 31 | is( hmac_b64('Whirlpool','secretkey',""), 'dCRW7gVIx/5+gfuGoFspHQ+je8lfHOViqKT05703pYYqFmR5Y+w7k0NVz/QQ8NDYuY+lMfVlR6hcHrGrJbIqXg==', 'HMAC/func+b64/4'); |
32 | 32 | is( hmac_b64u('Whirlpool','secretkey',""), 'dCRW7gVIx_5-gfuGoFspHQ-je8lfHOViqKT05703pYYqFmR5Y-w7k0NVz_QQ8NDYuY-lMfVlR6hcHrGrJbIqXg', 'HMAC/func+b64u/4'); |
33 | is( unpack('H*', Crypt::Mac::HMAC->new('SHA1','secretkey')->add("123")->mac), 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/oo+raw/5'); | |
34 | is( Crypt::Mac::HMAC->new('SHA1','secretkey')->add("123")->hexmac, 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/oo+hex/5'); | |
35 | is( unpack('H*', hmac('SHA1','secretkey',"123")), 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/func+raw/5'); | |
36 | is( hmac_hex('SHA1','secretkey',"123"), 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/func+hex/5'); | |
37 | is( hmac_b64('SHA1','secretkey',"123"), '0ejq+d4YQ/2i+o5ju2zIphpwb9Y=', 'HMAC/func+b64/5'); | |
38 | is( hmac_b64u('SHA1','secretkey',"123"), '0ejq-d4YQ_2i-o5ju2zIphpwb9Y', 'HMAC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::HMAC->new('SHA512','secretkey')->add("123")->mac), 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/oo+raw/6'); | |
40 | is( Crypt::Mac::HMAC->new('SHA512','secretkey')->add("123")->hexmac, 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/oo+hex/6'); | |
41 | is( unpack('H*', hmac('SHA512','secretkey',"123")), 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/func+raw/6'); | |
42 | is( hmac_hex('SHA512','secretkey',"123"), 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/func+hex/6'); | |
43 | is( hmac_b64('SHA512','secretkey',"123"), 'sNxmH7ZqQqKjr5MIfaNjF7CIaEsCYDAhWYZ5PxexrnSOydMjSsY9QZdtbH98LYRlpP/Q/nuqVkYLRmSIK4F15A==', 'HMAC/func+b64/6'); | |
44 | is( hmac_b64u('SHA512','secretkey',"123"), 'sNxmH7ZqQqKjr5MIfaNjF7CIaEsCYDAhWYZ5PxexrnSOydMjSsY9QZdtbH98LYRlpP_Q_nuqVkYLRmSIK4F15A', 'HMAC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::HMAC->new('Tiger192','secretkey')->add("123")->mac), '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/oo+raw/7'); | |
46 | is( Crypt::Mac::HMAC->new('Tiger192','secretkey')->add("123")->hexmac, '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/oo+hex/7'); | |
47 | is( unpack('H*', hmac('Tiger192','secretkey',"123")), '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/func+raw/7'); | |
48 | is( hmac_hex('Tiger192','secretkey',"123"), '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/func+hex/7'); | |
49 | is( hmac_b64('Tiger192','secretkey',"123"), 'JiWz199A+9y4eYfoy1C06BX8+R6sEEyB', 'HMAC/func+b64/7'); | |
50 | is( hmac_b64u('Tiger192','secretkey',"123"), 'JiWz199A-9y4eYfoy1C06BX8-R6sEEyB', 'HMAC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::HMAC->new('Whirlpool','secretkey')->add("123")->mac), '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/oo+raw/8'); | |
52 | is( Crypt::Mac::HMAC->new('Whirlpool','secretkey')->add("123")->hexmac, '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/oo+hex/8'); | |
53 | is( unpack('H*', hmac('Whirlpool','secretkey',"123")), '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/func+raw/8'); | |
54 | is( hmac_hex('Whirlpool','secretkey',"123"), '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/func+hex/8'); | |
55 | is( hmac_b64('Whirlpool','secretkey',"123"), 'Jv/rxtBBACo3X1gICV7kmqBRcHCnUMQPT9Xgw63Izfiocjy44eN3BMzFZru3YTpG4jkVQo2XEz+zHvjNJkxNYA==', 'HMAC/func+b64/8'); | |
56 | is( hmac_b64u('Whirlpool','secretkey',"123"), 'Jv_rxtBBACo3X1gICV7kmqBRcHCnUMQPT9Xgw63Izfiocjy44eN3BMzFZru3YTpG4jkVQo2XEz-zHvjNJkxNYA', 'HMAC/func+b64u/8'); | |
33 | is( unpack('H*', Crypt::Mac::HMAC->new('SHA1','secretkey')->add(123)->mac), 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/oo+raw/5'); | |
34 | is( Crypt::Mac::HMAC->new('SHA1','secretkey')->add(123)->hexmac, 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/oo+hex/5'); | |
35 | is( unpack('H*', hmac('SHA1','secretkey',123)), 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/func+raw/5'); | |
36 | is( hmac_hex('SHA1','secretkey',123), 'd1e8eaf9de1843fda2fa8e63bb6cc8a61a706fd6', 'HMAC/func+hex/5'); | |
37 | is( hmac_b64('SHA1','secretkey',123), '0ejq+d4YQ/2i+o5ju2zIphpwb9Y=', 'HMAC/func+b64/5'); | |
38 | is( hmac_b64u('SHA1','secretkey',123), '0ejq-d4YQ_2i-o5ju2zIphpwb9Y', 'HMAC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::HMAC->new('SHA512','secretkey')->add(123)->mac), 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/oo+raw/6'); | |
40 | is( Crypt::Mac::HMAC->new('SHA512','secretkey')->add(123)->hexmac, 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/oo+hex/6'); | |
41 | is( unpack('H*', hmac('SHA512','secretkey',123)), 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/func+raw/6'); | |
42 | is( hmac_hex('SHA512','secretkey',123), 'b0dc661fb66a42a2a3af93087da36317b088684b026030215986793f17b1ae748ec9d3234ac63d41976d6c7f7c2d8465a4ffd0fe7baa56460b4664882b8175e4', 'HMAC/func+hex/6'); | |
43 | is( hmac_b64('SHA512','secretkey',123), 'sNxmH7ZqQqKjr5MIfaNjF7CIaEsCYDAhWYZ5PxexrnSOydMjSsY9QZdtbH98LYRlpP/Q/nuqVkYLRmSIK4F15A==', 'HMAC/func+b64/6'); | |
44 | is( hmac_b64u('SHA512','secretkey',123), 'sNxmH7ZqQqKjr5MIfaNjF7CIaEsCYDAhWYZ5PxexrnSOydMjSsY9QZdtbH98LYRlpP_Q_nuqVkYLRmSIK4F15A', 'HMAC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::HMAC->new('Tiger192','secretkey')->add(123)->mac), '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/oo+raw/7'); | |
46 | is( Crypt::Mac::HMAC->new('Tiger192','secretkey')->add(123)->hexmac, '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/oo+hex/7'); | |
47 | is( unpack('H*', hmac('Tiger192','secretkey',123)), '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/func+raw/7'); | |
48 | is( hmac_hex('Tiger192','secretkey',123), '2625b3d7df40fbdcb87987e8cb50b4e815fcf91eac104c81', 'HMAC/func+hex/7'); | |
49 | is( hmac_b64('Tiger192','secretkey',123), 'JiWz199A+9y4eYfoy1C06BX8+R6sEEyB', 'HMAC/func+b64/7'); | |
50 | is( hmac_b64u('Tiger192','secretkey',123), 'JiWz199A-9y4eYfoy1C06BX8-R6sEEyB', 'HMAC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::HMAC->new('Whirlpool','secretkey')->add(123)->mac), '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/oo+raw/8'); | |
52 | is( Crypt::Mac::HMAC->new('Whirlpool','secretkey')->add(123)->hexmac, '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/oo+hex/8'); | |
53 | is( unpack('H*', hmac('Whirlpool','secretkey',123)), '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/func+raw/8'); | |
54 | is( hmac_hex('Whirlpool','secretkey',123), '26ffebc6d041002a375f5808095ee49aa0517070a750c40f4fd5e0c3adc8cdf8a8723cb8e1e37704ccc566bbb7613a46e23915428d97133fb31ef8cd264c4d60', 'HMAC/func+hex/8'); | |
55 | is( hmac_b64('Whirlpool','secretkey',123), 'Jv/rxtBBACo3X1gICV7kmqBRcHCnUMQPT9Xgw63Izfiocjy44eN3BMzFZru3YTpG4jkVQo2XEz+zHvjNJkxNYA==', 'HMAC/func+b64/8'); | |
56 | is( hmac_b64u('Whirlpool','secretkey',123), 'Jv_rxtBBACo3X1gICV7kmqBRcHCnUMQPT9Xgw63Izfiocjy44eN3BMzFZru3YTpG4jkVQo2XEz-zHvjNJkxNYA', 'HMAC/func+b64u/8'); | |
57 | 57 | is( unpack('H*', Crypt::Mac::HMAC->new('SHA1','secretkey')->add("test\0test\0test\n")->mac), '909a8e4f5688eac58c095db91cd1ad0d7e95bb08', 'HMAC/oo+raw/9'); |
58 | 58 | is( Crypt::Mac::HMAC->new('SHA1','secretkey')->add("test\0test\0test\n")->hexmac, '909a8e4f5688eac58c095db91cd1ad0d7e95bb08', 'HMAC/oo+hex/9'); |
59 | 59 | is( unpack('H*', hmac('SHA1','secretkey',"test\0test\0test\n")), '909a8e4f5688eac58c095db91cd1ad0d7e95bb08', 'HMAC/func+raw/9'); |
30 | 30 | is( omac_hex('Blowfish','12345678901234561234567890123456',""), 'a53ab7d313338f8f', 'OMAC/func+hex/4'); |
31 | 31 | is( omac_b64('Blowfish','12345678901234561234567890123456',""), 'pTq30xMzj48=', 'OMAC/func+b64/4'); |
32 | 32 | is( omac_b64u('Blowfish','12345678901234561234567890123456',""), 'pTq30xMzj48', 'OMAC/func+b64u/4'); |
33 | is( unpack('H*', Crypt::Mac::OMAC->new('AES','1234567890123456')->add("123")->mac), 'cdda83e8105929d720615d2e2919f517', 'OMAC/oo+raw/5'); | |
34 | is( Crypt::Mac::OMAC->new('AES','1234567890123456')->add("123")->hexmac, 'cdda83e8105929d720615d2e2919f517', 'OMAC/oo+hex/5'); | |
35 | is( unpack('H*', omac('AES','1234567890123456',"123")), 'cdda83e8105929d720615d2e2919f517', 'OMAC/func+raw/5'); | |
36 | is( omac_hex('AES','1234567890123456',"123"), 'cdda83e8105929d720615d2e2919f517', 'OMAC/func+hex/5'); | |
37 | is( omac_b64('AES','1234567890123456',"123"), 'zdqD6BBZKdcgYV0uKRn1Fw==', 'OMAC/func+b64/5'); | |
38 | is( omac_b64u('AES','1234567890123456',"123"), 'zdqD6BBZKdcgYV0uKRn1Fw', 'OMAC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::OMAC->new('AES','12345678901234561234567890123456')->add("123")->mac), '93cfd941f83b842afe81326332f25e32', 'OMAC/oo+raw/6'); | |
40 | is( Crypt::Mac::OMAC->new('AES','12345678901234561234567890123456')->add("123")->hexmac, '93cfd941f83b842afe81326332f25e32', 'OMAC/oo+hex/6'); | |
41 | is( unpack('H*', omac('AES','12345678901234561234567890123456',"123")), '93cfd941f83b842afe81326332f25e32', 'OMAC/func+raw/6'); | |
42 | is( omac_hex('AES','12345678901234561234567890123456',"123"), '93cfd941f83b842afe81326332f25e32', 'OMAC/func+hex/6'); | |
43 | is( omac_b64('AES','12345678901234561234567890123456',"123"), 'k8/ZQfg7hCr+gTJjMvJeMg==', 'OMAC/func+b64/6'); | |
44 | is( omac_b64u('AES','12345678901234561234567890123456',"123"), 'k8_ZQfg7hCr-gTJjMvJeMg', 'OMAC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::OMAC->new('Blowfish','1234567890123456')->add("123")->mac), '357f9876a15825ec', 'OMAC/oo+raw/7'); | |
46 | is( Crypt::Mac::OMAC->new('Blowfish','1234567890123456')->add("123")->hexmac, '357f9876a15825ec', 'OMAC/oo+hex/7'); | |
47 | is( unpack('H*', omac('Blowfish','1234567890123456',"123")), '357f9876a15825ec', 'OMAC/func+raw/7'); | |
48 | is( omac_hex('Blowfish','1234567890123456',"123"), '357f9876a15825ec', 'OMAC/func+hex/7'); | |
49 | is( omac_b64('Blowfish','1234567890123456',"123"), 'NX+YdqFYJew=', 'OMAC/func+b64/7'); | |
50 | is( omac_b64u('Blowfish','1234567890123456',"123"), 'NX-YdqFYJew', 'OMAC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::OMAC->new('Blowfish','12345678901234561234567890123456')->add("123")->mac), '357f9876a15825ec', 'OMAC/oo+raw/8'); | |
52 | is( Crypt::Mac::OMAC->new('Blowfish','12345678901234561234567890123456')->add("123")->hexmac, '357f9876a15825ec', 'OMAC/oo+hex/8'); | |
53 | is( unpack('H*', omac('Blowfish','12345678901234561234567890123456',"123")), '357f9876a15825ec', 'OMAC/func+raw/8'); | |
54 | is( omac_hex('Blowfish','12345678901234561234567890123456',"123"), '357f9876a15825ec', 'OMAC/func+hex/8'); | |
55 | is( omac_b64('Blowfish','12345678901234561234567890123456',"123"), 'NX+YdqFYJew=', 'OMAC/func+b64/8'); | |
56 | is( omac_b64u('Blowfish','12345678901234561234567890123456',"123"), 'NX-YdqFYJew', 'OMAC/func+b64u/8'); | |
33 | is( unpack('H*', Crypt::Mac::OMAC->new('AES','1234567890123456')->add(123)->mac), 'cdda83e8105929d720615d2e2919f517', 'OMAC/oo+raw/5'); | |
34 | is( Crypt::Mac::OMAC->new('AES','1234567890123456')->add(123)->hexmac, 'cdda83e8105929d720615d2e2919f517', 'OMAC/oo+hex/5'); | |
35 | is( unpack('H*', omac('AES','1234567890123456',123)), 'cdda83e8105929d720615d2e2919f517', 'OMAC/func+raw/5'); | |
36 | is( omac_hex('AES','1234567890123456',123), 'cdda83e8105929d720615d2e2919f517', 'OMAC/func+hex/5'); | |
37 | is( omac_b64('AES','1234567890123456',123), 'zdqD6BBZKdcgYV0uKRn1Fw==', 'OMAC/func+b64/5'); | |
38 | is( omac_b64u('AES','1234567890123456',123), 'zdqD6BBZKdcgYV0uKRn1Fw', 'OMAC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::OMAC->new('AES','12345678901234561234567890123456')->add(123)->mac), '93cfd941f83b842afe81326332f25e32', 'OMAC/oo+raw/6'); | |
40 | is( Crypt::Mac::OMAC->new('AES','12345678901234561234567890123456')->add(123)->hexmac, '93cfd941f83b842afe81326332f25e32', 'OMAC/oo+hex/6'); | |
41 | is( unpack('H*', omac('AES','12345678901234561234567890123456',123)), '93cfd941f83b842afe81326332f25e32', 'OMAC/func+raw/6'); | |
42 | is( omac_hex('AES','12345678901234561234567890123456',123), '93cfd941f83b842afe81326332f25e32', 'OMAC/func+hex/6'); | |
43 | is( omac_b64('AES','12345678901234561234567890123456',123), 'k8/ZQfg7hCr+gTJjMvJeMg==', 'OMAC/func+b64/6'); | |
44 | is( omac_b64u('AES','12345678901234561234567890123456',123), 'k8_ZQfg7hCr-gTJjMvJeMg', 'OMAC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::OMAC->new('Blowfish','1234567890123456')->add(123)->mac), '357f9876a15825ec', 'OMAC/oo+raw/7'); | |
46 | is( Crypt::Mac::OMAC->new('Blowfish','1234567890123456')->add(123)->hexmac, '357f9876a15825ec', 'OMAC/oo+hex/7'); | |
47 | is( unpack('H*', omac('Blowfish','1234567890123456',123)), '357f9876a15825ec', 'OMAC/func+raw/7'); | |
48 | is( omac_hex('Blowfish','1234567890123456',123), '357f9876a15825ec', 'OMAC/func+hex/7'); | |
49 | is( omac_b64('Blowfish','1234567890123456',123), 'NX+YdqFYJew=', 'OMAC/func+b64/7'); | |
50 | is( omac_b64u('Blowfish','1234567890123456',123), 'NX-YdqFYJew', 'OMAC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::OMAC->new('Blowfish','12345678901234561234567890123456')->add(123)->mac), '357f9876a15825ec', 'OMAC/oo+raw/8'); | |
52 | is( Crypt::Mac::OMAC->new('Blowfish','12345678901234561234567890123456')->add(123)->hexmac, '357f9876a15825ec', 'OMAC/oo+hex/8'); | |
53 | is( unpack('H*', omac('Blowfish','12345678901234561234567890123456',123)), '357f9876a15825ec', 'OMAC/func+raw/8'); | |
54 | is( omac_hex('Blowfish','12345678901234561234567890123456',123), '357f9876a15825ec', 'OMAC/func+hex/8'); | |
55 | is( omac_b64('Blowfish','12345678901234561234567890123456',123), 'NX+YdqFYJew=', 'OMAC/func+b64/8'); | |
56 | is( omac_b64u('Blowfish','12345678901234561234567890123456',123), 'NX-YdqFYJew', 'OMAC/func+b64u/8'); | |
57 | 57 | is( unpack('H*', Crypt::Mac::OMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '628848c1604f58010affc6ad6cf07135', 'OMAC/oo+raw/9'); |
58 | 58 | is( Crypt::Mac::OMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '628848c1604f58010affc6ad6cf07135', 'OMAC/oo+hex/9'); |
59 | 59 | is( unpack('H*', omac('AES','1234567890123456',"test\0test\0test\n")), '628848c1604f58010affc6ad6cf07135', 'OMAC/func+raw/9'); |
30 | 30 | is( pelican_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'b8811ef21aeba6a89ee179c8a2a08bf5', 'Pelican/func+hex/4'); |
31 | 31 | is( pelican_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'uIEe8hrrpqie4XnIoqCL9Q==', 'Pelican/func+b64/4'); |
32 | 32 | is( pelican_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'uIEe8hrrpqie4XnIoqCL9Q', 'Pelican/func+b64u/4'); |
33 | is( unpack('H*', Crypt::Mac::Pelican->new('1234567890123456')->add("123")->mac), 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/oo+raw/5'); | |
34 | is( Crypt::Mac::Pelican->new('1234567890123456')->add("123")->hexmac, 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/oo+hex/5'); | |
35 | is( unpack('H*', pelican('1234567890123456',"123")), 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/func+raw/5'); | |
36 | is( pelican_hex('1234567890123456',"123"), 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/func+hex/5'); | |
37 | is( pelican_b64('1234567890123456',"123"), '+7HSw6owjoKhS/2O/Bz9rA==', 'Pelican/func+b64/5'); | |
38 | is( pelican_b64u('1234567890123456',"123"), '-7HSw6owjoKhS_2O_Bz9rA', 'Pelican/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::Pelican->new('12345678901234561234567890123456')->add("123")->mac), '23c694903f3bce129255cc66a92fc0ca', 'Pelican/oo+raw/6'); | |
40 | is( Crypt::Mac::Pelican->new('12345678901234561234567890123456')->add("123")->hexmac, '23c694903f3bce129255cc66a92fc0ca', 'Pelican/oo+hex/6'); | |
41 | is( unpack('H*', pelican('12345678901234561234567890123456',"123")), '23c694903f3bce129255cc66a92fc0ca', 'Pelican/func+raw/6'); | |
42 | is( pelican_hex('12345678901234561234567890123456',"123"), '23c694903f3bce129255cc66a92fc0ca', 'Pelican/func+hex/6'); | |
43 | is( pelican_b64('12345678901234561234567890123456',"123"), 'I8aUkD87zhKSVcxmqS/Ayg==', 'Pelican/func+b64/6'); | |
44 | is( pelican_b64u('12345678901234561234567890123456',"123"), 'I8aUkD87zhKSVcxmqS_Ayg', 'Pelican/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaa')->add("123")->mac), '13b5ae418804ccc5c972069b56f3314e', 'Pelican/oo+raw/7'); | |
46 | is( Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaa')->add("123")->hexmac, '13b5ae418804ccc5c972069b56f3314e', 'Pelican/oo+hex/7'); | |
47 | is( unpack('H*', pelican('aaaaaaaaaaaaaaaa',"123")), '13b5ae418804ccc5c972069b56f3314e', 'Pelican/func+raw/7'); | |
48 | is( pelican_hex('aaaaaaaaaaaaaaaa',"123"), '13b5ae418804ccc5c972069b56f3314e', 'Pelican/func+hex/7'); | |
49 | is( pelican_b64('aaaaaaaaaaaaaaaa',"123"), 'E7WuQYgEzMXJcgabVvMxTg==', 'Pelican/func+b64/7'); | |
50 | is( pelican_b64u('aaaaaaaaaaaaaaaa',"123"), 'E7WuQYgEzMXJcgabVvMxTg', 'Pelican/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add("123")->mac), 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/oo+raw/8'); | |
52 | is( Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add("123")->hexmac, 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/oo+hex/8'); | |
53 | is( unpack('H*', pelican('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"123")), 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/func+raw/8'); | |
54 | is( pelican_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"123"), 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/func+hex/8'); | |
55 | is( pelican_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"123"), 'tdRKO05/6AmatjNE3JBrLA==', 'Pelican/func+b64/8'); | |
56 | is( pelican_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"123"), 'tdRKO05_6AmatjNE3JBrLA', 'Pelican/func+b64u/8'); | |
33 | is( unpack('H*', Crypt::Mac::Pelican->new('1234567890123456')->add(123)->mac), 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/oo+raw/5'); | |
34 | is( Crypt::Mac::Pelican->new('1234567890123456')->add(123)->hexmac, 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/oo+hex/5'); | |
35 | is( unpack('H*', pelican('1234567890123456',123)), 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/func+raw/5'); | |
36 | is( pelican_hex('1234567890123456',123), 'fbb1d2c3aa308e82a14bfd8efc1cfdac', 'Pelican/func+hex/5'); | |
37 | is( pelican_b64('1234567890123456',123), '+7HSw6owjoKhS/2O/Bz9rA==', 'Pelican/func+b64/5'); | |
38 | is( pelican_b64u('1234567890123456',123), '-7HSw6owjoKhS_2O_Bz9rA', 'Pelican/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::Pelican->new('12345678901234561234567890123456')->add(123)->mac), '23c694903f3bce129255cc66a92fc0ca', 'Pelican/oo+raw/6'); | |
40 | is( Crypt::Mac::Pelican->new('12345678901234561234567890123456')->add(123)->hexmac, '23c694903f3bce129255cc66a92fc0ca', 'Pelican/oo+hex/6'); | |
41 | is( unpack('H*', pelican('12345678901234561234567890123456',123)), '23c694903f3bce129255cc66a92fc0ca', 'Pelican/func+raw/6'); | |
42 | is( pelican_hex('12345678901234561234567890123456',123), '23c694903f3bce129255cc66a92fc0ca', 'Pelican/func+hex/6'); | |
43 | is( pelican_b64('12345678901234561234567890123456',123), 'I8aUkD87zhKSVcxmqS/Ayg==', 'Pelican/func+b64/6'); | |
44 | is( pelican_b64u('12345678901234561234567890123456',123), 'I8aUkD87zhKSVcxmqS_Ayg', 'Pelican/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaa')->add(123)->mac), '13b5ae418804ccc5c972069b56f3314e', 'Pelican/oo+raw/7'); | |
46 | is( Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaa')->add(123)->hexmac, '13b5ae418804ccc5c972069b56f3314e', 'Pelican/oo+hex/7'); | |
47 | is( unpack('H*', pelican('aaaaaaaaaaaaaaaa',123)), '13b5ae418804ccc5c972069b56f3314e', 'Pelican/func+raw/7'); | |
48 | is( pelican_hex('aaaaaaaaaaaaaaaa',123), '13b5ae418804ccc5c972069b56f3314e', 'Pelican/func+hex/7'); | |
49 | is( pelican_b64('aaaaaaaaaaaaaaaa',123), 'E7WuQYgEzMXJcgabVvMxTg==', 'Pelican/func+b64/7'); | |
50 | is( pelican_b64u('aaaaaaaaaaaaaaaa',123), 'E7WuQYgEzMXJcgabVvMxTg', 'Pelican/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add(123)->mac), 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/oo+raw/8'); | |
52 | is( Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add(123)->hexmac, 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/oo+hex/8'); | |
53 | is( unpack('H*', pelican('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123)), 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/func+raw/8'); | |
54 | is( pelican_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123), 'b5d44a3b4e7fe8099ab63344dc906b2c', 'Pelican/func+hex/8'); | |
55 | is( pelican_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123), 'tdRKO05/6AmatjNE3JBrLA==', 'Pelican/func+b64/8'); | |
56 | is( pelican_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123), 'tdRKO05_6AmatjNE3JBrLA', 'Pelican/func+b64u/8'); | |
57 | 57 | is( unpack('H*', Crypt::Mac::Pelican->new('1234567890123456')->add("test\0test\0test\n")->mac), '5d884e5a46bbd02497d0c9ecc2739822', 'Pelican/oo+raw/9'); |
58 | 58 | is( Crypt::Mac::Pelican->new('1234567890123456')->add("test\0test\0test\n")->hexmac, '5d884e5a46bbd02497d0c9ecc2739822', 'Pelican/oo+hex/9'); |
59 | 59 | is( unpack('H*', pelican('1234567890123456',"test\0test\0test\n")), '5d884e5a46bbd02497d0c9ecc2739822', 'Pelican/func+raw/9'); |
30 | 30 | is( pmac_hex('Blowfish','12345678901234561234567890123456',""), '9b9a50f5d0362a8b', 'PMAC/func+hex/4'); |
31 | 31 | is( pmac_b64('Blowfish','12345678901234561234567890123456',""), 'm5pQ9dA2Kos=', 'PMAC/func+b64/4'); |
32 | 32 | is( pmac_b64u('Blowfish','12345678901234561234567890123456',""), 'm5pQ9dA2Kos', 'PMAC/func+b64u/4'); |
33 | is( unpack('H*', Crypt::Mac::PMAC->new('AES','1234567890123456')->add("123")->mac), '180cbe007c36eb4abce45430c079a4d4', 'PMAC/oo+raw/5'); | |
34 | is( Crypt::Mac::PMAC->new('AES','1234567890123456')->add("123")->hexmac, '180cbe007c36eb4abce45430c079a4d4', 'PMAC/oo+hex/5'); | |
35 | is( unpack('H*', pmac('AES','1234567890123456',"123")), '180cbe007c36eb4abce45430c079a4d4', 'PMAC/func+raw/5'); | |
36 | is( pmac_hex('AES','1234567890123456',"123"), '180cbe007c36eb4abce45430c079a4d4', 'PMAC/func+hex/5'); | |
37 | is( pmac_b64('AES','1234567890123456',"123"), 'GAy+AHw260q85FQwwHmk1A==', 'PMAC/func+b64/5'); | |
38 | is( pmac_b64u('AES','1234567890123456',"123"), 'GAy-AHw260q85FQwwHmk1A', 'PMAC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::PMAC->new('AES','12345678901234561234567890123456')->add("123")->mac), 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/oo+raw/6'); | |
40 | is( Crypt::Mac::PMAC->new('AES','12345678901234561234567890123456')->add("123")->hexmac, 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/oo+hex/6'); | |
41 | is( unpack('H*', pmac('AES','12345678901234561234567890123456',"123")), 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/func+raw/6'); | |
42 | is( pmac_hex('AES','12345678901234561234567890123456',"123"), 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/func+hex/6'); | |
43 | is( pmac_b64('AES','12345678901234561234567890123456',"123"), 'tcXKjyInvyB8TFy29GW2ZA==', 'PMAC/func+b64/6'); | |
44 | is( pmac_b64u('AES','12345678901234561234567890123456',"123"), 'tcXKjyInvyB8TFy29GW2ZA', 'PMAC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::PMAC->new('Blowfish','1234567890123456')->add("123")->mac), '9df08c664a191e9f', 'PMAC/oo+raw/7'); | |
46 | is( Crypt::Mac::PMAC->new('Blowfish','1234567890123456')->add("123")->hexmac, '9df08c664a191e9f', 'PMAC/oo+hex/7'); | |
47 | is( unpack('H*', pmac('Blowfish','1234567890123456',"123")), '9df08c664a191e9f', 'PMAC/func+raw/7'); | |
48 | is( pmac_hex('Blowfish','1234567890123456',"123"), '9df08c664a191e9f', 'PMAC/func+hex/7'); | |
49 | is( pmac_b64('Blowfish','1234567890123456',"123"), 'nfCMZkoZHp8=', 'PMAC/func+b64/7'); | |
50 | is( pmac_b64u('Blowfish','1234567890123456',"123"), 'nfCMZkoZHp8', 'PMAC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::PMAC->new('Blowfish','12345678901234561234567890123456')->add("123")->mac), '9df08c664a191e9f', 'PMAC/oo+raw/8'); | |
52 | is( Crypt::Mac::PMAC->new('Blowfish','12345678901234561234567890123456')->add("123")->hexmac, '9df08c664a191e9f', 'PMAC/oo+hex/8'); | |
53 | is( unpack('H*', pmac('Blowfish','12345678901234561234567890123456',"123")), '9df08c664a191e9f', 'PMAC/func+raw/8'); | |
54 | is( pmac_hex('Blowfish','12345678901234561234567890123456',"123"), '9df08c664a191e9f', 'PMAC/func+hex/8'); | |
55 | is( pmac_b64('Blowfish','12345678901234561234567890123456',"123"), 'nfCMZkoZHp8=', 'PMAC/func+b64/8'); | |
56 | is( pmac_b64u('Blowfish','12345678901234561234567890123456',"123"), 'nfCMZkoZHp8', 'PMAC/func+b64u/8'); | |
33 | is( unpack('H*', Crypt::Mac::PMAC->new('AES','1234567890123456')->add(123)->mac), '180cbe007c36eb4abce45430c079a4d4', 'PMAC/oo+raw/5'); | |
34 | is( Crypt::Mac::PMAC->new('AES','1234567890123456')->add(123)->hexmac, '180cbe007c36eb4abce45430c079a4d4', 'PMAC/oo+hex/5'); | |
35 | is( unpack('H*', pmac('AES','1234567890123456',123)), '180cbe007c36eb4abce45430c079a4d4', 'PMAC/func+raw/5'); | |
36 | is( pmac_hex('AES','1234567890123456',123), '180cbe007c36eb4abce45430c079a4d4', 'PMAC/func+hex/5'); | |
37 | is( pmac_b64('AES','1234567890123456',123), 'GAy+AHw260q85FQwwHmk1A==', 'PMAC/func+b64/5'); | |
38 | is( pmac_b64u('AES','1234567890123456',123), 'GAy-AHw260q85FQwwHmk1A', 'PMAC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::PMAC->new('AES','12345678901234561234567890123456')->add(123)->mac), 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/oo+raw/6'); | |
40 | is( Crypt::Mac::PMAC->new('AES','12345678901234561234567890123456')->add(123)->hexmac, 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/oo+hex/6'); | |
41 | is( unpack('H*', pmac('AES','12345678901234561234567890123456',123)), 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/func+raw/6'); | |
42 | is( pmac_hex('AES','12345678901234561234567890123456',123), 'b5c5ca8f2227bf207c4c5cb6f465b664', 'PMAC/func+hex/6'); | |
43 | is( pmac_b64('AES','12345678901234561234567890123456',123), 'tcXKjyInvyB8TFy29GW2ZA==', 'PMAC/func+b64/6'); | |
44 | is( pmac_b64u('AES','12345678901234561234567890123456',123), 'tcXKjyInvyB8TFy29GW2ZA', 'PMAC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::PMAC->new('Blowfish','1234567890123456')->add(123)->mac), '9df08c664a191e9f', 'PMAC/oo+raw/7'); | |
46 | is( Crypt::Mac::PMAC->new('Blowfish','1234567890123456')->add(123)->hexmac, '9df08c664a191e9f', 'PMAC/oo+hex/7'); | |
47 | is( unpack('H*', pmac('Blowfish','1234567890123456',123)), '9df08c664a191e9f', 'PMAC/func+raw/7'); | |
48 | is( pmac_hex('Blowfish','1234567890123456',123), '9df08c664a191e9f', 'PMAC/func+hex/7'); | |
49 | is( pmac_b64('Blowfish','1234567890123456',123), 'nfCMZkoZHp8=', 'PMAC/func+b64/7'); | |
50 | is( pmac_b64u('Blowfish','1234567890123456',123), 'nfCMZkoZHp8', 'PMAC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::PMAC->new('Blowfish','12345678901234561234567890123456')->add(123)->mac), '9df08c664a191e9f', 'PMAC/oo+raw/8'); | |
52 | is( Crypt::Mac::PMAC->new('Blowfish','12345678901234561234567890123456')->add(123)->hexmac, '9df08c664a191e9f', 'PMAC/oo+hex/8'); | |
53 | is( unpack('H*', pmac('Blowfish','12345678901234561234567890123456',123)), '9df08c664a191e9f', 'PMAC/func+raw/8'); | |
54 | is( pmac_hex('Blowfish','12345678901234561234567890123456',123), '9df08c664a191e9f', 'PMAC/func+hex/8'); | |
55 | is( pmac_b64('Blowfish','12345678901234561234567890123456',123), 'nfCMZkoZHp8=', 'PMAC/func+b64/8'); | |
56 | is( pmac_b64u('Blowfish','12345678901234561234567890123456',123), 'nfCMZkoZHp8', 'PMAC/func+b64u/8'); | |
57 | 57 | is( unpack('H*', Crypt::Mac::PMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '86bb8eeec8f0ece63582f64f14a9e60c', 'PMAC/oo+raw/9'); |
58 | 58 | is( Crypt::Mac::PMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '86bb8eeec8f0ece63582f64f14a9e60c', 'PMAC/oo+hex/9'); |
59 | 59 | is( unpack('H*', pmac('AES','1234567890123456',"test\0test\0test\n")), '86bb8eeec8f0ece63582f64f14a9e60c', 'PMAC/func+raw/9'); |
0 | ### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY! | |
1 | ||
2 | use strict; | |
3 | use warnings; | |
4 | ||
5 | use Test::More tests => 36; | |
6 | ||
7 | use Crypt::Mac::Poly1305 qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u ); | |
8 | ||
9 | is( unpack('H*', Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("")->mac), '31323334353637383930313233343536', 'Poly1305/oo+raw/1'); | |
10 | is( Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("")->hexmac, '31323334353637383930313233343536', 'Poly1305/oo+hex/1'); | |
11 | is( unpack('H*', poly1305('12345678901234561234567890123456',"")), '31323334353637383930313233343536', 'Poly1305/func+raw/1'); | |
12 | is( poly1305_hex('12345678901234561234567890123456',""), '31323334353637383930313233343536', 'Poly1305/func+hex/1'); | |
13 | is( poly1305_b64('12345678901234561234567890123456',""), 'MTIzNDU2Nzg5MDEyMzQ1Ng==', 'Poly1305/func+b64/1'); | |
14 | is( poly1305_b64u('12345678901234561234567890123456',""), 'MTIzNDU2Nzg5MDEyMzQ1Ng', 'Poly1305/func+b64u/1'); | |
15 | is( unpack('H*', Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add("")->mac), '61616161616161616161616161616161', 'Poly1305/oo+raw/2'); | |
16 | is( Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add("")->hexmac, '61616161616161616161616161616161', 'Poly1305/oo+hex/2'); | |
17 | is( unpack('H*', poly1305('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"")), '61616161616161616161616161616161', 'Poly1305/func+raw/2'); | |
18 | is( poly1305_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), '61616161616161616161616161616161', 'Poly1305/func+hex/2'); | |
19 | is( poly1305_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'YWFhYWFhYWFhYWFhYWFhYQ==', 'Poly1305/func+b64/2'); | |
20 | is( poly1305_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'YWFhYWFhYWFhYWFhYWFhYQ', 'Poly1305/func+b64u/2'); | |
21 | is( unpack('H*', Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add(123)->mac), '57af993261c8bf93c336380cce322860', 'Poly1305/oo+raw/3'); | |
22 | is( Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add(123)->hexmac, '57af993261c8bf93c336380cce322860', 'Poly1305/oo+hex/3'); | |
23 | is( unpack('H*', poly1305('12345678901234561234567890123456',123)), '57af993261c8bf93c336380cce322860', 'Poly1305/func+raw/3'); | |
24 | is( poly1305_hex('12345678901234561234567890123456',123), '57af993261c8bf93c336380cce322860', 'Poly1305/func+hex/3'); | |
25 | is( poly1305_b64('12345678901234561234567890123456',123), 'V6+ZMmHIv5PDNjgMzjIoYA==', 'Poly1305/func+b64/3'); | |
26 | is( poly1305_b64u('12345678901234561234567890123456',123), 'V6-ZMmHIv5PDNjgMzjIoYA', 'Poly1305/func+b64u/3'); | |
27 | is( unpack('H*', Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add(123)->mac), '01095f71ce6c2b70ce6c2b70ce6c2b70', 'Poly1305/oo+raw/4'); | |
28 | is( Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add(123)->hexmac, '01095f71ce6c2b70ce6c2b70ce6c2b70', 'Poly1305/oo+hex/4'); | |
29 | is( unpack('H*', poly1305('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123)), '01095f71ce6c2b70ce6c2b70ce6c2b70', 'Poly1305/func+raw/4'); | |
30 | is( poly1305_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123), '01095f71ce6c2b70ce6c2b70ce6c2b70', 'Poly1305/func+hex/4'); | |
31 | is( poly1305_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123), 'AQlfcc5sK3DObCtwzmwrcA==', 'Poly1305/func+b64/4'); | |
32 | is( poly1305_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',123), 'AQlfcc5sK3DObCtwzmwrcA', 'Poly1305/func+b64u/4'); | |
33 | is( unpack('H*', Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("test\0test\0test\n")->mac), '49181f1f65d313a44a2b224fd5fc0abd', 'Poly1305/oo+raw/5'); | |
34 | is( Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("test\0test\0test\n")->hexmac, '49181f1f65d313a44a2b224fd5fc0abd', 'Poly1305/oo+hex/5'); | |
35 | is( unpack('H*', poly1305('12345678901234561234567890123456',"test\0test\0test\n")), '49181f1f65d313a44a2b224fd5fc0abd', 'Poly1305/func+raw/5'); | |
36 | is( poly1305_hex('12345678901234561234567890123456',"test\0test\0test\n"), '49181f1f65d313a44a2b224fd5fc0abd', 'Poly1305/func+hex/5'); | |
37 | is( poly1305_b64('12345678901234561234567890123456',"test\0test\0test\n"), 'SRgfH2XTE6RKKyJP1fwKvQ==', 'Poly1305/func+b64/5'); | |
38 | is( poly1305_b64u('12345678901234561234567890123456',"test\0test\0test\n"), 'SRgfH2XTE6RKKyJP1fwKvQ', 'Poly1305/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add("test\0test\0test\n")->mac), '4c02cea60201d83ae4b2d644789422e5', 'Poly1305/oo+raw/6'); | |
40 | is( Crypt::Mac::Poly1305->new('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')->add("test\0test\0test\n")->hexmac, '4c02cea60201d83ae4b2d644789422e5', 'Poly1305/oo+hex/6'); | |
41 | is( unpack('H*', poly1305('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n")), '4c02cea60201d83ae4b2d644789422e5', 'Poly1305/func+raw/6'); | |
42 | is( poly1305_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), '4c02cea60201d83ae4b2d644789422e5', 'Poly1305/func+hex/6'); | |
43 | is( poly1305_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'TALOpgIB2DrkstZEeJQi5Q==', 'Poly1305/func+b64/6'); | |
44 | is( poly1305_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'TALOpgIB2DrkstZEeJQi5Q', 'Poly1305/func+b64u/6'); |
30 | 30 | is( xcbc_hex('Blowfish','12345678901234561234567890123456',""), '9ef018b3c33f6f35', 'XCBC/func+hex/4'); |
31 | 31 | is( xcbc_b64('Blowfish','12345678901234561234567890123456',""), 'nvAYs8M/bzU=', 'XCBC/func+b64/4'); |
32 | 32 | is( xcbc_b64u('Blowfish','12345678901234561234567890123456',""), 'nvAYs8M_bzU', 'XCBC/func+b64u/4'); |
33 | is( unpack('H*', Crypt::Mac::XCBC->new('AES','1234567890123456')->add("123")->mac), 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/oo+raw/5'); | |
34 | is( Crypt::Mac::XCBC->new('AES','1234567890123456')->add("123")->hexmac, 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/oo+hex/5'); | |
35 | is( unpack('H*', xcbc('AES','1234567890123456',"123")), 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/func+raw/5'); | |
36 | is( xcbc_hex('AES','1234567890123456',"123"), 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/func+hex/5'); | |
37 | is( xcbc_b64('AES','1234567890123456',"123"), 'vJ4O4qBadRtasl3fDaFY6g==', 'XCBC/func+b64/5'); | |
38 | is( xcbc_b64u('AES','1234567890123456',"123"), 'vJ4O4qBadRtasl3fDaFY6g', 'XCBC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::XCBC->new('AES','12345678901234561234567890123456')->add("123")->mac), 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/oo+raw/6'); | |
40 | is( Crypt::Mac::XCBC->new('AES','12345678901234561234567890123456')->add("123")->hexmac, 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/oo+hex/6'); | |
41 | is( unpack('H*', xcbc('AES','12345678901234561234567890123456',"123")), 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/func+raw/6'); | |
42 | is( xcbc_hex('AES','12345678901234561234567890123456',"123"), 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/func+hex/6'); | |
43 | is( xcbc_b64('AES','12345678901234561234567890123456',"123"), 'wKh9f6aLsqfhitVoCOxOsw==', 'XCBC/func+b64/6'); | |
44 | is( xcbc_b64u('AES','12345678901234561234567890123456',"123"), 'wKh9f6aLsqfhitVoCOxOsw', 'XCBC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::XCBC->new('Blowfish','1234567890123456')->add("123")->mac), '21e88fbfb47a3200', 'XCBC/oo+raw/7'); | |
46 | is( Crypt::Mac::XCBC->new('Blowfish','1234567890123456')->add("123")->hexmac, '21e88fbfb47a3200', 'XCBC/oo+hex/7'); | |
47 | is( unpack('H*', xcbc('Blowfish','1234567890123456',"123")), '21e88fbfb47a3200', 'XCBC/func+raw/7'); | |
48 | is( xcbc_hex('Blowfish','1234567890123456',"123"), '21e88fbfb47a3200', 'XCBC/func+hex/7'); | |
49 | is( xcbc_b64('Blowfish','1234567890123456',"123"), 'IeiPv7R6MgA=', 'XCBC/func+b64/7'); | |
50 | is( xcbc_b64u('Blowfish','1234567890123456',"123"), 'IeiPv7R6MgA', 'XCBC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::XCBC->new('Blowfish','12345678901234561234567890123456')->add("123")->mac), '21e88fbfb47a3200', 'XCBC/oo+raw/8'); | |
52 | is( Crypt::Mac::XCBC->new('Blowfish','12345678901234561234567890123456')->add("123")->hexmac, '21e88fbfb47a3200', 'XCBC/oo+hex/8'); | |
53 | is( unpack('H*', xcbc('Blowfish','12345678901234561234567890123456',"123")), '21e88fbfb47a3200', 'XCBC/func+raw/8'); | |
54 | is( xcbc_hex('Blowfish','12345678901234561234567890123456',"123"), '21e88fbfb47a3200', 'XCBC/func+hex/8'); | |
55 | is( xcbc_b64('Blowfish','12345678901234561234567890123456',"123"), 'IeiPv7R6MgA=', 'XCBC/func+b64/8'); | |
56 | is( xcbc_b64u('Blowfish','12345678901234561234567890123456',"123"), 'IeiPv7R6MgA', 'XCBC/func+b64u/8'); | |
33 | is( unpack('H*', Crypt::Mac::XCBC->new('AES','1234567890123456')->add(123)->mac), 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/oo+raw/5'); | |
34 | is( Crypt::Mac::XCBC->new('AES','1234567890123456')->add(123)->hexmac, 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/oo+hex/5'); | |
35 | is( unpack('H*', xcbc('AES','1234567890123456',123)), 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/func+raw/5'); | |
36 | is( xcbc_hex('AES','1234567890123456',123), 'bc9e0ee2a05a751b5ab25ddf0da158ea', 'XCBC/func+hex/5'); | |
37 | is( xcbc_b64('AES','1234567890123456',123), 'vJ4O4qBadRtasl3fDaFY6g==', 'XCBC/func+b64/5'); | |
38 | is( xcbc_b64u('AES','1234567890123456',123), 'vJ4O4qBadRtasl3fDaFY6g', 'XCBC/func+b64u/5'); | |
39 | is( unpack('H*', Crypt::Mac::XCBC->new('AES','12345678901234561234567890123456')->add(123)->mac), 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/oo+raw/6'); | |
40 | is( Crypt::Mac::XCBC->new('AES','12345678901234561234567890123456')->add(123)->hexmac, 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/oo+hex/6'); | |
41 | is( unpack('H*', xcbc('AES','12345678901234561234567890123456',123)), 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/func+raw/6'); | |
42 | is( xcbc_hex('AES','12345678901234561234567890123456',123), 'c0a87d7fa68bb2a7e18ad56808ec4eb3', 'XCBC/func+hex/6'); | |
43 | is( xcbc_b64('AES','12345678901234561234567890123456',123), 'wKh9f6aLsqfhitVoCOxOsw==', 'XCBC/func+b64/6'); | |
44 | is( xcbc_b64u('AES','12345678901234561234567890123456',123), 'wKh9f6aLsqfhitVoCOxOsw', 'XCBC/func+b64u/6'); | |
45 | is( unpack('H*', Crypt::Mac::XCBC->new('Blowfish','1234567890123456')->add(123)->mac), '21e88fbfb47a3200', 'XCBC/oo+raw/7'); | |
46 | is( Crypt::Mac::XCBC->new('Blowfish','1234567890123456')->add(123)->hexmac, '21e88fbfb47a3200', 'XCBC/oo+hex/7'); | |
47 | is( unpack('H*', xcbc('Blowfish','1234567890123456',123)), '21e88fbfb47a3200', 'XCBC/func+raw/7'); | |
48 | is( xcbc_hex('Blowfish','1234567890123456',123), '21e88fbfb47a3200', 'XCBC/func+hex/7'); | |
49 | is( xcbc_b64('Blowfish','1234567890123456',123), 'IeiPv7R6MgA=', 'XCBC/func+b64/7'); | |
50 | is( xcbc_b64u('Blowfish','1234567890123456',123), 'IeiPv7R6MgA', 'XCBC/func+b64u/7'); | |
51 | is( unpack('H*', Crypt::Mac::XCBC->new('Blowfish','12345678901234561234567890123456')->add(123)->mac), '21e88fbfb47a3200', 'XCBC/oo+raw/8'); | |
52 | is( Crypt::Mac::XCBC->new('Blowfish','12345678901234561234567890123456')->add(123)->hexmac, '21e88fbfb47a3200', 'XCBC/oo+hex/8'); | |
53 | is( unpack('H*', xcbc('Blowfish','12345678901234561234567890123456',123)), '21e88fbfb47a3200', 'XCBC/func+raw/8'); | |
54 | is( xcbc_hex('Blowfish','12345678901234561234567890123456',123), '21e88fbfb47a3200', 'XCBC/func+hex/8'); | |
55 | is( xcbc_b64('Blowfish','12345678901234561234567890123456',123), 'IeiPv7R6MgA=', 'XCBC/func+b64/8'); | |
56 | is( xcbc_b64u('Blowfish','12345678901234561234567890123456',123), 'IeiPv7R6MgA', 'XCBC/func+b64u/8'); | |
57 | 57 | is( unpack('H*', Crypt::Mac::XCBC->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '94cf668c4bbbb2bc0fc0bf14612084b9', 'XCBC/oo+raw/9'); |
58 | 58 | is( Crypt::Mac::XCBC->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '94cf668c4bbbb2bc0fc0bf14612084b9', 'XCBC/oo+hex/9'); |
59 | 59 | is( unpack('H*', xcbc('AES','1234567890123456',"test\0test\0test\n")), '94cf668c4bbbb2bc0fc0bf14612084b9', 'XCBC/func+raw/9'); |