Подпись CMS сообщения средствами библиотеки pki-core.

Здравствуйте. Подскажите, пожалуйста.

Необходимо подписать CMS сообщение без предварительного сохранения сертификата в устройство Рутокен ЭЦП 2.0 (без импорта). Соответствующий секретный ключ в устройстве есть. То есть необходимо подписать сообщение на основе экземпляра класса ExternalCert. Есть ли возможность сделать подобное средствами библиотеки pki-core? Судя по описанию из "pki-core-cpp.h", функция
cms::SignedData rutoken::pkicore::cms::sign(const cms::Data &data, const SignParams &signParams, bool detached = false)
работает только с сертификатами Pkcs11Cert, которые хранятся в токене. Дело в том, что сертификаты хранятся в нашей системе централизованно и передаются в библиотеку при необходимости вместе с другими параметрами (например, crl и корневой сертификат), не хотелось бы дублировать их на устройстве.

Или, может быть, есть возможность преобразовать подпись (PKCS7) в CMS?

Re: Подпись CMS сообщения средствами библиотеки pki-core.

Добрый день, Nikolai

Функция подписи в pkicore действительно использует сертификат с токена и с внешними сертификатами не работает.
Cтандарт PKCS#7 как раз и описывает CMS. Наверное Вы имели ввиду сырую подпись. Вы действительно можете выполнить сырую подпись только с использованием ключа, а затем обернуть ее в CMS самостоятельно. Но для этого Вам придется использовать PKCS#11 и скорее всего openssl.
Если Вам не хочется возится с другими интерфейсами, и операция подписи в Вашей системе происходит не очень часто, то Вы можете импортировать сертификат в токен перед подписью, и удалить после подписи.

Re: Подпись CMS сообщения средствами библиотеки pki-core.

Владимир Салыкин пишет:

Добрый день, Nikolai

Функция подписи в pkicore действительно использует сертификат с токена и с внешними сертификатами не работает.
Cтандарт PKCS#7 как раз и описывает CMS. Наверное Вы имели ввиду сырую подпись. Вы действительно можете выполнить сырую подпись только с использованием ключа, а затем обернуть ее в CMS самостоятельно. Но для этого Вам придется использовать PKCS#11 и скорее всего openssl.
Если Вам не хочется возится с другими интерфейсами, и операция подписи в Вашей системе происходит не очень часто, то Вы можете импортировать сертификат в токен перед подписью, и удалить после подписи.

Добрый день, Владимир! Благодарю за оперативный ответ. Варианты есть. Что-нибудь придумаем :)