2018-03-22 15:51:09 +01:00
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
use Test::More tests => 16;
|
|
|
|
|
|
|
|
use Crypt::AuthEnc::CCM qw( ccm_encrypt_authenticate ccm_decrypt_verify );
|
|
|
|
|
|
|
|
sub do_test {
|
|
|
|
my %a = @_;
|
2018-03-22 15:54:03 +01:00
|
|
|
|
|
|
|
my $key = pack("H*", $a{key});
|
2018-03-22 15:51:09 +01:00
|
|
|
my $nonce = pack("H*", $a{nonce});
|
|
|
|
my $header = pack("H*", $a{header});
|
|
|
|
my $plaintext = pack("H*", $a{plaintext});
|
|
|
|
my $ciphertext = pack("H*", $a{ciphertext});
|
|
|
|
my $tag = pack("H*", $a{tag});
|
2018-03-22 15:54:03 +01:00
|
|
|
|
2018-03-22 15:51:09 +01:00
|
|
|
my ($ct3, $tag3) = ccm_encrypt_authenticate('AES', $key, $nonce, $header, length($tag), $plaintext);
|
|
|
|
is(unpack('H*', $ct3), $a{ciphertext}, "enc: ciphertext");
|
|
|
|
is(unpack('H*', $tag3), $a{tag}, "enc: tag");
|
|
|
|
my $pt3 = ccm_decrypt_verify('AES', $key, $nonce, $header, $ciphertext, $tag);
|
|
|
|
is(unpack('H*', $pt3), $a{plaintext}, "dec: plaintext");
|
|
|
|
ok(!defined ccm_decrypt_verify('AES', $key, $nonce, $header, $ciphertext, "BAD__TAG"));
|
|
|
|
}
|
|
|
|
|
|
|
|
do_test(%$_) for (
|
|
|
|
#/* 13 byte nonce, 8 byte auth, 23 byte pt */
|
|
|
|
{
|
|
|
|
key=>'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf',
|
|
|
|
nonce=>'00000003020100a0a1a2a3a4a5',
|
|
|
|
header=>'0001020304050607',
|
|
|
|
plaintext=>'08090a0b0c0d0e0f101112131415161718191a1b1c1d1e',
|
|
|
|
ciphertext=>'588c979a61c663d2f066d0c2c0f989806d5f6b61dac384',
|
|
|
|
tag=>'17e8d12cfdf926e0',
|
|
|
|
},
|
2018-03-22 15:54:03 +01:00
|
|
|
|
2018-03-22 15:51:09 +01:00
|
|
|
#/* 13 byte nonce, 12 byte header, 19 byte pt */
|
|
|
|
{
|
|
|
|
key=>'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf',
|
|
|
|
nonce=>'00000006050403a0a1a2a3a4a5',
|
|
|
|
header=>'000102030405060708090a0b',
|
|
|
|
plaintext=>'0c0d0e0f101112131415161718191a1b1c1d1e',
|
|
|
|
ciphertext=>'a28c6865939a9a79faaa5c4c2a9d4a91cdac8c',
|
|
|
|
tag=>'96c861b9c9e61ef1',
|
|
|
|
},
|
2018-03-22 15:54:03 +01:00
|
|
|
|
2018-03-22 15:51:09 +01:00
|
|
|
#/* supplied by Brian Gladman */
|
|
|
|
{
|
|
|
|
key=>'404142434445464748494a4b4c4d4e4f',
|
|
|
|
nonce=>'10111213141516',
|
|
|
|
header=>'0001020304050607',
|
|
|
|
plaintext=>'20212223',
|
|
|
|
ciphertext=>'7162015b',
|
|
|
|
tag=>'4dac255d',
|
|
|
|
},
|
2018-03-22 15:54:03 +01:00
|
|
|
|
2018-03-22 15:51:09 +01:00
|
|
|
{
|
|
|
|
key=>'c97c1f67ce371185514a8a19f2bdd52f',
|
|
|
|
nonce=>'005030f1844408b5039776e70c',
|
|
|
|
header=>'08400fd2e128a57c5030f1844408abaea5b8fcba0000',
|
|
|
|
plaintext=>'f8ba1a55d02f85ae967bb62fb6cda8eb7e78a050',
|
|
|
|
ciphertext=>'f3d0a2fe9a3dbf2342a643e43246e80c3c04d019',
|
|
|
|
tag=>'7845ce0b16f97623',
|
|
|
|
},
|
2018-03-22 15:54:03 +01:00
|
|
|
);
|