libcryptx-perl/t/auth_enc_gcm_test_vector_ltc.t

119 lines
4.5 KiB
Perl

use strict;
use warnings;
use Test::More tests => 42;
use Crypt::AuthEnc::GCM qw( gcm_encrypt_authenticate gcm_decrypt_verify );
sub do_test {
my %a = @_;
my $key = pack("H*", $a{key});
my $adata = pack("H*", $a{adata});
my $iv = pack("H*", $a{iv});
my $plaintext = pack("H*", $a{plaintext});
my $ciphertext = pack("H*", $a{ciphertext});
my $tag = pack("H*", $a{tag});
# encrypt
my $m1 = Crypt::AuthEnc::GCM->new("AES", $key);
$m1->iv_add($iv);
$m1->adata_add($adata);
my $ct = $m1->encrypt_add($plaintext);
my $tag1 = $m1->encrypt_done;
is(unpack('H*', $ct), $a{ciphertext}, "enc: ciphertext");
is(unpack('H*', $tag1), $a{tag}, "enc: tag");
# decrypt
my $d1 = Crypt::AuthEnc::GCM->new("AES", $key);
$d1->iv_add($iv);
$d1->adata_add($adata);
my $pt = $d1->decrypt_add($ciphertext);
my $tag2 = $d1->decrypt_done();
is(unpack('H*', $pt), $a{plaintext}, "dec: plaintext");
is(unpack('H*', $tag2), $a{tag}, "dec: tag");
# all-in-one
my ($ct3, $tag3) = gcm_encrypt_authenticate('AES', $key, $iv, $adata, $plaintext);
is(unpack('H*', $ct3), $a{ciphertext}, "enc: ciphertext");
is(unpack('H*', $tag3), $a{tag}, "enc: tag");
my $pt3 = gcm_decrypt_verify('AES', $key, $iv, $adata, $ciphertext, $tag);
is(unpack('H*', $pt3), $a{plaintext}, "dec: plaintext");
}
do_test(%$_) for (
#/* test case #1 */
# XXX-FIXME this test fails!!!!
# {
# key => '00000000000000000000000000000000',
# plaintext => '',
# adata => '',
# iv => '000000000000000000000000',
# ciphertext => '',
# tag => '58e2fccefa7e3061367f1d57a4e7455a',
# },
#/* test case #2 */
{
key => '00000000000000000000000000000000',
plaintext => '00000000000000000000000000000000',
adata => '',
iv => '000000000000000000000000',
ciphertext => '0388dace60b6a392f328c2b971b2fe78',
tag => 'ab6e47d42cec13bdf53a67b21257bddf',
},
#/* test case #3 */
{
key => 'feffe9928665731c6d6a8f9467308308',
plaintext => 'd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255',
adata => '',
iv => 'cafebabefacedbaddecaf888',
ciphertext => '42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985',
tag => '4d5c2af327cd64a62cf35abd2ba6fab4',
},
#/* test case #4 */
{
key => 'feffe9928665731c6d6a8f9467308308',
plaintext => 'd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39',
adata => 'feedfacedeadbeeffeedfacedeadbeefabaddad2',
iv => 'cafebabefacedbaddecaf888',
ciphertext => '42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091',
tag => '5bc94fbc3221a5db94fae95ae7121a47',
},
#/* test case #5 */
{
key => 'feffe9928665731c6d6a8f9467308308',
plaintext => 'd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39',
adata => 'feedfacedeadbeeffeedfacedeadbeefabaddad2',
iv => 'cafebabefacedbad',
ciphertext => '61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598',
tag => '3612d2e79e3b0785561be14aaca2fccb',
},
#/* test case #6 */
{
key => 'feffe9928665731c6d6a8f9467308308',
plaintext => 'd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39',
adata => 'feedfacedeadbeeffeedfacedeadbeefabaddad2',
iv => '9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b',
ciphertext => '8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5',
tag => '619cc5aefffe0bfa462af43c1699d050',
},
#/* test case #46 from BG (catches the LTC bug of v1.15) */
{
key => '00000000000000000000000000000000',
plaintext => 'a2aab3ad8b17acdda288426cd7c429b7ca86b7aca05809c70ce82db25711cb5302eb2743b036f3d750d6cf0dc0acb92950d546db308f93b4ff244afa9dc72bcd758d2c',
adata => '688e1aa984de926dc7b4c47f44',
iv => 'b72138b5a05ff5070e8cd94183f761d8',
ciphertext => 'cbc8d2f15481a4cc7dd1e19aaa83de5678483ec359ae7dec2ab8d534e0906f4b4663faff58a8b2d733b845eef7c9b331e9e10eb2612c995feb1ac15a6286cce8b297a8',
tag => '8d2d2a9372626f6bee8580276a6366bf',
}
);