Пример работы с объектами CAdESCOM.RawSignature и CAdESCOM.HashedData
HTML
<script language="javascript" src="cadesplugin_api.js"></script>
Приведенный пример использует синхронную версию плагина. Также см. пример работы с асинхронными обьектами.
JavaScript
function GetCertificateBySubjectName(certSubjectName) {
var oStore = cadesplugin.CreateObject("CAdESCOM.Store");
oStore.Open(cadesplugin.CAPICOM_CURRENT_USER_STORE, cadesplugin.CAPICOM_MY_STORE,
cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
var oCertificates = oStore.Certificates.Find(
cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
if (oCertificates.Count == 0) {
alert("Certificate not found: " + certSubjectName);
return;
}
var oCertificate = oCertificates.Item(1);
oStore.Close();
return oCertificate;
}
function InitializeHashedData(hashAlg, sHashValue) {
// Создаем объект CAdESCOM.HashedData
var oHashedData = cadesplugin.CreateObject("CAdESCOM.HashedData");
// Инициализируем объект заранее вычисленным хэш-значением
// Алгоритм хэширования нужно указать до того, как будет передано хэш-значение
oHashedData.Algorithm = hashAlg;
oHashedData.SetHashValue(sHashValue);
return oHashedData;
}
function CreateSignature(oCertificate, oHashedData) {
// Создаем объект CAdESCOM.RawSignature
var oRawSignature = cadesplugin.CreateObject("CAdESCOM.RawSignature");
// Вычисляем значение подписи
try {
var sRawSignature = oRawSignature.SignHash(oHashedData, oCertificate);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
return;
}
return sRawSignature;
}
function VerifySignature(oHashedData, oCertificate, sRawSignature) {
// Создаем объект CAdESCOM.RawSignature
var oRawSignature = cadesplugin.CreateObject("CAdESCOM.RawSignature");
// Проверяем подпись
try {
oRawSignature.VerifyHash(oHashedData, oCertificate, sRawSignature);
} catch (err) {
alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
return false;
}
return true;
}
function run() {
var oCertName = document.getElementById("CertName");
var sCertName = oCertName.value; // Здесь следует заполнить SubjectName сертификата
if ("" == sCertName) {
alert("Введите имя сертификата (CN).");
return;
}
// Ищем сертификат для подписи
var oCertificate = GetCertificateBySubjectName(sCertName);
// Предварительно вычисленное хэш-значение в виде строки шестнадцатеричных цифр,
// группами по 2 цифры на байт, с пробелами или без пробелов.
// Например, хэш-значение в таком формате возвращают объекты
// CAPICOM.HashedData и CADESCOM.HashedData.
var sHashValue = "92CD0CB36B10BFB88DEF198F80B7D2E667DBDA064D346405C25EEF77FFE375D7";
// Алгоритм хэширования, при помощи которого было вычислено хэш-значение
// Полный список поддерживаемых алгоритмов указан в перечислении CADESCOM_HASH_ALGORITHM
var hashAlg = cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411; // ГОСТ Р 34.11-94
// Создаем объект CAdESCOM.HashedData
var oHashedData = InitializeHashedData(hashAlg, sHashValue);
// Вычисляем подпись
var sRawSignature = CreateSignature(oCertificate, oHashedData);
document.getElementById("signature").innerHTML = sRawSignature;
var verifyResult = VerifySignature(oHashedData, oCertificate, sRawSignature);
if (verifyResult) {
alert("Signature verified");
}
}