Codebase list libcryptx-perl / 71011c2
moving more code to XS Karel Miko 6 years ago
134 changed file(s) with 2632 addition(s) and 3196 deletion(s). Raw diff Collapse all Expand all
55 use warnings;
66 our $VERSION = '[%(pmver || "0.000")%]';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('[%orig_name%]') }
11 sub keysize { Crypt::Cipher::keysize('[%orig_name%]') }
12 sub max_keysize { Crypt::Cipher::max_keysize('[%orig_name%]') }
13 sub min_keysize { Crypt::Cipher::min_keysize('[%orig_name%]') }
14 sub default_rounds { Crypt::Cipher::default_rounds('[%orig_name%]') }
1615
1716 1;
1817
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub [%lc_name%] { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub [%lc_name%]_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub [%lc_name%]_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub [%lc_name%]_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub [%lc_name%]_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub [%lc_name%]_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub [%lc_name%]_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub [%lc_name%]_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('[%orig_name%]') }
18 sub [%lc_name%] { Crypt::Digest::digest_data('[%orig_name%]', @_) }
19 sub [%lc_name%]_hex { Crypt::Digest::digest_data_hex('[%orig_name%]', @_) }
20 sub [%lc_name%]_b64 { Crypt::Digest::digest_data_b64('[%orig_name%]', @_) }
21 sub [%lc_name%]_b64u { Crypt::Digest::digest_data_b64u('[%orig_name%]', @_) }
22 sub [%lc_name%]_file { Crypt::Digest::digest_file('[%orig_name%]', @_) }
23 sub [%lc_name%]_file_hex { Crypt::Digest::digest_file_hex('[%orig_name%]', @_) }
24 sub [%lc_name%]_file_b64 { Crypt::Digest::digest_file_b64('[%orig_name%]', @_) }
25 sub [%lc_name%]_file_b64u { Crypt::Digest::digest_file_b64u('[%orig_name%]', @_) }
2826
2927 1;
3028
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*[%t_strings_count%] + 9*[%t_files_count%] + 6;
5 use Test::More tests => 8*[%t_strings_count%] + 9*[%t_files_count%] + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::[%orig_name%] qw( [%lc_name%] [%lc_name%]_hex [%lc_name%]_b64 [%lc_name%]_b64u [%lc_name%]_file [%lc_name%]_file_hex [%lc_name%]_file_b64 [%lc_name%]_file_b64u );
1313 is( Crypt::Digest::[%orig_name%]->hashsize, [%hashsize%], 'hashsize/4');
1414 is( Crypt::Digest->new('[%orig_name%]')->hashsize, [%hashsize%], 'hashsize/5');
1515 is( Crypt::Digest::[%orig_name%]->new->hashsize, [%hashsize%], 'hashsize/6');
16
17 is( [%lc_name%]("A","A","A"), pack("H*","[%tripple_A.hex%]"), '[%lc_name%] (raw/tripple_A)');
18 is( [%lc_name%]_hex("A","A","A"), "[%tripple_A.hex%]", '[%lc_name%] (hex/tripple_A)');
19 is( [%lc_name%]_b64("A","A","A"), "[%tripple_A.base64%]", '[%lc_name%] (base64/tripple_A)');
20 is( [%lc_name%]_b64u("A","A","A"), "[%tripple_A.base64url%]", '[%lc_name%] (base64url/tripple_A)');
21 is( digest_data('[%orig_name%]', "A","A","A"), pack("H*","[%tripple_A.hex%]"), '[%lc_name%] (digest_data_raw/tripple_A)');
22 is( digest_data_hex('[%orig_name%]', "A","A","A"), "[%tripple_A.hex%]", '[%lc_name%] (digest_data_hex/tripple_A)');
23 is( digest_data_b64('[%orig_name%]', "A","A","A"), "[%tripple_A.base64%]", '[%lc_name%] (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('[%orig_name%]', "A","A","A"), "[%tripple_A.base64url%]", '[%lc_name%] (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::[%orig_name%]->new->add("A","A","A")->hexdigest, "[%tripple_A.hex%]", '[%lc_name%] (OO/tripple_A)');
26 is( Crypt::Digest::[%orig_name%]->new->add("A")->add("A")->add("A")->hexdigest, "[%tripple_A.hex%]", '[%lc_name%] (OO3/tripple_A)');
1627
1728 [% FOREACH v IN t_strings %]
1829 is( [%lc_name%]([%v.data%]), pack("H*","[%v.hex%]"), '[%lc_name%] (raw/[%loop.count%])');
99 our %EXPORT_TAGS = ( all => [qw( [%lc_name%] [%lc_name%]_hex [%lc_name%]_b64 [%lc_name%]_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
9490
9591 [%-IF lc_name == 'hmac' %]
9692 $[%lc_name%]_raw = [%lc_name%]($hash_name, $key, 'data buffer');
93 #or
94 $[%lc_name%]_raw = [%lc_name%]($hash_name, $key, 'any data', 'more data', 'even more data');
9795
9896 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
9997 # $key ......... the key (octets/bytes)
10098 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
10199 $[%lc_name%]_raw = [%lc_name%]($size, $key, 'data buffer');
100 #or
101 $[%lc_name%]_raw = [%lc_name%]($size, $key, 'any data', 'more data', 'even more data');
102102 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
103103 $[%lc_name%]_raw = [%lc_name%]($key, 'data buffer');
104 #or
105 $[%lc_name%]_raw = [%lc_name%]($key, 'any data', 'more data', 'even more data');
104106 [%-ELSE%]
105107 $[%lc_name%]_raw = [%lc_name%]($cipher_name, $key, 'data buffer');
108 #or
109 $[%lc_name%]_raw = [%lc_name%]($cipher_name, $key, 'any data', 'more data', 'even more data');
106110 [%-END%]
107111
108112 =head2 [%lc_name%]_hex
111115
112116 [%-IF lc_name == 'hmac' %]
113117 $[%lc_name%]_hex = [%lc_name%]_hex($hash_name, $key, 'data buffer');
118 #or
119 $[%lc_name%]_hex = [%lc_name%]_hex($hash_name, $key, 'any data', 'more data', 'even more data');
114120
115121 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
116122 # $key ......... the key (octets/bytes, not hex!)
117123 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
118124 $[%lc_name%]_hex = [%lc_name%]_hex($size, $key, 'data buffer');
125 #or
126 $[%lc_name%]_hex = [%lc_name%]_hex($size, $key, 'any data', 'more data', 'even more data');
119127 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
120128 $[%lc_name%]_hex = [%lc_name%]_hex($key, 'data buffer');
129 #or
130 $[%lc_name%]_hex = [%lc_name%]_hex($key, 'any data', 'more data', 'even more data');
121131 [%-ELSE%]
122132 $[%lc_name%]_hex = [%lc_name%]_hex($cipher_name, $key, 'data buffer');
133 #or
134 $[%lc_name%]_hex = [%lc_name%]_hex($cipher_name, $key, 'any data', 'more data', 'even more data');
123135 [%-END%]
124136
125137 =head2 [%lc_name%]_b64
128140
129141 [%-IF lc_name == 'hmac' %]
130142 $[%lc_name%]_b64 = [%lc_name%]_b64($hash_name, $key, 'data buffer');
143 #or
144 $[%lc_name%]_b64 = [%lc_name%]_b64($hash_name, $key, 'any data', 'more data', 'even more data');
131145
132146 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
133147 # $key ......... the key (octets/bytes, not Base64!)
134148 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
135149 $[%lc_name%]_b64 = [%lc_name%]_b64($size, $key, 'data buffer');
150 #or
151 $[%lc_name%]_b64 = [%lc_name%]_b64($size, $key, 'any data', 'more data', 'even more data');
136152 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
137153 $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'data buffer');
154 #or
155 $[%lc_name%]_b64 = [%lc_name%]_b64($key, 'any data', 'more data', 'even more data');
138156 [%-ELSE%]
139157 $[%lc_name%]_b64 = [%lc_name%]_b64($cipher_name, $key, 'data buffer');
158 #or
159 $[%lc_name%]_b64 = [%lc_name%]_b64($cipher_name, $key, 'any data', 'more data', 'even more data');
140160 [%-END%]
141161
142162 =head2 [%lc_name%]_b64u
145165
146166 [%-IF lc_name == 'hmac' %]
147167 $[%lc_name%]_b64url = [%lc_name%]_b64u($hash_name, $key, 'data buffer');
168 #or
169 $[%lc_name%]_b64url = [%lc_name%]_b64u($hash_name, $key, 'any data', 'more data', 'even more data');
148170
149171 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
150172 # $key ......... the key (octets/bytes, not Base64url!)
151173 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
152174 $[%lc_name%]_b64url = [%lc_name%]_b64u($size, $key, 'data buffer');
175 #or
176 $[%lc_name%]_b64url = [%lc_name%]_b64u($size, $key, 'any data', 'more data', 'even more data');
153177 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
154178 $[%lc_name%]_b64url = [%lc_name%]_b64u($key, 'data buffer');
179 #or
180 $[%lc_name%]_b64url = [%lc_name%]_b64u($key, 'any data', 'more data', 'even more data');
155181 [%-ELSE%]
156182 $[%lc_name%]_b64url = [%lc_name%]_b64u($cipher_name, $key, 'data buffer');
183 #or
184 $[%lc_name%]_b64url = [%lc_name%]_b64u($cipher_name, $key, 'any data', 'more data', 'even more data');
157185 [%-END%]
158186
159187 =head1 METHODS
184212 =head2 add
185213
186214 $d->add('any data');
215 #or
216 $d->add('any data', 'more data', 'even more data');
187217
188218 =head2 addfile
189219
33 use warnings;
44
55 [%- IF t_strings_count %]
6 use Test::More tests => [%t_strings_count * 6%];
6 use Test::More tests => [%t_strings_count * 6%] + 8;
77 [%- ELSE %]
88 use Test::More tests => 0;
99 [%- END %]
1818 is( [%lc_name%]_b64([%v.args%],[%v.data%]), '[%v.b64mac%]', '[%orig_name%]/func+b64/[%loop.count%]');
1919 is( [%lc_name%]_b64u([%v.args%],[%v.data%]), '[%v.b64umac%]', '[%orig_name%]/func+b64u/[%loop.count%]');
2020 [%- END %]
21
22 is( unpack('H*', Crypt::Mac::[%orig_name%]->new([%tripple_A.args%])->add("A","A","A")->mac), '[%tripple_A.hexmac%]', '[%orig_name%]/oo+raw/tripple_A');
23 is( unpack('H*', Crypt::Mac::[%orig_name%]->new([%tripple_A.args%])->add("A")->add("A")->add("A")->mac), '[%tripple_A.hexmac%]', '[%orig_name%]/oo3+raw/tripple_A');
24 is( Crypt::Mac::[%orig_name%]->new([%tripple_A.args%])->add("A","A","A")->hexmac, '[%tripple_A.hexmac%]', '[%orig_name%]/oo+hex/tripple_A');
25 is( Crypt::Mac::[%orig_name%]->new([%tripple_A.args%])->add("A")->add("A")->add("A")->hexmac, '[%tripple_A.hexmac%]', '[%orig_name%]/oo3+hex/tripple_A');
26 is( unpack('H*', [%lc_name%]([%tripple_A.args%],"A","A","A")), '[%tripple_A.hexmac%]', '[%orig_name%]/func+raw/tripple_A');
27 is( [%lc_name%]_hex ([%tripple_A.args%],"A","A","A"), '[%tripple_A.hexmac%]', '[%orig_name%]/func+hex/tripple_A');
28 is( [%lc_name%]_b64 ([%tripple_A.args%],"A","A","A"), '[%tripple_A.b64mac%]', '[%orig_name%]/func+b64/tripple_A');
29 is( [%lc_name%]_b64u([%tripple_A.args%],"A","A","A"), '[%tripple_A.b64umac%]', '[%orig_name%]/func+b64u/tripple_A');
6666 RETVAL
6767
6868 void
69 _add_single(Crypt::Mac::[%orig_name%] self, SV * data)
70 CODE:
71 {
72 int rv;
69 add(Crypt::Mac::[%orig_name%] self, ...)
70 PPCODE:
71 {
72 int rv, i;
7373 STRLEN in_data_len;
7474 unsigned char *in_data;
7575
76 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
77 if (in_data_len>0) {
76 for(i = 1; i < items; i++) {
77 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
78 if (in_data_len > 0) {
7879 [%-IF lc_name == 'blake2s' || lc_name == 'blake2b' %]
79 rv = [%lc_name%]mac_process(&self->state, in_data, (unsigned long)in_data_len);
80 [%-ELSE%]
81 rv = [%lc_name%]_process(&self->state, in_data, (unsigned long)in_data_len);
82 [%-END%]
83 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_process failed: %s", error_to_string(rv));
84 }
80 rv = [%lc_name%]mac_process(&self->state, in_data, (unsigned long)in_data_len);
81 [%-ELSE%]
82 rv = [%lc_name%]_process(&self->state, in_data, (unsigned long)in_data_len);
83 [%-END%]
84 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_process failed: %s", error_to_string(rv));
85 }
86 }
87 XPUSHs(ST(0)); /* return self */
8588 }
8689
8790 SV *
8891 mac(Crypt::Mac::[%orig_name%] self)
89 CODE:
90 {
91 char mac[MAXBLOCKSIZE];
92 unsigned long maclen;
93 int rv;
94
95 [%-IF lc_name == 'pelican' %]
96 maclen = 16;
97 rv = [%lc_name%]_done(&self->state, (unsigned char*)mac);
98 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
99 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
100 maclen = sizeof(mac);
101 rv = [%lc_name%]mac_done(&self->state, (unsigned char*)mac, &maclen);
102 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]mac_done failed: %s", error_to_string(rv));
103 [%-ELSE%]
104 maclen = sizeof(mac);
105 rv = [%lc_name%]_done(&self->state, (unsigned char*)mac, &maclen);
106 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
107 [%-END%]
108 RETVAL = newSVpvn(mac, maclen);
109 }
110 OUTPUT:
111 RETVAL
112
113 SV *
114 b64mac(Crypt::Mac::[%orig_name%] self)
115 CODE:
116 {
117 unsigned char mac[MAXBLOCKSIZE];
118 unsigned long maclen;
119 int rv;
120 unsigned long outlen;
121 char out[MAXBLOCKSIZE*2];
122
123 [%-IF lc_name == 'pelican' %]
124 maclen = 16;
125 rv = [%lc_name%]_done(&self->state, mac);
126 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
127 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
128 maclen = sizeof(mac);
129 rv = [%lc_name%]mac_done(&self->state, mac, &maclen);
130 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]mac_done failed: %s", error_to_string(rv));
131 [%-ELSE%]
132 maclen = sizeof(mac);
133 rv = [%lc_name%]_done(&self->state, mac, &maclen);
134 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
135 [%-END%]
136 outlen = sizeof(out);
137 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
138 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
139 RETVAL = newSVpvn(out, outlen);
140 }
141 OUTPUT:
142 RETVAL
143
144 SV *
145 b64umac(Crypt::Mac::[%orig_name%] self)
146 CODE:
147 {
148 unsigned char mac[MAXBLOCKSIZE];
149 unsigned long maclen;
150 int rv;
151 unsigned long outlen;
152 char out[MAXBLOCKSIZE*2 + 1];
153
154 [%-IF lc_name == 'pelican' %]
155 maclen = 16;
156 rv = [%lc_name%]_done(&self->state, mac);
157 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
158 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
159 maclen = sizeof(mac);
160 rv = [%lc_name%]mac_done(&self->state, mac, &maclen);
161 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]mac_done failed: %s", error_to_string(rv));
162 [%-ELSE%]
163 maclen = sizeof(mac);
164 rv = [%lc_name%]_done(&self->state, mac, &maclen);
165 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
166 [%-END%]
167 outlen = sizeof(out);
168 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
169 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
170 RETVAL = newSVpvn(out, outlen);
171 }
172 OUTPUT:
173 RETVAL
174
175 SV *
176 hexmac(Crypt::Mac::[%orig_name%] self)
92 ALIAS:
93 hexmac = 1
94 b64mac = 2
95 b64umac = 3
17796 CODE:
17897 {
17998 unsigned char mac[MAXBLOCKSIZE];
195114 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
196115 [%-END%]
197116 outlen = sizeof(out);
198 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
199 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
200 RETVAL = newSVpvn(out, outlen);
117 if (ix == 3) {
118 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
119 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
120 RETVAL = newSVpvn(out, outlen);
121 }
122 if (ix == 2) {
123 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
124 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
125 RETVAL = newSVpvn(out, outlen);
126 }
127 if (ix == 1) {
128 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
129 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
130 RETVAL = newSVpvn(out, outlen);
131 }
132 else {
133 RETVAL = newSVpvn(mac, maclen);
134 }
201135 }
202136 OUTPUT:
203137 RETVAL
204138
205139 SV *
206140 [%-IF lc_name == 'hmac' %]
207 [%lc_name%](char * hash_name, SV * key, SV * data)
208 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
209 [%lc_name%](unsigned long size, SV * key, SV * data)
141 [%lc_name%](char * hash_name, SV * key, ...)
142 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
143 [%lc_name%](unsigned long size, SV * key, ...)
210144 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
211 [%lc_name%](SV * key, SV * data)
212 [%-ELSE%]
213 [%lc_name%](char * cipher_name, SV * key, SV * data)
214 [%-END%]
145 [%lc_name%](SV * key, ...)
146 [%-ELSE%]
147 [%lc_name%](char * cipher_name, SV * key, ...)
148 [%-END%]
149 ALIAS:
150 [%lc_name%]_hex = 1
151 [%lc_name%]_b64 = 2
152 [%lc_name%]_b64u = 3
215153 CODE:
216154 {
217155 STRLEN inlen, klen;
218 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
156 unsigned char *in;
219157 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
220 int rv;
221 unsigned char mac[MAXBLOCKSIZE];
222 unsigned long len = sizeof(mac);
223 [%-IF lc_name == 'hmac' %]
224 int id = _find_hash(hash_name);
225 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
226 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
227 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
228 if (size < len) len = size;
229 rv = [%lc_name%]mac_memory(k, klen, in, inlen, mac, &len);
230 [%-ELSIF lc_name == 'pelican' %]
231 len = 16;
232 rv = [%lc_name%]_memory(k, klen, in, inlen, mac);
233 [%-ELSIF lc_name == 'poly1305' %]
234 rv = [%lc_name%]_memory(k, klen, in, inlen, mac, &len);
235 [%-ELSE%]
236 int id = _find_cipher(cipher_name);
237 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
238 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
239 [%-END%]
240 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_memory failed: %s", error_to_string(rv));
241 RETVAL = newSVpvn((char *) mac, len);
242 }
243 OUTPUT:
244 RETVAL
245
246 SV *
247 [%-IF lc_name == 'hmac' %]
248 [%lc_name%]_hex(char * hash_name, SV * key, SV * data)
249 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
250 [%lc_name%]_hex(unsigned long size, SV * key, SV * data)
251 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
252 [%lc_name%]_hex(SV * key, SV * data)
253 [%-ELSE%]
254 [%lc_name%]_hex(char * cipher_name, SV * key, SV * data)
255 [%-END%]
256 CODE:
257 {
258 STRLEN inlen, klen;
259 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
260 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
261 int rv;
158 int rv, i;
262159 unsigned char mac[MAXBLOCKSIZE];
263160 unsigned long len = sizeof(mac), outlen;
264161 char out[MAXBLOCKSIZE*2];
162 [%-IF lc_name == 'blake2s' || lc_name == 'blake2b' %]
163 [%lc_name%]mac_state st;
164 [%-ELSE%]
165 [%lc_name%]_state st;
166 [%-END%]
167
265168 [%-IF lc_name == 'hmac' %]
266169 int id = _find_hash(hash_name);
267170 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
268 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
171 rv = [%lc_name%]_init(&st, id, k, klen);
172 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_init failed: %s", error_to_string(rv));
173 for (i = 2; i < items; i++) {
174 in = (unsigned char *)SvPVbyte(ST(i), inlen);
175 if (inlen > 0) {
176 rv = [%lc_name%]_process(&st, in, inlen);
177 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_process failed: %s", error_to_string(rv));
178 }
179 }
180 rv = [%lc_name%]_done(&st, mac, &len);
181 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
269182 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
270183 if (size < len) len = size;
271 rv = [%lc_name%]mac_memory(k, klen, in, inlen, mac, &len);
184 rv = [%lc_name%]mac_init(&st, len, k, klen);
185 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]mac_init failed: %s", error_to_string(rv));
186 for (i = 2; i < items; i++) {
187 in = (unsigned char *)SvPVbyte(ST(i), inlen);
188 if (inlen > 0) {
189 rv = [%lc_name%]mac_process(&st, in, inlen);
190 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]mac_process failed: %s", error_to_string(rv));
191 }
192 }
193 rv = [%lc_name%]mac_done(&st, mac, &len);
194 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]mac_done failed: %s", error_to_string(rv));
272195 [%-ELSIF lc_name == 'pelican' %]
273196 len = 16;
274 rv = [%lc_name%]_memory(k, klen, in, inlen, mac);
197 rv = [%lc_name%]_init(&st, k, klen);
198 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_init failed: %s", error_to_string(rv));
199 for (i = 1; i < items; i++) {
200 in = (unsigned char *)SvPVbyte(ST(i), inlen);
201 if (inlen > 0) {
202 rv = [%lc_name%]_process(&st, in, inlen);
203 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_process failed: %s", error_to_string(rv));
204 }
205 }
206 rv = [%lc_name%]_done(&st, mac);
207 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
275208 [%-ELSIF lc_name == 'poly1305' %]
276 rv = [%lc_name%]_memory(k, klen, in, inlen, mac, &len);
209 rv = [%lc_name%]_init(&st, k, klen);
210 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_init failed: %s", error_to_string(rv));
211 for (i = 1; i < items; i++) {
212 in = (unsigned char *)SvPVbyte(ST(i), inlen);
213 if (inlen > 0) {
214 rv = [%lc_name%]_process(&st, in, inlen);
215 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_process failed: %s", error_to_string(rv));
216 }
217 }
218 rv = [%lc_name%]_done(&st, mac, &len);
219 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
277220 [%-ELSE%]
278221 int id = _find_cipher(cipher_name);
279222 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
280 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
281 [%-END%]
282 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_memory failed: %s", error_to_string(rv));
223 rv = [%lc_name%]_init(&st, id, k, klen);
224 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_init failed: %s", error_to_string(rv));
225 for (i = 2; i < items; i++) {
226 in = (unsigned char *)SvPVbyte(ST(i), inlen);
227 if (inlen > 0) {
228 rv = [%lc_name%]_process(&st, in, inlen);
229 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_process failed: %s", error_to_string(rv));
230 }
231 }
232 rv = [%lc_name%]_done(&st, mac, &len);
233 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_done failed: %s", error_to_string(rv));
234 [%-END%]
235
283236 outlen = sizeof(out);
284 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
285 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
286 RETVAL = newSVpvn((char *) out, outlen);
287 }
288 OUTPUT:
289 RETVAL
290
291 SV *
292 [%-IF lc_name == 'hmac' %]
293 [%lc_name%]_b64(char * hash_name, SV * key, SV * data)
294 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
295 [%lc_name%]_b64(unsigned long size, SV * key, SV * data)
296 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
297 [%lc_name%]_b64(SV * key, SV * data)
298 [%-ELSE%]
299 [%lc_name%]_b64(char * cipher_name, SV * key, SV * data)
300 [%-END%]
301 CODE:
302 {
303 STRLEN inlen, klen;
304 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
305 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
306 int rv;
307 unsigned char mac[MAXBLOCKSIZE];
308 unsigned long len = sizeof(mac), outlen;
309 char out[MAXBLOCKSIZE*2];
310 [%-IF lc_name == 'hmac' %]
311 int id = _find_hash(hash_name);
312 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
313 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
314 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
315 if (size < len) len = size;
316 rv = [%lc_name%]mac_memory(k, klen, in, inlen, mac, &len);
317 [%-ELSIF lc_name == 'pelican' %]
318 len = 16;
319 rv = [%lc_name%]_memory(k, klen, in, inlen, mac);
320 [%-ELSIF lc_name == 'poly1305' %]
321 rv = [%lc_name%]_memory(k, klen, in, inlen, mac, &len);
322 [%-ELSE%]
323 int id = _find_cipher(cipher_name);
324 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
325 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
326 [%-END%]
327 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_memory failed: %s", error_to_string(rv));
328 outlen = sizeof(out);
329 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
330 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
331 RETVAL = newSVpvn((char *) out, outlen);
332
333 }
334 OUTPUT:
335 RETVAL
336
337 SV *
338 [%-IF lc_name == 'hmac' %]
339 [%lc_name%]_b64u(char * hash_name, SV * key, SV * data)
340 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
341 [%lc_name%]_b64u(unsigned long size, SV * key, SV * data)
342 [%-ELSIF lc_name == 'pelican' || lc_name == 'poly1305' %]
343 [%lc_name%]_b64u(SV * key, SV * data)
344 [%-ELSE%]
345 [%lc_name%]_b64u(char * cipher_name, SV * key, SV * data)
346 [%-END%]
347 CODE:
348 {
349 STRLEN inlen, klen;
350 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
351 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
352 int rv;
353 unsigned char mac[MAXBLOCKSIZE];
354 unsigned long len = sizeof(mac), outlen;
355 char out[MAXBLOCKSIZE*2];
356 [%-IF lc_name == 'hmac' %]
357 int id = _find_hash(hash_name);
358 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
359 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
360 [%-ELSIF lc_name == 'blake2s' || lc_name == 'blake2b' %]
361 if (size < len) len = size;
362 rv = [%lc_name%]mac_memory(k, klen, in, inlen, mac, &len);
363 [%-ELSIF lc_name == 'pelican' %]
364 len = 16;
365 rv = [%lc_name%]_memory(k, klen, in, inlen, mac);
366 [%-ELSIF lc_name == 'poly1305' %]
367 rv = [%lc_name%]_memory(k, klen, in, inlen, mac, &len);
368 [%-ELSE%]
369 int id = _find_cipher(cipher_name);
370 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
371 rv = [%lc_name%]_memory(id, k, klen, in, inlen, mac, &len);
372 [%-END%]
373 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_memory failed: %s", error_to_string(rv));
374 outlen = sizeof(out);
375 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
376 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
377 RETVAL = newSVpvn((char *) out, outlen);
378 }
379 OUTPUT:
380 RETVAL
237 if (ix == 3) {
238 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
239 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
240 RETVAL = newSVpvn((char *) out, outlen);
241 }
242 else if (ix == 2) {
243 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
244 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
245 RETVAL = newSVpvn((char *) out, outlen);
246 }
247 else if (ix == 1) {
248 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
249 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
250 RETVAL = newSVpvn((char *) out, outlen);
251 }
252 else {
253 RETVAL = newSVpvn((char *) mac, len);
254 }
255 }
256 OUTPUT:
257 RETVAL
3434 CODE:
3535 Safefree(self);
3636
37 int
38 _get_dir(Crypt::Mode::[%orig_name%] self)
39 CODE:
40 RETVAL = self->direction;
41 OUTPUT:
42 RETVAL
43
4437 void
4538 [%-IF lc_name == 'xts' %]
4639 _start(_XXX_XXX_XXX_)
4942 [%-ELSIF lc_name == 'lrw' %]
5043 _start(_XXX_XXX_XXX_)
5144 [%-ELSE%]
52 _start(Crypt::Mode::[%orig_name%] self, int dir, SV * key, SV * iv)
45 _start(Crypt::Mode::[%orig_name%] self, SV * key, SV * iv)
5346 [%-END%]
54 CODE:
47 ALIAS:
48 start_encrypt = 1
49 start_decrypt = 2
50 PPCODE:
5551 {
5652 STRLEN k_len=0;
5753 unsigned char *k=NULL;
8379 croak("FATAL: [%lc_name%]_start failed: %s", error_to_string(rv));
8480 }
8581
86 self->direction = dir;
82 self->direction = ix == 1 ? 1 : -1;
83 XPUSHs(ST(0)); /* return self */
8784 }
8885
8986 SV *
128125 RETVAL
129126
130127 SV *
131 _finish(Crypt::Mode::[%orig_name%] self)
128 finish(Crypt::Mode::[%orig_name%] self)
132129 CODE:
133130 self->direction = 0;
134131 RETVAL = newSVpvn("", 0);
2525 CODE:
2626 Safefree(self);
2727
28 int
29 _get_dir(Crypt::Mode::[%orig_name%] self)
30 CODE:
31 RETVAL = self->direction;
32 OUTPUT:
33 RETVAL
34
3528 void
3629 [%-IF lc_name == 'cbc' %]
37 _start(Crypt::Mode::[%orig_name%] self, int dir, SV * key, SV * iv)
30 _start(Crypt::Mode::[%orig_name%] self, SV * key, SV * iv)
3831 [%-ELSIF lc_name == 'ecb' %]
39 _start(Crypt::Mode::[%orig_name%] self, int dir, SV * key)
32 _start(Crypt::Mode::[%orig_name%] self, SV * key)
4033 [%-ELSE%]
4134 _start(_XXX_XXX_XXX_)
4235 [%-END%]
43 CODE:
36 ALIAS:
37 start_encrypt = 1
38 start_decrypt = 2
39 PPCODE:
4440 {
4541 int rv;
4642 STRLEN k_len=0;
6763 croak("FATAL: [%lc_name%]_start failed: %s", error_to_string(rv));
6864 }
6965
70 self->direction = dir;
66 self->direction = ix == 1 ? 1 : -1;
7167 self->padlen = 0;
68 XPUSHs(ST(0)); /* return self */
7269 }
7370
7471 SV *
75 _encrypt(Crypt::Mode::[%orig_name%] self, SV * data)
76 CODE:
77 {
78 int rv, has_tmp_block, blen;
79 unsigned long i;
80
81 STRLEN in_data_len, in_data_start;
82 unsigned char *in_data, *out_data, tmp_block[MAXBLOCKSIZE];
83
84 if (self->direction != 1) croak("FATAL: encrypt error, call start_encrypt first (%d)", self->direction);
85
86 blen = (&self->state)->blocklen;
87 in_data_start = 0;
88 has_tmp_block = 0;
89 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
90 if (in_data_len == 0) {
91 RETVAL = newSVpvn("", 0);
92 }
93 else {
94 if (self->padlen > 0) {
95 i = (blen - self->padlen);
96 if (in_data_len >= i) { /* enough data to fill pad */
97 Copy(in_data, self->pad+self->padlen, i, unsigned char);
98 in_data_len -= i;
99 in_data_start = i;
100 rv = [%lc_name%]_encrypt(self->pad, tmp_block, blen, &self->state);
101 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
102 self->padlen = 0;
103 has_tmp_block = 1;
104 }
105 else { /* not enough data to fill pad */
106 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
107 self->padlen += (int)in_data_len;
108 in_data_len = 0;
109 }
110 } /* padlen > 0 */
111
112 i = (unsigned long)(in_data_len % blen);
113 if (in_data_len>0 && i>0) { /* save tail of data into pad */
114 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
115 self->padlen = i;
116 in_data_len -= i;
117 }
118
119 if (in_data_len > 0) {
120 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
121 RETVAL = NEWSV(0, i);
122 SvPOK_only(RETVAL);
123 SvCUR_set(RETVAL, i);
124 out_data = (unsigned char *)SvPVX(RETVAL);
125 if (has_tmp_block) {
126 Copy(tmp_block, out_data, blen, unsigned char);
127 out_data += blen;
128 }
129 rv = [%lc_name%]_encrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
130 if (rv != CRYPT_OK) {
131 SvREFCNT_dec(RETVAL);
132 croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
133 }
134 } /* in_data_len>0 */
135 else if (has_tmp_block) {
136 RETVAL = newSVpvn((char*)tmp_block, blen);
137 }
138 else {
139 RETVAL = newSVpvn("", 0);
140 }
141 }
142 }
143 OUTPUT:
144 RETVAL
145
146 SV *
147 _finish_enc(Crypt::Mode::[%orig_name%] self)
148 CODE:
149 {
150 unsigned char tmp_block[MAXBLOCKSIZE];
151 int rv, blen, i, j;
152
153 blen = (&self->state)->blocklen;
154 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
155
156 if (self->padding_mode == 1) { /* pkcs5|7 padding */
157 i = blen - self->padlen;
158 if (i == 0) i = blen;
159 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
160 rv = [%lc_name%]_encrypt(self->pad, tmp_block, blen, &self->state);
161 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
162 }
163 else if (self->padding_mode == 2) { /* oneandzeroes padding */
164 self->pad[self->padlen] = 0x80;
165 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
166 rv = [%lc_name%]_encrypt(self->pad, tmp_block, blen, &self->state);
167 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
168 }
169 else {
170 if (self->padlen>0) croak("FATAL: [%lc_name%]_encrypt, input data length not multiple of %d", blen);
171 blen = 0;
172 }
173
174 self->direction = 0;
175 RETVAL = newSVpvn((char*)tmp_block, blen);
176 }
177 OUTPUT:
178 RETVAL
179
180 SV *
181 _decrypt(Crypt::Mode::[%orig_name%] self, SV * data)
72 _crypt(Crypt::Mode::[%orig_name%] self, SV * data)
18273 CODE:
18374 {
18475 int rv, has_tmp_block, blen;
18677 STRLEN in_data_len, in_data_start;
18778 unsigned char *in_data, *out_data, tmp_block[MAXBLOCKSIZE];
18879
189 if (self->direction != -1) croak("FATAL: decrypt error, call start_decryt first (%d)", self->direction);
190
191 blen = (&self->state)->blocklen;
192 in_data_start = 0;
193 has_tmp_block = 0;
194 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
195 if (in_data_len == 0) {
196 RETVAL = newSVpvn("", 0);
197 }
198 else {
199
200 if (self->padlen == blen) {
201 rv = [%lc_name%]_decrypt(self->pad, tmp_block, blen, &self->state);
202 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
203 self->padlen = 0;
204 has_tmp_block = 1;
205 } /* padlen == blen */
206 else if (self->padlen > 0) {
207 i = (blen - self->padlen); /* remaining bytes in padding buffer */
208 if (in_data_len >= i) { /* enough data to fill pad */
209 Copy(in_data, self->pad+self->padlen, i, unsigned char);
210 self->padlen += i;
211 in_data_len -= i;
212 in_data_start = i;
213 if (in_data_len>0 || self->padding_mode == 0) {
214 rv = [%lc_name%]_decrypt(self->pad, tmp_block, blen, &self->state);
215 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
80 if (self->direction == 1) {
81 blen = (&self->state)->blocklen;
82 in_data_start = 0;
83 has_tmp_block = 0;
84 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
85 if (in_data_len == 0) {
86 RETVAL = newSVpvn("", 0);
87 }
88 else {
89 if (self->padlen > 0) {
90 i = (blen - self->padlen);
91 if (in_data_len >= i) { /* enough data to fill pad */
92 Copy(in_data, self->pad+self->padlen, i, unsigned char);
93 in_data_len -= i;
94 in_data_start = i;
95 rv = [%lc_name%]_encrypt(self->pad, tmp_block, blen, &self->state);
96 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
21697 self->padlen = 0;
21798 has_tmp_block = 1;
21899 }
219 }
220 else { /* not enough data to fill pad */
221 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
222 self->padlen += (int)in_data_len;
223 in_data_len = 0;
224 }
225 } /* padlen > 0 */
226
227 /* here: a/ padlen == 1..16 && in_data_len == 0; b/ padlen == 0 && in_data_len > 0 */
228 if (in_data_len>0) {
100 else { /* not enough data to fill pad */
101 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
102 self->padlen += (int)in_data_len;
103 in_data_len = 0;
104 }
105 } /* padlen > 0 */
106
229107 i = (unsigned long)(in_data_len % blen);
230 if (i>0) { /* save tail of data into pad */
108 if (in_data_len>0 && i>0) { /* save tail of data into pad */
231109 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
232110 self->padlen = i;
233111 in_data_len -= i;
234112 }
235 }
236
237 if (in_data_len>0) {
238 if (self->padlen == 0 && self->padding_mode !=0) {
239 /* in case of padding keep full pad if no more data */
240 Copy(in_data+in_data_start+in_data_len-blen, self->pad, blen, unsigned char);
241 self->padlen = blen;
242 in_data_len -= blen;
243 }
244 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
245 if (i == 0) {
246 RETVAL = newSVpvn("", 0);
247 }
248 else {
113
114 if (in_data_len > 0) {
115 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
249116 RETVAL = NEWSV(0, i);
250117 SvPOK_only(RETVAL);
251118 SvCUR_set(RETVAL, i);
254121 Copy(tmp_block, out_data, blen, unsigned char);
255122 out_data += blen;
256123 }
257 rv = [%lc_name%]_decrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
124 rv = [%lc_name%]_encrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
258125 if (rv != CRYPT_OK) {
259126 SvREFCNT_dec(RETVAL);
260 croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
261 }
262 }
263 } /* in_data_len>0 */
264 else if (has_tmp_block) {
265 RETVAL = newSVpvn((char*)tmp_block, blen);
266 }
267 else {
127 croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
128 }
129 } /* in_data_len>0 */
130 else if (has_tmp_block) {
131 RETVAL = newSVpvn((char*)tmp_block, blen);
132 }
133 else {
134 RETVAL = newSVpvn("", 0);
135 }
136 }
137 }
138 else if (self->direction == -1) {
139 blen = (&self->state)->blocklen;
140 in_data_start = 0;
141 has_tmp_block = 0;
142 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
143 if (in_data_len == 0) {
268144 RETVAL = newSVpvn("", 0);
269145 }
270 }
271
146 else {
147
148 if (self->padlen == blen) {
149 rv = [%lc_name%]_decrypt(self->pad, tmp_block, blen, &self->state);
150 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
151 self->padlen = 0;
152 has_tmp_block = 1;
153 } /* padlen == blen */
154 else if (self->padlen > 0) {
155 i = (blen - self->padlen); /* remaining bytes in padding buffer */
156 if (in_data_len >= i) { /* enough data to fill pad */
157 Copy(in_data, self->pad+self->padlen, i, unsigned char);
158 self->padlen += i;
159 in_data_len -= i;
160 in_data_start = i;
161 if (in_data_len>0 || self->padding_mode == 0) {
162 rv = [%lc_name%]_decrypt(self->pad, tmp_block, blen, &self->state);
163 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
164 self->padlen = 0;
165 has_tmp_block = 1;
166 }
167 }
168 else { /* not enough data to fill pad */
169 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
170 self->padlen += (int)in_data_len;
171 in_data_len = 0;
172 }
173 } /* padlen > 0 */
174
175 /* here: a/ padlen == 1..16 && in_data_len == 0; b/ padlen == 0 && in_data_len > 0 */
176 if (in_data_len>0) {
177 i = (unsigned long)(in_data_len % blen);
178 if (i>0) { /* save tail of data into pad */
179 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
180 self->padlen = i;
181 in_data_len -= i;
182 }
183 }
184
185 if (in_data_len>0) {
186 if (self->padlen == 0 && self->padding_mode !=0) {
187 /* in case of padding keep full pad if no more data */
188 Copy(in_data+in_data_start+in_data_len-blen, self->pad, blen, unsigned char);
189 self->padlen = blen;
190 in_data_len -= blen;
191 }
192 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
193 if (i == 0) {
194 RETVAL = newSVpvn("", 0);
195 }
196 else {
197 RETVAL = NEWSV(0, i);
198 SvPOK_only(RETVAL);
199 SvCUR_set(RETVAL, i);
200 out_data = (unsigned char *)SvPVX(RETVAL);
201 if (has_tmp_block) {
202 Copy(tmp_block, out_data, blen, unsigned char);
203 out_data += blen;
204 }
205 rv = [%lc_name%]_decrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
206 if (rv != CRYPT_OK) {
207 SvREFCNT_dec(RETVAL);
208 croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
209 }
210 }
211 } /* in_data_len>0 */
212 else if (has_tmp_block) {
213 RETVAL = newSVpvn((char*)tmp_block, blen);
214 }
215 else {
216 RETVAL = newSVpvn("", 0);
217 }
218 }
219 }
220 else {
221 croak("FATAL: call start_decryt or start_encrpyt first (%d)", self->direction);
222 }
272223 }
273224 OUTPUT:
274225 RETVAL
275226
276227 SV *
277 _finish_dec(Crypt::Mode::[%orig_name%] self)
278 CODE:
279 {
280 unsigned char tmp_block[MAXBLOCKSIZE];
281 unsigned char i;
282 int rv, rv_len, blen;
283
284 rv_len = 0;
285 if (self->padlen > 0) {
286 blen = (&self->state)->blocklen;
287 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
288 rv = [%lc_name%]_decrypt(self->pad, tmp_block, blen, &self->state);
289 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
290 if (self->padding_mode == 0) { /* no padding */
291 rv_len = blen;
292 }
293 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
294 i = tmp_block[blen-1];
295 rv_len = blen - (i>blen ? blen : i);
296 }
297 else if (self->padding_mode == 2) { /* oneandzeroes padding */
298 rv_len = blen;
299 while ((unsigned char)tmp_block[rv_len-1] == 0x00) rv_len--;
300 if ((unsigned char)tmp_block[rv_len-1] == 0x80) rv_len--;
301 if (rv_len<0) rv_len = 0;
302 }
228 finish(Crypt::Mode::[%orig_name%] self)
229 CODE:
230 {
231 unsigned char tmp_block[MAXBLOCKSIZE], ch;
232 int i, j, rv, blen = (&self->state)->blocklen;
233
234 if (self->direction == 1) {
235 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
236 if (self->padding_mode == 1) { /* pkcs5|7 padding */
237 i = blen - self->padlen;
238 if (i == 0) i = blen;
239 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
240 rv = [%lc_name%]_encrypt(self->pad, tmp_block, blen, &self->state);
241 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
242 }
243 else if (self->padding_mode == 2) { /* oneandzeroes padding */
244 self->pad[self->padlen] = 0x80;
245 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
246 rv = [%lc_name%]_encrypt(self->pad, tmp_block, blen, &self->state);
247 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_encrypt failed: %s", error_to_string(rv));
248 }
249 else {
250 if (self->padlen>0) croak("FATAL: [%lc_name%]_encrypt, input data length not multiple of %d", blen);
251 blen = 0;
252 }
253 }
254 else if (self->direction == -1) {
255 if (self->padlen > 0) {
256 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
257 rv = [%lc_name%]_decrypt(self->pad, tmp_block, blen, &self->state);
258 if (rv != CRYPT_OK) croak("FATAL: [%lc_name%]_decrypt failed: %s", error_to_string(rv));
259 if (self->padding_mode == 0) { /* no padding */
260 /* we already have blen */
261 }
262 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
263 ch = tmp_block[blen-1];
264 blen = blen - (ch > blen ? blen : ch);
265 }
266 else if (self->padding_mode == 2) { /* oneandzeroes padding */
267 while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--;
268 if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--;
269 if (blen < 0) blen = 0;
270 }
271 }
272 else {
273 blen = 0;
274 }
275 }
276 else {
277 XSRETURN_UNDEF;
303278 }
304279
305280 self->direction = 0;
306 RETVAL = newSVpvn((char*)tmp_block, rv_len);
281 RETVAL = newSVpvn((char*)tmp_block, blen);
307282 }
308283 OUTPUT:
309284 RETVAL
9999 $data->{t_files_count} = scalar(@{$data->{t_files}});
100100 $data->{t_strings_count} = scalar(@{$data->{t_strings}});
101101 $data->{hashsize} = Crypt::Digest->hashsize($n);
102 $data->{tripple_A} = {
103 hex => Crypt::Digest::digest_data_hex($n, "AAA"),
104 base64 => Crypt::Digest::digest_data_b64($n, "AAA"),
105 base64url => Crypt::Digest::digest_data_b64u($n, "AAA"),
106 };
102107
103108 my $t_out = catfile($outdir_t, "digest_".lc($n).".t");
104109 my $t_tt = Template->new(ABSOLUTE=>1) || die $Template::ERROR, "\n";
9292 $_->{b64umac} = encode_base64url(pack("H*", $_->{mac}),'') for (@{$data->{t_strings}});
9393 $data->{t_strings_count} = defined $data->{t_strings} ? scalar(@{$data->{t_strings}}) : 0;
9494
95 # tripple_A
96 if ($n eq 'HMAC') {
97 $data->{tripple_A}{mac} = Crypt::Mac::HMAC->new('SHA1', 'secretkey')->add("AAA")->mac;
98 $data->{tripple_A}{args} = "'SHA1', 'secretkey'";
99 }
100 elsif ($n eq 'Pelican') {
101 $data->{tripple_A}{mac} = Crypt::Mac::Pelican->new('1234567890123456')->add("AAA")->mac;
102 $data->{tripple_A}{args} = "'1234567890123456'";
103 }
104 elsif ($n eq 'Poly1305') {
105 $data->{tripple_A}{mac} = Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("AAA")->mac;
106 $data->{tripple_A}{args} = "'12345678901234561234567890123456'";
107 }
108 elsif ($n =~ /BLAKE2(s|b)/) {
109 $data->{tripple_A}{mac} = "Crypt::Mac::$n"->new(32, '12345678901234561234567890123456')->add("AAA")->mac;
110 $data->{tripple_A}{args} = "32, '12345678901234561234567890123456'";
111 }
112 else {
113 $data->{tripple_A}{mac} = "Crypt::Mac::$n"->new('AES', '1234567890123456')->add("AAA")->mac;
114 $data->{tripple_A}{args} = "'AES', '1234567890123456'";
115 }
116 $data->{tripple_A}{hexmac} = unpack('H*', $data->{tripple_A}{mac});
117 $data->{tripple_A}{b64mac} = encode_base64($data->{tripple_A}{mac},'');
118 $data->{tripple_A}{b64umac} = encode_base64url($data->{tripple_A}{mac},'');
119
95120 my $t_out = catfile($outdir_t, "mac_".lc($n).".t");
96121 my $t_tt = Template->new(ABSOLUTE=>1) || die $Template::ERROR, "\n";
97122 $t_tt->process("$FindBin::Bin/Mac.t.tt", $data, "$t_out.$$", {binmode=>1}) || die $t_tt->error(), "\n";
5656 int rv, i;
5757 unsigned char *in;
5858
59 for(i=1; i<items; i++) {
59 for(i = 1; i < items; i++) {
6060 in = (unsigned char *)SvPVbyte(ST(i), inlen);
61 if (inlen>0) {
61 if (inlen > 0) {
6262 rv = self->desc->process(&self->state, in, (unsigned long)inlen);
6363 if (rv != CRYPT_OK) croak("FATAL: digest process failed: %s", error_to_string(rv));
6464 }
6868
6969 SV *
7070 digest(Crypt::Digest self)
71 CODE:
72 {
73 unsigned char hash[MAXBLOCKSIZE];
74 int rv;
75
76 rv = self->desc->done(&self->state, hash);
77 if (rv != CRYPT_OK) croak("FATAL: digest done failed: %s", error_to_string(rv));
78 RETVAL = newSVpvn((char *) hash, self->desc->hashsize);
79 }
80 OUTPUT:
81 RETVAL
82
83 SV *
84 hexdigest(Crypt::Digest self)
71 ALIAS:
72 hexdigest = 1
73 b64digest = 2
74 b64udigest = 3
8575 CODE:
8676 {
8777 int rv;
9383 if (rv != CRYPT_OK) croak("FATAL: digest done failed: %s", error_to_string(rv));
9484
9585 outlen = sizeof(out);
96 rv = _base16_encode(hash, self->desc->hashsize, (unsigned char *)out, &outlen);
97 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
98 RETVAL = newSVpvn(out, outlen);
86 if (ix == 3) {
87 rv = base64url_encode(hash, self->desc->hashsize, (unsigned char *)out, &outlen);
88 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
89 RETVAL = newSVpvn(out, outlen);
90 }
91 else if (ix == 2) {
92 rv = base64_encode(hash, self->desc->hashsize, (unsigned char *)out, &outlen);
93 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
94 RETVAL = newSVpvn(out, outlen);
95 }
96 else if (ix == 1) {
97 rv = _base16_encode(hash, self->desc->hashsize, (unsigned char *)out, &outlen);
98 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
99 RETVAL = newSVpvn(out, outlen);
100 }
101 else {
102 RETVAL = newSVpvn((char *) hash, self->desc->hashsize);
103 }
99104 }
100105 OUTPUT:
101106 RETVAL
102107
103108 SV *
104 b64digest(Crypt::Digest self)
109 digest_data(char * digest_name, ...)
110 ALIAS:
111 digest_data_hex = 1
112 digest_data_b64 = 2
113 digest_data_b64u = 3
105114 CODE:
106115 {
107 int rv;
108 unsigned long outlen;
109 unsigned char hash[MAXBLOCKSIZE];
116 STRLEN inlen;
117 int rv, id, i;
118 unsigned char *in, hash[MAXBLOCKSIZE];
119 unsigned long len = sizeof(hash), outlen;
110120 char out[MAXBLOCKSIZE*2];
121 hash_state md;
111122
112 rv = self->desc->done(&self->state, hash);
123 id = _find_hash(digest_name);
124 if (id == -1) croak("FATAL: find_digest failed for '%s'", digest_name);
125
126 /* digest_data("SHA1", $data1, $data2, $data3); */
127 len = hash_descriptor[id].hashsize;
128 rv = hash_descriptor[id].init(&md);
129 if (rv != CRYPT_OK) croak("FATAL: digest init failed: %s", error_to_string(rv));
130 for (i = 1; i < items; i++) {
131 in = (unsigned char *)SvPVbyte(ST(i), inlen);
132 if (inlen > 0) {
133 rv = hash_descriptor[id].process(&md, in, (unsigned long)inlen);
134 if (rv != CRYPT_OK) croak("FATAL: digest process failed: %s", error_to_string(rv));
135 }
136 }
137 rv = hash_descriptor[id].done(&md, hash);
113138 if (rv != CRYPT_OK) croak("FATAL: digest done failed: %s", error_to_string(rv));
114139
115140 outlen = sizeof(out);
116 rv = base64_encode(hash, self->desc->hashsize, (unsigned char *)out, &outlen);
117 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
118 RETVAL = newSVpvn(out, outlen);
119 }
120 OUTPUT:
121 RETVAL
122
123 SV *
124 b64udigest(Crypt::Digest self)
125 CODE:
126 {
127 int rv;
128 unsigned long outlen;
129 unsigned char hash[MAXBLOCKSIZE];
130 char out[MAXBLOCKSIZE*2];
131
132 rv = self->desc->done(&self->state, hash);
133 if (rv != CRYPT_OK) croak("FATAL: digest done failed: %s", error_to_string(rv));
134
135 outlen = sizeof(out);
136 rv = base64url_encode(hash, self->desc->hashsize, (unsigned char *)out, &outlen);
137 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
138 RETVAL = newSVpvn(out, outlen);
141 if (ix == 3) {
142 rv = base64url_encode(hash, len, (unsigned char *)out, &outlen);
143 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
144 RETVAL = newSVpvn((char *) out, outlen);
145 }
146 else if (ix == 2) {
147 rv = base64_encode(hash, len, (unsigned char *)out, &outlen);
148 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
149 RETVAL = newSVpvn((char *) out, outlen);
150 }
151 else if (ix == 1) {
152 rv = _base16_encode(hash, len, (unsigned char *)out, &outlen);
153 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
154 RETVAL = newSVpvn((char *) out, outlen);
155 }
156 else {
157 RETVAL = newSVpvn((char *) hash, len);
158 }
139159 }
140160 OUTPUT:
141161 RETVAL
162182 }
163183 OUTPUT:
164184 RETVAL
165
166 SV *
167 digest_data(char * digest_name, SV * data)
168 CODE:
169 {
170 STRLEN inlen;
171 int rv, id;
172 unsigned char *in, hash[MAXBLOCKSIZE];
173 unsigned long len = sizeof(hash);
174
175 id = _find_hash(digest_name);
176 if (id == -1) croak("FATAL: find_digest failed for '%s'", digest_name);
177 in = (unsigned char *)SvPVbyte(data, inlen);
178 rv = hash_memory(id, in, inlen, hash, &len);
179 if (rv != CRYPT_OK) croak("FATAL: hash_memory failed: %s", error_to_string(rv));
180 RETVAL = newSVpvn((char *) hash, len);
181 }
182 OUTPUT:
183 RETVAL
184
185 SV *
186 digest_data_hex(char * digest_name, SV * data)
187 CODE:
188 {
189 STRLEN inlen;
190 int rv, id;
191 unsigned char *in, hash[MAXBLOCKSIZE];
192 unsigned long len = sizeof(hash), outlen;
193 char out[MAXBLOCKSIZE*2];
194
195 id = _find_hash(digest_name);
196 if (id == -1) croak("FATAL: find_digest failed for '%s'", digest_name);
197 in = (unsigned char *)SvPVbyte(data, inlen);
198 rv = hash_memory(id, in, inlen, hash, &len);
199 if (rv != CRYPT_OK) croak("FATAL: hash_memory failed: %s", error_to_string(rv));
200 outlen = sizeof(out);
201 rv = _base16_encode(hash, len, (unsigned char *)out, &outlen);
202 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
203 RETVAL = newSVpvn((char *) out, outlen);
204 }
205 OUTPUT:
206 RETVAL
207
208 SV *
209 digest_data_b64(char * digest_name, SV * data)
210 CODE:
211 {
212 STRLEN inlen;
213 int rv, id;
214 unsigned char *in, hash[MAXBLOCKSIZE];
215 unsigned long len = sizeof(hash), outlen;
216 char out[MAXBLOCKSIZE*2];
217
218 id = _find_hash(digest_name);
219 if (id == -1) croak("FATAL: find_digest failed for '%s'", digest_name);
220 in = (unsigned char *)SvPVbyte(data, inlen);
221 rv = hash_memory(id, in, inlen, hash, &len);
222 if (rv != CRYPT_OK) croak("FATAL: hash_memory failed: %s", error_to_string(rv));
223 outlen = sizeof(out);
224 rv = base64_encode(hash, len, (unsigned char *)out, &outlen);
225 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
226 RETVAL = newSVpvn((char *) out, outlen);
227
228 }
229 OUTPUT:
230 RETVAL
231
232 SV *
233 digest_data_b64u(char * digest_name, SV * data)
234 CODE:
235 {
236 STRLEN inlen;
237 int rv, id;
238 unsigned char *in, hash[MAXBLOCKSIZE];
239 unsigned long len = sizeof(hash), outlen;
240 char out[MAXBLOCKSIZE*2];
241
242 id = _find_hash(digest_name);
243 if (id == -1) croak("FATAL: find_digest failed for '%s'", digest_name);
244 in = (unsigned char *)SvPVbyte(data, inlen);
245 rv = hash_memory(id, in, inlen, hash, &len);
246 if (rv != CRYPT_OK) croak("FATAL: hash_memory failed: %s", error_to_string(rv));
247 outlen = sizeof(out);
248 rv = base64url_encode(hash, len, (unsigned char *)out, &outlen);
249 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
250 RETVAL = newSVpvn((char *) out, outlen);
251 }
252 OUTPUT:
253 RETVAL
3939 RETVAL
4040
4141 void
42 _add_single(Crypt::Mac::BLAKE2b self, SV * data)
43 CODE:
42 add(Crypt::Mac::BLAKE2b self, ...)
43 PPCODE:
4444 {
45 int rv;
45 int rv, i;
4646 STRLEN in_data_len;
4747 unsigned char *in_data;
4848
49 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
50 if (in_data_len>0) {
51 rv = blake2bmac_process(&self->state, in_data, (unsigned long)in_data_len);
52 if (rv != CRYPT_OK) croak("FATAL: blake2b_process failed: %s", error_to_string(rv));
49 for(i = 1; i < items; i++) {
50 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
51 if (in_data_len > 0) {
52 rv = blake2bmac_process(&self->state, in_data, (unsigned long)in_data_len);
53 if (rv != CRYPT_OK) croak("FATAL: blake2b_process failed: %s", error_to_string(rv));
54 }
5355 }
56 XPUSHs(ST(0)); /* return self */
5457 }
5558
5659 SV *
5760 mac(Crypt::Mac::BLAKE2b self)
58 CODE:
59 {
60 char mac[MAXBLOCKSIZE];
61 unsigned long maclen;
62 int rv;
63
64 maclen = sizeof(mac);
65 rv = blake2bmac_done(&self->state, (unsigned char*)mac, &maclen);
66 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));
67 RETVAL = newSVpvn(mac, maclen);
68 }
69 OUTPUT:
70 RETVAL
71
72 SV *
73 b64mac(Crypt::Mac::BLAKE2b self)
74 CODE:
75 {
76 unsigned char mac[MAXBLOCKSIZE];
77 unsigned long maclen;
78 int rv;
79 unsigned long outlen;
80 char out[MAXBLOCKSIZE*2];
81
82 maclen = sizeof(mac);
83 rv = blake2bmac_done(&self->state, mac, &maclen);
84 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));
85 outlen = sizeof(out);
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 OUTPUT:
91 RETVAL
92
93 SV *
94 b64umac(Crypt::Mac::BLAKE2b self)
95 CODE:
96 {
97 unsigned char mac[MAXBLOCKSIZE];
98 unsigned long maclen;
99 int rv;
100 unsigned long outlen;
101 char out[MAXBLOCKSIZE*2 + 1];
102
103 maclen = sizeof(mac);
104 rv = blake2bmac_done(&self->state, mac, &maclen);
105 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));
106 outlen = sizeof(out);
107 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
108 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
109 RETVAL = newSVpvn(out, outlen);
110 }
111 OUTPUT:
112 RETVAL
113
114 SV *
115 hexmac(Crypt::Mac::BLAKE2b self)
61 ALIAS:
62 hexmac = 1
63 b64mac = 2
64 b64umac = 3
11665 CODE:
11766 {
11867 unsigned char mac[MAXBLOCKSIZE];
12473 rv = blake2bmac_done(&self->state, mac, &maclen);
12574 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));
12675 outlen = sizeof(out);
127 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
128 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
129 RETVAL = newSVpvn(out, outlen);
76 if (ix == 3) {
77 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
78 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
79 RETVAL = newSVpvn(out, outlen);
80 }
81 if (ix == 2) {
82 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
83 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
84 RETVAL = newSVpvn(out, outlen);
85 }
86 if (ix == 1) {
87 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
88 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
89 RETVAL = newSVpvn(out, outlen);
90 }
91 else {
92 RETVAL = newSVpvn(mac, maclen);
93 }
13094 }
13195 OUTPUT:
13296 RETVAL
13397
13498 SV *
135 blake2b(unsigned long size, SV * key, SV * data)
99 blake2b(unsigned long size, SV * key, ...)
100 ALIAS:
101 blake2b_hex = 1
102 blake2b_b64 = 2
103 blake2b_b64u = 3
136104 CODE:
137105 {
138106 STRLEN inlen, klen;
139 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
107 unsigned char *in;
140108 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
141 int rv;
109 int rv, i;
142110 unsigned char mac[MAXBLOCKSIZE];
143 unsigned long len = sizeof(mac);
111 unsigned long len = sizeof(mac), outlen;
112 char out[MAXBLOCKSIZE*2];
113 blake2bmac_state st;
114
144115 if (size < len) len = size;
145 rv = blake2bmac_memory(k, klen, in, inlen, mac, &len);
146 if (rv != CRYPT_OK) croak("FATAL: blake2b_memory failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) mac, len);
116 rv = blake2bmac_init(&st, len, k, klen);
117 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_init failed: %s", error_to_string(rv));
118 for (i = 2; i < items; i++) {
119 in = (unsigned char *)SvPVbyte(ST(i), inlen);
120 if (inlen > 0) {
121 rv = blake2bmac_process(&st, in, inlen);
122 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_process failed: %s", error_to_string(rv));
123 }
124 }
125 rv = blake2bmac_done(&st, mac, &len);
126 if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));
127
128 outlen = sizeof(out);
129 if (ix == 3) {
130 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
131 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
132 RETVAL = newSVpvn((char *) out, outlen);
133 }
134 else if (ix == 2) {
135 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 1) {
140 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else {
145 RETVAL = newSVpvn((char *) mac, len);
146 }
148147 }
149148 OUTPUT:
150149 RETVAL
151
152 SV *
153 blake2b_hex(unsigned long size, SV * key, SV * data)
154 CODE:
155 {
156 STRLEN inlen, klen;
157 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
158 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
159 int rv;
160 unsigned char mac[MAXBLOCKSIZE];
161 unsigned long len = sizeof(mac), outlen;
162 char out[MAXBLOCKSIZE*2];
163 if (size < len) len = size;
164 rv = blake2bmac_memory(k, klen, in, inlen, mac, &len);
165 if (rv != CRYPT_OK) croak("FATAL: blake2b_memory failed: %s", error_to_string(rv));
166 outlen = sizeof(out);
167 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
168 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
169 RETVAL = newSVpvn((char *) out, outlen);
170 }
171 OUTPUT:
172 RETVAL
173
174 SV *
175 blake2b_b64(unsigned long size, SV * key, SV * data)
176 CODE:
177 {
178 STRLEN inlen, klen;
179 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
180 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
181 int rv;
182 unsigned char mac[MAXBLOCKSIZE];
183 unsigned long len = sizeof(mac), outlen;
184 char out[MAXBLOCKSIZE*2];
185 if (size < len) len = size;
186 rv = blake2bmac_memory(k, klen, in, inlen, mac, &len);
187 if (rv != CRYPT_OK) croak("FATAL: blake2b_memory failed: %s", error_to_string(rv));
188 outlen = sizeof(out);
189 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
190 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
191 RETVAL = newSVpvn((char *) out, outlen);
192
193 }
194 OUTPUT:
195 RETVAL
196
197 SV *
198 blake2b_b64u(unsigned long size, SV * key, SV * data)
199 CODE:
200 {
201 STRLEN inlen, klen;
202 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
203 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
204 int rv;
205 unsigned char mac[MAXBLOCKSIZE];
206 unsigned long len = sizeof(mac), outlen;
207 char out[MAXBLOCKSIZE*2];
208 if (size < len) len = size;
209 rv = blake2bmac_memory(k, klen, in, inlen, mac, &len);
210 if (rv != CRYPT_OK) croak("FATAL: blake2b_memory failed: %s", error_to_string(rv));
211 outlen = sizeof(out);
212 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
213 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
214 RETVAL = newSVpvn((char *) out, outlen);
215 }
216 OUTPUT:
217 RETVAL
3939 RETVAL
4040
4141 void
42 _add_single(Crypt::Mac::BLAKE2s self, SV * data)
43 CODE:
42 add(Crypt::Mac::BLAKE2s self, ...)
43 PPCODE:
4444 {
45 int rv;
45 int rv, i;
4646 STRLEN in_data_len;
4747 unsigned char *in_data;
4848
49 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
50 if (in_data_len>0) {
51 rv = blake2smac_process(&self->state, in_data, (unsigned long)in_data_len);
52 if (rv != CRYPT_OK) croak("FATAL: blake2s_process failed: %s", error_to_string(rv));
49 for(i = 1; i < items; i++) {
50 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
51 if (in_data_len > 0) {
52 rv = blake2smac_process(&self->state, in_data, (unsigned long)in_data_len);
53 if (rv != CRYPT_OK) croak("FATAL: blake2s_process failed: %s", error_to_string(rv));
54 }
5355 }
56 XPUSHs(ST(0)); /* return self */
5457 }
5558
5659 SV *
5760 mac(Crypt::Mac::BLAKE2s self)
58 CODE:
59 {
60 char mac[MAXBLOCKSIZE];
61 unsigned long maclen;
62 int rv;
63
64 maclen = sizeof(mac);
65 rv = blake2smac_done(&self->state, (unsigned char*)mac, &maclen);
66 if (rv != CRYPT_OK) croak("FATAL: blake2smac_done failed: %s", error_to_string(rv));
67 RETVAL = newSVpvn(mac, maclen);
68 }
69 OUTPUT:
70 RETVAL
71
72 SV *
73 b64mac(Crypt::Mac::BLAKE2s self)
74 CODE:
75 {
76 unsigned char mac[MAXBLOCKSIZE];
77 unsigned long maclen;
78 int rv;
79 unsigned long outlen;
80 char out[MAXBLOCKSIZE*2];
81
82 maclen = sizeof(mac);
83 rv = blake2smac_done(&self->state, mac, &maclen);
84 if (rv != CRYPT_OK) croak("FATAL: blake2smac_done failed: %s", error_to_string(rv));
85 outlen = sizeof(out);
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 OUTPUT:
91 RETVAL
92
93 SV *
94 b64umac(Crypt::Mac::BLAKE2s self)
95 CODE:
96 {
97 unsigned char mac[MAXBLOCKSIZE];
98 unsigned long maclen;
99 int rv;
100 unsigned long outlen;
101 char out[MAXBLOCKSIZE*2 + 1];
102
103 maclen = sizeof(mac);
104 rv = blake2smac_done(&self->state, mac, &maclen);
105 if (rv != CRYPT_OK) croak("FATAL: blake2smac_done failed: %s", error_to_string(rv));
106 outlen = sizeof(out);
107 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
108 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
109 RETVAL = newSVpvn(out, outlen);
110 }
111 OUTPUT:
112 RETVAL
113
114 SV *
115 hexmac(Crypt::Mac::BLAKE2s self)
61 ALIAS:
62 hexmac = 1
63 b64mac = 2
64 b64umac = 3
11665 CODE:
11766 {
11867 unsigned char mac[MAXBLOCKSIZE];
12473 rv = blake2smac_done(&self->state, mac, &maclen);
12574 if (rv != CRYPT_OK) croak("FATAL: blake2smac_done failed: %s", error_to_string(rv));
12675 outlen = sizeof(out);
127 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
128 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
129 RETVAL = newSVpvn(out, outlen);
76 if (ix == 3) {
77 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
78 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
79 RETVAL = newSVpvn(out, outlen);
80 }
81 if (ix == 2) {
82 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
83 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
84 RETVAL = newSVpvn(out, outlen);
85 }
86 if (ix == 1) {
87 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
88 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
89 RETVAL = newSVpvn(out, outlen);
90 }
91 else {
92 RETVAL = newSVpvn(mac, maclen);
93 }
13094 }
13195 OUTPUT:
13296 RETVAL
13397
13498 SV *
135 blake2s(unsigned long size, SV * key, SV * data)
99 blake2s(unsigned long size, SV * key, ...)
100 ALIAS:
101 blake2s_hex = 1
102 blake2s_b64 = 2
103 blake2s_b64u = 3
136104 CODE:
137105 {
138106 STRLEN inlen, klen;
139 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
107 unsigned char *in;
140108 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
141 int rv;
109 int rv, i;
142110 unsigned char mac[MAXBLOCKSIZE];
143 unsigned long len = sizeof(mac);
111 unsigned long len = sizeof(mac), outlen;
112 char out[MAXBLOCKSIZE*2];
113 blake2smac_state st;
114
144115 if (size < len) len = size;
145 rv = blake2smac_memory(k, klen, in, inlen, mac, &len);
146 if (rv != CRYPT_OK) croak("FATAL: blake2s_memory failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) mac, len);
116 rv = blake2smac_init(&st, len, k, klen);
117 if (rv != CRYPT_OK) croak("FATAL: blake2smac_init failed: %s", error_to_string(rv));
118 for (i = 2; i < items; i++) {
119 in = (unsigned char *)SvPVbyte(ST(i), inlen);
120 if (inlen > 0) {
121 rv = blake2smac_process(&st, in, inlen);
122 if (rv != CRYPT_OK) croak("FATAL: blake2smac_process failed: %s", error_to_string(rv));
123 }
124 }
125 rv = blake2smac_done(&st, mac, &len);
126 if (rv != CRYPT_OK) croak("FATAL: blake2smac_done failed: %s", error_to_string(rv));
127
128 outlen = sizeof(out);
129 if (ix == 3) {
130 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
131 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
132 RETVAL = newSVpvn((char *) out, outlen);
133 }
134 else if (ix == 2) {
135 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 1) {
140 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else {
145 RETVAL = newSVpvn((char *) mac, len);
146 }
148147 }
149148 OUTPUT:
150149 RETVAL
151
152 SV *
153 blake2s_hex(unsigned long size, SV * key, SV * data)
154 CODE:
155 {
156 STRLEN inlen, klen;
157 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
158 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
159 int rv;
160 unsigned char mac[MAXBLOCKSIZE];
161 unsigned long len = sizeof(mac), outlen;
162 char out[MAXBLOCKSIZE*2];
163 if (size < len) len = size;
164 rv = blake2smac_memory(k, klen, in, inlen, mac, &len);
165 if (rv != CRYPT_OK) croak("FATAL: blake2s_memory failed: %s", error_to_string(rv));
166 outlen = sizeof(out);
167 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
168 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
169 RETVAL = newSVpvn((char *) out, outlen);
170 }
171 OUTPUT:
172 RETVAL
173
174 SV *
175 blake2s_b64(unsigned long size, SV * key, SV * data)
176 CODE:
177 {
178 STRLEN inlen, klen;
179 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
180 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
181 int rv;
182 unsigned char mac[MAXBLOCKSIZE];
183 unsigned long len = sizeof(mac), outlen;
184 char out[MAXBLOCKSIZE*2];
185 if (size < len) len = size;
186 rv = blake2smac_memory(k, klen, in, inlen, mac, &len);
187 if (rv != CRYPT_OK) croak("FATAL: blake2s_memory failed: %s", error_to_string(rv));
188 outlen = sizeof(out);
189 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
190 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
191 RETVAL = newSVpvn((char *) out, outlen);
192
193 }
194 OUTPUT:
195 RETVAL
196
197 SV *
198 blake2s_b64u(unsigned long size, SV * key, SV * data)
199 CODE:
200 {
201 STRLEN inlen, klen;
202 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
203 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
204 int rv;
205 unsigned char mac[MAXBLOCKSIZE];
206 unsigned long len = sizeof(mac), outlen;
207 char out[MAXBLOCKSIZE*2];
208 if (size < len) len = size;
209 rv = blake2smac_memory(k, klen, in, inlen, mac, &len);
210 if (rv != CRYPT_OK) croak("FATAL: blake2s_memory failed: %s", error_to_string(rv));
211 outlen = sizeof(out);
212 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
213 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
214 RETVAL = newSVpvn((char *) out, outlen);
215 }
216 OUTPUT:
217 RETVAL
4343 RETVAL
4444
4545 void
46 _add_single(Crypt::Mac::F9 self, SV * data)
47 CODE:
46 add(Crypt::Mac::F9 self, ...)
47 PPCODE:
4848 {
49 int rv;
49 int rv, i;
5050 STRLEN in_data_len;
5151 unsigned char *in_data;
5252
53 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
54 if (in_data_len>0) {
55 rv = f9_process(&self->state, in_data, (unsigned long)in_data_len);
56 if (rv != CRYPT_OK) croak("FATAL: f9_process failed: %s", error_to_string(rv));
53 for(i = 1; i < items; i++) {
54 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
55 if (in_data_len > 0) {
56 rv = f9_process(&self->state, in_data, (unsigned long)in_data_len);
57 if (rv != CRYPT_OK) croak("FATAL: f9_process failed: %s", error_to_string(rv));
58 }
5759 }
60 XPUSHs(ST(0)); /* return self */
5861 }
5962
6063 SV *
6164 mac(Crypt::Mac::F9 self)
62 CODE:
63 {
64 char mac[MAXBLOCKSIZE];
65 unsigned long maclen;
66 int rv;
67
68 maclen = sizeof(mac);
69 rv = f9_done(&self->state, (unsigned char*)mac, &maclen);
70 if (rv != CRYPT_OK) croak("FATAL: f9_done failed: %s", error_to_string(rv));
71 RETVAL = newSVpvn(mac, maclen);
72 }
73 OUTPUT:
74 RETVAL
75
76 SV *
77 b64mac(Crypt::Mac::F9 self)
78 CODE:
79 {
80 unsigned char mac[MAXBLOCKSIZE];
81 unsigned long maclen;
82 int rv;
83 unsigned long outlen;
84 char out[MAXBLOCKSIZE*2];
85
86 maclen = sizeof(mac);
87 rv = f9_done(&self->state, mac, &maclen);
88 if (rv != CRYPT_OK) croak("FATAL: f9_done failed: %s", error_to_string(rv));
89 outlen = sizeof(out);
90 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
91 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
92 RETVAL = newSVpvn(out, outlen);
93 }
94 OUTPUT:
95 RETVAL
96
97 SV *
98 b64umac(Crypt::Mac::F9 self)
99 CODE:
100 {
101 unsigned char mac[MAXBLOCKSIZE];
102 unsigned long maclen;
103 int rv;
104 unsigned long outlen;
105 char out[MAXBLOCKSIZE*2 + 1];
106
107 maclen = sizeof(mac);
108 rv = f9_done(&self->state, mac, &maclen);
109 if (rv != CRYPT_OK) croak("FATAL: f9_done failed: %s", error_to_string(rv));
110 outlen = sizeof(out);
111 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
112 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
113 RETVAL = newSVpvn(out, outlen);
114 }
115 OUTPUT:
116 RETVAL
117
118 SV *
119 hexmac(Crypt::Mac::F9 self)
65 ALIAS:
66 hexmac = 1
67 b64mac = 2
68 b64umac = 3
12069 CODE:
12170 {
12271 unsigned char mac[MAXBLOCKSIZE];
12877 rv = f9_done(&self->state, mac, &maclen);
12978 if (rv != CRYPT_OK) croak("FATAL: f9_done failed: %s", error_to_string(rv));
13079 outlen = sizeof(out);
131 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
132 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
133 RETVAL = newSVpvn(out, outlen);
80 if (ix == 3) {
81 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
82 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
83 RETVAL = newSVpvn(out, outlen);
84 }
85 if (ix == 2) {
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 if (ix == 1) {
91 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
92 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
93 RETVAL = newSVpvn(out, outlen);
94 }
95 else {
96 RETVAL = newSVpvn(mac, maclen);
97 }
13498 }
13599 OUTPUT:
136100 RETVAL
137101
138102 SV *
139 f9(char * cipher_name, SV * key, SV * data)
103 f9(char * cipher_name, SV * key, ...)
104 ALIAS:
105 f9_hex = 1
106 f9_b64 = 2
107 f9_b64u = 3
140108 CODE:
141109 {
142110 STRLEN inlen, klen;
143 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
111 unsigned char *in;
144112 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
145 int rv;
113 int rv, i;
146114 unsigned char mac[MAXBLOCKSIZE];
147 unsigned long len = sizeof(mac);
115 unsigned long len = sizeof(mac), outlen;
116 char out[MAXBLOCKSIZE*2];
117 f9_state st;
118
148119 int id = _find_cipher(cipher_name);
149120 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
150 rv = f9_memory(id, k, klen, in, inlen, mac, &len);
151 if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
152 RETVAL = newSVpvn((char *) mac, len);
121 rv = f9_init(&st, id, k, klen);
122 if (rv != CRYPT_OK) croak("FATAL: f9_init failed: %s", error_to_string(rv));
123 for (i = 2; i < items; i++) {
124 in = (unsigned char *)SvPVbyte(ST(i), inlen);
125 if (inlen > 0) {
126 rv = f9_process(&st, in, inlen);
127 if (rv != CRYPT_OK) croak("FATAL: f9_process failed: %s", error_to_string(rv));
128 }
129 }
130 rv = f9_done(&st, mac, &len);
131 if (rv != CRYPT_OK) croak("FATAL: f9_done failed: %s", error_to_string(rv));
132
133 outlen = sizeof(out);
134 if (ix == 3) {
135 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 2) {
140 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else if (ix == 1) {
145 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
146 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) out, outlen);
148 }
149 else {
150 RETVAL = newSVpvn((char *) mac, len);
151 }
153152 }
154153 OUTPUT:
155154 RETVAL
156
157 SV *
158 f9_hex(char * cipher_name, SV * key, SV * data)
159 CODE:
160 {
161 STRLEN inlen, klen;
162 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
163 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
164 int rv;
165 unsigned char mac[MAXBLOCKSIZE];
166 unsigned long len = sizeof(mac), outlen;
167 char out[MAXBLOCKSIZE*2];
168 int id = _find_cipher(cipher_name);
169 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
170 rv = f9_memory(id, k, klen, in, inlen, mac, &len);
171 if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
172 outlen = sizeof(out);
173 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
174 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
175 RETVAL = newSVpvn((char *) out, outlen);
176 }
177 OUTPUT:
178 RETVAL
179
180 SV *
181 f9_b64(char * cipher_name, SV * key, SV * data)
182 CODE:
183 {
184 STRLEN inlen, klen;
185 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
186 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
187 int rv;
188 unsigned char mac[MAXBLOCKSIZE];
189 unsigned long len = sizeof(mac), outlen;
190 char out[MAXBLOCKSIZE*2];
191 int id = _find_cipher(cipher_name);
192 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
193 rv = f9_memory(id, k, klen, in, inlen, mac, &len);
194 if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
195 outlen = sizeof(out);
196 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
197 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
198 RETVAL = newSVpvn((char *) out, outlen);
199
200 }
201 OUTPUT:
202 RETVAL
203
204 SV *
205 f9_b64u(char * cipher_name, SV * key, SV * data)
206 CODE:
207 {
208 STRLEN inlen, klen;
209 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
210 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
211 int rv;
212 unsigned char mac[MAXBLOCKSIZE];
213 unsigned long len = sizeof(mac), outlen;
214 char out[MAXBLOCKSIZE*2];
215 int id = _find_cipher(cipher_name);
216 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
217 rv = f9_memory(id, k, klen, in, inlen, mac, &len);
218 if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
219 outlen = sizeof(out);
220 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
221 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
222 RETVAL = newSVpvn((char *) out, outlen);
223 }
224 OUTPUT:
225 RETVAL
4343 RETVAL
4444
4545 void
46 _add_single(Crypt::Mac::HMAC self, SV * data)
47 CODE:
46 add(Crypt::Mac::HMAC self, ...)
47 PPCODE:
4848 {
49 int rv;
49 int rv, i;
5050 STRLEN in_data_len;
5151 unsigned char *in_data;
5252
53 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
54 if (in_data_len>0) {
55 rv = hmac_process(&self->state, in_data, (unsigned long)in_data_len);
56 if (rv != CRYPT_OK) croak("FATAL: hmac_process failed: %s", error_to_string(rv));
53 for(i = 1; i < items; i++) {
54 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
55 if (in_data_len > 0) {
56 rv = hmac_process(&self->state, in_data, (unsigned long)in_data_len);
57 if (rv != CRYPT_OK) croak("FATAL: hmac_process failed: %s", error_to_string(rv));
58 }
5759 }
60 XPUSHs(ST(0)); /* return self */
5861 }
5962
6063 SV *
6164 mac(Crypt::Mac::HMAC self)
62 CODE:
63 {
64 char mac[MAXBLOCKSIZE];
65 unsigned long maclen;
66 int rv;
67
68 maclen = sizeof(mac);
69 rv = hmac_done(&self->state, (unsigned char*)mac, &maclen);
70 if (rv != CRYPT_OK) croak("FATAL: hmac_done failed: %s", error_to_string(rv));
71 RETVAL = newSVpvn(mac, maclen);
72 }
73 OUTPUT:
74 RETVAL
75
76 SV *
77 b64mac(Crypt::Mac::HMAC self)
78 CODE:
79 {
80 unsigned char mac[MAXBLOCKSIZE];
81 unsigned long maclen;
82 int rv;
83 unsigned long outlen;
84 char out[MAXBLOCKSIZE*2];
85
86 maclen = sizeof(mac);
87 rv = hmac_done(&self->state, mac, &maclen);
88 if (rv != CRYPT_OK) croak("FATAL: hmac_done failed: %s", error_to_string(rv));
89 outlen = sizeof(out);
90 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
91 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
92 RETVAL = newSVpvn(out, outlen);
93 }
94 OUTPUT:
95 RETVAL
96
97 SV *
98 b64umac(Crypt::Mac::HMAC self)
99 CODE:
100 {
101 unsigned char mac[MAXBLOCKSIZE];
102 unsigned long maclen;
103 int rv;
104 unsigned long outlen;
105 char out[MAXBLOCKSIZE*2 + 1];
106
107 maclen = sizeof(mac);
108 rv = hmac_done(&self->state, mac, &maclen);
109 if (rv != CRYPT_OK) croak("FATAL: hmac_done failed: %s", error_to_string(rv));
110 outlen = sizeof(out);
111 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
112 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
113 RETVAL = newSVpvn(out, outlen);
114 }
115 OUTPUT:
116 RETVAL
117
118 SV *
119 hexmac(Crypt::Mac::HMAC self)
65 ALIAS:
66 hexmac = 1
67 b64mac = 2
68 b64umac = 3
12069 CODE:
12170 {
12271 unsigned char mac[MAXBLOCKSIZE];
12877 rv = hmac_done(&self->state, mac, &maclen);
12978 if (rv != CRYPT_OK) croak("FATAL: hmac_done failed: %s", error_to_string(rv));
13079 outlen = sizeof(out);
131 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
132 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
133 RETVAL = newSVpvn(out, outlen);
80 if (ix == 3) {
81 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
82 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
83 RETVAL = newSVpvn(out, outlen);
84 }
85 if (ix == 2) {
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 if (ix == 1) {
91 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
92 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
93 RETVAL = newSVpvn(out, outlen);
94 }
95 else {
96 RETVAL = newSVpvn(mac, maclen);
97 }
13498 }
13599 OUTPUT:
136100 RETVAL
137101
138102 SV *
139 hmac(char * hash_name, SV * key, SV * data)
103 hmac(char * hash_name, SV * key, ...)
104 ALIAS:
105 hmac_hex = 1
106 hmac_b64 = 2
107 hmac_b64u = 3
140108 CODE:
141109 {
142110 STRLEN inlen, klen;
143 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
111 unsigned char *in;
144112 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
145 int rv;
113 int rv, i;
146114 unsigned char mac[MAXBLOCKSIZE];
147 unsigned long len = sizeof(mac);
115 unsigned long len = sizeof(mac), outlen;
116 char out[MAXBLOCKSIZE*2];
117 hmac_state st;
118
148119 int id = _find_hash(hash_name);
149120 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
150 rv = hmac_memory(id, k, klen, in, inlen, mac, &len);
151 if (rv != CRYPT_OK) croak("FATAL: hmac_memory failed: %s", error_to_string(rv));
152 RETVAL = newSVpvn((char *) mac, len);
121 rv = hmac_init(&st, id, k, klen);
122 if (rv != CRYPT_OK) croak("FATAL: hmac_init failed: %s", error_to_string(rv));
123 for (i = 2; i < items; i++) {
124 in = (unsigned char *)SvPVbyte(ST(i), inlen);
125 if (inlen > 0) {
126 rv = hmac_process(&st, in, inlen);
127 if (rv != CRYPT_OK) croak("FATAL: hmac_process failed: %s", error_to_string(rv));
128 }
129 }
130 rv = hmac_done(&st, mac, &len);
131 if (rv != CRYPT_OK) croak("FATAL: hmac_done failed: %s", error_to_string(rv));
132
133 outlen = sizeof(out);
134 if (ix == 3) {
135 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 2) {
140 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else if (ix == 1) {
145 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
146 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) out, outlen);
148 }
149 else {
150 RETVAL = newSVpvn((char *) mac, len);
151 }
153152 }
154153 OUTPUT:
155154 RETVAL
156
157 SV *
158 hmac_hex(char * hash_name, SV * key, SV * data)
159 CODE:
160 {
161 STRLEN inlen, klen;
162 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
163 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
164 int rv;
165 unsigned char mac[MAXBLOCKSIZE];
166 unsigned long len = sizeof(mac), outlen;
167 char out[MAXBLOCKSIZE*2];
168 int id = _find_hash(hash_name);
169 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
170 rv = hmac_memory(id, k, klen, in, inlen, mac, &len);
171 if (rv != CRYPT_OK) croak("FATAL: hmac_memory failed: %s", error_to_string(rv));
172 outlen = sizeof(out);
173 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
174 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
175 RETVAL = newSVpvn((char *) out, outlen);
176 }
177 OUTPUT:
178 RETVAL
179
180 SV *
181 hmac_b64(char * hash_name, SV * key, SV * data)
182 CODE:
183 {
184 STRLEN inlen, klen;
185 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
186 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
187 int rv;
188 unsigned char mac[MAXBLOCKSIZE];
189 unsigned long len = sizeof(mac), outlen;
190 char out[MAXBLOCKSIZE*2];
191 int id = _find_hash(hash_name);
192 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
193 rv = hmac_memory(id, k, klen, in, inlen, mac, &len);
194 if (rv != CRYPT_OK) croak("FATAL: hmac_memory failed: %s", error_to_string(rv));
195 outlen = sizeof(out);
196 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
197 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
198 RETVAL = newSVpvn((char *) out, outlen);
199
200 }
201 OUTPUT:
202 RETVAL
203
204 SV *
205 hmac_b64u(char * hash_name, SV * key, SV * data)
206 CODE:
207 {
208 STRLEN inlen, klen;
209 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
210 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
211 int rv;
212 unsigned char mac[MAXBLOCKSIZE];
213 unsigned long len = sizeof(mac), outlen;
214 char out[MAXBLOCKSIZE*2];
215 int id = _find_hash(hash_name);
216 if (id == -1) croak("FATAL: find_digest failed for '%s'", hash_name);
217 rv = hmac_memory(id, k, klen, in, inlen, mac, &len);
218 if (rv != CRYPT_OK) croak("FATAL: hmac_memory failed: %s", error_to_string(rv));
219 outlen = sizeof(out);
220 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
221 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
222 RETVAL = newSVpvn((char *) out, outlen);
223 }
224 OUTPUT:
225 RETVAL
4343 RETVAL
4444
4545 void
46 _add_single(Crypt::Mac::OMAC self, SV * data)
47 CODE:
46 add(Crypt::Mac::OMAC self, ...)
47 PPCODE:
4848 {
49 int rv;
49 int rv, i;
5050 STRLEN in_data_len;
5151 unsigned char *in_data;
5252
53 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
54 if (in_data_len>0) {
55 rv = omac_process(&self->state, in_data, (unsigned long)in_data_len);
56 if (rv != CRYPT_OK) croak("FATAL: omac_process failed: %s", error_to_string(rv));
53 for(i = 1; i < items; i++) {
54 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
55 if (in_data_len > 0) {
56 rv = omac_process(&self->state, in_data, (unsigned long)in_data_len);
57 if (rv != CRYPT_OK) croak("FATAL: omac_process failed: %s", error_to_string(rv));
58 }
5759 }
60 XPUSHs(ST(0)); /* return self */
5861 }
5962
6063 SV *
6164 mac(Crypt::Mac::OMAC self)
62 CODE:
63 {
64 char mac[MAXBLOCKSIZE];
65 unsigned long maclen;
66 int rv;
67
68 maclen = sizeof(mac);
69 rv = omac_done(&self->state, (unsigned char*)mac, &maclen);
70 if (rv != CRYPT_OK) croak("FATAL: omac_done failed: %s", error_to_string(rv));
71 RETVAL = newSVpvn(mac, maclen);
72 }
73 OUTPUT:
74 RETVAL
75
76 SV *
77 b64mac(Crypt::Mac::OMAC self)
78 CODE:
79 {
80 unsigned char mac[MAXBLOCKSIZE];
81 unsigned long maclen;
82 int rv;
83 unsigned long outlen;
84 char out[MAXBLOCKSIZE*2];
85
86 maclen = sizeof(mac);
87 rv = omac_done(&self->state, mac, &maclen);
88 if (rv != CRYPT_OK) croak("FATAL: omac_done failed: %s", error_to_string(rv));
89 outlen = sizeof(out);
90 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
91 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
92 RETVAL = newSVpvn(out, outlen);
93 }
94 OUTPUT:
95 RETVAL
96
97 SV *
98 b64umac(Crypt::Mac::OMAC self)
99 CODE:
100 {
101 unsigned char mac[MAXBLOCKSIZE];
102 unsigned long maclen;
103 int rv;
104 unsigned long outlen;
105 char out[MAXBLOCKSIZE*2 + 1];
106
107 maclen = sizeof(mac);
108 rv = omac_done(&self->state, mac, &maclen);
109 if (rv != CRYPT_OK) croak("FATAL: omac_done failed: %s", error_to_string(rv));
110 outlen = sizeof(out);
111 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
112 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
113 RETVAL = newSVpvn(out, outlen);
114 }
115 OUTPUT:
116 RETVAL
117
118 SV *
119 hexmac(Crypt::Mac::OMAC self)
65 ALIAS:
66 hexmac = 1
67 b64mac = 2
68 b64umac = 3
12069 CODE:
12170 {
12271 unsigned char mac[MAXBLOCKSIZE];
12877 rv = omac_done(&self->state, mac, &maclen);
12978 if (rv != CRYPT_OK) croak("FATAL: omac_done failed: %s", error_to_string(rv));
13079 outlen = sizeof(out);
131 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
132 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
133 RETVAL = newSVpvn(out, outlen);
80 if (ix == 3) {
81 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
82 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
83 RETVAL = newSVpvn(out, outlen);
84 }
85 if (ix == 2) {
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 if (ix == 1) {
91 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
92 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
93 RETVAL = newSVpvn(out, outlen);
94 }
95 else {
96 RETVAL = newSVpvn(mac, maclen);
97 }
13498 }
13599 OUTPUT:
136100 RETVAL
137101
138102 SV *
139 omac(char * cipher_name, SV * key, SV * data)
103 omac(char * cipher_name, SV * key, ...)
104 ALIAS:
105 omac_hex = 1
106 omac_b64 = 2
107 omac_b64u = 3
140108 CODE:
141109 {
142110 STRLEN inlen, klen;
143 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
111 unsigned char *in;
144112 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
145 int rv;
113 int rv, i;
146114 unsigned char mac[MAXBLOCKSIZE];
147 unsigned long len = sizeof(mac);
115 unsigned long len = sizeof(mac), outlen;
116 char out[MAXBLOCKSIZE*2];
117 omac_state st;
118
148119 int id = _find_cipher(cipher_name);
149120 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
150 rv = omac_memory(id, k, klen, in, inlen, mac, &len);
151 if (rv != CRYPT_OK) croak("FATAL: omac_memory failed: %s", error_to_string(rv));
152 RETVAL = newSVpvn((char *) mac, len);
121 rv = omac_init(&st, id, k, klen);
122 if (rv != CRYPT_OK) croak("FATAL: omac_init failed: %s", error_to_string(rv));
123 for (i = 2; i < items; i++) {
124 in = (unsigned char *)SvPVbyte(ST(i), inlen);
125 if (inlen > 0) {
126 rv = omac_process(&st, in, inlen);
127 if (rv != CRYPT_OK) croak("FATAL: omac_process failed: %s", error_to_string(rv));
128 }
129 }
130 rv = omac_done(&st, mac, &len);
131 if (rv != CRYPT_OK) croak("FATAL: omac_done failed: %s", error_to_string(rv));
132
133 outlen = sizeof(out);
134 if (ix == 3) {
135 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 2) {
140 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else if (ix == 1) {
145 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
146 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) out, outlen);
148 }
149 else {
150 RETVAL = newSVpvn((char *) mac, len);
151 }
153152 }
154153 OUTPUT:
155154 RETVAL
156
157 SV *
158 omac_hex(char * cipher_name, SV * key, SV * data)
159 CODE:
160 {
161 STRLEN inlen, klen;
162 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
163 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
164 int rv;
165 unsigned char mac[MAXBLOCKSIZE];
166 unsigned long len = sizeof(mac), outlen;
167 char out[MAXBLOCKSIZE*2];
168 int id = _find_cipher(cipher_name);
169 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
170 rv = omac_memory(id, k, klen, in, inlen, mac, &len);
171 if (rv != CRYPT_OK) croak("FATAL: omac_memory failed: %s", error_to_string(rv));
172 outlen = sizeof(out);
173 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
174 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
175 RETVAL = newSVpvn((char *) out, outlen);
176 }
177 OUTPUT:
178 RETVAL
179
180 SV *
181 omac_b64(char * cipher_name, SV * key, SV * data)
182 CODE:
183 {
184 STRLEN inlen, klen;
185 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
186 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
187 int rv;
188 unsigned char mac[MAXBLOCKSIZE];
189 unsigned long len = sizeof(mac), outlen;
190 char out[MAXBLOCKSIZE*2];
191 int id = _find_cipher(cipher_name);
192 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
193 rv = omac_memory(id, k, klen, in, inlen, mac, &len);
194 if (rv != CRYPT_OK) croak("FATAL: omac_memory failed: %s", error_to_string(rv));
195 outlen = sizeof(out);
196 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
197 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
198 RETVAL = newSVpvn((char *) out, outlen);
199
200 }
201 OUTPUT:
202 RETVAL
203
204 SV *
205 omac_b64u(char * cipher_name, SV * key, SV * data)
206 CODE:
207 {
208 STRLEN inlen, klen;
209 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
210 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
211 int rv;
212 unsigned char mac[MAXBLOCKSIZE];
213 unsigned long len = sizeof(mac), outlen;
214 char out[MAXBLOCKSIZE*2];
215 int id = _find_cipher(cipher_name);
216 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
217 rv = omac_memory(id, k, klen, in, inlen, mac, &len);
218 if (rv != CRYPT_OK) croak("FATAL: omac_memory failed: %s", error_to_string(rv));
219 outlen = sizeof(out);
220 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
221 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
222 RETVAL = newSVpvn((char *) out, outlen);
223 }
224 OUTPUT:
225 RETVAL
4343 RETVAL
4444
4545 void
46 _add_single(Crypt::Mac::PMAC self, SV * data)
47 CODE:
46 add(Crypt::Mac::PMAC self, ...)
47 PPCODE:
4848 {
49 int rv;
49 int rv, i;
5050 STRLEN in_data_len;
5151 unsigned char *in_data;
5252
53 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
54 if (in_data_len>0) {
55 rv = pmac_process(&self->state, in_data, (unsigned long)in_data_len);
56 if (rv != CRYPT_OK) croak("FATAL: pmac_process failed: %s", error_to_string(rv));
53 for(i = 1; i < items; i++) {
54 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
55 if (in_data_len > 0) {
56 rv = pmac_process(&self->state, in_data, (unsigned long)in_data_len);
57 if (rv != CRYPT_OK) croak("FATAL: pmac_process failed: %s", error_to_string(rv));
58 }
5759 }
60 XPUSHs(ST(0)); /* return self */
5861 }
5962
6063 SV *
6164 mac(Crypt::Mac::PMAC self)
62 CODE:
63 {
64 char mac[MAXBLOCKSIZE];
65 unsigned long maclen;
66 int rv;
67
68 maclen = sizeof(mac);
69 rv = pmac_done(&self->state, (unsigned char*)mac, &maclen);
70 if (rv != CRYPT_OK) croak("FATAL: pmac_done failed: %s", error_to_string(rv));
71 RETVAL = newSVpvn(mac, maclen);
72 }
73 OUTPUT:
74 RETVAL
75
76 SV *
77 b64mac(Crypt::Mac::PMAC self)
78 CODE:
79 {
80 unsigned char mac[MAXBLOCKSIZE];
81 unsigned long maclen;
82 int rv;
83 unsigned long outlen;
84 char out[MAXBLOCKSIZE*2];
85
86 maclen = sizeof(mac);
87 rv = pmac_done(&self->state, mac, &maclen);
88 if (rv != CRYPT_OK) croak("FATAL: pmac_done failed: %s", error_to_string(rv));
89 outlen = sizeof(out);
90 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
91 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
92 RETVAL = newSVpvn(out, outlen);
93 }
94 OUTPUT:
95 RETVAL
96
97 SV *
98 b64umac(Crypt::Mac::PMAC self)
99 CODE:
100 {
101 unsigned char mac[MAXBLOCKSIZE];
102 unsigned long maclen;
103 int rv;
104 unsigned long outlen;
105 char out[MAXBLOCKSIZE*2 + 1];
106
107 maclen = sizeof(mac);
108 rv = pmac_done(&self->state, mac, &maclen);
109 if (rv != CRYPT_OK) croak("FATAL: pmac_done failed: %s", error_to_string(rv));
110 outlen = sizeof(out);
111 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
112 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
113 RETVAL = newSVpvn(out, outlen);
114 }
115 OUTPUT:
116 RETVAL
117
118 SV *
119 hexmac(Crypt::Mac::PMAC self)
65 ALIAS:
66 hexmac = 1
67 b64mac = 2
68 b64umac = 3
12069 CODE:
12170 {
12271 unsigned char mac[MAXBLOCKSIZE];
12877 rv = pmac_done(&self->state, mac, &maclen);
12978 if (rv != CRYPT_OK) croak("FATAL: pmac_done failed: %s", error_to_string(rv));
13079 outlen = sizeof(out);
131 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
132 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
133 RETVAL = newSVpvn(out, outlen);
80 if (ix == 3) {
81 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
82 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
83 RETVAL = newSVpvn(out, outlen);
84 }
85 if (ix == 2) {
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 if (ix == 1) {
91 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
92 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
93 RETVAL = newSVpvn(out, outlen);
94 }
95 else {
96 RETVAL = newSVpvn(mac, maclen);
97 }
13498 }
13599 OUTPUT:
136100 RETVAL
137101
138102 SV *
139 pmac(char * cipher_name, SV * key, SV * data)
103 pmac(char * cipher_name, SV * key, ...)
104 ALIAS:
105 pmac_hex = 1
106 pmac_b64 = 2
107 pmac_b64u = 3
140108 CODE:
141109 {
142110 STRLEN inlen, klen;
143 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
111 unsigned char *in;
144112 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
145 int rv;
113 int rv, i;
146114 unsigned char mac[MAXBLOCKSIZE];
147 unsigned long len = sizeof(mac);
115 unsigned long len = sizeof(mac), outlen;
116 char out[MAXBLOCKSIZE*2];
117 pmac_state st;
118
148119 int id = _find_cipher(cipher_name);
149120 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
150 rv = pmac_memory(id, k, klen, in, inlen, mac, &len);
151 if (rv != CRYPT_OK) croak("FATAL: pmac_memory failed: %s", error_to_string(rv));
152 RETVAL = newSVpvn((char *) mac, len);
121 rv = pmac_init(&st, id, k, klen);
122 if (rv != CRYPT_OK) croak("FATAL: pmac_init failed: %s", error_to_string(rv));
123 for (i = 2; i < items; i++) {
124 in = (unsigned char *)SvPVbyte(ST(i), inlen);
125 if (inlen > 0) {
126 rv = pmac_process(&st, in, inlen);
127 if (rv != CRYPT_OK) croak("FATAL: pmac_process failed: %s", error_to_string(rv));
128 }
129 }
130 rv = pmac_done(&st, mac, &len);
131 if (rv != CRYPT_OK) croak("FATAL: pmac_done failed: %s", error_to_string(rv));
132
133 outlen = sizeof(out);
134 if (ix == 3) {
135 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 2) {
140 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else if (ix == 1) {
145 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
146 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) out, outlen);
148 }
149 else {
150 RETVAL = newSVpvn((char *) mac, len);
151 }
153152 }
154153 OUTPUT:
155154 RETVAL
156
157 SV *
158 pmac_hex(char * cipher_name, SV * key, SV * data)
159 CODE:
160 {
161 STRLEN inlen, klen;
162 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
163 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
164 int rv;
165 unsigned char mac[MAXBLOCKSIZE];
166 unsigned long len = sizeof(mac), outlen;
167 char out[MAXBLOCKSIZE*2];
168 int id = _find_cipher(cipher_name);
169 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
170 rv = pmac_memory(id, k, klen, in, inlen, mac, &len);
171 if (rv != CRYPT_OK) croak("FATAL: pmac_memory failed: %s", error_to_string(rv));
172 outlen = sizeof(out);
173 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
174 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
175 RETVAL = newSVpvn((char *) out, outlen);
176 }
177 OUTPUT:
178 RETVAL
179
180 SV *
181 pmac_b64(char * cipher_name, SV * key, SV * data)
182 CODE:
183 {
184 STRLEN inlen, klen;
185 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
186 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
187 int rv;
188 unsigned char mac[MAXBLOCKSIZE];
189 unsigned long len = sizeof(mac), outlen;
190 char out[MAXBLOCKSIZE*2];
191 int id = _find_cipher(cipher_name);
192 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
193 rv = pmac_memory(id, k, klen, in, inlen, mac, &len);
194 if (rv != CRYPT_OK) croak("FATAL: pmac_memory failed: %s", error_to_string(rv));
195 outlen = sizeof(out);
196 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
197 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
198 RETVAL = newSVpvn((char *) out, outlen);
199
200 }
201 OUTPUT:
202 RETVAL
203
204 SV *
205 pmac_b64u(char * cipher_name, SV * key, SV * data)
206 CODE:
207 {
208 STRLEN inlen, klen;
209 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
210 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
211 int rv;
212 unsigned char mac[MAXBLOCKSIZE];
213 unsigned long len = sizeof(mac), outlen;
214 char out[MAXBLOCKSIZE*2];
215 int id = _find_cipher(cipher_name);
216 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
217 rv = pmac_memory(id, k, klen, in, inlen, mac, &len);
218 if (rv != CRYPT_OK) croak("FATAL: pmac_memory failed: %s", error_to_string(rv));
219 outlen = sizeof(out);
220 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
221 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
222 RETVAL = newSVpvn((char *) out, outlen);
223 }
224 OUTPUT:
225 RETVAL
3939 RETVAL
4040
4141 void
42 _add_single(Crypt::Mac::Pelican self, SV * data)
43 CODE:
42 add(Crypt::Mac::Pelican self, ...)
43 PPCODE:
4444 {
45 int rv;
45 int rv, i;
4646 STRLEN in_data_len;
4747 unsigned char *in_data;
4848
49 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
50 if (in_data_len>0) {
51 rv = pelican_process(&self->state, in_data, (unsigned long)in_data_len);
52 if (rv != CRYPT_OK) croak("FATAL: pelican_process failed: %s", error_to_string(rv));
49 for(i = 1; i < items; i++) {
50 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
51 if (in_data_len > 0) {
52 rv = pelican_process(&self->state, in_data, (unsigned long)in_data_len);
53 if (rv != CRYPT_OK) croak("FATAL: pelican_process failed: %s", error_to_string(rv));
54 }
5355 }
56 XPUSHs(ST(0)); /* return self */
5457 }
5558
5659 SV *
5760 mac(Crypt::Mac::Pelican self)
58 CODE:
59 {
60 char mac[MAXBLOCKSIZE];
61 unsigned long maclen;
62 int rv;
63
64 maclen = 16;
65 rv = pelican_done(&self->state, (unsigned char*)mac);
66 if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
67 RETVAL = newSVpvn(mac, maclen);
68 }
69 OUTPUT:
70 RETVAL
71
72 SV *
73 b64mac(Crypt::Mac::Pelican self)
74 CODE:
75 {
76 unsigned char mac[MAXBLOCKSIZE];
77 unsigned long maclen;
78 int rv;
79 unsigned long outlen;
80 char out[MAXBLOCKSIZE*2];
81
82 maclen = 16;
83 rv = pelican_done(&self->state, mac);
84 if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
85 outlen = sizeof(out);
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 OUTPUT:
91 RETVAL
92
93 SV *
94 b64umac(Crypt::Mac::Pelican self)
95 CODE:
96 {
97 unsigned char mac[MAXBLOCKSIZE];
98 unsigned long maclen;
99 int rv;
100 unsigned long outlen;
101 char out[MAXBLOCKSIZE*2 + 1];
102
103 maclen = 16;
104 rv = pelican_done(&self->state, mac);
105 if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
106 outlen = sizeof(out);
107 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
108 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
109 RETVAL = newSVpvn(out, outlen);
110 }
111 OUTPUT:
112 RETVAL
113
114 SV *
115 hexmac(Crypt::Mac::Pelican self)
61 ALIAS:
62 hexmac = 1
63 b64mac = 2
64 b64umac = 3
11665 CODE:
11766 {
11867 unsigned char mac[MAXBLOCKSIZE];
12473 rv = pelican_done(&self->state, mac);
12574 if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
12675 outlen = sizeof(out);
127 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
128 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
129 RETVAL = newSVpvn(out, outlen);
76 if (ix == 3) {
77 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
78 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
79 RETVAL = newSVpvn(out, outlen);
80 }
81 if (ix == 2) {
82 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
83 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
84 RETVAL = newSVpvn(out, outlen);
85 }
86 if (ix == 1) {
87 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
88 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
89 RETVAL = newSVpvn(out, outlen);
90 }
91 else {
92 RETVAL = newSVpvn(mac, maclen);
93 }
13094 }
13195 OUTPUT:
13296 RETVAL
13397
13498 SV *
135 pelican(SV * key, SV * data)
99 pelican(SV * key, ...)
100 ALIAS:
101 pelican_hex = 1
102 pelican_b64 = 2
103 pelican_b64u = 3
136104 CODE:
137105 {
138106 STRLEN inlen, klen;
139 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
107 unsigned char *in;
140108 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
141 int rv;
109 int rv, i;
142110 unsigned char mac[MAXBLOCKSIZE];
143 unsigned long len = sizeof(mac);
111 unsigned long len = sizeof(mac), outlen;
112 char out[MAXBLOCKSIZE*2];
113 pelican_state st;
114
144115 len = 16;
145 rv = pelican_memory(k, klen, in, inlen, mac);
146 if (rv != CRYPT_OK) croak("FATAL: pelican_memory failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) mac, len);
116 rv = pelican_init(&st, k, klen);
117 if (rv != CRYPT_OK) croak("FATAL: pelican_init failed: %s", error_to_string(rv));
118 for (i = 1; i < items; i++) {
119 in = (unsigned char *)SvPVbyte(ST(i), inlen);
120 if (inlen > 0) {
121 rv = pelican_process(&st, in, inlen);
122 if (rv != CRYPT_OK) croak("FATAL: pelican_process failed: %s", error_to_string(rv));
123 }
124 }
125 rv = pelican_done(&st, mac);
126 if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
127
128 outlen = sizeof(out);
129 if (ix == 3) {
130 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
131 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
132 RETVAL = newSVpvn((char *) out, outlen);
133 }
134 else if (ix == 2) {
135 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 1) {
140 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else {
145 RETVAL = newSVpvn((char *) mac, len);
146 }
148147 }
149148 OUTPUT:
150149 RETVAL
151
152 SV *
153 pelican_hex(SV * key, SV * data)
154 CODE:
155 {
156 STRLEN inlen, klen;
157 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
158 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
159 int rv;
160 unsigned char mac[MAXBLOCKSIZE];
161 unsigned long len = sizeof(mac), outlen;
162 char out[MAXBLOCKSIZE*2];
163 len = 16;
164 rv = pelican_memory(k, klen, in, inlen, mac);
165 if (rv != CRYPT_OK) croak("FATAL: pelican_memory failed: %s", error_to_string(rv));
166 outlen = sizeof(out);
167 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
168 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
169 RETVAL = newSVpvn((char *) out, outlen);
170 }
171 OUTPUT:
172 RETVAL
173
174 SV *
175 pelican_b64(SV * key, SV * data)
176 CODE:
177 {
178 STRLEN inlen, klen;
179 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
180 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
181 int rv;
182 unsigned char mac[MAXBLOCKSIZE];
183 unsigned long len = sizeof(mac), outlen;
184 char out[MAXBLOCKSIZE*2];
185 len = 16;
186 rv = pelican_memory(k, klen, in, inlen, mac);
187 if (rv != CRYPT_OK) croak("FATAL: pelican_memory failed: %s", error_to_string(rv));
188 outlen = sizeof(out);
189 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
190 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
191 RETVAL = newSVpvn((char *) out, outlen);
192
193 }
194 OUTPUT:
195 RETVAL
196
197 SV *
198 pelican_b64u(SV * key, SV * data)
199 CODE:
200 {
201 STRLEN inlen, klen;
202 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
203 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
204 int rv;
205 unsigned char mac[MAXBLOCKSIZE];
206 unsigned long len = sizeof(mac), outlen;
207 char out[MAXBLOCKSIZE*2];
208 len = 16;
209 rv = pelican_memory(k, klen, in, inlen, mac);
210 if (rv != CRYPT_OK) croak("FATAL: pelican_memory failed: %s", error_to_string(rv));
211 outlen = sizeof(out);
212 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
213 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
214 RETVAL = newSVpvn((char *) out, outlen);
215 }
216 OUTPUT:
217 RETVAL
3939 RETVAL
4040
4141 void
42 _add_single(Crypt::Mac::Poly1305 self, SV * data)
43 CODE:
42 add(Crypt::Mac::Poly1305 self, ...)
43 PPCODE:
4444 {
45 int rv;
45 int rv, i;
4646 STRLEN in_data_len;
4747 unsigned char *in_data;
4848
49 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
50 if (in_data_len>0) {
51 rv = poly1305_process(&self->state, in_data, (unsigned long)in_data_len);
52 if (rv != CRYPT_OK) croak("FATAL: poly1305_process failed: %s", error_to_string(rv));
49 for(i = 1; i < items; i++) {
50 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
51 if (in_data_len > 0) {
52 rv = poly1305_process(&self->state, in_data, (unsigned long)in_data_len);
53 if (rv != CRYPT_OK) croak("FATAL: poly1305_process failed: %s", error_to_string(rv));
54 }
5355 }
56 XPUSHs(ST(0)); /* return self */
5457 }
5558
5659 SV *
5760 mac(Crypt::Mac::Poly1305 self)
58 CODE:
59 {
60 char mac[MAXBLOCKSIZE];
61 unsigned long maclen;
62 int rv;
63
64 maclen = sizeof(mac);
65 rv = poly1305_done(&self->state, (unsigned char*)mac, &maclen);
66 if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv));
67 RETVAL = newSVpvn(mac, maclen);
68 }
69 OUTPUT:
70 RETVAL
71
72 SV *
73 b64mac(Crypt::Mac::Poly1305 self)
74 CODE:
75 {
76 unsigned char mac[MAXBLOCKSIZE];
77 unsigned long maclen;
78 int rv;
79 unsigned long outlen;
80 char out[MAXBLOCKSIZE*2];
81
82 maclen = sizeof(mac);
83 rv = poly1305_done(&self->state, mac, &maclen);
84 if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv));
85 outlen = sizeof(out);
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 OUTPUT:
91 RETVAL
92
93 SV *
94 b64umac(Crypt::Mac::Poly1305 self)
95 CODE:
96 {
97 unsigned char mac[MAXBLOCKSIZE];
98 unsigned long maclen;
99 int rv;
100 unsigned long outlen;
101 char out[MAXBLOCKSIZE*2 + 1];
102
103 maclen = sizeof(mac);
104 rv = poly1305_done(&self->state, mac, &maclen);
105 if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv));
106 outlen = sizeof(out);
107 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
108 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
109 RETVAL = newSVpvn(out, outlen);
110 }
111 OUTPUT:
112 RETVAL
113
114 SV *
115 hexmac(Crypt::Mac::Poly1305 self)
61 ALIAS:
62 hexmac = 1
63 b64mac = 2
64 b64umac = 3
11665 CODE:
11766 {
11867 unsigned char mac[MAXBLOCKSIZE];
12473 rv = poly1305_done(&self->state, mac, &maclen);
12574 if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv));
12675 outlen = sizeof(out);
127 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
128 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
129 RETVAL = newSVpvn(out, outlen);
76 if (ix == 3) {
77 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
78 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
79 RETVAL = newSVpvn(out, outlen);
80 }
81 if (ix == 2) {
82 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
83 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
84 RETVAL = newSVpvn(out, outlen);
85 }
86 if (ix == 1) {
87 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
88 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
89 RETVAL = newSVpvn(out, outlen);
90 }
91 else {
92 RETVAL = newSVpvn(mac, maclen);
93 }
13094 }
13195 OUTPUT:
13296 RETVAL
13397
13498 SV *
135 poly1305(SV * key, SV * data)
99 poly1305(SV * key, ...)
100 ALIAS:
101 poly1305_hex = 1
102 poly1305_b64 = 2
103 poly1305_b64u = 3
136104 CODE:
137105 {
138106 STRLEN inlen, klen;
139 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
107 unsigned char *in;
140108 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
141 int rv;
109 int rv, i;
142110 unsigned char mac[MAXBLOCKSIZE];
143 unsigned long len = sizeof(mac);
144 rv = poly1305_memory(k, klen, in, inlen, mac, &len);
145 if (rv != CRYPT_OK) croak("FATAL: poly1305_memory failed: %s", error_to_string(rv));
146 RETVAL = newSVpvn((char *) mac, len);
111 unsigned long len = sizeof(mac), outlen;
112 char out[MAXBLOCKSIZE*2];
113 poly1305_state st;
114
115 rv = poly1305_init(&st, k, klen);
116 if (rv != CRYPT_OK) croak("FATAL: poly1305_init failed: %s", error_to_string(rv));
117 for (i = 1; i < items; i++) {
118 in = (unsigned char *)SvPVbyte(ST(i), inlen);
119 if (inlen > 0) {
120 rv = poly1305_process(&st, in, inlen);
121 if (rv != CRYPT_OK) croak("FATAL: poly1305_process failed: %s", error_to_string(rv));
122 }
123 }
124 rv = poly1305_done(&st, mac, &len);
125 if (rv != CRYPT_OK) croak("FATAL: poly1305_done failed: %s", error_to_string(rv));
126
127 outlen = sizeof(out);
128 if (ix == 3) {
129 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
130 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
131 RETVAL = newSVpvn((char *) out, outlen);
132 }
133 else if (ix == 2) {
134 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
135 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
136 RETVAL = newSVpvn((char *) out, outlen);
137 }
138 else if (ix == 1) {
139 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
140 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
141 RETVAL = newSVpvn((char *) out, outlen);
142 }
143 else {
144 RETVAL = newSVpvn((char *) mac, len);
145 }
147146 }
148147 OUTPUT:
149148 RETVAL
150
151 SV *
152 poly1305_hex(SV * key, SV * data)
153 CODE:
154 {
155 STRLEN inlen, klen;
156 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
157 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
158 int rv;
159 unsigned char mac[MAXBLOCKSIZE];
160 unsigned long len = sizeof(mac), outlen;
161 char out[MAXBLOCKSIZE*2];
162 rv = poly1305_memory(k, klen, in, inlen, mac, &len);
163 if (rv != CRYPT_OK) croak("FATAL: poly1305_memory failed: %s", error_to_string(rv));
164 outlen = sizeof(out);
165 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
166 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
167 RETVAL = newSVpvn((char *) out, outlen);
168 }
169 OUTPUT:
170 RETVAL
171
172 SV *
173 poly1305_b64(SV * key, SV * data)
174 CODE:
175 {
176 STRLEN inlen, klen;
177 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
178 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
179 int rv;
180 unsigned char mac[MAXBLOCKSIZE];
181 unsigned long len = sizeof(mac), outlen;
182 char out[MAXBLOCKSIZE*2];
183 rv = poly1305_memory(k, klen, in, inlen, mac, &len);
184 if (rv != CRYPT_OK) croak("FATAL: poly1305_memory failed: %s", error_to_string(rv));
185 outlen = sizeof(out);
186 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
187 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
188 RETVAL = newSVpvn((char *) out, outlen);
189
190 }
191 OUTPUT:
192 RETVAL
193
194 SV *
195 poly1305_b64u(SV * key, SV * data)
196 CODE:
197 {
198 STRLEN inlen, klen;
199 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
200 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
201 int rv;
202 unsigned char mac[MAXBLOCKSIZE];
203 unsigned long len = sizeof(mac), outlen;
204 char out[MAXBLOCKSIZE*2];
205 rv = poly1305_memory(k, klen, in, inlen, mac, &len);
206 if (rv != CRYPT_OK) croak("FATAL: poly1305_memory failed: %s", error_to_string(rv));
207 outlen = sizeof(out);
208 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
209 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
210 RETVAL = newSVpvn((char *) out, outlen);
211 }
212 OUTPUT:
213 RETVAL
4343 RETVAL
4444
4545 void
46 _add_single(Crypt::Mac::XCBC self, SV * data)
47 CODE:
46 add(Crypt::Mac::XCBC self, ...)
47 PPCODE:
4848 {
49 int rv;
49 int rv, i;
5050 STRLEN in_data_len;
5151 unsigned char *in_data;
5252
53 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
54 if (in_data_len>0) {
55 rv = xcbc_process(&self->state, in_data, (unsigned long)in_data_len);
56 if (rv != CRYPT_OK) croak("FATAL: xcbc_process failed: %s", error_to_string(rv));
53 for(i = 1; i < items; i++) {
54 in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
55 if (in_data_len > 0) {
56 rv = xcbc_process(&self->state, in_data, (unsigned long)in_data_len);
57 if (rv != CRYPT_OK) croak("FATAL: xcbc_process failed: %s", error_to_string(rv));
58 }
5759 }
60 XPUSHs(ST(0)); /* return self */
5861 }
5962
6063 SV *
6164 mac(Crypt::Mac::XCBC self)
62 CODE:
63 {
64 char mac[MAXBLOCKSIZE];
65 unsigned long maclen;
66 int rv;
67
68 maclen = sizeof(mac);
69 rv = xcbc_done(&self->state, (unsigned char*)mac, &maclen);
70 if (rv != CRYPT_OK) croak("FATAL: xcbc_done failed: %s", error_to_string(rv));
71 RETVAL = newSVpvn(mac, maclen);
72 }
73 OUTPUT:
74 RETVAL
75
76 SV *
77 b64mac(Crypt::Mac::XCBC self)
78 CODE:
79 {
80 unsigned char mac[MAXBLOCKSIZE];
81 unsigned long maclen;
82 int rv;
83 unsigned long outlen;
84 char out[MAXBLOCKSIZE*2];
85
86 maclen = sizeof(mac);
87 rv = xcbc_done(&self->state, mac, &maclen);
88 if (rv != CRYPT_OK) croak("FATAL: xcbc_done failed: %s", error_to_string(rv));
89 outlen = sizeof(out);
90 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
91 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
92 RETVAL = newSVpvn(out, outlen);
93 }
94 OUTPUT:
95 RETVAL
96
97 SV *
98 b64umac(Crypt::Mac::XCBC self)
99 CODE:
100 {
101 unsigned char mac[MAXBLOCKSIZE];
102 unsigned long maclen;
103 int rv;
104 unsigned long outlen;
105 char out[MAXBLOCKSIZE*2 + 1];
106
107 maclen = sizeof(mac);
108 rv = xcbc_done(&self->state, mac, &maclen);
109 if (rv != CRYPT_OK) croak("FATAL: xcbc_done failed: %s", error_to_string(rv));
110 outlen = sizeof(out);
111 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
112 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
113 RETVAL = newSVpvn(out, outlen);
114 }
115 OUTPUT:
116 RETVAL
117
118 SV *
119 hexmac(Crypt::Mac::XCBC self)
65 ALIAS:
66 hexmac = 1
67 b64mac = 2
68 b64umac = 3
12069 CODE:
12170 {
12271 unsigned char mac[MAXBLOCKSIZE];
12877 rv = xcbc_done(&self->state, mac, &maclen);
12978 if (rv != CRYPT_OK) croak("FATAL: xcbc_done failed: %s", error_to_string(rv));
13079 outlen = sizeof(out);
131 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
132 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
133 RETVAL = newSVpvn(out, outlen);
80 if (ix == 3) {
81 rv = base64url_encode(mac, maclen, (unsigned char*)out, &outlen);
82 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
83 RETVAL = newSVpvn(out, outlen);
84 }
85 if (ix == 2) {
86 rv = base64_encode(mac, maclen, (unsigned char*)out, &outlen);
87 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
88 RETVAL = newSVpvn(out, outlen);
89 }
90 if (ix == 1) {
91 rv = _base16_encode(mac, maclen, (unsigned char *)out, &outlen);
92 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
93 RETVAL = newSVpvn(out, outlen);
94 }
95 else {
96 RETVAL = newSVpvn(mac, maclen);
97 }
13498 }
13599 OUTPUT:
136100 RETVAL
137101
138102 SV *
139 xcbc(char * cipher_name, SV * key, SV * data)
103 xcbc(char * cipher_name, SV * key, ...)
104 ALIAS:
105 xcbc_hex = 1
106 xcbc_b64 = 2
107 xcbc_b64u = 3
140108 CODE:
141109 {
142110 STRLEN inlen, klen;
143 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
111 unsigned char *in;
144112 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
145 int rv;
113 int rv, i;
146114 unsigned char mac[MAXBLOCKSIZE];
147 unsigned long len = sizeof(mac);
115 unsigned long len = sizeof(mac), outlen;
116 char out[MAXBLOCKSIZE*2];
117 xcbc_state st;
118
148119 int id = _find_cipher(cipher_name);
149120 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
150 rv = xcbc_memory(id, k, klen, in, inlen, mac, &len);
151 if (rv != CRYPT_OK) croak("FATAL: xcbc_memory failed: %s", error_to_string(rv));
152 RETVAL = newSVpvn((char *) mac, len);
121 rv = xcbc_init(&st, id, k, klen);
122 if (rv != CRYPT_OK) croak("FATAL: xcbc_init failed: %s", error_to_string(rv));
123 for (i = 2; i < items; i++) {
124 in = (unsigned char *)SvPVbyte(ST(i), inlen);
125 if (inlen > 0) {
126 rv = xcbc_process(&st, in, inlen);
127 if (rv != CRYPT_OK) croak("FATAL: xcbc_process failed: %s", error_to_string(rv));
128 }
129 }
130 rv = xcbc_done(&st, mac, &len);
131 if (rv != CRYPT_OK) croak("FATAL: xcbc_done failed: %s", error_to_string(rv));
132
133 outlen = sizeof(out);
134 if (ix == 3) {
135 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
136 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
137 RETVAL = newSVpvn((char *) out, outlen);
138 }
139 else if (ix == 2) {
140 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
141 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
142 RETVAL = newSVpvn((char *) out, outlen);
143 }
144 else if (ix == 1) {
145 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
146 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
147 RETVAL = newSVpvn((char *) out, outlen);
148 }
149 else {
150 RETVAL = newSVpvn((char *) mac, len);
151 }
153152 }
154153 OUTPUT:
155154 RETVAL
156
157 SV *
158 xcbc_hex(char * cipher_name, SV * key, SV * data)
159 CODE:
160 {
161 STRLEN inlen, klen;
162 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
163 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
164 int rv;
165 unsigned char mac[MAXBLOCKSIZE];
166 unsigned long len = sizeof(mac), outlen;
167 char out[MAXBLOCKSIZE*2];
168 int id = _find_cipher(cipher_name);
169 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
170 rv = xcbc_memory(id, k, klen, in, inlen, mac, &len);
171 if (rv != CRYPT_OK) croak("FATAL: xcbc_memory failed: %s", error_to_string(rv));
172 outlen = sizeof(out);
173 rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
174 if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
175 RETVAL = newSVpvn((char *) out, outlen);
176 }
177 OUTPUT:
178 RETVAL
179
180 SV *
181 xcbc_b64(char * cipher_name, SV * key, SV * data)
182 CODE:
183 {
184 STRLEN inlen, klen;
185 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
186 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
187 int rv;
188 unsigned char mac[MAXBLOCKSIZE];
189 unsigned long len = sizeof(mac), outlen;
190 char out[MAXBLOCKSIZE*2];
191 int id = _find_cipher(cipher_name);
192 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
193 rv = xcbc_memory(id, k, klen, in, inlen, mac, &len);
194 if (rv != CRYPT_OK) croak("FATAL: xcbc_memory failed: %s", error_to_string(rv));
195 outlen = sizeof(out);
196 rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
197 if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
198 RETVAL = newSVpvn((char *) out, outlen);
199
200 }
201 OUTPUT:
202 RETVAL
203
204 SV *
205 xcbc_b64u(char * cipher_name, SV * key, SV * data)
206 CODE:
207 {
208 STRLEN inlen, klen;
209 unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
210 unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
211 int rv;
212 unsigned char mac[MAXBLOCKSIZE];
213 unsigned long len = sizeof(mac), outlen;
214 char out[MAXBLOCKSIZE*2];
215 int id = _find_cipher(cipher_name);
216 if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
217 rv = xcbc_memory(id, k, klen, in, inlen, mac, &len);
218 if (rv != CRYPT_OK) croak("FATAL: xcbc_memory failed: %s", error_to_string(rv));
219 outlen = sizeof(out);
220 rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
221 if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
222 RETVAL = newSVpvn((char *) out, outlen);
223 }
224 OUTPUT:
225 RETVAL
2525 CODE:
2626 Safefree(self);
2727
28 int
29 _get_dir(Crypt::Mode::CBC self)
30 CODE:
31 RETVAL = self->direction;
32 OUTPUT:
33 RETVAL
34
3528 void
36 _start(Crypt::Mode::CBC self, int dir, SV * key, SV * iv)
37 CODE:
29 _start(Crypt::Mode::CBC self, SV * key, SV * iv)
30 ALIAS:
31 start_encrypt = 1
32 start_decrypt = 2
33 PPCODE:
3834 {
3935 int rv;
4036 STRLEN k_len=0;
5551 croak("FATAL: cbc_start failed: %s", error_to_string(rv));
5652 }
5753
58 self->direction = dir;
54 self->direction = ix == 1 ? 1 : -1;
5955 self->padlen = 0;
56 XPUSHs(ST(0)); /* return self */
6057 }
6158
6259 SV *
63 _encrypt(Crypt::Mode::CBC self, SV * data)
64 CODE:
65 {
66 int rv, has_tmp_block, blen;
67 unsigned long i;
68
69 STRLEN in_data_len, in_data_start;
70 unsigned char *in_data, *out_data, tmp_block[MAXBLOCKSIZE];
71
72 if (self->direction != 1) croak("FATAL: encrypt error, call start_encrypt first (%d)", self->direction);
73
74 blen = (&self->state)->blocklen;
75 in_data_start = 0;
76 has_tmp_block = 0;
77 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
78 if (in_data_len == 0) {
79 RETVAL = newSVpvn("", 0);
80 }
81 else {
82 if (self->padlen > 0) {
83 i = (blen - self->padlen);
84 if (in_data_len >= i) { /* enough data to fill pad */
85 Copy(in_data, self->pad+self->padlen, i, unsigned char);
86 in_data_len -= i;
87 in_data_start = i;
88 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
89 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
90 self->padlen = 0;
91 has_tmp_block = 1;
92 }
93 else { /* not enough data to fill pad */
94 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
95 self->padlen += (int)in_data_len;
96 in_data_len = 0;
97 }
98 } /* padlen > 0 */
99
100 i = (unsigned long)(in_data_len % blen);
101 if (in_data_len>0 && i>0) { /* save tail of data into pad */
102 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
103 self->padlen = i;
104 in_data_len -= i;
105 }
106
107 if (in_data_len > 0) {
108 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
109 RETVAL = NEWSV(0, i);
110 SvPOK_only(RETVAL);
111 SvCUR_set(RETVAL, i);
112 out_data = (unsigned char *)SvPVX(RETVAL);
113 if (has_tmp_block) {
114 Copy(tmp_block, out_data, blen, unsigned char);
115 out_data += blen;
116 }
117 rv = cbc_encrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
118 if (rv != CRYPT_OK) {
119 SvREFCNT_dec(RETVAL);
120 croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
121 }
122 } /* in_data_len>0 */
123 else if (has_tmp_block) {
124 RETVAL = newSVpvn((char*)tmp_block, blen);
125 }
126 else {
127 RETVAL = newSVpvn("", 0);
128 }
129 }
130 }
131 OUTPUT:
132 RETVAL
133
134 SV *
135 _finish_enc(Crypt::Mode::CBC self)
136 CODE:
137 {
138 unsigned char tmp_block[MAXBLOCKSIZE];
139 int rv, blen, i, j;
140
141 blen = (&self->state)->blocklen;
142 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
143
144 if (self->padding_mode == 1) { /* pkcs5|7 padding */
145 i = blen - self->padlen;
146 if (i == 0) i = blen;
147 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
148 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
149 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
150 }
151 else if (self->padding_mode == 2) { /* oneandzeroes padding */
152 self->pad[self->padlen] = 0x80;
153 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
154 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
155 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
156 }
157 else {
158 if (self->padlen>0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", blen);
159 blen = 0;
160 }
161
162 self->direction = 0;
163 RETVAL = newSVpvn((char*)tmp_block, blen);
164 }
165 OUTPUT:
166 RETVAL
167
168 SV *
169 _decrypt(Crypt::Mode::CBC self, SV * data)
60 _crypt(Crypt::Mode::CBC self, SV * data)
17061 CODE:
17162 {
17263 int rv, has_tmp_block, blen;
17465 STRLEN in_data_len, in_data_start;
17566 unsigned char *in_data, *out_data, tmp_block[MAXBLOCKSIZE];
17667
177 if (self->direction != -1) croak("FATAL: decrypt error, call start_decryt first (%d)", self->direction);
178
179 blen = (&self->state)->blocklen;
180 in_data_start = 0;
181 has_tmp_block = 0;
182 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
183 if (in_data_len == 0) {
184 RETVAL = newSVpvn("", 0);
185 }
186 else {
187
188 if (self->padlen == blen) {
189 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
190 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
191 self->padlen = 0;
192 has_tmp_block = 1;
193 } /* padlen == blen */
194 else if (self->padlen > 0) {
195 i = (blen - self->padlen); /* remaining bytes in padding buffer */
196 if (in_data_len >= i) { /* enough data to fill pad */
197 Copy(in_data, self->pad+self->padlen, i, unsigned char);
198 self->padlen += i;
199 in_data_len -= i;
200 in_data_start = i;
201 if (in_data_len>0 || self->padding_mode == 0) {
202 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
203 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
68 if (self->direction == 1) {
69 blen = (&self->state)->blocklen;
70 in_data_start = 0;
71 has_tmp_block = 0;
72 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
73 if (in_data_len == 0) {
74 RETVAL = newSVpvn("", 0);
75 }
76 else {
77 if (self->padlen > 0) {
78 i = (blen - self->padlen);
79 if (in_data_len >= i) { /* enough data to fill pad */
80 Copy(in_data, self->pad+self->padlen, i, unsigned char);
81 in_data_len -= i;
82 in_data_start = i;
83 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
84 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
20485 self->padlen = 0;
20586 has_tmp_block = 1;
20687 }
207 }
208 else { /* not enough data to fill pad */
209 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
210 self->padlen += (int)in_data_len;
211 in_data_len = 0;
212 }
213 } /* padlen > 0 */
214
215 /* here: a/ padlen == 1..16 && in_data_len == 0; b/ padlen == 0 && in_data_len > 0 */
216 if (in_data_len>0) {
88 else { /* not enough data to fill pad */
89 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
90 self->padlen += (int)in_data_len;
91 in_data_len = 0;
92 }
93 } /* padlen > 0 */
94
21795 i = (unsigned long)(in_data_len % blen);
218 if (i>0) { /* save tail of data into pad */
96 if (in_data_len>0 && i>0) { /* save tail of data into pad */
21997 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
22098 self->padlen = i;
22199 in_data_len -= i;
222100 }
223 }
224
225 if (in_data_len>0) {
226 if (self->padlen == 0 && self->padding_mode !=0) {
227 /* in case of padding keep full pad if no more data */
228 Copy(in_data+in_data_start+in_data_len-blen, self->pad, blen, unsigned char);
229 self->padlen = blen;
230 in_data_len -= blen;
231 }
232 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
233 if (i == 0) {
234 RETVAL = newSVpvn("", 0);
235 }
236 else {
101
102 if (in_data_len > 0) {
103 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
237104 RETVAL = NEWSV(0, i);
238105 SvPOK_only(RETVAL);
239106 SvCUR_set(RETVAL, i);
242109 Copy(tmp_block, out_data, blen, unsigned char);
243110 out_data += blen;
244111 }
245 rv = cbc_decrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
112 rv = cbc_encrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
246113 if (rv != CRYPT_OK) {
247114 SvREFCNT_dec(RETVAL);
248 croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
249 }
250 }
251 } /* in_data_len>0 */
252 else if (has_tmp_block) {
253 RETVAL = newSVpvn((char*)tmp_block, blen);
254 }
255 else {
115 croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
116 }
117 } /* in_data_len>0 */
118 else if (has_tmp_block) {
119 RETVAL = newSVpvn((char*)tmp_block, blen);
120 }
121 else {
122 RETVAL = newSVpvn("", 0);
123 }
124 }
125 }
126 else if (self->direction == -1) {
127 blen = (&self->state)->blocklen;
128 in_data_start = 0;
129 has_tmp_block = 0;
130 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
131 if (in_data_len == 0) {
256132 RETVAL = newSVpvn("", 0);
257133 }
258 }
259
134 else {
135
136 if (self->padlen == blen) {
137 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
138 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
139 self->padlen = 0;
140 has_tmp_block = 1;
141 } /* padlen == blen */
142 else if (self->padlen > 0) {
143 i = (blen - self->padlen); /* remaining bytes in padding buffer */
144 if (in_data_len >= i) { /* enough data to fill pad */
145 Copy(in_data, self->pad+self->padlen, i, unsigned char);
146 self->padlen += i;
147 in_data_len -= i;
148 in_data_start = i;
149 if (in_data_len>0 || self->padding_mode == 0) {
150 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
151 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
152 self->padlen = 0;
153 has_tmp_block = 1;
154 }
155 }
156 else { /* not enough data to fill pad */
157 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
158 self->padlen += (int)in_data_len;
159 in_data_len = 0;
160 }
161 } /* padlen > 0 */
162
163 /* here: a/ padlen == 1..16 && in_data_len == 0; b/ padlen == 0 && in_data_len > 0 */
164 if (in_data_len>0) {
165 i = (unsigned long)(in_data_len % blen);
166 if (i>0) { /* save tail of data into pad */
167 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
168 self->padlen = i;
169 in_data_len -= i;
170 }
171 }
172
173 if (in_data_len>0) {
174 if (self->padlen == 0 && self->padding_mode !=0) {
175 /* in case of padding keep full pad if no more data */
176 Copy(in_data+in_data_start+in_data_len-blen, self->pad, blen, unsigned char);
177 self->padlen = blen;
178 in_data_len -= blen;
179 }
180 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
181 if (i == 0) {
182 RETVAL = newSVpvn("", 0);
183 }
184 else {
185 RETVAL = NEWSV(0, i);
186 SvPOK_only(RETVAL);
187 SvCUR_set(RETVAL, i);
188 out_data = (unsigned char *)SvPVX(RETVAL);
189 if (has_tmp_block) {
190 Copy(tmp_block, out_data, blen, unsigned char);
191 out_data += blen;
192 }
193 rv = cbc_decrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
194 if (rv != CRYPT_OK) {
195 SvREFCNT_dec(RETVAL);
196 croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
197 }
198 }
199 } /* in_data_len>0 */
200 else if (has_tmp_block) {
201 RETVAL = newSVpvn((char*)tmp_block, blen);
202 }
203 else {
204 RETVAL = newSVpvn("", 0);
205 }
206 }
207 }
208 else {
209 croak("FATAL: call start_decryt or start_encrpyt first (%d)", self->direction);
210 }
260211 }
261212 OUTPUT:
262213 RETVAL
263214
264215 SV *
265 _finish_dec(Crypt::Mode::CBC self)
266 CODE:
267 {
268 unsigned char tmp_block[MAXBLOCKSIZE];
269 unsigned char i;
270 int rv, rv_len, blen;
271
272 rv_len = 0;
273 if (self->padlen > 0) {
274 blen = (&self->state)->blocklen;
275 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
276 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
277 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
278 if (self->padding_mode == 0) { /* no padding */
279 rv_len = blen;
280 }
281 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
282 i = tmp_block[blen-1];
283 rv_len = blen - (i>blen ? blen : i);
284 }
285 else if (self->padding_mode == 2) { /* oneandzeroes padding */
286 rv_len = blen;
287 while ((unsigned char)tmp_block[rv_len-1] == 0x00) rv_len--;
288 if ((unsigned char)tmp_block[rv_len-1] == 0x80) rv_len--;
289 if (rv_len<0) rv_len = 0;
290 }
216 finish(Crypt::Mode::CBC self)
217 CODE:
218 {
219 unsigned char tmp_block[MAXBLOCKSIZE], ch;
220 int i, j, rv, blen = (&self->state)->blocklen;
221
222 if (self->direction == 1) {
223 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
224 if (self->padding_mode == 1) { /* pkcs5|7 padding */
225 i = blen - self->padlen;
226 if (i == 0) i = blen;
227 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
228 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
229 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
230 }
231 else if (self->padding_mode == 2) { /* oneandzeroes padding */
232 self->pad[self->padlen] = 0x80;
233 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
234 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
235 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
236 }
237 else {
238 if (self->padlen>0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", blen);
239 blen = 0;
240 }
241 }
242 else if (self->direction == -1) {
243 if (self->padlen > 0) {
244 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
245 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
246 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
247 if (self->padding_mode == 0) { /* no padding */
248 /* we already have blen */
249 }
250 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
251 ch = tmp_block[blen-1];
252 blen = blen - (ch > blen ? blen : ch);
253 }
254 else if (self->padding_mode == 2) { /* oneandzeroes padding */
255 while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--;
256 if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--;
257 if (blen < 0) blen = 0;
258 }
259 }
260 else {
261 blen = 0;
262 }
263 }
264 else {
265 XSRETURN_UNDEF;
291266 }
292267
293268 self->direction = 0;
294 RETVAL = newSVpvn((char*)tmp_block, rv_len);
269 RETVAL = newSVpvn((char*)tmp_block, blen);
295270 }
296271 OUTPUT:
297272 RETVAL
2323 CODE:
2424 Safefree(self);
2525
26 int
27 _get_dir(Crypt::Mode::CFB self)
28 CODE:
29 RETVAL = self->direction;
30 OUTPUT:
31 RETVAL
32
3326 void
34 _start(Crypt::Mode::CFB self, int dir, SV * key, SV * iv)
35 CODE:
27 _start(Crypt::Mode::CFB self, SV * key, SV * iv)
28 ALIAS:
29 start_encrypt = 1
30 start_decrypt = 2
31 PPCODE:
3632 {
3733 STRLEN k_len=0;
3834 unsigned char *k=NULL;
5450 croak("FATAL: cfb_start failed: %s", error_to_string(rv));
5551 }
5652
57 self->direction = dir;
53 self->direction = ix == 1 ? 1 : -1;
54 XPUSHs(ST(0)); /* return self */
5855 }
5956
6057 SV *
9996 RETVAL
10097
10198 SV *
102 _finish(Crypt::Mode::CFB self)
99 finish(Crypt::Mode::CFB self)
103100 CODE:
104101 self->direction = 0;
105102 RETVAL = newSVpvn("", 0);
2828 CODE:
2929 Safefree(self);
3030
31 int
32 _get_dir(Crypt::Mode::CTR self)
33 CODE:
34 RETVAL = self->direction;
35 OUTPUT:
36 RETVAL
37
3831 void
39 _start(Crypt::Mode::CTR self, int dir, SV * key, SV * iv)
40 CODE:
32 _start(Crypt::Mode::CTR self, SV * key, SV * iv)
33 ALIAS:
34 start_encrypt = 1
35 start_decrypt = 2
36 PPCODE:
4137 {
4238 STRLEN k_len=0;
4339 unsigned char *k=NULL;
5955 croak("FATAL: ctr_start failed: %s", error_to_string(rv));
6056 }
6157
62 self->direction = dir;
58 self->direction = ix == 1 ? 1 : -1;
59 XPUSHs(ST(0)); /* return self */
6360 }
6461
6562 SV *
104101 RETVAL
105102
106103 SV *
107 _finish(Crypt::Mode::CTR self)
104 finish(Crypt::Mode::CTR self)
108105 CODE:
109106 self->direction = 0;
110107 RETVAL = newSVpvn("", 0);
2525 CODE:
2626 Safefree(self);
2727
28 int
29 _get_dir(Crypt::Mode::ECB self)
30 CODE:
31 RETVAL = self->direction;
32 OUTPUT:
33 RETVAL
34
3528 void
36 _start(Crypt::Mode::ECB self, int dir, SV * key)
37 CODE:
29 _start(Crypt::Mode::ECB self, SV * key)
30 ALIAS:
31 start_encrypt = 1
32 start_decrypt = 2
33 PPCODE:
3834 {
3935 int rv;
4036 STRLEN k_len=0;
4844 croak("FATAL: ecb_start failed: %s", error_to_string(rv));
4945 }
5046
51 self->direction = dir;
47 self->direction = ix == 1 ? 1 : -1;
5248 self->padlen = 0;
49 XPUSHs(ST(0)); /* return self */
5350 }
5451
5552 SV *
56 _encrypt(Crypt::Mode::ECB self, SV * data)
57 CODE:
58 {
59 int rv, has_tmp_block, blen;
60 unsigned long i;
61
62 STRLEN in_data_len, in_data_start;
63 unsigned char *in_data, *out_data, tmp_block[MAXBLOCKSIZE];
64
65 if (self->direction != 1) croak("FATAL: encrypt error, call start_encrypt first (%d)", self->direction);
66
67 blen = (&self->state)->blocklen;
68 in_data_start = 0;
69 has_tmp_block = 0;
70 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
71 if (in_data_len == 0) {
72 RETVAL = newSVpvn("", 0);
73 }
74 else {
75 if (self->padlen > 0) {
76 i = (blen - self->padlen);
77 if (in_data_len >= i) { /* enough data to fill pad */
78 Copy(in_data, self->pad+self->padlen, i, unsigned char);
79 in_data_len -= i;
80 in_data_start = i;
81 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
82 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
83 self->padlen = 0;
84 has_tmp_block = 1;
85 }
86 else { /* not enough data to fill pad */
87 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
88 self->padlen += (int)in_data_len;
89 in_data_len = 0;
90 }
91 } /* padlen > 0 */
92
93 i = (unsigned long)(in_data_len % blen);
94 if (in_data_len>0 && i>0) { /* save tail of data into pad */
95 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
96 self->padlen = i;
97 in_data_len -= i;
98 }
99
100 if (in_data_len > 0) {
101 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
102 RETVAL = NEWSV(0, i);
103 SvPOK_only(RETVAL);
104 SvCUR_set(RETVAL, i);
105 out_data = (unsigned char *)SvPVX(RETVAL);
106 if (has_tmp_block) {
107 Copy(tmp_block, out_data, blen, unsigned char);
108 out_data += blen;
109 }
110 rv = ecb_encrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
111 if (rv != CRYPT_OK) {
112 SvREFCNT_dec(RETVAL);
113 croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
114 }
115 } /* in_data_len>0 */
116 else if (has_tmp_block) {
117 RETVAL = newSVpvn((char*)tmp_block, blen);
118 }
119 else {
120 RETVAL = newSVpvn("", 0);
121 }
122 }
123 }
124 OUTPUT:
125 RETVAL
126
127 SV *
128 _finish_enc(Crypt::Mode::ECB self)
129 CODE:
130 {
131 unsigned char tmp_block[MAXBLOCKSIZE];
132 int rv, blen, i, j;
133
134 blen = (&self->state)->blocklen;
135 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
136
137 if (self->padding_mode == 1) { /* pkcs5|7 padding */
138 i = blen - self->padlen;
139 if (i == 0) i = blen;
140 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
141 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
142 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
143 }
144 else if (self->padding_mode == 2) { /* oneandzeroes padding */
145 self->pad[self->padlen] = 0x80;
146 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
147 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
148 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
149 }
150 else {
151 if (self->padlen>0) croak("FATAL: ecb_encrypt, input data length not multiple of %d", blen);
152 blen = 0;
153 }
154
155 self->direction = 0;
156 RETVAL = newSVpvn((char*)tmp_block, blen);
157 }
158 OUTPUT:
159 RETVAL
160
161 SV *
162 _decrypt(Crypt::Mode::ECB self, SV * data)
53 _crypt(Crypt::Mode::ECB self, SV * data)
16354 CODE:
16455 {
16556 int rv, has_tmp_block, blen;
16758 STRLEN in_data_len, in_data_start;
16859 unsigned char *in_data, *out_data, tmp_block[MAXBLOCKSIZE];
16960
170 if (self->direction != -1) croak("FATAL: decrypt error, call start_decryt first (%d)", self->direction);
171
172 blen = (&self->state)->blocklen;
173 in_data_start = 0;
174 has_tmp_block = 0;
175 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
176 if (in_data_len == 0) {
177 RETVAL = newSVpvn("", 0);
178 }
179 else {
180
181 if (self->padlen == blen) {
182 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
183 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
184 self->padlen = 0;
185 has_tmp_block = 1;
186 } /* padlen == blen */
187 else if (self->padlen > 0) {
188 i = (blen - self->padlen); /* remaining bytes in padding buffer */
189 if (in_data_len >= i) { /* enough data to fill pad */
190 Copy(in_data, self->pad+self->padlen, i, unsigned char);
191 self->padlen += i;
192 in_data_len -= i;
193 in_data_start = i;
194 if (in_data_len>0 || self->padding_mode == 0) {
195 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
196 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
61 if (self->direction == 1) {
62 blen = (&self->state)->blocklen;
63 in_data_start = 0;
64 has_tmp_block = 0;
65 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
66 if (in_data_len == 0) {
67 RETVAL = newSVpvn("", 0);
68 }
69 else {
70 if (self->padlen > 0) {
71 i = (blen - self->padlen);
72 if (in_data_len >= i) { /* enough data to fill pad */
73 Copy(in_data, self->pad+self->padlen, i, unsigned char);
74 in_data_len -= i;
75 in_data_start = i;
76 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
77 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
19778 self->padlen = 0;
19879 has_tmp_block = 1;
19980 }
200 }
201 else { /* not enough data to fill pad */
202 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
203 self->padlen += (int)in_data_len;
204 in_data_len = 0;
205 }
206 } /* padlen > 0 */
207
208 /* here: a/ padlen == 1..16 && in_data_len == 0; b/ padlen == 0 && in_data_len > 0 */
209 if (in_data_len>0) {
81 else { /* not enough data to fill pad */
82 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
83 self->padlen += (int)in_data_len;
84 in_data_len = 0;
85 }
86 } /* padlen > 0 */
87
21088 i = (unsigned long)(in_data_len % blen);
211 if (i>0) { /* save tail of data into pad */
89 if (in_data_len>0 && i>0) { /* save tail of data into pad */
21290 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
21391 self->padlen = i;
21492 in_data_len -= i;
21593 }
216 }
217
218 if (in_data_len>0) {
219 if (self->padlen == 0 && self->padding_mode !=0) {
220 /* in case of padding keep full pad if no more data */
221 Copy(in_data+in_data_start+in_data_len-blen, self->pad, blen, unsigned char);
222 self->padlen = blen;
223 in_data_len -= blen;
224 }
225 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
226 if (i == 0) {
227 RETVAL = newSVpvn("", 0);
228 }
229 else {
94
95 if (in_data_len > 0) {
96 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
23097 RETVAL = NEWSV(0, i);
23198 SvPOK_only(RETVAL);
23299 SvCUR_set(RETVAL, i);
235102 Copy(tmp_block, out_data, blen, unsigned char);
236103 out_data += blen;
237104 }
238 rv = ecb_decrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
105 rv = ecb_encrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
239106 if (rv != CRYPT_OK) {
240107 SvREFCNT_dec(RETVAL);
241 croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
242 }
243 }
244 } /* in_data_len>0 */
245 else if (has_tmp_block) {
246 RETVAL = newSVpvn((char*)tmp_block, blen);
247 }
248 else {
108 croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
109 }
110 } /* in_data_len>0 */
111 else if (has_tmp_block) {
112 RETVAL = newSVpvn((char*)tmp_block, blen);
113 }
114 else {
115 RETVAL = newSVpvn("", 0);
116 }
117 }
118 }
119 else if (self->direction == -1) {
120 blen = (&self->state)->blocklen;
121 in_data_start = 0;
122 has_tmp_block = 0;
123 in_data = (unsigned char *)SvPVbyte(data, in_data_len);
124 if (in_data_len == 0) {
249125 RETVAL = newSVpvn("", 0);
250126 }
251 }
252
127 else {
128
129 if (self->padlen == blen) {
130 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
131 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
132 self->padlen = 0;
133 has_tmp_block = 1;
134 } /* padlen == blen */
135 else if (self->padlen > 0) {
136 i = (blen - self->padlen); /* remaining bytes in padding buffer */
137 if (in_data_len >= i) { /* enough data to fill pad */
138 Copy(in_data, self->pad+self->padlen, i, unsigned char);
139 self->padlen += i;
140 in_data_len -= i;
141 in_data_start = i;
142 if (in_data_len>0 || self->padding_mode == 0) {
143 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
144 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
145 self->padlen = 0;
146 has_tmp_block = 1;
147 }
148 }
149 else { /* not enough data to fill pad */
150 Copy(in_data, self->pad+self->padlen, in_data_len, unsigned char);
151 self->padlen += (int)in_data_len;
152 in_data_len = 0;
153 }
154 } /* padlen > 0 */
155
156 /* here: a/ padlen == 1..16 && in_data_len == 0; b/ padlen == 0 && in_data_len > 0 */
157 if (in_data_len>0) {
158 i = (unsigned long)(in_data_len % blen);
159 if (i>0) { /* save tail of data into pad */
160 Copy(in_data+in_data_start+in_data_len-i, self->pad, i, unsigned char);
161 self->padlen = i;
162 in_data_len -= i;
163 }
164 }
165
166 if (in_data_len>0) {
167 if (self->padlen == 0 && self->padding_mode !=0) {
168 /* in case of padding keep full pad if no more data */
169 Copy(in_data+in_data_start+in_data_len-blen, self->pad, blen, unsigned char);
170 self->padlen = blen;
171 in_data_len -= blen;
172 }
173 i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len);
174 if (i == 0) {
175 RETVAL = newSVpvn("", 0);
176 }
177 else {
178 RETVAL = NEWSV(0, i);
179 SvPOK_only(RETVAL);
180 SvCUR_set(RETVAL, i);
181 out_data = (unsigned char *)SvPVX(RETVAL);
182 if (has_tmp_block) {
183 Copy(tmp_block, out_data, blen, unsigned char);
184 out_data += blen;
185 }
186 rv = ecb_decrypt(in_data+in_data_start, out_data, (unsigned long)in_data_len, &self->state);
187 if (rv != CRYPT_OK) {
188 SvREFCNT_dec(RETVAL);
189 croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
190 }
191 }
192 } /* in_data_len>0 */
193 else if (has_tmp_block) {
194 RETVAL = newSVpvn((char*)tmp_block, blen);
195 }
196 else {
197 RETVAL = newSVpvn("", 0);
198 }
199 }
200 }
201 else {
202 croak("FATAL: call start_decryt or start_encrpyt first (%d)", self->direction);
203 }
253204 }
254205 OUTPUT:
255206 RETVAL
256207
257208 SV *
258 _finish_dec(Crypt::Mode::ECB self)
259 CODE:
260 {
261 unsigned char tmp_block[MAXBLOCKSIZE];
262 unsigned char i;
263 int rv, rv_len, blen;
264
265 rv_len = 0;
266 if (self->padlen > 0) {
267 blen = (&self->state)->blocklen;
268 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
269 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
270 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
271 if (self->padding_mode == 0) { /* no padding */
272 rv_len = blen;
273 }
274 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
275 i = tmp_block[blen-1];
276 rv_len = blen - (i>blen ? blen : i);
277 }
278 else if (self->padding_mode == 2) { /* oneandzeroes padding */
279 rv_len = blen;
280 while ((unsigned char)tmp_block[rv_len-1] == 0x00) rv_len--;
281 if ((unsigned char)tmp_block[rv_len-1] == 0x80) rv_len--;
282 if (rv_len<0) rv_len = 0;
283 }
209 finish(Crypt::Mode::ECB self)
210 CODE:
211 {
212 unsigned char tmp_block[MAXBLOCKSIZE], ch;
213 int i, j, rv, blen = (&self->state)->blocklen;
214
215 if (self->direction == 1) {
216 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
217 if (self->padding_mode == 1) { /* pkcs5|7 padding */
218 i = blen - self->padlen;
219 if (i == 0) i = blen;
220 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
221 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
222 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
223 }
224 else if (self->padding_mode == 2) { /* oneandzeroes padding */
225 self->pad[self->padlen] = 0x80;
226 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
227 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
228 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
229 }
230 else {
231 if (self->padlen>0) croak("FATAL: ecb_encrypt, input data length not multiple of %d", blen);
232 blen = 0;
233 }
234 }
235 else if (self->direction == -1) {
236 if (self->padlen > 0) {
237 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
238 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
239 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
240 if (self->padding_mode == 0) { /* no padding */
241 /* we already have blen */
242 }
243 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
244 ch = tmp_block[blen-1];
245 blen = blen - (ch > blen ? blen : ch);
246 }
247 else if (self->padding_mode == 2) { /* oneandzeroes padding */
248 while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--;
249 if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--;
250 if (blen < 0) blen = 0;
251 }
252 }
253 else {
254 blen = 0;
255 }
256 }
257 else {
258 XSRETURN_UNDEF;
284259 }
285260
286261 self->direction = 0;
287 RETVAL = newSVpvn((char*)tmp_block, rv_len);
262 RETVAL = newSVpvn((char*)tmp_block, blen);
288263 }
289264 OUTPUT:
290265 RETVAL
2323 CODE:
2424 Safefree(self);
2525
26 int
27 _get_dir(Crypt::Mode::OFB self)
28 CODE:
29 RETVAL = self->direction;
30 OUTPUT:
31 RETVAL
32
3326 void
34 _start(Crypt::Mode::OFB self, int dir, SV * key, SV * iv)
35 CODE:
27 _start(Crypt::Mode::OFB self, SV * key, SV * iv)
28 ALIAS:
29 start_encrypt = 1
30 start_decrypt = 2
31 PPCODE:
3632 {
3733 STRLEN k_len=0;
3834 unsigned char *k=NULL;
5450 croak("FATAL: ofb_start failed: %s", error_to_string(rv));
5551 }
5652
57 self->direction = dir;
53 self->direction = ix == 1 ? 1 : -1;
54 XPUSHs(ST(0)); /* return self */
5855 }
5956
6057 SV *
9996 RETVAL
10097
10198 SV *
102 _finish(Crypt::Mode::OFB self)
99 finish(Crypt::Mode::OFB self)
103100 CODE:
104101 self->direction = 0;
105102 RETVAL = newSVpvn("", 0);
9595
9696 SV *
9797 bytes(Crypt::PRNG self, STRLEN output_len)
98 CODE:
99 {
100 IV curpid = (IV)PerlProc_getpid();
101 int rv_len;
102 unsigned char *rdata;
98 ALIAS:
99 bytes_hex = 1
100 bytes_b64 = 2
101 bytes_b64u = 3
102 CODE:
103 {
104 IV curpid = (IV)PerlProc_getpid();
105 int rv_len, rv;
106 unsigned long len;
107 unsigned char *rdata, *tmp;
103108 unsigned char entropy_buf[40];
104109
105110 if (self->last_pid != curpid) {
108113 self->desc->ready(&self->state);
109114 self->last_pid = curpid;
110115 }
111
112 RETVAL = NEWSV(0, output_len);
113 SvPOK_only(RETVAL);
114 SvCUR_set(RETVAL, output_len);
115 rdata = (unsigned char *)SvPVX(RETVAL);
116 rv_len = (self->desc->read)(rdata, (unsigned long)output_len, &self->state);
117 if ((UV)rv_len != output_len) {
118 SvREFCNT_dec(RETVAL);
119 croak("FATAL: PRNG_read failed");
120 }
121 }
122 OUTPUT:
123 RETVAL
124
125 SV *
126 bytes_hex(Crypt::PRNG self, STRLEN output_len)
127 CODE:
128 {
129 IV curpid = (IV)PerlProc_getpid();
130 int rv_len, rv;
131 unsigned long len;
132 unsigned char *rdata, *tmp;
116
117 if (ix == 1) {
118 /* HEX */
119 Newz(0, tmp, output_len, unsigned char);
120 if (tmp == NULL) croak("FATAL: Newz failed");
121 rv_len = (self->desc->read)(tmp, (unsigned long)output_len, &self->state);
122 if ((UV)rv_len != output_len) croak("FATAL: PRNG_read failed");
123 RETVAL = NEWSV(0, output_len * 2);
124 SvPOK_only(RETVAL);
125 SvCUR_set(RETVAL, output_len * 2);
126 rdata = (unsigned char *)SvPVX(RETVAL);
127 len = output_len * 2;
128 rv = _base16_encode(tmp, output_len, rdata, &len);
129 Safefree(tmp);
130 if (rv != CRYPT_OK) {
131 SvREFCNT_dec(RETVAL);
132 croak("FATAL: base16_encode failed");
133 }
134 }
135 else if (ix == 2 || ix == 3) {
136 /* BASE64 or BASE64URL */
137 Newz(0, tmp, output_len, unsigned char);
138 if (tmp == NULL) croak("FATAL: Newz failed");
139 rv_len = (self->desc->read)(tmp, (unsigned long)output_len, &self->state);
140 if ((UV)rv_len != output_len) croak("FATAL: PRNG_read failed");
141 RETVAL = NEWSV(0, output_len * 2);
142 SvPOK_only(RETVAL);
143 SvCUR_set(RETVAL, output_len * 2);
144 rdata = (unsigned char *)SvPVX(RETVAL);
145 len = output_len * 2;
146 rv = ix == 3 ? base64url_encode(tmp, output_len, rdata, &len) :
147 base64_encode(tmp, output_len, rdata, &len);
148 SvCUR_set(RETVAL, len);
149 Safefree(tmp);
150 if (rv != CRYPT_OK) {
151 SvREFCNT_dec(RETVAL);
152 croak(ix == 3 ? "FATAL: base64url_encode failed" : "FATAL: base64_encode failed");
153 }
154 }
155 else {
156 /* RAW BYTES */
157 RETVAL = NEWSV(0, output_len);
158 SvPOK_only(RETVAL);
159 SvCUR_set(RETVAL, output_len);
160 rdata = (unsigned char *)SvPVX(RETVAL);
161 rv_len = (self->desc->read)(rdata, (unsigned long)output_len, &self->state);
162 if ((UV)rv_len != output_len) {
163 SvREFCNT_dec(RETVAL);
164 croak("FATAL: PRNG_read failed");
165 }
166 }
167 }
168 OUTPUT:
169 RETVAL
170
171 UV
172 int32(Crypt::PRNG self)
173 CODE:
174 {
175 IV curpid = (IV)PerlProc_getpid();
176 int i;
177 unsigned char rdata[4];
133178 unsigned char entropy_buf[40];
134179
135180 if (self->last_pid != curpid) {
139184 self->last_pid = curpid;
140185 }
141186
142 Newz(0, tmp, output_len, unsigned char);
143 if (tmp == NULL) croak("FATAL: Newz failed");
144 rv_len = (self->desc->read)(tmp, (unsigned long)output_len, &self->state);
145 if ((UV)rv_len != output_len) croak("FATAL: PRNG_read failed");
146 RETVAL = NEWSV(0, output_len * 2);
147 SvPOK_only(RETVAL);
148 SvCUR_set(RETVAL, output_len * 2);
149 rdata = (unsigned char *)SvPVX(RETVAL);
150 len = output_len * 2;
151 rv = _base16_encode(tmp, output_len, rdata, &len);
152 Safefree(tmp);
153 if (rv != CRYPT_OK) {
154 SvREFCNT_dec(RETVAL);
155 croak("FATAL: base16_encode failed");
156 }
157 }
158 OUTPUT:
159 RETVAL
160
161 SV *
162 bytes_b64(Crypt::PRNG self, STRLEN output_len)
163 CODE:
164 {
165 IV curpid = (IV)PerlProc_getpid();
166 int rv_len, rv;
167 unsigned long len;
168 unsigned char *rdata, *tmp;
169 unsigned char entropy_buf[40];
170
171 if (self->last_pid != curpid) {
172 if (rng_get_bytes(entropy_buf, 40, NULL) != 40) croak("FATAL: rng_get_bytes failed");
173 self->desc->add_entropy(entropy_buf, 40, &self->state);
174 self->desc->ready(&self->state);
175 self->last_pid = curpid;
176 }
177
178 Newz(0, tmp, output_len, unsigned char);
179 if (tmp == NULL) croak("FATAL: Newz failed");
180 rv_len = (self->desc->read)(tmp, (unsigned long)output_len, &self->state);
181 if ((UV)rv_len != output_len) croak("FATAL: PRNG_read failed");
182 RETVAL = NEWSV(0, output_len * 2);
183 SvPOK_only(RETVAL);
184 SvCUR_set(RETVAL, output_len * 2);
185 rdata = (unsigned char *)SvPVX(RETVAL);
186 len = output_len * 2;
187 rv = base64_encode(tmp, output_len, rdata, &len);
188 SvCUR_set(RETVAL, len);
189 Safefree(tmp);
190 if (rv != CRYPT_OK) {
191 SvREFCNT_dec(RETVAL);
192 croak("FATAL: base64_encode failed");
193 }
194 }
195 OUTPUT:
196 RETVAL
197
198 SV *
199 bytes_b64u(Crypt::PRNG self, STRLEN output_len)
200 CODE:
201 {
202 IV curpid = (IV)PerlProc_getpid();
203 int rv_len, rv;
204 unsigned long len;
205 unsigned char *rdata, *tmp;
206 unsigned char entropy_buf[40];
207
208 if (self->last_pid != curpid) {
209 if (rng_get_bytes(entropy_buf, 40, NULL) != 40) croak("FATAL: rng_get_bytes failed");
210 self->desc->add_entropy(entropy_buf, 40, &self->state);
211 self->desc->ready(&self->state);
212 self->last_pid = curpid;
213 }
214
215 Newz(0, tmp, output_len, unsigned char);
216 if (tmp == NULL) croak("FATAL: Newz failed");
217 rv_len = (self->desc->read)(tmp, (unsigned long)output_len, &self->state);
218 if ((UV)rv_len != output_len) croak("FATAL: PRNG_read failed");
219 RETVAL = NEWSV(0, output_len * 2);
220 SvPOK_only(RETVAL);
221 SvCUR_set(RETVAL, output_len * 2);
222 rdata = (unsigned char *)SvPVX(RETVAL);
223 len = output_len * 2;
224 rv = base64url_encode(tmp, output_len, rdata, &len);
225 SvCUR_set(RETVAL, len);
226 Safefree(tmp);
227 if (rv != CRYPT_OK) {
228 SvREFCNT_dec(RETVAL);
229 croak("FATAL: base64url_encode failed");
230 }
231 }
232 OUTPUT:
233 RETVAL
234
235 UV
236 int32(Crypt::PRNG self)
237 CODE:
238 {
239 IV curpid = (IV)PerlProc_getpid();
240 int i;
241 unsigned char rdata[4];
242 unsigned char entropy_buf[40];
243
244 if (self->last_pid != curpid) {
245 if (rng_get_bytes(entropy_buf, 40, NULL) != 40) croak("FATAL: rng_get_bytes failed");
246 self->desc->add_entropy(entropy_buf, 40, &self->state);
247 self->desc->ready(&self->state);
248 self->last_pid = curpid;
249 }
250
251187 i = (self->desc->read)(rdata, 4, &self->state);
252188 if (i != 4) croak("FATAL: PRNG_read failed");
253189 RETVAL = ((UV)(rdata[0])<<24) + ((UV)(rdata[1])<<16) + ((UV)(rdata[2])<<8) + ((UV)(rdata[3]));
256192 RETVAL
257193
258194 NV
259 double(Crypt::PRNG self, ...)
195 double(Crypt::PRNG self, SV * limit_sv = NULL)
260196 CODE:
261197 {
262198 IV curpid = (IV)PerlProc_getpid();
264200 unsigned long a, b; /* 32bit is enough */
265201 unsigned char rdata[7]; /* for double we need 53 bits */
266202 unsigned char entropy_buf[40];
267 NV limit;
268203
269204 if (self->last_pid != curpid) {
270205 if (rng_get_bytes(entropy_buf, 40, NULL) != 40) croak("FATAL: rng_get_bytes failed");
278213 a = (((unsigned long)(rdata[0])<<16) + ((unsigned long)(rdata[1])<<8) + ((unsigned long)(rdata[2]))) & 0x1FFFFF; /* 21 bits */
279214 b = ((unsigned long)(rdata[3])<<24) + ((unsigned long)(rdata[4])<<16) + ((unsigned long)(rdata[5])<<8) + ((unsigned long)(rdata[6])); /* 32 bits */
280215 RETVAL = ( (NV)a * 4294967296.0 + (NV)b ) / 9007199254740992.0; /* (a * 2^32 + b) / 2^53 */
281 if (items > 1 && SvOK(ST(1))) {
282 limit = SvNV(ST(1));
216 if (limit_sv && SvOK(limit_sv)) {
217 NV limit = SvNV(limit_sv);
283218 if (limit > 0 || limit < 0) RETVAL = RETVAL * limit;
284219 }
285220 }
1111 use Carp;
1212 $Carp::Internal{(__PACKAGE__)}++;
1313 use CryptX;
14 use Crypt::Cipher;
1514
1615 sub ccm_encrypt_authenticate {
1716 my $cipher_name = shift;
1111 use Carp;
1212 $Carp::Internal{(__PACKAGE__)}++;
1313 use CryptX;
14 use Crypt::Cipher;
1514
1615 ### the following methods/functions are implemented in XS:
1716 # - new
1111 use Carp;
1212 $Carp::Internal{(__PACKAGE__)}++;
1313 use CryptX;
14 use Crypt::Cipher;
1514
1615 sub gcm_encrypt_authenticate {
1716 my $cipher_name = shift;
1111 use Carp;
1212 $Carp::Internal{(__PACKAGE__)}++;
1313 use CryptX;
14 use Crypt::Cipher;
1514
1615 sub ocb_encrypt_authenticate {
1716 my $cipher_name = shift;
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('AES') }
11 sub keysize { Crypt::Cipher::keysize('AES') }
12 sub max_keysize { Crypt::Cipher::max_keysize('AES') }
13 sub min_keysize { Crypt::Cipher::min_keysize('AES') }
14 sub default_rounds { Crypt::Cipher::default_rounds('AES') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Anubis') }
11 sub keysize { Crypt::Cipher::keysize('Anubis') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Anubis') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Anubis') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Anubis') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Blowfish') }
11 sub keysize { Crypt::Cipher::keysize('Blowfish') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Blowfish') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Blowfish') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Blowfish') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('CAST5') }
11 sub keysize { Crypt::Cipher::keysize('CAST5') }
12 sub max_keysize { Crypt::Cipher::max_keysize('CAST5') }
13 sub min_keysize { Crypt::Cipher::min_keysize('CAST5') }
14 sub default_rounds { Crypt::Cipher::default_rounds('CAST5') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Camellia') }
11 sub keysize { Crypt::Cipher::keysize('Camellia') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Camellia') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Camellia') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Camellia') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('DES') }
11 sub keysize { Crypt::Cipher::keysize('DES') }
12 sub max_keysize { Crypt::Cipher::max_keysize('DES') }
13 sub min_keysize { Crypt::Cipher::min_keysize('DES') }
14 sub default_rounds { Crypt::Cipher::default_rounds('DES') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('DES_EDE') }
11 sub keysize { Crypt::Cipher::keysize('DES_EDE') }
12 sub max_keysize { Crypt::Cipher::max_keysize('DES_EDE') }
13 sub min_keysize { Crypt::Cipher::min_keysize('DES_EDE') }
14 sub default_rounds { Crypt::Cipher::default_rounds('DES_EDE') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('IDEA') }
11 sub keysize { Crypt::Cipher::keysize('IDEA') }
12 sub max_keysize { Crypt::Cipher::max_keysize('IDEA') }
13 sub min_keysize { Crypt::Cipher::min_keysize('IDEA') }
14 sub default_rounds { Crypt::Cipher::default_rounds('IDEA') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('KASUMI') }
11 sub keysize { Crypt::Cipher::keysize('KASUMI') }
12 sub max_keysize { Crypt::Cipher::max_keysize('KASUMI') }
13 sub min_keysize { Crypt::Cipher::min_keysize('KASUMI') }
14 sub default_rounds { Crypt::Cipher::default_rounds('KASUMI') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Khazad') }
11 sub keysize { Crypt::Cipher::keysize('Khazad') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Khazad') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Khazad') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Khazad') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('MULTI2') }
11 sub keysize { Crypt::Cipher::keysize('MULTI2') }
12 sub max_keysize { Crypt::Cipher::max_keysize('MULTI2') }
13 sub min_keysize { Crypt::Cipher::min_keysize('MULTI2') }
14 sub default_rounds { Crypt::Cipher::default_rounds('MULTI2') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Noekeon') }
11 sub keysize { Crypt::Cipher::keysize('Noekeon') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Noekeon') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Noekeon') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Noekeon') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('RC2') }
11 sub keysize { Crypt::Cipher::keysize('RC2') }
12 sub max_keysize { Crypt::Cipher::max_keysize('RC2') }
13 sub min_keysize { Crypt::Cipher::min_keysize('RC2') }
14 sub default_rounds { Crypt::Cipher::default_rounds('RC2') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('RC5') }
11 sub keysize { Crypt::Cipher::keysize('RC5') }
12 sub max_keysize { Crypt::Cipher::max_keysize('RC5') }
13 sub min_keysize { Crypt::Cipher::min_keysize('RC5') }
14 sub default_rounds { Crypt::Cipher::default_rounds('RC5') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('RC6') }
11 sub keysize { Crypt::Cipher::keysize('RC6') }
12 sub max_keysize { Crypt::Cipher::max_keysize('RC6') }
13 sub min_keysize { Crypt::Cipher::min_keysize('RC6') }
14 sub default_rounds { Crypt::Cipher::default_rounds('RC6') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('SAFERP') }
11 sub keysize { Crypt::Cipher::keysize('SAFERP') }
12 sub max_keysize { Crypt::Cipher::max_keysize('SAFERP') }
13 sub min_keysize { Crypt::Cipher::min_keysize('SAFERP') }
14 sub default_rounds { Crypt::Cipher::default_rounds('SAFERP') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('SAFER_K128') }
11 sub keysize { Crypt::Cipher::keysize('SAFER_K128') }
12 sub max_keysize { Crypt::Cipher::max_keysize('SAFER_K128') }
13 sub min_keysize { Crypt::Cipher::min_keysize('SAFER_K128') }
14 sub default_rounds { Crypt::Cipher::default_rounds('SAFER_K128') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('SAFER_K64') }
11 sub keysize { Crypt::Cipher::keysize('SAFER_K64') }
12 sub max_keysize { Crypt::Cipher::max_keysize('SAFER_K64') }
13 sub min_keysize { Crypt::Cipher::min_keysize('SAFER_K64') }
14 sub default_rounds { Crypt::Cipher::default_rounds('SAFER_K64') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('SAFER_SK128') }
11 sub keysize { Crypt::Cipher::keysize('SAFER_SK128') }
12 sub max_keysize { Crypt::Cipher::max_keysize('SAFER_SK128') }
13 sub min_keysize { Crypt::Cipher::min_keysize('SAFER_SK128') }
14 sub default_rounds { Crypt::Cipher::default_rounds('SAFER_SK128') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('SAFER_SK64') }
11 sub keysize { Crypt::Cipher::keysize('SAFER_SK64') }
12 sub max_keysize { Crypt::Cipher::max_keysize('SAFER_SK64') }
13 sub min_keysize { Crypt::Cipher::min_keysize('SAFER_SK64') }
14 sub default_rounds { Crypt::Cipher::default_rounds('SAFER_SK64') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('SEED') }
11 sub keysize { Crypt::Cipher::keysize('SEED') }
12 sub max_keysize { Crypt::Cipher::max_keysize('SEED') }
13 sub min_keysize { Crypt::Cipher::min_keysize('SEED') }
14 sub default_rounds { Crypt::Cipher::default_rounds('SEED') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Serpent') }
11 sub keysize { Crypt::Cipher::keysize('Serpent') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Serpent') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Serpent') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Serpent') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Skipjack') }
11 sub keysize { Crypt::Cipher::keysize('Skipjack') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Skipjack') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Skipjack') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Skipjack') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('Twofish') }
11 sub keysize { Crypt::Cipher::keysize('Twofish') }
12 sub max_keysize { Crypt::Cipher::max_keysize('Twofish') }
13 sub min_keysize { Crypt::Cipher::min_keysize('Twofish') }
14 sub default_rounds { Crypt::Cipher::default_rounds('Twofish') }
1615
1716 1;
1817
55 use warnings;
66 our $VERSION = '0.056_001';
77
8 use CryptX;
9 use base 'Crypt::Cipher';
8 use base qw(Crypt::Cipher);
109
11 sub blocksize { Crypt::Cipher::blocksize(__PACKAGE__) }
12 sub keysize { Crypt::Cipher::keysize(__PACKAGE__) }
13 sub max_keysize { Crypt::Cipher::max_keysize(__PACKAGE__) }
14 sub min_keysize { Crypt::Cipher::min_keysize(__PACKAGE__) }
15 sub default_rounds { Crypt::Cipher::default_rounds(__PACKAGE__) }
10 sub blocksize { Crypt::Cipher::blocksize('XTEA') }
11 sub keysize { Crypt::Cipher::keysize('XTEA') }
12 sub max_keysize { Crypt::Cipher::max_keysize('XTEA') }
13 sub min_keysize { Crypt::Cipher::min_keysize('XTEA') }
14 sub default_rounds { Crypt::Cipher::default_rounds('XTEA') }
1615
1716 1;
1817
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2b_160 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2b_160_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2b_160_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2b_160_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2b_160_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2b_160_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2b_160_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2b_160_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2b_160') }
18 sub blake2b_160 { Crypt::Digest::digest_data('BLAKE2b_160', @_) }
19 sub blake2b_160_hex { Crypt::Digest::digest_data_hex('BLAKE2b_160', @_) }
20 sub blake2b_160_b64 { Crypt::Digest::digest_data_b64('BLAKE2b_160', @_) }
21 sub blake2b_160_b64u { Crypt::Digest::digest_data_b64u('BLAKE2b_160', @_) }
22 sub blake2b_160_file { Crypt::Digest::digest_file('BLAKE2b_160', @_) }
23 sub blake2b_160_file_hex { Crypt::Digest::digest_file_hex('BLAKE2b_160', @_) }
24 sub blake2b_160_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2b_160', @_) }
25 sub blake2b_160_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2b_160', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2b_256 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2b_256_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2b_256_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2b_256_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2b_256_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2b_256_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2b_256_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2b_256_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2b_256') }
18 sub blake2b_256 { Crypt::Digest::digest_data('BLAKE2b_256', @_) }
19 sub blake2b_256_hex { Crypt::Digest::digest_data_hex('BLAKE2b_256', @_) }
20 sub blake2b_256_b64 { Crypt::Digest::digest_data_b64('BLAKE2b_256', @_) }
21 sub blake2b_256_b64u { Crypt::Digest::digest_data_b64u('BLAKE2b_256', @_) }
22 sub blake2b_256_file { Crypt::Digest::digest_file('BLAKE2b_256', @_) }
23 sub blake2b_256_file_hex { Crypt::Digest::digest_file_hex('BLAKE2b_256', @_) }
24 sub blake2b_256_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2b_256', @_) }
25 sub blake2b_256_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2b_256', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2b_384 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2b_384_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2b_384_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2b_384_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2b_384_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2b_384_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2b_384_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2b_384_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2b_384') }
18 sub blake2b_384 { Crypt::Digest::digest_data('BLAKE2b_384', @_) }
19 sub blake2b_384_hex { Crypt::Digest::digest_data_hex('BLAKE2b_384', @_) }
20 sub blake2b_384_b64 { Crypt::Digest::digest_data_b64('BLAKE2b_384', @_) }
21 sub blake2b_384_b64u { Crypt::Digest::digest_data_b64u('BLAKE2b_384', @_) }
22 sub blake2b_384_file { Crypt::Digest::digest_file('BLAKE2b_384', @_) }
23 sub blake2b_384_file_hex { Crypt::Digest::digest_file_hex('BLAKE2b_384', @_) }
24 sub blake2b_384_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2b_384', @_) }
25 sub blake2b_384_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2b_384', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2b_512 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2b_512_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2b_512_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2b_512_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2b_512_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2b_512_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2b_512_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2b_512_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2b_512') }
18 sub blake2b_512 { Crypt::Digest::digest_data('BLAKE2b_512', @_) }
19 sub blake2b_512_hex { Crypt::Digest::digest_data_hex('BLAKE2b_512', @_) }
20 sub blake2b_512_b64 { Crypt::Digest::digest_data_b64('BLAKE2b_512', @_) }
21 sub blake2b_512_b64u { Crypt::Digest::digest_data_b64u('BLAKE2b_512', @_) }
22 sub blake2b_512_file { Crypt::Digest::digest_file('BLAKE2b_512', @_) }
23 sub blake2b_512_file_hex { Crypt::Digest::digest_file_hex('BLAKE2b_512', @_) }
24 sub blake2b_512_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2b_512', @_) }
25 sub blake2b_512_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2b_512', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2s_128 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2s_128_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2s_128_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2s_128_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2s_128_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2s_128_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2s_128_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2s_128_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2s_128') }
18 sub blake2s_128 { Crypt::Digest::digest_data('BLAKE2s_128', @_) }
19 sub blake2s_128_hex { Crypt::Digest::digest_data_hex('BLAKE2s_128', @_) }
20 sub blake2s_128_b64 { Crypt::Digest::digest_data_b64('BLAKE2s_128', @_) }
21 sub blake2s_128_b64u { Crypt::Digest::digest_data_b64u('BLAKE2s_128', @_) }
22 sub blake2s_128_file { Crypt::Digest::digest_file('BLAKE2s_128', @_) }
23 sub blake2s_128_file_hex { Crypt::Digest::digest_file_hex('BLAKE2s_128', @_) }
24 sub blake2s_128_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2s_128', @_) }
25 sub blake2s_128_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2s_128', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2s_160 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2s_160_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2s_160_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2s_160_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2s_160_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2s_160_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2s_160_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2s_160_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2s_160') }
18 sub blake2s_160 { Crypt::Digest::digest_data('BLAKE2s_160', @_) }
19 sub blake2s_160_hex { Crypt::Digest::digest_data_hex('BLAKE2s_160', @_) }
20 sub blake2s_160_b64 { Crypt::Digest::digest_data_b64('BLAKE2s_160', @_) }
21 sub blake2s_160_b64u { Crypt::Digest::digest_data_b64u('BLAKE2s_160', @_) }
22 sub blake2s_160_file { Crypt::Digest::digest_file('BLAKE2s_160', @_) }
23 sub blake2s_160_file_hex { Crypt::Digest::digest_file_hex('BLAKE2s_160', @_) }
24 sub blake2s_160_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2s_160', @_) }
25 sub blake2s_160_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2s_160', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2s_224 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2s_224_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2s_224_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2s_224_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2s_224_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2s_224_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2s_224_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2s_224_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2s_224') }
18 sub blake2s_224 { Crypt::Digest::digest_data('BLAKE2s_224', @_) }
19 sub blake2s_224_hex { Crypt::Digest::digest_data_hex('BLAKE2s_224', @_) }
20 sub blake2s_224_b64 { Crypt::Digest::digest_data_b64('BLAKE2s_224', @_) }
21 sub blake2s_224_b64u { Crypt::Digest::digest_data_b64u('BLAKE2s_224', @_) }
22 sub blake2s_224_file { Crypt::Digest::digest_file('BLAKE2s_224', @_) }
23 sub blake2s_224_file_hex { Crypt::Digest::digest_file_hex('BLAKE2s_224', @_) }
24 sub blake2s_224_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2s_224', @_) }
25 sub blake2s_224_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2s_224', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub blake2s_256 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub blake2s_256_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub blake2s_256_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub blake2s_256_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub blake2s_256_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub blake2s_256_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub blake2s_256_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub blake2s_256_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('BLAKE2s_256') }
18 sub blake2s_256 { Crypt::Digest::digest_data('BLAKE2s_256', @_) }
19 sub blake2s_256_hex { Crypt::Digest::digest_data_hex('BLAKE2s_256', @_) }
20 sub blake2s_256_b64 { Crypt::Digest::digest_data_b64('BLAKE2s_256', @_) }
21 sub blake2s_256_b64u { Crypt::Digest::digest_data_b64u('BLAKE2s_256', @_) }
22 sub blake2s_256_file { Crypt::Digest::digest_file('BLAKE2s_256', @_) }
23 sub blake2s_256_file_hex { Crypt::Digest::digest_file_hex('BLAKE2s_256', @_) }
24 sub blake2s_256_file_b64 { Crypt::Digest::digest_file_b64('BLAKE2s_256', @_) }
25 sub blake2s_256_file_b64u { Crypt::Digest::digest_file_b64u('BLAKE2s_256', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub chaes { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub chaes_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub chaes_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub chaes_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub chaes_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub chaes_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub chaes_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub chaes_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('CHAES') }
18 sub chaes { Crypt::Digest::digest_data('CHAES', @_) }
19 sub chaes_hex { Crypt::Digest::digest_data_hex('CHAES', @_) }
20 sub chaes_b64 { Crypt::Digest::digest_data_b64('CHAES', @_) }
21 sub chaes_b64u { Crypt::Digest::digest_data_b64u('CHAES', @_) }
22 sub chaes_file { Crypt::Digest::digest_file('CHAES', @_) }
23 sub chaes_file_hex { Crypt::Digest::digest_file_hex('CHAES', @_) }
24 sub chaes_file_b64 { Crypt::Digest::digest_file_b64('CHAES', @_) }
25 sub chaes_file_b64u { Crypt::Digest::digest_file_b64u('CHAES', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub md2 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub md2_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub md2_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub md2_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub md2_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub md2_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub md2_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub md2_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('MD2') }
18 sub md2 { Crypt::Digest::digest_data('MD2', @_) }
19 sub md2_hex { Crypt::Digest::digest_data_hex('MD2', @_) }
20 sub md2_b64 { Crypt::Digest::digest_data_b64('MD2', @_) }
21 sub md2_b64u { Crypt::Digest::digest_data_b64u('MD2', @_) }
22 sub md2_file { Crypt::Digest::digest_file('MD2', @_) }
23 sub md2_file_hex { Crypt::Digest::digest_file_hex('MD2', @_) }
24 sub md2_file_b64 { Crypt::Digest::digest_file_b64('MD2', @_) }
25 sub md2_file_b64u { Crypt::Digest::digest_file_b64u('MD2', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub md4 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub md4_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub md4_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub md4_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub md4_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub md4_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub md4_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub md4_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('MD4') }
18 sub md4 { Crypt::Digest::digest_data('MD4', @_) }
19 sub md4_hex { Crypt::Digest::digest_data_hex('MD4', @_) }
20 sub md4_b64 { Crypt::Digest::digest_data_b64('MD4', @_) }
21 sub md4_b64u { Crypt::Digest::digest_data_b64u('MD4', @_) }
22 sub md4_file { Crypt::Digest::digest_file('MD4', @_) }
23 sub md4_file_hex { Crypt::Digest::digest_file_hex('MD4', @_) }
24 sub md4_file_b64 { Crypt::Digest::digest_file_b64('MD4', @_) }
25 sub md4_file_b64u { Crypt::Digest::digest_file_b64u('MD4', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub md5 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub md5_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub md5_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub md5_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub md5_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub md5_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub md5_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub md5_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('MD5') }
18 sub md5 { Crypt::Digest::digest_data('MD5', @_) }
19 sub md5_hex { Crypt::Digest::digest_data_hex('MD5', @_) }
20 sub md5_b64 { Crypt::Digest::digest_data_b64('MD5', @_) }
21 sub md5_b64u { Crypt::Digest::digest_data_b64u('MD5', @_) }
22 sub md5_file { Crypt::Digest::digest_file('MD5', @_) }
23 sub md5_file_hex { Crypt::Digest::digest_file_hex('MD5', @_) }
24 sub md5_file_b64 { Crypt::Digest::digest_file_b64('MD5', @_) }
25 sub md5_file_b64u { Crypt::Digest::digest_file_b64u('MD5', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub ripemd128 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub ripemd128_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub ripemd128_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub ripemd128_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub ripemd128_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub ripemd128_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub ripemd128_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub ripemd128_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('RIPEMD128') }
18 sub ripemd128 { Crypt::Digest::digest_data('RIPEMD128', @_) }
19 sub ripemd128_hex { Crypt::Digest::digest_data_hex('RIPEMD128', @_) }
20 sub ripemd128_b64 { Crypt::Digest::digest_data_b64('RIPEMD128', @_) }
21 sub ripemd128_b64u { Crypt::Digest::digest_data_b64u('RIPEMD128', @_) }
22 sub ripemd128_file { Crypt::Digest::digest_file('RIPEMD128', @_) }
23 sub ripemd128_file_hex { Crypt::Digest::digest_file_hex('RIPEMD128', @_) }
24 sub ripemd128_file_b64 { Crypt::Digest::digest_file_b64('RIPEMD128', @_) }
25 sub ripemd128_file_b64u { Crypt::Digest::digest_file_b64u('RIPEMD128', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub ripemd160 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub ripemd160_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub ripemd160_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub ripemd160_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub ripemd160_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub ripemd160_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub ripemd160_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub ripemd160_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('RIPEMD160') }
18 sub ripemd160 { Crypt::Digest::digest_data('RIPEMD160', @_) }
19 sub ripemd160_hex { Crypt::Digest::digest_data_hex('RIPEMD160', @_) }
20 sub ripemd160_b64 { Crypt::Digest::digest_data_b64('RIPEMD160', @_) }
21 sub ripemd160_b64u { Crypt::Digest::digest_data_b64u('RIPEMD160', @_) }
22 sub ripemd160_file { Crypt::Digest::digest_file('RIPEMD160', @_) }
23 sub ripemd160_file_hex { Crypt::Digest::digest_file_hex('RIPEMD160', @_) }
24 sub ripemd160_file_b64 { Crypt::Digest::digest_file_b64('RIPEMD160', @_) }
25 sub ripemd160_file_b64u { Crypt::Digest::digest_file_b64u('RIPEMD160', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub ripemd256 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub ripemd256_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub ripemd256_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub ripemd256_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub ripemd256_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub ripemd256_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub ripemd256_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub ripemd256_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('RIPEMD256') }
18 sub ripemd256 { Crypt::Digest::digest_data('RIPEMD256', @_) }
19 sub ripemd256_hex { Crypt::Digest::digest_data_hex('RIPEMD256', @_) }
20 sub ripemd256_b64 { Crypt::Digest::digest_data_b64('RIPEMD256', @_) }
21 sub ripemd256_b64u { Crypt::Digest::digest_data_b64u('RIPEMD256', @_) }
22 sub ripemd256_file { Crypt::Digest::digest_file('RIPEMD256', @_) }
23 sub ripemd256_file_hex { Crypt::Digest::digest_file_hex('RIPEMD256', @_) }
24 sub ripemd256_file_b64 { Crypt::Digest::digest_file_b64('RIPEMD256', @_) }
25 sub ripemd256_file_b64u { Crypt::Digest::digest_file_b64u('RIPEMD256', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub ripemd320 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub ripemd320_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub ripemd320_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub ripemd320_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub ripemd320_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub ripemd320_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub ripemd320_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub ripemd320_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('RIPEMD320') }
18 sub ripemd320 { Crypt::Digest::digest_data('RIPEMD320', @_) }
19 sub ripemd320_hex { Crypt::Digest::digest_data_hex('RIPEMD320', @_) }
20 sub ripemd320_b64 { Crypt::Digest::digest_data_b64('RIPEMD320', @_) }
21 sub ripemd320_b64u { Crypt::Digest::digest_data_b64u('RIPEMD320', @_) }
22 sub ripemd320_file { Crypt::Digest::digest_file('RIPEMD320', @_) }
23 sub ripemd320_file_hex { Crypt::Digest::digest_file_hex('RIPEMD320', @_) }
24 sub ripemd320_file_b64 { Crypt::Digest::digest_file_b64('RIPEMD320', @_) }
25 sub ripemd320_file_b64u { Crypt::Digest::digest_file_b64u('RIPEMD320', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha1 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha1_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha1_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha1_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha1_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha1_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha1_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha1_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA1') }
18 sub sha1 { Crypt::Digest::digest_data('SHA1', @_) }
19 sub sha1_hex { Crypt::Digest::digest_data_hex('SHA1', @_) }
20 sub sha1_b64 { Crypt::Digest::digest_data_b64('SHA1', @_) }
21 sub sha1_b64u { Crypt::Digest::digest_data_b64u('SHA1', @_) }
22 sub sha1_file { Crypt::Digest::digest_file('SHA1', @_) }
23 sub sha1_file_hex { Crypt::Digest::digest_file_hex('SHA1', @_) }
24 sub sha1_file_b64 { Crypt::Digest::digest_file_b64('SHA1', @_) }
25 sub sha1_file_b64u { Crypt::Digest::digest_file_b64u('SHA1', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha224 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha224_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha224_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha224_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha224_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha224_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha224_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha224_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA224') }
18 sub sha224 { Crypt::Digest::digest_data('SHA224', @_) }
19 sub sha224_hex { Crypt::Digest::digest_data_hex('SHA224', @_) }
20 sub sha224_b64 { Crypt::Digest::digest_data_b64('SHA224', @_) }
21 sub sha224_b64u { Crypt::Digest::digest_data_b64u('SHA224', @_) }
22 sub sha224_file { Crypt::Digest::digest_file('SHA224', @_) }
23 sub sha224_file_hex { Crypt::Digest::digest_file_hex('SHA224', @_) }
24 sub sha224_file_b64 { Crypt::Digest::digest_file_b64('SHA224', @_) }
25 sub sha224_file_b64u { Crypt::Digest::digest_file_b64u('SHA224', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha256 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha256_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha256_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha256_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha256_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha256_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha256_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha256_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA256') }
18 sub sha256 { Crypt::Digest::digest_data('SHA256', @_) }
19 sub sha256_hex { Crypt::Digest::digest_data_hex('SHA256', @_) }
20 sub sha256_b64 { Crypt::Digest::digest_data_b64('SHA256', @_) }
21 sub sha256_b64u { Crypt::Digest::digest_data_b64u('SHA256', @_) }
22 sub sha256_file { Crypt::Digest::digest_file('SHA256', @_) }
23 sub sha256_file_hex { Crypt::Digest::digest_file_hex('SHA256', @_) }
24 sub sha256_file_b64 { Crypt::Digest::digest_file_b64('SHA256', @_) }
25 sub sha256_file_b64u { Crypt::Digest::digest_file_b64u('SHA256', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha384 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha384_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha384_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha384_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha384_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha384_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha384_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha384_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA384') }
18 sub sha384 { Crypt::Digest::digest_data('SHA384', @_) }
19 sub sha384_hex { Crypt::Digest::digest_data_hex('SHA384', @_) }
20 sub sha384_b64 { Crypt::Digest::digest_data_b64('SHA384', @_) }
21 sub sha384_b64u { Crypt::Digest::digest_data_b64u('SHA384', @_) }
22 sub sha384_file { Crypt::Digest::digest_file('SHA384', @_) }
23 sub sha384_file_hex { Crypt::Digest::digest_file_hex('SHA384', @_) }
24 sub sha384_file_b64 { Crypt::Digest::digest_file_b64('SHA384', @_) }
25 sub sha384_file_b64u { Crypt::Digest::digest_file_b64u('SHA384', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha3_224 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha3_224_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha3_224_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha3_224_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha3_224_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha3_224_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha3_224_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha3_224_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA3_224') }
18 sub sha3_224 { Crypt::Digest::digest_data('SHA3_224', @_) }
19 sub sha3_224_hex { Crypt::Digest::digest_data_hex('SHA3_224', @_) }
20 sub sha3_224_b64 { Crypt::Digest::digest_data_b64('SHA3_224', @_) }
21 sub sha3_224_b64u { Crypt::Digest::digest_data_b64u('SHA3_224', @_) }
22 sub sha3_224_file { Crypt::Digest::digest_file('SHA3_224', @_) }
23 sub sha3_224_file_hex { Crypt::Digest::digest_file_hex('SHA3_224', @_) }
24 sub sha3_224_file_b64 { Crypt::Digest::digest_file_b64('SHA3_224', @_) }
25 sub sha3_224_file_b64u { Crypt::Digest::digest_file_b64u('SHA3_224', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha3_256 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha3_256_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha3_256_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha3_256_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha3_256_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha3_256_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha3_256_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha3_256_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA3_256') }
18 sub sha3_256 { Crypt::Digest::digest_data('SHA3_256', @_) }
19 sub sha3_256_hex { Crypt::Digest::digest_data_hex('SHA3_256', @_) }
20 sub sha3_256_b64 { Crypt::Digest::digest_data_b64('SHA3_256', @_) }
21 sub sha3_256_b64u { Crypt::Digest::digest_data_b64u('SHA3_256', @_) }
22 sub sha3_256_file { Crypt::Digest::digest_file('SHA3_256', @_) }
23 sub sha3_256_file_hex { Crypt::Digest::digest_file_hex('SHA3_256', @_) }
24 sub sha3_256_file_b64 { Crypt::Digest::digest_file_b64('SHA3_256', @_) }
25 sub sha3_256_file_b64u { Crypt::Digest::digest_file_b64u('SHA3_256', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha3_384 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha3_384_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha3_384_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha3_384_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha3_384_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha3_384_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha3_384_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha3_384_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA3_384') }
18 sub sha3_384 { Crypt::Digest::digest_data('SHA3_384', @_) }
19 sub sha3_384_hex { Crypt::Digest::digest_data_hex('SHA3_384', @_) }
20 sub sha3_384_b64 { Crypt::Digest::digest_data_b64('SHA3_384', @_) }
21 sub sha3_384_b64u { Crypt::Digest::digest_data_b64u('SHA3_384', @_) }
22 sub sha3_384_file { Crypt::Digest::digest_file('SHA3_384', @_) }
23 sub sha3_384_file_hex { Crypt::Digest::digest_file_hex('SHA3_384', @_) }
24 sub sha3_384_file_b64 { Crypt::Digest::digest_file_b64('SHA3_384', @_) }
25 sub sha3_384_file_b64u { Crypt::Digest::digest_file_b64u('SHA3_384', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha3_512 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha3_512_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha3_512_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha3_512_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha3_512_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha3_512_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha3_512_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha3_512_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA3_512') }
18 sub sha3_512 { Crypt::Digest::digest_data('SHA3_512', @_) }
19 sub sha3_512_hex { Crypt::Digest::digest_data_hex('SHA3_512', @_) }
20 sub sha3_512_b64 { Crypt::Digest::digest_data_b64('SHA3_512', @_) }
21 sub sha3_512_b64u { Crypt::Digest::digest_data_b64u('SHA3_512', @_) }
22 sub sha3_512_file { Crypt::Digest::digest_file('SHA3_512', @_) }
23 sub sha3_512_file_hex { Crypt::Digest::digest_file_hex('SHA3_512', @_) }
24 sub sha3_512_file_b64 { Crypt::Digest::digest_file_b64('SHA3_512', @_) }
25 sub sha3_512_file_b64u { Crypt::Digest::digest_file_b64u('SHA3_512', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha512 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha512_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha512_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha512_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha512_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha512_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha512_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha512_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA512') }
18 sub sha512 { Crypt::Digest::digest_data('SHA512', @_) }
19 sub sha512_hex { Crypt::Digest::digest_data_hex('SHA512', @_) }
20 sub sha512_b64 { Crypt::Digest::digest_data_b64('SHA512', @_) }
21 sub sha512_b64u { Crypt::Digest::digest_data_b64u('SHA512', @_) }
22 sub sha512_file { Crypt::Digest::digest_file('SHA512', @_) }
23 sub sha512_file_hex { Crypt::Digest::digest_file_hex('SHA512', @_) }
24 sub sha512_file_b64 { Crypt::Digest::digest_file_b64('SHA512', @_) }
25 sub sha512_file_b64u { Crypt::Digest::digest_file_b64u('SHA512', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha512_224 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha512_224_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha512_224_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha512_224_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha512_224_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha512_224_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha512_224_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha512_224_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA512_224') }
18 sub sha512_224 { Crypt::Digest::digest_data('SHA512_224', @_) }
19 sub sha512_224_hex { Crypt::Digest::digest_data_hex('SHA512_224', @_) }
20 sub sha512_224_b64 { Crypt::Digest::digest_data_b64('SHA512_224', @_) }
21 sub sha512_224_b64u { Crypt::Digest::digest_data_b64u('SHA512_224', @_) }
22 sub sha512_224_file { Crypt::Digest::digest_file('SHA512_224', @_) }
23 sub sha512_224_file_hex { Crypt::Digest::digest_file_hex('SHA512_224', @_) }
24 sub sha512_224_file_b64 { Crypt::Digest::digest_file_b64('SHA512_224', @_) }
25 sub sha512_224_file_b64u { Crypt::Digest::digest_file_b64u('SHA512_224', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub sha512_256 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub sha512_256_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub sha512_256_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub sha512_256_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub sha512_256_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub sha512_256_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub sha512_256_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub sha512_256_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('SHA512_256') }
18 sub sha512_256 { Crypt::Digest::digest_data('SHA512_256', @_) }
19 sub sha512_256_hex { Crypt::Digest::digest_data_hex('SHA512_256', @_) }
20 sub sha512_256_b64 { Crypt::Digest::digest_data_b64('SHA512_256', @_) }
21 sub sha512_256_b64u { Crypt::Digest::digest_data_b64u('SHA512_256', @_) }
22 sub sha512_256_file { Crypt::Digest::digest_file('SHA512_256', @_) }
23 sub sha512_256_file_hex { Crypt::Digest::digest_file_hex('SHA512_256', @_) }
24 sub sha512_256_file_b64 { Crypt::Digest::digest_file_b64('SHA512_256', @_) }
25 sub sha512_256_file_b64u { Crypt::Digest::digest_file_b64u('SHA512_256', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub tiger192 { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub tiger192_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub tiger192_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub tiger192_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub tiger192_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub tiger192_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub tiger192_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub tiger192_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('Tiger192') }
18 sub tiger192 { Crypt::Digest::digest_data('Tiger192', @_) }
19 sub tiger192_hex { Crypt::Digest::digest_data_hex('Tiger192', @_) }
20 sub tiger192_b64 { Crypt::Digest::digest_data_b64('Tiger192', @_) }
21 sub tiger192_b64u { Crypt::Digest::digest_data_b64u('Tiger192', @_) }
22 sub tiger192_file { Crypt::Digest::digest_file('Tiger192', @_) }
23 sub tiger192_file_hex { Crypt::Digest::digest_file_hex('Tiger192', @_) }
24 sub tiger192_file_b64 { Crypt::Digest::digest_file_b64('Tiger192', @_) }
25 sub tiger192_file_b64u { Crypt::Digest::digest_file_b64u('Tiger192', @_) }
2826
2927 1;
3028
1212
1313 use Carp;
1414 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
16
17 sub hashsize { Crypt::Digest::hashsize(__PACKAGE__) }
18
19 sub whirlpool { Crypt::Digest::digest_data(__PACKAGE__, @_) }
20 sub whirlpool_hex { Crypt::Digest::digest_data_hex(__PACKAGE__, @_) }
21 sub whirlpool_b64 { Crypt::Digest::digest_data_b64(__PACKAGE__, @_) }
22 sub whirlpool_b64u { Crypt::Digest::digest_data_b64u(__PACKAGE__, @_) }
23
24 sub whirlpool_file { Crypt::Digest::digest_file(__PACKAGE__, @_) }
25 sub whirlpool_file_hex { Crypt::Digest::digest_file_hex(__PACKAGE__, @_) }
26 sub whirlpool_file_b64 { Crypt::Digest::digest_file_b64(__PACKAGE__, @_) }
27 sub whirlpool_file_b64u { Crypt::Digest::digest_file_b64u(__PACKAGE__, @_) }
15 use Crypt::Digest;
16
17 sub hashsize { Crypt::Digest::hashsize('Whirlpool') }
18 sub whirlpool { Crypt::Digest::digest_data('Whirlpool', @_) }
19 sub whirlpool_hex { Crypt::Digest::digest_data_hex('Whirlpool', @_) }
20 sub whirlpool_b64 { Crypt::Digest::digest_data_b64('Whirlpool', @_) }
21 sub whirlpool_b64u { Crypt::Digest::digest_data_b64u('Whirlpool', @_) }
22 sub whirlpool_file { Crypt::Digest::digest_file('Whirlpool', @_) }
23 sub whirlpool_file_hex { Crypt::Digest::digest_file_hex('Whirlpool', @_) }
24 sub whirlpool_file_b64 { Crypt::Digest::digest_file_b64('Whirlpool', @_) }
25 sub whirlpool_file_b64u { Crypt::Digest::digest_file_b64u('Whirlpool', @_) }
2826
2927 1;
3028
138138 Logically joins all arguments into a single string, and returns its SHA1 digest encoded as a binary string.
139139
140140 $digest_raw = digest_data('SHA1', 'data string');
141 #or
142 $digest_raw = digest_data('SHA1', 'any data', 'more data', 'even more data');
141143
142144 =head2 digest_data_hex
143145
144146 Logically joins all arguments into a single string, and returns its SHA1 digest encoded as a hexadecimal string.
145147
146148 $digest_hex = digest_data_hex('SHA1', 'data string');
149 #or
150 $digest_hex = digest_data_hex('SHA1', 'any data', 'more data', 'even more data');
147151
148152 =head2 digest_data_b64
149153
150154 Logically joins all arguments into a single string, and returns its SHA1 digest encoded as a Base64 string, B<with> trailing '=' padding.
151155
152156 $digest_b64 = digest_data_b64('SHA1', 'data string');
157 #or
158 $digest_b64 = digest_data_b64('SHA1', 'any data', 'more data', 'even more data');
153159
154160 =head2 digest_data_b64u
155161
156162 Logically joins all arguments into a single string, and returns its SHA1 digest encoded as a Base64 URL Safe string (see RFC 4648 section 5).
157163
158164 $digest_b64url = digest_data_b64u('SHA1', 'data string');
165 #or
166 $digest_b64url = digest_data_b64u('SHA1', 'any data', 'more data', 'even more data');
159167
160168 =head2 digest_file
161169
99 our %EXPORT_TAGS = ( all => [qw( blake2b blake2b_hex blake2b_b64 blake2b_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its BLAKE2b message authentication code encoded as a binary string.
6965
7066 $blake2b_raw = blake2b($size, $key, 'data buffer');
67 #or
68 $blake2b_raw = blake2b($size, $key, 'any data', 'more data', 'even more data');
7169
7270 =head2 blake2b_hex
7371
7472 Logically joins all arguments into a single string, and returns its BLAKE2b message authentication code encoded as a hexadecimal string.
7573
7674 $blake2b_hex = blake2b_hex($size, $key, 'data buffer');
75 #or
76 $blake2b_hex = blake2b_hex($size, $key, 'any data', 'more data', 'even more data');
7777
7878 =head2 blake2b_b64
7979
8080 Logically joins all arguments into a single string, and returns its BLAKE2b message authentication code encoded as a Base64 string.
8181
8282 $blake2b_b64 = blake2b_b64($size, $key, 'data buffer');
83 #or
84 $blake2b_b64 = blake2b_b64($size, $key, 'any data', 'more data', 'even more data');
8385
8486 =head2 blake2b_b64u
8587
8688 Logically joins all arguments into a single string, and returns its BLAKE2b message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $blake2b_b64url = blake2b_b64u($size, $key, 'data buffer');
91 #or
92 $blake2b_b64url = blake2b_b64u($size, $key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( blake2s blake2s_hex blake2s_b64 blake2s_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its BLAKE2s message authentication code encoded as a binary string.
6965
7066 $blake2s_raw = blake2s($size, $key, 'data buffer');
67 #or
68 $blake2s_raw = blake2s($size, $key, 'any data', 'more data', 'even more data');
7169
7270 =head2 blake2s_hex
7371
7472 Logically joins all arguments into a single string, and returns its BLAKE2s message authentication code encoded as a hexadecimal string.
7573
7674 $blake2s_hex = blake2s_hex($size, $key, 'data buffer');
75 #or
76 $blake2s_hex = blake2s_hex($size, $key, 'any data', 'more data', 'even more data');
7777
7878 =head2 blake2s_b64
7979
8080 Logically joins all arguments into a single string, and returns its BLAKE2s message authentication code encoded as a Base64 string.
8181
8282 $blake2s_b64 = blake2s_b64($size, $key, 'data buffer');
83 #or
84 $blake2s_b64 = blake2s_b64($size, $key, 'any data', 'more data', 'even more data');
8385
8486 =head2 blake2s_b64u
8587
8688 Logically joins all arguments into a single string, and returns its BLAKE2s message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $blake2s_b64url = blake2s_b64u($size, $key, 'data buffer');
91 #or
92 $blake2s_b64url = blake2s_b64u($size, $key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( f9 f9_hex f9_b64 f9_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its F9 message authentication code encoded as a binary string.
6965
7066 $f9_raw = f9($cipher_name, $key, 'data buffer');
67 #or
68 $f9_raw = f9($cipher_name, $key, 'any data', 'more data', 'even more data');
7169
7270 =head2 f9_hex
7371
7472 Logically joins all arguments into a single string, and returns its F9 message authentication code encoded as a hexadecimal string.
7573
7674 $f9_hex = f9_hex($cipher_name, $key, 'data buffer');
75 #or
76 $f9_hex = f9_hex($cipher_name, $key, 'any data', 'more data', 'even more data');
7777
7878 =head2 f9_b64
7979
8080 Logically joins all arguments into a single string, and returns its F9 message authentication code encoded as a Base64 string.
8181
8282 $f9_b64 = f9_b64($cipher_name, $key, 'data buffer');
83 #or
84 $f9_b64 = f9_b64($cipher_name, $key, 'any data', 'more data', 'even more data');
8385
8486 =head2 f9_b64u
8587
8688 Logically joins all arguments into a single string, and returns its F9 message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $f9_b64url = f9_b64u($cipher_name, $key, 'data buffer');
91 #or
92 $f9_b64url = f9_b64u($cipher_name, $key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( hmac hmac_hex hmac_b64 hmac_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its HMAC message authentication code encoded as a binary string.
6965
7066 $hmac_raw = hmac($hash_name, $key, 'data buffer');
67 #or
68 $hmac_raw = hmac($hash_name, $key, 'any data', 'more data', 'even more data');
7169
7270 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
7371 # $key ......... the key (octets/bytes)
7775 Logically joins all arguments into a single string, and returns its HMAC message authentication code encoded as a hexadecimal string.
7876
7977 $hmac_hex = hmac_hex($hash_name, $key, 'data buffer');
78 #or
79 $hmac_hex = hmac_hex($hash_name, $key, 'any data', 'more data', 'even more data');
8080
8181 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
8282 # $key ......... the key (octets/bytes, not hex!)
8686 Logically joins all arguments into a single string, and returns its HMAC message authentication code encoded as a Base64 string.
8787
8888 $hmac_b64 = hmac_b64($hash_name, $key, 'data buffer');
89 #or
90 $hmac_b64 = hmac_b64($hash_name, $key, 'any data', 'more data', 'even more data');
8991
9092 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
9193 # $key ......... the key (octets/bytes, not Base64!)
9597 Logically joins all arguments into a single string, and returns its HMAC message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
9698
9799 $hmac_b64url = hmac_b64u($hash_name, $key, 'data buffer');
100 #or
101 $hmac_b64url = hmac_b64u($hash_name, $key, 'any data', 'more data', 'even more data');
98102
99103 # $hash_name ... any <NAME> for which there exists Crypt::Digest::<NAME>
100104 # $key ......... the key (octets/bytes, not Base64url!)
119123 =head2 add
120124
121125 $d->add('any data');
126 #or
127 $d->add('any data', 'more data', 'even more data');
122128
123129 =head2 addfile
124130
99 our %EXPORT_TAGS = ( all => [qw( omac omac_hex omac_b64 omac_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its OMAC message authentication code encoded as a binary string.
6965
7066 $omac_raw = omac($cipher_name, $key, 'data buffer');
67 #or
68 $omac_raw = omac($cipher_name, $key, 'any data', 'more data', 'even more data');
7169
7270 =head2 omac_hex
7371
7472 Logically joins all arguments into a single string, and returns its OMAC message authentication code encoded as a hexadecimal string.
7573
7674 $omac_hex = omac_hex($cipher_name, $key, 'data buffer');
75 #or
76 $omac_hex = omac_hex($cipher_name, $key, 'any data', 'more data', 'even more data');
7777
7878 =head2 omac_b64
7979
8080 Logically joins all arguments into a single string, and returns its OMAC message authentication code encoded as a Base64 string.
8181
8282 $omac_b64 = omac_b64($cipher_name, $key, 'data buffer');
83 #or
84 $omac_b64 = omac_b64($cipher_name, $key, 'any data', 'more data', 'even more data');
8385
8486 =head2 omac_b64u
8587
8688 Logically joins all arguments into a single string, and returns its OMAC message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $omac_b64url = omac_b64u($cipher_name, $key, 'data buffer');
91 #or
92 $omac_b64url = omac_b64u($cipher_name, $key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( pmac pmac_hex pmac_b64 pmac_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its PMAC message authentication code encoded as a binary string.
6965
7066 $pmac_raw = pmac($cipher_name, $key, 'data buffer');
67 #or
68 $pmac_raw = pmac($cipher_name, $key, 'any data', 'more data', 'even more data');
7169
7270 =head2 pmac_hex
7371
7472 Logically joins all arguments into a single string, and returns its PMAC message authentication code encoded as a hexadecimal string.
7573
7674 $pmac_hex = pmac_hex($cipher_name, $key, 'data buffer');
75 #or
76 $pmac_hex = pmac_hex($cipher_name, $key, 'any data', 'more data', 'even more data');
7777
7878 =head2 pmac_b64
7979
8080 Logically joins all arguments into a single string, and returns its PMAC message authentication code encoded as a Base64 string.
8181
8282 $pmac_b64 = pmac_b64($cipher_name, $key, 'data buffer');
83 #or
84 $pmac_b64 = pmac_b64($cipher_name, $key, 'any data', 'more data', 'even more data');
8385
8486 =head2 pmac_b64u
8587
8688 Logically joins all arguments into a single string, and returns its PMAC message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $pmac_b64url = pmac_b64u($cipher_name, $key, 'data buffer');
91 #or
92 $pmac_b64url = pmac_b64u($cipher_name, $key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( pelican pelican_hex pelican_b64 pelican_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its Pelican message authentication code encoded as a binary string.
6965
7066 $pelican_raw = pelican($key, 'data buffer');
67 #or
68 $pelican_raw = pelican($key, 'any data', 'more data', 'even more data');
7169
7270 =head2 pelican_hex
7371
7472 Logically joins all arguments into a single string, and returns its Pelican message authentication code encoded as a hexadecimal string.
7573
7674 $pelican_hex = pelican_hex($key, 'data buffer');
75 #or
76 $pelican_hex = pelican_hex($key, 'any data', 'more data', 'even more data');
7777
7878 =head2 pelican_b64
7979
8080 Logically joins all arguments into a single string, and returns its Pelican message authentication code encoded as a Base64 string.
8181
8282 $pelican_b64 = pelican_b64($key, 'data buffer');
83 #or
84 $pelican_b64 = pelican_b64($key, 'any data', 'more data', 'even more data');
8385
8486 =head2 pelican_b64u
8587
8688 Logically joins all arguments into a single string, and returns its Pelican message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $pelican_b64url = pelican_b64u($key, 'data buffer');
91 #or
92 $pelican_b64url = pelican_b64u($key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a binary string.
6965
7066 $poly1305_raw = poly1305($key, 'data buffer');
67 #or
68 $poly1305_raw = poly1305($key, 'any data', 'more data', 'even more data');
7169
7270 =head2 poly1305_hex
7371
7472 Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a hexadecimal string.
7573
7674 $poly1305_hex = poly1305_hex($key, 'data buffer');
75 #or
76 $poly1305_hex = poly1305_hex($key, 'any data', 'more data', 'even more data');
7777
7878 =head2 poly1305_b64
7979
8080 Logically joins all arguments into a single string, and returns its Poly1305 message authentication code encoded as a Base64 string.
8181
8282 $poly1305_b64 = poly1305_b64($key, 'data buffer');
83 #or
84 $poly1305_b64 = poly1305_b64($key, 'any data', 'more data', 'even more data');
8385
8486 =head2 poly1305_b64u
8587
8688 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).
8789
8890 $poly1305_b64url = poly1305_b64u($key, 'data buffer');
91 #or
92 $poly1305_b64url = poly1305_b64u($key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
99 our %EXPORT_TAGS = ( all => [qw( xcbc xcbc_hex xcbc_b64 xcbc_b64u )] );
1010 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
1111 our @EXPORT = qw();
12
13 use Carp;
14 $Carp::Internal{(__PACKAGE__)}++;
15 use CryptX;
1612
1713 1;
1814
6864 Logically joins all arguments into a single string, and returns its XCBC message authentication code encoded as a binary string.
6965
7066 $xcbc_raw = xcbc($cipher_name, $key, 'data buffer');
67 #or
68 $xcbc_raw = xcbc($cipher_name, $key, 'any data', 'more data', 'even more data');
7169
7270 =head2 xcbc_hex
7371
7472 Logically joins all arguments into a single string, and returns its XCBC message authentication code encoded as a hexadecimal string.
7573
7674 $xcbc_hex = xcbc_hex($cipher_name, $key, 'data buffer');
75 #or
76 $xcbc_hex = xcbc_hex($cipher_name, $key, 'any data', 'more data', 'even more data');
7777
7878 =head2 xcbc_b64
7979
8080 Logically joins all arguments into a single string, and returns its XCBC message authentication code encoded as a Base64 string.
8181
8282 $xcbc_b64 = xcbc_b64($cipher_name, $key, 'data buffer');
83 #or
84 $xcbc_b64 = xcbc_b64($cipher_name, $key, 'any data', 'more data', 'even more data');
8385
8486 =head2 xcbc_b64u
8587
8688 Logically joins all arguments into a single string, and returns its XCBC message authentication code encoded as a Base64 URL Safe string (see RFC 4648 section 5).
8789
8890 $xcbc_b64url = xcbc_b64u($cipher_name, $key, 'data buffer');
91 #or
92 $xcbc_b64url = xcbc_b64u($cipher_name, $key, 'any data', 'more data', 'even more data');
8993
9094 =head1 METHODS
9195
104108 =head2 add
105109
106110 $d->add('any data');
111 #or
112 $d->add('any data', 'more data', 'even more data');
107113
108114 =head2 addfile
109115
33 use warnings;
44 our $VERSION = '0.056_001';
55
6 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
7 our %EXPORT_TAGS = ( all => [qw( mac mac_hex )] );
8 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
9 our @EXPORT = qw();
10
116 use Carp;
127 $Carp::Internal{(__PACKAGE__)}++;
138 use CryptX;
14
15 sub add {
16 my $self = shift;
17 local $SIG{__DIE__} = \&CryptX::_croak;
18 $self->_add_single($_) for (@_);
19 return $self;
20 }
219
2210 sub addfile {
2311 my ($self, $file) = @_;
2412
2513 my $handle;
2614 if (ref(\$file) eq 'SCALAR') {
27 #filename
2815 open($handle, "<", $file) || die "FATAL: cannot open '$file': $!";
2916 binmode($handle);
3017 }
3118 else {
32 #handle
3319 $handle = $file
3420 }
3521 die "FATAL: invalid handle" unless defined $handle;
3824 my $buf = "";
3925 local $SIG{__DIE__} = \&CryptX::_croak;
4026 while (($n = read($handle, $buf, 32*1024))) {
41 $self->_add_single($buf)
27 $self->add($buf);
4228 }
4329 die "FATAL: read failed: $!" unless defined $n;
4430
99
1010 sub encrypt {
1111 my ($self, $pt) = (shift, shift);
12 $self->_start(1, @_);
13 return $self->add($pt) . $self->finish;
12 $self->start_encrypt(@_)->_crypt($pt) . $self->finish;
1413 }
1514
1615 sub decrypt {
1716 my ($self, $ct) = (shift, shift);
18 $self->_start(-1, @_);
19 return $self->add($ct) . $self->finish;
20 }
21
22 sub start_encrypt {
23 my $self = shift;
24 $self->_start(1, @_);
25 return $self;
26 }
27
28 sub start_decrypt {
29 my $self = shift;
30 $self->_start(-1, @_);
31 return $self;
32 }
33
34 sub finish {
35 shift->_finish(@_);
17 $self->start_decrypt(@_)->_crypt($ct) . $self->finish;
3618 }
3719
3820 sub add {
4022 my $rv = '';
4123 $rv .= $self->_crypt($_) for (@_);
4224 return $rv;
43 }
44
45 sub _crypt {
46 my $self = shift;
47 my $dir = $self->_get_dir;
48 return $self->_encrypt(@_) if $dir == 1;
49 return $self->_decrypt(@_) if $dir == -1;
50 return;
51 }
52
53 sub _finish {
54 my $self = shift;
55 my $dir = $self->_get_dir;
56 return $self->_finish_enc(@_) if $dir == 1;
57 return $self->_finish_dec(@_) if $dir == -1;
58 return;
5925 }
6026
6127 sub CLONE_SKIP { 1 } # prevent cloning
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2b_160 qw( blake2b_160 blake2b_160_hex blake2b_160_b64 blake2b_160_b64u blake2b_160_file blake2b_160_file_hex blake2b_160_file_b64 blake2b_160_file_b64u );
1313 is( Crypt::Digest::BLAKE2b_160->hashsize, 20, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2b_160')->hashsize, 20, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2b_160->new->hashsize, 20, 'hashsize/6');
16
17 is( blake2b_160("A","A","A"), pack("H*","14517ce78b0c7e5e5b7f096f1f3c046f01c46901"), 'blake2b_160 (raw/tripple_A)');
18 is( blake2b_160_hex("A","A","A"), "14517ce78b0c7e5e5b7f096f1f3c046f01c46901", 'blake2b_160 (hex/tripple_A)');
19 is( blake2b_160_b64("A","A","A"), "FFF854sMfl5bfwlvHzwEbwHEaQE=", 'blake2b_160 (base64/tripple_A)');
20 is( blake2b_160_b64u("A","A","A"), "FFF854sMfl5bfwlvHzwEbwHEaQE", 'blake2b_160 (base64url/tripple_A)');
21 is( digest_data('BLAKE2b_160', "A","A","A"), pack("H*","14517ce78b0c7e5e5b7f096f1f3c046f01c46901"), 'blake2b_160 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2b_160', "A","A","A"), "14517ce78b0c7e5e5b7f096f1f3c046f01c46901", 'blake2b_160 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2b_160', "A","A","A"), "FFF854sMfl5bfwlvHzwEbwHEaQE=", 'blake2b_160 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2b_160', "A","A","A"), "FFF854sMfl5bfwlvHzwEbwHEaQE", 'blake2b_160 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2b_160->new->add("A","A","A")->hexdigest, "14517ce78b0c7e5e5b7f096f1f3c046f01c46901", 'blake2b_160 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2b_160->new->add("A")->add("A")->add("A")->hexdigest, "14517ce78b0c7e5e5b7f096f1f3c046f01c46901", 'blake2b_160 (OO3/tripple_A)');
1627
1728
1829 is( blake2b_160(""), pack("H*","3345524abf6bbe1809449224b5972c41790b6cf2"), 'blake2b_160 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2b_256 qw( blake2b_256 blake2b_256_hex blake2b_256_b64 blake2b_256_b64u blake2b_256_file blake2b_256_file_hex blake2b_256_file_b64 blake2b_256_file_b64u );
1313 is( Crypt::Digest::BLAKE2b_256->hashsize, 32, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2b_256')->hashsize, 32, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2b_256->new->hashsize, 32, 'hashsize/6');
16
17 is( blake2b_256("A","A","A"), pack("H*","cdc4339296753f930aa454700fd0ded6e1e08772dea849859e17dbbd85cae649"), 'blake2b_256 (raw/tripple_A)');
18 is( blake2b_256_hex("A","A","A"), "cdc4339296753f930aa454700fd0ded6e1e08772dea849859e17dbbd85cae649", 'blake2b_256 (hex/tripple_A)');
19 is( blake2b_256_b64("A","A","A"), "zcQzkpZ1P5MKpFRwD9De1uHgh3LeqEmFnhfbvYXK5kk=", 'blake2b_256 (base64/tripple_A)');
20 is( blake2b_256_b64u("A","A","A"), "zcQzkpZ1P5MKpFRwD9De1uHgh3LeqEmFnhfbvYXK5kk", 'blake2b_256 (base64url/tripple_A)');
21 is( digest_data('BLAKE2b_256', "A","A","A"), pack("H*","cdc4339296753f930aa454700fd0ded6e1e08772dea849859e17dbbd85cae649"), 'blake2b_256 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2b_256', "A","A","A"), "cdc4339296753f930aa454700fd0ded6e1e08772dea849859e17dbbd85cae649", 'blake2b_256 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2b_256', "A","A","A"), "zcQzkpZ1P5MKpFRwD9De1uHgh3LeqEmFnhfbvYXK5kk=", 'blake2b_256 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2b_256', "A","A","A"), "zcQzkpZ1P5MKpFRwD9De1uHgh3LeqEmFnhfbvYXK5kk", 'blake2b_256 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2b_256->new->add("A","A","A")->hexdigest, "cdc4339296753f930aa454700fd0ded6e1e08772dea849859e17dbbd85cae649", 'blake2b_256 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2b_256->new->add("A")->add("A")->add("A")->hexdigest, "cdc4339296753f930aa454700fd0ded6e1e08772dea849859e17dbbd85cae649", 'blake2b_256 (OO3/tripple_A)');
1627
1728
1829 is( blake2b_256(""), pack("H*","0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8"), 'blake2b_256 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2b_384 qw( blake2b_384 blake2b_384_hex blake2b_384_b64 blake2b_384_b64u blake2b_384_file blake2b_384_file_hex blake2b_384_file_b64 blake2b_384_file_b64u );
1313 is( Crypt::Digest::BLAKE2b_384->hashsize, 48, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2b_384')->hashsize, 48, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2b_384->new->hashsize, 48, 'hashsize/6');
16
17 is( blake2b_384("A","A","A"), pack("H*","9aa07d9caf17bff49747fc9488eb6babcdcd575616f85a91758ee50e6e49a4884bf6fb46b424e0ae669071ccd8cb1685"), 'blake2b_384 (raw/tripple_A)');
18 is( blake2b_384_hex("A","A","A"), "9aa07d9caf17bff49747fc9488eb6babcdcd575616f85a91758ee50e6e49a4884bf6fb46b424e0ae669071ccd8cb1685", 'blake2b_384 (hex/tripple_A)');
19 is( blake2b_384_b64("A","A","A"), "mqB9nK8Xv/SXR/yUiOtrq83NV1YW+FqRdY7lDm5JpIhL9vtGtCTgrmaQcczYyxaF", 'blake2b_384 (base64/tripple_A)');
20 is( blake2b_384_b64u("A","A","A"), "mqB9nK8Xv_SXR_yUiOtrq83NV1YW-FqRdY7lDm5JpIhL9vtGtCTgrmaQcczYyxaF", 'blake2b_384 (base64url/tripple_A)');
21 is( digest_data('BLAKE2b_384', "A","A","A"), pack("H*","9aa07d9caf17bff49747fc9488eb6babcdcd575616f85a91758ee50e6e49a4884bf6fb46b424e0ae669071ccd8cb1685"), 'blake2b_384 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2b_384', "A","A","A"), "9aa07d9caf17bff49747fc9488eb6babcdcd575616f85a91758ee50e6e49a4884bf6fb46b424e0ae669071ccd8cb1685", 'blake2b_384 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2b_384', "A","A","A"), "mqB9nK8Xv/SXR/yUiOtrq83NV1YW+FqRdY7lDm5JpIhL9vtGtCTgrmaQcczYyxaF", 'blake2b_384 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2b_384', "A","A","A"), "mqB9nK8Xv_SXR_yUiOtrq83NV1YW-FqRdY7lDm5JpIhL9vtGtCTgrmaQcczYyxaF", 'blake2b_384 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2b_384->new->add("A","A","A")->hexdigest, "9aa07d9caf17bff49747fc9488eb6babcdcd575616f85a91758ee50e6e49a4884bf6fb46b424e0ae669071ccd8cb1685", 'blake2b_384 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2b_384->new->add("A")->add("A")->add("A")->hexdigest, "9aa07d9caf17bff49747fc9488eb6babcdcd575616f85a91758ee50e6e49a4884bf6fb46b424e0ae669071ccd8cb1685", 'blake2b_384 (OO3/tripple_A)');
1627
1728
1829 is( blake2b_384(""), pack("H*","b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd3244a6caf0498812673c5e05ef583825100"), 'blake2b_384 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2b_512 qw( blake2b_512 blake2b_512_hex blake2b_512_b64 blake2b_512_b64u blake2b_512_file blake2b_512_file_hex blake2b_512_file_b64 blake2b_512_file_b64u );
1313 is( Crypt::Digest::BLAKE2b_512->hashsize, 64, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2b_512')->hashsize, 64, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2b_512->new->hashsize, 64, 'hashsize/6');
16
17 is( blake2b_512("A","A","A"), pack("H*","dda5c92ae5adba047d317f99dc58a9059b5a8c0907f95d8cddcf5bfdaa8e4c74ddd84bc2683cdc2d16a340ff5798e1bf4bd2c838332611f266bb62870d33b823"), 'blake2b_512 (raw/tripple_A)');
18 is( blake2b_512_hex("A","A","A"), "dda5c92ae5adba047d317f99dc58a9059b5a8c0907f95d8cddcf5bfdaa8e4c74ddd84bc2683cdc2d16a340ff5798e1bf4bd2c838332611f266bb62870d33b823", 'blake2b_512 (hex/tripple_A)');
19 is( blake2b_512_b64("A","A","A"), "3aXJKuWtugR9MX+Z3FipBZtajAkH+V2M3c9b/aqOTHTd2EvCaDzcLRajQP9XmOG/S9LIODMmEfJmu2KHDTO4Iw==", 'blake2b_512 (base64/tripple_A)');
20 is( blake2b_512_b64u("A","A","A"), "3aXJKuWtugR9MX-Z3FipBZtajAkH-V2M3c9b_aqOTHTd2EvCaDzcLRajQP9XmOG_S9LIODMmEfJmu2KHDTO4Iw", 'blake2b_512 (base64url/tripple_A)');
21 is( digest_data('BLAKE2b_512', "A","A","A"), pack("H*","dda5c92ae5adba047d317f99dc58a9059b5a8c0907f95d8cddcf5bfdaa8e4c74ddd84bc2683cdc2d16a340ff5798e1bf4bd2c838332611f266bb62870d33b823"), 'blake2b_512 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2b_512', "A","A","A"), "dda5c92ae5adba047d317f99dc58a9059b5a8c0907f95d8cddcf5bfdaa8e4c74ddd84bc2683cdc2d16a340ff5798e1bf4bd2c838332611f266bb62870d33b823", 'blake2b_512 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2b_512', "A","A","A"), "3aXJKuWtugR9MX+Z3FipBZtajAkH+V2M3c9b/aqOTHTd2EvCaDzcLRajQP9XmOG/S9LIODMmEfJmu2KHDTO4Iw==", 'blake2b_512 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2b_512', "A","A","A"), "3aXJKuWtugR9MX-Z3FipBZtajAkH-V2M3c9b_aqOTHTd2EvCaDzcLRajQP9XmOG_S9LIODMmEfJmu2KHDTO4Iw", 'blake2b_512 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2b_512->new->add("A","A","A")->hexdigest, "dda5c92ae5adba047d317f99dc58a9059b5a8c0907f95d8cddcf5bfdaa8e4c74ddd84bc2683cdc2d16a340ff5798e1bf4bd2c838332611f266bb62870d33b823", 'blake2b_512 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2b_512->new->add("A")->add("A")->add("A")->hexdigest, "dda5c92ae5adba047d317f99dc58a9059b5a8c0907f95d8cddcf5bfdaa8e4c74ddd84bc2683cdc2d16a340ff5798e1bf4bd2c838332611f266bb62870d33b823", 'blake2b_512 (OO3/tripple_A)');
1627
1728
1829 is( blake2b_512(""), pack("H*","786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"), 'blake2b_512 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2s_128 qw( blake2s_128 blake2s_128_hex blake2s_128_b64 blake2s_128_b64u blake2s_128_file blake2s_128_file_hex blake2s_128_file_b64 blake2s_128_file_b64u );
1313 is( Crypt::Digest::BLAKE2s_128->hashsize, 16, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2s_128')->hashsize, 16, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2s_128->new->hashsize, 16, 'hashsize/6');
16
17 is( blake2s_128("A","A","A"), pack("H*","a2a5699c7579ee354f4d20fa75f09cb6"), 'blake2s_128 (raw/tripple_A)');
18 is( blake2s_128_hex("A","A","A"), "a2a5699c7579ee354f4d20fa75f09cb6", 'blake2s_128 (hex/tripple_A)');
19 is( blake2s_128_b64("A","A","A"), "oqVpnHV57jVPTSD6dfCctg==", 'blake2s_128 (base64/tripple_A)');
20 is( blake2s_128_b64u("A","A","A"), "oqVpnHV57jVPTSD6dfCctg", 'blake2s_128 (base64url/tripple_A)');
21 is( digest_data('BLAKE2s_128', "A","A","A"), pack("H*","a2a5699c7579ee354f4d20fa75f09cb6"), 'blake2s_128 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2s_128', "A","A","A"), "a2a5699c7579ee354f4d20fa75f09cb6", 'blake2s_128 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2s_128', "A","A","A"), "oqVpnHV57jVPTSD6dfCctg==", 'blake2s_128 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2s_128', "A","A","A"), "oqVpnHV57jVPTSD6dfCctg", 'blake2s_128 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2s_128->new->add("A","A","A")->hexdigest, "a2a5699c7579ee354f4d20fa75f09cb6", 'blake2s_128 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2s_128->new->add("A")->add("A")->add("A")->hexdigest, "a2a5699c7579ee354f4d20fa75f09cb6", 'blake2s_128 (OO3/tripple_A)');
1627
1728
1829 is( blake2s_128(""), pack("H*","64550d6ffe2c0a01a14aba1eade0200c"), 'blake2s_128 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2s_160 qw( blake2s_160 blake2s_160_hex blake2s_160_b64 blake2s_160_b64u blake2s_160_file blake2s_160_file_hex blake2s_160_file_b64 blake2s_160_file_b64u );
1313 is( Crypt::Digest::BLAKE2s_160->hashsize, 20, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2s_160')->hashsize, 20, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2s_160->new->hashsize, 20, 'hashsize/6');
16
17 is( blake2s_160("A","A","A"), pack("H*","f44c709aebd62a7a13bd6ee5979981970a60e117"), 'blake2s_160 (raw/tripple_A)');
18 is( blake2s_160_hex("A","A","A"), "f44c709aebd62a7a13bd6ee5979981970a60e117", 'blake2s_160 (hex/tripple_A)');
19 is( blake2s_160_b64("A","A","A"), "9ExwmuvWKnoTvW7ll5mBlwpg4Rc=", 'blake2s_160 (base64/tripple_A)');
20 is( blake2s_160_b64u("A","A","A"), "9ExwmuvWKnoTvW7ll5mBlwpg4Rc", 'blake2s_160 (base64url/tripple_A)');
21 is( digest_data('BLAKE2s_160', "A","A","A"), pack("H*","f44c709aebd62a7a13bd6ee5979981970a60e117"), 'blake2s_160 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2s_160', "A","A","A"), "f44c709aebd62a7a13bd6ee5979981970a60e117", 'blake2s_160 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2s_160', "A","A","A"), "9ExwmuvWKnoTvW7ll5mBlwpg4Rc=", 'blake2s_160 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2s_160', "A","A","A"), "9ExwmuvWKnoTvW7ll5mBlwpg4Rc", 'blake2s_160 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2s_160->new->add("A","A","A")->hexdigest, "f44c709aebd62a7a13bd6ee5979981970a60e117", 'blake2s_160 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2s_160->new->add("A")->add("A")->add("A")->hexdigest, "f44c709aebd62a7a13bd6ee5979981970a60e117", 'blake2s_160 (OO3/tripple_A)');
1627
1728
1829 is( blake2s_160(""), pack("H*","354c9c33f735962418bdacb9479873429c34916f"), 'blake2s_160 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2s_224 qw( blake2s_224 blake2s_224_hex blake2s_224_b64 blake2s_224_b64u blake2s_224_file blake2s_224_file_hex blake2s_224_file_b64 blake2s_224_file_b64u );
1313 is( Crypt::Digest::BLAKE2s_224->hashsize, 28, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2s_224')->hashsize, 28, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2s_224->new->hashsize, 28, 'hashsize/6');
16
17 is( blake2s_224("A","A","A"), pack("H*","8c2738e18d0b9645870d7da4b52756cef46c5f3d185f4ea93c361006"), 'blake2s_224 (raw/tripple_A)');
18 is( blake2s_224_hex("A","A","A"), "8c2738e18d0b9645870d7da4b52756cef46c5f3d185f4ea93c361006", 'blake2s_224 (hex/tripple_A)');
19 is( blake2s_224_b64("A","A","A"), "jCc44Y0LlkWHDX2ktSdWzvRsXz0YX06pPDYQBg==", 'blake2s_224 (base64/tripple_A)');
20 is( blake2s_224_b64u("A","A","A"), "jCc44Y0LlkWHDX2ktSdWzvRsXz0YX06pPDYQBg", 'blake2s_224 (base64url/tripple_A)');
21 is( digest_data('BLAKE2s_224', "A","A","A"), pack("H*","8c2738e18d0b9645870d7da4b52756cef46c5f3d185f4ea93c361006"), 'blake2s_224 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2s_224', "A","A","A"), "8c2738e18d0b9645870d7da4b52756cef46c5f3d185f4ea93c361006", 'blake2s_224 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2s_224', "A","A","A"), "jCc44Y0LlkWHDX2ktSdWzvRsXz0YX06pPDYQBg==", 'blake2s_224 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2s_224', "A","A","A"), "jCc44Y0LlkWHDX2ktSdWzvRsXz0YX06pPDYQBg", 'blake2s_224 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2s_224->new->add("A","A","A")->hexdigest, "8c2738e18d0b9645870d7da4b52756cef46c5f3d185f4ea93c361006", 'blake2s_224 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2s_224->new->add("A")->add("A")->add("A")->hexdigest, "8c2738e18d0b9645870d7da4b52756cef46c5f3d185f4ea93c361006", 'blake2s_224 (OO3/tripple_A)');
1627
1728
1829 is( blake2s_224(""), pack("H*","1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4"), 'blake2s_224 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::BLAKE2s_256 qw( blake2s_256 blake2s_256_hex blake2s_256_b64 blake2s_256_b64u blake2s_256_file blake2s_256_file_hex blake2s_256_file_b64 blake2s_256_file_b64u );
1313 is( Crypt::Digest::BLAKE2s_256->hashsize, 32, 'hashsize/4');
1414 is( Crypt::Digest->new('BLAKE2s_256')->hashsize, 32, 'hashsize/5');
1515 is( Crypt::Digest::BLAKE2s_256->new->hashsize, 32, 'hashsize/6');
16
17 is( blake2s_256("A","A","A"), pack("H*","8d4fe9f5368ff397ce7444640f522f090597591c21392262138da6750bf1dff6"), 'blake2s_256 (raw/tripple_A)');
18 is( blake2s_256_hex("A","A","A"), "8d4fe9f5368ff397ce7444640f522f090597591c21392262138da6750bf1dff6", 'blake2s_256 (hex/tripple_A)');
19 is( blake2s_256_b64("A","A","A"), "jU/p9TaP85fOdERkD1IvCQWXWRwhOSJiE42mdQvx3/Y=", 'blake2s_256 (base64/tripple_A)');
20 is( blake2s_256_b64u("A","A","A"), "jU_p9TaP85fOdERkD1IvCQWXWRwhOSJiE42mdQvx3_Y", 'blake2s_256 (base64url/tripple_A)');
21 is( digest_data('BLAKE2s_256', "A","A","A"), pack("H*","8d4fe9f5368ff397ce7444640f522f090597591c21392262138da6750bf1dff6"), 'blake2s_256 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('BLAKE2s_256', "A","A","A"), "8d4fe9f5368ff397ce7444640f522f090597591c21392262138da6750bf1dff6", 'blake2s_256 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('BLAKE2s_256', "A","A","A"), "jU/p9TaP85fOdERkD1IvCQWXWRwhOSJiE42mdQvx3/Y=", 'blake2s_256 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('BLAKE2s_256', "A","A","A"), "jU_p9TaP85fOdERkD1IvCQWXWRwhOSJiE42mdQvx3_Y", 'blake2s_256 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::BLAKE2s_256->new->add("A","A","A")->hexdigest, "8d4fe9f5368ff397ce7444640f522f090597591c21392262138da6750bf1dff6", 'blake2s_256 (OO/tripple_A)');
26 is( Crypt::Digest::BLAKE2s_256->new->add("A")->add("A")->add("A")->hexdigest, "8d4fe9f5368ff397ce7444640f522f090597591c21392262138da6750bf1dff6", 'blake2s_256 (OO3/tripple_A)');
1627
1728
1829 is( blake2s_256(""), pack("H*","69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9"), 'blake2s_256 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::CHAES qw( chaes chaes_hex chaes_b64 chaes_b64u chaes_file chaes_file_hex chaes_file_b64 chaes_file_b64u );
1313 is( Crypt::Digest::CHAES->hashsize, 16, 'hashsize/4');
1414 is( Crypt::Digest->new('CHAES')->hashsize, 16, 'hashsize/5');
1515 is( Crypt::Digest::CHAES->new->hashsize, 16, 'hashsize/6');
16
17 is( chaes("A","A","A"), pack("H*","f01416b4c3f6389816b2fcd0b4cf9e41"), 'chaes (raw/tripple_A)');
18 is( chaes_hex("A","A","A"), "f01416b4c3f6389816b2fcd0b4cf9e41", 'chaes (hex/tripple_A)');
19 is( chaes_b64("A","A","A"), "8BQWtMP2OJgWsvzQtM+eQQ==", 'chaes (base64/tripple_A)');
20 is( chaes_b64u("A","A","A"), "8BQWtMP2OJgWsvzQtM-eQQ", 'chaes (base64url/tripple_A)');
21 is( digest_data('CHAES', "A","A","A"), pack("H*","f01416b4c3f6389816b2fcd0b4cf9e41"), 'chaes (digest_data_raw/tripple_A)');
22 is( digest_data_hex('CHAES', "A","A","A"), "f01416b4c3f6389816b2fcd0b4cf9e41", 'chaes (digest_data_hex/tripple_A)');
23 is( digest_data_b64('CHAES', "A","A","A"), "8BQWtMP2OJgWsvzQtM+eQQ==", 'chaes (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('CHAES', "A","A","A"), "8BQWtMP2OJgWsvzQtM-eQQ", 'chaes (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::CHAES->new->add("A","A","A")->hexdigest, "f01416b4c3f6389816b2fcd0b4cf9e41", 'chaes (OO/tripple_A)');
26 is( Crypt::Digest::CHAES->new->add("A")->add("A")->add("A")->hexdigest, "f01416b4c3f6389816b2fcd0b4cf9e41", 'chaes (OO3/tripple_A)');
1627
1728
1829 is( chaes(""), pack("H*","4047929f1f572643b55f829eb3291d11"), 'chaes (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::MD2 qw( md2 md2_hex md2_b64 md2_b64u md2_file md2_file_hex md2_file_b64 md2_file_b64u );
1313 is( Crypt::Digest::MD2->hashsize, 16, 'hashsize/4');
1414 is( Crypt::Digest->new('MD2')->hashsize, 16, 'hashsize/5');
1515 is( Crypt::Digest::MD2->new->hashsize, 16, 'hashsize/6');
16
17 is( md2("A","A","A"), pack("H*","8788c1729761fdad983b830f04b19e86"), 'md2 (raw/tripple_A)');
18 is( md2_hex("A","A","A"), "8788c1729761fdad983b830f04b19e86", 'md2 (hex/tripple_A)');
19 is( md2_b64("A","A","A"), "h4jBcpdh/a2YO4MPBLGehg==", 'md2 (base64/tripple_A)');
20 is( md2_b64u("A","A","A"), "h4jBcpdh_a2YO4MPBLGehg", 'md2 (base64url/tripple_A)');
21 is( digest_data('MD2', "A","A","A"), pack("H*","8788c1729761fdad983b830f04b19e86"), 'md2 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('MD2', "A","A","A"), "8788c1729761fdad983b830f04b19e86", 'md2 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('MD2', "A","A","A"), "h4jBcpdh/a2YO4MPBLGehg==", 'md2 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('MD2', "A","A","A"), "h4jBcpdh_a2YO4MPBLGehg", 'md2 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::MD2->new->add("A","A","A")->hexdigest, "8788c1729761fdad983b830f04b19e86", 'md2 (OO/tripple_A)');
26 is( Crypt::Digest::MD2->new->add("A")->add("A")->add("A")->hexdigest, "8788c1729761fdad983b830f04b19e86", 'md2 (OO3/tripple_A)');
1627
1728
1829 is( md2(""), pack("H*","8350e5a3e24c153df2275c9f80692773"), 'md2 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::MD4 qw( md4 md4_hex md4_b64 md4_b64u md4_file md4_file_hex md4_file_b64 md4_file_b64u );
1313 is( Crypt::Digest::MD4->hashsize, 16, 'hashsize/4');
1414 is( Crypt::Digest->new('MD4')->hashsize, 16, 'hashsize/5');
1515 is( Crypt::Digest::MD4->new->hashsize, 16, 'hashsize/6');
16
17 is( md4("A","A","A"), pack("H*","17c3b38c112ac61c1f0d46555f379f14"), 'md4 (raw/tripple_A)');
18 is( md4_hex("A","A","A"), "17c3b38c112ac61c1f0d46555f379f14", 'md4 (hex/tripple_A)');
19 is( md4_b64("A","A","A"), "F8OzjBEqxhwfDUZVXzefFA==", 'md4 (base64/tripple_A)');
20 is( md4_b64u("A","A","A"), "F8OzjBEqxhwfDUZVXzefFA", 'md4 (base64url/tripple_A)');
21 is( digest_data('MD4', "A","A","A"), pack("H*","17c3b38c112ac61c1f0d46555f379f14"), 'md4 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('MD4', "A","A","A"), "17c3b38c112ac61c1f0d46555f379f14", 'md4 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('MD4', "A","A","A"), "F8OzjBEqxhwfDUZVXzefFA==", 'md4 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('MD4', "A","A","A"), "F8OzjBEqxhwfDUZVXzefFA", 'md4 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::MD4->new->add("A","A","A")->hexdigest, "17c3b38c112ac61c1f0d46555f379f14", 'md4 (OO/tripple_A)');
26 is( Crypt::Digest::MD4->new->add("A")->add("A")->add("A")->hexdigest, "17c3b38c112ac61c1f0d46555f379f14", 'md4 (OO3/tripple_A)');
1627
1728
1829 is( md4(""), pack("H*","31d6cfe0d16ae931b73c59d7e0c089c0"), 'md4 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::MD5 qw( md5 md5_hex md5_b64 md5_b64u md5_file md5_file_hex md5_file_b64 md5_file_b64u );
1313 is( Crypt::Digest::MD5->hashsize, 16, 'hashsize/4');
1414 is( Crypt::Digest->new('MD5')->hashsize, 16, 'hashsize/5');
1515 is( Crypt::Digest::MD5->new->hashsize, 16, 'hashsize/6');
16
17 is( md5("A","A","A"), pack("H*","e1faffb3e614e6c2fba74296962386b7"), 'md5 (raw/tripple_A)');
18 is( md5_hex("A","A","A"), "e1faffb3e614e6c2fba74296962386b7", 'md5 (hex/tripple_A)');
19 is( md5_b64("A","A","A"), "4fr/s+YU5sL7p0KWliOGtw==", 'md5 (base64/tripple_A)');
20 is( md5_b64u("A","A","A"), "4fr_s-YU5sL7p0KWliOGtw", 'md5 (base64url/tripple_A)');
21 is( digest_data('MD5', "A","A","A"), pack("H*","e1faffb3e614e6c2fba74296962386b7"), 'md5 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('MD5', "A","A","A"), "e1faffb3e614e6c2fba74296962386b7", 'md5 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('MD5', "A","A","A"), "4fr/s+YU5sL7p0KWliOGtw==", 'md5 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('MD5', "A","A","A"), "4fr_s-YU5sL7p0KWliOGtw", 'md5 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::MD5->new->add("A","A","A")->hexdigest, "e1faffb3e614e6c2fba74296962386b7", 'md5 (OO/tripple_A)');
26 is( Crypt::Digest::MD5->new->add("A")->add("A")->add("A")->hexdigest, "e1faffb3e614e6c2fba74296962386b7", 'md5 (OO3/tripple_A)');
1627
1728
1829 is( md5(""), pack("H*","d41d8cd98f00b204e9800998ecf8427e"), 'md5 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::RIPEMD128 qw( ripemd128 ripemd128_hex ripemd128_b64 ripemd128_b64u ripemd128_file ripemd128_file_hex ripemd128_file_b64 ripemd128_file_b64u );
1313 is( Crypt::Digest::RIPEMD128->hashsize, 16, 'hashsize/4');
1414 is( Crypt::Digest->new('RIPEMD128')->hashsize, 16, 'hashsize/5');
1515 is( Crypt::Digest::RIPEMD128->new->hashsize, 16, 'hashsize/6');
16
17 is( ripemd128("A","A","A"), pack("H*","c2750c6ca0c35d367de2993c3f55e1df"), 'ripemd128 (raw/tripple_A)');
18 is( ripemd128_hex("A","A","A"), "c2750c6ca0c35d367de2993c3f55e1df", 'ripemd128 (hex/tripple_A)');
19 is( ripemd128_b64("A","A","A"), "wnUMbKDDXTZ94pk8P1Xh3w==", 'ripemd128 (base64/tripple_A)');
20 is( ripemd128_b64u("A","A","A"), "wnUMbKDDXTZ94pk8P1Xh3w", 'ripemd128 (base64url/tripple_A)');
21 is( digest_data('RIPEMD128', "A","A","A"), pack("H*","c2750c6ca0c35d367de2993c3f55e1df"), 'ripemd128 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('RIPEMD128', "A","A","A"), "c2750c6ca0c35d367de2993c3f55e1df", 'ripemd128 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('RIPEMD128', "A","A","A"), "wnUMbKDDXTZ94pk8P1Xh3w==", 'ripemd128 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('RIPEMD128', "A","A","A"), "wnUMbKDDXTZ94pk8P1Xh3w", 'ripemd128 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::RIPEMD128->new->add("A","A","A")->hexdigest, "c2750c6ca0c35d367de2993c3f55e1df", 'ripemd128 (OO/tripple_A)');
26 is( Crypt::Digest::RIPEMD128->new->add("A")->add("A")->add("A")->hexdigest, "c2750c6ca0c35d367de2993c3f55e1df", 'ripemd128 (OO3/tripple_A)');
1627
1728
1829 is( ripemd128(""), pack("H*","cdf26213a150dc3ecb610f18f6b38b46"), 'ripemd128 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::RIPEMD160 qw( ripemd160 ripemd160_hex ripemd160_b64 ripemd160_b64u ripemd160_file ripemd160_file_hex ripemd160_file_b64 ripemd160_file_b64u );
1313 is( Crypt::Digest::RIPEMD160->hashsize, 20, 'hashsize/4');
1414 is( Crypt::Digest->new('RIPEMD160')->hashsize, 20, 'hashsize/5');
1515 is( Crypt::Digest::RIPEMD160->new->hashsize, 20, 'hashsize/6');
16
17 is( ripemd160("A","A","A"), pack("H*","e4e130acc1d2a5a63c17efb1eedbd02be28443d1"), 'ripemd160 (raw/tripple_A)');
18 is( ripemd160_hex("A","A","A"), "e4e130acc1d2a5a63c17efb1eedbd02be28443d1", 'ripemd160 (hex/tripple_A)');
19 is( ripemd160_b64("A","A","A"), "5OEwrMHSpaY8F++x7tvQK+KEQ9E=", 'ripemd160 (base64/tripple_A)');
20 is( ripemd160_b64u("A","A","A"), "5OEwrMHSpaY8F--x7tvQK-KEQ9E", 'ripemd160 (base64url/tripple_A)');
21 is( digest_data('RIPEMD160', "A","A","A"), pack("H*","e4e130acc1d2a5a63c17efb1eedbd02be28443d1"), 'ripemd160 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('RIPEMD160', "A","A","A"), "e4e130acc1d2a5a63c17efb1eedbd02be28443d1", 'ripemd160 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('RIPEMD160', "A","A","A"), "5OEwrMHSpaY8F++x7tvQK+KEQ9E=", 'ripemd160 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('RIPEMD160', "A","A","A"), "5OEwrMHSpaY8F--x7tvQK-KEQ9E", 'ripemd160 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::RIPEMD160->new->add("A","A","A")->hexdigest, "e4e130acc1d2a5a63c17efb1eedbd02be28443d1", 'ripemd160 (OO/tripple_A)');
26 is( Crypt::Digest::RIPEMD160->new->add("A")->add("A")->add("A")->hexdigest, "e4e130acc1d2a5a63c17efb1eedbd02be28443d1", 'ripemd160 (OO3/tripple_A)');
1627
1728
1829 is( ripemd160(""), pack("H*","9c1185a5c5e9fc54612808977ee8f548b2258d31"), 'ripemd160 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::RIPEMD256 qw( ripemd256 ripemd256_hex ripemd256_b64 ripemd256_b64u ripemd256_file ripemd256_file_hex ripemd256_file_b64 ripemd256_file_b64u );
1313 is( Crypt::Digest::RIPEMD256->hashsize, 32, 'hashsize/4');
1414 is( Crypt::Digest->new('RIPEMD256')->hashsize, 32, 'hashsize/5');
1515 is( Crypt::Digest::RIPEMD256->new->hashsize, 32, 'hashsize/6');
16
17 is( ripemd256("A","A","A"), pack("H*","0c976582631435d4fbc424758105a05a622ae27726f395774858d7ea2b2f5d82"), 'ripemd256 (raw/tripple_A)');
18 is( ripemd256_hex("A","A","A"), "0c976582631435d4fbc424758105a05a622ae27726f395774858d7ea2b2f5d82", 'ripemd256 (hex/tripple_A)');
19 is( ripemd256_b64("A","A","A"), "DJdlgmMUNdT7xCR1gQWgWmIq4ncm85V3SFjX6isvXYI=", 'ripemd256 (base64/tripple_A)');
20 is( ripemd256_b64u("A","A","A"), "DJdlgmMUNdT7xCR1gQWgWmIq4ncm85V3SFjX6isvXYI", 'ripemd256 (base64url/tripple_A)');
21 is( digest_data('RIPEMD256', "A","A","A"), pack("H*","0c976582631435d4fbc424758105a05a622ae27726f395774858d7ea2b2f5d82"), 'ripemd256 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('RIPEMD256', "A","A","A"), "0c976582631435d4fbc424758105a05a622ae27726f395774858d7ea2b2f5d82", 'ripemd256 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('RIPEMD256', "A","A","A"), "DJdlgmMUNdT7xCR1gQWgWmIq4ncm85V3SFjX6isvXYI=", 'ripemd256 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('RIPEMD256', "A","A","A"), "DJdlgmMUNdT7xCR1gQWgWmIq4ncm85V3SFjX6isvXYI", 'ripemd256 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::RIPEMD256->new->add("A","A","A")->hexdigest, "0c976582631435d4fbc424758105a05a622ae27726f395774858d7ea2b2f5d82", 'ripemd256 (OO/tripple_A)');
26 is( Crypt::Digest::RIPEMD256->new->add("A")->add("A")->add("A")->hexdigest, "0c976582631435d4fbc424758105a05a622ae27726f395774858d7ea2b2f5d82", 'ripemd256 (OO3/tripple_A)');
1627
1728
1829 is( ripemd256(""), pack("H*","02ba4c4e5f8ecd1877fc52d64d30e37a2d9774fb1e5d026380ae0168e3c5522d"), 'ripemd256 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::RIPEMD320 qw( ripemd320 ripemd320_hex ripemd320_b64 ripemd320_b64u ripemd320_file ripemd320_file_hex ripemd320_file_b64 ripemd320_file_b64u );
1313 is( Crypt::Digest::RIPEMD320->hashsize, 40, 'hashsize/4');
1414 is( Crypt::Digest->new('RIPEMD320')->hashsize, 40, 'hashsize/5');
1515 is( Crypt::Digest::RIPEMD320->new->hashsize, 40, 'hashsize/6');
16
17 is( ripemd320("A","A","A"), pack("H*","4cf34b2887f1dd1543fb0ce950bf155fb7c93c63d61adc67e858c1083fd54e4a7e1dab1b9b33ba60"), 'ripemd320 (raw/tripple_A)');
18 is( ripemd320_hex("A","A","A"), "4cf34b2887f1dd1543fb0ce950bf155fb7c93c63d61adc67e858c1083fd54e4a7e1dab1b9b33ba60", 'ripemd320 (hex/tripple_A)');
19 is( ripemd320_b64("A","A","A"), "TPNLKIfx3RVD+wzpUL8VX7fJPGPWGtxn6FjBCD/VTkp+HasbmzO6YA==", 'ripemd320 (base64/tripple_A)');
20 is( ripemd320_b64u("A","A","A"), "TPNLKIfx3RVD-wzpUL8VX7fJPGPWGtxn6FjBCD_VTkp-HasbmzO6YA", 'ripemd320 (base64url/tripple_A)');
21 is( digest_data('RIPEMD320', "A","A","A"), pack("H*","4cf34b2887f1dd1543fb0ce950bf155fb7c93c63d61adc67e858c1083fd54e4a7e1dab1b9b33ba60"), 'ripemd320 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('RIPEMD320', "A","A","A"), "4cf34b2887f1dd1543fb0ce950bf155fb7c93c63d61adc67e858c1083fd54e4a7e1dab1b9b33ba60", 'ripemd320 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('RIPEMD320', "A","A","A"), "TPNLKIfx3RVD+wzpUL8VX7fJPGPWGtxn6FjBCD/VTkp+HasbmzO6YA==", 'ripemd320 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('RIPEMD320', "A","A","A"), "TPNLKIfx3RVD-wzpUL8VX7fJPGPWGtxn6FjBCD_VTkp-HasbmzO6YA", 'ripemd320 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::RIPEMD320->new->add("A","A","A")->hexdigest, "4cf34b2887f1dd1543fb0ce950bf155fb7c93c63d61adc67e858c1083fd54e4a7e1dab1b9b33ba60", 'ripemd320 (OO/tripple_A)');
26 is( Crypt::Digest::RIPEMD320->new->add("A")->add("A")->add("A")->hexdigest, "4cf34b2887f1dd1543fb0ce950bf155fb7c93c63d61adc67e858c1083fd54e4a7e1dab1b9b33ba60", 'ripemd320 (OO3/tripple_A)');
1627
1728
1829 is( ripemd320(""), pack("H*","22d65d5661536cdc75c1fdf5c6de7b41b9f27325ebc61e8557177d705a0ec880151c3a32a00899b8"), 'ripemd320 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA1 qw( sha1 sha1_hex sha1_b64 sha1_b64u sha1_file sha1_file_hex sha1_file_b64 sha1_file_b64u );
1313 is( Crypt::Digest::SHA1->hashsize, 20, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA1')->hashsize, 20, 'hashsize/5');
1515 is( Crypt::Digest::SHA1->new->hashsize, 20, 'hashsize/6');
16
17 is( sha1("A","A","A"), pack("H*","606ec6e9bd8a8ff2ad14e5fade3f264471e82251"), 'sha1 (raw/tripple_A)');
18 is( sha1_hex("A","A","A"), "606ec6e9bd8a8ff2ad14e5fade3f264471e82251", 'sha1 (hex/tripple_A)');
19 is( sha1_b64("A","A","A"), "YG7G6b2Kj/KtFOX63j8mRHHoIlE=", 'sha1 (base64/tripple_A)');
20 is( sha1_b64u("A","A","A"), "YG7G6b2Kj_KtFOX63j8mRHHoIlE", 'sha1 (base64url/tripple_A)');
21 is( digest_data('SHA1', "A","A","A"), pack("H*","606ec6e9bd8a8ff2ad14e5fade3f264471e82251"), 'sha1 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA1', "A","A","A"), "606ec6e9bd8a8ff2ad14e5fade3f264471e82251", 'sha1 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA1', "A","A","A"), "YG7G6b2Kj/KtFOX63j8mRHHoIlE=", 'sha1 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA1', "A","A","A"), "YG7G6b2Kj_KtFOX63j8mRHHoIlE", 'sha1 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA1->new->add("A","A","A")->hexdigest, "606ec6e9bd8a8ff2ad14e5fade3f264471e82251", 'sha1 (OO/tripple_A)');
26 is( Crypt::Digest::SHA1->new->add("A")->add("A")->add("A")->hexdigest, "606ec6e9bd8a8ff2ad14e5fade3f264471e82251", 'sha1 (OO3/tripple_A)');
1627
1728
1829 is( sha1(""), pack("H*","da39a3ee5e6b4b0d3255bfef95601890afd80709"), 'sha1 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA224 qw( sha224 sha224_hex sha224_b64 sha224_b64u sha224_file sha224_file_hex sha224_file_b64 sha224_file_b64u );
1313 is( Crypt::Digest::SHA224->hashsize, 28, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA224')->hashsize, 28, 'hashsize/5');
1515 is( Crypt::Digest::SHA224->new->hashsize, 28, 'hashsize/6');
16
17 is( sha224("A","A","A"), pack("H*","808751af5f7936f20d1c79508d98c079e42ec26802ee238a5a486018"), 'sha224 (raw/tripple_A)');
18 is( sha224_hex("A","A","A"), "808751af5f7936f20d1c79508d98c079e42ec26802ee238a5a486018", 'sha224 (hex/tripple_A)');
19 is( sha224_b64("A","A","A"), "gIdRr195NvINHHlQjZjAeeQuwmgC7iOKWkhgGA==", 'sha224 (base64/tripple_A)');
20 is( sha224_b64u("A","A","A"), "gIdRr195NvINHHlQjZjAeeQuwmgC7iOKWkhgGA", 'sha224 (base64url/tripple_A)');
21 is( digest_data('SHA224', "A","A","A"), pack("H*","808751af5f7936f20d1c79508d98c079e42ec26802ee238a5a486018"), 'sha224 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA224', "A","A","A"), "808751af5f7936f20d1c79508d98c079e42ec26802ee238a5a486018", 'sha224 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA224', "A","A","A"), "gIdRr195NvINHHlQjZjAeeQuwmgC7iOKWkhgGA==", 'sha224 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA224', "A","A","A"), "gIdRr195NvINHHlQjZjAeeQuwmgC7iOKWkhgGA", 'sha224 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA224->new->add("A","A","A")->hexdigest, "808751af5f7936f20d1c79508d98c079e42ec26802ee238a5a486018", 'sha224 (OO/tripple_A)');
26 is( Crypt::Digest::SHA224->new->add("A")->add("A")->add("A")->hexdigest, "808751af5f7936f20d1c79508d98c079e42ec26802ee238a5a486018", 'sha224 (OO3/tripple_A)');
1627
1728
1829 is( sha224(""), pack("H*","d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f"), 'sha224 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA256 qw( sha256 sha256_hex sha256_b64 sha256_b64u sha256_file sha256_file_hex sha256_file_b64 sha256_file_b64u );
1313 is( Crypt::Digest::SHA256->hashsize, 32, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA256')->hashsize, 32, 'hashsize/5');
1515 is( Crypt::Digest::SHA256->new->hashsize, 32, 'hashsize/6');
16
17 is( sha256("A","A","A"), pack("H*","cb1ad2119d8fafb69566510ee712661f9f14b83385006ef92aec47f523a38358"), 'sha256 (raw/tripple_A)');
18 is( sha256_hex("A","A","A"), "cb1ad2119d8fafb69566510ee712661f9f14b83385006ef92aec47f523a38358", 'sha256 (hex/tripple_A)');
19 is( sha256_b64("A","A","A"), "yxrSEZ2Pr7aVZlEO5xJmH58UuDOFAG75KuxH9SOjg1g=", 'sha256 (base64/tripple_A)');
20 is( sha256_b64u("A","A","A"), "yxrSEZ2Pr7aVZlEO5xJmH58UuDOFAG75KuxH9SOjg1g", 'sha256 (base64url/tripple_A)');
21 is( digest_data('SHA256', "A","A","A"), pack("H*","cb1ad2119d8fafb69566510ee712661f9f14b83385006ef92aec47f523a38358"), 'sha256 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA256', "A","A","A"), "cb1ad2119d8fafb69566510ee712661f9f14b83385006ef92aec47f523a38358", 'sha256 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA256', "A","A","A"), "yxrSEZ2Pr7aVZlEO5xJmH58UuDOFAG75KuxH9SOjg1g=", 'sha256 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA256', "A","A","A"), "yxrSEZ2Pr7aVZlEO5xJmH58UuDOFAG75KuxH9SOjg1g", 'sha256 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA256->new->add("A","A","A")->hexdigest, "cb1ad2119d8fafb69566510ee712661f9f14b83385006ef92aec47f523a38358", 'sha256 (OO/tripple_A)');
26 is( Crypt::Digest::SHA256->new->add("A")->add("A")->add("A")->hexdigest, "cb1ad2119d8fafb69566510ee712661f9f14b83385006ef92aec47f523a38358", 'sha256 (OO3/tripple_A)');
1627
1728
1829 is( sha256(""), pack("H*","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"), 'sha256 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA384 qw( sha384 sha384_hex sha384_b64 sha384_b64u sha384_file sha384_file_hex sha384_file_b64 sha384_file_b64u );
1313 is( Crypt::Digest::SHA384->hashsize, 48, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA384')->hashsize, 48, 'hashsize/5');
1515 is( Crypt::Digest::SHA384->new->hashsize, 48, 'hashsize/6');
16
17 is( sha384("A","A","A"), pack("H*","8a5b7c19bcd1704d521f86b9618d86de0ed48fa29711ad4d16230f7d26b36111beaf7fefe8b3be7a17ce0e140ca002fe"), 'sha384 (raw/tripple_A)');
18 is( sha384_hex("A","A","A"), "8a5b7c19bcd1704d521f86b9618d86de0ed48fa29711ad4d16230f7d26b36111beaf7fefe8b3be7a17ce0e140ca002fe", 'sha384 (hex/tripple_A)');
19 is( sha384_b64("A","A","A"), "ilt8GbzRcE1SH4a5YY2G3g7Uj6KXEa1NFiMPfSazYRG+r3/v6LO+ehfODhQMoAL+", 'sha384 (base64/tripple_A)');
20 is( sha384_b64u("A","A","A"), "ilt8GbzRcE1SH4a5YY2G3g7Uj6KXEa1NFiMPfSazYRG-r3_v6LO-ehfODhQMoAL-", 'sha384 (base64url/tripple_A)');
21 is( digest_data('SHA384', "A","A","A"), pack("H*","8a5b7c19bcd1704d521f86b9618d86de0ed48fa29711ad4d16230f7d26b36111beaf7fefe8b3be7a17ce0e140ca002fe"), 'sha384 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA384', "A","A","A"), "8a5b7c19bcd1704d521f86b9618d86de0ed48fa29711ad4d16230f7d26b36111beaf7fefe8b3be7a17ce0e140ca002fe", 'sha384 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA384', "A","A","A"), "ilt8GbzRcE1SH4a5YY2G3g7Uj6KXEa1NFiMPfSazYRG+r3/v6LO+ehfODhQMoAL+", 'sha384 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA384', "A","A","A"), "ilt8GbzRcE1SH4a5YY2G3g7Uj6KXEa1NFiMPfSazYRG-r3_v6LO-ehfODhQMoAL-", 'sha384 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA384->new->add("A","A","A")->hexdigest, "8a5b7c19bcd1704d521f86b9618d86de0ed48fa29711ad4d16230f7d26b36111beaf7fefe8b3be7a17ce0e140ca002fe", 'sha384 (OO/tripple_A)');
26 is( Crypt::Digest::SHA384->new->add("A")->add("A")->add("A")->hexdigest, "8a5b7c19bcd1704d521f86b9618d86de0ed48fa29711ad4d16230f7d26b36111beaf7fefe8b3be7a17ce0e140ca002fe", 'sha384 (OO3/tripple_A)');
1627
1728
1829 is( sha384(""), pack("H*","38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b"), 'sha384 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA3_224 qw( sha3_224 sha3_224_hex sha3_224_b64 sha3_224_b64u sha3_224_file sha3_224_file_hex sha3_224_file_b64 sha3_224_file_b64u );
1313 is( Crypt::Digest::SHA3_224->hashsize, 28, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA3_224')->hashsize, 28, 'hashsize/5');
1515 is( Crypt::Digest::SHA3_224->new->hashsize, 28, 'hashsize/6');
16
17 is( sha3_224("A","A","A"), pack("H*","c09d5af7d9a021c484041218f3c3787fd4274b64ffd012edca0fe55b"), 'sha3_224 (raw/tripple_A)');
18 is( sha3_224_hex("A","A","A"), "c09d5af7d9a021c484041218f3c3787fd4274b64ffd012edca0fe55b", 'sha3_224 (hex/tripple_A)');
19 is( sha3_224_b64("A","A","A"), "wJ1a99mgIcSEBBIY88N4f9QnS2T/0BLtyg/lWw==", 'sha3_224 (base64/tripple_A)');
20 is( sha3_224_b64u("A","A","A"), "wJ1a99mgIcSEBBIY88N4f9QnS2T_0BLtyg_lWw", 'sha3_224 (base64url/tripple_A)');
21 is( digest_data('SHA3_224', "A","A","A"), pack("H*","c09d5af7d9a021c484041218f3c3787fd4274b64ffd012edca0fe55b"), 'sha3_224 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA3_224', "A","A","A"), "c09d5af7d9a021c484041218f3c3787fd4274b64ffd012edca0fe55b", 'sha3_224 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA3_224', "A","A","A"), "wJ1a99mgIcSEBBIY88N4f9QnS2T/0BLtyg/lWw==", 'sha3_224 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA3_224', "A","A","A"), "wJ1a99mgIcSEBBIY88N4f9QnS2T_0BLtyg_lWw", 'sha3_224 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA3_224->new->add("A","A","A")->hexdigest, "c09d5af7d9a021c484041218f3c3787fd4274b64ffd012edca0fe55b", 'sha3_224 (OO/tripple_A)');
26 is( Crypt::Digest::SHA3_224->new->add("A")->add("A")->add("A")->hexdigest, "c09d5af7d9a021c484041218f3c3787fd4274b64ffd012edca0fe55b", 'sha3_224 (OO3/tripple_A)');
1627
1728
1829 is( sha3_224(""), pack("H*","6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7"), 'sha3_224 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA3_256 qw( sha3_256 sha3_256_hex sha3_256_b64 sha3_256_b64u sha3_256_file sha3_256_file_hex sha3_256_file_b64 sha3_256_file_b64u );
1313 is( Crypt::Digest::SHA3_256->hashsize, 32, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA3_256')->hashsize, 32, 'hashsize/5');
1515 is( Crypt::Digest::SHA3_256->new->hashsize, 32, 'hashsize/6');
16
17 is( sha3_256("A","A","A"), pack("H*","7dcb827a1f5a7cbea423e763a7dd0c7824e3512c7f1ce48cd5710f603b4f1efa"), 'sha3_256 (raw/tripple_A)');
18 is( sha3_256_hex("A","A","A"), "7dcb827a1f5a7cbea423e763a7dd0c7824e3512c7f1ce48cd5710f603b4f1efa", 'sha3_256 (hex/tripple_A)');
19 is( sha3_256_b64("A","A","A"), "fcuCeh9afL6kI+djp90MeCTjUSx/HOSM1XEPYDtPHvo=", 'sha3_256 (base64/tripple_A)');
20 is( sha3_256_b64u("A","A","A"), "fcuCeh9afL6kI-djp90MeCTjUSx_HOSM1XEPYDtPHvo", 'sha3_256 (base64url/tripple_A)');
21 is( digest_data('SHA3_256', "A","A","A"), pack("H*","7dcb827a1f5a7cbea423e763a7dd0c7824e3512c7f1ce48cd5710f603b4f1efa"), 'sha3_256 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA3_256', "A","A","A"), "7dcb827a1f5a7cbea423e763a7dd0c7824e3512c7f1ce48cd5710f603b4f1efa", 'sha3_256 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA3_256', "A","A","A"), "fcuCeh9afL6kI+djp90MeCTjUSx/HOSM1XEPYDtPHvo=", 'sha3_256 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA3_256', "A","A","A"), "fcuCeh9afL6kI-djp90MeCTjUSx_HOSM1XEPYDtPHvo", 'sha3_256 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA3_256->new->add("A","A","A")->hexdigest, "7dcb827a1f5a7cbea423e763a7dd0c7824e3512c7f1ce48cd5710f603b4f1efa", 'sha3_256 (OO/tripple_A)');
26 is( Crypt::Digest::SHA3_256->new->add("A")->add("A")->add("A")->hexdigest, "7dcb827a1f5a7cbea423e763a7dd0c7824e3512c7f1ce48cd5710f603b4f1efa", 'sha3_256 (OO3/tripple_A)');
1627
1728
1829 is( sha3_256(""), pack("H*","a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a"), 'sha3_256 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA3_384 qw( sha3_384 sha3_384_hex sha3_384_b64 sha3_384_b64u sha3_384_file sha3_384_file_hex sha3_384_file_b64 sha3_384_file_b64u );
1313 is( Crypt::Digest::SHA3_384->hashsize, 48, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA3_384')->hashsize, 48, 'hashsize/5');
1515 is( Crypt::Digest::SHA3_384->new->hashsize, 48, 'hashsize/6');
16
17 is( sha3_384("A","A","A"), pack("H*","3555ed8a634b235fb07a691e1934b3e81228c859bc1c17acdebb4bab82cd63f06e17caed585533b4615bc6e3fb2e0bc4"), 'sha3_384 (raw/tripple_A)');
18 is( sha3_384_hex("A","A","A"), "3555ed8a634b235fb07a691e1934b3e81228c859bc1c17acdebb4bab82cd63f06e17caed585533b4615bc6e3fb2e0bc4", 'sha3_384 (hex/tripple_A)');
19 is( sha3_384_b64("A","A","A"), "NVXtimNLI1+wemkeGTSz6BIoyFm8HBes3rtLq4LNY/BuF8rtWFUztGFbxuP7LgvE", 'sha3_384 (base64/tripple_A)');
20 is( sha3_384_b64u("A","A","A"), "NVXtimNLI1-wemkeGTSz6BIoyFm8HBes3rtLq4LNY_BuF8rtWFUztGFbxuP7LgvE", 'sha3_384 (base64url/tripple_A)');
21 is( digest_data('SHA3_384', "A","A","A"), pack("H*","3555ed8a634b235fb07a691e1934b3e81228c859bc1c17acdebb4bab82cd63f06e17caed585533b4615bc6e3fb2e0bc4"), 'sha3_384 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA3_384', "A","A","A"), "3555ed8a634b235fb07a691e1934b3e81228c859bc1c17acdebb4bab82cd63f06e17caed585533b4615bc6e3fb2e0bc4", 'sha3_384 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA3_384', "A","A","A"), "NVXtimNLI1+wemkeGTSz6BIoyFm8HBes3rtLq4LNY/BuF8rtWFUztGFbxuP7LgvE", 'sha3_384 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA3_384', "A","A","A"), "NVXtimNLI1-wemkeGTSz6BIoyFm8HBes3rtLq4LNY_BuF8rtWFUztGFbxuP7LgvE", 'sha3_384 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA3_384->new->add("A","A","A")->hexdigest, "3555ed8a634b235fb07a691e1934b3e81228c859bc1c17acdebb4bab82cd63f06e17caed585533b4615bc6e3fb2e0bc4", 'sha3_384 (OO/tripple_A)');
26 is( Crypt::Digest::SHA3_384->new->add("A")->add("A")->add("A")->hexdigest, "3555ed8a634b235fb07a691e1934b3e81228c859bc1c17acdebb4bab82cd63f06e17caed585533b4615bc6e3fb2e0bc4", 'sha3_384 (OO3/tripple_A)');
1627
1728
1829 is( sha3_384(""), pack("H*","0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004"), 'sha3_384 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA3_512 qw( sha3_512 sha3_512_hex sha3_512_b64 sha3_512_b64u sha3_512_file sha3_512_file_hex sha3_512_file_b64 sha3_512_file_b64u );
1313 is( Crypt::Digest::SHA3_512->hashsize, 64, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA3_512')->hashsize, 64, 'hashsize/5');
1515 is( Crypt::Digest::SHA3_512->new->hashsize, 64, 'hashsize/6');
16
17 is( sha3_512("A","A","A"), pack("H*","852cf44eb8d38715c847976b6de526564136d756fa99b4ad5a825fd6e3ba5d891c7b4576b11410a6e951fffa3399b14be1da4222d53b5a35ff236d659899e857"), 'sha3_512 (raw/tripple_A)');
18 is( sha3_512_hex("A","A","A"), "852cf44eb8d38715c847976b6de526564136d756fa99b4ad5a825fd6e3ba5d891c7b4576b11410a6e951fffa3399b14be1da4222d53b5a35ff236d659899e857", 'sha3_512 (hex/tripple_A)');
19 is( sha3_512_b64("A","A","A"), "hSz0TrjThxXIR5drbeUmVkE211b6mbStWoJf1uO6XYkce0V2sRQQpulR//ozmbFL4dpCItU7WjX/I21lmJnoVw==", 'sha3_512 (base64/tripple_A)');
20 is( sha3_512_b64u("A","A","A"), "hSz0TrjThxXIR5drbeUmVkE211b6mbStWoJf1uO6XYkce0V2sRQQpulR__ozmbFL4dpCItU7WjX_I21lmJnoVw", 'sha3_512 (base64url/tripple_A)');
21 is( digest_data('SHA3_512', "A","A","A"), pack("H*","852cf44eb8d38715c847976b6de526564136d756fa99b4ad5a825fd6e3ba5d891c7b4576b11410a6e951fffa3399b14be1da4222d53b5a35ff236d659899e857"), 'sha3_512 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA3_512', "A","A","A"), "852cf44eb8d38715c847976b6de526564136d756fa99b4ad5a825fd6e3ba5d891c7b4576b11410a6e951fffa3399b14be1da4222d53b5a35ff236d659899e857", 'sha3_512 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA3_512', "A","A","A"), "hSz0TrjThxXIR5drbeUmVkE211b6mbStWoJf1uO6XYkce0V2sRQQpulR//ozmbFL4dpCItU7WjX/I21lmJnoVw==", 'sha3_512 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA3_512', "A","A","A"), "hSz0TrjThxXIR5drbeUmVkE211b6mbStWoJf1uO6XYkce0V2sRQQpulR__ozmbFL4dpCItU7WjX_I21lmJnoVw", 'sha3_512 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA3_512->new->add("A","A","A")->hexdigest, "852cf44eb8d38715c847976b6de526564136d756fa99b4ad5a825fd6e3ba5d891c7b4576b11410a6e951fffa3399b14be1da4222d53b5a35ff236d659899e857", 'sha3_512 (OO/tripple_A)');
26 is( Crypt::Digest::SHA3_512->new->add("A")->add("A")->add("A")->hexdigest, "852cf44eb8d38715c847976b6de526564136d756fa99b4ad5a825fd6e3ba5d891c7b4576b11410a6e951fffa3399b14be1da4222d53b5a35ff236d659899e857", 'sha3_512 (OO3/tripple_A)');
1627
1728
1829 is( sha3_512(""), pack("H*","a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26"), 'sha3_512 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA512 qw( sha512 sha512_hex sha512_b64 sha512_b64u sha512_file sha512_file_hex sha512_file_b64 sha512_file_b64u );
1313 is( Crypt::Digest::SHA512->hashsize, 64, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA512')->hashsize, 64, 'hashsize/5');
1515 is( Crypt::Digest::SHA512->new->hashsize, 64, 'hashsize/6');
16
17 is( sha512("A","A","A"), pack("H*","8d708d18b54df3962d696f069ad42dad7762b5d4d3c97ee5fa2dae0673ed46545164c078b8db3d59c4b96020e4316f17bb3d91bf1f6bc0896bbe75416eb8c385"), 'sha512 (raw/tripple_A)');
18 is( sha512_hex("A","A","A"), "8d708d18b54df3962d696f069ad42dad7762b5d4d3c97ee5fa2dae0673ed46545164c078b8db3d59c4b96020e4316f17bb3d91bf1f6bc0896bbe75416eb8c385", 'sha512 (hex/tripple_A)');
19 is( sha512_b64("A","A","A"), "jXCNGLVN85YtaW8GmtQtrXditdTTyX7l+i2uBnPtRlRRZMB4uNs9WcS5YCDkMW8Xuz2Rvx9rwIlrvnVBbrjDhQ==", 'sha512 (base64/tripple_A)');
20 is( sha512_b64u("A","A","A"), "jXCNGLVN85YtaW8GmtQtrXditdTTyX7l-i2uBnPtRlRRZMB4uNs9WcS5YCDkMW8Xuz2Rvx9rwIlrvnVBbrjDhQ", 'sha512 (base64url/tripple_A)');
21 is( digest_data('SHA512', "A","A","A"), pack("H*","8d708d18b54df3962d696f069ad42dad7762b5d4d3c97ee5fa2dae0673ed46545164c078b8db3d59c4b96020e4316f17bb3d91bf1f6bc0896bbe75416eb8c385"), 'sha512 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA512', "A","A","A"), "8d708d18b54df3962d696f069ad42dad7762b5d4d3c97ee5fa2dae0673ed46545164c078b8db3d59c4b96020e4316f17bb3d91bf1f6bc0896bbe75416eb8c385", 'sha512 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA512', "A","A","A"), "jXCNGLVN85YtaW8GmtQtrXditdTTyX7l+i2uBnPtRlRRZMB4uNs9WcS5YCDkMW8Xuz2Rvx9rwIlrvnVBbrjDhQ==", 'sha512 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA512', "A","A","A"), "jXCNGLVN85YtaW8GmtQtrXditdTTyX7l-i2uBnPtRlRRZMB4uNs9WcS5YCDkMW8Xuz2Rvx9rwIlrvnVBbrjDhQ", 'sha512 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA512->new->add("A","A","A")->hexdigest, "8d708d18b54df3962d696f069ad42dad7762b5d4d3c97ee5fa2dae0673ed46545164c078b8db3d59c4b96020e4316f17bb3d91bf1f6bc0896bbe75416eb8c385", 'sha512 (OO/tripple_A)');
26 is( Crypt::Digest::SHA512->new->add("A")->add("A")->add("A")->hexdigest, "8d708d18b54df3962d696f069ad42dad7762b5d4d3c97ee5fa2dae0673ed46545164c078b8db3d59c4b96020e4316f17bb3d91bf1f6bc0896bbe75416eb8c385", 'sha512 (OO3/tripple_A)');
1627
1728
1829 is( sha512(""), pack("H*","cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"), 'sha512 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA512_224 qw( sha512_224 sha512_224_hex sha512_224_b64 sha512_224_b64u sha512_224_file sha512_224_file_hex sha512_224_file_b64 sha512_224_file_b64u );
1313 is( Crypt::Digest::SHA512_224->hashsize, 28, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA512_224')->hashsize, 28, 'hashsize/5');
1515 is( Crypt::Digest::SHA512_224->new->hashsize, 28, 'hashsize/6');
16
17 is( sha512_224("A","A","A"), pack("H*","3d5a0b742f4c61d315c6ce86457a9fa30903880d30558c68ce4713b3"), 'sha512_224 (raw/tripple_A)');
18 is( sha512_224_hex("A","A","A"), "3d5a0b742f4c61d315c6ce86457a9fa30903880d30558c68ce4713b3", 'sha512_224 (hex/tripple_A)');
19 is( sha512_224_b64("A","A","A"), "PVoLdC9MYdMVxs6GRXqfowkDiA0wVYxozkcTsw==", 'sha512_224 (base64/tripple_A)');
20 is( sha512_224_b64u("A","A","A"), "PVoLdC9MYdMVxs6GRXqfowkDiA0wVYxozkcTsw", 'sha512_224 (base64url/tripple_A)');
21 is( digest_data('SHA512_224', "A","A","A"), pack("H*","3d5a0b742f4c61d315c6ce86457a9fa30903880d30558c68ce4713b3"), 'sha512_224 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA512_224', "A","A","A"), "3d5a0b742f4c61d315c6ce86457a9fa30903880d30558c68ce4713b3", 'sha512_224 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA512_224', "A","A","A"), "PVoLdC9MYdMVxs6GRXqfowkDiA0wVYxozkcTsw==", 'sha512_224 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA512_224', "A","A","A"), "PVoLdC9MYdMVxs6GRXqfowkDiA0wVYxozkcTsw", 'sha512_224 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA512_224->new->add("A","A","A")->hexdigest, "3d5a0b742f4c61d315c6ce86457a9fa30903880d30558c68ce4713b3", 'sha512_224 (OO/tripple_A)');
26 is( Crypt::Digest::SHA512_224->new->add("A")->add("A")->add("A")->hexdigest, "3d5a0b742f4c61d315c6ce86457a9fa30903880d30558c68ce4713b3", 'sha512_224 (OO3/tripple_A)');
1627
1728
1829 is( sha512_224(""), pack("H*","6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4"), 'sha512_224 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::SHA512_256 qw( sha512_256 sha512_256_hex sha512_256_b64 sha512_256_b64u sha512_256_file sha512_256_file_hex sha512_256_file_b64 sha512_256_file_b64u );
1313 is( Crypt::Digest::SHA512_256->hashsize, 32, 'hashsize/4');
1414 is( Crypt::Digest->new('SHA512_256')->hashsize, 32, 'hashsize/5');
1515 is( Crypt::Digest::SHA512_256->new->hashsize, 32, 'hashsize/6');
16
17 is( sha512_256("A","A","A"), pack("H*","b28a62969d8b9b02297ba615c485be2dffef907ca419c2a494004026d6c4bdf4"), 'sha512_256 (raw/tripple_A)');
18 is( sha512_256_hex("A","A","A"), "b28a62969d8b9b02297ba615c485be2dffef907ca419c2a494004026d6c4bdf4", 'sha512_256 (hex/tripple_A)');
19 is( sha512_256_b64("A","A","A"), "sopilp2LmwIpe6YVxIW+Lf/vkHykGcKklABAJtbEvfQ=", 'sha512_256 (base64/tripple_A)');
20 is( sha512_256_b64u("A","A","A"), "sopilp2LmwIpe6YVxIW-Lf_vkHykGcKklABAJtbEvfQ", 'sha512_256 (base64url/tripple_A)');
21 is( digest_data('SHA512_256', "A","A","A"), pack("H*","b28a62969d8b9b02297ba615c485be2dffef907ca419c2a494004026d6c4bdf4"), 'sha512_256 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('SHA512_256', "A","A","A"), "b28a62969d8b9b02297ba615c485be2dffef907ca419c2a494004026d6c4bdf4", 'sha512_256 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('SHA512_256', "A","A","A"), "sopilp2LmwIpe6YVxIW+Lf/vkHykGcKklABAJtbEvfQ=", 'sha512_256 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('SHA512_256', "A","A","A"), "sopilp2LmwIpe6YVxIW-Lf_vkHykGcKklABAJtbEvfQ", 'sha512_256 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::SHA512_256->new->add("A","A","A")->hexdigest, "b28a62969d8b9b02297ba615c485be2dffef907ca419c2a494004026d6c4bdf4", 'sha512_256 (OO/tripple_A)');
26 is( Crypt::Digest::SHA512_256->new->add("A")->add("A")->add("A")->hexdigest, "b28a62969d8b9b02297ba615c485be2dffef907ca419c2a494004026d6c4bdf4", 'sha512_256 (OO3/tripple_A)');
1627
1728
1829 is( sha512_256(""), pack("H*","c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a"), 'sha512_256 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::Tiger192 qw( tiger192 tiger192_hex tiger192_b64 tiger192_b64u tiger192_file tiger192_file_hex tiger192_file_b64 tiger192_file_b64u );
1313 is( Crypt::Digest::Tiger192->hashsize, 24, 'hashsize/4');
1414 is( Crypt::Digest->new('Tiger192')->hashsize, 24, 'hashsize/5');
1515 is( Crypt::Digest::Tiger192->new->hashsize, 24, 'hashsize/6');
16
17 is( tiger192("A","A","A"), pack("H*","04682253acc4e609201422ad50ad6be2c51cf1698b0a41c9"), 'tiger192 (raw/tripple_A)');
18 is( tiger192_hex("A","A","A"), "04682253acc4e609201422ad50ad6be2c51cf1698b0a41c9", 'tiger192 (hex/tripple_A)');
19 is( tiger192_b64("A","A","A"), "BGgiU6zE5gkgFCKtUK1r4sUc8WmLCkHJ", 'tiger192 (base64/tripple_A)');
20 is( tiger192_b64u("A","A","A"), "BGgiU6zE5gkgFCKtUK1r4sUc8WmLCkHJ", 'tiger192 (base64url/tripple_A)');
21 is( digest_data('Tiger192', "A","A","A"), pack("H*","04682253acc4e609201422ad50ad6be2c51cf1698b0a41c9"), 'tiger192 (digest_data_raw/tripple_A)');
22 is( digest_data_hex('Tiger192', "A","A","A"), "04682253acc4e609201422ad50ad6be2c51cf1698b0a41c9", 'tiger192 (digest_data_hex/tripple_A)');
23 is( digest_data_b64('Tiger192', "A","A","A"), "BGgiU6zE5gkgFCKtUK1r4sUc8WmLCkHJ", 'tiger192 (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('Tiger192', "A","A","A"), "BGgiU6zE5gkgFCKtUK1r4sUc8WmLCkHJ", 'tiger192 (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::Tiger192->new->add("A","A","A")->hexdigest, "04682253acc4e609201422ad50ad6be2c51cf1698b0a41c9", 'tiger192 (OO/tripple_A)');
26 is( Crypt::Digest::Tiger192->new->add("A")->add("A")->add("A")->hexdigest, "04682253acc4e609201422ad50ad6be2c51cf1698b0a41c9", 'tiger192 (OO3/tripple_A)');
1627
1728
1829 is( tiger192(""), pack("H*","3293ac630c13f0245f92bbb1766e16167a4e58492dde73f3"), 'tiger192 (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 8*3 + 9*4 + 6;
5 use Test::More tests => 8*3 + 9*4 + 10 + 6;
66
77 use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u );
88 use Crypt::Digest::Whirlpool qw( whirlpool whirlpool_hex whirlpool_b64 whirlpool_b64u whirlpool_file whirlpool_file_hex whirlpool_file_b64 whirlpool_file_b64u );
1313 is( Crypt::Digest::Whirlpool->hashsize, 64, 'hashsize/4');
1414 is( Crypt::Digest->new('Whirlpool')->hashsize, 64, 'hashsize/5');
1515 is( Crypt::Digest::Whirlpool->new->hashsize, 64, 'hashsize/6');
16
17 is( whirlpool("A","A","A"), pack("H*","a4dea38c743f318db7169e28ac27aff173942b67b56f9881da464bdac48f47cc481ee29746557cf013d1c54c7a76912c1380b168251df7118293511fd89a9a64"), 'whirlpool (raw/tripple_A)');
18 is( whirlpool_hex("A","A","A"), "a4dea38c743f318db7169e28ac27aff173942b67b56f9881da464bdac48f47cc481ee29746557cf013d1c54c7a76912c1380b168251df7118293511fd89a9a64", 'whirlpool (hex/tripple_A)');
19 is( whirlpool_b64("A","A","A"), "pN6jjHQ/MY23Fp4orCev8XOUK2e1b5iB2kZL2sSPR8xIHuKXRlV88BPRxUx6dpEsE4CxaCUd9xGCk1Ef2JqaZA==", 'whirlpool (base64/tripple_A)');
20 is( whirlpool_b64u("A","A","A"), "pN6jjHQ_MY23Fp4orCev8XOUK2e1b5iB2kZL2sSPR8xIHuKXRlV88BPRxUx6dpEsE4CxaCUd9xGCk1Ef2JqaZA", 'whirlpool (base64url/tripple_A)');
21 is( digest_data('Whirlpool', "A","A","A"), pack("H*","a4dea38c743f318db7169e28ac27aff173942b67b56f9881da464bdac48f47cc481ee29746557cf013d1c54c7a76912c1380b168251df7118293511fd89a9a64"), 'whirlpool (digest_data_raw/tripple_A)');
22 is( digest_data_hex('Whirlpool', "A","A","A"), "a4dea38c743f318db7169e28ac27aff173942b67b56f9881da464bdac48f47cc481ee29746557cf013d1c54c7a76912c1380b168251df7118293511fd89a9a64", 'whirlpool (digest_data_hex/tripple_A)');
23 is( digest_data_b64('Whirlpool', "A","A","A"), "pN6jjHQ/MY23Fp4orCev8XOUK2e1b5iB2kZL2sSPR8xIHuKXRlV88BPRxUx6dpEsE4CxaCUd9xGCk1Ef2JqaZA==", 'whirlpool (digest_data_b64/tripple_A)');
24 is( digest_data_b64u('Whirlpool', "A","A","A"), "pN6jjHQ_MY23Fp4orCev8XOUK2e1b5iB2kZL2sSPR8xIHuKXRlV88BPRxUx6dpEsE4CxaCUd9xGCk1Ef2JqaZA", 'whirlpool (digest_data_b64u/tripple_A)');
25 is( Crypt::Digest::Whirlpool->new->add("A","A","A")->hexdigest, "a4dea38c743f318db7169e28ac27aff173942b67b56f9881da464bdac48f47cc481ee29746557cf013d1c54c7a76912c1380b168251df7118293511fd89a9a64", 'whirlpool (OO/tripple_A)');
26 is( Crypt::Digest::Whirlpool->new->add("A")->add("A")->add("A")->hexdigest, "a4dea38c743f318db7169e28ac27aff173942b67b56f9881da464bdac48f47cc481ee29746557cf013d1c54c7a76912c1380b168251df7118293511fd89a9a64", 'whirlpool (OO3/tripple_A)');
1627
1728
1829 is( whirlpool(""), pack("H*","19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3"), 'whirlpool (raw/1)');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 36;
5 use Test::More tests => 36 + 8;
66
77 use Crypt::Mac::BLAKE2b qw( blake2b blake2b_hex blake2b_b64 blake2b_b64u );
88
4242 is( blake2b_hex(32,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'dc29010f123a4cd59c91da5fc494375962502ca2179021ebca2f6dd41befa8d2', 'BLAKE2b/func+hex/6');
4343 is( blake2b_b64(32,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), '3CkBDxI6TNWckdpfxJQ3WWJQLKIXkCHryi9t1BvvqNI=', 'BLAKE2b/func+b64/6');
4444 is( blake2b_b64u(32,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), '3CkBDxI6TNWckdpfxJQ3WWJQLKIXkCHryi9t1BvvqNI', 'BLAKE2b/func+b64u/6');
45
46 is( unpack('H*', Crypt::Mac::BLAKE2b->new(32, '12345678901234561234567890123456')->add("A","A","A")->mac), '794a20cc22c1f9f278aa1219ded10105cc9cfd264e66a327f32fbc309b2d404f', 'BLAKE2b/oo+raw/tripple_A');
47 is( unpack('H*', Crypt::Mac::BLAKE2b->new(32, '12345678901234561234567890123456')->add("A")->add("A")->add("A")->mac), '794a20cc22c1f9f278aa1219ded10105cc9cfd264e66a327f32fbc309b2d404f', 'BLAKE2b/oo3+raw/tripple_A');
48 is( Crypt::Mac::BLAKE2b->new(32, '12345678901234561234567890123456')->add("A","A","A")->hexmac, '794a20cc22c1f9f278aa1219ded10105cc9cfd264e66a327f32fbc309b2d404f', 'BLAKE2b/oo+hex/tripple_A');
49 is( Crypt::Mac::BLAKE2b->new(32, '12345678901234561234567890123456')->add("A")->add("A")->add("A")->hexmac, '794a20cc22c1f9f278aa1219ded10105cc9cfd264e66a327f32fbc309b2d404f', 'BLAKE2b/oo3+hex/tripple_A');
50 is( unpack('H*', blake2b(32, '12345678901234561234567890123456',"A","A","A")), '794a20cc22c1f9f278aa1219ded10105cc9cfd264e66a327f32fbc309b2d404f', 'BLAKE2b/func+raw/tripple_A');
51 is( blake2b_hex (32, '12345678901234561234567890123456',"A","A","A"), '794a20cc22c1f9f278aa1219ded10105cc9cfd264e66a327f32fbc309b2d404f', 'BLAKE2b/func+hex/tripple_A');
52 is( blake2b_b64 (32, '12345678901234561234567890123456',"A","A","A"), 'eUogzCLB+fJ4qhIZ3tEBBcyc/SZOZqMn8y+8MJstQE8=', 'BLAKE2b/func+b64/tripple_A');
53 is( blake2b_b64u(32, '12345678901234561234567890123456',"A","A","A"), 'eUogzCLB-fJ4qhIZ3tEBBcyc_SZOZqMn8y-8MJstQE8', 'BLAKE2b/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 36;
5 use Test::More tests => 36 + 8;
66
77 use Crypt::Mac::BLAKE2s qw( blake2s blake2s_hex blake2s_b64 blake2s_b64u );
88
4242 is( blake2s_hex(32,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'a31f0e2ba5e73a3aab7e14503690515662758279075d7b68512709824923e65c', 'BLAKE2s/func+hex/6');
4343 is( blake2s_b64(32,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'ox8OK6XnOjqrfhRQNpBRVmJ1gnkHXXtoUScJgkkj5lw=', 'BLAKE2s/func+b64/6');
4444 is( blake2s_b64u(32,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'ox8OK6XnOjqrfhRQNpBRVmJ1gnkHXXtoUScJgkkj5lw', 'BLAKE2s/func+b64u/6');
45
46 is( unpack('H*', Crypt::Mac::BLAKE2s->new(32, '12345678901234561234567890123456')->add("A","A","A")->mac), '8acd7813fe7251676d1cf2817c09a25840fa9a1df7143536448a5dfdf7365725', 'BLAKE2s/oo+raw/tripple_A');
47 is( unpack('H*', Crypt::Mac::BLAKE2s->new(32, '12345678901234561234567890123456')->add("A")->add("A")->add("A")->mac), '8acd7813fe7251676d1cf2817c09a25840fa9a1df7143536448a5dfdf7365725', 'BLAKE2s/oo3+raw/tripple_A');
48 is( Crypt::Mac::BLAKE2s->new(32, '12345678901234561234567890123456')->add("A","A","A")->hexmac, '8acd7813fe7251676d1cf2817c09a25840fa9a1df7143536448a5dfdf7365725', 'BLAKE2s/oo+hex/tripple_A');
49 is( Crypt::Mac::BLAKE2s->new(32, '12345678901234561234567890123456')->add("A")->add("A")->add("A")->hexmac, '8acd7813fe7251676d1cf2817c09a25840fa9a1df7143536448a5dfdf7365725', 'BLAKE2s/oo3+hex/tripple_A');
50 is( unpack('H*', blake2s(32, '12345678901234561234567890123456',"A","A","A")), '8acd7813fe7251676d1cf2817c09a25840fa9a1df7143536448a5dfdf7365725', 'BLAKE2s/func+raw/tripple_A');
51 is( blake2s_hex (32, '12345678901234561234567890123456',"A","A","A"), '8acd7813fe7251676d1cf2817c09a25840fa9a1df7143536448a5dfdf7365725', 'BLAKE2s/func+hex/tripple_A');
52 is( blake2s_b64 (32, '12345678901234561234567890123456',"A","A","A"), 'is14E/5yUWdtHPKBfAmiWED6mh33FDU2RIpd/fc2VyU=', 'BLAKE2s/func+b64/tripple_A');
53 is( blake2s_b64u(32, '12345678901234561234567890123456',"A","A","A"), 'is14E_5yUWdtHPKBfAmiWED6mh33FDU2RIpd_fc2VyU', 'BLAKE2s/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 72;
5 use Test::More tests => 72 + 8;
66
77 use Crypt::Mac::F9 qw( f9 f9_hex f9_b64 f9_b64u );
88
7878 is( f9_hex('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'fa83d84023c43a81', 'F9/func+hex/12');
7979 is( f9_b64('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), '+oPYQCPEOoE=', 'F9/func+b64/12');
8080 is( f9_b64u('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), '-oPYQCPEOoE', 'F9/func+b64u/12');
81
82 is( unpack('H*', Crypt::Mac::F9->new('AES', '1234567890123456')->add("A","A","A")->mac), 'a30e9e0ee8cd9d7401f9a9967e82b5a1', 'F9/oo+raw/tripple_A');
83 is( unpack('H*', Crypt::Mac::F9->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->mac), 'a30e9e0ee8cd9d7401f9a9967e82b5a1', 'F9/oo3+raw/tripple_A');
84 is( Crypt::Mac::F9->new('AES', '1234567890123456')->add("A","A","A")->hexmac, 'a30e9e0ee8cd9d7401f9a9967e82b5a1', 'F9/oo+hex/tripple_A');
85 is( Crypt::Mac::F9->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->hexmac, 'a30e9e0ee8cd9d7401f9a9967e82b5a1', 'F9/oo3+hex/tripple_A');
86 is( unpack('H*', f9('AES', '1234567890123456',"A","A","A")), 'a30e9e0ee8cd9d7401f9a9967e82b5a1', 'F9/func+raw/tripple_A');
87 is( f9_hex ('AES', '1234567890123456',"A","A","A"), 'a30e9e0ee8cd9d7401f9a9967e82b5a1', 'F9/func+hex/tripple_A');
88 is( f9_b64 ('AES', '1234567890123456',"A","A","A"), 'ow6eDujNnXQB+amWfoK1oQ==', 'F9/func+b64/tripple_A');
89 is( f9_b64u('AES', '1234567890123456',"A","A","A"), 'ow6eDujNnXQB-amWfoK1oQ', 'F9/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 72;
5 use Test::More tests => 72 + 8;
66
77 use Crypt::Mac::HMAC qw( hmac hmac_hex hmac_b64 hmac_b64u );
88
7878 is( hmac_hex('Whirlpool','secretkey',"test\0test\0test\n"), 'dab6a22e05b46ce641e022e6ea2b42646a25b994ed15fed09145e3906d159efba37b899c344f589b3ad5868cd631a8eb304d21dedf47e364c791ccfa665681f7', 'HMAC/func+hex/12');
7979 is( hmac_b64('Whirlpool','secretkey',"test\0test\0test\n"), '2raiLgW0bOZB4CLm6itCZGoluZTtFf7QkUXjkG0Vnvuje4mcNE9YmzrVhozWMajrME0h3t9H42THkcz6ZlaB9w==', 'HMAC/func+b64/12');
8080 is( hmac_b64u('Whirlpool','secretkey',"test\0test\0test\n"), '2raiLgW0bOZB4CLm6itCZGoluZTtFf7QkUXjkG0Vnvuje4mcNE9YmzrVhozWMajrME0h3t9H42THkcz6ZlaB9w', 'HMAC/func+b64u/12');
81
82 is( unpack('H*', Crypt::Mac::HMAC->new('SHA1', 'secretkey')->add("A","A","A")->mac), '99070fd56a6595bbb458747d63808344fed0b9c1', 'HMAC/oo+raw/tripple_A');
83 is( unpack('H*', Crypt::Mac::HMAC->new('SHA1', 'secretkey')->add("A")->add("A")->add("A")->mac), '99070fd56a6595bbb458747d63808344fed0b9c1', 'HMAC/oo3+raw/tripple_A');
84 is( Crypt::Mac::HMAC->new('SHA1', 'secretkey')->add("A","A","A")->hexmac, '99070fd56a6595bbb458747d63808344fed0b9c1', 'HMAC/oo+hex/tripple_A');
85 is( Crypt::Mac::HMAC->new('SHA1', 'secretkey')->add("A")->add("A")->add("A")->hexmac, '99070fd56a6595bbb458747d63808344fed0b9c1', 'HMAC/oo3+hex/tripple_A');
86 is( unpack('H*', hmac('SHA1', 'secretkey',"A","A","A")), '99070fd56a6595bbb458747d63808344fed0b9c1', 'HMAC/func+raw/tripple_A');
87 is( hmac_hex ('SHA1', 'secretkey',"A","A","A"), '99070fd56a6595bbb458747d63808344fed0b9c1', 'HMAC/func+hex/tripple_A');
88 is( hmac_b64 ('SHA1', 'secretkey',"A","A","A"), 'mQcP1Wpllbu0WHR9Y4CDRP7QucE=', 'HMAC/func+b64/tripple_A');
89 is( hmac_b64u('SHA1', 'secretkey',"A","A","A"), 'mQcP1Wpllbu0WHR9Y4CDRP7QucE', 'HMAC/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 72;
5 use Test::More tests => 72 + 8;
66
77 use Crypt::Mac::OMAC qw( omac omac_hex omac_b64 omac_b64u );
88
7878 is( omac_hex('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), '40e6d018b49ada77', 'OMAC/func+hex/12');
7979 is( omac_b64('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'QObQGLSa2nc=', 'OMAC/func+b64/12');
8080 is( omac_b64u('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'QObQGLSa2nc', 'OMAC/func+b64u/12');
81
82 is( unpack('H*', Crypt::Mac::OMAC->new('AES', '1234567890123456')->add("A","A","A")->mac), '49b745733f380fb4cdd8ce1ff1e52abc', 'OMAC/oo+raw/tripple_A');
83 is( unpack('H*', Crypt::Mac::OMAC->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->mac), '49b745733f380fb4cdd8ce1ff1e52abc', 'OMAC/oo3+raw/tripple_A');
84 is( Crypt::Mac::OMAC->new('AES', '1234567890123456')->add("A","A","A")->hexmac, '49b745733f380fb4cdd8ce1ff1e52abc', 'OMAC/oo+hex/tripple_A');
85 is( Crypt::Mac::OMAC->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->hexmac, '49b745733f380fb4cdd8ce1ff1e52abc', 'OMAC/oo3+hex/tripple_A');
86 is( unpack('H*', omac('AES', '1234567890123456',"A","A","A")), '49b745733f380fb4cdd8ce1ff1e52abc', 'OMAC/func+raw/tripple_A');
87 is( omac_hex ('AES', '1234567890123456',"A","A","A"), '49b745733f380fb4cdd8ce1ff1e52abc', 'OMAC/func+hex/tripple_A');
88 is( omac_b64 ('AES', '1234567890123456',"A","A","A"), 'SbdFcz84D7TN2M4f8eUqvA==', 'OMAC/func+b64/tripple_A');
89 is( omac_b64u('AES', '1234567890123456',"A","A","A"), 'SbdFcz84D7TN2M4f8eUqvA', 'OMAC/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 72;
5 use Test::More tests => 72 + 8;
66
77 use Crypt::Mac::Pelican qw( pelican pelican_hex pelican_b64 pelican_b64u );
88
7878 is( pelican_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), '8a798fcb2181d9f9ed81fcd2a7f6cd4e', 'Pelican/func+hex/12');
7979 is( pelican_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'inmPyyGB2fntgfzSp/bNTg==', 'Pelican/func+b64/12');
8080 is( pelican_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'inmPyyGB2fntgfzSp_bNTg', 'Pelican/func+b64u/12');
81
82 is( unpack('H*', Crypt::Mac::Pelican->new('1234567890123456')->add("A","A","A")->mac), '6f7dda998b3fdfeaa80737e5127532a5', 'Pelican/oo+raw/tripple_A');
83 is( unpack('H*', Crypt::Mac::Pelican->new('1234567890123456')->add("A")->add("A")->add("A")->mac), '6f7dda998b3fdfeaa80737e5127532a5', 'Pelican/oo3+raw/tripple_A');
84 is( Crypt::Mac::Pelican->new('1234567890123456')->add("A","A","A")->hexmac, '6f7dda998b3fdfeaa80737e5127532a5', 'Pelican/oo+hex/tripple_A');
85 is( Crypt::Mac::Pelican->new('1234567890123456')->add("A")->add("A")->add("A")->hexmac, '6f7dda998b3fdfeaa80737e5127532a5', 'Pelican/oo3+hex/tripple_A');
86 is( unpack('H*', pelican('1234567890123456',"A","A","A")), '6f7dda998b3fdfeaa80737e5127532a5', 'Pelican/func+raw/tripple_A');
87 is( pelican_hex ('1234567890123456',"A","A","A"), '6f7dda998b3fdfeaa80737e5127532a5', 'Pelican/func+hex/tripple_A');
88 is( pelican_b64 ('1234567890123456',"A","A","A"), 'b33amYs/3+qoBzflEnUypQ==', 'Pelican/func+b64/tripple_A');
89 is( pelican_b64u('1234567890123456',"A","A","A"), 'b33amYs_3-qoBzflEnUypQ', 'Pelican/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 72;
5 use Test::More tests => 72 + 8;
66
77 use Crypt::Mac::PMAC qw( pmac pmac_hex pmac_b64 pmac_b64u );
88
7878 is( pmac_hex('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), '3797cde072a8e286', 'PMAC/func+hex/12');
7979 is( pmac_b64('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'N5fN4HKo4oY=', 'PMAC/func+b64/12');
8080 is( pmac_b64u('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'N5fN4HKo4oY', 'PMAC/func+b64u/12');
81
82 is( unpack('H*', Crypt::Mac::PMAC->new('AES', '1234567890123456')->add("A","A","A")->mac), 'c46c52ff026e4e24837bc51a7e21f8cb', 'PMAC/oo+raw/tripple_A');
83 is( unpack('H*', Crypt::Mac::PMAC->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->mac), 'c46c52ff026e4e24837bc51a7e21f8cb', 'PMAC/oo3+raw/tripple_A');
84 is( Crypt::Mac::PMAC->new('AES', '1234567890123456')->add("A","A","A")->hexmac, 'c46c52ff026e4e24837bc51a7e21f8cb', 'PMAC/oo+hex/tripple_A');
85 is( Crypt::Mac::PMAC->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->hexmac, 'c46c52ff026e4e24837bc51a7e21f8cb', 'PMAC/oo3+hex/tripple_A');
86 is( unpack('H*', pmac('AES', '1234567890123456',"A","A","A")), 'c46c52ff026e4e24837bc51a7e21f8cb', 'PMAC/func+raw/tripple_A');
87 is( pmac_hex ('AES', '1234567890123456',"A","A","A"), 'c46c52ff026e4e24837bc51a7e21f8cb', 'PMAC/func+hex/tripple_A');
88 is( pmac_b64 ('AES', '1234567890123456',"A","A","A"), 'xGxS/wJuTiSDe8UafiH4yw==', 'PMAC/func+b64/tripple_A');
89 is( pmac_b64u('AES', '1234567890123456',"A","A","A"), 'xGxS_wJuTiSDe8UafiH4yw', 'PMAC/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 36;
5 use Test::More tests => 36 + 8;
66
77 use Crypt::Mac::Poly1305 qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u );
88
4242 is( poly1305_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), '4c02cea60201d83ae4b2d644789422e5', 'Poly1305/func+hex/6');
4343 is( poly1305_b64('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'TALOpgIB2DrkstZEeJQi5Q==', 'Poly1305/func+b64/6');
4444 is( poly1305_b64u('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',"test\0test\0test\n"), 'TALOpgIB2DrkstZEeJQi5Q', 'Poly1305/func+b64u/6');
45
46 is( unpack('H*', Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("A","A","A")->mac), '7c1e6c34ad72384ac4f52eb49f642abc', 'Poly1305/oo+raw/tripple_A');
47 is( unpack('H*', Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("A")->add("A")->add("A")->mac), '7c1e6c34ad72384ac4f52eb49f642abc', 'Poly1305/oo3+raw/tripple_A');
48 is( Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("A","A","A")->hexmac, '7c1e6c34ad72384ac4f52eb49f642abc', 'Poly1305/oo+hex/tripple_A');
49 is( Crypt::Mac::Poly1305->new('12345678901234561234567890123456')->add("A")->add("A")->add("A")->hexmac, '7c1e6c34ad72384ac4f52eb49f642abc', 'Poly1305/oo3+hex/tripple_A');
50 is( unpack('H*', poly1305('12345678901234561234567890123456',"A","A","A")), '7c1e6c34ad72384ac4f52eb49f642abc', 'Poly1305/func+raw/tripple_A');
51 is( poly1305_hex ('12345678901234561234567890123456',"A","A","A"), '7c1e6c34ad72384ac4f52eb49f642abc', 'Poly1305/func+hex/tripple_A');
52 is( poly1305_b64 ('12345678901234561234567890123456',"A","A","A"), 'fB5sNK1yOErE9S60n2QqvA==', 'Poly1305/func+b64/tripple_A');
53 is( poly1305_b64u('12345678901234561234567890123456',"A","A","A"), 'fB5sNK1yOErE9S60n2QqvA', 'Poly1305/func+b64u/tripple_A');
22 use strict;
33 use warnings;
44
5 use Test::More tests => 72;
5 use Test::More tests => 72 + 8;
66
77 use Crypt::Mac::XCBC qw( xcbc xcbc_hex xcbc_b64 xcbc_b64u );
88
7878 is( xcbc_hex('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), '98276a4a6aafd86b', 'XCBC/func+hex/12');
7979 is( xcbc_b64('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'mCdqSmqv2Gs=', 'XCBC/func+b64/12');
8080 is( xcbc_b64u('Blowfish','12345678901234561234567890123456',"test\0test\0test\n"), 'mCdqSmqv2Gs', 'XCBC/func+b64u/12');
81
82 is( unpack('H*', Crypt::Mac::XCBC->new('AES', '1234567890123456')->add("A","A","A")->mac), 'da243c0a133fc33cd1f96b872c0bec9b', 'XCBC/oo+raw/tripple_A');
83 is( unpack('H*', Crypt::Mac::XCBC->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->mac), 'da243c0a133fc33cd1f96b872c0bec9b', 'XCBC/oo3+raw/tripple_A');
84 is( Crypt::Mac::XCBC->new('AES', '1234567890123456')->add("A","A","A")->hexmac, 'da243c0a133fc33cd1f96b872c0bec9b', 'XCBC/oo+hex/tripple_A');
85 is( Crypt::Mac::XCBC->new('AES', '1234567890123456')->add("A")->add("A")->add("A")->hexmac, 'da243c0a133fc33cd1f96b872c0bec9b', 'XCBC/oo3+hex/tripple_A');
86 is( unpack('H*', xcbc('AES', '1234567890123456',"A","A","A")), 'da243c0a133fc33cd1f96b872c0bec9b', 'XCBC/func+raw/tripple_A');
87 is( xcbc_hex ('AES', '1234567890123456',"A","A","A"), 'da243c0a133fc33cd1f96b872c0bec9b', 'XCBC/func+hex/tripple_A');
88 is( xcbc_b64 ('AES', '1234567890123456',"A","A","A"), '2iQ8ChM/wzzR+WuHLAvsmw==', 'XCBC/func+b64/tripple_A');
89 is( xcbc_b64u('AES', '1234567890123456',"A","A","A"), '2iQ8ChM_wzzR-WuHLAvsmw', 'XCBC/func+b64u/tripple_A');