Тестируя облачный криптографический токен PKCS#11 на различных платформах, меня не покидала мысль о некой несправедливости: почему утилиты конфигурирования токенов PKCS#11 на платформе MS Windows имеют графический интерфейс, а для других платформ его нет.
Выходом могло бы быть написание на языке C/C++ GUI (графической оболочки) для этих утилиты, например, с использованием библиотеки Qt. Но тут в памяти всплыло, что есть скриптовый язык высокого яровня Tcl (Tool Command Language), который в связке с графической библиотекой Tk (Tool Kit) и позволяет быстро создавать графические интерфейсы для консольных программ или утилит командной строки.
Впервые я познакомился с пакетом Tk/Tcl в далеком 1997 году, когда планировалось на нем написать графический интерфейс для системы контроля доступа (СКД). Тогда графические возможности пакета произвели сильное впечатление и, в частности, tetris.
Одной из причин, по которой отказались от использования Tk/Tcl, было отсутствие для него в то время конструктора (дизайнера) аналогичного сегодняшнему, скажем, QT-designer. Освежив в памяти возможности Tk/Tcl, а нас интересовало, помимо графических возможностей, организация взаимодействия с утилитами командной строки, и убедившись, что мы стоим на правильном пути, мы принялись за поиск конструктора. После проведенного анализа имеющихся конструкторов выбор пал на дизайнер tkBuilder и Visual Tcl.
Что касается утилиты tkBuilder, то здесь не обошлось без ложки дегтя. Первое, она поддерживает только tcl/tk версии 8.4.Ну и вторая ложка дегтя классическая. Дизайнер tkBuilder отказывается работать с русскими буквами. Подчеркиваю, это касается только дизайнера и не касается Tcl/Tk, для которого русский язык как дом родной.
Что касается второго конструктора, то он оказался лишенным этих недостатков. Текущая поддерживаемая версия это версия 8.6:
bash-4.3$ cd ../vtcl.vtcl-8.6-master
bash-4.3$ ./configure
Using /bin/wish8.6
bash-4.3$
И никаких проблем с «великим, могучим, правдивым и свободным русским языком!» (И.С. Тургенев).
После предварительного ознакомления было решено использовать его в деле, а именно разработать графическую оболочку для утилиты командной строки ls11cloud_config, с помощью которой можно получить доступ к облачному криптографическому токену PKCS#11:
bash-4.3$ /usr/local/bin64/ls11cloud_config
LS11CLOUD User Utility
usage: /usr/local/bin64/ls11cloud_config <command> [-p <password>] [-n <new password>]
Commands:
register <host> <port> <id> - register new user on the server
duplicate <host> <port> <id> - duplicate user account on other computer
change_pswd - change SESPAKE authentication password
status - display current configuration data
log - display server log file
recreate - re-create token to initial empty state
unregister - remove all user files from the server
NB: Don't use non-latin letters to avoid encoding problems!
Copyright(C) 2017
bash-4.3$
Первый запуск конструктора не вдохновил, уж больно много окон появилось на рабочем столе.
Но осмотревшись оказалось что пару окон (новостную ленту – Visual Tcl News и знаете ли вы это – Did you know)можно закрывать без всякого ущерба для работы. И оказывается, что окон уже и не так много и, при необходимости, их можно периодически скрывать.
Приятной неожиданностью стало наличие своего мольберта] для каждого виджета класса toplevel.
В нашем проекте потребовалось три виджета класса toplevel и, соответственно, в нашем распоряжении было три мольберта:
1. Виджет GUICloudConfig, основное окно с функциями утилиты ls11cloudconfig (см. выше);
2. Виджет Password, который так или иначе задействован во всех функциях утилиты для ввода пароля для доступа к облаку токена;
3. Виджет CloudToken, который задействуется в функциях Регистрации и Дублирования облачного криптографического токена.
Проект в понимании Visual Tcl сохраняется как файл Tcl/Tk (*.tcl) и его в любой момент можно выполнять самостоятельно без дополнительных преобразований. Обратное не верно, далеко не каждый файл Tcl/Tk конструктор Visual Tcl будет рассматривать как свой проект.
На еще одну очень полезную вещь навел проект Visual Tcl – возможность сохранения проекта в бинарном коде. Для этой цели задействуется утилита freewrap, которая превращает скрипты Tcl / Tk в однофайловые исполняемые программы. Так и мы оба скрипта, реализующих графический интерфейс для утилит p11conf и ls11cloudconfig, преобразовали в исполняемые программы:
bash-4.3$ ls
GUITKP11Conf.tcl LS11CLOUD_CONFIG.tcl
bash-4.3$
bash-4.3$ freewrap GUITKP11Conf.tcl
bash-4.3$ freewrap LS11CLOUD_CONFIG.tcl
bash-4.3$ ls
GUITKP11Conf LS11CLOUD_CONFIG
GUITKP11Conf.tcl LS11CLOUD_CONFIG.tcl
bash-4.3$
Теперь осталось только все (проекты, tcl-скрипты и исполняемые программы) упаковать в архив и выложить для учебных целей. Скачать архив можно здесь.