]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - tcl_tests/hwkeys.tcl
8c86a82201b7cb3f49fa78d600529199fe4ab945
[openssl-gost/engine.git] / tcl_tests / hwkeys.tcl
1 # -*- coding: cp1251 -*-
2 package require testlib
3
4 start_tests "Работа с аппаратными носителями"
5
6 if [info exists ::env(BASE_OPENSSL_CONF)] {
7         set openssl_cnf [myfile openssl.cnf]
8         set bf [open $::env(BASE_OPENSSL_CONF) r]
9         set f [open $openssl_cnf w]
10         set engines {}
11         set in_engines 0
12         while {[gets $bf line] >= 0} {
13                 puts $f $line
14                 if {[regexp {^\[engine_section\]} $line]} {
15                         puts $f "ce_filecnt_keys = cefk_section"
16                 }
17         }
18         close $bf
19         if {$tcl_platform(platform) eq "windows"} {
20                 set lib_prefix  ""
21                 set lib_suffix ".dll"
22         } else {
23                 set lib_prefix "lib"
24                 set lib_suffix ".so"
25         }       
26         puts $f "\[cefk_section\]       
27 dynamic_path = \$ENV::TEST_ENGINE_DIR/${lib_prefix}ce_filecnt_keys$lib_suffix
28 engine_id = ce_filecnt_keys
29 default_algorithms = ALL
30 \[req\]
31 prompt=no
32 distinguished_name = req_dn
33 \[ req_dn \]
34 OU=OpenSSL Team
35 L=Moscow
36 CN=Dummy user
37 emailAddress=openssl@cryptocom.ru
38 O=Cryptocom
39 C=RU"
40         close $f
41         file copy  [file dirname $env(BASE_OPENSSL_CONF)]/cryptocom.lic [file dirname $openssl_cnf]/cryptocom.lic
42         set ::env(OPENSSL_CONF) $openssl_cnf
43         puts [logchannel] "OPENSSL_CONF=$::env(OPENSSL_CONF)"
44         set ::env(TEST_ENGINE_DIR) [regsub {(/[^/]+)$} $::env(ENGINE_DIR) {/t\1}]
45         puts [logchannel] "TEST_ENGINE_DIR=$::env(TEST_ENGINE_DIR)"
46 }
47
48 set cnt_pln_file [myfile cnt_pln]
49 set cnt_pln_dot_file [myfile cnt.pln.S]
50 set cnt_pln FILECNT=$cnt_pln_file
51 set cnt_enc_file [myfile cnt_enc]
52 set cnt_enc FILECNT=$cnt_enc_file
53 file copy -force ../cnt.pln $cnt_pln_file
54 file copy -force ../cnt.pln $cnt_pln_dot_file
55 file copy -force ../cnt.pln default_file_container
56 file copy -force ../cnt.enc $cnt_enc_file
57 set cntname "test keys"
58
59 file delete $cnt_enc_file.cmd $cnt_pln_file.cmd
60 eval [exec enums2tcl]
61
62 foreach K {S X} {
63         set cert$K [myfile cert$K.pem]
64         set pubk$K [myfile pubk$K.pem]
65         upvar 0 cert$K cert pubk$K pubk
66
67         test -title "$K: сертификат и его открытый ключ" -id cert$K {
68                 run openssl req -new -x509 -key $cnt_pln.$K -keyform ENGINE -engine cryptocom -out $cert
69                 run openssl x509 -pubkey -noout -in $cert
70                 file rename _stdout $pubk
71         }
72
73         test -title "$K: Подписываем файл закрытым ключом" -id sign$K -dep cert$K {
74                 run openssl dgst -md_gost94 -sign $cnt_pln.$K -keyform ENGINE -engine cryptocom -out $cert.sig $cert
75         }
76
77         test -title "$K: Проверяем подпись на закрытом ключе" -dep sign$K {
78                 run openssl dgst -md_gost94 -prverify $cnt_pln.$K -keyform ENGINE -engine cryptocom -signature $cert.sig $cert
79         }
80
81         test -title "$K: Проверяем подпись на открытом ключе" -dep sign$K {
82                 run openssl dgst -md_gost94 -verify $pubk -signature $cert.sig $cert
83         }
84
85         test -title "$K: Подписываем файл закрытым ключом, контейнер с именем" -id sign$K -dep cert$K {
86                 run openssl dgst -md_gost94 -sign $cnt_pln:$cntname.$K -keyform ENGINE -engine cryptocom -out $cert.sig $cert
87         }
88
89         test -title "$K: Подписываем файл запароленным закрытым ключом" -dep cert$K {
90                 run openssl dgst -md_gost94 -sign $cnt_enc.$K -keyform ENGINE -engine cryptocom -out $cert.sig -passin pass:abcdefghijklmnopqrstuvwxyz1234567890 $cert
91                 run openssl dgst -md_gost94 -verify $pubk -signature $cert.sig $cert
92         }
93
94 }
95
96 test -title "Читаем по полной спецификации" {
97         run hwkeys -load $cnt_pln:$cntname.S
98 }
99
100 test -title "Читаем без имени контейнера" {
101         run hwkeys -load $cnt_pln.S
102 }
103
104 test -title "Читаем без имени носителя"  {
105         run hwkeys -load FILECNT:$cntname.S
106 }
107
108 test -title "Читаем без имен контейнера и носителя" {
109         run hwkeys -load FILECNT.S
110 }
111
112 test -title "Читаем с именем носителя, содержащим .S" {
113         run hwkeys -load FILECNT=$cnt_pln_dot_file.S
114 }
115
116 end_tests
117
118 proc write_cmd_file {filename args} {
119         set f [open filename w]
120         fconfigure $f -encoding binary
121         puts -nonewline $f [binary format c* $args]
122         close $f
123 }
124
125 test -title "Читаем, нет носителя, нет коллбэка" {
126         write_cmd_file $cnt_pln_file.cmd $cc_rc_no_contact
127         run -fail -stderr {regex {cc_rds_read_key.*==cc_rc_no_contact.*load_key failed}} \
128                 hwkeys -no-cb -load $cnt_pln.S
129 }
130
131 test -title "Читаем, нет носителя, есть коллбэк, носитель дали"
132
133 test -title "Читаем, нет носителя, есть коллбэк, запрос отменили"
134
135 test -title "Читаем, есть носитель, нет контейнера"
136
137 test -title "Читаем, не тот контейнер, нет коллбэка"
138
139 test -title "Читаем, не тот контейнер, есть коллбэк, носитель поменяли, опять не тот, еще раз поменяли, теперь тот"
140
141 test -title "Читаем, не тот контейнер, есть коллбэк, запрос отменили"
142
143 test -title "Читаем, нет этого ключа (другой есть)"
144
145 test -title "Читаем, ошибка чтения, нет коллбэка"
146
147 test -title "Читаем, ошибка чтения, устранена"
148
149 test -title "Читаем, ошибка чтения, таймаут"
150
151 test -title "Читаем, ошибка чтения, отмена"
152
153 test -title "Читаем, не сошлась CRC ключа"
154
155 test -title "Читаем парольный, даем пароль"
156
157 test -title "Читаем парольный, даем пароль со второй попытки"
158
159 test -title "Читаем парольный, ошибка возврата пароля"
160
161 test -title "Читаем парольный, отмена"
162
163 test -title "Пишем в свежий контейнер"
164
165 test -title "Проверяем подписью, что это - тот же самый ключ"
166
167 test -title "Пишем в тот же контейнер второй ключ зашифрованным"
168
169 test -title "Проверяем подписью, что оно"
170
171 test -title "Пишем безымянный"
172
173 test -title "Пишем зашифрованный, пароли совпадают со второй попытки"
174
175 test -title "Пишем зашифрованный, ошибка получения пароля"
176
177 test -title "Пишем зашифрованный, отмена"
178
179 test -title "Ошибка записи, нет коллбэка"
180
181 test -title "Ошибка записи, вернули носитель"
182
183 test -title "Ошибка записи, таймаут"
184
185 test -title "Ошибка записи, отмена"
186
187 test -title "Нет носителя, нет коллбэка"
188
189 test -title "Нет носителя, дали"
190
191 test -title "Нет носителя, таймаут"
192
193 test -title "Нет носителя, отмена"
194
195 test -title "Не тот контейнер, нет перезаписи, нет коллбэка"
196
197 test -title "Не тот контейнер, нет перезаписи, сменили носитель"
198
199 test -title "Не тот контейнер, нет перезаписи, таймаут"
200
201 test -title "Не тот контейнер, нет перезаписи, отмена"
202
203 test -title "Не тот контейнер, есть перезапись"
204
205 test -title "Ключ есть, перезапись запрещена"
206
207 test -title "Ключ есть, перезапись разрешена"
208
209 test -title "Затираем"
210
211 test -title "Затираем, нет носителя, нет коллбэка"
212
213 test -title "Затираем, нет носителя, дали носитель"
214
215 test -title "Затираем, нет носителя, таймаут"
216
217 test -title "Затираем, нет носителя, отмена"
218
219 test -title "Затираем, не тот контейнер, нет коллбэка"
220
221 test -title "Затираем, не тот контейнер, сменили носитель"
222
223 test -title "Затираем, не тот контейнер, таймаут"
224
225 test -title "Затираем, не тот контейнер, отмена"
226
227 test -title "Затираем контейнер без имени, даем без имени"
228
229 test -title "Затираем контейнер без имени, даем с именем"