Работа с электронной подписью

Формирование электронной подписи

С помощью 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);