Пример создания и проверки подписи файла с использованием FileAPI
HTML
<script language="javascript" src="cadesplugin_api.js"></script>
Приведенный пример использует синхронную версию плагина. Также см. пример работы с асинхронными обьектами.
JavaScript
function SignCreate(certSubjectName, dataToSign) {
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);
var oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
oSigner.Certificate = oCertificate;
oSigner.CheckCertificate = true;
var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
oSignedData.ContentEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = dataToSign;
try {
var sSignedMessage = oSignedData.SignCades(oSigner, cadesplugin.CADESCOM_CADES_BES, true);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
return;
}
oStore.Close();
return sSignedMessage;
}
function Verify(sSignedMessage, dataToVerify) {
var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
try {
oSignedData.ContentEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = dataToVerify;
oSignedData.VerifyCades(sSignedMessage, cadesplugin.CADESCOM_CADES_BES, true);
} catch (err) {
alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
return false;
}
return true;
}
function run() {
// Проверяем, работает ли File API
if (window.FileReader) {
// Браузер поддерживает File API.
} else {
alert('The File APIs are not fully supported in this browser.');
}
if (0 == document.getElementById("uploadFile").files.length) {
alert("Select the file.");
return;
}
var oFile = document.getElementById("uploadFile").files[0];
var oFReader = new FileReader();
if (typeof(oFReader.readAsDataURL)!="function") {
alert("Method readAsDataURL() is not supported in FileReader.");
return;
}
oFReader.readAsDataURL(oFile);
oFReader.onload = function(oFREvent) {
var header = ";base64,";
var sFileData = oFREvent.target.result;
var sBase64Data = sFileData.substr(sFileData.indexOf(header) + header.length);
var oCertName = document.getElementById("CertName");
var sCertName = oCertName.value; // Здесь следует заполнить SubjectName сертификата
if ("" == sCertName) {
alert("Введите имя сертификата (CN).");
return;
}
var signedMessage = SignCreate(sCertName, sBase64Data);
// Выводим отделенную подпись в BASE64 на страницу
// Такая подпись должна проверяться в КриптоАРМ и cryptcp.exe
document.getElementById("signature").innerHTML = signedMessage;
var verifyResult = Verify(signedMessage, sBase64Data);
if (verifyResult) {
alert("Signature verified");
}
};
}