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