2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-09-21 09:39:09 +00:00

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.
This commit is contained in:
Jay Berkenbilt 2019-11-05 21:29:34 -05:00
parent 127a957aee
commit 1639d972ea
5 changed files with 173 additions and 91 deletions

View File

@ -10,32 +10,52 @@ require TestDriver;
my $td = new TestDriver('AES'); my $td = new TestDriver('AES');
cleanup(); my @providers = ();
if (exists $ENV{'QPDF_CRYPTO_PROVIDER'})
{
push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'});
}
else
{
open(Q, "qpdf --show-crypto|") or die;
while (<Q>)
{
s/\s+$//s;
push(@providers, $_);
}
close(Q);
}
foreach my $p (@providers)
{
$ENV{'QPDF_CRYPTO_PROVIDER'} = $p;
my $key = '000102030405060708090a0b0c0d0e0f'; cleanup();
$td->runtest("encrypt test vector",
{$td->COMMAND => "aes -cbc -encrypt $key test-vector.clear tmp1"}, 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->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output", $td->runtest("check output",
{$td->FILE => "tmp1"}, {$td->FILE => "tmp1"},
{$td->FILE => "test-vector.cipher"}); {$td->FILE => "test-vector.cipher"});
$td->runtest("decrypt test vector", $td->runtest("decrypt test vector ($p)",
{$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"}, {$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output", $td->runtest("check output",
{$td->FILE => "tmp2"}, {$td->FILE => "tmp2"},
{$td->FILE => "test-vector.clear"}); {$td->FILE => "test-vector.clear"});
$key = '243f6a8885243f6a8885243f6a888524'; $key = '243f6a8885243f6a8885243f6a888524';
foreach my $d (['data1', 17072], ['data2', 16032]) foreach my $d (['data1', 17072], ['data2', 16032])
{ {
my ($file, $size) = @$d; my ($file, $size) = @$d;
$td->runtest("encrypt $file", $td->runtest("encrypt $file ($p)",
{$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"}, {$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
# sleep one second so random number will get a different seed # sleep one second so random number will get a different seed
sleep(1); sleep(1);
$td->runtest("encrypt $file again", $td->runtest("encrypt $file again ($p)",
{$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"}, {$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
foreach my $f (qw(tmp1 tmp2)) foreach my $f (qw(tmp1 tmp2))
@ -47,10 +67,10 @@ foreach my $d (['data1', 17072], ['data2', 16032])
$td->runtest("verify files are different", $td->runtest("verify files are different",
{$td->COMMAND => "cmp tmp1 tmp2"}, {$td->COMMAND => "cmp tmp1 tmp2"},
{$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'}); {$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'});
$td->runtest("decrypt $file", $td->runtest("decrypt $file ($p)",
{$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"}, {$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("decrypt $file again", $td->runtest("decrypt $file again ($p)",
{$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"}, {$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output", $td->runtest("check output",
@ -59,11 +79,12 @@ foreach my $d (['data1', 17072], ['data2', 16032])
$td->runtest("check output", $td->runtest("check output",
{$td->FILE => "tmp4"}, {$td->FILE => "tmp4"},
{$td->FILE => $file}); {$td->FILE => $file});
}
cleanup();
} }
cleanup(); $td->report(22 * scalar(@providers));
$td->report(22);
sub cleanup sub cleanup
{ {

View File

@ -9,10 +9,30 @@ require TestDriver;
my $td = new TestDriver('md5'); my $td = new TestDriver('md5');
$td->runtest("md5", my @providers = ();
if (exists $ENV{'QPDF_CRYPTO_PROVIDER'})
{
push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'});
}
else
{
open(Q, "qpdf --show-crypto|") or die;
while (<Q>)
{
s/\s+$//s;
push(@providers, $_);
}
close(Q);
}
foreach my $p (@providers)
{
$ENV{'QPDF_CRYPTO_PROVIDER'} = $p;
$td->runtest("md5 ($p)",
{$td->COMMAND => "md5"}, {$td->COMMAND => "md5"},
{$td->FILE => "md5.out", {$td->FILE => "md5.out",
$td->EXIT_STATUS => 0}, $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES); $td->NORMALIZE_NEWLINES);
}
$td->report(1); $td->report(scalar(@providers));

View File

@ -9,40 +9,60 @@ require TestDriver;
my $td = new TestDriver('RC4'); my $td = new TestDriver('RC4');
cleanup(); my @providers = ();
if (exists $ENV{'QPDF_CRYPTO_PROVIDER'})
{
push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'});
}
else
{
open(Q, "qpdf --show-crypto|") or die;
while (<Q>)
{
s/\s+$//s;
push(@providers, $_);
}
close(Q);
}
my @tests = ('0123456789abcdef', my @tests = ('0123456789abcdef',
'0123456789abcdef', '0123456789abcdef',
'0000000000000000', '0000000000000000',
'ef012345', 'ef012345',
'0123456789abcdef'); '0123456789abcdef');
my $n = 0; foreach my $p (@providers)
foreach my $key (@tests)
{ {
$ENV{'QPDF_CRYPTO_PROVIDER'} = $p;
cleanup();
my $n = 0;
foreach my $key (@tests)
{
++$n; ++$n;
$td->runtest("test $n", $td->runtest("test $n ($p)",
{$td->COMMAND => "rc4 $key test$n.in tmp1-$n.out"}, {$td->COMMAND => "rc4 $key test$n.in tmp1-$n.out"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output", $td->runtest("check output",
{$td->FILE => "tmp1-$n.out"}, {$td->FILE => "tmp1-$n.out"},
{$td->FILE => "test$n.out"}); {$td->FILE => "test$n.out"});
$td->runtest("test $n reverse", $td->runtest("test $n reverse ($p)",
{$td->COMMAND => "rc4 $key test$n.out tmp2-$n.out"}, {$td->COMMAND => "rc4 $key test$n.out tmp2-$n.out"},
{$td->STRING => "", $td->EXIT_STATUS => 0}); {$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output", $td->runtest("check output",
{$td->FILE => "tmp2-$n.out"}, {$td->FILE => "tmp2-$n.out"},
{$td->FILE => "test$n.in"}); {$td->FILE => "test$n.in"});
} }
$td->runtest("other tests", $td->runtest("other tests ($p)",
{$td->COMMAND => "rc4 other"}, {$td->COMMAND => "rc4 other"},
{$td->STRING => "passed\n", $td->EXIT_STATUS => 0}, {$td->STRING => "passed\n", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES); $td->NORMALIZE_NEWLINES);
cleanup(); cleanup();
}
$td->report(1 + (4 * scalar(@tests))); $td->report((1 + (4 * scalar(@tests))) * scalar(@providers));
sub cleanup sub cleanup
{ {

View File

@ -9,10 +9,30 @@ require TestDriver;
my $td = new TestDriver('sha2'); my $td = new TestDriver('sha2');
$td->runtest("sha2", my @providers = ();
if (exists $ENV{'QPDF_CRYPTO_PROVIDER'})
{
push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'});
}
else
{
open(Q, "qpdf --show-crypto|") or die;
while (<Q>)
{
s/\s+$//s;
push(@providers, $_);
}
close(Q);
}
foreach my $p (@providers)
{
$ENV{'QPDF_CRYPTO_PROVIDER'} = $p;
$td->runtest("sha2 ($p)",
{$td->COMMAND => "sha2"}, {$td->COMMAND => "sha2"},
{$td->FILE => "sha2.out", {$td->FILE => "sha2.out",
$td->EXIT_STATUS => 0}, $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES); $td->NORMALIZE_NEWLINES);
}
$td->report(1); $td->report(scalar(@providers));

View File

@ -53,7 +53,8 @@ define run_qtest
@echo running qtest-driver for $(1) @echo running qtest-driver for $(1)
@(cd $(1)/$(OUTPUT_DIR); \ @(cd $(1)/$(OUTPUT_DIR); \
if TC_SRCS="$(foreach T,$(TC_SRCS_$(1)),../../$(T))" \ if TC_SRCS="$(foreach T,$(TC_SRCS_$(1)),../../$(T))" \
$(QTEST) -bindirs .:.. -datadir ../qtest -covdir .. \ $(QTEST) -bindirs .:..:../../qpdf/$(OUTPUT_DIR) \
-datadir ../qtest -covdir .. \
-junit-suffix `basename $(1)`; then \ -junit-suffix `basename $(1)`; then \
true; \ true; \
else \ else \