Codebase list libcryptx-perl / 6749e6c
fix trailing whitespaces and tabs Karel Miko 6 years ago
44 changed file(s) with 266 addition(s) and 257 deletion(s). Raw diff Collapse all Expand all
3030
3131 rv = pkcs_5_alg1(password_ptr, (unsigned long)password_len, salt_ptr, iteration_count, id, output, &output_len);
3232 if (rv != CRYPT_OK) {
33 SvREFCNT_dec(RETVAL);
33 SvREFCNT_dec(RETVAL);
3434 croak("FATAL: pkcs_5_alg1 process failed: %s", error_to_string(rv));
3535 }
3636 SvCUR_set(RETVAL, output_len);
6868
6969 rv = pkcs_5_alg2(password_ptr, (unsigned long)password_len, salt_ptr, (unsigned long)salt_len, iteration_count, id, output, &output_len);
7070 if (rv != CRYPT_OK) {
71 SvREFCNT_dec(RETVAL);
71 SvREFCNT_dec(RETVAL);
7272 croak("FATAL: pkcs_5_alg2 process failed: %s", error_to_string(rv));
7373 }
7474 SvCUR_set(RETVAL, output_len);
137137
138138 rv = hkdf_expand(id, info_ptr, (unsigned long)info_len, in_ptr, (unsigned long)in_len, output, output_len);
139139 if (rv != CRYPT_OK) {
140 SvREFCNT_dec(RETVAL);
140 SvREFCNT_dec(RETVAL);
141141 croak("FATAL: hkdf_expand process failed: %s", error_to_string(rv));
142142 }
143143 SvCUR_set(RETVAL, output_len);
178178
179179 rv = hkdf(id, salt_ptr, (unsigned long)salt_len, info_ptr, (unsigned long)info_len, in_ptr, (unsigned long)in_len, output, output_len);
180180 if (rv != CRYPT_OK) {
181 SvREFCNT_dec(RETVAL);
181 SvREFCNT_dec(RETVAL);
182182 croak("FATAL: hkdf_expand process failed: %s", error_to_string(rv));
183183 }
184184 SvCUR_set(RETVAL, output_len);
3030 eval "use $m; 1;" or push @err, "ERROR: 'use $m' failed";
3131 }
3232
33 my @others = ('CryptX.xs');
34 File::Find::find({ wanted=>sub { push @others, $_ if /\.inc$/ }, no_chdir=>1 }, 'inc');
35 File::Find::find({ wanted=>sub { push @others, $_ if /\.(t|pl)$/ }, no_chdir=>1 }, 't');
36
37 for my $m (sort @others) {
38 my $content = _read($m);
39 push @err, "ERROR: no newline at the end '$m'" unless $content =~ /\n$/s;
40 push @err, "ERROR: trailing whitespace '$m'" if $content =~ / \n/s;
41 push @err, "ERROR: avoid tabs '$m'" if $content =~ /\t/s;
42 push @err, "ERROR: avoid CRLF '$m'" if $content =~ /\r/s;
43 }
44
3345 warn "$_\n" for (@err);
3446 die if @err;
3547
1111
1212 for my $m (sort @files) {
1313 Test::Pod::pod_file_ok( $m, "Valid POD in '$m'" );
14 }
14 }
77
88 Test::Pod::Spelling->import(
99 spelling => {
10 allow_words => [qw(
11 AES BLAKEb BLAKEs CPAN CRC ChaCha CryptX DCIT DER Diffie EAX ECCDH ECDH ECDSA Flickr HKDF JSON JWA JWK
10 allow_words => [qw(
11 AES BLAKEb BLAKEs CPAN CRC ChaCha CryptX DCIT DER Diffie EAX ECCDH ECDH ECDSA Flickr HKDF JSON JWA JWK
1212 Karel Miko OCB OCBv OID OMAC OO OpenSSL PBKDF PEM PKCS RIPEMD Rijndael SHA UUID RFC
1313 decrypt decrypts interoperability cryptographically cryptographic octects
1414 libtomcrypt libtommath
1515 params paramshash irand perl endian zbase bumac bmac budigest bdigest md de
16 blakes_ blakeb_
16 blakes_ blakeb_
1717 XOR'ing XOR'ed
1818 )]
1919 },
4949 is(unpack('H*', $tag), "9e9cba5dd4939d0d8e2687c85c5d3b89", "ccm_encrypt_authenticate: tag (no header)");
5050 my $pt = ccm_decrypt_verify('AES', $key, $nonce, "", $ct, $tag);
5151 is($pt, "plain_halfplain_half", "ccm_decrypt_verify: plaintext (no header)");
52 }
52 }
66
77 sub do_test {
88 my %a = @_;
9
10 my $key = pack("H*", $a{key});
9
10 my $key = pack("H*", $a{key});
1111 my $nonce = pack("H*", $a{nonce});
1212 my $header = pack("H*", $a{header});
1313 my $plaintext = pack("H*", $a{plaintext});
1414 my $ciphertext = pack("H*", $a{ciphertext});
1515 my $tag = pack("H*", $a{tag});
16
16
1717 my ($ct3, $tag3) = ccm_encrypt_authenticate('AES', $key, $nonce, $header, length($tag), $plaintext);
1818 is(unpack('H*', $ct3), $a{ciphertext}, "enc: ciphertext");
1919 is(unpack('H*', $tag3), $a{tag}, "enc: tag");
3232 ciphertext=>'588c979a61c663d2f066d0c2c0f989806d5f6b61dac384',
3333 tag=>'17e8d12cfdf926e0',
3434 },
35
35
3636 #/* 13 byte nonce, 12 byte header, 19 byte pt */
3737 {
3838 key=>'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf',
4242 ciphertext=>'a28c6865939a9a79faaa5c4c2a9d4a91cdac8c',
4343 tag=>'96c861b9c9e61ef1',
4444 },
45
45
4646 #/* supplied by Brian Gladman */
4747 {
4848 key=>'404142434445464748494a4b4c4d4e4f',
5252 ciphertext=>'7162015b',
5353 tag=>'4dac255d',
5454 },
55
55
5656 {
5757 key=>'c97c1f67ce371185514a8a19f2bdd52f',
5858 nonce=>'005030f1844408b5039776e70c',
6161 ciphertext=>'f3d0a2fe9a3dbf2342a643e43246e80c3c04d019',
6262 tag=>'7845ce0b16f97623',
6363 },
64 );
64 );
66
77 sub do_test {
88 my %a = @_;
9
10 my $key = pack("H*", $a{key});
9
10 my $key = pack("H*", $a{key});
1111 my $nonce = pack("H*", $a{nonce});
1212 my $header = pack("H*", $a{header});
1313 my $plaintext = pack("H*", $a{plaintext});
1414 my $ciphertext = pack("H*", $a{ciphertext});
1515 my $tag = pack("H*", $a{tag});
16
16
1717 # encrypt
1818 my $m1 = Crypt::AuthEnc::EAX->new("AES", $key, $nonce);
1919 $m1->header_add($header);
3838 is(unpack('H*', $tag3), $a{tag}, "enc: tag");
3939 my $pt3 = eax_decrypt_verify('AES', $key, $nonce, $header, $ciphertext, $tag);
4040 is(unpack('H*', $pt3), $a{plaintext}, "dec: plaintext");
41
41
4242 }
4343
4444 do_test(%$_) for (
7676 {
7777 #16, 16, 16, 32,
7878 key => '000102030405060708090a0b0c0d0e0f',
79 nonce => '000102030405060708090a0b0c0d0e0f',
79 nonce => '000102030405060708090a0b0c0d0e0f',
8080 header => '000102030405060708090a0b0c0d0e0f',
8181 plaintext => '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f',
8282 ciphertext => '29d878d1a3be857b6fb8c8ea5950a778331fbf2ccf33986f35e8cf121dcb30bc',
8686 {
8787 #16, 15, 14, 29,
8888 key => '000102030405060708090a0b0c0d0e0f',
89 nonce => '000102030405060708090a0b0c0d0e',
89 nonce => '000102030405060708090a0b0c0d0e',
9090 header => '000102030405060708090a0b0c0d',
9191 plaintext => '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c',
9292 ciphertext => 'dd25c754c5b17c5928b69b73155f7bb8888faf37091ad92c8a24db868b',
9393 tag => '0d1a14e52224ffd23a05fa02cdef52da',
9494 },
95
95
9696 #/* Vectors from Brian Gladman */
9797 {
9898 #16, 16, 8, 0,
121121 ciphertext => 'd851d5bae0',
122122 tag => '3a59f238a23e39199dc9266626c40f80',
123123 },
124 );
124 );
66
77 sub do_test {
88 my %a = @_;
9
10 my $key = pack("H*", $a{key});
9
10 my $key = pack("H*", $a{key});
1111 my $adata = pack("H*", $a{adata});
1212 my $iv = pack("H*", $a{iv});
1313 my $plaintext = pack("H*", $a{plaintext});
1414 my $ciphertext = pack("H*", $a{ciphertext});
1515 my $tag = pack("H*", $a{tag});
16
16
1717 # encrypt
1818 my $m1 = Crypt::AuthEnc::GCM->new("AES", $key);
1919 $m1->iv_add($iv);
4040 is(unpack('H*', $tag3), $a{tag}, "enc: tag");
4141 my $pt3 = gcm_decrypt_verify('AES', $key, $iv, $adata, $ciphertext, $tag);
4242 is(unpack('H*', $pt3), $a{plaintext}, "dec: plaintext");
43
43
4444 }
4545
4646 do_test(%$_) for (
5454 # ciphertext => '',
5555 # tag => '58e2fccefa7e3061367f1d57a4e7455a',
5656 # },
57
57
5858 #/* test case #2 */
5959 {
6060 key => '00000000000000000000000000000000',
6464 ciphertext => '0388dace60b6a392f328c2b971b2fe78',
6565 tag => 'ab6e47d42cec13bdf53a67b21257bddf',
6666 },
67
67
6868 #/* test case #3 */
6969 {
7070 key => 'feffe9928665731c6d6a8f9467308308',
7474 ciphertext => '42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985',
7575 tag => '4d5c2af327cd64a62cf35abd2ba6fab4',
7676 },
77
77
7878 #/* test case #4 */
7979 {
8080 key => 'feffe9928665731c6d6a8f9467308308',
8484 ciphertext => '42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091',
8585 tag => '5bc94fbc3221a5db94fae95ae7121a47',
8686 },
87
87
8888 #/* test case #5 */
8989 {
9090 key => 'feffe9928665731c6d6a8f9467308308',
9494 ciphertext => '61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598',
9595 tag => '3612d2e79e3b0785561be14aaca2fccb',
9696 },
97
97
9898 #/* test case #6 */
9999 {
100100 key => 'feffe9928665731c6d6a8f9467308308',
104104 ciphertext => '8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5',
105105 tag => '619cc5aefffe0bfa462af43c1699d050',
106106 },
107
107
108108 #/* test case #46 from BG (catches the LTC bug of v1.15) */
109109 {
110110 key => '00000000000000000000000000000000',
114114 ciphertext => 'cbc8d2f15481a4cc7dd1e19aaa83de5678483ec359ae7dec2ab8d534e0906f4b4663faff58a8b2d733b845eef7c9b331e9e10eb2612c995feb1ac15a6286cce8b297a8',
115115 tag => '8d2d2a9372626f6bee8580276a6366bf',
116116 }
117 );
117 );
1111 chomp($l);
1212 next if $l =~ /^#/;
1313 $l =~ s/[\s\t]+/ /g;
14
14
1515 if ($l eq '') {
1616 next unless defined $d->{C};
1717 my $A = pack('H*', $d->{A});
2020 my $K = pack('H*', $d->{K});
2121 my $N = pack('H*', $d->{N});
2222 my $tag_len = $d->{T} * 1;
23
23
2424 { #ENCRYPT
2525 my $m = Crypt::AuthEnc::OCB->new('AES', $K, $N, $tag_len);
2626 $m->adata_add($A);
4747 $v =~ s/\s//g;
4848 $d->{$k} = $v;
4949 }
50
50
5151 }
5252
5353 #print $text;
172172 P: 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
173173 C: 1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA
174174
175 LAST_ITEM_PLACEHOLDER_DO_NOT_DELETE!!!
175 LAST_ITEM_PLACEHOLDER_DO_NOT_DELETE!!!
1414 my ($k, $v) = split /:/, $pair;
1515 $d->{$k} = $v;
1616 }
17
17
1818 my $c = Crypt::Cipher::AES->new(pack('H*',$d->{key}));
1919 my $result = pack('H*', $d->{pt});
2020 $result = $c->encrypt($result) for(1..$d->{iter});
1212 my ($k, $v) = split /:/, $pair;
1313 $d->{$k} = $v;
1414 }
15
15
1616 my $c = Crypt::Cipher::SEED->new(pack('H*',$d->{key}));
1717 my $result = pack('H*', $d->{pt});
1818 $result = $c->encrypt($result) for(1..$d->{iter});
2525 key=000000000000000000000000000000004000000000000000 ptext=00000000000000000000000000000000 ctext=53bd3e8475db67f72910b945bf8c768e
2626 key=000000000000000000000000000000010000000000000000 ptext=00000000000000000000000000000000 ctext=deab7388a6f1c61d41e25a0d88f062c4
2727 key=0000000000000000000000800000000000000000000000000000000000000000 ptext=00000000000000000000000000000000 ctext=ad4b018d50e3a28124a0a1259dc667d4
28 key=4000000000000000000000000000000000000000000000000000000000000000 ptext=00000000000000000000000000000000 ctext=eae1d405570174df7df2f9966d509159
28 key=4000000000000000000000000000000000000000000000000000000000000000 ptext=00000000000000000000000000000000 ctext=eae1d405570174df7df2f9966d509159
3131 my $size;
3232
3333 while (my $l = <DATA>) {
34 $l =~ s/[\r\n]*$//;
34 $l =~ s/[\r\n]*$//;
3535 $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/;
3636 $l =~ s/\s+//g;
3737 my ($k, $v) = split /:/, $l;
5757 next unless $tv->{$n}->{$ks}->{$i};
5858 my $ct = Crypt::Cipher->new($N, $key)->encrypt($bytes);
5959 is(unpack('H*', $ct), lc($tv->{$n}->{$ks}->{$i}), "$N/$ks/$i");
60 $bytes = $ct;
60 $bytes = $ct;
6161 $key = substr($ct x 100, 0, $ks);
6262 }
6363 }
1111 use Crypt::Cipher;
1212
1313 while (my $l = <DATA>) {
14 $l =~ s/[\r\n]*$//;
14 $l =~ s/[\r\n]*$//;
1515 $l =~ s/^\s*([^\s\r\n]+).*?/$1/;
1616 $l =~ s/\s+//;
1717 next if !$l || $l =~ /^#/;
6262 die "UNKNOWN MODE '$mode'";
6363 }
6464 #warn "[$cipher|$mode, ".length($key).", ".length($iv).", ".length($pt).", ".length($ct).", ".length($flag)."]\n";
65 }
65 }
6666
6767 __DATA__
6868 #cipher:key:iv:plaintext:ciphertext:0/1(decrypt/encrypt)
119119 AES-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::AE2D8A571E03AC9C9EB76FAC45AF8E51:F5D3D58503B9699DE785895A96FDBAAF
120120 AES-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::30C81C46A35CE411E5FBC1191A0A52EF:43B1CD7F598ECE23881B00E3ED030688
121121 AES-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::F69F2445DF4F9B17AD2B417BE66C3710:7B0C785E27E8AD3F8223207104725DD4
122 # ECB-AES192.Encrypt and ECB-AES192.Decrypt
122 # ECB-AES192.Encrypt and ECB-AES192.Decrypt
123123 AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::6BC1BEE22E409F96E93D7E117393172A:BD334F1D6E45F25FF712A214571FA5CC
124124 AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::AE2D8A571E03AC9C9EB76FAC45AF8E51:974104846D0AD3AD7734ECB3ECEE4EEF
125125 AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::30C81C46A35CE411E5FBC1191A0A52EF:EF7AFD2270E2E60ADCE0BA2FACE6444E
126126 AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::F69F2445DF4F9B17AD2B417BE66C3710:9A4B41BA738D6C72FB16691603C18E0E
127 # ECB-AES256.Encrypt and ECB-AES256.Decrypt
127 # ECB-AES256.Encrypt and ECB-AES256.Decrypt
128128 AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::6BC1BEE22E409F96E93D7E117393172A:F3EED1BDB5D2A03C064B5A7E3DB181F8
129129 AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::AE2D8A571E03AC9C9EB76FAC45AF8E51:591CCB10D410ED26DC5BA74A31362870
130130 AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::30C81C46A35CE411E5FBC1191A0A52EF:B6ED21B99CA6F4F9F153E7B1BEAFED1D
131131 AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::F69F2445DF4F9B17AD2B417BE66C3710:23304B7A39F9F3FF067D8D8F9E24ECC7
132132 # For all CBC encrypts and decrypts, the transformed sequence is
133133 # AES-bits-CBC:key:IV/ciphertext':plaintext:ciphertext:encdec
134 # CBC-AES128.Encrypt and CBC-AES128.Decrypt
134 # CBC-AES128.Encrypt and CBC-AES128.Decrypt
135135 AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:7649ABAC8119B246CEE98E9B12E9197D
136136 AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:7649ABAC8119B246CEE98E9B12E9197D:AE2D8A571E03AC9C9EB76FAC45AF8E51:5086CB9B507219EE95DB113A917678B2
137137 AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:5086CB9B507219EE95DB113A917678B2:30C81C46A35CE411E5FBC1191A0A52EF:73BED6B8E3C1743B7116E69E22229516
138138 AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:73BED6B8E3C1743B7116E69E22229516:F69F2445DF4F9B17AD2B417BE66C3710:3FF1CAA1681FAC09120ECA307586E1A7
139 # CBC-AES192.Encrypt and CBC-AES192.Decrypt
139 # CBC-AES192.Encrypt and CBC-AES192.Decrypt
140140 AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:4F021DB243BC633D7178183A9FA071E8
141141 AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:4F021DB243BC633D7178183A9FA071E8:AE2D8A571E03AC9C9EB76FAC45AF8E51:B4D9ADA9AD7DEDF4E5E738763F69145A
142142 AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:B4D9ADA9AD7DEDF4E5E738763F69145A:30C81C46A35CE411E5FBC1191A0A52EF:571B242012FB7AE07FA9BAAC3DF102E0
143143 AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:571B242012FB7AE07FA9BAAC3DF102E0:F69F2445DF4F9B17AD2B417BE66C3710:08B0E27988598881D920A9E64F5615CD
144 # CBC-AES256.Encrypt and CBC-AES256.Decrypt
144 # CBC-AES256.Encrypt and CBC-AES256.Decrypt
145145 AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:F58C4C04D6E5F1BA779EABFB5F7BFBD6
146146 AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:F58C4C04D6E5F1BA779EABFB5F7BFBD6:AE2D8A571E03AC9C9EB76FAC45AF8E51:9CFC4E967EDB808D679F777BC6702C7D
147147 AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:9CFC4E967EDB808D679F777BC6702C7D:30C81C46A35CE411E5FBC1191A0A52EF:39F23369A9D9BACFA530E26304231461
149149 # We don't support CFB{1,8}-AESxxx.{En,De}crypt
150150 # For all CFB128 encrypts and decrypts, the transformed sequence is
151151 # AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec
152 # CFB128-AES128.Encrypt
152 # CFB128-AES128.Encrypt
153153 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:1
154154 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:3B3FD92EB72DAD20333449F8E83CFB4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:C8A64537A0B3A93FCDE3CDAD9F1CE58B:1
155155 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:C8A64537A0B3A93FCDE3CDAD9F1CE58B:30C81C46A35CE411E5FBC1191A0A52EF:26751F67A3CBB140B1808CF187A4F4DF:1
156156 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:26751F67A3CBB140B1808CF187A4F4DF:F69F2445DF4F9B17AD2B417BE66C3710:C04B05357C5D1C0EEAC4C66F9FF7F2E6:1
157 # CFB128-AES128.Decrypt
157 # CFB128-AES128.Decrypt
158158 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:0
159159 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:3B3FD92EB72DAD20333449F8E83CFB4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:C8A64537A0B3A93FCDE3CDAD9F1CE58B:0
160160 AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:C8A64537A0B3A93FCDE3CDAD9F1CE58B:30C81C46A35CE411E5FBC1191A0A52EF:26751F67A3CBB140B1808CF187A4F4DF:0
169169 AES-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:CDC80D6FDDF18CAB34C25909C99A4174:AE2D8A571E03AC9C9EB76FAC45AF8E51:67CE7F7F81173621961A2B70171D3D7A:0
170170 AES-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:67CE7F7F81173621961A2B70171D3D7A:30C81C46A35CE411E5FBC1191A0A52EF:2E1E8A1DD59B88B1C8E60FED1EFAC4C9:0
171171 AES-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:2E1E8A1DD59B88B1C8E60FED1EFAC4C9:F69F2445DF4F9B17AD2B417BE66C3710:C05F9F9CA9834FA042AE8FBA584B09FF:0
172 # CFB128-AES256.Encrypt
172 # CFB128-AES256.Encrypt
173173 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:1
174174 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DC7E84BFDA79164B7ECD8486985D3860:AE2D8A571E03AC9C9EB76FAC45AF8E51:39FFED143B28B1C832113C6331E5407B:1
175175 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39FFED143B28B1C832113C6331E5407B:30C81C46A35CE411E5FBC1191A0A52EF:DF10132415E54B92A13ED0A8267AE2F9:1
176176 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DF10132415E54B92A13ED0A8267AE2F9:F69F2445DF4F9B17AD2B417BE66C3710:75A385741AB9CEF82031623D55B1E471:1
177 # CFB128-AES256.Decrypt
177 # CFB128-AES256.Decrypt
178178 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:0
179179 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DC7E84BFDA79164B7ECD8486985D3860:AE2D8A571E03AC9C9EB76FAC45AF8E51:39FFED143B28B1C832113C6331E5407B:0
180180 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39FFED143B28B1C832113C6331E5407B:30C81C46A35CE411E5FBC1191A0A52EF:DF10132415E54B92A13ED0A8267AE2F9:0
181181 AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DF10132415E54B92A13ED0A8267AE2F9:F69F2445DF4F9B17AD2B417BE66C3710:75A385741AB9CEF82031623D55B1E471:0
182182 # For all OFB encrypts and decrypts, the transformed sequence is
183183 # AES-bits-CFB:key:IV/output':plaintext:ciphertext:encdec
184 # OFB-AES128.Encrypt
185 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:1
186 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:7789508D16918F03F53C52DAC54ED825:1
187 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:9740051E9C5FECF64344F7A82260EDCC:1
188 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:304C6528F659C77866A510D9C1D6AE5E:1
189 # OFB-AES128.Decrypt
184 # OFB-AES128.Encrypt
185 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:1
186 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:7789508D16918F03F53C52DAC54ED825:1
187 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:9740051E9C5FECF64344F7A82260EDCC:1
188 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:304C6528F659C77866A510D9C1D6AE5E:1
189 # OFB-AES128.Decrypt
190190 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:0
191191 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:7789508D16918F03F53C52DAC54ED825:0
192192 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:9740051E9C5FECF64344F7A82260EDCC:0
193193 AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:304C6528F659C77866A510D9C1D6AE5E:0
194 # OFB-AES192.Encrypt
195 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CDC80D6FDDF18CAB34C25909C99A4174:1
196 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:FCC28B8D4C63837C09E81700C1100401:1
197 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:8D9A9AEAC0F6596F559C6D4DAF59A5F2:1
198 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:6D9F200857CA6C3E9CAC524BD9ACC92A:1
199 # OFB-AES192.Decrypt
200 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CDC80D6FDDF18CAB34C25909C99A4174:0
201 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:FCC28B8D4C63837C09E81700C1100401:0
202 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:8D9A9AEAC0F6596F559C6D4DAF59A5F2:0
203 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:6D9F200857CA6C3E9CAC524BD9ACC92A:0
204 # OFB-AES256.Encrypt
194 # OFB-AES192.Encrypt
195 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CDC80D6FDDF18CAB34C25909C99A4174:1
196 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:FCC28B8D4C63837C09E81700C1100401:1
197 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:8D9A9AEAC0F6596F559C6D4DAF59A5F2:1
198 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:6D9F200857CA6C3E9CAC524BD9ACC92A:1
199 # OFB-AES192.Decrypt
200 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CDC80D6FDDF18CAB34C25909C99A4174:0
201 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:FCC28B8D4C63837C09E81700C1100401:0
202 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:8D9A9AEAC0F6596F559C6D4DAF59A5F2:0
203 AES-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:6D9F200857CA6C3E9CAC524BD9ACC92A:0
204 # OFB-AES256.Encrypt
205205 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:1
206206 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:4FEBDC6740D20B3AC88F6AD82A4FB08D:1
207207 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:71AB47A086E86EEDF39D1C5BBA97C408:1
208208 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:41635BE625B48AFC1666DD42A09D96E7:F69F2445DF4F9B17AD2B417BE66C3710:0126141D67F37BE8538F5A8BE740E484:1
209 # OFB-AES256.Decrypt
209 # OFB-AES256.Decrypt
210210 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:0
211211 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:4FEBDC6740D20B3AC88F6AD82A4FB08D:0
212212 AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:71AB47A086E86EEDF39D1C5BBA97C408:0
262262 CAMELLIA-192-ECB:000102030405060708090A0B0C0D0E0F1011121314151617::00112233445566778899AABBCCDDEEFF:B22F3C36B72D31329EEE8ADDC2906C68:1
263263 CAMELLIA-256-ECB:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F::00112233445566778899AABBCCDDEEFF:2EDF1F3418D53B88841FC8985FB1ECF2:1
264264
265 # ECB-CAMELLIA128.Encrypt and ECB-CAMELLIA128.Decrypt
265 # ECB-CAMELLIA128.Encrypt and ECB-CAMELLIA128.Decrypt
266266 CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::6BC1BEE22E409F96E93D7E117393172A:432FC5DCD628115B7C388D770B270C96
267267 CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::AE2D8A571E03AC9C9EB76FAC45AF8E51:0BE1F14023782A22E8384C5ABB7FAB2B
268268 CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::30C81C46A35CE411E5FBC1191A0A52EF:A0A1ABCD1893AB6FE0FE5B65DF5F8636
269269 CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::F69F2445DF4F9B17AD2B417BE66C3710:E61925E0D5DFAA9BB29F815B3076E51A
270270
271 # ECB-CAMELLIA192.Encrypt and ECB-CAMELLIA192.Decrypt
271 # ECB-CAMELLIA192.Encrypt and ECB-CAMELLIA192.Decrypt
272272 CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::6BC1BEE22E409F96E93D7E117393172A:CCCC6C4E138B45848514D48D0D3439D3
273273 CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::AE2D8A571E03AC9C9EB76FAC45AF8E51:5713C62C14B2EC0F8393B6AFD6F5785A
274274 CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::30C81C46A35CE411E5FBC1191A0A52EF:B40ED2B60EB54D09D030CF511FEEF366
275275 CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::F69F2445DF4F9B17AD2B417BE66C3710:909DBD95799096748CB27357E73E1D26
276276
277 # ECB-CAMELLIA256.Encrypt and ECB-CAMELLIA256.Decrypt
277 # ECB-CAMELLIA256.Encrypt and ECB-CAMELLIA256.Decrypt
278278 CAMELLIA-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::6BC1BEE22E409F96E93D7E117393172A:BEFD219B112FA00098919CD101C9CCFA
279279 CAMELLIA-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::AE2D8A571E03AC9C9EB76FAC45AF8E51:C91D3A8F1AEA08A9386CF4B66C0169EA
280280 CAMELLIA-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::30C81C46A35CE411E5FBC1191A0A52EF:A623D711DC5F25A51BB8A80D56397D28
282282
283283 # For all CBC encrypts and decrypts, the transformed sequence is
284284 # CAMELLIA-bits-CBC:key:IV/ciphertext':plaintext:ciphertext:encdec
285 # CBC-CAMELLIA128.Encrypt and CBC-CAMELLIA128.Decrypt
285 # CBC-CAMELLIA128.Encrypt and CBC-CAMELLIA128.Decrypt
286286 CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:1607CF494B36BBF00DAEB0B503C831AB
287287 CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:1607CF494B36BBF00DAEB0B503C831AB:AE2D8A571E03AC9C9EB76FAC45AF8E51:A2F2CF671629EF7840C5A5DFB5074887
288288 CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:A2F2CF671629EF7840C5A5DFB5074887:30C81C46A35CE411E5FBC1191A0A52EF:0F06165008CF8B8B5A63586362543E54
289289 CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:36A84CDAFD5F9A85ADA0F0A993D6D577:F69F2445DF4F9B17AD2B417BE66C3710:74C64268CDB8B8FAF5B34E8AF3732980
290290
291 # CBC-CAMELLIA192.Encrypt and CBC-CAMELLIA192.Decrypt
291 # CBC-CAMELLIA192.Encrypt and CBC-CAMELLIA192.Decrypt
292292 CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:2A4830AB5AC4A1A2405955FD2195CF93
293293 CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:2A4830AB5AC4A1A2405955FD2195CF93:AE2D8A571E03AC9C9EB76FAC45AF8E51:5D5A869BD14CE54264F892A6DD2EC3D5
294294 CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:5D5A869BD14CE54264F892A6DD2EC3D5:30C81C46A35CE411E5FBC1191A0A52EF:37D359C3349836D884E310ADDF68C449
295295 CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:37D359C3349836D884E310ADDF68C449:F69F2445DF4F9B17AD2B417BE66C3710:01FAAA930B4AB9916E9668E1428C6B08
296296
297 # CBC-CAMELLIA256.Encrypt and CBC-CAMELLIA256.Decrypt
297 # CBC-CAMELLIA256.Encrypt and CBC-CAMELLIA256.Decrypt
298298 CAMELLIA-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:E6CFA35FC02B134A4D2C0B6737AC3EDA
299299 CAMELLIA-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E6CFA35FC02B134A4D2C0B6737AC3EDA:AE2D8A571E03AC9C9EB76FAC45AF8E51:36CBEB73BD504B4070B1B7DE2B21EB50
300300 CAMELLIA-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:36CBEB73BD504B4070B1B7DE2B21EB50:30C81C46A35CE411E5FBC1191A0A52EF:E31A6055297D96CA3330CDF1B1860A83
303303 # We don't support CFB{1,8}-CAMELLIAxxx.{En,De}crypt
304304 # For all CFB128 encrypts and decrypts, the transformed sequence is
305305 # CAMELLIA-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec
306 # CFB128-CAMELLIA128.Encrypt
306 # CFB128-CAMELLIA128.Encrypt
307307 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:1
308308 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:14F7646187817EB586599146B82BD719:AE2D8A571E03AC9C9EB76FAC45AF8E51:A53D28BB82DF741103EA4F921A44880B:1
309309 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:A53D28BB82DF741103EA4F921A44880B:30C81C46A35CE411E5FBC1191A0A52EF:9C2157A664626D1DEF9EA420FDE69B96:1
310310 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:9C2157A664626D1DEF9EA420FDE69B96:F69F2445DF4F9B17AD2B417BE66C3710:742A25F0542340C7BAEF24CA8482BB09:1
311311
312 # CFB128-CAMELLIA128.Decrypt
312 # CFB128-CAMELLIA128.Decrypt
313313 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:0
314314 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:14F7646187817EB586599146B82BD719:AE2D8A571E03AC9C9EB76FAC45AF8E51:A53D28BB82DF741103EA4F921A44880B:0
315315 CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:A53D28BB82DF741103EA4F921A44880B:30C81C46A35CE411E5FBC1191A0A52EF:9C2157A664626D1DEF9EA420FDE69B96:0
327327 CAMELLIA-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:86F8491627906D780C7A6D46EA331F98:30C81C46A35CE411E5FBC1191A0A52EF:69511CCE594CF710CB98BB63D7221F01:0
328328 CAMELLIA-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:69511CCE594CF710CB98BB63D7221F01:F69F2445DF4F9B17AD2B417BE66C3710:D5B5378A3ABED55803F25565D8907B84:0
329329
330 # CFB128-CAMELLIA256.Encrypt
330 # CFB128-CAMELLIA256.Encrypt
331331 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:1
332332 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:CF6107BB0CEA7D7FB1BD31F5E7B06C93:AE2D8A571E03AC9C9EB76FAC45AF8E51:89BEDB4CCDD864EA11BA4CBE849B5E2B:1
333333 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:89BEDB4CCDD864EA11BA4CBE849B5E2B:30C81C46A35CE411E5FBC1191A0A52EF:555FC3F34BDD2D54C62D9E3BF338C1C4:1
334334 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:555FC3F34BDD2D54C62D9E3BF338C1C4:F69F2445DF4F9B17AD2B417BE66C3710:5953ADCE14DB8C7F39F1BD39F359BFFA:1
335335
336 # CFB128-CAMELLIA256.Decrypt
336 # CFB128-CAMELLIA256.Decrypt
337337 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:0
338338 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:CF6107BB0CEA7D7FB1BD31F5E7B06C93:AE2D8A571E03AC9C9EB76FAC45AF8E51:89BEDB4CCDD864EA11BA4CBE849B5E2B:0
339339 CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:89BEDB4CCDD864EA11BA4CBE849B5E2B:30C81C46A35CE411E5FBC1191A0A52EF:555FC3F34BDD2D54C62D9E3BF338C1C4:0
341341
342342 # For all OFB encrypts and decrypts, the transformed sequence is
343343 # CAMELLIA-bits-OFB:key:IV/output':plaintext:ciphertext:encdec
344 # OFB-CAMELLIA128.Encrypt
344 # OFB-CAMELLIA128.Encrypt
345345 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:1
346346 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:25623DB569CA51E01482649977E28D84:1
347347 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:C776634A60729DC657D12B9FCA801E98:1
348348 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:D776379BE0E50825E681DA1A4C980E8E:1
349349
350 # OFB-CAMELLIA128.Decrypt
350 # OFB-CAMELLIA128.Decrypt
351351 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:0
352352 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:25623DB569CA51E01482649977E28D84:0
353353 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:C776634A60729DC657D12B9FCA801E98:0
354354 CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:D776379BE0E50825E681DA1A4C980E8E:0
355355
356 # OFB-CAMELLIA192.Encrypt
356 # OFB-CAMELLIA192.Encrypt
357357 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:C832BB9780677DAA82D9B6860DCD565E:1
358358 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:8ECEB7D0350D72C7F78562AEBDF99339:1
359359 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:BDD62DBBB9700846C53B507F544696F0:1
360360 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:E28014E046B802F385C4C2E13EAD4A72:1
361361
362 # OFB-CAMELLIA192.Decrypt
362 # OFB-CAMELLIA192.Decrypt
363363 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:C832BB9780677DAA82D9B6860DCD565E:0
364364 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:8ECEB7D0350D72C7F78562AEBDF99339:0
365365 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:BDD62DBBB9700846C53B507F544696F0:0
366366 CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:E28014E046B802F385C4C2E13EAD4A72:0
367367
368 # OFB-CAMELLIA256.Encrypt
368 # OFB-CAMELLIA256.Encrypt
369369 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:1
370370 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:127AD97E8E3994E4820027D7BA109368:1
371371 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:6BFF6265A6A6B7A535BC65A80B17214E:1
372372 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:41635BE625B48AFC1666DD42A09D96E7:F69F2445DF4F9B17AD2B417BE66C3710:0A4A0404E26AA78A27CB271E8BF3CF20:1
373373
374 # OFB-CAMELLIA256.Decrypt
374 # OFB-CAMELLIA256.Decrypt
375375 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:0
376376 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:127AD97E8E3994E4820027D7BA109368:0
377377 CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:6BFF6265A6A6B7A535BC65A80B17214E:0
385385 SEED-ECB:00000000000000000000000000000000::000102030405060708090A0B0C0D0E0F:5EBAC6E0054E166819AFF1CC6D346CDB:1
386386 SEED-ECB:000102030405060708090A0B0C0D0E0F::00000000000000000000000000000000:C11F22F20140505084483597E4370F43:1
387387 SEED-ECB:4706480851E61BE85D74BFB3FD956185::83A2F8A288641FB9A4E9A5CC2F131C7D:EE54D13EBCAE706D226BC3142CD40D4A:1
388 SEED-ECB:28DBC3BC49FFD87DCFA509B11D422BE7::B41E6BE2EBA84A148E2EED84593C5EC7:9B9B7BFCD1813CB95D0B3618F40F5122:1
388 SEED-ECB:28DBC3BC49FFD87DCFA509B11D422BE7::B41E6BE2EBA84A148E2EED84593C5EC7:9B9B7BFCD1813CB95D0B3618F40F5122:1
1212 my ($k, $v) = split /:/, $pair;
1313 $d->{$k} = $v;
1414 }
15
15
1616 my $c = Crypt::Cipher::Twofish->new(pack('H*',$d->{key}));
1717 my $result = pack('H*', $d->{pt});
1818 $result = $c->encrypt($result) for(1..$d->{iter});
1212 my ($k, $v) = split /:/, $pair;
1313 $d->{$k} = $v;
1414 }
15
15
1616 my $c = Crypt::Cipher::XTEA->new(pack('H*',$d->{key}));
1717 my $result = pack('H*', $d->{pt});
1818 $result = $c->encrypt($result) for(1..$d->{iter});
141141 is(unpack("H*", decode_b32b(encode_b32b($b))), $h);
142142 is(unpack("H*", decode_b32z(encode_b32z($b))), $h);
143143 is(unpack("H*", decode_b32c(encode_b32c($b))), $h);
144 }
144 }
2222 my $hash;
2323
2424 while (my $l = <DATA>) {
25 $l =~ s/[\r\n]*$//;
25 $l =~ s/[\r\n]*$//;
2626 $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/;
2727 $l =~ s/\s+//;
2828 my ($k, $v) = split /:/, $l;
1212 my $expected_prk = "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5";
1313 my $expected_okm = "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865";
1414
15 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
15 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
1616 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
1717 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
1818 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/1");
2929 my $expected_prk = "06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244";
3030 my $expected_okm = "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87";
3131
32 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
32 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
3333 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
3434 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
3535 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/2");
4646 my $expected_prk = "19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04";
4747 my $expected_okm = "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8";
4848
49 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
49 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
5050 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
5151 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
5252 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/3");
6363 my $expected_prk = "9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243";
6464 my $expected_okm = "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896";
6565
66 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
66 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
6767 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
6868 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
6969 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/4");
8080 my $expected_prk = "8adae09a2a307059478d309b26c4115a224cfaf6";
8181 my $expected_okm = "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4";
8282
83 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
83 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
8484 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
8585 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
8686 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/5");
9797 my $expected_prk = "da8c8a73c7fa77288ec6f5e7c297786aa0d32d01";
9898 my $expected_okm = "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918";
9999
100 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
100 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
101101 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
102102 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
103103 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/6");
114114 my $expected_prk = "2adccada18779e7c2077ad2eb19d3f3e731385dd";
115115 my $expected_okm = "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48";
116116
117 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
117 my $prk = hkdf_extract($keying_material, $salt, $hash_name);
118118 my $okm1 = hkdf_expand($prk, $hash_name, $len, $info);
119119 my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info);
120120 is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/7");
2323 my $name;
2424
2525 while (my $l = <DATA>) {
26 $l =~ s/[\r\n]*$//;
26 $l =~ s/[\r\n]*$//;
2727 $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/;
2828 $l =~ s/\s+//;
2929 if ($l=~/^HMAC-([^\n\r]+)/) {
4141
4242 for my $n (sort keys %$tv) {
4343 my $N = $trans->{$n} || die "FATAL: unknown name '$n'";
44 my $key = substr($seq, 0, Crypt::Digest->hashsize($N));
44 my $key = substr($seq, 0, Crypt::Digest->hashsize($N));
4545 for my $i (0..255) {
4646 my $bytes = substr($seq, 0, $i);
4747 next unless $tv->{$n}->{$i};
4848 my $result = Crypt::Mac::HMAC->new($N, $key)->add($bytes)->mac;
4949 is(unpack('H*', $result), lc($tv->{$n}->{$i}), "$N/$i");
50 $bytes = $result;
50 $bytes = $result;
5151 $key = substr($result x 100, 0, Crypt::Digest->hashsize($N));
5252 }
5353 }
3131 my $ks;
3232
3333 while (my $l = <DATA>) {
34 $l =~ s/[\r\n]*$//;
34 $l =~ s/[\r\n]*$//;
3535 $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/;
3636 $l =~ s/\s+//;
3737 if ($l=~/^OMAC-([a-z0-9\+\-]+).*?(\d+)/i) {
5151 for my $n (sort keys %$tv) {
5252 for my $ks (sort keys %{$tv->{$n}}) {
5353 my $N = $trans->{$n} || die "FATAL: unknown name '$n'";
54 my $key = substr($seq, 0, $ks);
54 my $key = substr($seq, 0, $ks);
5555 for my $i (0..255) {
5656 my $bytes = substr($seq, 0, $i);
5757 next unless $tv->{$n}->{$ks}->{$i};
5858 my $result = Crypt::Mac::OMAC->new($N, $key)->add($bytes)->mac;
5959 is(unpack('H*', $result), lc($tv->{$n}->{$ks}->{$i}), "$N/$i");
60 $bytes = $result;
60 $bytes = $result;
6161 $key = substr($result x 100, 0, $ks);
6262 }
6363 }
3131 my $ks;
3232
3333 while (my $l = <DATA>) {
34 $l =~ s/[\r\n]*$//;
34 $l =~ s/[\r\n]*$//;
3535 $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/;
3636 $l =~ s/\s+//;
3737 if ($l=~/^PMAC-([a-z0-9\+\-]+).*?(\d+)/i) {
5151 for my $n (sort keys %$tv) {
5252 for my $ks (sort keys %{$tv->{$n}}) {
5353 my $N = $trans->{$n} || die "FATAL: unknown name '$n'";
54 my $key = substr($seq, 0, $ks);
54 my $key = substr($seq, 0, $ks);
5555 for my $i (0..255) {
5656 my $bytes = substr($seq, 0, $i);
5757 next unless $tv->{$n}->{$ks}->{$i};
5858 my $result = Crypt::Mac::PMAC->new($N, $key)->add($bytes)->mac;
5959 is(unpack('H*', $result), lc($tv->{$n}->{$ks}->{$i}), "$N/$i");
60 $bytes = $result;
60 $bytes = $result;
6161 $key = substr($result x 100, 0, $ks);
6262 }
6363 }
99 use_ok('Math::BigInt'); # Math::BigInt is required for the tests
1010 };
1111
12 diag "Math::BigInt VERSION=$Math::BigInt::VERSION\n";
12 diag "Math::BigInt VERSION=$Math::BigInt::VERSION\n";
3737 is(ref($e->{_e}->[0]), '', '$e->{_e}->[0] is a scalar');
3838 }
3939
40 require './t/mbi_ltm/bigfltpm.inc'; # all tests here for sharing
40 require './t/mbi_ltm/bigfltpm.inc'; # all tests here for sharing
109109 is ($cl->new('20')->blog(20,10), '1.000000000');
110110 is ($cl->new('100')->blog(100,10), '1.000000000');
111111
112 is ($cl->new('100')->blog(10,10), '2.000000000'); # 10 ** 2 == 100
113 is ($cl->new('400')->blog(20,10), '2.000000000'); # 20 ** 2 == 400
112 is ($cl->new('100')->blog(10,10), '2.000000000'); # 10 ** 2 == 100
113 is ($cl->new('400')->blog(20,10), '2.000000000'); # 20 ** 2 == 400
114114
115 is ($cl->new('4')->blog(2,10), '2.000000000'); # 2 ** 2 == 4
116 is ($cl->new('16')->blog(2,10), '4.000000000'); # 2 ** 4 == 16
115 is ($cl->new('4')->blog(2,10), '2.000000000'); # 2 ** 2 == 4
116 is ($cl->new('16')->blog(2,10), '4.000000000'); # 2 ** 4 == 16
117117
118118 is ($cl->new('1.2')->bpow('0.3',10), '1.056219968');
119119 is ($cl->new('10')->bpow('0.6',10), '3.981071706');
164164 # test bexp() with cached results
165165
166166 is ($cl->new(1)->bexp(), '2.718281828459045235360287471352662497757', 'bexp(1)');
167 is ($cl->new(2)->bexp(40), $cl->new(1)->bexp(45)->bpow(2,40), 'bexp(2)');
167 is ($cl->new(2)->bexp(40), $cl->new(1)->bexp(45)->bpow(2,40), 'bexp(2)');
168168
169 is ($cl->new("12.5")->bexp(61), $cl->new(1)->bexp(65)->bpow(12.5,61), 'bexp(12.5)');
169 is ($cl->new("12.5")->bexp(61), $cl->new(1)->bexp(65)->bpow(12.5,61), 'bexp(12.5)');
170170
171171 #############################################################################
172172 # test bexp() with big values (non-cached)
173173
174 is ($cl->new(1)->bexp(100),
174 is ($cl->new(1)->bexp(100),
175175 '2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427',
176176 'bexp(100)');
177177
178 is ($cl->new("12.5")->bexp(91), $cl->new(1)->bexp(95)->bpow(12.5,91),
179 'bexp(12.5) to 91 digits');
178 is ($cl->new("12.5")->bexp(91), $cl->new(1)->bexp(95)->bpow(12.5,91),
179 'bexp(12.5) to 91 digits');
180180
181181 # all done
182182 1;
189189 print "# Tried: $x->bpow($y,$scale);\n"
190190 unless ok ($cl->new($x)->bpow($y,$scale),$result);
191191 }
192
193
2323 my $cl = "Math::BigFloat";
2424 my $c = "Math::BigInt";
2525
26 # 2 ** 240 =
26 # 2 ** 240 =
2727 # 1766847064778384329583297500742918515827483896875618958121606201292619776
2828
2929 # takes way too long
4646 $result =~ s/\..*//;
4747 is ($c->new($x)->bpow($n)->broot($y,$scale),$result, "Try: $c $x->bpow($n)->broot($y,$s) == $result");
4848 }
49
55 my @tests;
66
77 # test vectors from http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
8 push @tests,
8 push @tests,
99 { padding=>'none', key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7' },
1010 { padding=>'none', key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd' },
1111 { padding=>'none', key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b' },
12 ;
12 ;
1313
1414 # test vectors produced by Crypt::CBC
15 push @tests,
15 push @tests,
1616 { mode=>'AES+Crypt::CBC', padding=>'standard', len=>45, key=>'4cdc909dc310796429e26bcaca1b21329f5060813b7d17bf1a65f293154b54a9', iv=>'9124d8cfafd3d732e597f463d35a8a43', pt=>'ad67301bcd23a5d7b4601f93db3e6b5db71243fa00244182d0a2df6f0384a09f117821b7b70a4bcdc0a73a70130851f704a7aca59b96a3e5b8dc89efa7ee7846a906a3eb591bf8b6b472ae07113ac3cccfb1bc84723ed1472c1f59705eae7b9fbd6df2b38d2eac2a6c726b9f92', ct=>'588c33d96d99477bc6305c829a1fb188ab165f60ccadac67daaefb8054cfe8093cbb6fba14b684c26cd10c66db87cf1aa8cd69c98180d1d7cb6edc9191332863653ea707cb9ec4da0c7d4381cac33faa938a53df3519d06859260be7ac582674cdedfa411f4cd0204c8b2132d4b100cc' },
1717 { mode=>'AES+Crypt::CBC', padding=>'standard', len=>46, key=>'0c1afd6567e265240aacef873eb78ff11ce0e53931ca7de49143d8a2b1c84df5', iv=>'df5f1521ed1ee7b47ae7e5ef0ac49abb', pt=>'13436402bb6c57b3f202e88cd4d21d828e85856415000e5ef01f9fe43bf100ee5b94ea29e3246200dcddbc5779dce5e219c078bbad8cd878727c0c27f179c100beefcc832f605c8e8f27251a8b51b2475d5170ff8100c95d4d875d386016535a13373f7e15d798e0c39c94193b24', ct=>'3eb5203a12d11b2fe629cd764a9963ad7f314d0efe75806c12e00f3bfe916c765a318be81337d1cb43f20c030f8af6e31991fb09477d06baa3492836f884470177584ad32241ac8fd66469fdd858ce1d04e90375689e70a4bc40be149b1df6cabc5943cff8e7cecdac6fe81fc0aac8f8' },
1818 { mode=>'AES+Crypt::CBC', padding=>'standard', len=>47, key=>'9dd6b591b1589ff6fb5bbd41a8da4b1449674155119285857d719d44281daa3d', iv=>'321d48c36326dcc951aa208542d2fdd7', pt=>'75e4309485e3df2006c411a316073973e8adf51bfd6287a7833f15e18f2f6b571c192a527bd6290722713eb77c9116a28b321cc5decd44a5a49a13750d43e99e4d360e647300cb7b9d31a82c39d8885e6d2b5521f1c7339b30d3947bddc7323a50891f4d37a7bc9cc6971037373722', ct=>'f1f7d95a90ece772a931e3c1f919da110246268291d10d5b2a3ff62596f0cd2a0c3dbdab41e210424f5a1d35b72a4df26a32d4c9ac80e808438f31e07a4f16555a82bade488a73afe239e6c557f100cf17632a8f767445ad6db8f7d2775f63f4b4e73fc5180b20334f941f8c49f7968a' },
6767 my $m = Crypt::Mode::CBC->new('AES', $_->{padding});
6868
6969 for my $l (1..33) {
70
70
7171 {
7272 $m->start_encrypt(pack("H*",$_->{key}), pack("H*",$_->{iv}));
7373 my $i = 0;
7979 $ct .= $m->finish;
8080 is(unpack("H*",$ct), $_->{ct}, "cipher text match [l=$l]");
8181 }
82
82
8383 {
8484 $m->start_decrypt(pack("H*",$_->{key}), pack("H*",$_->{iv}));
8585 my $i = 0;
9191 $pt .= $m->finish;
9292 is(unpack("H*",$pt), $_->{pt}, "plain text match [l=$l]");
9393 }
94
95 }
94
95 }
9696 }
9797 }
33 use Crypt::Mode::CFB;
44
55 my @tests = (
6 { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f',
7 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
6 { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f',
7 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
88 ct=>'3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6' },
9 { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f',
10 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c',
9 { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f',
10 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c',
1111 ct=>'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b' },
12 { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f',
13 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b',
12 { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f',
13 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b',
1414 ct=>'dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d' },
1515 );
1616
55 my @tests;
66
77 # test vectors from http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
8 push @tests,
8 push @tests,
99 { padding=>'none', key=>'2b7e151628aed2a6abf7158809cf4f3c', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4' },
1010 { padding=>'none', key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'bd334f1d6e45f25ff712a214571fa5cc974104846d0ad3ad7734ecb3ecee4eefef7afd2270e2e60adce0ba2face6444e9a4b41ba738d6c72fb16691603c18e0e' },
1111 { padding=>'none', key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'f3eed1bdb5d2a03c064b5a7e3db181f8591ccb10d410ed26dc5ba74a31362870b6ed21b99ca6f4f9f153e7b1beafed1d23304b7a39f9f3ff067d8d8f9e24ecc7' },
12 ;
12 ;
1313
1414 # test vectors produced by Crypt::ECB
15 push @tests,
15 push @tests,
1616 { mode=>'AES+Crypt::ECB', padding=>'standard', len=>45, key=>'9c1975bc3f89e58f790e8e1cdaeea5cc1147fa43c5da2f9ae681274bd406a663', pt=>'a99303fcd37a6c39acb2dd2f3955cbcdf2d4643cc5542019f549ca2b62a4b27a099f42e0a8fb90fc53f0f32c5402f89822215472d1a5c5e8e299090cfeb80151222922c91aa0a8e21ff07147ca62a4542cc36fb437ff2f56be51e6db4e763252960b4a02cfda2fb8a74a63c0fa', ct=>'b52d56dfbd230e87af5d6cd122b050ba4dacfa112e214359d04626efbf57ccde810246076261e0dd7be797bc9b07b20c3a737f72822498fecc68d73ff6c057a1313684058ff1110af0e59347953e1b337b6dbcb852f9210099ea4b54482ae4d9069193d5cb22c6cdfad968a27771b38b' },
1717 { mode=>'AES+Crypt::ECB', padding=>'standard', len=>46, key=>'11748a8de11e393c610eb582ee3534414f7187790435cdcbe1fd5f7c6db757be', pt=>'ff6da3d97b3907fcc171090bdcc97a43d98cde4bd76937eb672e3a4ce04b15de634d6c320bbe0b84304e52fbf004111f0d0671674196b3ea380f09295a04deb1f26b4d49bc239669bbed6b9316277516914ca4f30d570c156ea90f58565cbf26ead7c6d04eb411b83ef2445a914c', ct=>'91f00f683e3a381ebadb9553db928776fa972a06ca73a31e38ba6501d0f7b27c0013dcf3b25b3206ccd2083fcc815eaa3f843fa14ceca9e54a687b69d0e515dff1cf4b756744f242955b766c87473275ffa6c2191c89ad064c4b83e95ded84514613bc5d7763ffc0b0ec2281bf36d76c' },
1818 { mode=>'AES+Crypt::ECB', padding=>'standard', len=>47, key=>'d36ba22781e756dfe5e64bc9729e7d50bc00a24133ea90de1d77e666e9b39bb5', pt=>'a74a52d0a02d9e959127a1fa84790605828c6e1e8a9d71ff78320b1bc888affb3e19db2c5e62233ef6ab4adf89524efe369b12259925461b88d412d8276e5e80f327addee10c3e99778e0df730cf70509faef08e7c22b2142cc6201474465b47af54e99299290117eca9514a583ecf', ct=>'1e768190063599f2be4309a27c2d1b294714bb567f231ea9ad17fe31c183b3ab2d3db1b95a3e646aa88c35d98b3ce193640e2013e643b5da787087a2a115b1f61370e42943c90c384c64b128eeaa06c98b0c7b9e9a3c2b875100c5fb9703c5e94dc394c45ffc079d2ba75ad2b342100e' },
5454 my $ct = pack("H*", $_->{ct});
5555 my $m = Crypt::Mode::ECB->new('AES', $_->{padding});
5656 for my $l (1..33) {
57
57
5858 {
5959 $m->start_encrypt(pack("H*",$_->{key}));
6060 my $i = 0;
6666 $ct .= $m->finish;
6767 is(unpack("H*",$ct), $_->{ct}, "cipher text match [l=$l]");
6868 }
69
69
7070 {
7171 $m->start_decrypt(pack("H*",$_->{key}));
7272 my $i = 0;
7878 $pt .= $m->finish;
7979 is(unpack("H*",$pt), $_->{pt}, "plain text match [l=$l]");
8080 }
81
82 }
81
82 }
8383 }
8484 }
33 use Crypt::Mode::OFB;
44
55 my @tests = (
6 { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f',
7 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
6 { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f',
7 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
88 ct=>'3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e' },
9 { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f',
10 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c',
9 { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f',
10 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c',
1111 ct=>'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9ac' },
12 { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f',
13 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b',
12 { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f',
13 pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b',
1414 ct=>'dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8b' },
1515 );
1616
2222 use Crypt::PK::DSA;
2323 use Crypt::Digest 'digest_file';
2424 use Crypt::Misc 'read_rawfile';
25
25
2626 my $pkdsa = Crypt::PK::DSA->new("test_dsakey.pub.pem");
2727 my $signature = read_rawfile("test_input.sha1-dsa.sig");
2828 my $valid = $pkdsa->verify_hash($signature, digest_file("SHA1", "test_input.data"), "SHA1", "v1.5");
3434 use Crypt::PK::DSA;
3535 use Crypt::Digest 'digest_file';
3636 use Crypt::Misc 'write_rawfile';
37
37
3838 my $pkdsa = Crypt::PK::DSA->new("test_dsakey.priv.pem");
3939 my $signature = $pkdsa->sign_hash(digest_file("SHA1", "test_input.data"), "SHA1", "v1.5");
4040 write_rawfile("test_input.sha1-dsa.sig", $signature);
5454 {
5555 use Crypt::PK::DSA;
5656 use Crypt::Misc 'write_rawfile';
57
57
5858 my $pkdsa = Crypt::PK::DSA->new;
5959 $pkdsa->generate_key(20, 128);
6060 write_rawfile("test_dsakey.pub.der", $pkdsa->export_key_der('public'));
6969 openssl dsa -in test_dsakey.priv.pem -text
7070 openssl dsa -in test_dsakey-passwd.priv.pem -text -inform pem -passin pass:secret
7171 openssl dsa -in test_dsakey.pub.der -pubin -text -inform der
72 openssl dsa -in test_dsakey.pub.pem -pubin -text
72 openssl dsa -in test_dsakey.pub.pem -pubin -text
7373 MARKER
7474
7575 doit();
8686
8787 {
8888 use Crypt::PK::DSA;
89
89
9090 my $pkdsa = Crypt::PK::DSA->new;
9191 $pkdsa->import_key("test_dsakey.pub.der");
9292 $pkdsa->import_key("test_dsakey.priv.der");
9898 doit();
9999
100100 warn "\nSUCCESS\n";
101 unlink $_ for (bsd_glob("test_*.der"), bsd_glob("test_*.pem"), bsd_glob("test_*.sig"), bsd_glob("test_*.data"));
101 unlink $_ for (bsd_glob("test_*.der"), bsd_glob("test_*.pem"), bsd_glob("test_*.sig"), bsd_glob("test_*.data"));
126126 }
127127
128128 warn "\nSUCCESS\n";
129 unlink $_ for (bsd_glob("test_*.der"), bsd_glob("test_*.pem"), bsd_glob("test_*.sig"), bsd_glob("test_*.data"));
129 unlink $_ for (bsd_glob("test_*.der"), bsd_glob("test_*.pem"), bsd_glob("test_*.sig"), bsd_glob("test_*.data"));
2121 {
2222 use Crypt::PK::RSA;
2323 use Crypt::Misc 'read_rawfile';
24
24
2525 my $pkrsa = Crypt::PK::RSA->new("test_rsakey.priv.pem");
2626 my $encfile = read_rawfile("test_input.encrypted.rsa");
2727 my $plaintext = $pkrsa->decrypt($encfile, 'v1.5');
3232 {
3333 use Crypt::PK::RSA;
3434 use Crypt::Misc 'write_rawfile';
35
35
3636 my $plaintext = 'secret message';
3737 my $pkrsa = Crypt::PK::RSA->new("test_rsakey.pub.pem");
3838 my $encrypted = $pkrsa->encrypt($plaintext, 'v1.5');
5252 use Crypt::PK::RSA;
5353 use Crypt::Digest 'digest_file';
5454 use Crypt::Misc 'read_rawfile';
55
55
5656 my $pkrsa = Crypt::PK::RSA->new("test_rsakey.pub.pem");
5757 my $signature = read_rawfile("test_input.sha1-rsa.sig");
5858 my $valid = $pkrsa->verify_hash($signature, digest_file("SHA1", "test_input.data"), "SHA1", "v1.5");
6464 use Crypt::PK::RSA;
6565 use Crypt::Digest 'digest_file';
6666 use Crypt::Misc 'write_rawfile';
67
67
6868 my $pkrsa = Crypt::PK::RSA->new("test_rsakey.priv.pem");
6969 my $signature = $pkrsa->sign_hash(digest_file("SHA1", "test_input.data"), "SHA1", "v1.5");
7070 write_rawfile("test_input.sha1-rsa.sig", $signature);
8484 {
8585 use Crypt::PK::RSA;
8686 use Crypt::Misc 'write_rawfile';
87
87
8888 my $pkrsa = Crypt::PK::RSA->new;
8989 $pkrsa->generate_key(256, 65537);
9090 write_rawfile("test_rsakey.pub.der", $pkrsa->export_key_der('public'));
9999 openssl rsa -in test_rsakey.priv.pem -text
100100 openssl rsa -in test_rsakey-passwd.priv.pem -text -inform pem -passin pass:secret
101101 openssl rsa -in test_rsakey.pub.der -pubin -text -inform der
102 openssl rsa -in test_rsakey.pub.pem -pubin -text
102 openssl rsa -in test_rsakey.pub.pem -pubin -text
103103 MARKER
104104
105105 doit();
116116
117117 {
118118 use Crypt::PK::RSA;
119
119
120120 my $pkrsa = Crypt::PK::RSA->new;
121121 $pkrsa->import_key("test_rsakey.pub.der");
122122 $pkrsa->import_key("test_rsakey.priv.der");
128128 doit();
129129
130130 warn "\nSUCCESS\n";
131 unlink $_ for (bsd_glob("test_*.der"), bsd_glob("test_*.pem"), bsd_glob("test_*.sig"), bsd_glob("test_*.rsa"), bsd_glob("test_*.data"));
131 unlink $_ for (bsd_glob("test_*.der"), bsd_glob("test_*.pem"), bsd_glob("test_*.sig"), bsd_glob("test_*.rsa"), bsd_glob("test_*.data"));
1212 ok($k->is_private, 'is_private cryptx_priv_dh1.bin');
1313 is($k->size, 256, 'size');
1414 is(uc($k->key2hash->{x}), '73CA6A11B1595C06AB08E8E0875B9689E265C29E3F52FBC7830F071AEA4AF5A26D23CFBC96101267', 'key2hash');
15
15
1616 $k = Crypt::PK::DH->new('t/data/cryptx_priv_dh2.bin');
1717 ok($k, 'load cryptx_priv_dh2.bin');
1818 ok($k->is_private, 'is_private cryptx_priv_dh2.bin');
19
19
2020 $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh1.bin');
2121 ok($k, 'load cryptx_pub_dh1.bin');
2222 ok(!$k->is_private, 'is_private cryptx_pub_dh1.bin');
23
23
2424 $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh2.bin');
2525 ok($k, 'load cryptx_pub_dh2.bin');
2626 ok(!$k->is_private, 'is_private cryptx_pub_dh2.bin');
3434 ok($k->is_private, 'is_private cryptx_priv_dh_pg1.bin');
3535 is($k->size, 256, 'size');
3636 is(uc($k->key2hash->{x}), '3E2F764CDAD2EDFEC737E2198C9C4FAFBA4274C8A73A9E2FDCBC11954D8B48C375399E4BDE930EC9', 'key2hash');
37
37
3838 $k = Crypt::PK::DH->new('t/data/cryptx_priv_dh_pg2.bin');
3939 ok($k, 'load cryptx_priv_dh_pg2.bin');
4040 ok($k->is_private, 'is_private cryptx_priv_dh_pg2.bin');
41
41
4242 $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh_pg1.bin');
4343 ok($k, 'load cryptx_pub_dh_pg1.bin');
4444 ok(!$k->is_private, 'is_private cryptx_pub_dh_pg1.bin');
45
45
4646 $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh_pg2.bin');
4747 ok($k, 'load cryptx_pub_dh_pg2.bin');
4848 ok(!$k->is_private, 'is_private cryptx_pub_dh_pg2.bin');
5858 $pr2->import_key('t/data/cryptx_priv_dh2.bin');
5959 my $pu2 = Crypt::PK::DH->new;
6060 $pu2->import_key('t/data/cryptx_pub_dh2.bin');
61
61
6262 my $ss1 = $pr1->shared_secret($pu2);
6363 my $ss2 = $pr2->shared_secret($pu1);
6464 is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret');
6969 $pr1->import_key('t/data/cryptx_priv_dh_pg1.bin');
7070 my $pu1 = Crypt::PK::DH->new;
7171 $pu1->import_key('t/data/cryptx_pub_dh_pg1.bin');
72
72
7373 my $pr2 = Crypt::PK::DH->new;
7474 $pr2->import_key('t/data/cryptx_priv_dh_pg2.bin');
7575 my $pu2 = Crypt::PK::DH->new;
7676 $pu2->import_key('t/data/cryptx_pub_dh_pg2.bin');
77
77
7878 my $ss1 = $pr1->shared_secret($pu2);
7979 my $ss2 = $pr2->shared_secret($pu1);
8080 is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret');
1616 $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa2.der');
1717 ok($k, 'load cryptx_priv_dsa2.der');
1818 ok($k->is_private, 'is_private cryptx_priv_dsa2.der');
19
19
2020 $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa1.der');
2121 ok($k, 'load cryptx_pub_dsa1.der');
2222 ok(!$k->is_private, 'is_private cryptx_pub_dsa1.der');
23
23
2424 $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa2.der');
2525 ok($k, 'load cryptx_pub_dsa2.der');
2626 ok(!$k->is_private, 'is_private cryptx_pub_dsa2.der');
27
27
2828 $k = Crypt::PK::DSA->new('t/data/openssl_dsa1.der');
2929 ok($k, 'load openssl_dsa1.der');
3030 ok($k->is_private, 'is_private openssl_dsa1.der');
31
31
3232 $k = Crypt::PK::DSA->new('t/data/openssl_dsa2.der');
3333 ok($k, 'load openssl_dsa2.der');
3434 ok($k->is_private, 'is_private openssl_dsa2.der');
35
35
3636 $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa1.pem');
3737 ok($k, 'load cryptx_priv_dsa1.pem');
3838 ok($k->is_private, 'is_private cryptx_priv_dsa1.pem');
39
39
4040 $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa2.pem');
4141 ok($k, 'load cryptx_priv_dsa2.pem');
4242 ok($k->is_private, 'is_private cryptx_priv_dsa2.pem');
43
43
4444 $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa1.pem');
4545 ok($k, 'load cryptx_pub_dsa1.pem');
4646 ok(!$k->is_private, 'is_private cryptx_pub_dsa1.pem');
47
47
4848 $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa2.pem');
4949 ok($k, 'load cryptx_pub_dsa2.pem');
5050 ok(!$k->is_private, 'is_private cryptx_pub_dsa2.pem');
51
51
5252 $k = Crypt::PK::DSA->new('t/data/openssl_dsa1.pem');
5353 ok($k, 'load openssl_dsa1.pem');
5454 ok($k->is_private, 'is_private openssl_dsa1.pem');
55
55
5656 $k = Crypt::PK::DSA->new('t/data/openssl_dsa2.pem');
5757 ok($k, 'load openssl_dsa2.pem');
5858 ok($k->is_private, 'is_private openssl_dsa2.pem');
6363 $pr1->import_key('t/data/cryptx_priv_dsa1.der');
6464 my $pu1 = Crypt::PK::DSA->new;
6565 $pu1->import_key('t/data/cryptx_pub_dsa1.der');
66
66
6767 my $ct = $pu1->encrypt("secret message");
6868 my $pt = $pr1->decrypt($ct);
6969 ok(length $ct > 200, 'encrypt ' . length($ct));
7676 my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd");
7777 $sig = $pr1->sign_hash($hash, 'SHA1');
7878 ok(length $sig > 60, 'sign_hash ' . length($sig));
79 ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash');
80
79 ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash');
80
8181 my $pr2 = Crypt::PK::DSA->new;
8282 $pr2->import_key('t/data/cryptx_priv_dsa2.der');
8383 my $pu2 = Crypt::PK::DSA->new;
8484 $pu2->import_key('t/data/cryptx_pub_dsa2.der');
85
85
8686 #my $ss1 = $pr1->shared_secret($pu2);
8787 #my $ss2 = $pr2->shared_secret($pu1);
8888 #is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret');
2929 $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.der');
3030 ok($k, 'load cryptx_priv_ecc2.der');
3131 ok($k->is_private, 'is_private cryptx_priv_ecc2.der');
32
32
3333 $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc1.der');
3434 ok($k, 'load cryptx_pub_ecc1.der');
3535 ok(!$k->is_private, 'is_private cryptx_pub_ecc1.der');
36
36
3737 $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc2.der');
3838 ok($k, 'load cryptx_pub_ecc2.der');
3939 ok(!$k->is_private, 'is_private cryptx_pub_ecc2.der');
40
40
4141 ### XXX-TODO regenerate keys
4242 $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc1.pem');
4343 ok($k, 'load cryptx_priv_ecc1.pem');
4444 ok($k->is_private, 'is_private cryptx_priv_ecc1.pem');
45
45
4646 $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.pem');
4747 ok($k, 'load cryptx_priv_ecc2.pem');
4848 ok($k->is_private, 'is_private cryptx_priv_ecc2.pem');
49
49
5050 $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc1.pem');
5151 ok($k, 'load cryptx_pub_ecc1.pem');
5252 ok(!$k->is_private, 'is_private cryptx_pub_ecc1.pem');
53
53
5454 $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc2.pem');
5555 ok($k, 'load cryptx_pub_ecc2.pem');
5656 ok(!$k->is_private, 'is_private cryptx_pub_ecc2.pem');
8787 $pr1->import_key('t/data/cryptx_priv_ecc1.der');
8888 my $pu1 = Crypt::PK::ECC->new;
8989 $pu1->import_key('t/data/cryptx_pub_ecc1.der');
90
90
9191 my $ct = $pu1->encrypt("secret message");
9292 my $pt = $pr1->decrypt($ct);
9393 ok(length $ct > 30, 'encrypt ' . length($ct));
9494 is($pt, "secret message", 'decrypt');
95
95
9696 my $sig = $pr1->sign_message("message");
9797 ok(length $sig > 60, 'sign_message ' . length($sig));
9898 ok($pu1->verify_message($sig, "message"), 'verify_message');
104104 my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd");
105105 $sig = $pr1->sign_hash($hash, 'SHA1');
106106 ok(length $sig > 60, 'sign_hash ' . length($sig));
107 ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash');
108
107 ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash');
108
109109 my $pr2 = Crypt::PK::ECC->new;
110110 $pr2->import_key('t/data/cryptx_priv_ecc2.der');
111111 my $pu2 = Crypt::PK::ECC->new;
112112 $pu2->import_key('t/data/cryptx_pub_ecc2.der');
113
113
114114 my $ss1 = $pr1->shared_secret($pu2);
115115 my $ss2 = $pr2->shared_secret($pu1);
116116 is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret');
141141 $sig = ecc_sign_hash('t/data/cryptx_priv_ecc1.der', $hash, 'SHA1');
142142 ok($sig, 'ecc_sign_hash');
143143 ok(ecc_verify_hash('t/data/cryptx_pub_ecc1.der', $sig, $hash, 'SHA1'), 'ecc_verify_hash');
144
144
145145 my $ss1 = ecc_shared_secret('t/data/cryptx_priv_ecc1.der', 't/data/cryptx_pub_ecc2.der');
146146 my $ss2 = ecc_shared_secret('t/data/cryptx_priv_ecc2.der', 't/data/cryptx_pub_ecc1.der');
147147 is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret');
7676 for my $h (@$data) {
7777 my $ec_pri = Crypt::PK::ECC->new->import_key_raw(pack("H*",$h->{PRI}), $h->{CURVE});
7878 my $ec_pub = Crypt::PK::ECC->new->import_key_raw(pack("H*",$h->{PUB}), $h->{CURVE});
79 my $ec_pubc = Crypt::PK::ECC->new->import_key_raw(pack("H*",$h->{PUBC}), $h->{CURVE});
79 my $ec_pubc = Crypt::PK::ECC->new->import_key_raw(pack("H*",$h->{PUBC}), $h->{CURVE});
8080 is( unpack("H*", $ec_pub ->export_key_raw('public_compressed')), $h->{PUBC}, "$h->{PRI_FILE}/ec_pub public compressed");
8181 is( unpack("H*", $ec_pub ->export_key_raw('public')) , $h->{PUB}, "$h->{PRI_FILE}/ec_pub public uncompressed");
8282 is( unpack("H*", $ec_pubc->export_key_raw('public_compressed')), $h->{PUBC}, "$h->{PRI_FILE}/ec_pubc public compressed");
1515 $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa2.der');
1616 ok($k, 'load cryptx_priv_rsa2.der');
1717 ok($k->is_private, 'is_private cryptx_priv_rsa2.der');
18
18
1919 $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa1.der');
2020 ok($k, 'load cryptx_pub_rsa1.der');
2121 ok(!$k->is_private, 'is_private cryptx_pub_rsa1.der');
22
22
2323 $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa2.der');
2424 ok($k, 'load cryptx_pub_rsa2.der');
2525 ok(!$k->is_private, 'is_private cryptx_pub_rsa2.der');
26
26
2727 $k = Crypt::PK::RSA->new('t/data/openssl_rsa1.der');
2828 ok($k, 'load openssl_rsa1.der');
2929 ok($k->is_private, 'is_private openssl_rsa1.der');
30
30
3131 $k = Crypt::PK::RSA->new('t/data/openssl_rsa2.der');
3232 ok($k, 'load openssl_rsa2.der');
3333 ok($k->is_private, 'is_private openssl_rsa2.der');
34
34
3535 $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa1.pem');
3636 ok($k, 'load cryptx_priv_rsa1.pem');
3737 ok($k->is_private, 'is_private cryptx_priv_rsa1.pem');
38
38
3939 $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa2.pem');
4040 ok($k, 'load cryptx_priv_rsa2.pem');
4141 ok($k->is_private, 'is_private cryptx_priv_rsa2.pem');
42
42
4343 $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa1.pem');
4444 ok($k, 'load cryptx_pub_rsa1.pem');
4545 ok(!$k->is_private, 'is_private cryptx_pub_rsa1.pem');
46
46
4747 $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa2.pem');
4848 ok($k, 'load cryptx_pub_rsa2.pem');
4949 ok(!$k->is_private, 'is_private cryptx_pub_rsa2.pem');
50
50
5151 $k = Crypt::PK::RSA->new('t/data/openssl_rsa1.pem');
5252 ok($k, 'load openssl_rsa1.pem');
5353 ok($k->is_private, 'is_private openssl_rsa1.pem');
54
54
5555 $k = Crypt::PK::RSA->new('t/data/openssl_rsa2.pem');
5656 ok($k, 'load openssl_rsa2.pem');
5757 ok($k->is_private, 'is_private openssl_rsa2.pem');
5858
59 # X509
59 # X509
6060 $k = Crypt::PK::RSA->new('t/data/openssl_rsa-x509.pem');
6161 ok($k, 'openssl_rsa-x509.pem');
6262 ok(!$k->is_private, 'not private openssl_rsa-x509.pem');
7070 $pr1->import_key('t/data/cryptx_priv_rsa1.der');
7171 my $pu1 = Crypt::PK::RSA->new;
7272 $pu1->import_key('t/data/cryptx_pub_rsa1.der');
73
73
7474 my $ct = $pu1->encrypt("secret message");
7575 my $pt = $pr1->decrypt($ct);
7676 ok(length $ct > 200, 'encrypt ' . length($ct));
7777 is($pt, "secret message", 'decrypt');
78
78
7979 my $sig = $pr1->sign_message("message");
8080 ok(length $sig > 60, 'sign_message ' . length($sig));
8181 ok($pu1->verify_message($sig, "message"), 'verify_message');
1010 my $sum = 0;
1111 $sum += $r->double for (1..1000);
1212 my $avg = $sum/1000;
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
1414 }
1515
1616 {
1717 my $sum = 0;
1818 $sum += $r->double(-180) for (1..1000);
1919 my $avg = $sum/1000;
20 ok($avg>-100 && $avg<-80, "rand $avg");
20 ok($avg>-100 && $avg<-80, "rand $avg");
2121 }
2222
2323 {
2424 my $sum = 0;
2525 $sum += $r->int32 for (1..1000);
2626 my $avg = $sum/1000;
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
2828 }
2929
3030 {
3131 my $sum = 0;
3232 $sum += rand(80) for (1..1000);
3333 my $avg = $sum/1000;
34 ok($avg>30 && $avg<50, "rand $avg");
34 ok($avg>30 && $avg<50, "rand $avg");
3535 }
3636
3737 {
3838 my $sum = 0;
3939 $sum += rand(-180) for (1..1000);
4040 my $avg = $sum/1000;
41 ok($avg>-100 && $avg<-80, "rand $avg");
41 ok($avg>-100 && $avg<-80, "rand $avg");
4242 }
4343
4444 {
4545 my $sum = 0;
4646 $sum += irand for (1..1000);
4747 my $avg = $sum/1000;
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
4949 }
5050
5151 {
5555 like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex");
5656 like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64");
5757 like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u");
58
58
5959 like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string');
6060 like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string');
6161 is(length random_bytes(55), 55, "bytes");
1010 my $sum = 0;
1111 $sum += $r->double for (1..1000);
1212 my $avg = $sum/1000;
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
1414 }
1515
1616 {
1717 my $sum = 0;
1818 $sum += $r->double(-180) for (1..1000);
1919 my $avg = $sum/1000;
20 ok($avg>-100 && $avg<-80, "rand $avg");
20 ok($avg>-100 && $avg<-80, "rand $avg");
2121 }
2222
2323 {
2424 my $sum = 0;
2525 $sum += $r->int32 for (1..1000);
2626 my $avg = $sum/1000;
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
2828 }
2929
3030 {
3131 my $sum = 0;
3232 $sum += rand(80) for (1..1000);
3333 my $avg = $sum/1000;
34 ok($avg>30 && $avg<50, "rand $avg");
34 ok($avg>30 && $avg<50, "rand $avg");
3535 }
3636
3737 {
3838 my $sum = 0;
3939 $sum += rand(-180) for (1..1000);
4040 my $avg = $sum/1000;
41 ok($avg>-100 && $avg<-80, "rand $avg");
41 ok($avg>-100 && $avg<-80, "rand $avg");
4242 }
4343
4444 {
4545 my $sum = 0;
4646 $sum += irand for (1..1000);
4747 my $avg = $sum/1000;
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
4949 }
5050
5151 {
5555 like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex");
5656 like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64");
5757 like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u");
58
58
5959 like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string');
6060 like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string');
6161 is(length random_bytes(55), 55, "bytes");
1010 my $sum = 0;
1111 $sum += $r->double for (1..1000);
1212 my $avg = $sum/1000;
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
1414 }
1515
1616 {
1717 my $sum = 0;
1818 $sum += $r->double(-180) for (1..1000);
1919 my $avg = $sum/1000;
20 ok($avg>-100 && $avg<-80, "rand $avg");
20 ok($avg>-100 && $avg<-80, "rand $avg");
2121 }
2222
2323 {
2424 my $sum = 0;
2525 $sum += $r->int32 for (1..1000);
2626 my $avg = $sum/1000;
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
2828 }
2929
3030 {
3131 my $sum = 0;
3232 $sum += rand(80) for (1..1000);
3333 my $avg = $sum/1000;
34 ok($avg>30 && $avg<50, "rand $avg");
34 ok($avg>30 && $avg<50, "rand $avg");
3535 }
3636
3737 {
3838 my $sum = 0;
3939 $sum += rand(-180) for (1..1000);
4040 my $avg = $sum/1000;
41 ok($avg>-100 && $avg<-80, "rand $avg");
41 ok($avg>-100 && $avg<-80, "rand $avg");
4242 }
4343
4444 {
4545 my $sum = 0;
4646 $sum += irand for (1..1000);
4747 my $avg = $sum/1000;
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
4949 }
5050
5151 {
5555 like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex");
5656 like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64");
5757 like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u");
58
58
5959 like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string');
6060 like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string');
6161 is(length random_bytes(55), 55, "bytes");
1010 my $sum = 0;
1111 $sum += $r->double for (1..1000);
1212 my $avg = $sum/1000;
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
1414 }
1515
1616 {
1717 my $sum = 0;
1818 $sum += $r->double(-180) for (1..1000);
1919 my $avg = $sum/1000;
20 ok($avg>-100 && $avg<-80, "rand $avg");
20 ok($avg>-100 && $avg<-80, "rand $avg");
2121 }
2222
2323 {
2424 my $sum = 0;
2525 $sum += $r->int32 for (1..1000);
2626 my $avg = $sum/1000;
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
2828 }
2929
3030 {
3131 my $sum = 0;
3232 $sum += rand(80) for (1..1000);
3333 my $avg = $sum/1000;
34 ok($avg>30 && $avg<50, "rand $avg");
34 ok($avg>30 && $avg<50, "rand $avg");
3535 }
3636
3737 {
3838 my $sum = 0;
3939 $sum += rand(-180) for (1..1000);
4040 my $avg = $sum/1000;
41 ok($avg>-100 && $avg<-80, "rand $avg");
41 ok($avg>-100 && $avg<-80, "rand $avg");
4242 }
4343
4444 {
4545 my $sum = 0;
4646 $sum += irand for (1..1000);
4747 my $avg = $sum/1000;
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
4949 }
5050
5151 {
5555 like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex");
5656 like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64");
5757 like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u");
58
58
5959 like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string');
6060 like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string');
6161 is(length random_bytes(55), 55, "bytes");
1010 my $sum = 0;
1111 $sum += $r->double for (1..1000);
1212 my $avg = $sum/1000;
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
1414 }
1515
1616 {
1717 my $sum = 0;
1818 $sum += $r->double(-180) for (1..1000);
1919 my $avg = $sum/1000;
20 ok($avg>-100 && $avg<-80, "rand $avg");
20 ok($avg>-100 && $avg<-80, "rand $avg");
2121 }
2222
2323 {
2424 my $sum = 0;
2525 $sum += $r->int32 for (1..1000);
2626 my $avg = $sum/1000;
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
2828 }
2929
3030 {
3131 my $sum = 0;
3232 $sum += rand(80) for (1..1000);
3333 my $avg = $sum/1000;
34 ok($avg>30 && $avg<50, "rand $avg");
34 ok($avg>30 && $avg<50, "rand $avg");
3535 }
3636
3737 {
3838 my $sum = 0;
3939 $sum += rand(-180) for (1..1000);
4040 my $avg = $sum/1000;
41 ok($avg>-100 && $avg<-80, "rand $avg");
41 ok($avg>-100 && $avg<-80, "rand $avg");
4242 }
4343
4444 {
4545 my $sum = 0;
4646 $sum += irand for (1..1000);
4747 my $avg = $sum/1000;
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
4949 }
5050
5151 {
5555 like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex");
5656 like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64");
5757 like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u");
58
58
5959 like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string');
6060 like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string');
6161 is(length random_bytes(55), 55, "bytes");
1010 my $sum = 0;
1111 $sum += $r->double for (1..1000);
1212 my $avg = $sum/1000;
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
13 ok($avg>0.4 && $avg<0.6, "rand $avg");
1414 }
1515
1616 {
1717 my $sum = 0;
1818 $sum += $r->double(-180) for (1..1000);
1919 my $avg = $sum/1000;
20 ok($avg>-100 && $avg<-80, "rand $avg");
20 ok($avg>-100 && $avg<-80, "rand $avg");
2121 }
2222
2323 {
2424 my $sum = 0;
2525 $sum += $r->int32 for (1..1000);
2626 my $avg = $sum/1000;
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
27 ok($avg>2**30 && $avg<2**32, "rand $avg");
2828 }
2929
3030 {
3131 my $sum = 0;
3232 $sum += rand(80) for (1..1000);
3333 my $avg = $sum/1000;
34 ok($avg>30 && $avg<50, "rand $avg");
34 ok($avg>30 && $avg<50, "rand $avg");
3535 }
3636
3737 {
3838 my $sum = 0;
3939 $sum += rand(-180) for (1..1000);
4040 my $avg = $sum/1000;
41 ok($avg>-100 && $avg<-80, "rand $avg");
41 ok($avg>-100 && $avg<-80, "rand $avg");
4242 }
4343
4444 {
4545 my $sum = 0;
4646 $sum += irand for (1..1000);
4747 my $avg = $sum/1000;
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
48 ok($avg>2**30 && $avg<2**32, "rand $avg");
4949 }
5050
5151 {
5555 like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex");
5656 like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64");
5757 like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u");
58
58
5959 like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string');
6060 like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string');
6161 is(length random_bytes(55), 55, "bytes");