Статус: Новичок
Группы: Участники
Зарегистрирован: 05.05.2023(UTC) Сообщений: 1 
|
Добрый день, при подписании документа , подпись валидная , а при сохранении подписи в отдельный файл, ошибка , неправильное значение контрольной суммы. Код:var CADESCOM_CADES_BES = 1;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
var CADESCOM_BASE64_TO_BINARY = 1;
function SignCreate(certSubjectName, dataInBase64,documentId,allSignCount) {
return new Promise(function (resolve, reject) {
cadesplugin.async_spawn(function* (args) {
var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
var oStoreCerts = yield oStore.Certificates;
var oCertificates = yield oStoreCerts.Find(
CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
var certsCount = yield oCertificates.Count;
if (certsCount === 0) {
err = "Certificate not found: " + certSubjectName;
alert(err);
return args[1](err);
}
var oCertificate = yield oCertificates.Item(1);
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
yield oSigner.propset_Certificate(oCertificate);
yield oSigner.propset_CheckCertificate(true);
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
// Значение свойства ContentEncoding должно быть задано
// до заполнения свойства Content
yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
yield oSignedData.propset_Content(dataInBase64);
var sSignedMessage = "";
try {
sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);
} catch (err) {
e = cadesplugin.getLastError(err);
alert("Failed to create signature. Error: " + e);
return args[1](e);
}
// console.log(sSignedMessage);
console.log(sSignedMessage);
console.log(sSignedMessage.length);
// console.log(allSignCount);
// document.getElementById("SignatureTxtBox").innerHTML = Signature;
ajaxPost(pathToSql,"signature="+sSignedMessage+"&documentId="+documentId,false);
ajaxPost(pathToSql,"documentId="+documentId+"&getCDA="+true,false);
// if (send == '1' || send == 1) {
// alert('Подпись сформирована успешно');
// }
if (allSignCount == 1) {
alert ('Документы успешно подписаны');
let postData = 'shtatId='+ null;
ajaxPost(pathToSql,postData,false,false);
setOrderList();
}
yield oStore.Close();
return args[0](sSignedMessage);
}, resolve, reject);
});
}
function Verify(sSignedMessage, dataInBase64) {
return new Promise(function (resolve, reject) {
cadesplugin.async_spawn(function* (args) {
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
try {
// Значение свойства ContentEncoding должно быть задано
// до заполнения свойства Content
yield oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
yield oSignedData.propset_Content(dataInBase64);
yield oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, true);
}
catch (err) {
var e = cadesplugin.getLastError(err);
alert("Failed to verify signature. Error: " + e);
return args[1](e);
}
return args[0]();
}, resolve, reject);
});
}
let getTextToSign;
getTextToSign = ajaxPost(pathToSql,"documentId="+documentId+"&getCDA="+true,false,true);
txtBoxToSign.textContent = getTextToSign;
console.log(txtBoxToSign.value);
// let textTosign = txtBoxToSign.textContent;
// let getShtatId;
// getShtatId = ajaxPost(pathToSql,"documentId="+documentId+"&getShtat="+true,false,false,true);
// Common_CreateSimpleSign(allSignCount,documentId,"CertListBox");
// Common_SignCadesBES(allSignCount,documentId,"CertListBox");
var oCertName = document.getElementById("subject");
var sCertName = 'Андрей'; // Здесь следует заполнить SubjectName сертификата
console.log(sCertName);
if ("" === sCertName) {
alert("Введите имя сертификата (CN).");
return;
}
// Предварительно закодированные в BASE64 бинарные данные
// В данном случае закодирована строка "Some Data."
var dataInBase64 = Base64.encode(txtBoxToSign.value);
// Подписаны будут исходные бинарные данные (в данном случае - "Some Data.")
// Такая подпись должна проверяться в КриптоАРМ и cryptcp.exe
SignCreate(sCertName, dataInBase64,documentId,allSignCount).then(
function (signedMessage) {
console.log(signedMessage);
Verify(signedMessage, dataInBase64).then(
function () {
alert("Signature verified");
},
function (err) {
console.log(err);
});
},
function (err) {
console.log(err);
}
);
}
Из базы получаю документ в виде xml , подписываю его, получаю сообщение Signature verified. А после если сохраняю подпись отдельно и xml отдельно проврека выдает ошибку, уже все перепробывал в чем может быть ошибка ?
|