...
Для создания подписанного CMS сообщения необходимо использовать функцию rutoken::pkicore::cms::sign
. На данный момент поддерживается подпись объектов с типом Data Content, который может содержать произвольные данные. Параметры операции подписи задаются через класс rutoken::pkicore::cms::SignParams
. Используя метод rutoken::pkicore::cms::SignedData::toBer
, можно получить сообщение в формате BER.
Статический метод rutoken::pkicore::cms::SignedData::parse
позволяет получить объект класса SignedData из сообщения в формате BER. Подпись сообщения можно проверить, используя метод rutoken::pkicore::cms::SignedData::verify
. Параметры проверки задаются классом rutoken::pkicore::cms::VerifyParams
.
Code Block |
---|
using namespace rutoken::pkicore; std::vector<unsigned char> data(10, 'a'); // В SignParams необходимо передать пользовательский сертификат, для которого на токене содержится соответствующая ключевая пара. auto signedData = cms::sign(cms::Data(data.begin(), data.end()), cms::SignParams(cert)); // В VerifyParams необходимо передать токен, на котором будет производиться проверка подписи. auto result = signedData.verify(cms::VerifyParams(device)); assert(result == cms::VerifyResult::success); |
Шифрование и расшифрование в формате CMS
Для создания шифрованного CMS сообщения необходимо использовать функцию rutoken::pkicore::cms::envelop
. На данный момент поддерживается шифрование объектов с типом Data Content, который может содержать произвольные данные. Параметры операции шифрования задаются через класс rutoken::pkicore::cms::EnvelopParams
. Используя метод rutoken::pkicore::cms::EnvelopedData::toBer
, можно получить сообщение в формате BER.
Статический метод rutoken::pkicore::cms::EnvelopedData::parse
позволяет получить объект класса EnvelopedData из сообщения в формате BER. Расшифровать сообщение можно, используя метод rutoken::pkicore::cms::EnvelopedData::decrypt
. Параметры расшифрования задаются классом rutoken::pkicore::cms::EnvelopedData::DecryptParams
.
Code Block |
---|
using namespace rutoken::pkicore; std::vector<unsigned char> data(10, 'a'); // В EnvelopParams необходимо передать токен, на котором будет производиться шифрование, а также сертификат получателя сообщения. auto envelopedData = cms::envelop(cms::Data(data.begin(), data.end()), cms::EnvelopParams(device, ExternalCert(pemCert))); // В DecryptParams необходимо передать пользовательский сертификат, для которого на токене содержится соответствующая ключевая пара. auto message = envelopedData.decrypt(cms::EnvelopedData::DecryptParams(userCert)); // На данный момент поддерживается только содержимое типа Data Content. assert(message.contentType() == cms::ContentType::data); // Преобразуем сообщение к действительному типу. auto result = cms::Data::cast(std::move(message)); auto resultData = result.data(); assert(resultData.size() == data.size()); assert(std::equal(data.begin(), data.end(), resultData.begin())); |