![](https://habrastorage.org/webt/7r/mo/fw/7rmofwangbuwxcas42acik2b-fs.png)
При этом никакой переработки пакета не потребовалось. Все что было сделано, это был добавлены в проект скрипт для сборки библиотеки пакета, написанной на языке Си, под Android и сам дистрибутив библиотеки. В этот же проект было решено добавить и библиотеки программного ls11sw2016 и облачного ls11cloud токенов для различных платформ.
Далее все просто. Добавляем на второе окно кнопки выбора рабочего токена и получаем:
- программный токен ls11sw2016;
- облачный токен ls11cloud;
- другой токен PKCS11#11.
![](https://habrastorage.org/webt/s0/jq/mr/s0jqmregvxkcgvkwvsx7rmie2j0.png)
По умолчанию подключается программный токен. Если ранее он не создавался, то будет предложено проинициализировать его. Напомним, что инициализация токена состоит в назначении метки и установлении пользовательского PIN-кода:
![](https://habrastorage.org/webt/1s/qy/gf/1sqygfp1rjx-iavh-sq4iagtuso.jpeg)
Отметим, что программный токен разработан с соответствии с рекомендациями PKCS#11 v.2.40 и ТК-26. Для получения полной информации о токене, включая поддерживаемые криптографические механизмы, достаточно нажать на кновку «О токене и его криптографии» в основном меню («Функционал»). Сегодня ни один аппаратный токен с поддержкой российской криптографии не имеет такого функционала:
![](https://habrastorage.org/webt/_f/uc/mv/_fucmvnsj4zovjne-4zispv0r1c.jpeg)
Возникает вопрос:- как установить личный сертификат на токен. Есть два варианта. Первый вариант это импортировать сам сертификат и его ключевую пару через контейнер PKCS#12 (кнопка «Работаем с PKCS12/PFX»):
![](https://habrastorage.org/webt/zk/zs/vu/zkzsvutfyqbhaeofxwqolgn5eci.jpeg)
Второй вариант предполагает создания запроса (PKCS#10) на сертификат, Этот вариант (функция «Запрос на сертификат») предусматривает генерацию ключевой пары непосредственно на токене:
![](https://habrastorage.org/webt/js/qd/ut/jsqdutlxcvqcytzwg0m2ybq8l98.jpeg)
Теперь можно сохранить запрос на флэшки и вместе с документами идти в удостоверяюший центр за сертификатом. Если вы будете использовать сертификат в тестовых целях или внутрикорпоративно, то для выпуска сертификата можно воспользоваться и утилитой CAFL63. Полученный сертификат импортируется на токен на вкладке «Просмотр запроса/Сертификата»:
![](https://habrastorage.org/webt/ft/tf/sq/fttfsqyd9ehk_p6e3okapyei3bq.jpeg)
Теперь можно подписывать документы сертификатами, хранящимися на токене, используя вкладку «Подписать документ».
В следующей статье мы расскажем как подключиться к облачному токену. И остается пока открытым вопрос с переносом на мобильную платформу функций генерации сертификатов. Есть ли в этом необходимость?
Обновленную версию утилиты cryptoarmpkcs-A для платформы Android можно скачать здесь:
P.S. Сохранение журнала
Для сборки пакета используется утилита bones из состава AndroWish SDK. После успешной сборки пакета появляется кнопка «Install & run», после нажатия которой открывается окно журнала, в котором отображаются выходные данные adb logcat (средства ведения журнала Android Debug Bridge). Недостатком этого экрана является то, что в нем сложно найти сообщение об ошибке, особенно с включенным флажком «V» (verbose). Поэтому была добавлена кнопка «Save», которая сохраняет журнал в файле /tmp/logBone.txt (речь идет о Linux):
![](https://habrastorage.org/webt/gh/lt/mz/ghltmzkds3yf44as2-m28lbeulo.png)
С появлением этой кнопки процесс отладки приложения значительно упростился.
Для добавления кнопки достаточно добавить в файл bones после строки 2591 следущий код:
ttk::button $l.frame.clear -text "Clear" -width 6 \
-command [list adb_logcat_clear $l.text]
#Добавленный код
ttk::button $l.frame.save -text "Save" -width 6 \
-command [list adb_logcat_save $l.text]
ttk::button $l.frame.run -text "Run" -width 6 \
-command [list adb_logcat_run $l]
Команда сохранения adb_logcat_save имеет вид:
proc adb_logcat_save {text} {
set tt [$text get 1.0 end]
set file "/tmp/logBone.txt"
file delete -force $file
#Собственно запись в файл
set fd [open $file w]
chan configure $fd -translation binary
puts -nonewline $fd $tt
close $fd
}