Аrioh, добрый день.
Вот пример подписи файла в формате PKCS7 данными, хранящимися на токене, через OpenSSL.
Дано: наличие openssl, opensc, libengine-pkcs11-openssl, pkcs11-tool и нашей библиотеки; сертификат и закрытый ключ RSA на Рутокен ЭЦП.
Узнаем ID закрытого ключа и сертификата на токене:
$ pkcs11-tool --module=/usr/lib/librtpkcs11ecp.so -O -l
Извлекаем сертификат из токена и сохраняем под именем signer_cert.crt, длинная последовательность цифр -- id сертификата:
$ pkcs11-tool --module /usr/lib/pkcs11-gost/librtpkcs11ecp.so -l -r -y cert -d 35623036663466652d303239372d343962662d393063322d3930653565636636386562645f45 -o signer_cert.crt
Конвертируем сертификат из DER в PEM формат:
$ openssl x509 -in signer_cert.crt -inform der -outform pem -out signer_cert.pem
Запускаем openssl:
Подключаем engine:
OpenSSl> engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/librtpkcs11ecp.so
И, наконец, подписываем файл "1.txt" подписью формата PKCS7 в файл "2", длинная последовательность цифр -- id закрытого ключа
OpenSSl> smime -engine pkcs11 -sign -in 1.txt -out 2 -nodetach -binary -signer signer_cert.pem -inkey 35623036663466652d303239372d343962662d393063322d3930653565636636386562645f45 -keyform engine -outform PEM