diff options
author | Dmitry Belyavskiy <beldmit@gmail.com> | 2019-11-10 04:30:14 +0300 |
---|---|---|
committer | Dmitry Belyavskiy <beldmit@users.noreply.github.com> | 2020-01-12 00:20:37 +0300 |
commit | 3b8ddfe2f303b8931842e52bdb5c07c97042f651 (patch) | |
tree | bfebf3f9306a4064f35a2510100623d8577e1dfb /tcl_tests/hwkeys.tcl | |
parent | e09d5a86fe1cb876b3c7cf5eb0d890f557b466d0 (diff) | |
download | gost-engine-3b8ddfe2f303b8931842e52bdb5c07c97042f651.zip gost-engine-3b8ddfe2f303b8931842e52bdb5c07c97042f651.tar.gz gost-engine-3b8ddfe2f303b8931842e52bdb5c07c97042f651.tar.bz2 |
tcl_tests: Add TCL tests files
All source files are converted from cp1251 to utf-8.
Diffstat (limited to 'tcl_tests/hwkeys.tcl')
-rw-r--r-- | tcl_tests/hwkeys.tcl | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/tcl_tests/hwkeys.tcl b/tcl_tests/hwkeys.tcl new file mode 100644 index 0000000..8c86a82 --- /dev/null +++ b/tcl_tests/hwkeys.tcl @@ -0,0 +1,229 @@ +# -*- coding: cp1251 -*- +package require testlib + +start_tests "Работа с аппаратными носителями" + +if [info exists ::env(BASE_OPENSSL_CONF)] { + set openssl_cnf [myfile openssl.cnf] + set bf [open $::env(BASE_OPENSSL_CONF) r] + set f [open $openssl_cnf w] + set engines {} + set in_engines 0 + while {[gets $bf line] >= 0} { + puts $f $line + if {[regexp {^\[engine_section\]} $line]} { + puts $f "ce_filecnt_keys = cefk_section" + } + } + close $bf + if {$tcl_platform(platform) eq "windows"} { + set lib_prefix "" + set lib_suffix ".dll" + } else { + set lib_prefix "lib" + set lib_suffix ".so" + } + puts $f "\[cefk_section\] +dynamic_path = \$ENV::TEST_ENGINE_DIR/${lib_prefix}ce_filecnt_keys$lib_suffix +engine_id = ce_filecnt_keys +default_algorithms = ALL +\[req\] +prompt=no +distinguished_name = req_dn +\[ req_dn \] +OU=OpenSSL Team +L=Moscow +CN=Dummy user +emailAddress=openssl@cryptocom.ru +O=Cryptocom +C=RU" + close $f + file copy [file dirname $env(BASE_OPENSSL_CONF)]/cryptocom.lic [file dirname $openssl_cnf]/cryptocom.lic + set ::env(OPENSSL_CONF) $openssl_cnf + puts [logchannel] "OPENSSL_CONF=$::env(OPENSSL_CONF)" + set ::env(TEST_ENGINE_DIR) [regsub {(/[^/]+)$} $::env(ENGINE_DIR) {/t\1}] + puts [logchannel] "TEST_ENGINE_DIR=$::env(TEST_ENGINE_DIR)" +} + +set cnt_pln_file [myfile cnt_pln] +set cnt_pln_dot_file [myfile cnt.pln.S] +set cnt_pln FILECNT=$cnt_pln_file +set cnt_enc_file [myfile cnt_enc] +set cnt_enc FILECNT=$cnt_enc_file +file copy -force ../cnt.pln $cnt_pln_file +file copy -force ../cnt.pln $cnt_pln_dot_file +file copy -force ../cnt.pln default_file_container +file copy -force ../cnt.enc $cnt_enc_file +set cntname "test keys" + +file delete $cnt_enc_file.cmd $cnt_pln_file.cmd +eval [exec enums2tcl] + +foreach K {S X} { + set cert$K [myfile cert$K.pem] + set pubk$K [myfile pubk$K.pem] + upvar 0 cert$K cert pubk$K pubk + + test -title "$K: сертификат и его открытый ключ" -id cert$K { + run openssl req -new -x509 -key $cnt_pln.$K -keyform ENGINE -engine cryptocom -out $cert + run openssl x509 -pubkey -noout -in $cert + file rename _stdout $pubk + } + + test -title "$K: Подписываем файл закрытым ключом" -id sign$K -dep cert$K { + run openssl dgst -md_gost94 -sign $cnt_pln.$K -keyform ENGINE -engine cryptocom -out $cert.sig $cert + } + + test -title "$K: Проверяем подпись на закрытом ключе" -dep sign$K { + run openssl dgst -md_gost94 -prverify $cnt_pln.$K -keyform ENGINE -engine cryptocom -signature $cert.sig $cert + } + + test -title "$K: Проверяем подпись на открытом ключе" -dep sign$K { + run openssl dgst -md_gost94 -verify $pubk -signature $cert.sig $cert + } + + test -title "$K: Подписываем файл закрытым ключом, контейнер с именем" -id sign$K -dep cert$K { + run openssl dgst -md_gost94 -sign $cnt_pln:$cntname.$K -keyform ENGINE -engine cryptocom -out $cert.sig $cert + } + + test -title "$K: Подписываем файл запароленным закрытым ключом" -dep cert$K { + run openssl dgst -md_gost94 -sign $cnt_enc.$K -keyform ENGINE -engine cryptocom -out $cert.sig -passin pass:abcdefghijklmnopqrstuvwxyz1234567890 $cert + run openssl dgst -md_gost94 -verify $pubk -signature $cert.sig $cert + } + +} + +test -title "Читаем по полной спецификации" { + run hwkeys -load $cnt_pln:$cntname.S +} + +test -title "Читаем без имени контейнера" { + run hwkeys -load $cnt_pln.S +} + +test -title "Читаем без имени носителя" { + run hwkeys -load FILECNT:$cntname.S +} + +test -title "Читаем без имен контейнера и носителя" { + run hwkeys -load FILECNT.S +} + +test -title "Читаем с именем носителя, содержащим .S" { + run hwkeys -load FILECNT=$cnt_pln_dot_file.S +} + +end_tests + +proc write_cmd_file {filename args} { + set f [open filename w] + fconfigure $f -encoding binary + puts -nonewline $f [binary format c* $args] + close $f +} + +test -title "Читаем, нет носителя, нет коллбэка" { + write_cmd_file $cnt_pln_file.cmd $cc_rc_no_contact + run -fail -stderr {regex {cc_rds_read_key.*==cc_rc_no_contact.*load_key failed}} \ + hwkeys -no-cb -load $cnt_pln.S +} + +test -title "Читаем, нет носителя, есть коллбэк, носитель дали" + +test -title "Читаем, нет носителя, есть коллбэк, запрос отменили" + +test -title "Читаем, есть носитель, нет контейнера" + +test -title "Читаем, не тот контейнер, нет коллбэка" + +test -title "Читаем, не тот контейнер, есть коллбэк, носитель поменяли, опять не тот, еще раз поменяли, теперь тот" + +test -title "Читаем, не тот контейнер, есть коллбэк, запрос отменили" + +test -title "Читаем, нет этого ключа (другой есть)" + +test -title "Читаем, ошибка чтения, нет коллбэка" + +test -title "Читаем, ошибка чтения, устранена" + +test -title "Читаем, ошибка чтения, таймаут" + +test -title "Читаем, ошибка чтения, отмена" + +test -title "Читаем, не сошлась CRC ключа" + +test -title "Читаем парольный, даем пароль" + +test -title "Читаем парольный, даем пароль со второй попытки" + +test -title "Читаем парольный, ошибка возврата пароля" + +test -title "Читаем парольный, отмена" + +test -title "Пишем в свежий контейнер" + +test -title "Проверяем подписью, что это - тот же самый ключ" + +test -title "Пишем в тот же контейнер второй ключ зашифрованным" + +test -title "Проверяем подписью, что оно" + +test -title "Пишем безымянный" + +test -title "Пишем зашифрованный, пароли совпадают со второй попытки" + +test -title "Пишем зашифрованный, ошибка получения пароля" + +test -title "Пишем зашифрованный, отмена" + +test -title "Ошибка записи, нет коллбэка" + +test -title "Ошибка записи, вернули носитель" + +test -title "Ошибка записи, таймаут" + +test -title "Ошибка записи, отмена" + +test -title "Нет носителя, нет коллбэка" + +test -title "Нет носителя, дали" + +test -title "Нет носителя, таймаут" + +test -title "Нет носителя, отмена" + +test -title "Не тот контейнер, нет перезаписи, нет коллбэка" + +test -title "Не тот контейнер, нет перезаписи, сменили носитель" + +test -title "Не тот контейнер, нет перезаписи, таймаут" + +test -title "Не тот контейнер, нет перезаписи, отмена" + +test -title "Не тот контейнер, есть перезапись" + +test -title "Ключ есть, перезапись запрещена" + +test -title "Ключ есть, перезапись разрешена" + +test -title "Затираем" + +test -title "Затираем, нет носителя, нет коллбэка" + +test -title "Затираем, нет носителя, дали носитель" + +test -title "Затираем, нет носителя, таймаут" + +test -title "Затираем, нет носителя, отмена" + +test -title "Затираем, не тот контейнер, нет коллбэка" + +test -title "Затираем, не тот контейнер, сменили носитель" + +test -title "Затираем, не тот контейнер, таймаут" + +test -title "Затираем, не тот контейнер, отмена" + +test -title "Затираем контейнер без имени, даем без имени" + +test -title "Затираем контейнер без имени, даем с именем" |