aboutsummaryrefslogtreecommitdiffstats
path: root/libtests
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2009-10-18 01:58:59 +0200
committerJay Berkenbilt <ejb@ql.org>2009-10-18 01:58:59 +0200
commitaaeb71093d4ba3eafee0efece3b8bad7c18f0f00 (patch)
treeca715c95a5b614a292e6db0d95395397f0a81a5f /libtests
parente25910b59ab84c7aada0b651e7dbb47f6830ad3d (diff)
downloadqpdf-aaeb71093d4ba3eafee0efece3b8bad7c18f0f00.tar.zst
test aes
git-svn-id: svn+q:///qpdf/trunk@813 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'libtests')
-rw-r--r--libtests/aes.cc27
-rw-r--r--libtests/qtest/aes.test71
-rw-r--r--libtests/qtest/aes/data1bin0 -> 17041 bytes
-rw-r--r--libtests/qtest/aes/data2bin0 -> 16000 bytes
-rwxr-xr-xlibtests/qtest/aes/test-vector.cipher1
-rw-r--r--libtests/qtest/aes/test-vector.clearbin0 -> 16 bytes
6 files changed, 93 insertions, 6 deletions
diff --git a/libtests/aes.cc b/libtests/aes.cc
index 0c4b8e19..418c3297 100644
--- a/libtests/aes.cc
+++ b/libtests/aes.cc
@@ -8,22 +8,33 @@
static void usage()
{
- std::cerr << "Usage: aes { -encrypt | -decrypt }"
+ std::cerr << "Usage: aes [+-]cbc { -encrypt | -decrypt }"
<< " hex-key infile outfile" << std::endl;
exit(2);
}
int main(int argc, char* argv[])
{
- if (argc != 5)
+ if (argc != 6)
{
usage();
}
- char* action = argv[1];
- char* hexkey = argv[2];
- char* infilename = argv[3];
- char* outfilename = argv[4];
+ char* cbc = argv[1];
+ char* action = argv[2];
+ char* hexkey = argv[3];
+ char* infilename = argv[4];
+ char* outfilename = argv[5];
+
+ bool cbc_mode = true;
+ if (strcmp(cbc, "-cbc") == 0)
+ {
+ cbc_mode = false;
+ }
+ else if (strcmp(cbc, "+cbc") != 0)
+ {
+ usage();
+ }
bool encrypt = true;
if (strcmp(action, "-decrypt") == 0)
@@ -72,6 +83,10 @@ int main(int argc, char* argv[])
Pl_StdioFile* out = new Pl_StdioFile("stdout", outfile);
Pl_AES_PDF* aes = new Pl_AES_PDF("aes_128_cbc", out, encrypt, key);
+ if (! cbc_mode)
+ {
+ aes->disableCBC();
+ }
// 16 < buffer size, buffer_size is not a multiple of 8 for testing
unsigned char buf[83];
diff --git a/libtests/qtest/aes.test b/libtests/qtest/aes.test
new file mode 100644
index 00000000..7e48840a
--- /dev/null
+++ b/libtests/qtest/aes.test
@@ -0,0 +1,71 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+use File::stat;
+
+chdir("aes") or die "chdir testdir failed: $!\n";
+
+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 ($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))
+ {
+ $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",
+ {$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});
+ $td->runtest("check output",
+ {$td->FILE => "tmp3"},
+ {$td->FILE => $file});
+ $td->runtest("check output",
+ {$td->FILE => "tmp4"},
+ {$td->FILE => $file});
+}
+
+cleanup();
+
+$td->report(22);
+
+sub cleanup
+{
+ system("rm -f tmp?");
+}
diff --git a/libtests/qtest/aes/data1 b/libtests/qtest/aes/data1
new file mode 100644
index 00000000..577a57d6
--- /dev/null
+++ b/libtests/qtest/aes/data1
Binary files differ
diff --git a/libtests/qtest/aes/data2 b/libtests/qtest/aes/data2
new file mode 100644
index 00000000..ab02cc99
--- /dev/null
+++ b/libtests/qtest/aes/data2
Binary files differ
diff --git a/libtests/qtest/aes/test-vector.cipher b/libtests/qtest/aes/test-vector.cipher
new file mode 100755
index 00000000..77cab1f1
--- /dev/null
+++ b/libtests/qtest/aes/test-vector.cipher
@@ -0,0 +1 @@
+iÄàØj{0ØÍ·€p´ÅZ•Odòäènžî‚ÒhH™ \ No newline at end of file
diff --git a/libtests/qtest/aes/test-vector.clear b/libtests/qtest/aes/test-vector.clear
new file mode 100644
index 00000000..2fdaa8e3
--- /dev/null
+++ b/libtests/qtest/aes/test-vector.clear
Binary files differ