С помощью JC-WebClient подписываемые данные сначала подвергаются хэшированию по
ГОСТ Р 34.11-94 с применением параметров
id-GostR3411-94-CryptoProParamSet
согласно
RFC 4357. Затем формируется
электронная подпись по ГОСТ Р 34.10-2001 с параметрами криптографических
преобразований, определяемых значением атрибута CKA_GOSTR3410_PARAMS
открытого ключа. Подписанные данные упаковываются в пакет PKCS#7.
Примечание
При создании ключевого контейнера с помощью JC-WebClient значение
атрибута CKA_GOSTR3410_PARAMS
задаётся первым аргументом функции
createContainer()
.
Для формирования электронной подписи используйте функцию signData()
, если
допускается программное хэширование подписываемых данных, и/или
signDataUsingHardwareHash()
, если необходимо осуществлять хэширование
подписываемых данных аппаратно на электронном ключе.
Пример
// Получить идентификатор сертификата, выбранного в поле выбора сертификата
// web-формы с идентификатором certSelect
var certHandle = $("#certSelect option:selected").val();
// Данные для подписи, вводимые в поле ввода данных
// с идентификатором dataToSign в web-форме
var dataToSign = $('#dataToSign').val();
// Перевести строку в массив байт
dataToSign = $utf8.encode(dataToSign);
// Подписать данные, используя программное хэширование
signedData = JCWebClient().signData(certHandle, dataToSign, false);
С помощью JC-WebClient подписанные данные сначала подвергаются хэшированию
по ГОСТ Р 34.11-94 с применением параметров
id-GostR3411-94-CryptoProParamSet
согласно
RFC 4357. Проверка электронной подписи
осуществляется по ГОСТ Р 34.10-2001 с параметрами криптографических
преобразований, хранящимися вместе с электронной подписью. Для проверки
электронной подписи используйте функцию verifyData()
. Подпись для проверки
передаются в виде PKCS#7 пакета.
Пример
// Получить значение подписи из поля с идентификатором signatureValue web-формы
var signature = $('#signatureValue').val();
// Перевести из base64 в массив байт в формате PKCS#7
signature = Base64.decode(signature);
// Проверить подпись
var res = JCWebClient().verifyData(signature, false, data);