Commit aaeb71093d4ba3eafee0efece3b8bad7c18f0f00

Authored by Jay Berkenbilt
1 parent e25910b5

test aes

git-svn-id: svn+q:///qpdf/trunk@813 71b93d88-0707-0410-a8cf-f5a4172ac649
libtests/aes.cc
@@ -8,22 +8,33 @@ @@ -8,22 +8,33 @@
8 8
9 static void usage() 9 static void usage()
10 { 10 {
11 - std::cerr << "Usage: aes { -encrypt | -decrypt }" 11 + std::cerr << "Usage: aes [+-]cbc { -encrypt | -decrypt }"
12 << " hex-key infile outfile" << std::endl; 12 << " hex-key infile outfile" << std::endl;
13 exit(2); 13 exit(2);
14 } 14 }
15 15
16 int main(int argc, char* argv[]) 16 int main(int argc, char* argv[])
17 { 17 {
18 - if (argc != 5) 18 + if (argc != 6)
19 { 19 {
20 usage(); 20 usage();
21 } 21 }
22 22
23 - char* action = argv[1];  
24 - char* hexkey = argv[2];  
25 - char* infilename = argv[3];  
26 - char* outfilename = argv[4]; 23 + char* cbc = argv[1];
  24 + char* action = argv[2];
  25 + char* hexkey = argv[3];
  26 + char* infilename = argv[4];
  27 + char* outfilename = argv[5];
  28 +
  29 + bool cbc_mode = true;
  30 + if (strcmp(cbc, "-cbc") == 0)
  31 + {
  32 + cbc_mode = false;
  33 + }
  34 + else if (strcmp(cbc, "+cbc") != 0)
  35 + {
  36 + usage();
  37 + }
27 38
28 bool encrypt = true; 39 bool encrypt = true;
29 if (strcmp(action, "-decrypt") == 0) 40 if (strcmp(action, "-decrypt") == 0)
@@ -72,6 +83,10 @@ int main(int argc, char* argv[]) @@ -72,6 +83,10 @@ int main(int argc, char* argv[])
72 83
73 Pl_StdioFile* out = new Pl_StdioFile("stdout", outfile); 84 Pl_StdioFile* out = new Pl_StdioFile("stdout", outfile);
74 Pl_AES_PDF* aes = new Pl_AES_PDF("aes_128_cbc", out, encrypt, key); 85 Pl_AES_PDF* aes = new Pl_AES_PDF("aes_128_cbc", out, encrypt, key);
  86 + if (! cbc_mode)
  87 + {
  88 + aes->disableCBC();
  89 + }
75 90
76 // 16 < buffer size, buffer_size is not a multiple of 8 for testing 91 // 16 < buffer size, buffer_size is not a multiple of 8 for testing
77 unsigned char buf[83]; 92 unsigned char buf[83];
libtests/qtest/aes.test 0 → 100644
  1 +#!/usr/bin/env perl
  2 +require 5.008;
  3 +BEGIN { $^W = 1; }
  4 +use strict;
  5 +use File::stat;
  6 +
  7 +chdir("aes") or die "chdir testdir failed: $!\n";
  8 +
  9 +require TestDriver;
  10 +
  11 +my $td = new TestDriver('AES');
  12 +
  13 +cleanup();
  14 +
  15 +my $key = '000102030405060708090a0b0c0d0e0f';
  16 +$td->runtest("encrypt test vector",
  17 + {$td->COMMAND => "aes -cbc -encrypt $key test-vector.clear tmp1"},
  18 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  19 +$td->runtest("check output",
  20 + {$td->FILE => "tmp1"},
  21 + {$td->FILE => "test-vector.cipher"});
  22 +$td->runtest("decrypt test vector",
  23 + {$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"},
  24 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  25 +$td->runtest("check output",
  26 + {$td->FILE => "tmp2"},
  27 + {$td->FILE => "test-vector.clear"});
  28 +
  29 +$key = '243f6a8885243f6a8885243f6a888524';
  30 +foreach my $d (['data1', 17072], ['data2', 16032])
  31 +{
  32 + my ($file, $size) = @$d;
  33 + $td->runtest("encrypt $file",
  34 + {$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"},
  35 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  36 + # sleep one second so random number will get a different seed
  37 + sleep(1);
  38 + $td->runtest("encrypt $file again",
  39 + {$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"},
  40 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  41 + foreach my $f (qw(tmp1 tmp2))
  42 + {
  43 + $td->runtest("check size",
  44 + {$td->STRING => sprintf("%d\n", stat($f)->size)},
  45 + {$td->STRING => "$size\n"});
  46 + }
  47 + $td->runtest("verify files are different",
  48 + {$td->COMMAND => "cmp tmp1 tmp2"},
  49 + {$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'});
  50 + $td->runtest("decrypt $file",
  51 + {$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"},
  52 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  53 + $td->runtest("decrypt $file again",
  54 + {$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"},
  55 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  56 + $td->runtest("check output",
  57 + {$td->FILE => "tmp3"},
  58 + {$td->FILE => $file});
  59 + $td->runtest("check output",
  60 + {$td->FILE => "tmp4"},
  61 + {$td->FILE => $file});
  62 +}
  63 +
  64 +cleanup();
  65 +
  66 +$td->report(22);
  67 +
  68 +sub cleanup
  69 +{
  70 + system("rm -f tmp?");
  71 +}
libtests/qtest/aes/data1 0 → 100644
No preview for this file type
libtests/qtest/aes/data2 0 → 100644
No preview for this file type
libtests/qtest/aes/test-vector.cipher 0 → 100755
No preview for this file type
libtests/qtest/aes/test-vector.clear 0 → 100644
No preview for this file type