aboutsummaryrefslogtreecommitdiff
path: root/tcl_tests/hwkeys.tcl
diff options
context:
space:
mode:
authorDmitry Belyavskiy <beldmit@gmail.com>2019-11-10 04:30:14 +0300
committerDmitry Belyavskiy <beldmit@users.noreply.github.com>2020-01-12 00:20:37 +0300
commit3b8ddfe2f303b8931842e52bdb5c07c97042f651 (patch)
treebfebf3f9306a4064f35a2510100623d8577e1dfb /tcl_tests/hwkeys.tcl
parente09d5a86fe1cb876b3c7cf5eb0d890f557b466d0 (diff)
downloadgost-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.tcl229
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 "Затираем контейнер без имени, даем с именем"