UNPKG

xmldsigjs

Version:

XML Digital Signature implementation in TypeScript/JavaScript using Web Crypto API

51 lines (50 loc) 1.94 kB
import { XE, XmlError } from 'xml-core'; import { XmlCanonicalizer } from '../../canonicalizer.js'; import { Transform } from '../transform.js'; export class XmlDsigExcC14NTransform extends Transform { constructor() { super(...arguments); this.Algorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#'; this.xmlCanonicalizer = new XmlCanonicalizer(false, true); } get InclusiveNamespacesPrefixList() { return this.xmlCanonicalizer.InclusiveNamespacesPrefixList; } set InclusiveNamespacesPrefixList(value) { this.xmlCanonicalizer.InclusiveNamespacesPrefixList = value; } LoadXml(param) { super.LoadXml(param); if (this.Element && this.Element.childNodes) { for (let i = 0; i < this.Element.childNodes.length; i++) { const element = this.Element.childNodes[i]; if (element && element.nodeType === 1) { switch (element.localName) { case 'InclusiveNamespaces': this.setInclusiveNamespacesElement(element); break; } } } } } GetOutput() { if (!this.innerXml) { throw new XmlError(XE.PARAM_REQUIRED, 'innerXml'); } return this.xmlCanonicalizer.Canonicalize(this.innerXml); } setInclusiveNamespacesElement(element) { const prefixList = element.getAttribute('PrefixList'); if (prefixList && prefixList.length > 0) { this.xmlCanonicalizer.InclusiveNamespacesPrefixList = prefixList; } } } export class XmlDsigExcC14NWithCommentsTransform extends XmlDsigExcC14NTransform { constructor() { super(...arguments); this.Algorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#WithComments'; this.xmlCanonicalizer = new XmlCanonicalizer(true, true); } }