Пример создания и проверки подписи документа XML с использованием шаблона документа
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 SignCreate(oCertificate, dataToSign) {
// Создаем объект CAdESCOM.CPSigner
var oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
oSigner.Certificate = oCertificate;
oSigner.CheckCertificate = true;
// Создаем объект CAdESCOM.SignedXML
var oSignedXML = cadesplugin.CreateObject("CAdESCOM.SignedXML");
oSignedXML.Content = dataToSign;
// Указываем тип подписи - в данном случае по шаблону
oSignedXML.SignatureType = cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE;
var sSignedMessage = "";
try {
sSignedMessage = oSignedXML.Sign(oSigner);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
return;
}
return sSignedMessage;
}
function Verify(sSignedMessage) {
// Создаем объект CAdESCOM.SignedXML
var oSignedXML = cadesplugin.CreateObject("CAdESCOM.SignedXML");
try {
oSignedXML.Verify(sSignedMessage);
} 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);
var sContent =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!-- \n" +
" Original XML doc file for sign example. \n" +
"-->\n" +
"<Envelope xmlns=\"urn:envelope\">\n" +
" <Data>\n" +
" Hello, World!\n" +
" </Data>\n" +
" <Node xml:id=\"nodeID\">\n" +
" Hello, Node!\n" +
" </Node>\n" +
" <Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">\n" +
" <SignedInfo>\n" +
" <CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n" +
" <SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411\"/>\n" +
" <Reference URI=\"#nodeID\">\n" +
" <Transforms>\n" +
" <Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>\n" +
" </Transforms>\n" +
" <DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#gostr3411\"/>\n" +
" <DigestValue/>\n" +
" </Reference>\n" +
" </SignedInfo>\n" +
" <SignatureValue/>\n" +
" <KeyInfo/>\n" +
" </Signature>\n" +
"</Envelope>";
var signedMessage = SignCreate(oCertificate, sContent);
alert(signedMessage);
var verifyResult = Verify(signedMessage);
if (verifyResult) {
alert("Signature verified");
}
}