fix trailing whitespaces and tabs
Karel Miko
6 years ago
30 | 30 | |
31 | 31 | rv = pkcs_5_alg1(password_ptr, (unsigned long)password_len, salt_ptr, iteration_count, id, output, &output_len); |
32 | 32 | if (rv != CRYPT_OK) { |
33 | SvREFCNT_dec(RETVAL); | |
33 | SvREFCNT_dec(RETVAL); | |
34 | 34 | croak("FATAL: pkcs_5_alg1 process failed: %s", error_to_string(rv)); |
35 | 35 | } |
36 | 36 | SvCUR_set(RETVAL, output_len); |
68 | 68 | |
69 | 69 | rv = pkcs_5_alg2(password_ptr, (unsigned long)password_len, salt_ptr, (unsigned long)salt_len, iteration_count, id, output, &output_len); |
70 | 70 | if (rv != CRYPT_OK) { |
71 | SvREFCNT_dec(RETVAL); | |
71 | SvREFCNT_dec(RETVAL); | |
72 | 72 | croak("FATAL: pkcs_5_alg2 process failed: %s", error_to_string(rv)); |
73 | 73 | } |
74 | 74 | SvCUR_set(RETVAL, output_len); |
137 | 137 | |
138 | 138 | rv = hkdf_expand(id, info_ptr, (unsigned long)info_len, in_ptr, (unsigned long)in_len, output, output_len); |
139 | 139 | if (rv != CRYPT_OK) { |
140 | SvREFCNT_dec(RETVAL); | |
140 | SvREFCNT_dec(RETVAL); | |
141 | 141 | croak("FATAL: hkdf_expand process failed: %s", error_to_string(rv)); |
142 | 142 | } |
143 | 143 | SvCUR_set(RETVAL, output_len); |
178 | 178 | |
179 | 179 | rv = hkdf(id, salt_ptr, (unsigned long)salt_len, info_ptr, (unsigned long)info_len, in_ptr, (unsigned long)in_len, output, output_len); |
180 | 180 | if (rv != CRYPT_OK) { |
181 | SvREFCNT_dec(RETVAL); | |
181 | SvREFCNT_dec(RETVAL); | |
182 | 182 | croak("FATAL: hkdf_expand process failed: %s", error_to_string(rv)); |
183 | 183 | } |
184 | 184 | SvCUR_set(RETVAL, output_len); |
30 | 30 | eval "use $m; 1;" or push @err, "ERROR: 'use $m' failed"; |
31 | 31 | } |
32 | 32 | |
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 | ||
33 | 45 | warn "$_\n" for (@err); |
34 | 46 | die if @err; |
35 | 47 |
11 | 11 | |
12 | 12 | for my $m (sort @files) { |
13 | 13 | Test::Pod::pod_file_ok( $m, "Valid POD in '$m'" ); |
14 | }⏎ | |
14 | } |
7 | 7 | |
8 | 8 | Test::Pod::Spelling->import( |
9 | 9 | 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 | |
12 | 12 | Karel Miko OCB OCBv OID OMAC OO OpenSSL PBKDF PEM PKCS RIPEMD Rijndael SHA UUID RFC |
13 | 13 | decrypt decrypts interoperability cryptographically cryptographic octects |
14 | 14 | libtomcrypt libtommath |
15 | 15 | params paramshash irand perl endian zbase bumac bmac budigest bdigest md de |
16 | blakes_ blakeb_ | |
16 | blakes_ blakeb_ | |
17 | 17 | XOR'ing XOR'ed |
18 | 18 | )] |
19 | 19 | }, |
49 | 49 | is(unpack('H*', $tag), "9e9cba5dd4939d0d8e2687c85c5d3b89", "ccm_encrypt_authenticate: tag (no header)"); |
50 | 50 | my $pt = ccm_decrypt_verify('AES', $key, $nonce, "", $ct, $tag); |
51 | 51 | is($pt, "plain_halfplain_half", "ccm_decrypt_verify: plaintext (no header)"); |
52 | }⏎ | |
52 | } |
6 | 6 | |
7 | 7 | sub do_test { |
8 | 8 | my %a = @_; |
9 | ||
10 | my $key = pack("H*", $a{key}); | |
9 | ||
10 | my $key = pack("H*", $a{key}); | |
11 | 11 | my $nonce = pack("H*", $a{nonce}); |
12 | 12 | my $header = pack("H*", $a{header}); |
13 | 13 | my $plaintext = pack("H*", $a{plaintext}); |
14 | 14 | my $ciphertext = pack("H*", $a{ciphertext}); |
15 | 15 | my $tag = pack("H*", $a{tag}); |
16 | ||
16 | ||
17 | 17 | my ($ct3, $tag3) = ccm_encrypt_authenticate('AES', $key, $nonce, $header, length($tag), $plaintext); |
18 | 18 | is(unpack('H*', $ct3), $a{ciphertext}, "enc: ciphertext"); |
19 | 19 | is(unpack('H*', $tag3), $a{tag}, "enc: tag"); |
32 | 32 | ciphertext=>'588c979a61c663d2f066d0c2c0f989806d5f6b61dac384', |
33 | 33 | tag=>'17e8d12cfdf926e0', |
34 | 34 | }, |
35 | ||
35 | ||
36 | 36 | #/* 13 byte nonce, 12 byte header, 19 byte pt */ |
37 | 37 | { |
38 | 38 | key=>'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf', |
42 | 42 | ciphertext=>'a28c6865939a9a79faaa5c4c2a9d4a91cdac8c', |
43 | 43 | tag=>'96c861b9c9e61ef1', |
44 | 44 | }, |
45 | ||
45 | ||
46 | 46 | #/* supplied by Brian Gladman */ |
47 | 47 | { |
48 | 48 | key=>'404142434445464748494a4b4c4d4e4f', |
52 | 52 | ciphertext=>'7162015b', |
53 | 53 | tag=>'4dac255d', |
54 | 54 | }, |
55 | ||
55 | ||
56 | 56 | { |
57 | 57 | key=>'c97c1f67ce371185514a8a19f2bdd52f', |
58 | 58 | nonce=>'005030f1844408b5039776e70c', |
61 | 61 | ciphertext=>'f3d0a2fe9a3dbf2342a643e43246e80c3c04d019', |
62 | 62 | tag=>'7845ce0b16f97623', |
63 | 63 | }, |
64 | ); | |
64 | ); |
6 | 6 | |
7 | 7 | sub do_test { |
8 | 8 | my %a = @_; |
9 | ||
10 | my $key = pack("H*", $a{key}); | |
9 | ||
10 | my $key = pack("H*", $a{key}); | |
11 | 11 | my $nonce = pack("H*", $a{nonce}); |
12 | 12 | my $header = pack("H*", $a{header}); |
13 | 13 | my $plaintext = pack("H*", $a{plaintext}); |
14 | 14 | my $ciphertext = pack("H*", $a{ciphertext}); |
15 | 15 | my $tag = pack("H*", $a{tag}); |
16 | ||
16 | ||
17 | 17 | # encrypt |
18 | 18 | my $m1 = Crypt::AuthEnc::EAX->new("AES", $key, $nonce); |
19 | 19 | $m1->header_add($header); |
38 | 38 | is(unpack('H*', $tag3), $a{tag}, "enc: tag"); |
39 | 39 | my $pt3 = eax_decrypt_verify('AES', $key, $nonce, $header, $ciphertext, $tag); |
40 | 40 | is(unpack('H*', $pt3), $a{plaintext}, "dec: plaintext"); |
41 | ||
41 | ||
42 | 42 | } |
43 | 43 | |
44 | 44 | do_test(%$_) for ( |
76 | 76 | { |
77 | 77 | #16, 16, 16, 32, |
78 | 78 | key => '000102030405060708090a0b0c0d0e0f', |
79 | nonce => '000102030405060708090a0b0c0d0e0f', | |
79 | nonce => '000102030405060708090a0b0c0d0e0f', | |
80 | 80 | header => '000102030405060708090a0b0c0d0e0f', |
81 | 81 | plaintext => '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', |
82 | 82 | ciphertext => '29d878d1a3be857b6fb8c8ea5950a778331fbf2ccf33986f35e8cf121dcb30bc', |
86 | 86 | { |
87 | 87 | #16, 15, 14, 29, |
88 | 88 | key => '000102030405060708090a0b0c0d0e0f', |
89 | nonce => '000102030405060708090a0b0c0d0e', | |
89 | nonce => '000102030405060708090a0b0c0d0e', | |
90 | 90 | header => '000102030405060708090a0b0c0d', |
91 | 91 | plaintext => '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c', |
92 | 92 | ciphertext => 'dd25c754c5b17c5928b69b73155f7bb8888faf37091ad92c8a24db868b', |
93 | 93 | tag => '0d1a14e52224ffd23a05fa02cdef52da', |
94 | 94 | }, |
95 | ||
95 | ||
96 | 96 | #/* Vectors from Brian Gladman */ |
97 | 97 | { |
98 | 98 | #16, 16, 8, 0, |
121 | 121 | ciphertext => 'd851d5bae0', |
122 | 122 | tag => '3a59f238a23e39199dc9266626c40f80', |
123 | 123 | }, |
124 | ); | |
124 | ); |
6 | 6 | |
7 | 7 | sub do_test { |
8 | 8 | my %a = @_; |
9 | ||
10 | my $key = pack("H*", $a{key}); | |
9 | ||
10 | my $key = pack("H*", $a{key}); | |
11 | 11 | my $adata = pack("H*", $a{adata}); |
12 | 12 | my $iv = pack("H*", $a{iv}); |
13 | 13 | my $plaintext = pack("H*", $a{plaintext}); |
14 | 14 | my $ciphertext = pack("H*", $a{ciphertext}); |
15 | 15 | my $tag = pack("H*", $a{tag}); |
16 | ||
16 | ||
17 | 17 | # encrypt |
18 | 18 | my $m1 = Crypt::AuthEnc::GCM->new("AES", $key); |
19 | 19 | $m1->iv_add($iv); |
40 | 40 | is(unpack('H*', $tag3), $a{tag}, "enc: tag"); |
41 | 41 | my $pt3 = gcm_decrypt_verify('AES', $key, $iv, $adata, $ciphertext, $tag); |
42 | 42 | is(unpack('H*', $pt3), $a{plaintext}, "dec: plaintext"); |
43 | ||
43 | ||
44 | 44 | } |
45 | 45 | |
46 | 46 | do_test(%$_) for ( |
54 | 54 | # ciphertext => '', |
55 | 55 | # tag => '58e2fccefa7e3061367f1d57a4e7455a', |
56 | 56 | # }, |
57 | ||
57 | ||
58 | 58 | #/* test case #2 */ |
59 | 59 | { |
60 | 60 | key => '00000000000000000000000000000000', |
64 | 64 | ciphertext => '0388dace60b6a392f328c2b971b2fe78', |
65 | 65 | tag => 'ab6e47d42cec13bdf53a67b21257bddf', |
66 | 66 | }, |
67 | ||
67 | ||
68 | 68 | #/* test case #3 */ |
69 | 69 | { |
70 | 70 | key => 'feffe9928665731c6d6a8f9467308308', |
74 | 74 | ciphertext => '42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985', |
75 | 75 | tag => '4d5c2af327cd64a62cf35abd2ba6fab4', |
76 | 76 | }, |
77 | ||
77 | ||
78 | 78 | #/* test case #4 */ |
79 | 79 | { |
80 | 80 | key => 'feffe9928665731c6d6a8f9467308308', |
84 | 84 | ciphertext => '42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091', |
85 | 85 | tag => '5bc94fbc3221a5db94fae95ae7121a47', |
86 | 86 | }, |
87 | ||
87 | ||
88 | 88 | #/* test case #5 */ |
89 | 89 | { |
90 | 90 | key => 'feffe9928665731c6d6a8f9467308308', |
94 | 94 | ciphertext => '61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598', |
95 | 95 | tag => '3612d2e79e3b0785561be14aaca2fccb', |
96 | 96 | }, |
97 | ||
97 | ||
98 | 98 | #/* test case #6 */ |
99 | 99 | { |
100 | 100 | key => 'feffe9928665731c6d6a8f9467308308', |
104 | 104 | ciphertext => '8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5', |
105 | 105 | tag => '619cc5aefffe0bfa462af43c1699d050', |
106 | 106 | }, |
107 | ||
107 | ||
108 | 108 | #/* test case #46 from BG (catches the LTC bug of v1.15) */ |
109 | 109 | { |
110 | 110 | key => '00000000000000000000000000000000', |
114 | 114 | ciphertext => 'cbc8d2f15481a4cc7dd1e19aaa83de5678483ec359ae7dec2ab8d534e0906f4b4663faff58a8b2d733b845eef7c9b331e9e10eb2612c995feb1ac15a6286cce8b297a8', |
115 | 115 | tag => '8d2d2a9372626f6bee8580276a6366bf', |
116 | 116 | } |
117 | ); | |
117 | ); |
11 | 11 | chomp($l); |
12 | 12 | next if $l =~ /^#/; |
13 | 13 | $l =~ s/[\s\t]+/ /g; |
14 | ||
14 | ||
15 | 15 | if ($l eq '') { |
16 | 16 | next unless defined $d->{C}; |
17 | 17 | my $A = pack('H*', $d->{A}); |
20 | 20 | my $K = pack('H*', $d->{K}); |
21 | 21 | my $N = pack('H*', $d->{N}); |
22 | 22 | my $tag_len = $d->{T} * 1; |
23 | ||
23 | ||
24 | 24 | { #ENCRYPT |
25 | 25 | my $m = Crypt::AuthEnc::OCB->new('AES', $K, $N, $tag_len); |
26 | 26 | $m->adata_add($A); |
47 | 47 | $v =~ s/\s//g; |
48 | 48 | $d->{$k} = $v; |
49 | 49 | } |
50 | ||
50 | ||
51 | 51 | } |
52 | 52 | |
53 | 53 | #print $text; |
172 | 172 | P: 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 |
173 | 173 | C: 1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA |
174 | 174 | |
175 | LAST_ITEM_PLACEHOLDER_DO_NOT_DELETE!!!⏎ | |
175 | LAST_ITEM_PLACEHOLDER_DO_NOT_DELETE!!! |
14 | 14 | my ($k, $v) = split /:/, $pair; |
15 | 15 | $d->{$k} = $v; |
16 | 16 | } |
17 | ||
17 | ||
18 | 18 | my $c = Crypt::Cipher::AES->new(pack('H*',$d->{key})); |
19 | 19 | my $result = pack('H*', $d->{pt}); |
20 | 20 | $result = $c->encrypt($result) for(1..$d->{iter}); |
12 | 12 | my ($k, $v) = split /:/, $pair; |
13 | 13 | $d->{$k} = $v; |
14 | 14 | } |
15 | ||
15 | ||
16 | 16 | my $c = Crypt::Cipher::SEED->new(pack('H*',$d->{key})); |
17 | 17 | my $result = pack('H*', $d->{pt}); |
18 | 18 | $result = $c->encrypt($result) for(1..$d->{iter}); |
25 | 25 | key=000000000000000000000000000000004000000000000000 ptext=00000000000000000000000000000000 ctext=53bd3e8475db67f72910b945bf8c768e |
26 | 26 | key=000000000000000000000000000000010000000000000000 ptext=00000000000000000000000000000000 ctext=deab7388a6f1c61d41e25a0d88f062c4 |
27 | 27 | key=0000000000000000000000800000000000000000000000000000000000000000 ptext=00000000000000000000000000000000 ctext=ad4b018d50e3a28124a0a1259dc667d4 |
28 | key=4000000000000000000000000000000000000000000000000000000000000000 ptext=00000000000000000000000000000000 ctext=eae1d405570174df7df2f9966d509159⏎ | |
28 | key=4000000000000000000000000000000000000000000000000000000000000000 ptext=00000000000000000000000000000000 ctext=eae1d405570174df7df2f9966d509159 |
31 | 31 | my $size; |
32 | 32 | |
33 | 33 | while (my $l = <DATA>) { |
34 | $l =~ s/[\r\n]*$//; | |
34 | $l =~ s/[\r\n]*$//; | |
35 | 35 | $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/; |
36 | 36 | $l =~ s/\s+//g; |
37 | 37 | my ($k, $v) = split /:/, $l; |
57 | 57 | next unless $tv->{$n}->{$ks}->{$i}; |
58 | 58 | my $ct = Crypt::Cipher->new($N, $key)->encrypt($bytes); |
59 | 59 | is(unpack('H*', $ct), lc($tv->{$n}->{$ks}->{$i}), "$N/$ks/$i"); |
60 | $bytes = $ct; | |
60 | $bytes = $ct; | |
61 | 61 | $key = substr($ct x 100, 0, $ks); |
62 | 62 | } |
63 | 63 | } |
11 | 11 | use Crypt::Cipher; |
12 | 12 | |
13 | 13 | while (my $l = <DATA>) { |
14 | $l =~ s/[\r\n]*$//; | |
14 | $l =~ s/[\r\n]*$//; | |
15 | 15 | $l =~ s/^\s*([^\s\r\n]+).*?/$1/; |
16 | 16 | $l =~ s/\s+//; |
17 | 17 | next if !$l || $l =~ /^#/; |
62 | 62 | die "UNKNOWN MODE '$mode'"; |
63 | 63 | } |
64 | 64 | #warn "[$cipher|$mode, ".length($key).", ".length($iv).", ".length($pt).", ".length($ct).", ".length($flag)."]\n"; |
65 | } | |
65 | } | |
66 | 66 | |
67 | 67 | __DATA__ |
68 | 68 | #cipher:key:iv:plaintext:ciphertext:0/1(decrypt/encrypt) |
119 | 119 | AES-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::AE2D8A571E03AC9C9EB76FAC45AF8E51:F5D3D58503B9699DE785895A96FDBAAF |
120 | 120 | AES-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::30C81C46A35CE411E5FBC1191A0A52EF:43B1CD7F598ECE23881B00E3ED030688 |
121 | 121 | AES-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::F69F2445DF4F9B17AD2B417BE66C3710:7B0C785E27E8AD3F8223207104725DD4 |
122 | # ECB-AES192.Encrypt and ECB-AES192.Decrypt | |
122 | # ECB-AES192.Encrypt and ECB-AES192.Decrypt | |
123 | 123 | AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::6BC1BEE22E409F96E93D7E117393172A:BD334F1D6E45F25FF712A214571FA5CC |
124 | 124 | AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::AE2D8A571E03AC9C9EB76FAC45AF8E51:974104846D0AD3AD7734ECB3ECEE4EEF |
125 | 125 | AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::30C81C46A35CE411E5FBC1191A0A52EF:EF7AFD2270E2E60ADCE0BA2FACE6444E |
126 | 126 | AES-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::F69F2445DF4F9B17AD2B417BE66C3710:9A4B41BA738D6C72FB16691603C18E0E |
127 | # ECB-AES256.Encrypt and ECB-AES256.Decrypt | |
127 | # ECB-AES256.Encrypt and ECB-AES256.Decrypt | |
128 | 128 | AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::6BC1BEE22E409F96E93D7E117393172A:F3EED1BDB5D2A03C064B5A7E3DB181F8 |
129 | 129 | AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::AE2D8A571E03AC9C9EB76FAC45AF8E51:591CCB10D410ED26DC5BA74A31362870 |
130 | 130 | AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::30C81C46A35CE411E5FBC1191A0A52EF:B6ED21B99CA6F4F9F153E7B1BEAFED1D |
131 | 131 | AES-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::F69F2445DF4F9B17AD2B417BE66C3710:23304B7A39F9F3FF067D8D8F9E24ECC7 |
132 | 132 | # For all CBC encrypts and decrypts, the transformed sequence is |
133 | 133 | # 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 | |
135 | 135 | AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:7649ABAC8119B246CEE98E9B12E9197D |
136 | 136 | AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:7649ABAC8119B246CEE98E9B12E9197D:AE2D8A571E03AC9C9EB76FAC45AF8E51:5086CB9B507219EE95DB113A917678B2 |
137 | 137 | AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:5086CB9B507219EE95DB113A917678B2:30C81C46A35CE411E5FBC1191A0A52EF:73BED6B8E3C1743B7116E69E22229516 |
138 | 138 | AES-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:73BED6B8E3C1743B7116E69E22229516:F69F2445DF4F9B17AD2B417BE66C3710:3FF1CAA1681FAC09120ECA307586E1A7 |
139 | # CBC-AES192.Encrypt and CBC-AES192.Decrypt | |
139 | # CBC-AES192.Encrypt and CBC-AES192.Decrypt | |
140 | 140 | AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:4F021DB243BC633D7178183A9FA071E8 |
141 | 141 | AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:4F021DB243BC633D7178183A9FA071E8:AE2D8A571E03AC9C9EB76FAC45AF8E51:B4D9ADA9AD7DEDF4E5E738763F69145A |
142 | 142 | AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:B4D9ADA9AD7DEDF4E5E738763F69145A:30C81C46A35CE411E5FBC1191A0A52EF:571B242012FB7AE07FA9BAAC3DF102E0 |
143 | 143 | AES-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:571B242012FB7AE07FA9BAAC3DF102E0:F69F2445DF4F9B17AD2B417BE66C3710:08B0E27988598881D920A9E64F5615CD |
144 | # CBC-AES256.Encrypt and CBC-AES256.Decrypt | |
144 | # CBC-AES256.Encrypt and CBC-AES256.Decrypt | |
145 | 145 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:F58C4C04D6E5F1BA779EABFB5F7BFBD6 |
146 | 146 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:F58C4C04D6E5F1BA779EABFB5F7BFBD6:AE2D8A571E03AC9C9EB76FAC45AF8E51:9CFC4E967EDB808D679F777BC6702C7D |
147 | 147 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:9CFC4E967EDB808D679F777BC6702C7D:30C81C46A35CE411E5FBC1191A0A52EF:39F23369A9D9BACFA530E26304231461 |
149 | 149 | # We don't support CFB{1,8}-AESxxx.{En,De}crypt |
150 | 150 | # For all CFB128 encrypts and decrypts, the transformed sequence is |
151 | 151 | # AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec |
152 | # CFB128-AES128.Encrypt | |
152 | # CFB128-AES128.Encrypt | |
153 | 153 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:1 |
154 | 154 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:3B3FD92EB72DAD20333449F8E83CFB4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:C8A64537A0B3A93FCDE3CDAD9F1CE58B:1 |
155 | 155 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:C8A64537A0B3A93FCDE3CDAD9F1CE58B:30C81C46A35CE411E5FBC1191A0A52EF:26751F67A3CBB140B1808CF187A4F4DF:1 |
156 | 156 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:26751F67A3CBB140B1808CF187A4F4DF:F69F2445DF4F9B17AD2B417BE66C3710:C04B05357C5D1C0EEAC4C66F9FF7F2E6:1 |
157 | # CFB128-AES128.Decrypt | |
157 | # CFB128-AES128.Decrypt | |
158 | 158 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:0 |
159 | 159 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:3B3FD92EB72DAD20333449F8E83CFB4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:C8A64537A0B3A93FCDE3CDAD9F1CE58B:0 |
160 | 160 | AES-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:C8A64537A0B3A93FCDE3CDAD9F1CE58B:30C81C46A35CE411E5FBC1191A0A52EF:26751F67A3CBB140B1808CF187A4F4DF:0 |
169 | 169 | AES-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:CDC80D6FDDF18CAB34C25909C99A4174:AE2D8A571E03AC9C9EB76FAC45AF8E51:67CE7F7F81173621961A2B70171D3D7A:0 |
170 | 170 | AES-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:67CE7F7F81173621961A2B70171D3D7A:30C81C46A35CE411E5FBC1191A0A52EF:2E1E8A1DD59B88B1C8E60FED1EFAC4C9:0 |
171 | 171 | AES-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:2E1E8A1DD59B88B1C8E60FED1EFAC4C9:F69F2445DF4F9B17AD2B417BE66C3710:C05F9F9CA9834FA042AE8FBA584B09FF:0 |
172 | # CFB128-AES256.Encrypt | |
172 | # CFB128-AES256.Encrypt | |
173 | 173 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:1 |
174 | 174 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DC7E84BFDA79164B7ECD8486985D3860:AE2D8A571E03AC9C9EB76FAC45AF8E51:39FFED143B28B1C832113C6331E5407B:1 |
175 | 175 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39FFED143B28B1C832113C6331E5407B:30C81C46A35CE411E5FBC1191A0A52EF:DF10132415E54B92A13ED0A8267AE2F9:1 |
176 | 176 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DF10132415E54B92A13ED0A8267AE2F9:F69F2445DF4F9B17AD2B417BE66C3710:75A385741AB9CEF82031623D55B1E471:1 |
177 | # CFB128-AES256.Decrypt | |
177 | # CFB128-AES256.Decrypt | |
178 | 178 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:0 |
179 | 179 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DC7E84BFDA79164B7ECD8486985D3860:AE2D8A571E03AC9C9EB76FAC45AF8E51:39FFED143B28B1C832113C6331E5407B:0 |
180 | 180 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39FFED143B28B1C832113C6331E5407B:30C81C46A35CE411E5FBC1191A0A52EF:DF10132415E54B92A13ED0A8267AE2F9:0 |
181 | 181 | AES-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:DF10132415E54B92A13ED0A8267AE2F9:F69F2445DF4F9B17AD2B417BE66C3710:75A385741AB9CEF82031623D55B1E471:0 |
182 | 182 | # For all OFB encrypts and decrypts, the transformed sequence is |
183 | 183 | # 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 | |
190 | 190 | AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:3B3FD92EB72DAD20333449F8E83CFB4A:0 |
191 | 191 | AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:7789508D16918F03F53C52DAC54ED825:0 |
192 | 192 | AES-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:9740051E9C5FECF64344F7A82260EDCC:0 |
193 | 193 | 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 | |
205 | 205 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:1 |
206 | 206 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:4FEBDC6740D20B3AC88F6AD82A4FB08D:1 |
207 | 207 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:71AB47A086E86EEDF39D1C5BBA97C408:1 |
208 | 208 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:41635BE625B48AFC1666DD42A09D96E7:F69F2445DF4F9B17AD2B417BE66C3710:0126141D67F37BE8538F5A8BE740E484:1 |
209 | # OFB-AES256.Decrypt | |
209 | # OFB-AES256.Decrypt | |
210 | 210 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:DC7E84BFDA79164B7ECD8486985D3860:0 |
211 | 211 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:4FEBDC6740D20B3AC88F6AD82A4FB08D:0 |
212 | 212 | AES-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:71AB47A086E86EEDF39D1C5BBA97C408:0 |
262 | 262 | CAMELLIA-192-ECB:000102030405060708090A0B0C0D0E0F1011121314151617::00112233445566778899AABBCCDDEEFF:B22F3C36B72D31329EEE8ADDC2906C68:1 |
263 | 263 | CAMELLIA-256-ECB:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F::00112233445566778899AABBCCDDEEFF:2EDF1F3418D53B88841FC8985FB1ECF2:1 |
264 | 264 | |
265 | # ECB-CAMELLIA128.Encrypt and ECB-CAMELLIA128.Decrypt | |
265 | # ECB-CAMELLIA128.Encrypt and ECB-CAMELLIA128.Decrypt | |
266 | 266 | CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::6BC1BEE22E409F96E93D7E117393172A:432FC5DCD628115B7C388D770B270C96 |
267 | 267 | CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::AE2D8A571E03AC9C9EB76FAC45AF8E51:0BE1F14023782A22E8384C5ABB7FAB2B |
268 | 268 | CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::30C81C46A35CE411E5FBC1191A0A52EF:A0A1ABCD1893AB6FE0FE5B65DF5F8636 |
269 | 269 | CAMELLIA-128-ECB:2B7E151628AED2A6ABF7158809CF4F3C::F69F2445DF4F9B17AD2B417BE66C3710:E61925E0D5DFAA9BB29F815B3076E51A |
270 | 270 | |
271 | # ECB-CAMELLIA192.Encrypt and ECB-CAMELLIA192.Decrypt | |
271 | # ECB-CAMELLIA192.Encrypt and ECB-CAMELLIA192.Decrypt | |
272 | 272 | CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::6BC1BEE22E409F96E93D7E117393172A:CCCC6C4E138B45848514D48D0D3439D3 |
273 | 273 | CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::AE2D8A571E03AC9C9EB76FAC45AF8E51:5713C62C14B2EC0F8393B6AFD6F5785A |
274 | 274 | CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::30C81C46A35CE411E5FBC1191A0A52EF:B40ED2B60EB54D09D030CF511FEEF366 |
275 | 275 | CAMELLIA-192-ECB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B::F69F2445DF4F9B17AD2B417BE66C3710:909DBD95799096748CB27357E73E1D26 |
276 | 276 | |
277 | # ECB-CAMELLIA256.Encrypt and ECB-CAMELLIA256.Decrypt | |
277 | # ECB-CAMELLIA256.Encrypt and ECB-CAMELLIA256.Decrypt | |
278 | 278 | CAMELLIA-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::6BC1BEE22E409F96E93D7E117393172A:BEFD219B112FA00098919CD101C9CCFA |
279 | 279 | CAMELLIA-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::AE2D8A571E03AC9C9EB76FAC45AF8E51:C91D3A8F1AEA08A9386CF4B66C0169EA |
280 | 280 | CAMELLIA-256-ECB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4::30C81C46A35CE411E5FBC1191A0A52EF:A623D711DC5F25A51BB8A80D56397D28 |
282 | 282 | |
283 | 283 | # For all CBC encrypts and decrypts, the transformed sequence is |
284 | 284 | # 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 | |
286 | 286 | CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:1607CF494B36BBF00DAEB0B503C831AB |
287 | 287 | CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:1607CF494B36BBF00DAEB0B503C831AB:AE2D8A571E03AC9C9EB76FAC45AF8E51:A2F2CF671629EF7840C5A5DFB5074887 |
288 | 288 | CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:A2F2CF671629EF7840C5A5DFB5074887:30C81C46A35CE411E5FBC1191A0A52EF:0F06165008CF8B8B5A63586362543E54 |
289 | 289 | CAMELLIA-128-CBC:2B7E151628AED2A6ABF7158809CF4F3C:36A84CDAFD5F9A85ADA0F0A993D6D577:F69F2445DF4F9B17AD2B417BE66C3710:74C64268CDB8B8FAF5B34E8AF3732980 |
290 | 290 | |
291 | # CBC-CAMELLIA192.Encrypt and CBC-CAMELLIA192.Decrypt | |
291 | # CBC-CAMELLIA192.Encrypt and CBC-CAMELLIA192.Decrypt | |
292 | 292 | CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:2A4830AB5AC4A1A2405955FD2195CF93 |
293 | 293 | CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:2A4830AB5AC4A1A2405955FD2195CF93:AE2D8A571E03AC9C9EB76FAC45AF8E51:5D5A869BD14CE54264F892A6DD2EC3D5 |
294 | 294 | CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:5D5A869BD14CE54264F892A6DD2EC3D5:30C81C46A35CE411E5FBC1191A0A52EF:37D359C3349836D884E310ADDF68C449 |
295 | 295 | CAMELLIA-192-CBC:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:37D359C3349836D884E310ADDF68C449:F69F2445DF4F9B17AD2B417BE66C3710:01FAAA930B4AB9916E9668E1428C6B08 |
296 | 296 | |
297 | # CBC-CAMELLIA256.Encrypt and CBC-CAMELLIA256.Decrypt | |
297 | # CBC-CAMELLIA256.Encrypt and CBC-CAMELLIA256.Decrypt | |
298 | 298 | CAMELLIA-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:E6CFA35FC02B134A4D2C0B6737AC3EDA |
299 | 299 | CAMELLIA-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E6CFA35FC02B134A4D2C0B6737AC3EDA:AE2D8A571E03AC9C9EB76FAC45AF8E51:36CBEB73BD504B4070B1B7DE2B21EB50 |
300 | 300 | CAMELLIA-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:36CBEB73BD504B4070B1B7DE2B21EB50:30C81C46A35CE411E5FBC1191A0A52EF:E31A6055297D96CA3330CDF1B1860A83 |
303 | 303 | # We don't support CFB{1,8}-CAMELLIAxxx.{En,De}crypt |
304 | 304 | # For all CFB128 encrypts and decrypts, the transformed sequence is |
305 | 305 | # CAMELLIA-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec |
306 | # CFB128-CAMELLIA128.Encrypt | |
306 | # CFB128-CAMELLIA128.Encrypt | |
307 | 307 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:1 |
308 | 308 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:14F7646187817EB586599146B82BD719:AE2D8A571E03AC9C9EB76FAC45AF8E51:A53D28BB82DF741103EA4F921A44880B:1 |
309 | 309 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:A53D28BB82DF741103EA4F921A44880B:30C81C46A35CE411E5FBC1191A0A52EF:9C2157A664626D1DEF9EA420FDE69B96:1 |
310 | 310 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:9C2157A664626D1DEF9EA420FDE69B96:F69F2445DF4F9B17AD2B417BE66C3710:742A25F0542340C7BAEF24CA8482BB09:1 |
311 | 311 | |
312 | # CFB128-CAMELLIA128.Decrypt | |
312 | # CFB128-CAMELLIA128.Decrypt | |
313 | 313 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:0 |
314 | 314 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:14F7646187817EB586599146B82BD719:AE2D8A571E03AC9C9EB76FAC45AF8E51:A53D28BB82DF741103EA4F921A44880B:0 |
315 | 315 | CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:A53D28BB82DF741103EA4F921A44880B:30C81C46A35CE411E5FBC1191A0A52EF:9C2157A664626D1DEF9EA420FDE69B96:0 |
327 | 327 | CAMELLIA-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:86F8491627906D780C7A6D46EA331F98:30C81C46A35CE411E5FBC1191A0A52EF:69511CCE594CF710CB98BB63D7221F01:0 |
328 | 328 | CAMELLIA-192-CFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:69511CCE594CF710CB98BB63D7221F01:F69F2445DF4F9B17AD2B417BE66C3710:D5B5378A3ABED55803F25565D8907B84:0 |
329 | 329 | |
330 | # CFB128-CAMELLIA256.Encrypt | |
330 | # CFB128-CAMELLIA256.Encrypt | |
331 | 331 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:1 |
332 | 332 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:CF6107BB0CEA7D7FB1BD31F5E7B06C93:AE2D8A571E03AC9C9EB76FAC45AF8E51:89BEDB4CCDD864EA11BA4CBE849B5E2B:1 |
333 | 333 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:89BEDB4CCDD864EA11BA4CBE849B5E2B:30C81C46A35CE411E5FBC1191A0A52EF:555FC3F34BDD2D54C62D9E3BF338C1C4:1 |
334 | 334 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:555FC3F34BDD2D54C62D9E3BF338C1C4:F69F2445DF4F9B17AD2B417BE66C3710:5953ADCE14DB8C7F39F1BD39F359BFFA:1 |
335 | 335 | |
336 | # CFB128-CAMELLIA256.Decrypt | |
336 | # CFB128-CAMELLIA256.Decrypt | |
337 | 337 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:0 |
338 | 338 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:CF6107BB0CEA7D7FB1BD31F5E7B06C93:AE2D8A571E03AC9C9EB76FAC45AF8E51:89BEDB4CCDD864EA11BA4CBE849B5E2B:0 |
339 | 339 | CAMELLIA-256-CFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:89BEDB4CCDD864EA11BA4CBE849B5E2B:30C81C46A35CE411E5FBC1191A0A52EF:555FC3F34BDD2D54C62D9E3BF338C1C4:0 |
341 | 341 | |
342 | 342 | # For all OFB encrypts and decrypts, the transformed sequence is |
343 | 343 | # CAMELLIA-bits-OFB:key:IV/output':plaintext:ciphertext:encdec |
344 | # OFB-CAMELLIA128.Encrypt | |
344 | # OFB-CAMELLIA128.Encrypt | |
345 | 345 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:1 |
346 | 346 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:25623DB569CA51E01482649977E28D84:1 |
347 | 347 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:C776634A60729DC657D12B9FCA801E98:1 |
348 | 348 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:D776379BE0E50825E681DA1A4C980E8E:1 |
349 | 349 | |
350 | # OFB-CAMELLIA128.Decrypt | |
350 | # OFB-CAMELLIA128.Decrypt | |
351 | 351 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:14F7646187817EB586599146B82BD719:0 |
352 | 352 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:50FE67CC996D32B6DA0937E99BAFEC60:AE2D8A571E03AC9C9EB76FAC45AF8E51:25623DB569CA51E01482649977E28D84:0 |
353 | 353 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:D9A4DADA0892239F6B8B3D7680E15674:30C81C46A35CE411E5FBC1191A0A52EF:C776634A60729DC657D12B9FCA801E98:0 |
354 | 354 | CAMELLIA-128-OFB:2B7E151628AED2A6ABF7158809CF4F3C:A78819583F0308E7A6BF36B1386ABF23:F69F2445DF4F9B17AD2B417BE66C3710:D776379BE0E50825E681DA1A4C980E8E:0 |
355 | 355 | |
356 | # OFB-CAMELLIA192.Encrypt | |
356 | # OFB-CAMELLIA192.Encrypt | |
357 | 357 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:C832BB9780677DAA82D9B6860DCD565E:1 |
358 | 358 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:8ECEB7D0350D72C7F78562AEBDF99339:1 |
359 | 359 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:BDD62DBBB9700846C53B507F544696F0:1 |
360 | 360 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:E28014E046B802F385C4C2E13EAD4A72:1 |
361 | 361 | |
362 | # OFB-CAMELLIA192.Decrypt | |
362 | # OFB-CAMELLIA192.Decrypt | |
363 | 363 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:C832BB9780677DAA82D9B6860DCD565E:0 |
364 | 364 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:A609B38DF3B1133DDDFF2718BA09565E:AE2D8A571E03AC9C9EB76FAC45AF8E51:8ECEB7D0350D72C7F78562AEBDF99339:0 |
365 | 365 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:52EF01DA52602FE0975F78AC84BF8A50:30C81C46A35CE411E5FBC1191A0A52EF:BDD62DBBB9700846C53B507F544696F0:0 |
366 | 366 | CAMELLIA-192-OFB:8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:BD5286AC63AABD7EB067AC54B553F71D:F69F2445DF4F9B17AD2B417BE66C3710:E28014E046B802F385C4C2E13EAD4A72:0 |
367 | 367 | |
368 | # OFB-CAMELLIA256.Encrypt | |
368 | # OFB-CAMELLIA256.Encrypt | |
369 | 369 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:1 |
370 | 370 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:127AD97E8E3994E4820027D7BA109368:1 |
371 | 371 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:6BFF6265A6A6B7A535BC65A80B17214E:1 |
372 | 372 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:41635BE625B48AFC1666DD42A09D96E7:F69F2445DF4F9B17AD2B417BE66C3710:0A4A0404E26AA78A27CB271E8BF3CF20:1 |
373 | 373 | |
374 | # OFB-CAMELLIA256.Decrypt | |
374 | # OFB-CAMELLIA256.Decrypt | |
375 | 375 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:CF6107BB0CEA7D7FB1BD31F5E7B06C93:0 |
376 | 376 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:B7BF3A5DF43989DD97F0FA97EBCE2F4A:AE2D8A571E03AC9C9EB76FAC45AF8E51:127AD97E8E3994E4820027D7BA109368:0 |
377 | 377 | CAMELLIA-256-OFB:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:E1C656305ED1A7A6563805746FE03EDC:30C81C46A35CE411E5FBC1191A0A52EF:6BFF6265A6A6B7A535BC65A80B17214E:0 |
385 | 385 | SEED-ECB:00000000000000000000000000000000::000102030405060708090A0B0C0D0E0F:5EBAC6E0054E166819AFF1CC6D346CDB:1 |
386 | 386 | SEED-ECB:000102030405060708090A0B0C0D0E0F::00000000000000000000000000000000:C11F22F20140505084483597E4370F43:1 |
387 | 387 | SEED-ECB:4706480851E61BE85D74BFB3FD956185::83A2F8A288641FB9A4E9A5CC2F131C7D:EE54D13EBCAE706D226BC3142CD40D4A:1 |
388 | SEED-ECB:28DBC3BC49FFD87DCFA509B11D422BE7::B41E6BE2EBA84A148E2EED84593C5EC7:9B9B7BFCD1813CB95D0B3618F40F5122:1 ⏎ | |
388 | SEED-ECB:28DBC3BC49FFD87DCFA509B11D422BE7::B41E6BE2EBA84A148E2EED84593C5EC7:9B9B7BFCD1813CB95D0B3618F40F5122:1 |
12 | 12 | my ($k, $v) = split /:/, $pair; |
13 | 13 | $d->{$k} = $v; |
14 | 14 | } |
15 | ||
15 | ||
16 | 16 | my $c = Crypt::Cipher::Twofish->new(pack('H*',$d->{key})); |
17 | 17 | my $result = pack('H*', $d->{pt}); |
18 | 18 | $result = $c->encrypt($result) for(1..$d->{iter}); |
12 | 12 | my ($k, $v) = split /:/, $pair; |
13 | 13 | $d->{$k} = $v; |
14 | 14 | } |
15 | ||
15 | ||
16 | 16 | my $c = Crypt::Cipher::XTEA->new(pack('H*',$d->{key})); |
17 | 17 | my $result = pack('H*', $d->{pt}); |
18 | 18 | $result = $c->encrypt($result) for(1..$d->{iter}); |
141 | 141 | is(unpack("H*", decode_b32b(encode_b32b($b))), $h); |
142 | 142 | is(unpack("H*", decode_b32z(encode_b32z($b))), $h); |
143 | 143 | is(unpack("H*", decode_b32c(encode_b32c($b))), $h); |
144 | }⏎ | |
144 | } |
22 | 22 | my $hash; |
23 | 23 | |
24 | 24 | while (my $l = <DATA>) { |
25 | $l =~ s/[\r\n]*$//; | |
25 | $l =~ s/[\r\n]*$//; | |
26 | 26 | $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/; |
27 | 27 | $l =~ s/\s+//; |
28 | 28 | my ($k, $v) = split /:/, $l; |
12 | 12 | my $expected_prk = "077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5"; |
13 | 13 | my $expected_okm = "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865"; |
14 | 14 | |
15 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
15 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
16 | 16 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
17 | 17 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
18 | 18 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/1"); |
29 | 29 | my $expected_prk = "06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244"; |
30 | 30 | my $expected_okm = "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87"; |
31 | 31 | |
32 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
32 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
33 | 33 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
34 | 34 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
35 | 35 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/2"); |
46 | 46 | my $expected_prk = "19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04"; |
47 | 47 | my $expected_okm = "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8"; |
48 | 48 | |
49 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
49 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
50 | 50 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
51 | 51 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
52 | 52 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/3"); |
63 | 63 | my $expected_prk = "9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243"; |
64 | 64 | my $expected_okm = "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896"; |
65 | 65 | |
66 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
66 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
67 | 67 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
68 | 68 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
69 | 69 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/4"); |
80 | 80 | my $expected_prk = "8adae09a2a307059478d309b26c4115a224cfaf6"; |
81 | 81 | my $expected_okm = "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4"; |
82 | 82 | |
83 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
83 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
84 | 84 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
85 | 85 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
86 | 86 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/5"); |
97 | 97 | my $expected_prk = "da8c8a73c7fa77288ec6f5e7c297786aa0d32d01"; |
98 | 98 | my $expected_okm = "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918"; |
99 | 99 | |
100 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
100 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
101 | 101 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
102 | 102 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
103 | 103 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/6"); |
114 | 114 | my $expected_prk = "2adccada18779e7c2077ad2eb19d3f3e731385dd"; |
115 | 115 | my $expected_okm = "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48"; |
116 | 116 | |
117 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
117 | my $prk = hkdf_extract($keying_material, $salt, $hash_name); | |
118 | 118 | my $okm1 = hkdf_expand($prk, $hash_name, $len, $info); |
119 | 119 | my $okm2 = hkdf($keying_material, $salt, $hash_name, $len, $info); |
120 | 120 | is(unpack("H*", $prk), $expected_prk, "PRK hkdf_extract/7"); |
23 | 23 | my $name; |
24 | 24 | |
25 | 25 | while (my $l = <DATA>) { |
26 | $l =~ s/[\r\n]*$//; | |
26 | $l =~ s/[\r\n]*$//; | |
27 | 27 | $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/; |
28 | 28 | $l =~ s/\s+//; |
29 | 29 | if ($l=~/^HMAC-([^\n\r]+)/) { |
41 | 41 | |
42 | 42 | for my $n (sort keys %$tv) { |
43 | 43 | 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)); | |
45 | 45 | for my $i (0..255) { |
46 | 46 | my $bytes = substr($seq, 0, $i); |
47 | 47 | next unless $tv->{$n}->{$i}; |
48 | 48 | my $result = Crypt::Mac::HMAC->new($N, $key)->add($bytes)->mac; |
49 | 49 | is(unpack('H*', $result), lc($tv->{$n}->{$i}), "$N/$i"); |
50 | $bytes = $result; | |
50 | $bytes = $result; | |
51 | 51 | $key = substr($result x 100, 0, Crypt::Digest->hashsize($N)); |
52 | 52 | } |
53 | 53 | } |
31 | 31 | my $ks; |
32 | 32 | |
33 | 33 | while (my $l = <DATA>) { |
34 | $l =~ s/[\r\n]*$//; | |
34 | $l =~ s/[\r\n]*$//; | |
35 | 35 | $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/; |
36 | 36 | $l =~ s/\s+//; |
37 | 37 | if ($l=~/^OMAC-([a-z0-9\+\-]+).*?(\d+)/i) { |
51 | 51 | for my $n (sort keys %$tv) { |
52 | 52 | for my $ks (sort keys %{$tv->{$n}}) { |
53 | 53 | my $N = $trans->{$n} || die "FATAL: unknown name '$n'"; |
54 | my $key = substr($seq, 0, $ks); | |
54 | my $key = substr($seq, 0, $ks); | |
55 | 55 | for my $i (0..255) { |
56 | 56 | my $bytes = substr($seq, 0, $i); |
57 | 57 | next unless $tv->{$n}->{$ks}->{$i}; |
58 | 58 | my $result = Crypt::Mac::OMAC->new($N, $key)->add($bytes)->mac; |
59 | 59 | is(unpack('H*', $result), lc($tv->{$n}->{$ks}->{$i}), "$N/$i"); |
60 | $bytes = $result; | |
60 | $bytes = $result; | |
61 | 61 | $key = substr($result x 100, 0, $ks); |
62 | 62 | } |
63 | 63 | } |
31 | 31 | my $ks; |
32 | 32 | |
33 | 33 | while (my $l = <DATA>) { |
34 | $l =~ s/[\r\n]*$//; | |
34 | $l =~ s/[\r\n]*$//; | |
35 | 35 | $l =~ s/^[\s]*([^\s\r\n]+).*?/$1/; |
36 | 36 | $l =~ s/\s+//; |
37 | 37 | if ($l=~/^PMAC-([a-z0-9\+\-]+).*?(\d+)/i) { |
51 | 51 | for my $n (sort keys %$tv) { |
52 | 52 | for my $ks (sort keys %{$tv->{$n}}) { |
53 | 53 | my $N = $trans->{$n} || die "FATAL: unknown name '$n'"; |
54 | my $key = substr($seq, 0, $ks); | |
54 | my $key = substr($seq, 0, $ks); | |
55 | 55 | for my $i (0..255) { |
56 | 56 | my $bytes = substr($seq, 0, $i); |
57 | 57 | next unless $tv->{$n}->{$ks}->{$i}; |
58 | 58 | my $result = Crypt::Mac::PMAC->new($N, $key)->add($bytes)->mac; |
59 | 59 | is(unpack('H*', $result), lc($tv->{$n}->{$ks}->{$i}), "$N/$i"); |
60 | $bytes = $result; | |
60 | $bytes = $result; | |
61 | 61 | $key = substr($result x 100, 0, $ks); |
62 | 62 | } |
63 | 63 | } |
9 | 9 | use_ok('Math::BigInt'); # Math::BigInt is required for the tests |
10 | 10 | }; |
11 | 11 | |
12 | diag "Math::BigInt VERSION=$Math::BigInt::VERSION\n";⏎ | |
12 | diag "Math::BigInt VERSION=$Math::BigInt::VERSION\n"; |
37 | 37 | is(ref($e->{_e}->[0]), '', '$e->{_e}->[0] is a scalar'); |
38 | 38 | } |
39 | 39 | |
40 | require './t/mbi_ltm/bigfltpm.inc'; # all tests here for sharing | |
40 | require './t/mbi_ltm/bigfltpm.inc'; # all tests here for sharing |
109 | 109 | is ($cl->new('20')->blog(20,10), '1.000000000'); |
110 | 110 | is ($cl->new('100')->blog(100,10), '1.000000000'); |
111 | 111 | |
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 | |
114 | 114 | |
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 | |
117 | 117 | |
118 | 118 | is ($cl->new('1.2')->bpow('0.3',10), '1.056219968'); |
119 | 119 | is ($cl->new('10')->bpow('0.6',10), '3.981071706'); |
164 | 164 | # test bexp() with cached results |
165 | 165 | |
166 | 166 | 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)'); | |
168 | 168 | |
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)'); | |
170 | 170 | |
171 | 171 | ############################################################################# |
172 | 172 | # test bexp() with big values (non-cached) |
173 | 173 | |
174 | is ($cl->new(1)->bexp(100), | |
174 | is ($cl->new(1)->bexp(100), | |
175 | 175 | '2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427', |
176 | 176 | 'bexp(100)'); |
177 | 177 | |
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'); | |
180 | 180 | |
181 | 181 | # all done |
182 | 182 | 1; |
189 | 189 | print "# Tried: $x->bpow($y,$scale);\n" |
190 | 190 | unless ok ($cl->new($x)->bpow($y,$scale),$result); |
191 | 191 | } |
192 | ||
193 |
23 | 23 | my $cl = "Math::BigFloat"; |
24 | 24 | my $c = "Math::BigInt"; |
25 | 25 | |
26 | # 2 ** 240 = | |
26 | # 2 ** 240 = | |
27 | 27 | # 1766847064778384329583297500742918515827483896875618958121606201292619776 |
28 | 28 | |
29 | 29 | # takes way too long |
46 | 46 | $result =~ s/\..*//; |
47 | 47 | is ($c->new($x)->bpow($n)->broot($y,$scale),$result, "Try: $c $x->bpow($n)->broot($y,$s) == $result"); |
48 | 48 | } |
49 |
5 | 5 | my @tests; |
6 | 6 | |
7 | 7 | # test vectors from http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf |
8 | push @tests, | |
8 | push @tests, | |
9 | 9 | { padding=>'none', key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7' }, |
10 | 10 | { padding=>'none', key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd' }, |
11 | 11 | { padding=>'none', key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b' }, |
12 | ; | |
12 | ; | |
13 | 13 | |
14 | 14 | # test vectors produced by Crypt::CBC |
15 | push @tests, | |
15 | push @tests, | |
16 | 16 | { mode=>'AES+Crypt::CBC', padding=>'standard', len=>45, key=>'4cdc909dc310796429e26bcaca1b21329f5060813b7d17bf1a65f293154b54a9', iv=>'9124d8cfafd3d732e597f463d35a8a43', pt=>'ad67301bcd23a5d7b4601f93db3e6b5db71243fa00244182d0a2df6f0384a09f117821b7b70a4bcdc0a73a70130851f704a7aca59b96a3e5b8dc89efa7ee7846a906a3eb591bf8b6b472ae07113ac3cccfb1bc84723ed1472c1f59705eae7b9fbd6df2b38d2eac2a6c726b9f92', ct=>'588c33d96d99477bc6305c829a1fb188ab165f60ccadac67daaefb8054cfe8093cbb6fba14b684c26cd10c66db87cf1aa8cd69c98180d1d7cb6edc9191332863653ea707cb9ec4da0c7d4381cac33faa938a53df3519d06859260be7ac582674cdedfa411f4cd0204c8b2132d4b100cc' }, |
17 | 17 | { mode=>'AES+Crypt::CBC', padding=>'standard', len=>46, key=>'0c1afd6567e265240aacef873eb78ff11ce0e53931ca7de49143d8a2b1c84df5', iv=>'df5f1521ed1ee7b47ae7e5ef0ac49abb', pt=>'13436402bb6c57b3f202e88cd4d21d828e85856415000e5ef01f9fe43bf100ee5b94ea29e3246200dcddbc5779dce5e219c078bbad8cd878727c0c27f179c100beefcc832f605c8e8f27251a8b51b2475d5170ff8100c95d4d875d386016535a13373f7e15d798e0c39c94193b24', ct=>'3eb5203a12d11b2fe629cd764a9963ad7f314d0efe75806c12e00f3bfe916c765a318be81337d1cb43f20c030f8af6e31991fb09477d06baa3492836f884470177584ad32241ac8fd66469fdd858ce1d04e90375689e70a4bc40be149b1df6cabc5943cff8e7cecdac6fe81fc0aac8f8' }, |
18 | 18 | { mode=>'AES+Crypt::CBC', padding=>'standard', len=>47, key=>'9dd6b591b1589ff6fb5bbd41a8da4b1449674155119285857d719d44281daa3d', iv=>'321d48c36326dcc951aa208542d2fdd7', pt=>'75e4309485e3df2006c411a316073973e8adf51bfd6287a7833f15e18f2f6b571c192a527bd6290722713eb77c9116a28b321cc5decd44a5a49a13750d43e99e4d360e647300cb7b9d31a82c39d8885e6d2b5521f1c7339b30d3947bddc7323a50891f4d37a7bc9cc6971037373722', ct=>'f1f7d95a90ece772a931e3c1f919da110246268291d10d5b2a3ff62596f0cd2a0c3dbdab41e210424f5a1d35b72a4df26a32d4c9ac80e808438f31e07a4f16555a82bade488a73afe239e6c557f100cf17632a8f767445ad6db8f7d2775f63f4b4e73fc5180b20334f941f8c49f7968a' }, |
67 | 67 | my $m = Crypt::Mode::CBC->new('AES', $_->{padding}); |
68 | 68 | |
69 | 69 | for my $l (1..33) { |
70 | ||
70 | ||
71 | 71 | { |
72 | 72 | $m->start_encrypt(pack("H*",$_->{key}), pack("H*",$_->{iv})); |
73 | 73 | my $i = 0; |
79 | 79 | $ct .= $m->finish; |
80 | 80 | is(unpack("H*",$ct), $_->{ct}, "cipher text match [l=$l]"); |
81 | 81 | } |
82 | ||
82 | ||
83 | 83 | { |
84 | 84 | $m->start_decrypt(pack("H*",$_->{key}), pack("H*",$_->{iv})); |
85 | 85 | my $i = 0; |
91 | 91 | $pt .= $m->finish; |
92 | 92 | is(unpack("H*",$pt), $_->{pt}, "plain text match [l=$l]"); |
93 | 93 | } |
94 | ||
95 | } | |
94 | ||
95 | } | |
96 | 96 | } |
97 | 97 | } |
3 | 3 | use Crypt::Mode::CFB; |
4 | 4 | |
5 | 5 | my @tests = ( |
6 | { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f', | |
7 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', | |
6 | { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f', | |
7 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', | |
8 | 8 | ct=>'3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6' }, |
9 | { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f', | |
10 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c', | |
9 | { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f', | |
10 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c', | |
11 | 11 | ct=>'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b' }, |
12 | { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f', | |
13 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b', | |
12 | { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f', | |
13 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b', | |
14 | 14 | ct=>'dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d' }, |
15 | 15 | ); |
16 | 16 |
5 | 5 | my @tests; |
6 | 6 | |
7 | 7 | # test vectors from http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf |
8 | push @tests, | |
8 | push @tests, | |
9 | 9 | { padding=>'none', key=>'2b7e151628aed2a6abf7158809cf4f3c', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4' }, |
10 | 10 | { padding=>'none', key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'bd334f1d6e45f25ff712a214571fa5cc974104846d0ad3ad7734ecb3ecee4eefef7afd2270e2e60adce0ba2face6444e9a4b41ba738d6c72fb16691603c18e0e' }, |
11 | 11 | { padding=>'none', key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', ct=>'f3eed1bdb5d2a03c064b5a7e3db181f8591ccb10d410ed26dc5ba74a31362870b6ed21b99ca6f4f9f153e7b1beafed1d23304b7a39f9f3ff067d8d8f9e24ecc7' }, |
12 | ; | |
12 | ; | |
13 | 13 | |
14 | 14 | # test vectors produced by Crypt::ECB |
15 | push @tests, | |
15 | push @tests, | |
16 | 16 | { mode=>'AES+Crypt::ECB', padding=>'standard', len=>45, key=>'9c1975bc3f89e58f790e8e1cdaeea5cc1147fa43c5da2f9ae681274bd406a663', pt=>'a99303fcd37a6c39acb2dd2f3955cbcdf2d4643cc5542019f549ca2b62a4b27a099f42e0a8fb90fc53f0f32c5402f89822215472d1a5c5e8e299090cfeb80151222922c91aa0a8e21ff07147ca62a4542cc36fb437ff2f56be51e6db4e763252960b4a02cfda2fb8a74a63c0fa', ct=>'b52d56dfbd230e87af5d6cd122b050ba4dacfa112e214359d04626efbf57ccde810246076261e0dd7be797bc9b07b20c3a737f72822498fecc68d73ff6c057a1313684058ff1110af0e59347953e1b337b6dbcb852f9210099ea4b54482ae4d9069193d5cb22c6cdfad968a27771b38b' }, |
17 | 17 | { mode=>'AES+Crypt::ECB', padding=>'standard', len=>46, key=>'11748a8de11e393c610eb582ee3534414f7187790435cdcbe1fd5f7c6db757be', pt=>'ff6da3d97b3907fcc171090bdcc97a43d98cde4bd76937eb672e3a4ce04b15de634d6c320bbe0b84304e52fbf004111f0d0671674196b3ea380f09295a04deb1f26b4d49bc239669bbed6b9316277516914ca4f30d570c156ea90f58565cbf26ead7c6d04eb411b83ef2445a914c', ct=>'91f00f683e3a381ebadb9553db928776fa972a06ca73a31e38ba6501d0f7b27c0013dcf3b25b3206ccd2083fcc815eaa3f843fa14ceca9e54a687b69d0e515dff1cf4b756744f242955b766c87473275ffa6c2191c89ad064c4b83e95ded84514613bc5d7763ffc0b0ec2281bf36d76c' }, |
18 | 18 | { mode=>'AES+Crypt::ECB', padding=>'standard', len=>47, key=>'d36ba22781e756dfe5e64bc9729e7d50bc00a24133ea90de1d77e666e9b39bb5', pt=>'a74a52d0a02d9e959127a1fa84790605828c6e1e8a9d71ff78320b1bc888affb3e19db2c5e62233ef6ab4adf89524efe369b12259925461b88d412d8276e5e80f327addee10c3e99778e0df730cf70509faef08e7c22b2142cc6201474465b47af54e99299290117eca9514a583ecf', ct=>'1e768190063599f2be4309a27c2d1b294714bb567f231ea9ad17fe31c183b3ab2d3db1b95a3e646aa88c35d98b3ce193640e2013e643b5da787087a2a115b1f61370e42943c90c384c64b128eeaa06c98b0c7b9e9a3c2b875100c5fb9703c5e94dc394c45ffc079d2ba75ad2b342100e' }, |
54 | 54 | my $ct = pack("H*", $_->{ct}); |
55 | 55 | my $m = Crypt::Mode::ECB->new('AES', $_->{padding}); |
56 | 56 | for my $l (1..33) { |
57 | ||
57 | ||
58 | 58 | { |
59 | 59 | $m->start_encrypt(pack("H*",$_->{key})); |
60 | 60 | my $i = 0; |
66 | 66 | $ct .= $m->finish; |
67 | 67 | is(unpack("H*",$ct), $_->{ct}, "cipher text match [l=$l]"); |
68 | 68 | } |
69 | ||
69 | ||
70 | 70 | { |
71 | 71 | $m->start_decrypt(pack("H*",$_->{key})); |
72 | 72 | my $i = 0; |
78 | 78 | $pt .= $m->finish; |
79 | 79 | is(unpack("H*",$pt), $_->{pt}, "plain text match [l=$l]"); |
80 | 80 | } |
81 | ||
82 | } | |
81 | ||
82 | } | |
83 | 83 | } |
84 | 84 | } |
3 | 3 | use Crypt::Mode::OFB; |
4 | 4 | |
5 | 5 | my @tests = ( |
6 | { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f', | |
7 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', | |
6 | { key=>'2b7e151628aed2a6abf7158809cf4f3c', iv=>'000102030405060708090a0b0c0d0e0f', | |
7 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', | |
8 | 8 | ct=>'3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e' }, |
9 | { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f', | |
10 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c', | |
9 | { key=>'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', iv=>'000102030405060708090a0b0c0d0e0f', | |
10 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c', | |
11 | 11 | ct=>'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9ac' }, |
12 | { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f', | |
13 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b', | |
12 | { key=>'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', iv=>'000102030405060708090a0b0c0d0e0f', | |
13 | pt=>'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417b', | |
14 | 14 | ct=>'dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8b' }, |
15 | 15 | ); |
16 | 16 |
22 | 22 | use Crypt::PK::DSA; |
23 | 23 | use Crypt::Digest 'digest_file'; |
24 | 24 | use Crypt::Misc 'read_rawfile'; |
25 | ||
25 | ||
26 | 26 | my $pkdsa = Crypt::PK::DSA->new("test_dsakey.pub.pem"); |
27 | 27 | my $signature = read_rawfile("test_input.sha1-dsa.sig"); |
28 | 28 | my $valid = $pkdsa->verify_hash($signature, digest_file("SHA1", "test_input.data"), "SHA1", "v1.5"); |
34 | 34 | use Crypt::PK::DSA; |
35 | 35 | use Crypt::Digest 'digest_file'; |
36 | 36 | use Crypt::Misc 'write_rawfile'; |
37 | ||
37 | ||
38 | 38 | my $pkdsa = Crypt::PK::DSA->new("test_dsakey.priv.pem"); |
39 | 39 | my $signature = $pkdsa->sign_hash(digest_file("SHA1", "test_input.data"), "SHA1", "v1.5"); |
40 | 40 | write_rawfile("test_input.sha1-dsa.sig", $signature); |
54 | 54 | { |
55 | 55 | use Crypt::PK::DSA; |
56 | 56 | use Crypt::Misc 'write_rawfile'; |
57 | ||
57 | ||
58 | 58 | my $pkdsa = Crypt::PK::DSA->new; |
59 | 59 | $pkdsa->generate_key(20, 128); |
60 | 60 | write_rawfile("test_dsakey.pub.der", $pkdsa->export_key_der('public')); |
69 | 69 | openssl dsa -in test_dsakey.priv.pem -text |
70 | 70 | openssl dsa -in test_dsakey-passwd.priv.pem -text -inform pem -passin pass:secret |
71 | 71 | 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 | |
73 | 73 | MARKER |
74 | 74 | |
75 | 75 | doit(); |
86 | 86 | |
87 | 87 | { |
88 | 88 | use Crypt::PK::DSA; |
89 | ||
89 | ||
90 | 90 | my $pkdsa = Crypt::PK::DSA->new; |
91 | 91 | $pkdsa->import_key("test_dsakey.pub.der"); |
92 | 92 | $pkdsa->import_key("test_dsakey.priv.der"); |
98 | 98 | doit(); |
99 | 99 | |
100 | 100 | 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")); |
126 | 126 | } |
127 | 127 | |
128 | 128 | 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")); |
21 | 21 | { |
22 | 22 | use Crypt::PK::RSA; |
23 | 23 | use Crypt::Misc 'read_rawfile'; |
24 | ||
24 | ||
25 | 25 | my $pkrsa = Crypt::PK::RSA->new("test_rsakey.priv.pem"); |
26 | 26 | my $encfile = read_rawfile("test_input.encrypted.rsa"); |
27 | 27 | my $plaintext = $pkrsa->decrypt($encfile, 'v1.5'); |
32 | 32 | { |
33 | 33 | use Crypt::PK::RSA; |
34 | 34 | use Crypt::Misc 'write_rawfile'; |
35 | ||
35 | ||
36 | 36 | my $plaintext = 'secret message'; |
37 | 37 | my $pkrsa = Crypt::PK::RSA->new("test_rsakey.pub.pem"); |
38 | 38 | my $encrypted = $pkrsa->encrypt($plaintext, 'v1.5'); |
52 | 52 | use Crypt::PK::RSA; |
53 | 53 | use Crypt::Digest 'digest_file'; |
54 | 54 | use Crypt::Misc 'read_rawfile'; |
55 | ||
55 | ||
56 | 56 | my $pkrsa = Crypt::PK::RSA->new("test_rsakey.pub.pem"); |
57 | 57 | my $signature = read_rawfile("test_input.sha1-rsa.sig"); |
58 | 58 | my $valid = $pkrsa->verify_hash($signature, digest_file("SHA1", "test_input.data"), "SHA1", "v1.5"); |
64 | 64 | use Crypt::PK::RSA; |
65 | 65 | use Crypt::Digest 'digest_file'; |
66 | 66 | use Crypt::Misc 'write_rawfile'; |
67 | ||
67 | ||
68 | 68 | my $pkrsa = Crypt::PK::RSA->new("test_rsakey.priv.pem"); |
69 | 69 | my $signature = $pkrsa->sign_hash(digest_file("SHA1", "test_input.data"), "SHA1", "v1.5"); |
70 | 70 | write_rawfile("test_input.sha1-rsa.sig", $signature); |
84 | 84 | { |
85 | 85 | use Crypt::PK::RSA; |
86 | 86 | use Crypt::Misc 'write_rawfile'; |
87 | ||
87 | ||
88 | 88 | my $pkrsa = Crypt::PK::RSA->new; |
89 | 89 | $pkrsa->generate_key(256, 65537); |
90 | 90 | write_rawfile("test_rsakey.pub.der", $pkrsa->export_key_der('public')); |
99 | 99 | openssl rsa -in test_rsakey.priv.pem -text |
100 | 100 | openssl rsa -in test_rsakey-passwd.priv.pem -text -inform pem -passin pass:secret |
101 | 101 | 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 | |
103 | 103 | MARKER |
104 | 104 | |
105 | 105 | doit(); |
116 | 116 | |
117 | 117 | { |
118 | 118 | use Crypt::PK::RSA; |
119 | ||
119 | ||
120 | 120 | my $pkrsa = Crypt::PK::RSA->new; |
121 | 121 | $pkrsa->import_key("test_rsakey.pub.der"); |
122 | 122 | $pkrsa->import_key("test_rsakey.priv.der"); |
128 | 128 | doit(); |
129 | 129 | |
130 | 130 | 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")); |
12 | 12 | ok($k->is_private, 'is_private cryptx_priv_dh1.bin'); |
13 | 13 | is($k->size, 256, 'size'); |
14 | 14 | is(uc($k->key2hash->{x}), '73CA6A11B1595C06AB08E8E0875B9689E265C29E3F52FBC7830F071AEA4AF5A26D23CFBC96101267', 'key2hash'); |
15 | ||
15 | ||
16 | 16 | $k = Crypt::PK::DH->new('t/data/cryptx_priv_dh2.bin'); |
17 | 17 | ok($k, 'load cryptx_priv_dh2.bin'); |
18 | 18 | ok($k->is_private, 'is_private cryptx_priv_dh2.bin'); |
19 | ||
19 | ||
20 | 20 | $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh1.bin'); |
21 | 21 | ok($k, 'load cryptx_pub_dh1.bin'); |
22 | 22 | ok(!$k->is_private, 'is_private cryptx_pub_dh1.bin'); |
23 | ||
23 | ||
24 | 24 | $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh2.bin'); |
25 | 25 | ok($k, 'load cryptx_pub_dh2.bin'); |
26 | 26 | ok(!$k->is_private, 'is_private cryptx_pub_dh2.bin'); |
34 | 34 | ok($k->is_private, 'is_private cryptx_priv_dh_pg1.bin'); |
35 | 35 | is($k->size, 256, 'size'); |
36 | 36 | is(uc($k->key2hash->{x}), '3E2F764CDAD2EDFEC737E2198C9C4FAFBA4274C8A73A9E2FDCBC11954D8B48C375399E4BDE930EC9', 'key2hash'); |
37 | ||
37 | ||
38 | 38 | $k = Crypt::PK::DH->new('t/data/cryptx_priv_dh_pg2.bin'); |
39 | 39 | ok($k, 'load cryptx_priv_dh_pg2.bin'); |
40 | 40 | ok($k->is_private, 'is_private cryptx_priv_dh_pg2.bin'); |
41 | ||
41 | ||
42 | 42 | $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh_pg1.bin'); |
43 | 43 | ok($k, 'load cryptx_pub_dh_pg1.bin'); |
44 | 44 | ok(!$k->is_private, 'is_private cryptx_pub_dh_pg1.bin'); |
45 | ||
45 | ||
46 | 46 | $k = Crypt::PK::DH->new('t/data/cryptx_pub_dh_pg2.bin'); |
47 | 47 | ok($k, 'load cryptx_pub_dh_pg2.bin'); |
48 | 48 | ok(!$k->is_private, 'is_private cryptx_pub_dh_pg2.bin'); |
58 | 58 | $pr2->import_key('t/data/cryptx_priv_dh2.bin'); |
59 | 59 | my $pu2 = Crypt::PK::DH->new; |
60 | 60 | $pu2->import_key('t/data/cryptx_pub_dh2.bin'); |
61 | ||
61 | ||
62 | 62 | my $ss1 = $pr1->shared_secret($pu2); |
63 | 63 | my $ss2 = $pr2->shared_secret($pu1); |
64 | 64 | is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
69 | 69 | $pr1->import_key('t/data/cryptx_priv_dh_pg1.bin'); |
70 | 70 | my $pu1 = Crypt::PK::DH->new; |
71 | 71 | $pu1->import_key('t/data/cryptx_pub_dh_pg1.bin'); |
72 | ||
72 | ||
73 | 73 | my $pr2 = Crypt::PK::DH->new; |
74 | 74 | $pr2->import_key('t/data/cryptx_priv_dh_pg2.bin'); |
75 | 75 | my $pu2 = Crypt::PK::DH->new; |
76 | 76 | $pu2->import_key('t/data/cryptx_pub_dh_pg2.bin'); |
77 | ||
77 | ||
78 | 78 | my $ss1 = $pr1->shared_secret($pu2); |
79 | 79 | my $ss2 = $pr2->shared_secret($pu1); |
80 | 80 | is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
16 | 16 | $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa2.der'); |
17 | 17 | ok($k, 'load cryptx_priv_dsa2.der'); |
18 | 18 | ok($k->is_private, 'is_private cryptx_priv_dsa2.der'); |
19 | ||
19 | ||
20 | 20 | $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa1.der'); |
21 | 21 | ok($k, 'load cryptx_pub_dsa1.der'); |
22 | 22 | ok(!$k->is_private, 'is_private cryptx_pub_dsa1.der'); |
23 | ||
23 | ||
24 | 24 | $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa2.der'); |
25 | 25 | ok($k, 'load cryptx_pub_dsa2.der'); |
26 | 26 | ok(!$k->is_private, 'is_private cryptx_pub_dsa2.der'); |
27 | ||
27 | ||
28 | 28 | $k = Crypt::PK::DSA->new('t/data/openssl_dsa1.der'); |
29 | 29 | ok($k, 'load openssl_dsa1.der'); |
30 | 30 | ok($k->is_private, 'is_private openssl_dsa1.der'); |
31 | ||
31 | ||
32 | 32 | $k = Crypt::PK::DSA->new('t/data/openssl_dsa2.der'); |
33 | 33 | ok($k, 'load openssl_dsa2.der'); |
34 | 34 | ok($k->is_private, 'is_private openssl_dsa2.der'); |
35 | ||
35 | ||
36 | 36 | $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa1.pem'); |
37 | 37 | ok($k, 'load cryptx_priv_dsa1.pem'); |
38 | 38 | ok($k->is_private, 'is_private cryptx_priv_dsa1.pem'); |
39 | ||
39 | ||
40 | 40 | $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa2.pem'); |
41 | 41 | ok($k, 'load cryptx_priv_dsa2.pem'); |
42 | 42 | ok($k->is_private, 'is_private cryptx_priv_dsa2.pem'); |
43 | ||
43 | ||
44 | 44 | $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa1.pem'); |
45 | 45 | ok($k, 'load cryptx_pub_dsa1.pem'); |
46 | 46 | ok(!$k->is_private, 'is_private cryptx_pub_dsa1.pem'); |
47 | ||
47 | ||
48 | 48 | $k = Crypt::PK::DSA->new('t/data/cryptx_pub_dsa2.pem'); |
49 | 49 | ok($k, 'load cryptx_pub_dsa2.pem'); |
50 | 50 | ok(!$k->is_private, 'is_private cryptx_pub_dsa2.pem'); |
51 | ||
51 | ||
52 | 52 | $k = Crypt::PK::DSA->new('t/data/openssl_dsa1.pem'); |
53 | 53 | ok($k, 'load openssl_dsa1.pem'); |
54 | 54 | ok($k->is_private, 'is_private openssl_dsa1.pem'); |
55 | ||
55 | ||
56 | 56 | $k = Crypt::PK::DSA->new('t/data/openssl_dsa2.pem'); |
57 | 57 | ok($k, 'load openssl_dsa2.pem'); |
58 | 58 | ok($k->is_private, 'is_private openssl_dsa2.pem'); |
63 | 63 | $pr1->import_key('t/data/cryptx_priv_dsa1.der'); |
64 | 64 | my $pu1 = Crypt::PK::DSA->new; |
65 | 65 | $pu1->import_key('t/data/cryptx_pub_dsa1.der'); |
66 | ||
66 | ||
67 | 67 | my $ct = $pu1->encrypt("secret message"); |
68 | 68 | my $pt = $pr1->decrypt($ct); |
69 | 69 | ok(length $ct > 200, 'encrypt ' . length($ct)); |
76 | 76 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); |
77 | 77 | $sig = $pr1->sign_hash($hash, 'SHA1'); |
78 | 78 | 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 | ||
81 | 81 | my $pr2 = Crypt::PK::DSA->new; |
82 | 82 | $pr2->import_key('t/data/cryptx_priv_dsa2.der'); |
83 | 83 | my $pu2 = Crypt::PK::DSA->new; |
84 | 84 | $pu2->import_key('t/data/cryptx_pub_dsa2.der'); |
85 | ||
85 | ||
86 | 86 | #my $ss1 = $pr1->shared_secret($pu2); |
87 | 87 | #my $ss2 = $pr2->shared_secret($pu1); |
88 | 88 | #is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
29 | 29 | $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.der'); |
30 | 30 | ok($k, 'load cryptx_priv_ecc2.der'); |
31 | 31 | ok($k->is_private, 'is_private cryptx_priv_ecc2.der'); |
32 | ||
32 | ||
33 | 33 | $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc1.der'); |
34 | 34 | ok($k, 'load cryptx_pub_ecc1.der'); |
35 | 35 | ok(!$k->is_private, 'is_private cryptx_pub_ecc1.der'); |
36 | ||
36 | ||
37 | 37 | $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc2.der'); |
38 | 38 | ok($k, 'load cryptx_pub_ecc2.der'); |
39 | 39 | ok(!$k->is_private, 'is_private cryptx_pub_ecc2.der'); |
40 | ||
40 | ||
41 | 41 | ### XXX-TODO regenerate keys |
42 | 42 | $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc1.pem'); |
43 | 43 | ok($k, 'load cryptx_priv_ecc1.pem'); |
44 | 44 | ok($k->is_private, 'is_private cryptx_priv_ecc1.pem'); |
45 | ||
45 | ||
46 | 46 | $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.pem'); |
47 | 47 | ok($k, 'load cryptx_priv_ecc2.pem'); |
48 | 48 | ok($k->is_private, 'is_private cryptx_priv_ecc2.pem'); |
49 | ||
49 | ||
50 | 50 | $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc1.pem'); |
51 | 51 | ok($k, 'load cryptx_pub_ecc1.pem'); |
52 | 52 | ok(!$k->is_private, 'is_private cryptx_pub_ecc1.pem'); |
53 | ||
53 | ||
54 | 54 | $k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc2.pem'); |
55 | 55 | ok($k, 'load cryptx_pub_ecc2.pem'); |
56 | 56 | ok(!$k->is_private, 'is_private cryptx_pub_ecc2.pem'); |
87 | 87 | $pr1->import_key('t/data/cryptx_priv_ecc1.der'); |
88 | 88 | my $pu1 = Crypt::PK::ECC->new; |
89 | 89 | $pu1->import_key('t/data/cryptx_pub_ecc1.der'); |
90 | ||
90 | ||
91 | 91 | my $ct = $pu1->encrypt("secret message"); |
92 | 92 | my $pt = $pr1->decrypt($ct); |
93 | 93 | ok(length $ct > 30, 'encrypt ' . length($ct)); |
94 | 94 | is($pt, "secret message", 'decrypt'); |
95 | ||
95 | ||
96 | 96 | my $sig = $pr1->sign_message("message"); |
97 | 97 | ok(length $sig > 60, 'sign_message ' . length($sig)); |
98 | 98 | ok($pu1->verify_message($sig, "message"), 'verify_message'); |
104 | 104 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); |
105 | 105 | $sig = $pr1->sign_hash($hash, 'SHA1'); |
106 | 106 | 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 | ||
109 | 109 | my $pr2 = Crypt::PK::ECC->new; |
110 | 110 | $pr2->import_key('t/data/cryptx_priv_ecc2.der'); |
111 | 111 | my $pu2 = Crypt::PK::ECC->new; |
112 | 112 | $pu2->import_key('t/data/cryptx_pub_ecc2.der'); |
113 | ||
113 | ||
114 | 114 | my $ss1 = $pr1->shared_secret($pu2); |
115 | 115 | my $ss2 = $pr2->shared_secret($pu1); |
116 | 116 | is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
141 | 141 | $sig = ecc_sign_hash('t/data/cryptx_priv_ecc1.der', $hash, 'SHA1'); |
142 | 142 | ok($sig, 'ecc_sign_hash'); |
143 | 143 | ok(ecc_verify_hash('t/data/cryptx_pub_ecc1.der', $sig, $hash, 'SHA1'), 'ecc_verify_hash'); |
144 | ||
144 | ||
145 | 145 | my $ss1 = ecc_shared_secret('t/data/cryptx_priv_ecc1.der', 't/data/cryptx_pub_ecc2.der'); |
146 | 146 | my $ss2 = ecc_shared_secret('t/data/cryptx_priv_ecc2.der', 't/data/cryptx_pub_ecc1.der'); |
147 | 147 | is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
76 | 76 | for my $h (@$data) { |
77 | 77 | my $ec_pri = Crypt::PK::ECC->new->import_key_raw(pack("H*",$h->{PRI}), $h->{CURVE}); |
78 | 78 | 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}); | |
80 | 80 | is( unpack("H*", $ec_pub ->export_key_raw('public_compressed')), $h->{PUBC}, "$h->{PRI_FILE}/ec_pub public compressed"); |
81 | 81 | is( unpack("H*", $ec_pub ->export_key_raw('public')) , $h->{PUB}, "$h->{PRI_FILE}/ec_pub public uncompressed"); |
82 | 82 | is( unpack("H*", $ec_pubc->export_key_raw('public_compressed')), $h->{PUBC}, "$h->{PRI_FILE}/ec_pubc public compressed"); |
15 | 15 | $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa2.der'); |
16 | 16 | ok($k, 'load cryptx_priv_rsa2.der'); |
17 | 17 | ok($k->is_private, 'is_private cryptx_priv_rsa2.der'); |
18 | ||
18 | ||
19 | 19 | $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa1.der'); |
20 | 20 | ok($k, 'load cryptx_pub_rsa1.der'); |
21 | 21 | ok(!$k->is_private, 'is_private cryptx_pub_rsa1.der'); |
22 | ||
22 | ||
23 | 23 | $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa2.der'); |
24 | 24 | ok($k, 'load cryptx_pub_rsa2.der'); |
25 | 25 | ok(!$k->is_private, 'is_private cryptx_pub_rsa2.der'); |
26 | ||
26 | ||
27 | 27 | $k = Crypt::PK::RSA->new('t/data/openssl_rsa1.der'); |
28 | 28 | ok($k, 'load openssl_rsa1.der'); |
29 | 29 | ok($k->is_private, 'is_private openssl_rsa1.der'); |
30 | ||
30 | ||
31 | 31 | $k = Crypt::PK::RSA->new('t/data/openssl_rsa2.der'); |
32 | 32 | ok($k, 'load openssl_rsa2.der'); |
33 | 33 | ok($k->is_private, 'is_private openssl_rsa2.der'); |
34 | ||
34 | ||
35 | 35 | $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa1.pem'); |
36 | 36 | ok($k, 'load cryptx_priv_rsa1.pem'); |
37 | 37 | ok($k->is_private, 'is_private cryptx_priv_rsa1.pem'); |
38 | ||
38 | ||
39 | 39 | $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa2.pem'); |
40 | 40 | ok($k, 'load cryptx_priv_rsa2.pem'); |
41 | 41 | ok($k->is_private, 'is_private cryptx_priv_rsa2.pem'); |
42 | ||
42 | ||
43 | 43 | $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa1.pem'); |
44 | 44 | ok($k, 'load cryptx_pub_rsa1.pem'); |
45 | 45 | ok(!$k->is_private, 'is_private cryptx_pub_rsa1.pem'); |
46 | ||
46 | ||
47 | 47 | $k = Crypt::PK::RSA->new('t/data/cryptx_pub_rsa2.pem'); |
48 | 48 | ok($k, 'load cryptx_pub_rsa2.pem'); |
49 | 49 | ok(!$k->is_private, 'is_private cryptx_pub_rsa2.pem'); |
50 | ||
50 | ||
51 | 51 | $k = Crypt::PK::RSA->new('t/data/openssl_rsa1.pem'); |
52 | 52 | ok($k, 'load openssl_rsa1.pem'); |
53 | 53 | ok($k->is_private, 'is_private openssl_rsa1.pem'); |
54 | ||
54 | ||
55 | 55 | $k = Crypt::PK::RSA->new('t/data/openssl_rsa2.pem'); |
56 | 56 | ok($k, 'load openssl_rsa2.pem'); |
57 | 57 | ok($k->is_private, 'is_private openssl_rsa2.pem'); |
58 | 58 | |
59 | # X509 | |
59 | # X509 | |
60 | 60 | $k = Crypt::PK::RSA->new('t/data/openssl_rsa-x509.pem'); |
61 | 61 | ok($k, 'openssl_rsa-x509.pem'); |
62 | 62 | ok(!$k->is_private, 'not private openssl_rsa-x509.pem'); |
70 | 70 | $pr1->import_key('t/data/cryptx_priv_rsa1.der'); |
71 | 71 | my $pu1 = Crypt::PK::RSA->new; |
72 | 72 | $pu1->import_key('t/data/cryptx_pub_rsa1.der'); |
73 | ||
73 | ||
74 | 74 | my $ct = $pu1->encrypt("secret message"); |
75 | 75 | my $pt = $pr1->decrypt($ct); |
76 | 76 | ok(length $ct > 200, 'encrypt ' . length($ct)); |
77 | 77 | is($pt, "secret message", 'decrypt'); |
78 | ||
78 | ||
79 | 79 | my $sig = $pr1->sign_message("message"); |
80 | 80 | ok(length $sig > 60, 'sign_message ' . length($sig)); |
81 | 81 | ok($pu1->verify_message($sig, "message"), 'verify_message'); |
10 | 10 | my $sum = 0; |
11 | 11 | $sum += $r->double for (1..1000); |
12 | 12 | my $avg = $sum/1000; |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
14 | 14 | } |
15 | 15 | |
16 | 16 | { |
17 | 17 | my $sum = 0; |
18 | 18 | $sum += $r->double(-180) for (1..1000); |
19 | 19 | my $avg = $sum/1000; |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
21 | 21 | } |
22 | 22 | |
23 | 23 | { |
24 | 24 | my $sum = 0; |
25 | 25 | $sum += $r->int32 for (1..1000); |
26 | 26 | my $avg = $sum/1000; |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
28 | 28 | } |
29 | 29 | |
30 | 30 | { |
31 | 31 | my $sum = 0; |
32 | 32 | $sum += rand(80) for (1..1000); |
33 | 33 | my $avg = $sum/1000; |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
35 | 35 | } |
36 | 36 | |
37 | 37 | { |
38 | 38 | my $sum = 0; |
39 | 39 | $sum += rand(-180) for (1..1000); |
40 | 40 | my $avg = $sum/1000; |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | { |
45 | 45 | my $sum = 0; |
46 | 46 | $sum += irand for (1..1000); |
47 | 47 | my $avg = $sum/1000; |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | { |
55 | 55 | like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex"); |
56 | 56 | like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64"); |
57 | 57 | like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u"); |
58 | ||
58 | ||
59 | 59 | like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string'); |
60 | 60 | like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string'); |
61 | 61 | is(length random_bytes(55), 55, "bytes"); |
10 | 10 | my $sum = 0; |
11 | 11 | $sum += $r->double for (1..1000); |
12 | 12 | my $avg = $sum/1000; |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
14 | 14 | } |
15 | 15 | |
16 | 16 | { |
17 | 17 | my $sum = 0; |
18 | 18 | $sum += $r->double(-180) for (1..1000); |
19 | 19 | my $avg = $sum/1000; |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
21 | 21 | } |
22 | 22 | |
23 | 23 | { |
24 | 24 | my $sum = 0; |
25 | 25 | $sum += $r->int32 for (1..1000); |
26 | 26 | my $avg = $sum/1000; |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
28 | 28 | } |
29 | 29 | |
30 | 30 | { |
31 | 31 | my $sum = 0; |
32 | 32 | $sum += rand(80) for (1..1000); |
33 | 33 | my $avg = $sum/1000; |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
35 | 35 | } |
36 | 36 | |
37 | 37 | { |
38 | 38 | my $sum = 0; |
39 | 39 | $sum += rand(-180) for (1..1000); |
40 | 40 | my $avg = $sum/1000; |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | { |
45 | 45 | my $sum = 0; |
46 | 46 | $sum += irand for (1..1000); |
47 | 47 | my $avg = $sum/1000; |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | { |
55 | 55 | like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex"); |
56 | 56 | like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64"); |
57 | 57 | like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u"); |
58 | ||
58 | ||
59 | 59 | like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string'); |
60 | 60 | like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string'); |
61 | 61 | is(length random_bytes(55), 55, "bytes"); |
10 | 10 | my $sum = 0; |
11 | 11 | $sum += $r->double for (1..1000); |
12 | 12 | my $avg = $sum/1000; |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
14 | 14 | } |
15 | 15 | |
16 | 16 | { |
17 | 17 | my $sum = 0; |
18 | 18 | $sum += $r->double(-180) for (1..1000); |
19 | 19 | my $avg = $sum/1000; |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
21 | 21 | } |
22 | 22 | |
23 | 23 | { |
24 | 24 | my $sum = 0; |
25 | 25 | $sum += $r->int32 for (1..1000); |
26 | 26 | my $avg = $sum/1000; |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
28 | 28 | } |
29 | 29 | |
30 | 30 | { |
31 | 31 | my $sum = 0; |
32 | 32 | $sum += rand(80) for (1..1000); |
33 | 33 | my $avg = $sum/1000; |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
35 | 35 | } |
36 | 36 | |
37 | 37 | { |
38 | 38 | my $sum = 0; |
39 | 39 | $sum += rand(-180) for (1..1000); |
40 | 40 | my $avg = $sum/1000; |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | { |
45 | 45 | my $sum = 0; |
46 | 46 | $sum += irand for (1..1000); |
47 | 47 | my $avg = $sum/1000; |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | { |
55 | 55 | like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex"); |
56 | 56 | like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64"); |
57 | 57 | like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u"); |
58 | ||
58 | ||
59 | 59 | like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string'); |
60 | 60 | like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string'); |
61 | 61 | is(length random_bytes(55), 55, "bytes"); |
10 | 10 | my $sum = 0; |
11 | 11 | $sum += $r->double for (1..1000); |
12 | 12 | my $avg = $sum/1000; |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
14 | 14 | } |
15 | 15 | |
16 | 16 | { |
17 | 17 | my $sum = 0; |
18 | 18 | $sum += $r->double(-180) for (1..1000); |
19 | 19 | my $avg = $sum/1000; |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
21 | 21 | } |
22 | 22 | |
23 | 23 | { |
24 | 24 | my $sum = 0; |
25 | 25 | $sum += $r->int32 for (1..1000); |
26 | 26 | my $avg = $sum/1000; |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
28 | 28 | } |
29 | 29 | |
30 | 30 | { |
31 | 31 | my $sum = 0; |
32 | 32 | $sum += rand(80) for (1..1000); |
33 | 33 | my $avg = $sum/1000; |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
35 | 35 | } |
36 | 36 | |
37 | 37 | { |
38 | 38 | my $sum = 0; |
39 | 39 | $sum += rand(-180) for (1..1000); |
40 | 40 | my $avg = $sum/1000; |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | { |
45 | 45 | my $sum = 0; |
46 | 46 | $sum += irand for (1..1000); |
47 | 47 | my $avg = $sum/1000; |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | { |
55 | 55 | like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex"); |
56 | 56 | like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64"); |
57 | 57 | like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u"); |
58 | ||
58 | ||
59 | 59 | like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string'); |
60 | 60 | like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string'); |
61 | 61 | is(length random_bytes(55), 55, "bytes"); |
10 | 10 | my $sum = 0; |
11 | 11 | $sum += $r->double for (1..1000); |
12 | 12 | my $avg = $sum/1000; |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
14 | 14 | } |
15 | 15 | |
16 | 16 | { |
17 | 17 | my $sum = 0; |
18 | 18 | $sum += $r->double(-180) for (1..1000); |
19 | 19 | my $avg = $sum/1000; |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
21 | 21 | } |
22 | 22 | |
23 | 23 | { |
24 | 24 | my $sum = 0; |
25 | 25 | $sum += $r->int32 for (1..1000); |
26 | 26 | my $avg = $sum/1000; |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
28 | 28 | } |
29 | 29 | |
30 | 30 | { |
31 | 31 | my $sum = 0; |
32 | 32 | $sum += rand(80) for (1..1000); |
33 | 33 | my $avg = $sum/1000; |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
35 | 35 | } |
36 | 36 | |
37 | 37 | { |
38 | 38 | my $sum = 0; |
39 | 39 | $sum += rand(-180) for (1..1000); |
40 | 40 | my $avg = $sum/1000; |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | { |
45 | 45 | my $sum = 0; |
46 | 46 | $sum += irand for (1..1000); |
47 | 47 | my $avg = $sum/1000; |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | { |
55 | 55 | like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex"); |
56 | 56 | like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64"); |
57 | 57 | like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u"); |
58 | ||
58 | ||
59 | 59 | like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string'); |
60 | 60 | like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string'); |
61 | 61 | is(length random_bytes(55), 55, "bytes"); |
10 | 10 | my $sum = 0; |
11 | 11 | $sum += $r->double for (1..1000); |
12 | 12 | my $avg = $sum/1000; |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
13 | ok($avg>0.4 && $avg<0.6, "rand $avg"); | |
14 | 14 | } |
15 | 15 | |
16 | 16 | { |
17 | 17 | my $sum = 0; |
18 | 18 | $sum += $r->double(-180) for (1..1000); |
19 | 19 | my $avg = $sum/1000; |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
20 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
21 | 21 | } |
22 | 22 | |
23 | 23 | { |
24 | 24 | my $sum = 0; |
25 | 25 | $sum += $r->int32 for (1..1000); |
26 | 26 | my $avg = $sum/1000; |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
27 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
28 | 28 | } |
29 | 29 | |
30 | 30 | { |
31 | 31 | my $sum = 0; |
32 | 32 | $sum += rand(80) for (1..1000); |
33 | 33 | my $avg = $sum/1000; |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
34 | ok($avg>30 && $avg<50, "rand $avg"); | |
35 | 35 | } |
36 | 36 | |
37 | 37 | { |
38 | 38 | my $sum = 0; |
39 | 39 | $sum += rand(-180) for (1..1000); |
40 | 40 | my $avg = $sum/1000; |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
41 | ok($avg>-100 && $avg<-80, "rand $avg"); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | { |
45 | 45 | my $sum = 0; |
46 | 46 | $sum += irand for (1..1000); |
47 | 47 | my $avg = $sum/1000; |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
48 | ok($avg>2**30 && $avg<2**32, "rand $avg"); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | { |
55 | 55 | like($r->bytes_hex(55), qr/^[0-9A-Fa-f]{110}$/, "bytes_hex"); |
56 | 56 | like($r->bytes_b64(60), qr/^[A-Za-z0-9+\/=]{80}$/, "bytes_b64"); |
57 | 57 | like($r->bytes_b64u(60), qr/^[A-Za-z0-9_-]{80}$/, "bytes_b64u"); |
58 | ||
58 | ||
59 | 59 | like(random_string(45), qr/^[A-Z-a-z0-9]+$/, 'string'); |
60 | 60 | like(random_string_from("ABC,.-", 45), qr/^[ABC,\,\.\-]+$/, 'string'); |
61 | 61 | is(length random_bytes(55), 55, "bytes"); |