From 1639d972ea0b30711b9a762fe4475cdb2b229be1 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 5 Nov 2019 21:29:34 -0500 Subject: Run libtests for crypto with all available providers If QPDF_CRYPTO_PROVIDER is set, just run the tests for the given provider. This is to support cases of running the entire test suite for each provider. If QPDF_CRYPTO_PROVIDER is not set, run the tests that exercise the cyrpto provider for each available provider. --- libtests/qtest/aes.test | 115 ++++++++++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 47 deletions(-) (limited to 'libtests/qtest/aes.test') diff --git a/libtests/qtest/aes.test b/libtests/qtest/aes.test index 7e48840a..a468b0b4 100644 --- a/libtests/qtest/aes.test +++ b/libtests/qtest/aes.test @@ -10,60 +10,81 @@ require TestDriver; my $td = new TestDriver('AES'); -cleanup(); - -my $key = '000102030405060708090a0b0c0d0e0f'; -$td->runtest("encrypt test vector", - {$td->COMMAND => "aes -cbc -encrypt $key test-vector.clear tmp1"}, - {$td->STRING => "", $td->EXIT_STATUS => 0}); -$td->runtest("check output", - {$td->FILE => "tmp1"}, - {$td->FILE => "test-vector.cipher"}); -$td->runtest("decrypt test vector", - {$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"}, - {$td->STRING => "", $td->EXIT_STATUS => 0}); -$td->runtest("check output", - {$td->FILE => "tmp2"}, - {$td->FILE => "test-vector.clear"}); - -$key = '243f6a8885243f6a8885243f6a888524'; -foreach my $d (['data1', 17072], ['data2', 16032]) +my @providers = (); +if (exists $ENV{'QPDF_CRYPTO_PROVIDER'}) +{ + push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'}); +} +else { - my ($file, $size) = @$d; - $td->runtest("encrypt $file", - {$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"}, - {$td->STRING => "", $td->EXIT_STATUS => 0}); - # sleep one second so random number will get a different seed - sleep(1); - $td->runtest("encrypt $file again", - {$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"}, - {$td->STRING => "", $td->EXIT_STATUS => 0}); - foreach my $f (qw(tmp1 tmp2)) + open(Q, "qpdf --show-crypto|") or die; + while () { - $td->runtest("check size", - {$td->STRING => sprintf("%d\n", stat($f)->size)}, - {$td->STRING => "$size\n"}); + s/\s+$//s; + push(@providers, $_); } - $td->runtest("verify files are different", - {$td->COMMAND => "cmp tmp1 tmp2"}, - {$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'}); - $td->runtest("decrypt $file", - {$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"}, - {$td->STRING => "", $td->EXIT_STATUS => 0}); - $td->runtest("decrypt $file again", - {$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"}, - {$td->STRING => "", $td->EXIT_STATUS => 0}); + close(Q); +} +foreach my $p (@providers) +{ + $ENV{'QPDF_CRYPTO_PROVIDER'} = $p; + + cleanup(); + + my $key = '000102030405060708090a0b0c0d0e0f'; + $td->runtest("encrypt test vector ($p)", + {$td->COMMAND => + "aes -cbc -encrypt $key test-vector.clear tmp1"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}); $td->runtest("check output", - {$td->FILE => "tmp3"}, - {$td->FILE => $file}); + {$td->FILE => "tmp1"}, + {$td->FILE => "test-vector.cipher"}); + $td->runtest("decrypt test vector ($p)", + {$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}); $td->runtest("check output", - {$td->FILE => "tmp4"}, - {$td->FILE => $file}); -} + {$td->FILE => "tmp2"}, + {$td->FILE => "test-vector.clear"}); + + $key = '243f6a8885243f6a8885243f6a888524'; + foreach my $d (['data1', 17072], ['data2', 16032]) + { + my ($file, $size) = @$d; + $td->runtest("encrypt $file ($p)", + {$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}); + # sleep one second so random number will get a different seed + sleep(1); + $td->runtest("encrypt $file again ($p)", + {$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}); + foreach my $f (qw(tmp1 tmp2)) + { + $td->runtest("check size", + {$td->STRING => sprintf("%d\n", stat($f)->size)}, + {$td->STRING => "$size\n"}); + } + $td->runtest("verify files are different", + {$td->COMMAND => "cmp tmp1 tmp2"}, + {$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'}); + $td->runtest("decrypt $file ($p)", + {$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}); + $td->runtest("decrypt $file again ($p)", + {$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}); + $td->runtest("check output", + {$td->FILE => "tmp3"}, + {$td->FILE => $file}); + $td->runtest("check output", + {$td->FILE => "tmp4"}, + {$td->FILE => $file}); + } -cleanup(); + cleanup(); +} -$td->report(22); +$td->report(22 * scalar(@providers)); sub cleanup { -- cgit v1.2.3-54-g00ecf