xmldsigjs
Version:
XML Digital Signature implementation in TypeScript/JavaScript using Web Crypto API
45 lines (44 loc) • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SignatureAlgorithm = exports.HashAlgorithm = exports.XmlAlgorithm = void 0;
const xml_core_1 = require("xml-core");
const application_js_1 = require("./application.js");
class XmlAlgorithm {
getAlgorithmName() {
return this.namespaceURI;
}
}
exports.XmlAlgorithm = XmlAlgorithm;
class HashAlgorithm extends XmlAlgorithm {
async Digest(xml) {
let buf;
if (typeof xml === 'string') {
buf = xml_core_1.Convert.FromString(xml, 'utf8');
}
else if (ArrayBuffer.isView(xml)) {
buf = new Uint8Array(xml.buffer);
}
else if (xml instanceof ArrayBuffer) {
buf = new Uint8Array(xml);
}
else {
const txt = (0, xml_core_1.Stringify)(xml);
buf = xml_core_1.Convert.FromString(txt, 'utf8');
}
const hash = await application_js_1.Application.crypto.subtle.digest(this.algorithm, buf);
return new Uint8Array(hash);
}
}
exports.HashAlgorithm = HashAlgorithm;
class SignatureAlgorithm extends XmlAlgorithm {
async Sign(signedInfo, signingKey, algorithm) {
const info = xml_core_1.Convert.FromString(signedInfo, 'utf8');
return application_js_1.Application.crypto.subtle.sign(algorithm, signingKey, info);
}
async Verify(signedInfo, key, signatureValue) {
const alg = this.algorithm;
const info = xml_core_1.Convert.FromString(signedInfo, 'utf8');
return application_js_1.Application.crypto.subtle.verify(alg, key, signatureValue, info);
}
}
exports.SignatureAlgorithm = SignatureAlgorithm;