Codebase list libcryptx-perl / 04fdd19
Poly1305 Karel Miko 7 years ago
16 changed file(s) with 507 addition(s) and 159 deletion(s). Raw diff Collapse all Expand all
7474 xcbc_state state;
7575 int id;
7676 } *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;
7782
7883 typedef struct cbc_struct { /* used by Crypt::Mode::CBC */
7984 int cipher_id, cipher_rounds;
445450 INCLUDE: inc/CryptX_Mac_Pelican.xs.inc
446451 INCLUDE: inc/CryptX_Mac_PMAC.xs.inc
447452 INCLUDE: inc/CryptX_Mac_XCBC.xs.inc
453 INCLUDE: inc/CryptX_Mac_Poly1305.xs.inc
448454
449455 INCLUDE: inc/CryptX_Mode_CBC.xs.inc
450456 INCLUDE: inc/CryptX_Mode_ECB.xs.inc
1010 glob('src/ltc/*/*/*/*/*.c'),
1111 );
1212 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";
1414
1515 #FIX: gcc with -flto is a trouble maker see https://github.com/DCIT/perl-CryptX/issues/32
1616 $mycflags =~ s/-flto\b//g;
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.001';
6 our $VERSION = '[%(pmver || "0.000")%]';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( [%lc_name%] [%lc_name%]_hex [%lc_name%]_b64 [%lc_name%]_b64u )] );
1919 sub [%lc_name%]_hex { Crypt::Mac::[%orig_name%]->new(shift, shift)->add(@_)->hexmac }
2020 sub [%lc_name%]_b64 { Crypt::Mac::[%orig_name%]->new(shift, shift)->add(@_)->b64mac }
2121 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' %]
2323 sub new { my $class = shift; _new(@_) }
2424 sub [%lc_name%] { Crypt::Mac::[%orig_name%]->new(shift)->add(@_)->mac }
2525 sub [%lc_name%]_hex { Crypt::Mac::[%orig_name%]->new(shift)->add(@_)->hexmac }
5454 $[%lc_name%]_hex = [%lc_name%]_hex('SHA256', $key, 'data buffer');
5555 $[%lc_name%]_b64 = [%lc_name%]_b64('SHA256', $key, 'data buffer');
5656 $[%lc_name%]_b64u = [%lc_name%]_b64u('SHA256', $key, 'data buffer');
57 [%-ELSIF lc_name == 'pelican' %]
57 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
5858 $[%lc_name%]_raw = [%lc_name%]($key, 'data buffer');
5959 $[%lc_name%]_hex = [%lc_name%]_hex($key, 'data buffer');
6060 $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'data buffer');
7171
7272 [%-IF lc_name == 'hmac' %]
7373 $d = Crypt::Mac::[%orig_name%]->new('SHA256', $key);
74 [%-ELSIF lc_name == 'pelican' %]
74 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
7575 $d = Crypt::Mac::[%orig_name%]->new($key);
7676 [%-ELSE%]
7777 $d = Crypt::Mac::[%orig_name%]->new($cipher_name, $key);
110110 $[%lc_name%]_raw = [%lc_name%]($hash_name, $key, 'data buffer');
111111 #or
112112 $[%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' %]
114114 $[%lc_name%]_raw = [%lc_name%]($key, 'data buffer');
115115 #or
116116 $[%lc_name%]_raw = [%lc_name%]($key, 'any data', 'more data', 'even more data');
128128 $[%lc_name%]_hex = [%lc_name%]_hex($hash_name, $key, 'data buffer');
129129 #or
130130 $[%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' %]
132132 $[%lc_name%]_hex = [%lc_name%]_hex($key, 'data buffer');
133133 #or
134134 $[%lc_name%]_hex = [%lc_name%]_hex($key, 'any data', 'more data', 'even more data');
146146 $[%lc_name%]_b64 = [%lc_name%]_b64($hash_name, $key, 'data buffer');
147147 #or
148148 $[%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' %]
150150 $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'data buffer');
151151 #or
152152 $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'any data', 'more data', 'even more data');
164164 $[%lc_name%]_b64url = [%lc_name%]_b64u($hash_name, $key, 'data buffer');
165165 #or
166166 $[%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' %]
168168 $[%lc_name%]_b64url = [%lc_name%]_b64u($key, 'data buffer');
169169 #or
170170 $[%lc_name%]_b64url = [%lc_name%]_b64u($key, 'any data', 'more data', 'even more data');
180180
181181 [%-IF lc_name == 'hmac' %]
182182 $d = Crypt::Mac::[%orig_name%]->new($hash_name, $key);
183 [%-ELSIF lc_name == 'pelican' %]
183 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
184184 $d = Crypt::Mac::[%orig_name%]->new($key);
185185 [%-ELSE%]
186186 $d = Crypt::Mac::[%orig_name%]->new($cipher_name, $key);
44 Crypt::Mac::[%orig_name%]
55 [%-IF lc_name == 'hmac' %]
66 _new(char * hash_name, SV * key)
7 [%-ELSIF lc_name == 'pelican' %]
7 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
88 _new(SV * key)
99 [%-ELSE%]
1010 _new(char * cipher_name, SV * key)
1919
2020 id = find_hash(hash_name);
2121 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' %]
2323 [%-ELSE%]
2424 int id;
2525
3333 Newz(0, RETVAL, 1, struct [%lc_name%]_struct);
3434 if (!RETVAL) croak("FATAL: Newz failed");
3535
36 [%-IF lc_name == 'pelican' %]
36 [%-IF lc_name == 'pelican' || lc_name == 'poly1305' %]
3737 rv = [%lc_name%]_init(&RETVAL->state, k, (unsigned long)k_len);
3838 [%-ELSE%]
3939 rv = [%lc_name%]_init(&RETVAL->state, id, k, (unsigned long)k_len);
2727 Pelican => { info=>'Message authentication code Pelican (AES based MAC)', urls=>['http://eprint.iacr.org/2005/088.pdf'] },
2828 PMAC => { info=>'Message authentication code PMAC', urls=>['https://en.wikipedia.org/wiki/PMAC_%28cryptography%29'] },
2929 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'] },
3031 );
3132
3233 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;
3337
3438 for my $n (keys %list) {
3539 warn "Processing mac: '$n'\n";
3640 my $data = {
3741 comment => "### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY!",
42 pmver => $pmver,
3843 orig_name => $n,
3944 uc_name => uc($n),
4045 lc_name => lc($n),
4954 require Crypt::Mac::Pelican;
5055 require Crypt::Mac::PMAC;
5156 require Crypt::Mac::XCBC;
57 require Crypt::Mac::Poly1305;
5258
5359 for (@test_strings) {
5460 if ($n eq 'HMAC') {
6268 push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Pelican->new('12345678901234561234567890123456')->add($_)->mac), data=>pp($_), args=>"'12345678901234561234567890123456'" };
6369 push @{$data->{t_strings}}, { mac=>unpack('H*', Crypt::Mac::Pelican->new('aaaaaaaaaaaaaaaa')->add($_)->mac), data=>pp($_), args=>"'aaaaaaaaaaaaaaaa'" };
6470 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'" };
6575 }
6676 else {
6777 push @{$data->{t_strings}}, { mac=>unpack('H*', "Crypt::Mac::$n"->new('AES', '1234567890123456')->add($_)->mac), data=>pp($_), args=>"'AES','1234567890123456'" };
8898 copy("$pm_out.$$", $pm_out) and warn("Writting '$pm_out'\n") unless equal_files("$pm_out.$$", $pm_out);
8999 unlink "$pm_out.$$";
90100
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");
92102 my $xs_tt = Template->new(ABSOLUTE=>1) || die $Template::ERROR, "\n";
93103 $xs_tt->process("$FindBin::Bin/Mac.xs.inc.tt", $data, "$xs_out.$$", {binmode=>1}) || die $xs_tt->error(), "\n";
94104 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__
44
55 plan skip_all => "File::Find not installed" unless eval { require File::Find };
66 plan skip_all => "Test::Pod not installed" unless eval { require Test::Pod };
7 plan tests => 81;
7 plan tests => 82;
88
99 my @files;
1010 File::Find::find({ wanted=>sub { push @files, $_ if /\.pm$/ }, no_chdir=>1 }, 'lib');
3030 is( f9_hex('Blowfish','12345678901234561234567890123456',""), '063daede33be0e37', 'F9/func+hex/4');
3131 is( f9_b64('Blowfish','12345678901234561234567890123456',""), 'Bj2u3jO+Djc=', 'F9/func+b64/4');
3232 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');
5757 is( unpack('H*', Crypt::Mac::F9->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '9fa4876ee09966ff8c1ae43b05e0b155', 'F9/oo+raw/9');
5858 is( Crypt::Mac::F9->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '9fa4876ee09966ff8c1ae43b05e0b155', 'F9/oo+hex/9');
5959 is( unpack('H*', f9('AES','1234567890123456',"test\0test\0test\n")), '9fa4876ee09966ff8c1ae43b05e0b155', 'F9/func+raw/9');
3030 is( hmac_hex('Whirlpool','secretkey',""), '742456ee0548c7fe7e81fb86a05b291d0fa37bc95f1ce562a8a4f4e7bd37a5862a16647963ec3b934355cff410f0d0d8b98fa531f56547a85c1eb1ab25b22a5e', 'HMAC/func+hex/4');
3131 is( hmac_b64('Whirlpool','secretkey',""), 'dCRW7gVIx/5+gfuGoFspHQ+je8lfHOViqKT05703pYYqFmR5Y+w7k0NVz/QQ8NDYuY+lMfVlR6hcHrGrJbIqXg==', 'HMAC/func+b64/4');
3232 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');
5757 is( unpack('H*', Crypt::Mac::HMAC->new('SHA1','secretkey')->add("test\0test\0test\n")->mac), '909a8e4f5688eac58c095db91cd1ad0d7e95bb08', 'HMAC/oo+raw/9');
5858 is( Crypt::Mac::HMAC->new('SHA1','secretkey')->add("test\0test\0test\n")->hexmac, '909a8e4f5688eac58c095db91cd1ad0d7e95bb08', 'HMAC/oo+hex/9');
5959 is( unpack('H*', hmac('SHA1','secretkey',"test\0test\0test\n")), '909a8e4f5688eac58c095db91cd1ad0d7e95bb08', 'HMAC/func+raw/9');
3030 is( omac_hex('Blowfish','12345678901234561234567890123456',""), 'a53ab7d313338f8f', 'OMAC/func+hex/4');
3131 is( omac_b64('Blowfish','12345678901234561234567890123456',""), 'pTq30xMzj48=', 'OMAC/func+b64/4');
3232 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');
5757 is( unpack('H*', Crypt::Mac::OMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '628848c1604f58010affc6ad6cf07135', 'OMAC/oo+raw/9');
5858 is( Crypt::Mac::OMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '628848c1604f58010affc6ad6cf07135', 'OMAC/oo+hex/9');
5959 is( unpack('H*', omac('AES','1234567890123456',"test\0test\0test\n")), '628848c1604f58010affc6ad6cf07135', 'OMAC/func+raw/9');
3030 is( pelican_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'b8811ef21aeba6a89ee179c8a2a08bf5', 'Pelican/func+hex/4');
3131 is( pelican_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',""), 'uIEe8hrrpqie4XnIoqCL9Q==', 'Pelican/func+b64/4');
3232 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');
5757 is( unpack('H*', Crypt::Mac::Pelican->new('1234567890123456')->add("test\0test\0test\n")->mac), '5d884e5a46bbd02497d0c9ecc2739822', 'Pelican/oo+raw/9');
5858 is( Crypt::Mac::Pelican->new('1234567890123456')->add("test\0test\0test\n")->hexmac, '5d884e5a46bbd02497d0c9ecc2739822', 'Pelican/oo+hex/9');
5959 is( unpack('H*', pelican('1234567890123456',"test\0test\0test\n")), '5d884e5a46bbd02497d0c9ecc2739822', 'Pelican/func+raw/9');
3030 is( pmac_hex('Blowfish','12345678901234561234567890123456',""), '9b9a50f5d0362a8b', 'PMAC/func+hex/4');
3131 is( pmac_b64('Blowfish','12345678901234561234567890123456',""), 'm5pQ9dA2Kos=', 'PMAC/func+b64/4');
3232 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');
5757 is( unpack('H*', Crypt::Mac::PMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '86bb8eeec8f0ece63582f64f14a9e60c', 'PMAC/oo+raw/9');
5858 is( Crypt::Mac::PMAC->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '86bb8eeec8f0ece63582f64f14a9e60c', 'PMAC/oo+hex/9');
5959 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');
3030 is( xcbc_hex('Blowfish','12345678901234561234567890123456',""), '9ef018b3c33f6f35', 'XCBC/func+hex/4');
3131 is( xcbc_b64('Blowfish','12345678901234561234567890123456',""), 'nvAYs8M/bzU=', 'XCBC/func+b64/4');
3232 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');
5757 is( unpack('H*', Crypt::Mac::XCBC->new('AES','1234567890123456')->add("test\0test\0test\n")->mac), '94cf668c4bbbb2bc0fc0bf14612084b9', 'XCBC/oo+raw/9');
5858 is( Crypt::Mac::XCBC->new('AES','1234567890123456')->add("test\0test\0test\n")->hexmac, '94cf668c4bbbb2bc0fc0bf14612084b9', 'XCBC/oo+hex/9');
5959 is( unpack('H*', xcbc('AES','1234567890123456',"test\0test\0test\n")), '94cf668c4bbbb2bc0fc0bf14612084b9', 'XCBC/func+raw/9');
1919 Crypt::Mac::Pelican T_PTROBJ
2020 Crypt::Mac::PMAC T_PTROBJ
2121 Crypt::Mac::XCBC T_PTROBJ
22 Crypt::Mac::Poly1305 T_PTROBJ
2223
2324 Crypt::Mode::CBC T_PTROBJ
2425 Crypt::Mode::CFB T_PTROBJ