]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - test/03-encrypt.t
Making a gost provider - Refactor the testing foundation
[openssl-gost/engine.git] / test / 03-encrypt.t
1 #!/usr/bin/perl
2 use Test2::V0;
3 skip_all('TODO: add symmetric cipher support in provider')
4     unless $ARGV[0] eq 'engine';
5 plan(48);
6 use Cwd 'abs_path';
7
8 #
9 # If this variable is set, engine would be loaded via configuration
10 # file. Otherwise - via command line
11
12 my $use_config = 1;
13
14 # prepare data for 
15
16 my $key='0123456789abcdef' x 2;
17
18 #
19 # You can redefine engine to use using ENGINE_NAME environment variable
20
21 my $engine=$ENV{'ENGINE_NAME'}||"gost";
22
23 # Reopen STDERR to eliminate extra output
24 open STDERR, ">>","tests.err";
25
26 our $count=0;
27
28 #
29 # parameters -paramset = oid of the parameters
30 # -cleartext - data to encrypt
31 # -ciphertext - expected ciphertext (hex-encoded)
32 # -key - key (hex-encoded)
33 # -iv  - IV (hex-encoded)
34
35 my $F;
36 my $eng_param;
37
38 open $F,">","test.cnf";
39 if (defined($use_config) && $use_config) {
40         $eng_param = "";
41         open $F,">","test.cnf";
42         print $F <<EOCFG
43 openssl_conf = openssl_def
44 [openssl_def]
45 engines = engines
46 [engines]
47 ${engine}=gost_conf
48 [gost_conf]
49 default_algorithms = ALL
50
51 EOCFG
52 } else {
53         $eng_param = "-engine $engine"
54 }
55 close $F;
56 $ENV{'OPENSSL_CONF'}=abs_path('test.cnf');
57         
58 sub crypt_test {
59         my %p = @_;
60         our $count++;
61         open my $f, ">", "test$count.clear";
62         print $f $p{-cleartext};
63         close $f;
64         
65         $ENV{'CRYPT_PARAMS'} = $p{-paramset} if exists $p{-paramset};
66         my $ctext = `openssl enc ${eng_param} -e -$p{-alg} -K $p{-key} -iv $p{-iv} -in test$count.clear`;
67         is($?,0,"$p{-name} - encrypt successful");
68         is(unpack("H*",$ctext),$p{-ciphertext},"$p{-name} - ciphertext expected");
69         open $f, ">", "test$count.enc";
70         print $f $ctext;
71         close $f;
72         my $otext = `openssl enc ${eng_param} -d -$p{-alg} -K $p{-key} -iv $p{-iv} -in test$count.enc`;
73         is($?,0,"$p{-name} - decrypt successful");
74         is($otext,$p{-cleartext},"$p{-name} - decrypted correctly");
75         unlink "test$count.enc";
76         unlink "test$count.clear";
77         delete $ENV{'CRYPT_PARAMS'};
78 }
79
80 $key = '0123456789ABCDEF' x 4;
81 my $iv =  '0000000000000000';
82 my $clear1 = "The quick brown fox jumps over the lazy dog\n";
83
84 crypt_test(-paramset=> "1.2.643.2.2.31.1", -key => $key, -iv => $iv,
85                    -cleartext => $clear1,
86                    -ciphertext => '07f4102c6185c4a09e676e269bfa4bc9c5df6575916b879bd13a893a2285ee6690107cdeef7a315d2eb54bfa', 
87                    -alg => 'gost89',
88                    -name=> 'CFB short text, paramset A');
89
90 crypt_test(-paramset=> "1.2.643.2.2.31.2", -key => $key, -iv => $iv,
91                    -cleartext => $clear1,
92                    -ciphertext => '11465c1c9708033e784fbb5536f2719c38353cb488b01f195c20d4c027022e8300d98bb66c138afbe878c88b', 
93                    -alg => 'gost89',
94                    -name=> 'CFB short text, paramset B');
95
96 crypt_test(-paramset=> "1.2.643.2.2.31.3", -key => $key, -iv => $iv,
97                    -cleartext => $clear1,
98                    -ciphertext => '2f213b390c9b6ceb18de479686d23f4f03c76644a0aab8894b50b71a3bbb3c027ec4c2d569ba0e6a873bd46e', 
99                    -alg => 'gost89',
100                    -name=> 'CFB short text, paramset C');
101
102 crypt_test(-paramset=> "1.2.643.2.2.31.4", -key => $key, -iv => $iv,
103                    -cleartext => $clear1,
104                    -ciphertext => 'e835f59a7fdfd84764efe1e987660327f5d0de187afea72f9cd040983a5e5bbeb4fe1aa5ff85d623ebc4d435', 
105                    -alg => 'gost89',
106                    -name=> 'CFB short text, paramset D');
107
108
109 crypt_test(-paramset=> "1.2.643.2.2.31.1", -key => $key, -iv => $iv,
110                    -cleartext => $clear1,
111                    -ciphertext => 'bcb821452e459f10f92019171e7c3b27b87f24b174306667f67704812c07b70b5e7420f74a9d54feb4897df8', 
112                    -alg => 'gost89-cnt',
113                    -name=> 'CNT short text');
114
115 crypt_test(-paramset=> "1.2.643.2.2.31.2", -key => $key, -iv => $iv,
116                    -cleartext => $clear1,
117                    -ciphertext => 'bcb821452e459f10f92019171e7c3b27b87f24b174306667f67704812c07b70b5e7420f74a9d54feb4897df8', 
118                    -alg => 'gost89-cnt',
119                    -name=> 'CNT short text, paramset param doesnt affect cnt');
120
121                    
122 crypt_test(-paramset=> "1.2.643.2.2.31.1", -key => $key, -iv => $iv,
123                    -cleartext => $clear1,
124                    -ciphertext => 'cf3f5f713b3d10abd0c6f7bafb6aaffe13dfc12ef5c844f84873aeaaf6eb443a9747c9311b86f97ba3cdb5c4',
125                    -alg => 'gost89-cnt-12',
126                    -name=> 'CNT-12 short text');
127
128 crypt_test(-paramset=> "1.2.643.2.2.31.2", -key => $key, -iv => $iv,
129                    -cleartext => $clear1,
130                    -ciphertext => 'cf3f5f713b3d10abd0c6f7bafb6aaffe13dfc12ef5c844f84873aeaaf6eb443a9747c9311b86f97ba3cdb5c4',
131                    -alg => 'gost89-cnt-12',
132                    -name=> 'CNT-12 short text, paramset param doesnt affect cnt');
133
134
135 crypt_test(-paramset=> "1.2.643.2.2.31.1", -key => $key, -iv => $iv,
136                    -cleartext => $clear1,
137                    -ciphertext => '3a3293e75089376572da44966cd1759c29d2f1e5e1c3fa9674909a63026da3dc51a4266bff37fb74a3a07155c9ca8fcf', 
138                    -alg => 'gost89-cbc',
139                    -name=> 'CBC short text, paramset A');
140
141
142 crypt_test(-paramset=> "1.2.643.2.2.31.2", -key => $key, -iv => $iv,
143                    -cleartext => $clear1,
144                    -ciphertext => 'af2a2167b75852378af176ac9950e3c4bffc94d3d4355191707adbb16d6c8e3f3a07868c4702babef18393edfac60a6d', 
145                    -alg => 'gost89-cbc',
146                    -name=> 'CBC short text, paramset B');
147
148 crypt_test(-paramset=> "1.2.643.2.2.31.3", -key => $key, -iv => $iv,
149                    -cleartext => $clear1,
150                    -ciphertext => '987c0fb3d84530467a1973791e0a25e33c5d14591976f8c1573bdb9d056eb7b353f66fef3ffe2e3524583b3997123c8a', 
151                    -alg => 'gost89-cbc',
152                    -name=> 'CBC short text, paramset C');
153
154 crypt_test(-paramset=> "1.2.643.2.2.31.4", -key => $key, -iv => $iv,
155                    -cleartext => $clear1,
156                    -ciphertext => 'e076b09822d4786a2863125d16594d765d8acd0f360e52df42e9d52c8e6c0e6595b5f6bbecb04a22c8ae5f4f87c1523b', 
157                    -alg => 'gost89-cbc',
158                    -name=> 'CBC short text, paramset D');
159
160 unlink "test.cnf";