[
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - master\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 22\n          cache: 'npm'\n\n      - name: Install dependencies\n        run: npm ci\n\n      - name: Lint\n        run: npm run lint\n\n      - name: Coverage\n        run: npm run coverage\n\n      - name: Coveralls\n        uses: coverallsapp/github-action@v2\n"
  },
  {
    "path": ".gitignore",
    "content": ".vscode/\n.nyc_output/\ncoverage/\nnode_modules/\nbuild/\n**/*.map\n*.log\n\n# MAC OS\n.DS_Store"
  },
  {
    "path": ".npmignore",
    "content": ".vscode/\n.github/\n.nyc_output/\ncoverage/\nnode_modules/\ntest/\nexamples/\nsrc/\n**/*.map\n*.log\nrollup.*.js\nts*.json"
  },
  {
    "path": "LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# XAdESjs\r\n\r\n[![license](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/PeculiarVentures/xadesjs/master/LICENSE.md)\r\n[![GitHub Actions](https://github.com/PeculiarVentures/xadesjs/workflows/CI/badge.svg)](https://github.com/PeculiarVentures/xadesjs/actions)\r\n[![Coverage Status](https://coveralls.io/repos/github/PeculiarVentures/xadesjs/badge.svg?branch=master)](https://coveralls.io/github/PeculiarVentures/xadesjs?branch=master)\r\n[![npm version](https://badge.fury.io/js/xadesjs.svg)](https://badge.fury.io/js/xadesjs)\r\n\r\n[![NPM](https://nodei.co/npm/xadesjs.png)](https://nodei.co/npm/xadesjs/)\r\n\r\n## Notice: Repository Archived\r\n\r\nThis repository is no longer maintained. Its functionality has been merged into the [xmldsigjs](https://github.com/PeculiarVentures/xmldsigjs) monorepo, and is now part of it.\r\n\r\nFor future development and updates, please use [xmldsigjs](https://github.com/PeculiarVentures/xmldsigjs).\r\n\r\n## Introduction\r\n\r\n[XAdES](https://en.wikipedia.org/wiki/XAdES) is short for \"XML Advanced Electronic Signatures\", it is a superset of XMLDSIG. This library aims to provide an implementation of XAdES in Typescript/Javascript that is built on [XMLDSIGjs](https://github.com/PeculiarVentures/xmldsigjs).\r\n\r\nSince it is based on [XMLDSIGjs](https://github.com/PeculiarVentures/xmldsigjs) and that library uses Web Crypto for cryptographic operations it can be used both in browsers and in Node.js (when used with a polyfill like [webcrypto](https://github.com/PeculiarVentures/webcrypto), [node-webcrypto-ossl](https://github.com/PeculiarVentures/node-webcrypto-ossl) or [node-webcrypto-p11](https://github.com/PeculiarVentures/node-webcrypto-p11)).\r\n\r\nThere are seven different profiles of XAdES, they are:\r\n- Basic Electronic Signature (XAdES-BES)\r\n- XAdES with Timestamp (XAdES-T)\r\n- XAdES with Complete Validation Data (XAdES-C)\r\n- XAdES with Extended Validation Data (XAdES-X)\r\n- XAdES with Extended Long Term Validation Data (XAdES-X-L)\r\n- XAdES with Archiving Validation Data (XAdES-A)\r\n- XAdES with Explicit policy electronic signatures (XAdES-EPES)\r\n\r\nThey differ slightly based on what is included in the signature:\r\n\r\n|            | Provides Digital Signature | Includes Cryptographic Timestamp | Includes Revocation References | Includes Revocation Data | Allows Secure Timestamp Countersignature |\r\n|------------|----------------------------|----------------------------------|--------------------------------|--------------------------|------------------------------------------|\r\n| **XAdES-BES**  | **Yes**                        | **No**                               | **No**                             | **No**                       | **No**                                       |\r\n| XAdES-EPES | Yes                        | No                               | No                             | No                       | No                                       |\r\n| XAdES-T    | Yes                        | Yes                              | No                             | No                       | No                                       |\r\n| XAdES-C    | Yes                        | Yes                              | Yes                            | No                       | No                                       |\r\n| XAdES-X    | Yes                        | Yes                              | Yes                            | No                       | No                                       |\r\n| XAdES-X-L  | Yes                        | Yes                              | Yes                            | Yes                      | No                                       |\r\n| XAdES-A    | Yes                        | Yes                              | Yes                            | Yes                      | Yes                                      |\r\n\r\n- Only XAdES-BES (in *BOLD*) is fully supported by XAdESjs. For the other variants can be created, decoded and verified but the caller must do the construction and policy to ensure compliant messages on their own.\r\n\r\n## INSTALLING\r\n\r\n```\r\nnpm install xadesjs\r\n```\r\n\r\nThe npm module has a `dist` folder with the following files:\r\n\r\n| Name            | Size   | Description                                    |\r\n|-----------------|--------|------------------------------------------------|\r\n| index.js        | 105 Kb | UMD module with external modules. Has comments |\r\n| xades.js        | 803 Kb | UMD bundle module. Has comments                |\r\n| xades.min.js    | 296 Kb | minified UMD bundle module                     |\r\n\r\nThere is also a `lib` folder with an ES2015 JS file which you can use with `rollup` bundler.\r\n\r\n## COMPATABILITY\r\n\r\n### CRYPTOGRAPHIC ALGORITHM SUPPORT\r\n\r\n| Name              | SHA1 | SHA2-256 | SHA2-384 | SHA2-512 |\r\n|-------------------|------|----------|----------|----------|\r\n| RSASSA-PKCS1-v1_5 | X    | X        | X        | X        |\r\n| RSA-PSS           | X    | X        | X        | X        |\r\n| ECDSA             | X    | X        | X        | X        |\r\n| HMAC              | X    | X        | X        | X        |\r\n\r\n### CANONICALIZATION ALGORITHM SUPPORT\r\n\r\n- XmlDsigC14NTransform\r\n- XmlDsigC14NWithCommentsTransform\r\n- XmlDsigExcC14NTransform\r\n- XmlDsigExcC14NWithCommentsTransform\r\n- XmlDsigEnvelopedSignatureTransform\r\n- XmlDsigBase64Transform\r\n\r\n\r\n### PLATFORM SUPPORT\r\n\r\nXAdESjs works with any browser that suppports Web Crypto. Since node does not have Web Crypto you will need a polyfill on this platform, for this reason the npm package includes [webcrypto](https://github.com/PeculiarVentures/webcrypto); browsers do not need this dependency and in those cases though it will be installed it will be ignored.\r\n\r\nIf you need to use a Hardware Security Module we have also created a polyfill for Web Crypto that supports PKCS #11. Our polyfill for this is [node-webcrypto-p11](https://github.com/PeculiarVentures/node-webcrypto-p11).\r\n\r\nTo use [node-webcrypto-ossl](https://github.com/PeculiarVentures/node-webcrypto-ossl) you need to specify you want to use it, that looks like this:\r\n\r\n```javascript\r\nvar xadesjs = require(\"./built/xades.js\");\r\nvar { Crypto } = require(\"@peculiar/webcrypto\");\r\n\r\nxadesjs.Application.setEngine(\"NodeJS\", new Crypto());\r\n```\r\n\r\nThe [node-webcrypto-p11](https://github.com/PeculiarVentures/node-webcrypto-p11) polyfill will work the same way. The only difference is that you have to specify the details about your PKCS #11 device when you instansiate it:\r\n\r\n```javascript\r\nvar xadesjs = require(\"./built/xades.js\");\r\nvar WebCrypto = require(\"node-webcrypto-p11\").WebCrypto;\r\n\r\nxadesjs.Application.setEngine(\"PKCS11\", new WebCrypto({\r\n    library: \"/path/to/pkcs11.so\",\r\n\tname: \"Name of PKCS11 lib\",\r\n\tslot: 0,\r\n    sessionFlags: 2 | 4, // RW_SESSION | SERIAL_SESSION\r\n\tpin: \"token pin\"\r\n}));\r\n```\r\n\r\n## WARNING\r\n\r\n**Using XMLDSIG is a bit like running with scissors, that said it is needed for interoperability with a number of systems, for this reason, we have done this implementation.**\r\n\r\n## Usage\r\n\r\n### Sign\r\n\r\n```typescript\r\nSignedXml.Sign(algorithm: Algorithm, key: CryptoKey, data: Document, options?: OptionsXAdES): PromiseLike<Signature>;\r\n```\r\n\r\n__Parameters__\r\n\r\n| Name          | Description                                                             |\r\n|:--------------|:------------------------------------------------------------------------|\r\n| algorithm     | Signing [Algorithm](https://www.w3.org/TR/WebCryptoAPI/#algorithms)     |\r\n| key           | Signing [Key](https://www.w3.org/TR/WebCryptoAPI/#cryptokey-interface)  |\r\n| data          | XML document which must be signed                                       |\r\n| options       | Additional options                                                      |\r\n\r\n#### Options\r\n```typescript\r\ninterface OptionsXAdES {\r\n    /**\r\n     * Public key for KeyInfo block\r\n     */\r\n    keyValue?: CryptoKey;\r\n    /**\r\n     * List of X509 Certificates\r\n     */\r\n    x509?: string[];\r\n    /**\r\n     * List of Reference\r\n     * Default is Reference with hash alg SHA-256 and exc-c14n transform  \r\n     */\r\n    references?: OptionsSignReference[];\r\n\r\n    // Signed signature properties\r\n\r\n    signingCertificate?: string;\r\n    signingTime?: OptionsSigningTime;\r\n    policy?: OptionsPolicyId;\r\n    productionPlace?: OptionsProductionPlace;\r\n    signerRole?: OptionsSignerRole;\r\n}\r\n\r\ninterface OptionsSignReference {\r\n    /**\r\n     * Id of Reference\r\n     */\r\n    id?: string;\r\n    uri?: string;\r\n    /**\r\n     * Hash algorithm\r\n     */\r\n    hash: AlgorithmIdentifier;\r\n    /**\r\n     * List of transforms\r\n     */\r\n    transforms?: OptionsSignTransform[];\r\n}\r\n\r\ntype OptionsSignTransform = \"enveloped\" | \"c14n\" | \"exc-c14n\" | \"c14n-com\" | \"exc-c14n-com\" | \"base64\";\r\n\r\ninterface OptionsSigningTime {\r\n    value?: Date;\r\n    format?: string;\r\n}\r\n\r\ninterface OptionsSignerRole {\r\n    claimed?: string[];\r\n    certified?: string[];\r\n}\r\n\r\ninterface OptionsProductionPlace {\r\n    city?: string;\r\n    state?: string;\r\n    code?: string;\r\n    country?: string;\r\n}\r\n\r\ninterface OptionsPolicyId {\r\n}\r\n```\r\n\r\n### Verify\r\n\r\n```typescript\r\nVerify(key?: CryptoKey): PromiseLike<boolean>;\r\n```\r\n\r\n__Parameters__\r\n\r\n| Name          | Description                                                             |\r\n|:--------------|:------------------------------------------------------------------------|\r\n| key           | Verifying [Key](https://www.w3.org/TR/WebCryptoAPI/#cryptokey-interface). Optional. If key not set it looks for keys in KeyInfo element of Signature.  |\r\n\r\n## EXAMPLES\r\n\r\n### Create XAdES-BES Signature\r\n\r\n#### In Node\r\n\r\n```javascript\r\nvar xadesjs = require(\"xadesjs\");\r\nvar { Crypto } = require(\"@peculiar/webcrypto\");\r\n\r\nxadesjs.Application.setEngine(\"NodeJS\", new Crypto());\r\n\r\n// Generate RSA key pair\r\nvar privateKey, publicKey;\r\nxadesjs.Application.crypto.subtle.generateKey(\r\n    {\r\n        name: \"RSASSA-PKCS1-v1_5\",\r\n        modulusLength: 1024, //can be 1024, 2048, or 4096,\r\n        publicExponent: new Uint8Array([1, 0, 1]),\r\n        hash: { name: \"SHA-1\" }, //can be \"SHA-1\", \"SHA-256\", \"SHA-384\", or \"SHA-512\"\r\n    },\r\n    false, //whether the key is extractable (i.e. can be used in exportKey)\r\n    [\"sign\", \"verify\"] //can be any combination of \"sign\" and \"verify\"\r\n)\r\n    .then(function (keyPair) {\r\n        // Push ganerated keys to global variable\r\n        privateKey = keyPair.privateKey;\r\n        publicKey = keyPair.publicKey;\r\n\r\n        // Call sign function\r\n        var xmlString = '<player bats=\"left\" id=\"10012\" throws=\"right\">\\n\\t<!-- Here\\'s a comment -->\\n\\t<name>Alfonso Soriano</name>\\n\\t<position>2B</position>\\n\\t<team>New York Yankees</team>\\n</player>';\r\n        return SignXml(xmlString, keyPair, { name: \"RSASSA-PKCS1-v1_5\", hash: { name: \"SHA-1\" } });\r\n    })\r\n    .then(function (signedDocument) {\r\n        console.log(\"Signed document:\\n\\n\", signedDocument);\r\n    })\r\n    .catch(function (e) {\r\n        console.error(e);\r\n    });\r\n\r\n\r\nfunction SignXml(xmlString, keys, algorithm) {\r\n    return Promise.resolve()\r\n        .then(() => {\r\n            var xmlDoc = xadesjs.Parse(xmlString);\r\n            var signedXml = new xadesjs.SignedXml();\r\n\r\n            return signedXml.Sign(               // Signing document\r\n                algorithm,                              // algorithm\r\n                keys.privateKey,                        // key\r\n                xmlDoc,                                 // document\r\n                {                                       // options\r\n                    keyValue: keys.publicKey,\r\n                    references: [\r\n                        { hash: \"SHA-256\", transforms: [\"enveloped\"] }\r\n                    ],\r\n                    productionPlace: {\r\n                        country: \"Country\",\r\n                        state: \"State\",\r\n                        city: \"City\",\r\n                        code: \"Code\",\r\n                    },\r\n                    signingCertificate: \"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\"\r\n                })\r\n            })\r\n            .then(signature => signature.toString());\r\n}\r\n```\r\n\r\n#### In the browser\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <title>XADESJS Signature Sample</title>\r\n</head>\r\n\r\n<body>\r\n    <pre id=\"signature\"><code></code></pre>\r\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js\"></script>\r\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/asmCrypto/2.3.2/asmcrypto.all.es5.min.js\"></script>\r\n    <script src=\"https://cdn.rawgit.com/indutny/elliptic/master/dist/elliptic.min.js\"></script>\r\n    <script src=\"https://unpkg.com/webcrypto-liner@1.1.2/build/webcrypto-liner.shim.min.js\"></script>\r\n    <script src=\"https://unpkg.com/xadesjs@2.0.16/build/xades.js\"></script>\r\n    <script type=\"text/javascript\">\r\n        // Generate RSA key pair\r\n        var privateKey, publicKey;\r\n        window.crypto.subtle.generateKey(\r\n            {\r\n                name: \"ECDSA\",\r\n                namedCurve: \"P-256\"\r\n            },\r\n            false, //whether the key is extractable (i.e. can be used in exportKey)\r\n            [\"sign\", \"verify\"] //can be any combination of \"sign\" and \"verify\"\r\n        )\r\n            .then(function (keyPair) {\r\n                // Push ganerated keys to global variable\r\n                privateKey = keyPair.privateKey;\r\n                publicKey = keyPair.publicKey;\r\n                // Call sign function\r\n                var xmlString = '<player bats=\"left\" id=\"10012\" throws=\"right\">\\n\\t<!-- Here\\'s a comment -->\\n\\t<name>Alfonso Soriano</name>\\n\\t<position>2B</position>\\n\\t<team>New York Yankees</team>\\n</player>';\r\n                return SignXml(xmlString, keyPair, { name: \"ECDSA\", hash: { name: \"SHA-1\" } });\r\n            })\r\n            .then(function (signedDocument) {\r\n                document.getElementById(\"signature\").textContent = signedDocument;\r\n                console.log(\"Signed document:\\n\\n\", signedDocument);\r\n            })\r\n            .catch(function (e) {\r\n                console.error(e);\r\n            });\r\n\r\n        function SignXml(xmlString, keys, algorithm) {\r\n            var signedXml;\r\n            return Promise.resolve()\r\n                .then(() => {\r\n                    var xmlDoc = XAdES.Parse(xmlString);\r\n                    signedXml = new XAdES.SignedXml();\r\n\r\n                    return signedXml.Sign(               // Signing document\r\n                        algorithm,                              // algorithm\r\n                        keys.privateKey,                        // key\r\n                        xmlDoc,                                 // document\r\n                        {                                       // options\r\n                            keyValue: keys.publicKey,\r\n                            references: [\r\n                                { hash: \"SHA-256\", transforms: [\"enveloped\"] }\r\n                            ],\r\n                            productionPlace: {\r\n                                country: \"Country\",\r\n                                state: \"State\",\r\n                                city: \"City\",\r\n                                code: \"Code\",\r\n                            },\r\n                            signerRole: {\r\n                                claimed: [\"Some role\"]\r\n                            }\r\n                        })\r\n                })\r\n                .then(() => signedXml.toString());\r\n        }\r\n    </script>\r\n</body>\r\n\r\n</html>\r\n```\r\n\r\n### Check XAdES-BES Signature\r\n\r\n#### In Node\r\n\r\n```js\r\nvar XAdES = require(\"xadesjs\");\r\nvar { Crypto } = require(\"@peculiar/webcrypto\");\r\n\r\nXAdES.Application.setEngine(\"NodeJS\", new Crypto());\r\n\r\nvar fs = require(\"fs\");\r\nvar xmlString = fs.readFileSync(\"some.xml\",\"utf8\");\r\n\r\nvar signedDocument = XAdES.Parse(xmlString, \"application/xml\");\r\nvar xmlSignature = signedDocument.getElementsByTagNameNS(\"http://www.w3.org/2000/09/xmldsig#\", \"Signature\");\r\n\r\nvar signedXml = new xadesjs.SignedXml(signedDocument);\r\nsignedXml.LoadXml(xmlSignature[0]);\r\nsignedXml.Verify()\r\n    .then(res => {\r\n        console.log((res ? \"Valid\" : \"Invalid\") + \" signature\");\r\n    })\r\n    .catch(function (e) {\r\n        console.error(e);\r\n    });\r\n```\r\n\r\n#### In the browser\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <title>XADESJS Signature Sample</title>\r\n</head>\r\n\r\n<body>\r\n    <pre id=\"signature\"><code></code></pre>\r\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js\"></script>\r\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/asmCrypto/2.3.2/asmcrypto.all.es5.min.js\"></script>\r\n    <script src=\"https://cdn.rawgit.com/indutny/elliptic/master/dist/elliptic.min.js\"></script>\r\n    <script src=\"https://unpkg.com/webcrypto-liner@1.1.2/build/webcrypto-liner.shim.min.js\"></script>\r\n    <script src=\"https://unpkg.com/xadesjs@2.0.16/build/xades.js\"></script>\r\n    <script type=\"text/javascript\">\r\n        \"use strict\";\r\n        fetch(\"https://cdn.rawgit.com/PeculiarVentures/xadesjs/master/test/static/valid_signature.xml\")\r\n            .then(response => response.text())\r\n            .then(body => {\r\n                var xmlString = body;\r\n\r\n                var signedDocument = XAdES.Parse(xmlString);\r\n                var xmlSignature = signedDocument.getElementsByTagNameNS(\"http://www.w3.org/2000/09/xmldsig#\", \"Signature\");\r\n\r\n                var signedXml = new xadesjs.SignedXml(signedDocument);\r\n                signedXml.LoadXml(xmlSignature[0]);\r\n                signedXml.Verify()\r\n                    .then(function (signedDocument) {\r\n                        alert((res ? \"Valid\" : \"Invalid\") + \" signature\");\r\n                    })\r\n                    .catch(function (e) {\r\n                        alert(e.message);\r\n                    });\r\n            })\r\n    </script>\r\n</body>\r\n\r\n</html>\r\n```\r\n\r\n### XAdES-EPES signature\r\n\r\n```js\r\nconst fs = require(\"fs\");\r\nvar { Crypto } = require(\"@peculiar/webcrypto\");\r\nconst xadesjs = require(\"xadesjs\");\r\nconst { XMLSerializer } = require(\"xmldom\");\r\n\r\n\r\nconst crypto = new Crypto();\r\nxadesjs.Application.setEngine(\"NodeJS\", crypto);\r\n\r\nfunction preparePem(pem) {\r\n    return pem\r\n        // remove BEGIN/END\r\n        .replace(/-----(BEGIN|END)[\\w\\d\\s]+-----/g, \"\")\r\n        // remove \\r, \\n\r\n        .replace(/[\\r\\n]/g, \"\");\r\n}\r\n\r\nfunction pem2der(pem) {\r\n    pem = preparePem(pem);\r\n    // convert base64 to ArrayBuffer\r\n    return new Uint8Array(Buffer.from(pem, \"base64\")).buffer;\r\n}\r\n\r\nasync function main() {\r\n    const hash = \"SHA-256\"\r\n    const alg = {\r\n        name: \"RSASSA-PKCS1-v1_5\",\r\n        hash,\r\n    }\r\n\r\n    // Read cert\r\n    const certPem = fs.readFileSync(\"cert.pem\", { encoding: \"utf8\" });\r\n    const certDer = pem2der(certPem);\r\n\r\n    // Read key\r\n    const keyPem = fs.readFileSync(\"key.pem\", { encoding: \"utf8\" });\r\n    const keyDer = pem2der(keyPem);\r\n    const key = await crypto.subtle.importKey(\"pkcs8\", keyDer, alg, false, [\"sign\"]);\r\n\r\n    // XAdES-EPES\r\n    var xmlString = `<Test><Document attr=\"Hello\"/></Test>`;\r\n    var xml = xadesjs.Parse(xmlString);\r\n\r\n    var xadesXml = new xadesjs.SignedXml();\r\n    const x509 = preparePem(certPem);\r\n    const signature = await xadesXml.Sign(   // Signing document\r\n        alg,                                    // algorithm\r\n        key,                                    // key\r\n        xml,                                    // document\r\n        {                                       // options\r\n            references: [\r\n                { hash, transforms: [\"c14n\", \"enveloped\"] }\r\n            ],\r\n            policy: {\r\n                hash,\r\n                identifier: {\r\n                    qualifier: \"OIDAsURI\",\r\n                    value: \"quilifier.uri\",\r\n                },\r\n                qualifiers: [\r\n                    {\r\n                        noticeRef: {\r\n                            organization: \"PeculiarVentures\",\r\n                            noticeNumbers: [1, 2, 3, 4, 5]\r\n                        }\r\n                    }\r\n                ]\r\n            },\r\n            productionPlace: {\r\n                country: \"Russia\",\r\n                state: \"Marij El\",\r\n                city: \"Yoshkar-Ola\",\r\n                code: \"424000\",\r\n            },\r\n            signingCertificate: x509\r\n        });\r\n\r\n    // append signature\r\n    xml.documentElement.appendChild(signature.GetXml());\r\n\r\n    // serialize XML\r\n    const oSerializer = new XMLSerializer();\r\n    const sXML = oSerializer.serializeToString(xml);\r\n    console.log(sXML.toString())\r\n}\r\n\r\nmain()\r\n    .catch((err) => {\r\n        console.error(err);\r\n    });\r\n```\r\n\r\n## TESTING\r\n\r\n### In NodeJS:\r\n\r\n```\r\nnpm test\r\n```\r\n\r\n## THANKS AND ACKNOWLEDGEMENT\r\nThis project takes inspiration (style, approach, design and code) from both the [Mono System.Security.Cryptography.Xml](https://github.com/mono/mono/tree/master/mcs/class/System.Security/System.Security.Cryptography.Xml) implementation as well as [xml-crypto](https://github.com/yaronn/xml-crypto).\r\n\r\n## RELATED\r\n- [xmldsigjs](https://github.com/PeculiarVentures/xmldsigjs)\r\n- [Why XML Security is Broken](https://www.cs.auckland.ac.nz/~pgut001/pubs/xmlsec.txt)\r\n- [ETSI EN 319 132-1 - XML Advanced Electronic Signatures (XAdES)](http://www.etsi.org/deliver/etsi_en/319100_319199/31913201/01.01.00_30/en_31913201v010100v.pdf)\r\n- [ETSI EN 319 132-2 - XML Advanced Electronic Signatures (XAdES)](http://www.etsi.org/deliver/etsi_en/319100_319199/31913202/01.01.00_30/en_31913202v010100v.pdf)\r\n- [XML Signature Syntax and Processing](https://www.w3.org/TR/xmldsig-core/)\r\n- [XML Security Algorithm Cross-Reference](https://tools.ietf.org/html/rfc6931)\r\n- [XMLDSIG HTML Signing Profile](https://www.w3.org/2007/11/h6n/)\r\n- [Canonical XML](https://www.w3.org/TR/xml-c14n)\r\n- [Exclusive XML Canonicalization](https://www.w3.org/TR/xml-exc-c14n/)\r\n- [Internet X.509 Public Key Infrastructure Time-Stamp Protocol](https://www.ietf.org/rfc/rfc3161.txt)\r\n- [XAdESj](https://github.com/luisgoncalves/xades4j)\r\n- [PKIjs](pkijs.org)\r\n- [@peculiar/webcrypto](https://github.com/PeculiarVentures/webcrypto)\r\n- [node-webcrypto-ossl](https://github.com/PeculiarVentures/node-webcrypto-ossl)\r\n- [node-webcrypto-p11](https://github.com/PeculiarVentures/node-webcrypto-p11)\r\n\r\n"
  },
  {
    "path": "eslint.config.mjs",
    "content": "// eslint-disable-next-line import/no-unresolved\nimport tseslint from 'typescript-eslint';\nimport baseConfig from '@peculiar/eslint-config-base';\n\nexport default tseslint.config([\n  ...baseConfig,\n  {\n    ignores: [\n      'build/*',\n      'coverage/*',\n      'examples/*',\n    ],\n  },\n  {\n    rules: {\n      '@typescript-eslint/no-non-null-assertion': 'off',\n      'no-useless-escape': 'off',\n      '@stylistic/max-len': 'off',\n    },\n    files: [\n      'test/**/*.ts',\n    ],\n  },\n  {\n    rules: {\n      '@typescript-eslint/naming-convention': 'off',\n      '@typescript-eslint/no-explicit-any': 'off',\n    },\n  },\n]);\n"
  },
  {
    "path": "examples/html/sign.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>XAdES</title>\n    <style>\n        textarea {\n            width: 100%;\n        }\n    </style>\n<script src=\"src/helper.js\"></script>\n<script src=\"src/main.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/promise.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/webcrypto-liner.min.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/asmcrypto.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/elliptic.js\"></script>\n<script src=\"https://peculiarventures.github.io/xadesjs/src/xades.min.js\"></script>\n</head>\n\n<body>\n    <h2>XAdES::Sign</h2>\n    <div>\n        <div>\n            <h3>Signing params</h3>\n            <h4>Select key algorithm</h4>\n            <select id=\"key\">\n                <option value=\"rsassa\" selected>RSASSA-PKCS1-v1_5</option>\n                <option value=\"rsapss\">RSA-PSS</option>\n                <option value=\"ecdsa\">ECDSA</option>\n            </select>\n            <br/>\n            <lable for=\"keyValue\">Iclude key vallue:</lable>\n            <input id=\"keyValue\" type=\"checkbox\" checked>\n            <h4>Select digest algorithm</h4>\n            <select id=\"digest\">\n                <option value=\"SHA-1\">SHA-1</option>\n                <option value=\"SHA-256\" selected>SHA-256</option>\n                <option value=\"SHA-384\">SHA-384</option>\n                <option value=\"SHA-512\">SHA-512</option>\n            </select>\n            <h4>Type of signature</h4>\n            <lable for=\"enveloped\">Enveloped:</lable>\n            <input id=\"enveloped\" type=\"checkbox\" checked>\n            <h4>Select canon method</h4>\n            <select id=\"canon\">\n                <option value=\"c14n\" selected>c14n</option>\n                <option value=\"c14n-com\">c14n with comment</option>\n                <option value=\"exc-c14n\">exc-c14n</option>\n                <option value=\"exc-c14n-com\">exc-c14n with comment</option>\n            </select>\n            <div>\n                <h4>Set production place</h4>\n                <div>\n                    <label for=\"country\">Country:</label>\n                    <input id=\"country\" type=\"text\">\n                </div>\n                <div>\n                    <label for=\"state\">State:</label>\n                    <input id=\"state\" type=\"text\">\n                </div>\n                <div>\n                    <label for=\"city\">City:</label>\n                    <input id=\"city\" type=\"text\">\n                </div>\n                <div>\n                    <label for=\"code\">Code:</label>\n                    <input id=\"code\" type=\"text\">\n                </div>\n            </div>\n\n            <h4>Set xml</h4>\n            <textarea id=\"xml\" cols=\"30\" rows=\"10\">\n            </textarea>\n\n            <input type=\"button\" value=\"Sign\" onclick=\"sign()\">\n</div>\n<div id=\"result\">\n    <h3>Result</h3>\n    <textarea id=\"jwk\" cols=\"30\" rows=\"3\" placeholder=\"JWK\" readonly></textarea>\n    <textarea id=\"signature\" cols=\"30\" rows=\"10\" placeholder=\"XML Signature\" readonly></textarea>\n</div>\n</div>\n<script>\n        document.getElementById(\"xml\").value = \"<root><child>Simple xml</child></root>\"\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "examples/html/src/helper.js",
    "content": "var Browser = {\n    IE: \"Internet Explorer\",\n    Safari: \"Safari\",\n    Edge: \"Edge\",\n    Chrome: \"Chrome\",\n    Firefox: \"Firefox Mozilla\",\n};\n/**\n * Returns info about browser\n */\nfunction BrowserInfo() {\n    var res = {\n        name: \"\",\n        version: \"\"\n    };\n    var userAgent = self.navigator.userAgent;\n    var reg;\n    if (reg = /edge\\/([\\d\\.]+)/i.exec(userAgent)) {\n        res.name = Browser.Edge;\n        res.version = reg[1];\n    }\n    else if (/msie/i.test(userAgent)) {\n        res.name = Browser.IE;\n        res.version = /msie ([\\d\\.]+)/i.exec(userAgent)[1];\n    }\n    else if (/Trident/i.test(userAgent)) {\n        res.name = Browser.IE;\n        res.version = /rv:([\\d\\.]+)/i.exec(userAgent)[1];\n    }\n    else if (/chrome/i.test(userAgent)) {\n        res.name = Browser.Chrome;\n        res.version = /chrome\\/([\\d\\.]+)/i.exec(userAgent)[1];\n    }\n    else if (/safari/i.test(userAgent)) {\n        res.name = Browser.Safari;\n        res.version = /([\\d\\.]+) safari/i.exec(userAgent)[1];\n    }\n    else if (/firefox/i.test(userAgent)) {\n        res.name = Browser.Firefox;\n        res.version = /firefox\\/([\\d\\.]+)/i.exec(userAgent)[1];\n    }\n    return res;\n}\n\nstringToBuffer = function (text) {\n    var res = new Uint8Array(text.length);\n    for (var i = 0; i < text.length; i++)\n        res[i] = text.charCodeAt(i);\n    return res;\n};\nbuffer2string = function (buffer) {\n    var res = \"\";\n    for (var i = 0; i < buffer.length; i++)\n        res += String.fromCharCode(buffer[i]);\n    return res;\n};"
  },
  {
    "path": "examples/html/src/main.js",
    "content": "function getAlgorithm() {\n    var $key = document.getElementById(\"key\");\n\n    var alg = {};\n    switch ($key.value) {\n        case \"rsassa\":\n            alg = {\n                name: \"RSASSA-PKCS1-v1_5\",\n                hash: \"SHA-256\",\n                modulusLength: 1024,\n                publicExponent: new Uint8Array([1, 0, 1]),\n            };\n            break;\n        case \"rsapss\":\n            alg = {\n                name: \"RSA-PSS\",\n                hash: \"SHA-256\",\n                modulusLength: 1024,\n                publicExponent: new Uint8Array([1, 0, 1]),\n                saltLength: 32,\n            };\n            break;\n        case \"ecdsa\":\n            alg = {\n                name: \"ECDSA\",\n                hash: \"SHA-256\",\n                namedCurve: \"P-256\",\n            };\n            break;\n    }\n    return alg;\n}\n\nfunction getHashAlgorithm() {\n    return document.getElementById(\"digest\").value;\n}\n\nfunction getCanonMethod() {\n    return document.getElementById(\"canon\").value;\n}\n\nfunction isEnveloped() {\n    return document.getElementById(\"enveloped\").checked;\n}\n\nfunction useKeyValue() {\n    return document.getElementById(\"keyValue\").checked;\n}\n\nfunction getXml() {\n    return document.getElementById(\"xml\").value;\n}\n\nfunction getProductionPlace() {\n    var res = {};\n    [\"country\", \"state\", \"city\", \"code\"].forEach(function (item) {\n        var $item = document.getElementById(item);\n        if ($item && $item.value)\n            res[item] = $item.value;\n    });\n\n    return Object.keys(res).length ? res : null;\n}\n\nfunction generateKey(alg) {\n    return crypto.subtle.generateKey(alg, false, [\"sign\", \"verify\"])\n}\n\nfunction exportKey(key) {\n    return crypto.subtle.exportKey(\"jwk\", key)\n}\n\nfunction error(e) {\n    alert(e.message);\n    console.error(e);\n}\n\nfunction sign() {\n    var transforms = [];\n    if (isEnveloped())\n        transforms.push(\"enveloped\");\n    transforms.push(getCanonMethod());\n    console.log(transforms);\n\n    var alg = getAlgorithm();\n    var keys, signature, res = {};\n    Promise.resolve()\n        .then(function () {\n            return generateKey(alg);\n        })\n        .then(function (ks) {\n            keys = ks;\n            return exportKey(ks.publicKey)\n        })\n        .then(function (jwk) {\n            res.jwk = jwk;\n        })\n        .then(function () {\n            signature = new XAdES.SignedXml();\n\n            return signature.Sign(                  // Signing document\n                alg,                                    // algorithm\n                keys.privateKey,                        // key\n                XAdES.Parse(getXml()),                  // document\n                {                                       // options\n                    keyValue: useKeyValue() ? keys.publicKey : void 0,\n                    references: [\n                        { hash: getHashAlgorithm(), transforms: transforms }\n                    ],\n                    productionPlace: getProductionPlace(),\n                    signerRole: { claimed: [\"BOSS\"] }\n                });\n        })\n        .then(function () {\n            var sig = signature.toString()\n            res.signature = sig;\n\n            document.getElementById(\"jwk\").value = JSON.stringify(res.jwk);\n            document.getElementById(\"signature\").value = res.signature;\n        })\n        .catch(function (e) {\n            console.error(e);\n        });\n\n}\n\nfunction verify() {\n    var $xml = document.getElementById(\"xml\");\n    var $info = document.getElementById(\"signature_info\");\n    if (!$xml.value)\n        return error(new Error(\"Unable to get XML\"));\n    var xml = XAdES.Parse($xml.value);\n    var signature = new XAdES.SignedXml(xml);\n    var xmlSignatures = XAdES.Select(xml, \"//*[local-name(.)='Signature' and namespace-uri(.)='http://www.w3.org/2000/09/xmldsig#']\");\n\n    if (!(xmlSignatures && xmlSignatures.length))\n        return error(\"Cannot get XML signature from XML document\");\n\n    signature.LoadXml(xmlSignatures[0]);\n\n    signature.Verify()\n        .then(function (res) {\n            var info = [];\n            info.push(\"Signature valid: \" + res.toString());\n            info.push(\"=================================\");\n            var si = signature.XmlSignature.SignedInfo;\n            info.push(\"Signature method: \" + si.SignatureMethod.Algorithm);\n            info.push(\"Canonicalization method: \" + si.CanonicalizationMethod.Algorithm);\n            info.push(\"References:\");\n            si.References.ForEach(function (ref, index) {\n                info.push(\"  Reference #\" + (index + 1));\n                ref.Type && info.push(\"    Type: \" + ref.Type);\n                ref.Uri && info.push(\"    Uri: \" + ref.Uri);\n                info.push(\"    Digest method: \" + ref.DigestMethod.Algorithm);\n                ref.Transforms.ForEach(function (transform) {\n                    info.push(\"    Transform: \" + transform.Algorithm);\n                });\n            });\n\n            var ssp = signature.SignedProperties.SignedSignatureProperties;\n            info.push(\"Signed signature properties:\");\n            info.push(\"  Signing time: \" + ssp.SigningTime.Value);\n            if (ssp.SigningCertificate.Count) {\n                info.push(\"Signing certificate:\");\n                ssp.SigningCertificate.ForEach(function (cert) {\n                    info.push(\"  Issuer name: \" + cert.IssuerSerial.X509IssuerName);\n                    info.push(\"  Serial number: \" + cert.IssuerSerial.X509SerialNumber);\n                    info.push(\"  Digest method: \" + cert.CertDigest.DigestMethod.Algorithm);\n                    info.push(\"  Digest: \" + XAdES.Convert.ToHex(cert.CertDigest.DigestValue));\n                });\n            }\n            if (ssp.SignatureProductionPlace.Element) {\n                info.push(\"  Production place:\");\n                ssp.SignatureProductionPlace.CountryName && info.push(\"    Country:\" + ssp.SignatureProductionPlace.CountryName);\n                ssp.SignatureProductionPlace.StateOrProvince && info.push(\"    State or province:\" + ssp.SignatureProductionPlace.StateOrProvince);\n                ssp.SignatureProductionPlace.City && info.push(\"    City:\" + ssp.SignatureProductionPlace.City);\n                ssp.SignatureProductionPlace.PostalCode && info.push(\"    Post code:\" + ssp.SignatureProductionPlace.PostalCode);\n            }\n            if (ssp.SignaturePolicyIdentifier.Element) {\n                info.push(\"  Signature policy identifier:\");\n                var spi = ssp.SignaturePolicyIdentifier;\n                spi.SignaturePolicyImplied && info.push(\"    Implied: true\");\n                spi.SignaturePolicyId.Element && info.push(\"    Id: true\");\n            }\n            if (signature.SignedProperties.SignedDataObjectProperties.Element) {\n                info.push(\"Signed data object properties:\");\n                var sdop = signature.SignedProperties.SignedDataObjectProperties;\n                sdop.DataObjectFormats.Count && info.push(\"  Data object format count: \" + sdop.DataObjectFormats.Count);\n                sdop.CommitmentTypeIndications.Count && info.push(\"  Commitment type indication count: \" + sdop.CommitmentTypeIndications.Count);\n                sdop.AllDataObjectsTimeStamps.Count && info.push(\"  All data objects TimeStamp count: \" + sdop.AllDataObjectsTimeStamps.Count);\n                sdop.IndividualDataObjectsTimeStamps.Count && info.push(\"  Individual data objects TimeStamp count: \" + sdop.IndividualDataObjectsTimeStamps.Count);\n            }\n            if (signature.UnsignedProperties.Element) {\n                info.push(\"Unsigned properties: true\");\n            }\n            $info.textContent = info.join(\"\\n\");\n        })\n        .catch(function (e) {\n            error(e);\n        });\n}\n"
  },
  {
    "path": "examples/html/verify.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>XAdES</title>\n    <style>\n        textarea {\n            width: 100%;\n        }\n    </style>\n<script src=\"src/helper.js\"></script>\n<script src=\"src/main.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/promise.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/webcrypto-liner.min.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/asmcrypto.js\"></script>\n<script src=\"https://peculiarventures.github.io/pv-webcrypto-tests/src/elliptic.js\"></script>\n<script src=\"../../dist/xades.js\"></script>\n</head>\n\n<body>\n    <h2>XAdES::Verify</h2>\n    <div>\n        <div>\n            <h4>Enveloped XAdES signature</h4>\n            <textarea id=\"xml\" cols=\"30\" rows=\"10\" value=\"\"></textarea>\n\n            <input type=\"button\" value=\"Verify\" onclick=\"verify()\">\n        </div>\n        <div id=\"result\">\n            <h3>Result</h3>\n            <pre><code id=\"signature_info\"></code></pre>\n        </div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"xadesjs\",\n  \"version\": \"2.4.4\",\n  \"description\": \"A pure Typescript/Javascript implementation of XAdES based on XMLDSIGjs.\",\n  \"main\": \"build/index.js\",\n  \"types\": \"build/types/index.d.ts\",\n  \"module\": \"build/index.es.js\",\n  \"unpkg\": \"build/xades.js\",\n  \"unpkgMin\": \"build/xades.min.js\",\n  \"scripts\": {\n    \"prepare\": \"npm run build\",\n    \"test\": \"mocha\",\n    \"clear\": \"rimraf build/*\",\n    \"build\": \"npm run build:module && npm run build:types\",\n    \"build:module\": \"rollup -c\",\n    \"build:types\": \"tsc -p tsconfig.types.json\",\n    \"rebuild\": \"npm run clear && npm run build\",\n    \"lint\": \"eslint\",\n    \"prepub\": \"npm run lint && npm run build\",\n    \"postpub\": \"git push && git push --tags origin master\",\n    \"pub\": \"npm version patch && npm publish\",\n    \"prepub:next\": \"npm run lint && npm run build\",\n    \"pub:next\": \"npm version prerelease --preid=next && npm publish --tag next\",\n    \"postpub:next\": \"git push\",\n    \"sync\": \"git ac && git pull --rebase && git push\",\n    \"coverage\": \"nyc npm test\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/PeculiarVentures/xadesjs.git\"\n  },\n  \"keywords\": [\n    \"xml\",\n    \"xmldsig\",\n    \"xades\",\n    \"webcrypto\",\n    \"signature\",\n    \"rsa\",\n    \"ec\"\n  ],\n  \"author\": \"Peculiar Ventures, Inc.\",\n  \"contributors\": [\n    \"Miroshin Stepan<microshine@mail.ru>\"\n  ],\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/PeculiarVentures/xadesjs/issues\"\n  },\n  \"homepage\": \"https://github.com/PeculiarVentures/xadesjs#readme\",\n  \"dependencies\": {\n    \"xml-core\": \"^1.1.4\",\n    \"xmldsigjs\": \"^2.5.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.17.10\",\n    \"@babel/plugin-proposal-class-properties\": \"^7.16.7\",\n    \"@babel/plugin-proposal-object-rest-spread\": \"^7.17.3\",\n    \"@babel/preset-env\": \"^7.17.10\",\n    \"@peculiar/eslint-config-base\": \"^0.2.5\",\n    \"@peculiar/webcrypto\": \"^1.3.3\",\n    \"@rollup/plugin-node-resolve\": \"^13.3.0\",\n    \"@types/dateformat\": \"^5.0.0\",\n    \"@types/mocha\": \"^9.1.1\",\n    \"@types/node\": \"^17.0.31\",\n    \"@xmldom/xmldom\": \"^0.8.2\",\n    \"mocha\": \"^10.0.0\",\n    \"nyc\": \"^15.1.0\",\n    \"rollup\": \"^2.72.1\",\n    \"rollup-plugin-babel\": \"^4.4.0\",\n    \"rollup-plugin-commonjs\": \"^10.1.0\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"rollup-plugin-typescript2\": \"^0.31.2\",\n    \"ts-node\": \"^10.7.0\",\n    \"tslib\": \"^2.4.0\",\n    \"typescript\": \"^4.6.4\"\n  },\n  \"nyc\": {\n    \"extension\": [\n      \".ts\",\n      \".tsx\"\n    ],\n    \"include\": [\n      \"src/**/*.ts\"\n    ],\n    \"exclude\": [\n      \"**/*.d.ts\"\n    ],\n    \"reporter\": [\n      \"lcov\"\n    ]\n  },\n  \"mocha\": {\n    \"require\": \"ts-node/register\",\n    \"extension\": [\n      \"ts\"\n    ],\n    \"spec\": [\n      \"test/**/*.ts\"\n    ]\n  }\n}\n"
  },
  {
    "path": "rollup.config.js",
    "content": "import resolve from '@rollup/plugin-node-resolve';\nimport babel from 'rollup-plugin-babel';\nimport commonjs from 'rollup-plugin-commonjs';\nimport typescript from 'rollup-plugin-typescript2';\nimport { terser } from 'rollup-plugin-terser';\nimport pkg from './package.json';\n\nconst banner = [].join('\\n');\nconst input = 'src/index.ts';\nconst external = Object.keys(pkg.dependencies)\n  .concat(['events']);\n\n// main\nconst main = {\n  input,\n  plugins: [\n    typescript({\n      check: true,\n      clean: true,\n      tsconfigOverride: { compilerOptions: { module: 'ES2015' } },\n    }),\n  ],\n  external,\n  output: [\n    {\n      banner,\n      file: pkg.main,\n      format: 'cjs',\n    },\n    {\n      banner,\n      file: pkg.module,\n      format: 'es',\n    },\n  ],\n};\n\nconst browserExternals = {\n  '@xmldom/xmldom': 'self',\n  xpath: 'self',\n};\n\nconst browser = [\n  {\n    input,\n    plugins: [\n      resolve({\n        mainFields: ['esnext', 'module', 'main'],\n        preferBuiltins: true,\n      }),\n      commonjs(),\n      typescript({\n        check: true,\n        clean: true,\n        tsconfigOverride: { compilerOptions: { module: 'es2015' } },\n      }),\n    ],\n    external: Object.keys(browserExternals),\n    output: [\n      {\n        file: pkg.unpkg,\n        format: 'es',\n        globals: browserExternals,\n      },\n    ],\n  },\n  {\n    input: pkg.unpkg,\n    external: Object.keys(browserExternals),\n    plugins: [\n      babel({\n        babelrc: false,\n        runtimeHelpers: true,\n        compact: false,\n        comments: false,\n        presets: [\n          ['@babel/env', {\n            targets: {\n              ie: '11',\n              chrome: '60',\n            },\n            useBuiltIns: 'entry',\n            corejs: 3,\n          }],\n        ],\n        plugins: [\n          ['@babel/plugin-proposal-class-properties'],\n          ['@babel/proposal-object-rest-spread'],\n        ],\n      }),\n    ],\n    output: [\n      {\n        banner,\n        file: pkg.unpkg,\n        globals: browserExternals,\n        format: 'iife',\n        name: 'XAdES',\n      },\n      {\n        banner,\n        file: pkg.unpkgMin,\n        globals: browserExternals,\n        format: 'iife',\n        name: 'XAdES',\n        plugins: [\n          terser(),\n        ],\n      },\n    ],\n  },\n];\n\nexport default [\n  main,\n  ...browser,\n];\n"
  },
  {
    "path": "src/dateformat.ts",
    "content": "/*\n * Date Format 3.0.2\n * (c) 2007-2009 Steven Levithan <stevenlevithan.com>\n * MIT license\n *\n * Includes enhancements by Scott Trenda <scott.trenda.net>\n * and Kris Kowal <cixar.com/~kris.kowal/>\n *\n * Accepts a date, a mask, or a date and a mask.\n * Returns a formatted version of the given date.\n * The date defaults to the current date/time.\n * The mask defaults to dateFormat.masks.default.\n */\n\nconst token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZWN]|\"[^\"]*\"|'[^']*'/g;\nconst timezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;\nconst timezoneClip = /[^-+\\dA-Z]/g;\n\nexport function dateFormat(date: any, mask: string, utc?: boolean, gmt?: boolean) {\n  // You can't provide utc if you skip other args (use the 'UTC:' mask prefix)\n  if (arguments.length === 1 && kindOf(date) === 'string' && !/\\d/.test(date)) {\n    mask = date;\n    date = undefined;\n  }\n\n  date = date || new Date();\n\n  if (!(date instanceof Date)) {\n    date = new Date(date);\n  }\n\n  if (isNaN(date)) {\n    throw TypeError('Invalid date');\n  }\n\n  mask = String(masks[mask] || mask || masks.default);\n\n  // Allow setting the utc/gmt argument via the mask\n  const maskSlice = mask.slice(0, 4);\n\n  if (maskSlice === 'UTC:' || maskSlice === 'GMT:') {\n    mask = mask.slice(4);\n    utc = true;\n    if (maskSlice === 'GMT:') {\n      gmt = true;\n    }\n  }\n\n  const _ = utc ? 'getUTC' : 'get';\n  const d = date[_ + 'Date']();\n  const D = date[_ + 'Day']();\n  const m = date[_ + 'Month']();\n  const y = date[_ + 'FullYear']();\n  const H = date[_ + 'Hours']();\n  const M = date[_ + 'Minutes']();\n  const s = date[_ + 'Seconds']();\n  const L = date[_ + 'Milliseconds']();\n  const o = utc ? 0 : date.getTimezoneOffset();\n  const W = getWeek(date);\n  const N = getDayOfWeek(date);\n  const flags: any = {\n    d,\n    dd: pad(d),\n    ddd: i18n.dayNames[D],\n    dddd: i18n.dayNames[D + 7],\n    m: m + 1,\n    mm: pad(m + 1),\n    mmm: i18n.monthNames[m],\n    mmmm: i18n.monthNames[m + 12],\n    yy: String(y).slice(2),\n    yyyy: y,\n    h: H % 12 || 12,\n    hh: pad(H % 12 || 12),\n    H,\n    HH: pad(H),\n    M,\n    MM: pad(M),\n    s,\n    ss: pad(s),\n    l: pad(L, 3),\n    L: pad(Math.round(L / 10)),\n    t: H < 12 ? i18n.timeNames[0] : i18n.timeNames[1],\n    tt: H < 12 ? i18n.timeNames[2] : i18n.timeNames[3],\n    T: H < 12 ? i18n.timeNames[4] : i18n.timeNames[5],\n    TT: H < 12 ? i18n.timeNames[6] : i18n.timeNames[7],\n    // eslint-disable-next-line no-nested-ternary\n    Z: gmt\n      ? 'GMT'\n      : utc\n        ? 'UTC'\n        : (String(date).match(timezone) || ['']).pop()?.replace(timezoneClip, ''),\n    o: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n    // S: [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10],\n    W,\n    N,\n  };\n\n  return mask.replace(token, (match) => {\n    if (match in flags) {\n      return flags[match];\n    }\n\n    return match.slice(1, match.length - 1);\n  });\n}\n\nconst masks: Record<string, string> = {\n  default: 'ddd mmm dd yyyy HH:MM:ss',\n  shortDate: 'm/d/yy',\n  mediumDate: 'mmm d, yyyy',\n  longDate: 'mmmm d, yyyy',\n  fullDate: 'dddd, mmmm d, yyyy',\n  shortTime: 'h:MM TT',\n  mediumTime: 'h:MM:ss TT',\n  longTime: 'h:MM:ss TT Z',\n  isoDate: 'yyyy-mm-dd',\n  isoTime: 'HH:MM:ss',\n  isoDateTime: 'yyyy-mm-dd\\'T\\'HH:MM:sso',\n  isoUtcDateTime: 'UTC:yyyy-mm-dd\\'T\\'HH:MM:ss\\'Z\\'',\n  expiresHeaderFormat: 'ddd, dd mmm yyyy HH:MM:ss Z',\n};\n\n// Internationalization strings\nconst i18n = {\n  dayNames: [\n    'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',\n    'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday',\n  ],\n  monthNames: [\n    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December',\n  ],\n  timeNames: [\n    'a', 'p', 'am', 'pm', 'A', 'P', 'AM', 'PM',\n  ],\n};\n\nfunction pad(val: any, len = 2) {\n  val = String(val);\n  while (val.length < len) {\n    val = '0' + val;\n  }\n\n  return val;\n}\n\n/**\n * Get the ISO 8601 week number\n * Based on comments from\n * http://techblog.procurios.nl/k/n618/news/view/33796/14863/Calculate-ISO-8601-week-and-year-in-javascript.html\n * @param {Object} `date`\n * @return {Number}\n */\nfunction getWeek(date: Date) {\n  // Remove time components of date\n  const targetThursday = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\n  // Change date to Thursday same week\n  targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3);\n\n  // Take January 4th as it is always in week 1 (see ISO 8601)\n  const firstThursday = new Date(targetThursday.getFullYear(), 0, 4);\n\n  // Change date to Thursday same week\n  firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3);\n\n  // Check if daylight-saving-time-switch occurred and correct for it\n  const ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset();\n\n  targetThursday.setHours(targetThursday.getHours() - ds);\n\n  // Number of weeks between target Thursday and first Thursday\n  const weekDiff = (targetThursday.getTime() - firstThursday.getTime()) / (86400000 * 7);\n\n  return 1 + Math.floor(weekDiff);\n}\n\n/**\n * Get ISO-8601 numeric representation of the day of the week\n * 1 (for Monday) through 7 (for Sunday)\n * @param {Object} `date`\n * @return {Number}\n */\nfunction getDayOfWeek(date: Date) {\n  let dow = date.getDay();\n\n  if (dow === 0) {\n    dow = 7;\n  }\n\n  return dow;\n}\n\n/**\n * kind-of shortcut\n * @param {*} val\n * @return {String}\n */\nfunction kindOf(val: any) {\n  if (val === null) {\n    return 'null';\n  }\n\n  if (val === undefined) {\n    return 'undefined';\n  }\n\n  if (typeof val !== 'object') {\n    return typeof val;\n  }\n\n  if (Array.isArray(val)) {\n    return 'array';\n  }\n\n  return {}.toString.call(val)\n    .slice(8, -1).toLowerCase();\n}\n"
  },
  {
    "path": "src/index.ts",
    "content": "export * as xml from './xml';\nexport * from './signed_xml';\n\nexport { Application } from 'xmldsigjs';\nexport {\n  Select, Parse, Convert,\n} from 'xml-core';\n"
  },
  {
    "path": "src/signed_xml.ts",
    "content": "import * as XmlCore from 'xml-core';\nimport * as XmlDSigJs from 'xmldsigjs';\nimport * as XAdES from './xml';\n\nconst XADES_REFERENCE_TYPE = 'http://uri.etsi.org/01903#SignedProperties';\n\nexport interface OptionsSignerRole {\n  claimed?: string[];\n  certified?: string[];\n}\n\nexport interface OptionsProductionPlace {\n  city?: string;\n  state?: string;\n  code?: string;\n  country?: string;\n}\n\nexport interface OptionsNoticeReference {\n  organization: string;\n  noticeNumbers: number[];\n}\n\nexport interface OptionsPolicyUserNotice {\n  noticeRef?: OptionsNoticeReference;\n  explicitText?: string;\n}\n\nexport interface OptionsPolicyIdentifier {\n  qualifier?: XAdES.IdentifierQualifier;\n  value: string;\n  description?: string;\n  references?: string[];\n}\n\nexport interface OptionsPolicyId {\n  identifier: OptionsPolicyIdentifier;\n  transforms?: XmlDSigJs.OptionsSignTransform[];\n  hash: AlgorithmIdentifier;\n  digestValue?: string;\n  qualifiers?: (OptionsPolicyUserNotice | string)[];\n}\n\nexport interface OptionsSigningTime {\n  /**\n   * Signing time value. Default value if now\n   */\n  value?: Date;\n\n  /**\n   * Format of the signing time. Default format is ISO\n   */\n  format?: string;\n}\n\nexport interface OptionsSigningCertificate {\n  certificate: string;\n  digestAlgorithm?: AlgorithmIdentifier;\n}\n\nexport interface OptionsSigningCertificateV2 {\n  certificate: string;\n  digestAlgorithm?: AlgorithmIdentifier;\n}\n\n// eslint-disable-next-line import/namespace\nexport interface OptionsXAdES extends XmlDSigJs.OptionsSign {\n\n  /**\n   * Sets a certificate of signer for signature. Optional\n   */\n  signingCertificate?: string | OptionsSigningCertificate;\n\n  /**\n   * Sets a certificate of signer for signature. Optional\n   */\n  signingCertificateV2?: string | OptionsSigningCertificateV2;\n\n  /**\n   * Sets signing time options\n   */\n  signingTime?: OptionsSigningTime;\n\n  policy?: OptionsPolicyId | boolean;\n  productionPlace?: OptionsProductionPlace;\n  signerRole?: OptionsSignerRole;\n}\n\nexport class SignedXml extends XmlDSigJs.SignedXml {\n  protected properties: XAdES.QualifyingProperties | null = null;\n\n  get Properties(): XAdES.QualifyingProperties | null {\n    return this.properties;\n  }\n\n  get SignedProperties(): XAdES.SignedProperties {\n    if (!this.Properties) {\n      throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'Properties is empty');\n    }\n\n    return this.Properties.SignedProperties;\n  }\n\n  get UnsignedProperties(): XAdES.UnsignedProperties {\n    if (!this.Properties) {\n      throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'Properties is empty');\n    }\n\n    return this.Properties.UnsignedProperties;\n  }\n\n  constructor(node?: Document | Element) {\n    super(node);\n\n    this.CreateQualifyingProperties();\n  }\n\n  // #region Public methods\n\n  public LoadXml(value: Element | string) {\n    super.LoadXml(value as string);\n\n    let properties: XAdES.QualifyingProperties | null = null;\n\n    this.XmlSignature.ObjectList.Some((item) => {\n      if (item.Element) {\n        // Looking for <QualifyingProperties>\n        for (let i = 0; i < item.Element.childNodes.length; i++) {\n          const node = item.Element.childNodes.item(i);\n\n          if (node.nodeType === XmlCore.XmlNodeType.Element\n            && (node as Element).localName === XAdES.XmlXades.ElementNames.QualifyingProperties) {\n            properties = XAdES.QualifyingProperties.LoadXml(node as Element);\n\n            return true;\n          }\n        }\n      }\n\n      return false;\n    });\n\n    this.properties = properties;\n  }\n\n  public async Sign(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    algorithm: Algorithm,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    key: CryptoKey,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    data: Document | XmlDSigJs.DigestReferenceSource,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    options?: OptionsXAdES,\n  ) {\n    // eslint-disable-next-line prefer-rest-params\n    return super.Sign.apply(this, arguments as any);\n  }\n\n  // #endregion\n\n  // #region Protected methods\n\n  protected CreateQualifyingProperties() {\n    if (this.Properties) {\n      throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'Cannot create QualifyingProperties cause current signature has got one. You must create CounterSignature');\n    }\n\n    const rnd = XmlDSigJs.Application.crypto.getRandomValues(new Uint8Array(6)) as Uint8Array;\n    const id = XmlCore.Convert.ToHex(rnd);\n\n    this.XmlSignature.Id ||= `id-${id}`;\n    const dataObject = new XAdES.DataObject();\n\n    dataObject.QualifyingProperties.Target = `#${this.XmlSignature.Id}`;\n    dataObject.QualifyingProperties.SignedProperties.Id ||= `xades-${this.XmlSignature.Id}`;\n\n    this.properties = dataObject.QualifyingProperties;\n    this.XmlSignature.ObjectList.Add(dataObject);\n  }\n\n  protected async ApplySignOptions(\n    signature: XmlDSigJs.Signature,\n    algorithm: Algorithm,\n    key: CryptoKey,\n    options: OptionsXAdES,\n  ) {\n    await super.ApplySignOptions(signature, algorithm, key, options);\n    if (this.Properties) {\n      const sigProps = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      // #region Add SigningTime\n      sigProps.SigningTime.Value = new Date();\n      if (options.signingTime) {\n        if (options.signingTime.value) {\n          sigProps.SigningTime.Value = options.signingTime.value;\n        }\n\n        if (options.signingTime.format) {\n          sigProps.SigningTime.Format = options.signingTime.format;\n        }\n      }\n      // #endregion\n\n      // Add reference for SignedProperties\n      const signingAlg = XmlCore.assign({}, algorithm, key.algorithm);\n      const xadesRefHash = signingAlg.hash;\n      const xadesRef = new XmlDSigJs.Reference();\n\n      xadesRef.Type = XADES_REFERENCE_TYPE;\n      xadesRef.Uri = `#${this.Properties.SignedProperties.Id}`;\n      xadesRef.DigestMethod.Algorithm = XmlDSigJs.CryptoConfig\n        .GetHashAlgorithm(xadesRefHash).namespaceURI;\n\n      signature.SignedInfo.References.Add(xadesRef);\n\n      await this.ApplySigningCertificate(options.signingCertificate);\n      await this.ApplySigningCertificateV2(options.signingCertificateV2);\n      await this.ApplySignaturePolicyIdentifier(options.policy);\n      this.ApplySignatureProductionPlace(options.productionPlace);\n      this.ApplySignerRoles(options.signerRole);\n    }\n  }\n\n  protected async ApplySigningCertificate(value?: string | OptionsSigningCertificate) {\n    if (this.Properties && value) {\n      const options: OptionsSigningCertificate = typeof value === 'string'\n        ? { certificate: value }\n        : value;\n\n      if (!options.digestAlgorithm) {\n        options.digestAlgorithm = 'SHA-256'; // set default alg if required\n      }\n\n      const raw = XmlCore.Convert.FromBase64(options.certificate);\n      const cert = new XmlDSigJs.X509Certificate(raw);\n\n      const ssp = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      if (ssp.SigningCertificate.Count) {\n        throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'Signature can contain only one SigningCertificate');\n      }\n\n      const signingCertificate = new XAdES.Cert();\n\n      signingCertificate.IssuerSerial.X509IssuerName = cert.Issuer;\n      signingCertificate.IssuerSerial.X509SerialNumber = cert.SerialNumber;\n\n      const alg = XmlDSigJs.CryptoConfig.GetHashAlgorithm(options.digestAlgorithm);\n\n      signingCertificate.CertDigest.DigestMethod.Algorithm = alg.namespaceURI;\n      signingCertificate.CertDigest.DigestValue = new Uint8Array(\n        await cert.Thumbprint(alg.algorithm.name),\n      );\n\n      this.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Add(\n        signingCertificate,\n      );\n    }\n  }\n\n  protected async ApplySigningCertificateV2(value?: string | OptionsSigningCertificateV2) {\n    if (this.Properties && value) {\n      const options: OptionsSigningCertificate = typeof value === 'string'\n        ? { certificate: value }\n        : value;\n\n      if (!options.digestAlgorithm) {\n        options.digestAlgorithm = 'SHA-256'; // set default alg if required\n      }\n\n      const raw = XmlCore.Convert.FromBase64(options.certificate);\n      const cert = new XmlDSigJs.X509Certificate(raw);\n\n      const ssp = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      if (ssp.SigningCertificateV2.Count) {\n        throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'Signature can contain only one SigningCertificateV2');\n      }\n\n      const signingCertificate = new XAdES.CertV2();\n      // TODO: base64 encoded DER of IssuerSerial as defined by IETF RFC 5035\n      // signingCertificate.IssuerSerial\n\n      const alg = XmlDSigJs.CryptoConfig.GetHashAlgorithm(options.digestAlgorithm);\n\n      signingCertificate.CertDigest.DigestMethod.Algorithm = alg.namespaceURI;\n      signingCertificate.CertDigest.DigestValue = new Uint8Array(\n        await cert.Thumbprint(alg.algorithm.name),\n      );\n\n      this.Properties.SignedProperties.SignedSignatureProperties.SigningCertificateV2.Add(\n        signingCertificate,\n      );\n    }\n  }\n\n  protected async ApplySignaturePolicyIdentifier(options?: OptionsPolicyId | boolean) {\n    if (this.Properties) {\n      const ssp = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      if (options && typeof options === 'object') {\n        const policyId = new XAdES.SignaturePolicyId();\n\n        policyId.SigPolicyId = new XAdES.SigPolicyId();\n        policyId.SigPolicyId.Identifier = new XAdES.Identifier();\n        if (options.identifier.qualifier) {\n          policyId.SigPolicyId.Identifier.Qualifier = options.identifier.qualifier;\n        }\n\n        policyId.SigPolicyId.Identifier.Value = options.identifier.value;\n        if (options.identifier.description) {\n          policyId.SigPolicyId.Description = options.identifier.description;\n        }\n\n        if (options.identifier.references) {\n          policyId.SigPolicyId.DocumentationReferences = new XAdES.DocumentationReferences();\n          options.identifier.references.forEach((referenceValue) => {\n            const reference = new XAdES.DocumentationReference();\n\n            reference.Uri = referenceValue;\n            policyId.SigPolicyId.DocumentationReferences.Add(reference);\n          });\n        }\n\n        if (options.transforms && options.transforms.length) {\n          policyId.Transforms = new XmlDSigJs.Transforms();\n          options.transforms.forEach((transform) => {\n            policyId.Transforms.Add(this.ResolveTransform(transform));\n          });\n        }\n\n        policyId.SigPolicyHash = new XAdES.SigPolicyHash();\n        policyId.SigPolicyHash.DigestMethod = new XmlDSigJs.DigestMethod();\n        const digestAlgorithm = XmlDSigJs.CryptoConfig.GetHashAlgorithm(options.hash);\n\n        policyId.SigPolicyHash.DigestMethod.Algorithm = digestAlgorithm.namespaceURI;\n        if (options.digestValue) {\n          policyId.SigPolicyHash.DigestValue = XmlCore.Convert.FromBase64(options.digestValue);\n        } else {\n          const identifierDoc = policyId.SigPolicyId.Identifier\n            .GetXml()?.cloneNode(true) as Element;\n\n          this.CopyNamespaces(identifierDoc, identifierDoc, true);\n          this.InjectNamespaces(this.GetSignatureNamespaces(), identifierDoc, true);\n          let identifierContent: any = null;\n\n          if (policyId.Transforms && policyId.Transforms.Count) {\n            identifierContent = this.ApplyTransforms(policyId.Transforms, identifierDoc);\n          } else {\n            const c14n = new XmlDSigJs.XmlDsigC14NTransform();\n\n            c14n.LoadInnerXml(identifierDoc);\n            identifierContent = c14n.GetOutput();\n          }\n\n          policyId.SigPolicyHash.DigestValue = await digestAlgorithm.Digest(identifierContent);\n        }\n\n        if (options.qualifiers) {\n          policyId.SigPolicyQualifiers = new XAdES.SigPolicyQualifiers();\n          options.qualifiers.forEach((qualifierValue) => {\n            const container = new XAdES.SigPolicyQualifier();\n\n            if (typeof qualifierValue === 'string') {\n              const qualifier = new XAdES.SPURI();\n\n              qualifier.Value = qualifierValue;\n              container.Add(qualifier);\n            } else {\n              const qualifier = new XAdES.SPUserNotice();\n\n              if (qualifierValue.explicitText) {\n                qualifier.ExplicitText = qualifierValue.explicitText;\n              }\n\n              if (qualifierValue.noticeRef) {\n                qualifier.NoticeRef = new XAdES.NoticeReference();\n                qualifier.NoticeRef.Organization = qualifierValue.noticeRef.organization;\n                qualifier.NoticeRef.NoticeNumbers = new XAdES.IntegerList();\n                if (qualifierValue.noticeRef.noticeNumbers) {\n                  qualifierValue.noticeRef.noticeNumbers.forEach((numberValue) => {\n                    const noticeNumber = new XAdES.Integer();\n\n                    noticeNumber.Value = numberValue;\n                    qualifier.NoticeRef.NoticeNumbers.Add(noticeNumber);\n                  });\n                }\n              }\n\n              container.Add(qualifier);\n            }\n\n            policyId.SigPolicyQualifiers.Add(container);\n          });\n        }\n\n        ssp.SignaturePolicyIdentifier.SignaturePolicyId = policyId;\n        ssp.SignaturePolicyIdentifier.SignaturePolicyImplied = false;\n      } else if (options) {\n        ssp.SignaturePolicyIdentifier.SignaturePolicyImplied = true;\n      }\n    }\n  }\n\n  protected ApplySignatureProductionPlace(options?: OptionsProductionPlace) {\n    if (this.Properties && options) {\n      const ssp = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      if (options.city) {\n        ssp.SignatureProductionPlace.City = options.city;\n      }\n\n      if (options.code) {\n        ssp.SignatureProductionPlace.PostalCode = options.code;\n      }\n\n      if (options.country) {\n        ssp.SignatureProductionPlace.CountryName = options.country;\n      }\n\n      if (options.state) {\n        ssp.SignatureProductionPlace.StateOrProvince = options.state;\n      }\n    }\n  }\n\n  protected ApplySignerRoles(options?: OptionsSignerRole) {\n    if (this.Properties && options) {\n      const ssp = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      if (options.claimed) {\n        options.claimed.forEach((role) => {\n          const claimedRole = new XAdES.ClaimedRole();\n\n          claimedRole.Value = role;\n          ssp.SignerRole.ClaimedRoles.Add(claimedRole);\n        });\n      }\n\n      if (options.certified) {\n        options.certified.forEach((role) => {\n          const certifiedRole = new XAdES.CertifiedRole();\n\n          certifiedRole.Encoding = 'der';\n          certifiedRole.Value = XmlCore.Convert.FromBase64(role);\n          ssp.SignerRole.CertifiedRoles.Add(certifiedRole);\n        });\n      }\n    }\n  }\n\n  protected async VerifySigningCertificate() {\n    let x509: XmlDSigJs.X509Certificate | null = null;\n\n    if (this.XmlSignature && this.Properties) {\n      const ssp = this.Properties.SignedProperties.SignedSignatureProperties;\n\n      if (ssp.SigningCertificate.Count !== 1) {\n        throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'Signature has got wrong amount of SigningCertificate, MUST be one');\n      }\n\n      // find certificate by Thumbprint\n      const alg = XmlDSigJs.CryptoConfig.GetHashAlgorithm('SHA-256');\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const signingCertificate = ssp.SigningCertificate.Item(0)!;\n      const b64CertDigest = XmlCore.Convert.ToBase64(signingCertificate.CertDigest.DigestValue);\n      const keyInfos = this.XmlSignature.KeyInfo;\n\n      for (let i = 0; i < keyInfos.Count, !x509; i++) {\n        const item = keyInfos.Item(i);\n\n        if (item instanceof XmlDSigJs.KeyInfoX509Data) {\n          const certs = item.Certificates;\n\n          for (let j = 0; j < certs.length, !x509; j++) {\n            const cert = certs[j];\n\n            if (!cert) {\n              continue;\n            }\n\n            const hash = new Uint8Array(await cert.Thumbprint(alg.algorithm as any));\n            const b64Hash = XmlCore.Convert.ToBase64(hash);\n\n            if (b64Hash === b64CertDigest) {\n              x509 = cert;\n            }\n          }\n        }\n      }\n\n      if (!(\n        x509\n        && x509.Issuer === signingCertificate.IssuerSerial.X509IssuerName\n        && x509.SerialNumber === signingCertificate.IssuerSerial.X509SerialNumber\n      )) {\n        throw new XmlCore.XmlError(XmlCore.XE.XML_EXCEPTION, 'SigningCertificate not found');\n      }\n    }\n\n    return x509;\n  }\n\n  // #endregion\n}\n"
  },
  {
    "path": "src/xml/any.ts",
    "content": "import { XmlContent, XmlElement } from 'xml-core';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n * <xsd:element name=\"Any\" type=\"AnyType\"/>\n * <xsd:complexType name=\"AnyType\" mixed=\"true\">\n *   <xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n *     <xsd:any namespace=\"##any\" processContents=\"lax\"/>\n *   </xsd:sequence>\n *   <xsd:anyAttribute namespace=\"##any\"/>\n * </xsd:complexType>\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.Any })\nexport class Any extends XadesObject {\n  @XmlContent()\n  public Value: string;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.Any })\nexport class AnyCollection extends XadesCollection<XadesObject> { }\n"
  },
  {
    "path": "src/xml/certificate_values.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { Any } from './any';\nimport { EncapsulatedPKIData } from './encapsulated_pki_data';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"CertificateValues\" type=\"CertificateValuesType\"/>\n * <xsd:complexType name=\"CertificateValuesType\">\n *     <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n *         <xsd:element name=\"EncapsulatedX509Certificate\" type=\"EncapsulatedPKIDataType\"/>\n *         <xsd:element name=\"OtherCertificate\" type=\"AnyType\"/>\n *     </xsd:choice>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.OtherCertificate })\nexport class OtherCertificate extends Any { }\n\n@XmlElement({\n  localName: 'OtherCertificateCollection', parser: OtherCertificate,\n})\nexport class OtherCertificateCollection extends XadesCollection<OtherCertificate> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.EncapsulatedX509Certificate })\nexport class EncapsulatedX509Certificate extends EncapsulatedPKIData { }\n\n@XmlElement({\n  localName: 'EncapsulatedX509CertificateCollection', parser: EncapsulatedX509Certificate,\n})\nexport class EncapsulatedX509CertificateCollection\n  extends XadesCollection<EncapsulatedX509Certificate> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.CertificateValues })\nexport class CertificateValues extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({\n    parser: EncapsulatedX509CertificateCollection, noRoot: true,\n  })\n  public EncapsulatedX509Certificates: EncapsulatedX509CertificateCollection;\n\n  @XmlChildElement({\n    parser: OtherCertificateCollection, noRoot: true,\n  })\n  public OtherCertificates: OtherCertificateCollection;\n}\n"
  },
  {
    "path": "src/xml/commitment_type_indication.ts",
    "content": "import {\n  XmlChildElement, XmlContent, XmlElement,\n  IConverter,\n} from 'xml-core';\nimport { Any } from './any';\nimport { ObjectIdentifier } from './object_identifier';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"CommitmentTypeIndication\" type=\"CommitmentTypeIndicationType\"/>\n * <xsd:complexType name=\"CommitmentTypeIndicationType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"CommitmentTypeId\" type=\"ObjectIdentifierType\"/>\n *     <xsd:choice>\n *       <xsd:element name=\"ObjectReference\" type=\"xsd:anyURI\" maxOccurs=\"unbounded\"/>\n *       <xsd:element name=\"AllSignedDataObjects\"/>\n *     </xsd:choice>\n *     <xsd:element\n *       name=\"CommitmentTypeQualifiers\"\n *       type=\"CommitmentTypeQualifiersListType\"\n *       minOccurs=\"0\"\n *     />\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"CommitmentTypeQualifiersListType\">\n *   <xsd:sequence>\n *     <xsd:element\n *       name=\"CommitmentTypeQualifier\"\n *       type=\"AnyType\"\n *       minOccurs=\"0\"\n *       maxOccurs=\"unbounded\"\n *     />\n *   </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.CommitmentTypeQualifier })\nexport class CommitmentTypeQualifier extends Any { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.CommitmentTypeQualifiers, parser: CommitmentTypeQualifier,\n})\nexport class CommitmentTypeQualifiers extends XadesCollection<CommitmentTypeQualifier> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.ObjectReference })\nexport class ObjectReference extends XadesObject {\n  @XmlContent({ required: true })\n  public Value: string;\n}\n\n@XmlElement({\n  localName: 'ObjectReferences', parser: ObjectReference,\n})\nexport class ObjectReferenceCollection extends XadesCollection<ObjectReference> { }\n\nconst XmlAllSignedDataObjectsConverter: IConverter<boolean> = {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  set: (value: string) => {\n    // if SignaturePolicyImplied exists then return true\n    return true;\n  },\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  get: (value: boolean) => {\n    return void 0;\n  },\n};\n\n@XmlElement({ localName: XmlXades.ElementNames.CommitmentTypeIndication })\nexport class CommitmentTypeIndication extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.CommitmentTypeId,\n    required: true,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    parser: ObjectIdentifier,\n  })\n  public CommitmentTypeId: ObjectIdentifier;\n\n  @XmlChildElement({\n    parser: ObjectReferenceCollection, noRoot: true,\n  })\n  public ObjectReference: ObjectReferenceCollection;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.AllSignedDataObjects,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    converter: XmlAllSignedDataObjectsConverter,\n    defaultValue: false,\n  })\n  public AllSignedDataObjects: boolean;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.CommitmentTypeQualifiers, parser: CommitmentTypeQualifier,\n  })\n  public CommitmentTypeQualifiers: CommitmentTypeQualifiers;\n}\n"
  },
  {
    "path": "src/xml/complete_certificate_refs.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { CertIDList } from './signing_certificate';\nimport { UnsignedSignatureProperty } from './unsigned_signature_properties';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"CompleteCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n * <xsd:complexType name=\"CompleteCertificateRefsType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"CertRefs\" type=\"CertIDListType\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.CompleteCertificateRefs })\nexport class CompleteCertificateRefs extends XadesObject implements UnsignedSignatureProperty {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.CertRefs, parser: CertIDList, required: true,\n  })\n  public CertRefs: CertIDList;\n}\n"
  },
  {
    "path": "src/xml/complete_revocation_refs.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n  XmlBase64Converter, XmlNumberConverter,\n} from 'xml-core';\nimport { Any } from './any';\nimport { XadesDateTime } from './date_time';\nimport { DigestAlgAndValueType } from './signing_certificate';\nimport { UnsignedSignatureProperty } from './unsigned_signature_properties';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"CompleteRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n * <xsd:complexType name=\"CompleteRevocationRefsType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"CRLRefs\" type=\"CRLRefsType\" minOccurs=\"0\"/>\n *         <xsd:element name=\"OCSPRefs\" type=\"OCSPRefsType\" minOccurs=\"0\"/>\n *         <xsd:element name=\"OtherRefs\" type=\"OtherCertStatusRefsType\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:complexType name=\"CRLRefsType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"CRLRef\" type=\"CRLRefType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"CRLRefType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"DigestAlgAndValue\" type=\"DigestAlgAndValueType\"/>\n *         <xsd:element name=\"CRLIdentifier\" type=\"CRLIdentifierType\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"CRLIdentifierType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"Issuer\" type=\"xsd:string\"/>\n *         <xsd:element name=\"IssueTime\" type=\"xsd:dateTime\"/>\n *         <xsd:element name=\"Number\" type=\"xsd:integer\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:complexType name=\"OCSPRefsType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"OCSPRef\" type=\"OCSPRefType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"OCSPRefType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"OCSPIdentifier\" type=\"OCSPIdentifierType\"/>\n *         <xsd:element name=\"DigestAlgAndValue\" type=\"DigestAlgAndValueType\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"ResponderIDType\">\n *     <xsd:choice>\n *         <xsd:element name=\"ByName\" type=\"xsd:string\"/>\n *         <xsd:element name=\"ByKey\" type=\"xsd:base64Binary\"/>\n *     </xsd:choice>\n * </xsd:complexType>\n * <xsd:complexType name=\"OCSPIdentifierType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"ResponderID\" type=\"ResponderIDType\"/>\n *         <xsd:element name=\"ProducedAt\" type=\"xsd:dateTime\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:complexType name=\"OtherCertStatusRefsType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"OtherRef\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.OtherRef })\nexport class OtherRef extends Any { }\n\n@XmlElement({ localName: XmlXades.ElementNames.OtherRefs })\nexport class OtherRefs extends XadesCollection<OtherRef> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.OCSPIdentifier })\nexport class ResponderID extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.ByName,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    required: true,\n  })\n  public ByName: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.ByKey,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    converter: XmlBase64Converter,\n    required: true,\n  })\n  public ByKey: Uint8Array;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.OCSPIdentifier })\nexport class OCSPIdentifier extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.URI, defaultValue: '',\n  })\n  public URI: string;\n\n  @XmlChildElement({\n    parser: ResponderID, required: true,\n  })\n  public ResponderID: ResponderID;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.IssueTime,\n    parser: XadesDateTime,\n    required: true,\n  })\n  public ProducedAt: XadesDateTime;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.OCSPRef })\nexport class OCSPRef extends XadesObject {\n  @XmlChildElement({ parser: OCSPIdentifier })\n  public OCSPIdentifier: OCSPIdentifier;\n\n  @XmlChildElement({\n    parser: DigestAlgAndValueType, required: true,\n  })\n  public DigestAlgAndValue: DigestAlgAndValueType;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.OCSPRefs })\nexport class OCSPRefs extends XadesCollection<OCSPRef> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.CRLIdentifier })\nexport class CRLIdentifier extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.URI, defaultValue: '',\n  })\n  public URI: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.Issuer,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    required: true,\n  })\n  public Issuer: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.IssueTime,\n    parser: XadesDateTime,\n    required: true,\n  })\n  public IssueTime: XadesDateTime;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.Number,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    converter: XmlNumberConverter,\n  })\n  public Number: number;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.CRLRef })\nexport class CRLRef extends XadesObject {\n  @XmlChildElement({\n    parser: DigestAlgAndValueType, required: true,\n  })\n  public DigestAlgAndValue: DigestAlgAndValueType;\n\n  @XmlChildElement({ parser: CRLIdentifier })\n  public CRLIdentifier: CRLIdentifier;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.CRLRefs })\nexport class CRLRefs extends XadesCollection<CRLRef> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.CompleteRevocationRefs })\nexport class CompleteRevocationRefs extends XadesObject implements UnsignedSignatureProperty {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: CRLRefs })\n  public CRLRefs: CRLRefs;\n\n  @XmlChildElement({ parser: OCSPRefs })\n  public OCSPRefs: OCSPRefs;\n\n  @XmlChildElement({ parser: OtherRefs })\n  public OtherRefs: OtherRefs;\n}\n"
  },
  {
    "path": "src/xml/converter.ts",
    "content": "import { IConverter } from 'xml-core';\n\nexport const XmlDateTimeConverter: IConverter<Date> = {\n  /**\n   * Converts value from Xml element to Date\n   * @memberOf XmlDateTimeConverter\n   */\n  set: (value: string) => new Date(value),\n\n  /**\n   * Converts value from Date to Xml element\n   * @memberOf XmlDateTimeConverter\n   */\n  get: (value: Date) => {\n    if (value) {\n      return value.toISOString();\n    }\n\n    return undefined;\n  },\n};\n"
  },
  {
    "path": "src/xml/counter_signature.ts",
    "content": "import { XmlChildElement, XmlElement } from 'xml-core';\nimport { Signature } from 'xmldsigjs';\nimport { UnsignedSignatureProperty } from './unsigned_signature_properties';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"CounterSignature\" type=\"CounterSignatureType\"/>\n * <xsd:complexType name=\"CounterSignatureType\">\n *     <xsd:sequence>\n *         <xsd:element ref=\"ds:Signature\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.CounterSignature })\nexport class CounterSignature extends XadesObject implements UnsignedSignatureProperty {\n  @XmlChildElement({\n    parser: Signature, required: true,\n  })\n  public Signature: Signature;\n}\n"
  },
  {
    "path": "src/xml/data_object.ts",
    "content": "import { XmlChildElement, XmlElement } from 'xml-core';\nimport { DataObject as XmlDSigDataObject, XmlSignature } from 'xmldsigjs';\nimport { QualifyingProperties } from './qualifying_properties';\n\n@XmlElement({ localName: XmlSignature.ElementNames.Object })\nexport class DataObject extends XmlDSigDataObject {\n  @XmlChildElement({ parser: QualifyingProperties })\n  public QualifyingProperties: QualifyingProperties;\n}\n"
  },
  {
    "path": "src/xml/data_object_format.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { ObjectIdentifier } from './object_identifier';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"DataObjectFormat\" type=\"DataObjectFormatType\"/>\n * <xsd:complexType name=\"DataObjectFormatType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"Description\" type=\"xsd:string\" minOccurs=\"0\"/>\n *         <xsd:element name=\"ObjectIdentifier\" type=\"ObjectIdentifierType\" minOccurs=\"0\"/>\n *         <xsd:element name=\"MimeType\" type=\"xsd:string\" minOccurs=\"0\"/>\n *         <xsd:element name=\"Encoding\" type=\"xsd:anyURI\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"ObjectReference\" type=\"xsd:anyURI\" use=\"required\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.DataObjectFormat })\nexport class DataObjectFormat extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.ObjectReference, required: true,\n  })\n  public ObjectReference: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.Description,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public Description: string;\n\n  @XmlChildElement({ parser: ObjectIdentifier })\n  public ObjectIdentifier: ObjectIdentifier;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.MimeType,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public MimeType: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.Encoding,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public Encoding: string;\n}\n"
  },
  {
    "path": "src/xml/date_time.ts",
    "content": "import { XmlContent, XmlElement } from 'xml-core';\nimport { dateFormat } from '../dateformat';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n@XmlElement({\n  localName: 'XadesDateTime',\n  namespaceURI: XmlXades.NamespaceURI,\n  prefix: XmlXades.DefaultPrefix,\n})\nexport class XadesDateTime extends XadesObject {\n  @XmlContent({\n    defaultValue: new Date(),\n    required: true,\n  })\n  public Value: Date;\n\n  /**\n   * Format of the datetime value\n   *\n   * Check [dateformat]{@link https://www.npmjs.com/package/dateformat} for supported formatting options.\n   * If not specified, [Date#toISOString()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString} is used.\n   */\n  public Format?: string;\n\n  protected OnLoadXml(e: Element) {\n    if (e.textContent) {\n      this.Value = new Date(e.textContent);\n    }\n  }\n\n  protected OnGetXml(e: Element) {\n    if (this.Format) {\n      e.textContent = dateFormat(this.Value, this.Format);\n    } else {\n      e.textContent = this.Value.toISOString();\n    }\n  }\n}\n"
  },
  {
    "path": "src/xml/encapsulated_pki_data.ts",
    "content": "import {\n  XmlAttribute, XmlContent, XmlElement,\n  IConverter, XmlBase64Converter,\n} from 'xml-core';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"EncapsulatedPKIData\" type=\"EncapsulatedPKIDataType\"/>\n * <xsd:complexType name=\"EncapsulatedPKIDataType\">\n *   <xsd:simpleContent>\n *     <xsd:extension base=\"xsd:base64Binary\">\n *       <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n *       <xsd:attribute name=\"Encoding\" type=\"xsd:anyURI\" use=\"optional\"/>\n *     </xsd:extension>\n *   </xsd:simpleContent>\n * </xsd:complexType>\n *\n */\n\nconst XmlEncodingConverter: IConverter<EncodingType> = {\n  get: (value: EncodingType) => {\n    switch (value) {\n      case 'der':\n      case 'ber':\n      case 'cer':\n      case 'per':\n      case 'xer':\n        return `http://uri.etsi.org/01903/v1.2.2#${value.toUpperCase()}`;\n    }\n\n    return void 0;\n  },\n  set: (value: string) => {\n    const regexp = /#(\\w+)$/;\n    const res = regexp.exec(value);\n\n    if (res) {\n      return res[1].toLowerCase() as EncodingType;\n    }\n\n    return null;\n  },\n};\n\nexport type EncodingType = 'der' | 'ber' | 'cer' | 'per' | 'xer' | null;\n\n@XmlElement({ localName: 'EncapsulatedPKIData' })\nexport class EncapsulatedPKIData extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id,\n    defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Encoding,\n    defaultValue: null,\n    converter: XmlEncodingConverter,\n  })\n  public Encoding: EncodingType;\n\n  @XmlContent({\n    required: true,\n    converter: XmlBase64Converter,\n  })\n  public Value: Uint8Array;\n}\n"
  },
  {
    "path": "src/xml/generic_time_stamp.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n  XmlBase64Converter,\n} from 'xml-core';\nimport {\n  CanonicalizationMethod, DigestMethod, XmlSignature,\n} from 'xmldsigjs';\nimport { Any } from './any';\nimport { EncapsulatedPKIData } from './encapsulated_pki_data';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"Include\" type=\"IncludeType\"/>\n * <xsd:complexType name=\"IncludeType\">\n *   <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"required\"/>\n *   <xsd:attribute name=\"referencedData\" type=\"xsd:boolean\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:element name=\"ReferenceInfo\" type=\"ReferenceInfoType\"/>\n * <xsd:complexType name=\"ReferenceInfoType\">\n *   <xsd:sequence>\n *     <xsd:element ref=\"ds:DigestMethod\"/>\n *     <xsd:element ref=\"ds:DigestValue\"/>\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n *   <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:complexType name=\"GenericTimeStampType\" abstract=\"true\">\n *   <xsd:sequence>\n *     <xsd:choice minOccurs=\"0\">\n *       <xsd:element ref=\"Include\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n *       <xsd:element ref=\"ReferenceInfo\" maxOccurs=\"unbounded\"/>\n *     </xsd:choice>\n *     <xsd:element ref=\"ds:CanonicalizationMethod\" minOccurs=\"0\"/>\n *     <xsd:choice maxOccurs=\"unbounded\">\n *       <xsd:element name=\"EncapsulatedTimeStamp\" type=\"EncapsulatedPKIDataType\"/>\n *       <xsd:element name=\"XMLTimeStamp\" type=\"AnyType\"/>\n *     </xsd:choice>\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.Include })\nexport class Include extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.URI,\n    defaultValue: '',\n    required: true,\n  })\n  public Uri: string;\n\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.ReferencedData,\n    defaultValue: false,\n  })\n  public ReferencedData: boolean;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.ReferenceInfo })\nexport class ReferenceInfo extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.URI, defaultValue: '',\n  })\n  public Uri: string;\n\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  /**\n   * Gets or sets the digest method Uniform Resource Identifier (URI) of the current\n   */\n  @XmlChildElement({\n    required: true,\n    parser: DigestMethod,\n  })\n  public DigestMethod = new DigestMethod();\n\n  /**\n   * Gets or sets the digest value of the current Reference.\n   */\n  @XmlChildElement({\n    required: true,\n    localName: XmlSignature.ElementNames.DigestValue,\n    namespaceURI: XmlSignature.NamespaceURI,\n    prefix: XmlSignature.DefaultPrefix,\n    converter: XmlBase64Converter,\n  })\n  public DigestValue: Uint8Array;\n}\n\n@XmlElement({\n  localName: 'ReferenceInfos', parser: ReferenceInfo,\n})\nexport class ReferenceInfos extends XadesCollection<ReferenceInfo> {\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.EncapsulatedTimeStamp })\nexport class EncapsulatedTimeStamp extends EncapsulatedPKIData { }\n\n@XmlElement({\n  localName: 'EncapsulatedPKIDatas', parser: EncapsulatedTimeStamp,\n})\nexport class EncapsulatedTimeStampCollection extends XadesCollection<EncapsulatedTimeStamp> {\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.XMLTimeStamp })\nexport class XMLTimeStamp extends Any { }\n\n@XmlElement({\n  localName: 'XMLTimeStampCollection', parser: XMLTimeStamp,\n})\nexport class XMLTimeStampCollection extends XadesCollection<XMLTimeStamp> {\n}\n\n@XmlElement({ localName: 'GenericTimeStamp' })\nexport class GenericTimeStamp extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: Include })\n  public Include: Include;\n\n  @XmlChildElement({\n    parser: ReferenceInfos, noRoot: true,\n  })\n  public ReferenceInfo: ReferenceInfos;\n\n  @XmlChildElement({ parser: CanonicalizationMethod })\n  public CanonicalizationMethod: CanonicalizationMethod;\n\n  @XmlChildElement({\n    parser: EncapsulatedTimeStampCollection, noRoot: true,\n  })\n  public EncapsulatedTimeStamp: EncapsulatedTimeStampCollection;\n\n  @XmlChildElement({\n    parser: XMLTimeStampCollection, noRoot: true,\n  })\n  public XMLTimeStamp: XMLTimeStampCollection;\n}\n"
  },
  {
    "path": "src/xml/index.ts",
    "content": "export * from './any';\nexport * from './certificate_values';\nexport * from './commitment_type_indication';\nexport * from './complete_certificate_refs';\nexport * from './complete_revocation_refs';\nexport * from './counter_signature';\nexport * from './data_object_format';\nexport * from './date_time';\nexport * from './encapsulated_pki_data';\nexport * from './generic_time_stamp';\nexport * from './object_identifier';\nexport * from './other_time_stamp';\nexport * from './qualifying_properties';\nexport * from './qualifying_properties_reference';\nexport * from './revocation_values';\nexport * from './signature_policy_identifier';\nexport * from './signature_product_place';\nexport * from './signed_data_object_properties';\nexport * from './signed_properties';\nexport * from './signed_signature_properties';\nexport * from './signer_role';\nexport * from './signing_certificate';\nexport * from './signing_certificate_v2';\nexport * from './unsigned_data_object_property';\nexport * from './unsigned_properties';\nexport * from './unsigned_signature_properties';\nexport * from './xades_time_stamp';\nexport * from './data_object';\nexport * from './xml';\n"
  },
  {
    "path": "src/xml/object_identifier.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlContent, XmlElement,\n} from 'xml-core';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <!-- Start ObjectIdentifierType-->\n * <xsd:element name=\"ObjectIdentifier\" type=\"ObjectIdentifierType\"/>\n * <xsd:complexType name=\"ObjectIdentifierType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"Identifier\" type=\"IdentifierType\"/>\n *     <xsd:element name=\"Description\" type=\"xsd:string\" minOccurs=\"0\"/>\n *     <xsd:element\n *       name=\"DocumentationReferences\"\n *       type=\"DocumentationReferencesType\"\n *       minOccurs=\"0\"\n *     />\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"IdentifierType\">\n *   <xsd:simpleContent>\n *     <xsd:extension base=\"xsd:anyURI\">\n *       <xsd:attribute name=\"Qualifier\" type=\"QualifierType\" use=\"optional\"/>\n *     </xsd:extension>\n *   </xsd:simpleContent>\n * </xsd:complexType>\n * <xsd:simpleType name=\"QualifierType\">\n *   <xsd:restriction base=\"xsd:string\">\n *     <xsd:enumeration value=\"OIDAsURI\"/>\n *     <xsd:enumeration value=\"OIDAsURN\"/>\n *   </xsd:restriction>\n * </xsd:simpleType>\n * <xsd:complexType name=\"DocumentationReferencesType\">\n *   <xsd:sequence maxOccurs=\"unbounded\">\n *      <xsd:element name=\"DocumentationReference\" type=\"xsd:anyURI\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n * <!-- End ObjectIdentifierType-->\n *\n */\n\nexport type IdentifierQualifier = 'OIDAsURI' | 'OIDAsURN';\n\n@XmlElement({ localName: XmlXades.ElementNames.Identifier })\nexport class Identifier extends XadesObject {\n  @XmlAttribute({ localName: XmlXades.AttributeNames.Qualifier })\n  public Qualifier: IdentifierQualifier;\n\n  @XmlContent({\n    defaultValue: '',\n    required: true,\n  })\n  public Value: string;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.DocumentationReference })\nexport class DocumentationReference extends XadesObject {\n  @XmlContent({\n    defaultValue: '',\n    required: true,\n  })\n  public Uri: string;\n\n  protected OnLoadXml(e: Element) {\n    if (e.textContent) {\n      this.Uri = e.textContent;\n    }\n  }\n\n  protected OnGetXml(e: Element) {\n    if (this.Uri) {\n      e.textContent = this.Uri;\n    }\n  }\n}\n\n@XmlElement({\n  localName: XmlXades.ElementNames.DocumentationReferences,\n  parser: DocumentationReference,\n})\nexport class DocumentationReferences extends XadesCollection<DocumentationReference> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.ObjectIdentifier })\nexport class ObjectIdentifier extends XadesObject {\n  @XmlChildElement({\n    parser: Identifier,\n    required: true,\n  })\n  public Identifier: Identifier;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.Description,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    defaultValue: '',\n  })\n  public Description: string;\n\n  @XmlChildElement({ parser: DocumentationReferences })\n  public DocumentationReferences: DocumentationReferences;\n}\n"
  },
  {
    "path": "src/xml/other_time_stamp.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { CanonicalizationMethod } from 'xmldsigjs';\nimport {\n  EncapsulatedTimeStampCollection, ReferenceInfos, XMLTimeStampCollection,\n} from './generic_time_stamp';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"OtherTimeStamp\" type=\"OtherTimeStampType\"/>\n * <xsd:complexType name=\"OtherTimeStampType\">\n *     <xsd:complexContent>\n *         <xsd:restriction base=\"GenericTimeStampType\">\n *             <xsd:sequence>\n *                 <xsd:element ref=\"ReferenceInfo\" maxOccurs=\"unbounded\"/>\n *                 <xsd:element ref=\"ds:CanonicalizationMethod\" minOccurs=\"0\"/>\n *                 <xsd:choice>\n *                     <xsd:element name=\"EncapsulatedTimeStamp\" type=\"EncapsulatedPKIDataType\"/>\n *                     <xsd:element name=\"XMLTimeStamp\" type=\"AnyType\"/>\n *                 </xsd:choice>\n *             </xsd:sequence>\n *             <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n *         </xsd:restriction>\n *     </xsd:complexContent>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.OtherTimeStamp })\nexport class OtherTimeStamp extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({\n    parser: ReferenceInfos, noRoot: true,\n  })\n  public ReferenceInfo: ReferenceInfos;\n\n  @XmlChildElement({ parser: CanonicalizationMethod })\n  public CanonicalizationMethod: CanonicalizationMethod;\n\n  @XmlChildElement({\n    parser: EncapsulatedTimeStampCollection, noRoot: true,\n  })\n  public EncapsulatedTimeStamp: EncapsulatedTimeStampCollection;\n\n  @XmlChildElement({\n    parser: XMLTimeStampCollection, noRoot: true,\n  })\n  public XMLTimeStamp: XMLTimeStampCollection;\n}\n"
  },
  {
    "path": "src/xml/qualifying_properties.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { SignedProperties } from './signed_properties';\nimport { UnsignedProperties } from './unsigned_properties';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"QualifyingProperties\" type=\"QualifyingPropertiesType\"/>\n * <xsd:complexType name=\"QualifyingPropertiesType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"SignedProperties\" type=\"SignedPropertiesType\" minOccurs=\"0\"/>\n *         <xsd:element name=\"UnsignedProperties\" type=\"UnsignedPropertiesType\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"Target\" type=\"xsd:anyURI\" use=\"required\"/>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.QualifyingProperties })\nexport class QualifyingProperties extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Target, required: true,\n  })\n  public Target: string;\n\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: SignedProperties })\n  public SignedProperties: SignedProperties;\n\n  @XmlChildElement({ parser: UnsignedProperties })\n  public UnsignedProperties: UnsignedProperties;\n}\n"
  },
  {
    "path": "src/xml/qualifying_properties_reference.ts",
    "content": "import { XmlAttribute, XmlElement } from 'xml-core';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"QualifyingPropertiesReference\" type=\"QualifyingPropertiesReferenceType\"/>\n * <xsd:complexType name=\"QualifyingPropertiesReferenceType\">\n *     <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"required\"/>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.QualifyingPropertiesReference })\nexport class QualifyingPropertiesReference extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.URI, required: true,\n  })\n  public Uri: string;\n\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n}\n"
  },
  {
    "path": "src/xml/revocation_values.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { EncapsulatedPKIData } from './encapsulated_pki_data';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"RevocationValues\" type=\"RevocationValuesType\"/>\n * <xsd:complexType name=\"RevocationValuesType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"CRLValues\" type=\"CRLValuesType\" minOccurs=\"0\"/>\n *     <xsd:element name=\"OCSPValues\" type=\"OCSPValuesType\" minOccurs=\"0\"/>\n *     <xsd:element name=\"OtherValues\" type=\"OtherCertStatusValuesType\" minOccurs=\"0\"/>\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:complexType name=\"CRLValuesType\">\n *   <xsd:sequence>\n *     <xsd:element\n *       name=\"EncapsulatedCRLValue\"\n *       type=\"EncapsulatedPKIDataType\"\n *       maxOccurs=\"unbounded\"\n *     />\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"OCSPValuesType\">\n *   <xsd:sequence>\n *     <xsd:element\n *       name=\"EncapsulatedOCSPValue\"\n *       type=\"EncapsulatedPKIDataType\"\n *       maxOccurs=\"unbounded\"\n *     />\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"OtherCertStatusValuesType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"OtherValue\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.OtherValue })\nexport class OtherValue extends EncapsulatedPKIData { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.OCSPValues, parser: OtherValue,\n})\nexport class OtherValues extends XadesCollection<OtherValue> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.EncapsulatedOCSPValue })\nexport class EncapsulatedOCSPValue extends EncapsulatedPKIData { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.OCSPValues, parser: EncapsulatedOCSPValue,\n})\nexport class OCSPValues extends XadesCollection<EncapsulatedOCSPValue> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.EncapsulatedCRLValue })\nexport class EncapsulatedCRLValue extends EncapsulatedPKIData { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.CRLValues, parser: EncapsulatedCRLValue,\n})\nexport class CRLValues extends XadesCollection<EncapsulatedCRLValue> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.RevocationValues })\nexport class RevocationValues extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: CRLValues })\n  public CRLValues: CRLValues;\n\n  @XmlChildElement({ parser: OCSPValues })\n  public OCSPValues: OCSPValues;\n\n  @XmlChildElement({ parser: OtherValues })\n  public OtherValues: OtherValues;\n}\n"
  },
  {
    "path": "src/xml/signature_policy_identifier.ts",
    "content": "import {\n  XmlChildElement, XmlContent, XmlElement,\n  IConverter, XmlNumberConverter,\n} from 'xml-core';\nimport { Transforms } from 'xmldsigjs';\nimport { AnyCollection } from './any';\nimport { ObjectIdentifier } from './object_identifier';\nimport { DigestAlgAndValueType } from './signing_certificate';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SignaturePolicyIdentifier\" type=\"SignaturePolicyIdentifierType\"/>\n * <xsd:complexType name=\"SignaturePolicyIdentifierType\">\n *   <xsd:choice>\n *     <xsd:element name=\"SignaturePolicyId\" type=\"SignaturePolicyIdType\"/>\n *     <xsd:element name=\"SignaturePolicyImplied\"/>\n *   </xsd:choice>\n * </xsd:complexType>\n * <xsd:complexType name=\"SignaturePolicyIdType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"SigPolicyId\" type=\"ObjectIdentifierType\"/>\n *     <xsd:element ref=\"ds:Transforms\" minOccurs=\"0\"/>\n *     <xsd:element name=\"SigPolicyHash\" type=\"DigestAlgAndValueType\"/>\n *     <xsd:element name=\"SigPolicyQualifiers\" type=\"SigPolicyQualifiersListType\" minOccurs=\"0\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"SigPolicyQualifiersListType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"SigPolicyQualifier\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:element name=\"SPURI\" type=\"xsd:anyURI\"/>\n * <xsd:element name=\"SPUserNotice\" type=\"SPUserNoticeType\"/>\n * <xsd:complexType name=\"SPUserNoticeType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"NoticeRef\" type=\"NoticeReferenceType\" minOccurs=\"0\"/>\n *     <xsd:element name=\"ExplicitText\" type=\"xsd:string\" minOccurs=\"0\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"NoticeReferenceType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"Organization\" type=\"xsd:string\"/>\n *     <xsd:element name=\"NoticeNumbers\" type=\"IntegerListType\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"IntegerListType\">\n *   <xsd:sequence>\n *     <xsd:element name=\"int\" type=\"xsd:integer\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n *   </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.SigPolicyId })\nexport class SigPolicyId extends ObjectIdentifier { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SigPolicyHash })\nexport class SigPolicyHash extends DigestAlgAndValueType { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SigPolicyQualifier })\nexport class SigPolicyQualifier extends AnyCollection { }\n\n@XmlElement({ localName: 'int' })\nexport class Integer extends XadesObject {\n  @XmlContent({\n    converter: XmlNumberConverter, required: true,\n  })\n  public Value: number;\n}\n\n@XmlElement({\n  localName: 'IntegerList', parser: Integer,\n})\nexport class IntegerList extends XadesCollection<Integer> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.NoticeRef })\nexport class NoticeReference extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.Organization,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    required: true,\n  })\n  public Organization: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.NoticeNumbers, parser: IntegerList, required: true,\n  })\n  public NoticeNumbers: IntegerList;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.SPUserNotice })\nexport class SPUserNotice extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.NoticeRef, parser: NoticeReference,\n  })\n  public NoticeRef: NoticeReference;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.ExplicitText,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public ExplicitText: string;\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.SPURI })\nexport class SPURI extends XadesObject {\n  @XmlContent()\n  public Value: string;\n}\n\n@XmlElement({\n  localName: XmlXades.ElementNames.SigPolicyQualifiers, parser: SigPolicyQualifier,\n})\nexport class SigPolicyQualifiers extends XadesCollection<SigPolicyQualifier> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SignaturePolicyId })\nexport class SignaturePolicyId extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.SigPolicyId, parser: SigPolicyId, required: true,\n  })\n  public SigPolicyId: SigPolicyId;\n\n  @XmlChildElement({ parser: Transforms })\n  public Transforms: Transforms;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.SigPolicyHash, parser: SigPolicyHash, required: true,\n  })\n  public SigPolicyHash: SigPolicyHash;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.SigPolicyQualifiers, parser: SigPolicyQualifiers,\n  })\n  public SigPolicyQualifiers: SigPolicyQualifiers;\n}\n\nconst XmlSignaturePolicyImpliedConverter: IConverter<boolean> = {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  set: (value: string) => {\n    // if SignaturePolicyImplied exists then return true\n    return true;\n  },\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  get: (value: boolean) => {\n    return '';\n  },\n};\n\n@XmlElement({ localName: XmlXades.ElementNames.SignaturePolicyIdentifier })\nexport class SignaturePolicyIdentifier extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.SignaturePolicyId,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    parser: SignaturePolicyId,\n  })\n  public SignaturePolicyId: SignaturePolicyId;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.SignaturePolicyImplied,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    converter: XmlSignaturePolicyImpliedConverter,\n    defaultValue: false,\n  })\n  public SignaturePolicyImplied: boolean;\n}\n"
  },
  {
    "path": "src/xml/signature_product_place.ts",
    "content": "import { XmlChildElement, XmlElement } from 'xml-core';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SignatureProductionPlace\" type=\"SignatureProductionPlaceType\"/>\n * <xsd:complexType name=\"SignatureProductionPlaceType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"City\" type=\"xsd:string\" minOccurs=\"0\"/>\n *         <xsd:element name=\"StateOrProvince\" type=\"xsd:string\" minOccurs=\"0\"/>\n *         <xsd:element name=\"PostalCode\" type=\"xsd:string\" minOccurs=\"0\"/>\n *         <xsd:element name=\"CountryName\" type=\"xsd:string\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.SignatureProductionPlace })\nexport class SignatureProductionPlace extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.City,\n    defaultValue: '',\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public City: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.StateOrProvince,\n    defaultValue: '',\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public StateOrProvince: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.PostalCode,\n    defaultValue: '',\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public PostalCode: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.CountryName,\n    defaultValue: '',\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n  })\n  public CountryName: string;\n}\n"
  },
  {
    "path": "src/xml/signed_data_object_properties.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { CommitmentTypeIndication } from './commitment_type_indication';\nimport { DataObjectFormat } from './data_object_format';\nimport { XAdESTimeStamp } from './xades_time_stamp';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SignedDataObjectProperties\" type=\"SignedDataObjectPropertiesType\"/>\n * <xsd:complexType name=\"SignedDataObjectPropertiesType\">\n *   <xsd:sequence>\n *     <xsd:element\n *       name=\"DataObjectFormat\"\n *       type=\"DataObjectFormatType\"\n *       minOccurs=\"0\"\n *       maxOccurs=\"unbounded\"\n *     />\n *     <xsd:element\n *       name=\"CommitmentTypeIndication\"\n *       type=\"CommitmentTypeIndicationType\"\n *       minOccurs=\"0\"\n *       maxOccurs=\"unbounded\"\n *     />\n *     <xsd:element\n *       name=\"AllDataObjectsTimeStamp\"\n *       type=\"XAdESTimeStampType\"\n *       minOccurs=\"0\"\n *       maxOccurs=\"unbounded\"\n *     />\n *     <xsd:element\n *       name=\"IndividualDataObjectsTimeStamp\"\n *       type=\"XAdESTimeStampType\"\n *       minOccurs=\"0\"\n *       maxOccurs=\"unbounded\"\n *     />\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.IndividualDataObjectsTimeStamp })\nexport class IndividualDataObjectsTimeStamp extends XAdESTimeStamp { }\n\n@XmlElement({\n  localName: 'IndividualDataObjectsTimeStampCollection', parser: IndividualDataObjectsTimeStamp,\n})\nexport class IndividualDataObjectsTimeStampCollection\n  extends XadesCollection<IndividualDataObjectsTimeStamp> {}\n\n@XmlElement({ localName: XmlXades.ElementNames.AllDataObjectsTimeStamp })\nexport class AllDataObjectsTimeStamp extends XAdESTimeStamp { }\n\n@XmlElement({\n  localName: 'DataObjectFormatCollection', parser: DataObjectFormat,\n})\nexport class DataObjectFormatCollection extends XadesCollection<DataObjectFormat> {\n}\n\n@XmlElement({\n  localName: 'CommitmentTypeIndicationCollection', parser: CommitmentTypeIndication,\n})\nexport class CommitmentTypeIndicationCollection extends XadesCollection<CommitmentTypeIndication> {\n}\n\n@XmlElement({\n  localName: 'AllDataObjectsTimeStampCollection', parser: AllDataObjectsTimeStamp,\n})\nexport class AllDataObjectsTimeStampCollection extends XadesCollection<AllDataObjectsTimeStamp> {\n}\n\n@XmlElement({ localName: XmlXades.ElementNames.SignedDataObjectProperties })\nexport class SignedDataObjectProperties extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({\n    parser: DataObjectFormatCollection, noRoot: true,\n  })\n  public DataObjectFormats: DataObjectFormatCollection;\n\n  @XmlChildElement({\n    parser: CommitmentTypeIndicationCollection, noRoot: true,\n  })\n  public CommitmentTypeIndications: CommitmentTypeIndicationCollection;\n\n  @XmlChildElement({\n    parser: AllDataObjectsTimeStampCollection, noRoot: true,\n  })\n  public AllDataObjectsTimeStamps: AllDataObjectsTimeStampCollection;\n\n  @XmlChildElement({\n    parser: IndividualDataObjectsTimeStampCollection, noRoot: true,\n  })\n  public IndividualDataObjectsTimeStamps: IndividualDataObjectsTimeStampCollection;\n}\n"
  },
  {
    "path": "src/xml/signed_properties.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { SignedDataObjectProperties } from './signed_data_object_properties';\nimport { SignedSignatureProperties } from './signed_signature_properties';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SignedProperties\" type=\"SignedPropertiesType\"/>\n * <xsd:complexType name=\"SignedPropertiesType\">\n *   <xsd:sequence>\n *     <xsd:element\n *       name=\"SignedSignatureProperties\"\n *       type=\"SignedSignaturePropertiesType\"\n *       minOccurs=\"0\"\n *     />\n *     <xsd:element\n *       name=\"SignedDataObjectProperties\"\n *       type=\"SignedDataObjectPropertiesType\"\n *       minOccurs=\"0\"\n *     />\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.SignedProperties })\nexport class SignedProperties extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: SignedSignatureProperties })\n  public SignedSignatureProperties: SignedSignatureProperties;\n\n  @XmlChildElement({ parser: SignedDataObjectProperties })\n  public SignedDataObjectProperties: SignedDataObjectProperties;\n}\n"
  },
  {
    "path": "src/xml/signed_signature_properties.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { XadesDateTime } from './date_time';\nimport { SignaturePolicyIdentifier } from './signature_policy_identifier';\nimport { SignatureProductionPlace } from './signature_product_place';\nimport { SignerRole } from './signer_role';\nimport { SigningCertificate } from './signing_certificate';\nimport { SigningCertificateV2 } from './signing_certificate_v2';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SignedSignatureProperties\" type=\"SignedSignaturePropertiesType\"/>\n * <xsd:complexType name=\"SignedSignaturePropertiesType\">\n *   <xsd:sequence>\n *     <xsd:element ref=\"SigningTime\" minOccurs=\"0\"/>\n *     <xsd:element ref=\"SigningCertificate\" minOccurs=\"0\"/>\n *     <xsd:element ref=\"SigningCertificateV2\" minOccurs=\"0\"/>\n *     <xsd:element ref=\"SignaturePolicyIdentifier\" minOccurs=\"0\"/>\n *     <xsd:element ref=\"SignatureProductionPlace\" minOccurs=\"0\"/>\n *     <xsd:element ref=\"SignatureProductionPlaceV2\" minOccurs=\"0\"/> <!-- :TODO: not supported -->\n *     <xsd:element ref=\"SignerRole\" minOccurs=\"0\"/>\n *     <xsd:element ref=\"SignerRoleV2\" minOccurs=\"0\"/>               <!-- :TODO: not supported -->\n *     <xsd:any namespace=\"##other\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.SignedSignatureProperties })\nexport class SignedSignatureProperties extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.SigningTime,\n    parser: XadesDateTime,\n  })\n  public SigningTime: XadesDateTime;\n\n  @XmlChildElement({ parser: SigningCertificate })\n  public SigningCertificate: SigningCertificate;\n\n  @XmlChildElement({ parser: SigningCertificateV2 })\n  public SigningCertificateV2: SigningCertificateV2;\n\n  @XmlChildElement({ parser: SignaturePolicyIdentifier })\n  public SignaturePolicyIdentifier: SignaturePolicyIdentifier;\n\n  @XmlChildElement({ parser: SignatureProductionPlace })\n  public SignatureProductionPlace: SignatureProductionPlace;\n\n  @XmlChildElement({ parser: SignerRole })\n  public SignerRole: SignerRole;\n}\n"
  },
  {
    "path": "src/xml/signer_role.ts",
    "content": "import { XmlChildElement, XmlElement } from 'xml-core';\nimport { Any } from './any';\nimport { EncapsulatedPKIData } from './encapsulated_pki_data';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SignerRole\" type=\"SignerRoleType\"/>\n * <xsd:complexType name=\"SignerRoleType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"ClaimedRoles\" type=\"ClaimedRolesListType\" minOccurs=\"0\"/>\n *         <xsd:element name=\"CertifiedRoles\" type=\"CertifiedRolesListType\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"ClaimedRolesListType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"ClaimedRole\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"CertifiedRolesListType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"CertifiedRole\" type=\"EncapsulatedPKIDataType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.ClaimedRole })\nexport class ClaimedRole extends Any { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.ClaimedRoles, parser: ClaimedRole,\n})\nexport class ClaimedRoles extends XadesCollection<ClaimedRole> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.CertifiedRole })\nexport class CertifiedRole extends EncapsulatedPKIData { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.CertifiedRoles, parser: CertifiedRole,\n})\nexport class CertifiedRoles extends XadesCollection<CertifiedRole> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SignerRole })\nexport class SignerRole extends XadesObject {\n  @XmlChildElement({ parser: ClaimedRoles })\n  public ClaimedRoles: ClaimedRoles;\n\n  @XmlChildElement({ parser: CertifiedRoles })\n  public CertifiedRoles: CertifiedRoles;\n}\n"
  },
  {
    "path": "src/xml/signing_certificate.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n  XmlBase64Converter,\n} from 'xml-core';\nimport {\n  DigestMethod, X509IssuerSerial, XmlSignature,\n} from 'xmldsigjs';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"SigningCertificate\" type=\"CertIDListType\"/>\n * <xsd:complexType name=\"CertIDListType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"Cert\" type=\"CertIDType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"CertIDType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"CertDigest\" type=\"DigestAlgAndValueType\"/>\n *         <xsd:element name=\"IssuerSerial\" type=\"ds:X509IssuerSerialType\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n * </xsd:complexType>\n * <xsd:complexType name=\"DigestAlgAndValueType\">\n *     <xsd:sequence>\n *         <xsd:element ref=\"ds:DigestMethod\"/>\n *         <xsd:element ref=\"ds:DigestValue\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.DigestAlgAndValue })\nexport class DigestAlgAndValueType extends XadesObject {\n  @XmlChildElement({\n    parser: DigestMethod,\n    required: true,\n  })\n  public DigestMethod: DigestMethod;\n\n  @XmlChildElement({\n    localName: XmlSignature.ElementNames.DigestValue,\n    namespaceURI: XmlSignature.NamespaceURI,\n    prefix: XmlSignature.DefaultPrefix,\n    converter: XmlBase64Converter,\n    required: true,\n  })\n  public DigestValue: Uint8Array;\n}\n\n@XmlElement({\n  localName: XmlXades.ElementNames.IssuerSerial,\n  namespaceURI: XmlXades.NamespaceURI,\n  prefix: XmlXades.DefaultPrefix,\n})\nexport class IssuerSerial extends X509IssuerSerial { }\n\n@XmlElement({ localName: XmlXades.ElementNames.Cert })\nexport class Cert extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.CertDigest, parser: DigestAlgAndValueType, required: true,\n  })\n  public CertDigest: DigestAlgAndValueType;\n\n  @XmlChildElement({\n    parser: IssuerSerial, required: true,\n  })\n  public IssuerSerial: X509IssuerSerial;\n\n  @XmlAttribute({ localName: XmlXades.AttributeNames.URI })\n  public Uri: string;\n}\n\n@XmlElement({\n  localName: 'CertIDList', parser: Cert,\n})\nexport class CertIDList extends XadesCollection<Cert> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SigningCertificate })\nexport class SigningCertificate extends CertIDList { }\n"
  },
  {
    "path": "src/xml/signing_certificate_v2.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n  XmlBase64Converter,\n} from 'xml-core';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\nimport { DigestAlgAndValueType } from './signing_certificate';\n\n/**\n *\n * <xsd:element name=\"SigningCertificateV2\" type=\"CertIDListV2Type\"/>\n * <xsd:complexType name=\"CertIDListV2Type\">\n *     <xsd:sequence>\n *         <xsd:element name=\"Cert\" type=\"CertIDTypeV2\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n * </xsd:complexType>\n * <xsd:complexType name=\"CertIDTypeV2\">\n *     <xsd:sequence>\n *         <xsd:element name=\"CertDigest\" type=\"DigestAlgAndValueType\"/>\n *         <xsd:element name=\"IssuerSerialV2\" type=\"xsd:base64Binary\" minOccurs=\"0\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n@XmlElement({\n  localName: XmlXades.ElementNames.Cert,\n  parser: CertV2,\n})\nexport class CertV2 extends XadesObject {\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.CertDigest, parser: DigestAlgAndValueType, required: true,\n  })\n  public CertDigest: DigestAlgAndValueType;\n\n  @XmlChildElement({\n    localName: XmlXades.ElementNames.IssuerSerialV2,\n    namespaceURI: XmlXades.NamespaceURI,\n    prefix: XmlXades.DefaultPrefix,\n    converter: XmlBase64Converter,\n    required: false,\n  })\n  public IssuerSerial: Uint8Array;\n\n  @XmlAttribute({ localName: XmlXades.AttributeNames.URI })\n  public Uri: string;\n}\n\n@XmlElement({\n  localName: 'CertIDListV2', parser: CertV2,\n})\nexport class CertIDListV2 extends XadesCollection<CertV2> { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SigningCertificateV2 })\nexport class SigningCertificateV2 extends CertIDListV2 { }\n"
  },
  {
    "path": "src/xml/unsigned_data_object_property.ts",
    "content": "import { XmlAttribute, XmlElement } from 'xml-core';\nimport { Any } from './any';\nimport { XmlXades } from './xml';\nimport { XadesCollection } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"UnsignedDataObjectProperties\" type=\"UnsignedDataObjectPropertiesType\"/>\n * <xsd:complexType name=\"UnsignedDataObjectPropertiesType\">\n *     <xsd:sequence>\n *         <xsd:element name=\"UnsignedDataObjectProperty\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n *     </xsd:sequence>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.UnsignedDataObjectProperty })\nexport class UnsignedDataObjectProperty extends Any { }\n\n@XmlElement({\n  localName: XmlXades.ElementNames.UnsignedSignatureProperties, parser: UnsignedDataObjectProperty,\n})\nexport class UnsignedDataObjectProperties extends XadesCollection<UnsignedDataObjectProperty> {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n}\n"
  },
  {
    "path": "src/xml/unsigned_properties.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { UnsignedDataObjectProperties } from './unsigned_data_object_property';\nimport { UnsignedSignatureProperties } from './unsigned_signature_properties';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"UnsignedProperties\" type=\"UnsignedPropertiesType\"/>\n * <xsd:complexType name=\"UnsignedPropertiesType\">\n *   <xsd:sequence>\n *     <xsd:element\n *       name=\"UnsignedSignatureProperties\"\n *       type=\"UnsignedSignaturePropertiesType\"\n *       minOccurs=\"0\"\n *     />\n *     <xsd:element\n *       name=\"UnsignedDataObjectProperties\"\n *       type=\"UnsignedDataObjectPropertiesType\"\n *       minOccurs=\"0\"\n *     />\n *   </xsd:sequence>\n *   <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.UnsignedProperties })\nexport class UnsignedProperties extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: UnsignedSignatureProperties })\n  public UnsignedSignatureProperties: UnsignedSignatureProperties;\n\n  @XmlChildElement({ parser: UnsignedDataObjectProperties })\n  public UnsignedDataObjectProperties: UnsignedDataObjectProperties;\n}\n"
  },
  {
    "path": "src/xml/unsigned_signature_properties.ts",
    "content": "import {\n  XmlAttribute, XmlElement, XmlNodeType,\n} from 'xml-core';\nimport { CertificateValues } from './certificate_values';\nimport { CompleteCertificateRefs } from './complete_certificate_refs';\nimport { CompleteRevocationRefs } from './complete_revocation_refs';\nimport { CounterSignature } from './counter_signature';\nimport { RevocationValues } from './revocation_values';\nimport { XAdESTimeStamp } from './xades_time_stamp';\nimport { XmlXades } from './xml';\nimport { XadesCollection, XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"UnsignedSignatureProperties\" type=\"UnsignedSignaturePropertiesType\"/>\n * <xsd:complexType name=\"UnsignedSignaturePropertiesType\">\n *     <xsd:choice maxOccurs=\"unbounded\">\n *         <xsd:element name=\"CounterSignature\" type=\"CounterSignatureType\"/>\n *         <xsd:element name=\"SignatureTimeStamp\" type=\"XAdESTimeStampType\"/>\n *         <xsd:element name=\"CompleteCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n *         <xsd:element name=\"CompleteRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n *         <xsd:element name=\"AttributeCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n *         <xsd:element name=\"AttributeRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n *         <xsd:element name=\"SigAndRefsTimeStamp\" type=\"XAdESTimeStampType\"/>\n *         <xsd:element name=\"RefsOnlyTimeStamp\" type=\"XAdESTimeStampType\"/>\n *         <xsd:element name=\"CertificateValues\" type=\"CertificateValuesType\"/>\n *         <xsd:element name=\"RevocationValues\" type=\"RevocationValuesType\"/>\n *         <xsd:element name=\"AttrAuthoritiesCertValues\" type=\"CertificateValuesType\"/>\n *         <xsd:element name=\"AttributeRevocationValues\" type=\"RevocationValuesType\"/>\n *         <xsd:element name=\"ArchiveTimeStamp\" type=\"XAdESTimeStampType\"/>\n *         <xsd:any namespace=\"##other\"/>\n *     </xsd:choice>\n *     <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.SignatureTimeStamp })\nexport class SignatureTimeStamp extends XAdESTimeStamp implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.SigAndRefsTimeStamp })\nexport class SigAndRefsTimeStamp extends XAdESTimeStamp implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.RefsOnlyTimeStamp })\nexport class RefsOnlyTimeStamp extends XAdESTimeStamp implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.ArchiveTimeStamp })\nexport class ArchiveTimeStamp extends XAdESTimeStamp implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.AttributeCertificateRefs })\nexport class AttributeCertificateRefs\n  extends CompleteCertificateRefs implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.AttributeRevocationRefs })\nexport class AttributeRevocationRefs\n  extends CompleteRevocationRefs implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.AttrAuthoritiesCertValues })\nexport class AttrAuthoritiesCertValues\n  extends CertificateValues implements UnsignedSignatureProperty { }\n\n@XmlElement({ localName: XmlXades.ElementNames.AttributeRevocationValues })\nexport class AttributeRevocationValues\n  extends RevocationValues implements UnsignedSignatureProperty { }\n\n/**\n * Abstract class for UnsignedSignatureProperties\n * @export\n * @class UnsignedSignatureProperty\n * @extends {XadesObject}\n */\n@XmlElement({ localName: 'UnsignedSignatureProperty' })\nexport class UnsignedSignatureProperty extends XadesObject {\n}\n\n@XmlElement({\n  localName: XmlXades.ElementNames.UnsignedSignatureProperties, parser: UnsignedSignatureProperty,\n})\nexport class UnsignedSignatureProperties extends XadesCollection<UnsignedSignatureProperty> {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  public OnLoadXml(element: Element) {\n    for (let i = 0; i < element.childNodes.length; i++) {\n      const node = element.childNodes.item(i);\n\n      if (node.nodeType !== XmlNodeType.Element) {\n        continue;\n      }\n\n      let XmlClass: typeof UnsignedSignatureProperty | undefined;\n\n      switch ((node as Element).localName) {\n        case XmlXades.ElementNames.CounterSignature:\n          XmlClass = CounterSignature;\n\n          break;\n        case XmlXades.ElementNames.SignatureTimeStamp:\n          XmlClass = SignatureTimeStamp;\n\n          break;\n        case XmlXades.ElementNames.CompleteCertificateRefs:\n          XmlClass = CompleteCertificateRefs;\n\n          break;\n        case XmlXades.ElementNames.CompleteRevocationRefs:\n          XmlClass = CompleteRevocationRefs;\n\n          break;\n        case XmlXades.ElementNames.AttributeCertificateRefs:\n          XmlClass = AttributeCertificateRefs;\n\n          break;\n        case XmlXades.ElementNames.AttributeRevocationRefs:\n          XmlClass = AttributeRevocationRefs;\n\n          break;\n        case XmlXades.ElementNames.SigAndRefsTimeStamp:\n          XmlClass = SigAndRefsTimeStamp;\n\n          break;\n        case XmlXades.ElementNames.RefsOnlyTimeStamp:\n          XmlClass = RefsOnlyTimeStamp;\n\n          break;\n        case XmlXades.ElementNames.CertificateValues:\n          XmlClass = CertificateValues;\n\n          break;\n        case XmlXades.ElementNames.RevocationValues:\n          XmlClass = RevocationValues;\n\n          break;\n        case XmlXades.ElementNames.AttrAuthoritiesCertValues:\n          XmlClass = AttrAuthoritiesCertValues;\n\n          break;\n        case XmlXades.ElementNames.AttributeRevocationValues:\n          XmlClass = AttributeRevocationValues;\n\n          break;\n        case XmlXades.ElementNames.ArchiveTimeStamp:\n          XmlClass = ArchiveTimeStamp;\n\n          break;\n      }\n\n      if (XmlClass) {\n        const item = XmlClass.LoadXml(node as Element);\n\n        this.Add(item);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/xml/xades.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xsd:schema targetNamespace=\"http://uri.etsi.org/01903/v1.3.2#\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://uri.etsi.org/01903/v1.3.2#\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" elementFormDefault=\"qualified\">\n    <xsd:import namespace=\"http://www.w3.org/2000/09/xmldsig#\" schemaLocation=\"http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd\"/>\n    <!-- Start auxiliary types definitions: AnyType, ObjectIdentifierType, \nEncapsulatedPKIDataType and containers for time-stamp tokens -->\n    <!-- Start AnyType -->\n    <xsd:element name=\"Any\" type=\"AnyType\"/>\n    <xsd:complexType name=\"AnyType\" mixed=\"true\">\n        <xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:any namespace=\"##any\" processContents=\"lax\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##any\"/>\n    </xsd:complexType>\n    <!-- End AnyType -->\n    <!-- Start ObjectIdentifierType-->\n    <xsd:element name=\"ObjectIdentifier\" type=\"ObjectIdentifierType\"/>\n    <xsd:complexType name=\"ObjectIdentifierType\">\n        <xsd:sequence>\n            <xsd:element name=\"Identifier\" type=\"IdentifierType\"/>\n            <xsd:element name=\"Description\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DocumentationReferences\" type=\"DocumentationReferencesType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"IdentifierType\">\n        <xsd:simpleContent>\n            <xsd:extension base=\"xsd:anyURI\">\n                <xsd:attribute name=\"Qualifier\" type=\"QualifierType\" use=\"optional\"/>\n            </xsd:extension>\n        </xsd:simpleContent>\n    </xsd:complexType>\n    <xsd:simpleType name=\"QualifierType\">\n        <xsd:restriction base=\"xsd:string\">\n            <xsd:enumeration value=\"OIDAsURI\"/>\n            <xsd:enumeration value=\"OIDAsURN\"/>\n        </xsd:restriction>\n    </xsd:simpleType>\n    <xsd:complexType name=\"DocumentationReferencesType\">\n        <xsd:sequence maxOccurs=\"unbounded\">\n            <xsd:element name=\"DocumentationReference\" type=\"xsd:anyURI\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End ObjectIdentifierType-->\n    <!-- Start EncapsulatedPKIDataType-->\n    <xsd:element name=\"EncapsulatedPKIData\" type=\"EncapsulatedPKIDataType\"/>\n    <xsd:complexType name=\"EncapsulatedPKIDataType\">\n        <xsd:simpleContent>\n            <xsd:extension base=\"xsd:base64Binary\">\n                <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n                <xsd:attribute name=\"Encoding\" type=\"xsd:anyURI\" use=\"optional\"/>\n            </xsd:extension>\n        </xsd:simpleContent>\n    </xsd:complexType>\n    <!-- End EncapsulatedPKIDataType -->\n    <!-- Start time-stamp containers types -->\n    <!-- Start GenericTimeStampType -->\n    <xsd:element name=\"Include\" type=\"IncludeType\"/>\n    <xsd:complexType name=\"IncludeType\">\n        <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"required\"/>\n        <xsd:attribute name=\"referencedData\" type=\"xsd:boolean\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:element name=\"ReferenceInfo\" type=\"ReferenceInfoType\"/>\n    <xsd:complexType name=\"ReferenceInfoType\">\n        <xsd:sequence>\n            <xsd:element ref=\"ds:DigestMethod\"/>\n            <xsd:element ref=\"ds:DigestValue\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n        <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"GenericTimeStampType\" abstract=\"true\">\n        <xsd:sequence>\n            <xsd:choice minOccurs=\"0\">\n                <xsd:element ref=\"Include\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n                <xsd:element ref=\"ReferenceInfo\" maxOccurs=\"unbounded\"/>\n            </xsd:choice>\n            <xsd:element ref=\"ds:CanonicalizationMethod\" minOccurs=\"0\"/>\n            <xsd:choice maxOccurs=\"unbounded\">\n                <xsd:element name=\"EncapsulatedTimeStamp\" type=\"EncapsulatedPKIDataType\"/>\n                <xsd:element name=\"XMLTimeStamp\" type=\"AnyType\"/>\n            </xsd:choice>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End GenericTimeStampType -->\n    <!-- Start XAdESTimeStampType -->\n    <xsd:element name=\"XAdESTimeStamp\" type=\"XAdESTimeStampType\"/>\n    <xsd:complexType name=\"XAdESTimeStampType\">\n        <xsd:complexContent>\n            <xsd:restriction base=\"GenericTimeStampType\">\n                <xsd:sequence>\n                    <xsd:element ref=\"Include\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n                    <xsd:element ref=\"ds:CanonicalizationMethod\" minOccurs=\"0\"/>\n                    <xsd:choice maxOccurs=\"unbounded\">\n                        <xsd:element name=\"EncapsulatedTimeStamp\" type=\"EncapsulatedPKIDataType\"/>\n                        <xsd:element name=\"XMLTimeStamp\" type=\"AnyType\"/>\n                    </xsd:choice>\n                </xsd:sequence>\n                <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n            </xsd:restriction>\n        </xsd:complexContent>\n    </xsd:complexType>\n    <!-- End XAdESTimeStampType -->\n    <!-- Start OtherTimeStampType -->\n    <xsd:element name=\"OtherTimeStamp\" type=\"OtherTimeStampType\"/>\n    <xsd:complexType name=\"OtherTimeStampType\">\n        <xsd:complexContent>\n            <xsd:restriction base=\"GenericTimeStampType\">\n                <xsd:sequence>\n                    <xsd:element ref=\"ReferenceInfo\" maxOccurs=\"unbounded\"/>\n                    <xsd:element ref=\"ds:CanonicalizationMethod\" minOccurs=\"0\"/>\n                    <xsd:choice>\n                        <xsd:element name=\"EncapsulatedTimeStamp\" type=\"EncapsulatedPKIDataType\"/>\n                        <xsd:element name=\"XMLTimeStamp\" type=\"AnyType\"/>\n                    </xsd:choice>\n                </xsd:sequence>\n                <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n            </xsd:restriction>\n        </xsd:complexContent>\n    </xsd:complexType>\n    <!-- End OtherTimeStampType -->\n    <!-- End time-stamp containers types -->\n    <!-- End auxiliary types definitions-->\n    <!-- Start container types -->\n    <!-- Start QualifyingProperties -->\n    <xsd:element name=\"QualifyingProperties\" type=\"QualifyingPropertiesType\"/>\n    <xsd:complexType name=\"QualifyingPropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"SignedProperties\" type=\"SignedPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"UnsignedProperties\" type=\"UnsignedPropertiesType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Target\" type=\"xsd:anyURI\" use=\"required\"/>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End QualifyingProperties -->\n    <!-- Start SignedProperties-->\n    <xsd:element name=\"SignedProperties\" type=\"SignedPropertiesType\"/>\n    <xsd:complexType name=\"SignedPropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"SignedSignatureProperties\" type=\"SignedSignaturePropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"SignedDataObjectProperties\" type=\"SignedDataObjectPropertiesType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End SignedProperties-->\n    <!-- Start UnsignedProperties-->\n    <xsd:element name=\"UnsignedProperties\" type=\"UnsignedPropertiesType\"/>\n    <xsd:complexType name=\"UnsignedPropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"UnsignedSignatureProperties\" type=\"UnsignedSignaturePropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"UnsignedDataObjectProperties\" type=\"UnsignedDataObjectPropertiesType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End UnsignedProperties-->\n    <!-- Start SignedSignatureProperties-->\n    <xsd:element name=\"SignedSignatureProperties\" type=\"SignedSignaturePropertiesType\"/>\n    <xsd:complexType name=\"SignedSignaturePropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"SigningTime\" type=\"xsd:dateTime\" minOccurs=\"0\"/>\n            <xsd:element name=\"SigningCertificate\" type=\"CertIDListType\" minOccurs=\"0\"/>\n            <xsd:element name=\"SignaturePolicyIdentifier\" type=\"SignaturePolicyIdentifierType\" minOccurs=\"0\"/>\n            <xsd:element name=\"SignatureProductionPlace\" type=\"SignatureProductionPlaceType\" minOccurs=\"0\"/>\n            <xsd:element name=\"SignerRole\" type=\"SignerRoleType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End SignedSignatureProperties-->\n    <!-- Start SignedDataObjectProperties-->\n    <xsd:element name=\"SignedDataObjectProperties\" type=\"SignedDataObjectPropertiesType\"/>\n    <xsd:complexType name=\"SignedDataObjectPropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataObjectFormat\" type=\"DataObjectFormatType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n            <xsd:element name=\"CommitmentTypeIndication\" type=\"CommitmentTypeIndicationType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n            <xsd:element name=\"AllDataObjectsTimeStamp\" type=\"XAdESTimeStampType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n            <xsd:element name=\"IndividualDataObjectsTimeStamp\" type=\"XAdESTimeStampType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End SignedDataObjectProperties-->\n    <!-- Start UnsignedSignatureProperties-->\n    <xsd:element name=\"UnsignedSignatureProperties\" type=\"UnsignedSignaturePropertiesType\"/>\n    <xsd:complexType name=\"UnsignedSignaturePropertiesType\">\n        <xsd:choice maxOccurs=\"unbounded\">\n            <xsd:element name=\"CounterSignature\" type=\"CounterSignatureType\"/>\n            <xsd:element name=\"SignatureTimeStamp\" type=\"XAdESTimeStampType\"/>\n            <xsd:element name=\"CompleteCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n            <xsd:element name=\"CompleteRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n            <xsd:element name=\"AttributeCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n            <xsd:element name=\"AttributeRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n            <xsd:element name=\"SigAndRefsTimeStamp\" type=\"XAdESTimeStampType\"/>\n            <xsd:element name=\"RefsOnlyTimeStamp\" type=\"XAdESTimeStampType\"/>\n            <xsd:element name=\"CertificateValues\" type=\"CertificateValuesType\"/>\n            <xsd:element name=\"RevocationValues\" type=\"RevocationValuesType\"/>\n            <xsd:element name=\"AttrAuthoritiesCertValues\" type=\"CertificateValuesType\"/>\n            <xsd:element name=\"AttributeRevocationValues\" type=\"RevocationValuesType\"/>\n            <xsd:element name=\"ArchiveTimeStamp\" type=\"XAdESTimeStampType\"/>\n            <xsd:any namespace=\"##other\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End UnsignedSignatureProperties-->\n    <!-- Start UnsignedDataObjectProperties-->\n    <xsd:element name=\"UnsignedDataObjectProperties\" type=\"UnsignedDataObjectPropertiesType\"/>\n    <xsd:complexType name=\"UnsignedDataObjectPropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"UnsignedDataObjectProperty\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End UnsignedDataObjectProperties-->\n    <!-- Start QualifyingPropertiesReference-->\n    <xsd:element name=\"QualifyingPropertiesReference\" type=\"QualifyingPropertiesReferenceType\"/>\n    <xsd:complexType name=\"QualifyingPropertiesReferenceType\">\n        <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"required\"/>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End QualifyingPropertiesReference-->\n    <!-- End container types -->\n    <!-- Start SigningTime element -->\n    <xsd:element name=\"SigningTime\" type=\"xsd:dateTime\"/>\n    <!-- End SigningTime element -->\n    <!-- Start SigningCertificate -->\n    <xsd:element name=\"SigningCertificate\" type=\"CertIDListType\"/>\n    <xsd:complexType name=\"CertIDListType\">\n        <xsd:sequence>\n            <xsd:element name=\"Cert\" type=\"CertIDType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"CertIDType\">\n        <xsd:sequence>\n            <xsd:element name=\"CertDigest\" type=\"DigestAlgAndValueType\"/>\n            <xsd:element name=\"IssuerSerial\" type=\"ds:X509IssuerSerialType\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DigestAlgAndValueType\">\n        <xsd:sequence>\n            <xsd:element ref=\"ds:DigestMethod\"/>\n            <xsd:element ref=\"ds:DigestValue\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End SigningCertificate -->\n    <!-- Start SignaturePolicyIdentifier -->\n    <xsd:element name=\"SignaturePolicyIdentifier\" type=\"SignaturePolicyIdentifierType\"/>\n    <xsd:complexType name=\"SignaturePolicyIdentifierType\">\n        <xsd:choice>\n            <xsd:element name=\"SignaturePolicyId\" type=\"SignaturePolicyIdType\"/>\n            <xsd:element name=\"SignaturePolicyImplied\"/>\n        </xsd:choice>\n    </xsd:complexType>\n    <xsd:complexType name=\"SignaturePolicyIdType\">\n        <xsd:sequence>\n            <xsd:element name=\"SigPolicyId\" type=\"ObjectIdentifierType\"/>\n            <xsd:element ref=\"ds:Transforms\" minOccurs=\"0\"/>\n            <xsd:element name=\"SigPolicyHash\" type=\"DigestAlgAndValueType\"/>\n            <xsd:element name=\"SigPolicyQualifiers\" type=\"SigPolicyQualifiersListType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"SigPolicyQualifiersListType\">\n        <xsd:sequence>\n            <xsd:element name=\"SigPolicyQualifier\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:element name=\"SPURI\" type=\"xsd:anyURI\"/>\n    <xsd:element name=\"SPUserNotice\" type=\"SPUserNoticeType\"/>\n    <xsd:complexType name=\"SPUserNoticeType\">\n        <xsd:sequence>\n            <xsd:element name=\"NoticeRef\" type=\"NoticeReferenceType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ExplicitText\" type=\"xsd:string\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"NoticeReferenceType\">\n        <xsd:sequence>\n            <xsd:element name=\"Organization\" type=\"xsd:string\"/>\n            <xsd:element name=\"NoticeNumbers\" type=\"IntegerListType\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"IntegerListType\">\n        <xsd:sequence>\n            <xsd:element name=\"int\" type=\"xsd:integer\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End SignaturePolicyIdentifier -->\n    <!-- Start CounterSignature -->\n    <xsd:element name=\"CounterSignature\" type=\"CounterSignatureType\"/>\n    <xsd:complexType name=\"CounterSignatureType\">\n        <xsd:sequence>\n            <xsd:element ref=\"ds:Signature\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End CounterSignature -->\n    <!-- Start DataObjectFormat -->\n    <xsd:element name=\"DataObjectFormat\" type=\"DataObjectFormatType\"/>\n    <xsd:complexType name=\"DataObjectFormatType\">\n        <xsd:sequence>\n            <xsd:element name=\"Description\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"ObjectIdentifier\" type=\"ObjectIdentifierType\" minOccurs=\"0\"/>\n            <xsd:element name=\"MimeType\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Encoding\" type=\"xsd:anyURI\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"ObjectReference\" type=\"xsd:anyURI\" use=\"required\"/>\n    </xsd:complexType>\n    <!-- End DataObjectFormat -->\n    <!-- Start CommitmentTypeIndication -->\n    <xsd:element name=\"CommitmentTypeIndication\" type=\"CommitmentTypeIndicationType\"/>\n    <xsd:complexType name=\"CommitmentTypeIndicationType\">\n        <xsd:sequence>\n            <xsd:element name=\"CommitmentTypeId\" type=\"ObjectIdentifierType\"/>\n            <xsd:choice>\n                <xsd:element name=\"ObjectReference\" type=\"xsd:anyURI\" maxOccurs=\"unbounded\"/>\n                <xsd:element name=\"AllSignedDataObjects\"/>\n            </xsd:choice>\n            <xsd:element name=\"CommitmentTypeQualifiers\" type=\"CommitmentTypeQualifiersListType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"CommitmentTypeQualifiersListType\">\n        <xsd:sequence>\n            <xsd:element name=\"CommitmentTypeQualifier\" type=\"AnyType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End CommitmentTypeIndication -->\n    <!-- Start SignatureProductionPlace -->\n    <xsd:element name=\"SignatureProductionPlace\" type=\"SignatureProductionPlaceType\"/>\n    <xsd:complexType name=\"SignatureProductionPlaceType\">\n        <xsd:sequence>\n            <xsd:element name=\"City\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"StateOrProvince\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PostalCode\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CountryName\" type=\"xsd:string\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End SignatureProductionPlace -->\n    <!-- Start SignerRole -->\n    <xsd:element name=\"SignerRole\" type=\"SignerRoleType\"/>\n    <xsd:complexType name=\"SignerRoleType\">\n        <xsd:sequence>\n            <xsd:element name=\"ClaimedRoles\" type=\"ClaimedRolesListType\" minOccurs=\"0\"/>\n            <xsd:element name=\"CertifiedRoles\" type=\"CertifiedRolesListType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"ClaimedRolesListType\">\n        <xsd:sequence>\n            <xsd:element name=\"ClaimedRole\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"CertifiedRolesListType\">\n        <xsd:sequence>\n            <xsd:element name=\"CertifiedRole\" type=\"EncapsulatedPKIDataType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End SignerRole -->\n    <xsd:element name=\"AllDataObjectsTimeStamp\" type=\"XAdESTimeStampType\"/>\n    <xsd:element name=\"IndividualDataObjectsTimeStamp\" type=\"XAdESTimeStampType\"/>\n    <xsd:element name=\"SignatureTimeStamp\" type=\"XAdESTimeStampType\"/>\n    <!-- Start CompleteCertificateRefs -->\n    <xsd:element name=\"CompleteCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n    <xsd:complexType name=\"CompleteCertificateRefsType\">\n        <xsd:sequence>\n            <xsd:element name=\"CertRefs\" type=\"CertIDListType\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End CompleteCertificateRefs -->\n    <!-- Start CompleteRevocationRefs-->\n    <xsd:element name=\"CompleteRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n    <xsd:complexType name=\"CompleteRevocationRefsType\">\n        <xsd:sequence>\n            <xsd:element name=\"CRLRefs\" type=\"CRLRefsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"OCSPRefs\" type=\"OCSPRefsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"OtherRefs\" type=\"OtherCertStatusRefsType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CRLRefsType\">\n        <xsd:sequence>\n            <xsd:element name=\"CRLRef\" type=\"CRLRefType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"CRLRefType\">\n        <xsd:sequence>\n            <xsd:element name=\"DigestAlgAndValue\" type=\"DigestAlgAndValueType\"/>\n            <xsd:element name=\"CRLIdentifier\" type=\"CRLIdentifierType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"CRLIdentifierType\">\n        <xsd:sequence>\n            <xsd:element name=\"Issuer\" type=\"xsd:string\"/>\n            <xsd:element name=\"IssueTime\" type=\"xsd:dateTime\"/>\n            <xsd:element name=\"Number\" type=\"xsd:integer\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"OCSPRefsType\">\n        <xsd:sequence>\n            <xsd:element name=\"OCSPRef\" type=\"OCSPRefType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"OCSPRefType\">\n        <xsd:sequence>\n            <xsd:element name=\"OCSPIdentifier\" type=\"OCSPIdentifierType\"/>\n            <xsd:element name=\"DigestAlgAndValue\" type=\"DigestAlgAndValueType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"ResponderIDType\">\n        <xsd:choice>\n            <xsd:element name=\"ByName\" type=\"xsd:string\"/>\n            <xsd:element name=\"ByKey\" type=\"xsd:base64Binary\"/>\n        </xsd:choice>\n    </xsd:complexType>\n    <xsd:complexType name=\"OCSPIdentifierType\">\n        <xsd:sequence>\n            <xsd:element name=\"ResponderID\" type=\"ResponderIDType\"/>\n            <xsd:element name=\"ProducedAt\" type=\"xsd:dateTime\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"URI\" type=\"xsd:anyURI\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"OtherCertStatusRefsType\">\n        <xsd:sequence>\n            <xsd:element name=\"OtherRef\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End CompleteRevocationRefs-->\n    <xsd:element name=\"AttributeCertificateRefs\" type=\"CompleteCertificateRefsType\"/>\n    <xsd:element name=\"AttributeRevocationRefs\" type=\"CompleteRevocationRefsType\"/>\n    <xsd:element name=\"SigAndRefsTimeStamp\" type=\"XAdESTimeStampType\"/>\n    <xsd:element name=\"RefsOnlyTimeStamp\" type=\"XAdESTimeStampType\"/>\n    <!-- Start CertificateValues -->\n    <xsd:element name=\"CertificateValues\" type=\"CertificateValuesType\"/>\n    <xsd:complexType name=\"CertificateValuesType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"EncapsulatedX509Certificate\" type=\"EncapsulatedPKIDataType\"/>\n            <xsd:element name=\"OtherCertificate\" type=\"AnyType\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <!-- End CertificateValues -->\n    <!-- Start RevocationValues-->\n    <xsd:element name=\"RevocationValues\" type=\"RevocationValuesType\"/>\n    <xsd:complexType name=\"RevocationValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"CRLValues\" type=\"CRLValuesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"OCSPValues\" type=\"OCSPValuesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"OtherValues\" type=\"OtherCertStatusValuesType\" minOccurs=\"0\"/>\n        </xsd:sequence>\n        <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CRLValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"EncapsulatedCRLValue\" type=\"EncapsulatedPKIDataType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"OCSPValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"EncapsulatedOCSPValue\" type=\"EncapsulatedPKIDataType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <xsd:complexType name=\"OtherCertStatusValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"OtherValue\" type=\"AnyType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n    </xsd:complexType>\n    <!-- End RevocationValues-->\n    <xsd:element name=\"AttrAuthoritiesCertValues\" type=\"CertificateValuesType\"/>\n    <xsd:element name=\"AttributeRevocationValues\" type=\"RevocationValuesType\"/>\n    <xsd:element name=\"ArchiveTimeStamp\" type=\"XAdESTimeStampType\"/>\n</xsd:schema>\n"
  },
  {
    "path": "src/xml/xades_time_stamp.ts",
    "content": "import {\n  XmlAttribute, XmlChildElement, XmlElement,\n} from 'xml-core';\nimport { CanonicalizationMethod } from 'xmldsigjs';\nimport {\n  EncapsulatedTimeStampCollection, Include, XMLTimeStampCollection,\n} from './generic_time_stamp';\nimport { XmlXades } from './xml';\nimport { XadesObject } from './xml_base';\n\n/**\n *\n * <xsd:element name=\"XAdESTimeStamp\" type=\"XAdESTimeStampType\"/>\n * <xsd:complexType name=\"XAdESTimeStampType\">\n *     <xsd:complexContent>\n *         <xsd:restriction base=\"GenericTimeStampType\">\n *             <xsd:sequence>\n *                 <xsd:element ref=\"Include\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n *                 <xsd:element ref=\"ds:CanonicalizationMethod\" minOccurs=\"0\"/>\n *                 <xsd:choice maxOccurs=\"unbounded\">\n *                     <xsd:element name=\"EncapsulatedTimeStamp\" type=\"EncapsulatedPKIDataType\"/>\n *                     <xsd:element name=\"XMLTimeStamp\" type=\"AnyType\"/>\n *                 </xsd:choice>\n *             </xsd:sequence>\n *             <xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"optional\"/>\n *         </xsd:restriction>\n *     </xsd:complexContent>\n * </xsd:complexType>\n *\n */\n\n@XmlElement({ localName: XmlXades.ElementNames.XAdESTimeStamp })\nexport class XAdESTimeStamp extends XadesObject {\n  @XmlAttribute({\n    localName: XmlXades.AttributeNames.Id, defaultValue: '',\n  })\n  public Id: string;\n\n  @XmlChildElement({ parser: Include })\n  public Include: Include;\n\n  @XmlChildElement({ parser: CanonicalizationMethod })\n  public CanonicalizationMethod: CanonicalizationMethod;\n\n  @XmlChildElement({\n    parser: EncapsulatedTimeStampCollection, noRoot: true,\n  })\n  public EncapsulatedTimeStamp: EncapsulatedTimeStampCollection;\n\n  @XmlChildElement({\n    parser: XMLTimeStampCollection, noRoot: true,\n  })\n  public XMLTimeStamp: XMLTimeStampCollection;\n}\n"
  },
  {
    "path": "src/xml/xml.ts",
    "content": "export const XmlXades = {\n\n  DefaultPrefix: 'xades',\n\n  /**\n   * The XAdES XML namespace URI\n   */\n  NamespaceURI: 'http://uri.etsi.org/01903/v1.3.2#',\n\n  /**\n   * Mandated type name for the Uri reference to the SignedProperties element\n   */\n  SignedPropertiesType: 'http://uri.etsi.org/01903/v1.3.2#SignedProperties',\n\n  ElementNames: {\n    Any: 'Any',\n    ByName: 'ByName',\n    ByKey: 'ByKey',\n    AttrAuthoritiesCertValues: 'AttrAuthoritiesCertValues',\n    AttributeRevocationValues: 'AttributeRevocationValues',\n    AttributeCertificateRefs: 'AttributeCertificateRefs',\n    AttributeRevocationRefs: 'AttributeRevocationRefs',\n    QualifyingProperties: 'QualifyingProperties',\n    QualifyingPropertiesReference: 'QualifyingPropertiesReference',\n    SignedProperties: 'SignedProperties',\n    SignedSignatureProperties: 'SignedSignatureProperties',\n    SignedDataObjectProperties: 'SignedDataObjectProperties',\n    UnsignedProperties: 'UnsignedProperties',\n    UnsignedSignatureProperties: 'UnsignedSignatureProperties',\n    UnsignedDataObjectProperties: 'UnsignedDataObjectProperties',\n    UnsignedDataObjectProperty: 'UnsignedDataObjectProperty',\n    SigningTime: 'SigningTime',\n    SigningCertificate: 'SigningCertificate',\n    SigningCertificateV2: 'SigningCertificateV2',\n    SignaturePolicyIdentifier: 'SignaturePolicyIdentifier',\n    SignatureProductionPlace: 'SignatureProductionPlace',\n    SignerRole: 'SignerRole',\n    Cert: 'Cert',\n    CertDigest: 'CertDigest',\n    IssuerSerial: 'IssuerSerial',\n    IssuerSerialV2: 'IssuerSerialV2',\n    DataObjectFormat: 'DataObjectFormat',\n    CommitmentTypeIndication: 'CommitmentTypeIndication',\n    AllDataObjectsTimeStamp: 'AllDataObjectsTimeStamp',\n    IndividualDataObjectsTimeStamp: 'IndividualDataObjectsTimeStamp',\n    HashDataInfo: 'HashDataInfo',\n    EncapsulatedTimeStamp: 'EncapsulatedTimeStamp',\n    XMLTimeStamp: 'XMLTimeStamp',\n    XAdESTimeStamp: 'XAdESTimeStamp',\n    OtherTimeStamp: 'OtherTimeStamp',\n    Description: 'Description',\n    ObjectIdentifier: 'ObjectIdentifier',\n    MimeType: 'MimeType',\n    Encoding: 'Encoding',\n    Identifier: 'Identifier',\n    DocumentationReferences: 'DocumentationReferences',\n    DocumentationReference: 'DocumentationReference',\n    CommitmentTypeId: 'CommitmentTypeId',\n    ObjectReference: 'ObjectReference',\n    CommitmentTypeQualifiers: 'CommitmentTypeQualifiers',\n    AllSignedDataObjects: 'AllSignedDataObjects',\n    CommitmentTypeQualifier: 'CommitmentTypeQualifier',\n    SignaturePolicyId: 'SignaturePolicyId',\n    SignaturePolicyImplied: 'SignaturePolicyImplied',\n    SigPolicyId: 'SigPolicyId',\n    SigPolicyHash: 'SigPolicyHash',\n    SigPolicyQualifier: 'SigPolicyQualifier',\n    SigPolicyQualifiers: 'SigPolicyQualifiers',\n    SPURI: 'SPURI',\n    SPUserNotice: 'SPUserNotice',\n    NoticeRef: 'NoticeRef',\n    ExplicitText: 'ExplicitText',\n    ClaimedRoles: 'ClaimedRoles',\n    ClaimedRole: 'ClaimedRole',\n    CertifiedRoles: 'CertifiedRoles',\n    CertifiedRole: 'CertifiedRole',\n    Organization: 'Organization',\n    NoticeNumbers: 'NoticeNumbers',\n    Int: 'int',\n    City: 'City',\n    PostalCode: 'PostalCode',\n    StateOrProvince: 'StateOrProvince',\n    CountryName: 'CountryName',\n    CounterSignature: 'CounterSignature',\n    SignatureTimeStamp: 'SignatureTimeStamp',\n    CompleteCertificateRefs: 'CompleteCertificateRefs',\n    CompleteRevocationRefs: 'CompleteRevocationRefs',\n    SigAndRefsTimeStamp: 'SigAndRefsTimeStamp',\n    RefsOnlyTimeStamp: 'RefsOnlyTimeStamp',\n    CertificateValues: 'CertificateValues',\n    RevocationValues: 'RevocationValues',\n    ArchiveTimeStamp: 'ArchiveTimeStamp',\n    CertRefs: 'CertRefs',\n    CRLRefs: 'CRLRefs',\n    CRLRef: 'CRLRef',\n    OCSPRefs: 'OCSPRefs',\n    OtherRefs: 'OtherRefs',\n    OtherRef: 'OtherRef',\n    DigestAlgAndValue: 'DigestAlgAndValue',\n    CRLIdentifier: 'CRLIdentifier',\n    Issuer: 'Issuer',\n    IssueTime: 'IssueTime',\n    Number: 'Number',\n    OCSPRef: 'OCSPRef',\n    OCSPIdentifier: 'OCSPIdentifier',\n    ResponderID: 'ResponderID',\n    ProducedAt: 'ProducedAt',\n    EncapsulatedX509Certificate: 'EncapsulatedX509Certificate',\n    OtherCertificate: 'OtherCertificate',\n    CRLValues: 'CRLValues',\n    OCSPValues: 'OCSPValues',\n    OtherValues: 'OtherValues',\n    OtherValue: 'OtherValue',\n    EncapsulatedCRLValue: 'EncapsulatedCRLValue',\n    EncapsulatedOCSPValue: 'EncapsulatedOCSPValue',\n    ReferenceInfo: 'ReferenceInfo',\n    Include: 'Include',\n  },\n\n  AttributeNames: {\n    Id: 'Id',\n    Encoding: 'Encoding',\n    Target: 'Target',\n    ObjectReference: 'ObjectReference',\n    Qualifier: 'Qualifier',\n    Uri: 'uri',\n    URI: 'URI',\n    ReferencedData: 'referencedData',\n  },\n};\n"
  },
  {
    "path": "src/xml/xml_base.ts",
    "content": "import * as XmlCore from 'xml-core';\nimport { XmlElement } from 'xml-core';\nimport { XmlXades } from './xml';\n\n@XmlElement({\n  localName: 'xades',\n  namespaceURI: XmlXades.NamespaceURI,\n  prefix: XmlXades.DefaultPrefix,\n})\nexport abstract class XadesObject extends XmlCore.XmlObject { }\n\n@XmlElement({\n  localName: 'xades_collection',\n  namespaceURI: XmlXades.NamespaceURI,\n  prefix: XmlXades.DefaultPrefix,\n})\nexport abstract class XadesCollection<I extends XadesObject> extends XmlCore.XmlCollection<I> { }\n"
  },
  {
    "path": "test/signed_xml/signing.ts",
    "content": "import * as assert from 'assert';\nimport { Crypto } from '@peculiar/webcrypto';\nimport * as XmlCore from 'xml-core';\nimport * as XAdES from '../../src';\n\ncontext('XAdES signing', () => {\n  const cert = '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';\n\n  let keys: Required<CryptoKeyPair>;\n  const alg = {\n    name: 'RSASSA-PKCS1-v1_5',\n    hash: 'SHA-256',\n    publicExponent: new Uint8Array([1, 0, 1]),\n    modulusLength: 1024,\n  };\n  const xml = `<root><child>Test</child></root>`;\n\n  before(async () => {\n    const crypto = new Crypto();\n\n    XAdES.Application.setEngine('NodeJS', crypto);\n\n    keys = await crypto.subtle.generateKey(alg, true, ['sign', 'verify']) as Required<CryptoKeyPair>;\n  });\n\n  it('Default signing (SigningTime, SignaturePolicyIdentifier)', (done) => {\n    const signature = new XAdES.SignedXml();\n\n    signature.Sign( // Signing document\n      alg, // algorithm\n      keys.privateKey, // key\n      XAdES.Parse(xml), // document\n      { // options\n        keyValue: keys.publicKey,\n        references: [\n          {\n            hash: 'SHA-256', transforms: ['enveloped'],\n          },\n        ],\n      })\n      .then(() => {\n        const sig = signature.toString();\n\n        assert.equal(!!sig, true);\n\n        const xades = new XAdES.SignedXml(XAdES.Parse(sig));\n\n        xades.LoadXml(signature.XmlSignature.GetXml()!);\n\n        assert.equal(!!xades.SignedProperties, true);\n        assert.equal(!!xades.SignedProperties.SignedSignatureProperties.SigningTime, true);\n        assert.equal(!!xades.SignedProperties.SignedSignatureProperties.SigningTime.Value, true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignaturePolicyIdentifier.IsEmpty(), true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignerRole.IsEmpty(), true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SigningCertificate.IsEmpty(), true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignatureProductionPlace.IsEmpty(), true);\n\n        return xades.Verify();\n      })\n      .then((res) => {\n        assert.equal(res, true, 'XAdES signature is not valid');\n      })\n      .then(done, done);\n  });\n\n  it('Default signing with explicit policy (SigningTime, SigningCertificateV2, SignaturePolicyIdentifier)', (done) => {\n    const signature = new XAdES.SignedXml();\n    const testDigest = 'Q0copBCnj1b8G1iZw1k0NuYasMcx6QctleltspAgXlM='; // echo 'content' | openssl dgst -sha256 -binary | openssl base64 | tr -d '\\n'\n    const keyInfoId = 'KeyInfoId001';\n\n    signature.XmlSignature.KeyInfo.Id = keyInfoId;\n    signature.Sign( // Signing document\n      alg, // algorithm\n      keys.privateKey, // key\n      XAdES.Parse(xml), // document\n      { // options\n        keyValue: keys.publicKey,\n        references: [\n          {\n            hash: 'SHA-256', transforms: ['enveloped'],\n          },\n          {\n            hash: 'SHA-256', uri: '#' + keyInfoId,\n          },\n        ],\n        policy: {\n          identifier: { value: 'Identifier Value' },\n          hash: { name: 'SHA-256' },\n          digestValue: testDigest,\n        },\n        signingCertificateV2: cert,\n        x509: [cert],\n      })\n      .then(() => {\n        const sig = signature.toString();\n\n        assert.equal(!!sig, true);\n\n        const xades = new XAdES.SignedXml(XAdES.Parse(sig));\n\n        xades.LoadXml(signature.XmlSignature.GetXml()!);\n\n        assert.equal(!!xades.SignedProperties, true);\n        assert.equal(!!xades.SignedProperties.SignedSignatureProperties.SigningTime, true);\n        assert.equal(!!xades.SignedProperties.SignedSignatureProperties.SigningTime.Value, true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignaturePolicyIdentifier.IsEmpty(), false);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignerRole.IsEmpty(), true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SigningCertificate.IsEmpty(), true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignatureProductionPlace.IsEmpty(), true);\n        assert.equal(\n          XmlCore.Convert.ToBase64(xades.SignedProperties.SignedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyId.SigPolicyHash.DigestValue),\n          testDigest);\n\n        return xades.Verify();\n      })\n      .then((res) => {\n        assert.equal(res, true, 'XAdES signature is not valid');\n      })\n      .then(done, done);\n  });\n\n  it('SigningCertificate, SigningCertificateV2, SignatireProductionPlace, SignerRole', (done) => {\n    const signature = new XAdES.SignedXml();\n\n    signature.Sign( // Signing document\n      alg, // algorithm\n      keys.privateKey, // key\n      XAdES.Parse(xml), // document\n      { // options\n        keyValue: keys.publicKey,\n        references: [\n          {\n            hash: 'SHA-256', transforms: ['enveloped'],\n          },\n        ],\n        productionPlace: {\n          country: 'Country',\n          state: 'State',\n          city: 'City',\n          code: 'Code',\n        },\n        signerRole: { claimed: ['1', '2', '3'] },\n        signingCertificate: cert,\n        signingCertificateV2: cert,\n      })\n      .then(() => {\n        const sig = signature.toString();\n\n        assert.equal(!!sig, true);\n\n        const xades = new XAdES.SignedXml(XAdES.Parse(sig));\n\n        xades.LoadXml(signature.XmlSignature.GetXml()!);\n\n        assert.equal(!!xades.SignedProperties, true);\n        assert.equal(!!xades.SignedProperties.SignedSignatureProperties.SigningTime, true);\n        assert.equal(!!xades.SignedProperties.SignedSignatureProperties.SigningTime.Value, true);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyImplied, false);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignerRole.ClaimedRoles.Count, 3);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SigningCertificate.Count, 1);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SigningCertificateV2.Count, 1);\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignatureProductionPlace.CountryName, 'Country');\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignatureProductionPlace.City, 'City');\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignatureProductionPlace.StateOrProvince, 'State');\n        assert.equal(xades.SignedProperties.SignedSignatureProperties.SignatureProductionPlace.PostalCode, 'Code');\n\n        return xades.Verify();\n      })\n      .then((res) => {\n        assert.equal(res, true, 'XAdES signature is not valid');\n      })\n      .then(done, done);\n  });\n});\n"
  },
  {
    "path": "test/vectors/reading.ts",
    "content": "import * as assert from 'assert';\nimport { Crypto } from '@peculiar/webcrypto';\nimport { Application } from 'xmldsigjs';\nimport * as XAdES from '../../src';\nimport { SignedXml, xml } from '../../src';\n\nconst {\n  QualifyingProperties, SignatureTimeStamp, CertificateValues, RevocationValues, ArchiveTimeStamp,\n} = xml;\nconst { CounterSignature } = xml;\n\nApplication.setEngine('NodeJS', new Crypto());\n\nconst X_AT_SIT_1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?><ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Id=\"id-9763e891bef60a61e69e0ec1bd1ecd6d\"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/><ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256\"/><ds:Reference Id=\"r-id-1\" Type=\"http://www.w3.org/2000/09/xmldsig#Object\" URI=\"#o-id-1\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#base64\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>RYPCI7Bgg4yXSOBNABfWOl7jpMkI/6lbd8kh7w9uqyY=</ds:DigestValue></ds:Reference><ds:Reference Type=\"http://uri.etsi.org/01903#SignedProperties\" URI=\"#xades-id-9763e891bef60a61e69e0ec1bd1ecd6d\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>pIYqd/UZQQtVMhoQH+Zw2HFLHya+tP7wzEzwDArGTZk=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id=\"value-id-9763e891bef60a61e69e0ec1bd1ecd6d\">xiXWFbPsEOUD69k51vrOKb84fCEq43SYD/pmQ2C8QmxkOTGlktFFYNhhXvxjyWPiytmBJmW2qHOGTcITvxJw1w==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIErjCCA5agAwIBAgIEeZaQJDANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UEBhMCQVQxSDBGBgNVBAoMP0EtVHJ1c3QgR2VzLiBmLiBTaWNoZXJoZWl0c3N5c3RlbWUgaW0gZWxla3RyLiBEYXRlbnZlcmtlaHIgR21iSDEeMBwGA1UECwwVYS1zaWduLVByZW1pdW0tU2lnLTAyMR4wHAYDVQQDDBVhLXNpZ24tUHJlbWl1bS1TaWctMDIwHhcNMTYwMzI0MTYxOTIyWhcNMjEwMzI0MTUxOTIyWjB8MQswCQYDVQQGEwJBVDEbMBkGA1UEAwwSQWxleGFuZGVyIE1hcnNhbGVrMREwDwYDVQQEDAhNYXJzYWxlazESMBAGA1UEKgwJQWxleGFuZGVyMRUwEwYDVQQFEwwzNzg5MTkzMjE0NjMxEjAQBgNVBAwMCURpcGwuSW5nLjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN7mOMa18/wZyZkotFRZ0VsLN3aKhAbxduaGeB66+A6RdhQgQ6vmlno3PNTtKERAfxjtZI9tDGJcZ8mYG+17YLyjggHlMIIB4TB7BggrBgEFBQcBAQRvMG0wQgYIKwYBBQUHMAKGNmh0dHA6Ly93d3cuYS10cnVzdC5hdC9jZXJ0cy9hLXNpZ24tUHJlbWl1bS1TaWctMDJhLmNydDAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AuYS10cnVzdC5hdC9vY3NwMA4GA1UdDwEB/wQEAwIGwDAnBggrBgEFBQcBAwEB/wQYMBYwCAYGBACORgEBMAoGCCsGAQUFBwsBMIGaBgNVHR8EgZIwgY8wgYyggYmggYaGgYNsZGFwOi8vbGRhcC5hLXRydXN0LmF0L291PWEtc2lnbi1QcmVtaXVtLVNpZy0wMixvPUEtVHJ1c3QsYz1BVD9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0P2Jhc2U/b2JqZWN0Y2xhc3M9ZWlkQ2VydGlmaWNhdGlvbkF1dGhvcml0eTAJBgNVHRMEAjAAMFkGA1UdIARSMFAwCAYGBACLMAEBMEQGBiooABEBCzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtdHJ1c3QuYXQvZG9jcy9jcC9hLXNpZ24tUHJlbWl1bTATBgNVHSMEDDAKgAhN3+H/S9nJ3zARBgNVHQ4ECgQITpG2911UJ8swDQYJKoZIhvcNAQEFBQADggEBANOLX0OEeEL+BNd+68LDQjgk1zJoSkqzj1DQs4l4j2ug2ERtDk9Yh8MdO6cbbbMriltJrq2a7dDeri7Y8ZY3YBmHlsNb5yDj3YruKXwUDs6nEBeASt5nWaRXgjeLnbWe2J/71L8Gurip2+l0aStOjyvpCF5wUGbeReXCKwL6GVPwKFZJIdSqpP+FzN60ZLWx8TXwIf6weVodNFiYlg3eU33o4yY2sFNSUMKKyEEvl88bAq8v/iP5mIBYSxpGRF75L6LulAeFTG5CO3q95eJS/37+oyRPqhuu0Aqvva2Li0vmt+neMmW8O+jjArZaiBNMz8+5i91TmMOcM/y+2vfrhLw=</ds:X509Certificate></ds:X509Data></ds:KeyInfo><ds:Object><xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#id-9763e891bef60a61e69e0ec1bd1ecd6d\"><xades:SignedProperties Id=\"xades-id-9763e891bef60a61e69e0ec1bd1ecd6d\"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-28T14:54:07Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>XpGNNQXJ+Vd02hJtq2Ob8VdTJdY=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=a-sign-Premium-Sig-02,OU=a-sign-Premium-Sig-02,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</ds:X509IssuerName><ds:X509SerialNumber>2039910436</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference=\"#r-id-1\"><xades:MimeType>text/xml</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object><ds:Object Id=\"o-id-1\">77u/PHJvb3Q+PC9yb290Pg==</ds:Object></ds:Signature>`;\n\nconst X_BE_CONN_10 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?><ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Id=\"id-21397ed7ea00cd8bd472caa0c5c94cc6\"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/><ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512\"/><ds:Reference Id=\"r-id-1\" Type=\"http://www.w3.org/2000/09/xmldsig#Object\" URI=\"#o-id-1\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#base64\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\"/><ds:DigestValue>/cikpAxk8xGgUHwklwrsJ2/Qq/B26luNYw3fpY26ug42WCF2lkwpKY7vsvTITKwrO7dM1dQk6ITpSDL4dbBX0w==</ds:DigestValue></ds:Reference><ds:Reference Type=\"http://uri.etsi.org/01903#SignedProperties\" URI=\"#xades-id-21397ed7ea00cd8bd472caa0c5c94cc6\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\"/><ds:DigestValue>SXALBTUm1vexewLLw49h6rCch7GQ2/30oiE/dOEGAaLJ8fM/n0DdsJu9cpYT4QGiihjQAK18q5ZbTnKRDD4+XA==</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id=\"value-id-21397ed7ea00cd8bd472caa0c5c94cc6\">VYfWeXC17kgRIT9/UhHoxf333EW1UMbOQrmPCpkQekuQtiSTqZ5k+d64ZnkDnFdBn0Or9yqlloaXTAtGaPTAg/c9/D44VofFt4uPJoHW76lwuigIe+TDI89vHVEVAIBMXlnhox4a3SCWgiI+Sj0Mcio1F2KeAGjhgBn1PzO8/uN0lkSS+fhmrhh5Wf9vuZrjpK/EOfOX3UhGPwFGqSHpRsZeTejyBp6hJT07E7EQMtclJBvUrLl6VU5kDL0iX2iZnju6BcP/YQAJ0WXm5yHzyewwfaBjD5L3cIYdUzq3WUKm9LHd01I94R6Q+zIVcApnlGZcdPY0AEzsTXs3ElA8/w==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIE+DCCA+CgAwIBAgIRANjuOPqzu1t0TDYHP2jVMA4wDQYJKoZIhvcNAQELBQAwXTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExMzAxBgNVBAMTKkdsb2JhbFNpZ24gUGVyc29uYWxTaWduIDIgQ0EgLSBTSEEyNTYgLSBHMjAeFw0xNjAyMjYxMzIzMzhaFw0xOTAyMjYxMzIzMzhaMHYxCzAJBgNVBAYTAkJFMRAwDgYDVQQHEwdBbnR3ZXJwMRMwEQYDVQQKEwpDb25uZWN0aXZlMRQwEgYDVQQDEwtlU2lnbmF0dXJlczEqMCgGCSqGSIb3DQEJARYbZmlsaXAudmVycmV0aEBjb25uZWN0aXZlLmJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuNivfBhtykf+WktBrUe3szYt/q+pyYScUudy3hX3TwgvtCYq7eQwTChA366GzLfgoFZP5sen6lYmG+u4ahiizVEp8rLRIqIPNJXto5jjMjkB7KXoMSosuBGWbsDiizIUooE+hN7kw9mrqrRf8Glb1OOV+ccVJi2CF7RKOtAEFhCDyNBGK97sxIj6SGASsRDKbNw0UDVxtojgKEfNG6+n+7DrA8qqzMdPmXK6D7SyzytC7jSZzZAxRQmeiS3lCzSCc2MSNrL5y3FLQiQerCywWfVNca3tmdUEJ3jUOQMdjnkxgycFibbOB7DgiosVsQpz91zO2pLp4Nq+r56KmzknaQIDAQABo4IBmDCCAZQwDgYDVR0PAQH/BAQDAgWgMEwGA1UdIARFMEMwQQYJKwYBBAGgMgEoMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMCYGA1UdEQQfMB2BG2ZpbGlwLnZlcnJldGhAY29ubmVjdGl2ZS5iZTAJBgNVHRMEAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDBHBgNVHR8EQDA+MDygOqA4hjZodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzL2dzcGVyc29uYWxzaWduMnNoYTJnMi5jcmwwWQYIKwYBBQUHAQEETTBLMEkGCCsGAQUFBzAChj1odHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc3BlcnNvbmFsc2lnbjJzaGEyZzIuY3J0MB0GA1UdDgQWBBTD+eNJcDmzaGJeSdyLvx9fuHZ5kjAfBgNVHSMEGDAWgBQ/bFdEnlefff1oOcu58RrkuXZQODANBgkqhkiG9w0BAQsFAAOCAQEAmq687Y6atEKxcnIK0lYu3V7o+QFrQobAl7SoVLM0iobZFLv2hfmtUMVh31RPxlzJdQX/Jyugs/7mDoqHbSxDsWE5z9W78yLcS3e5vd7RYRjP2+K+4qlyq6KiMxBiZwEIS7DDloXji9ARLCtuR49UD/m/BdOLsQ2EEuJUy79c3O2fZOG8VXkA7EAhrNFunqQLhsTJX3KKNbqSDbk5qqjkTkwcZOTTHBHgHsS4KhK34+fu7J8XCbQuB8yZaU/D/P0Rqq0VRRvQgr/XluVQfeKadqsRy1uNSQPQaPmq4eqyBhyfFea2Tl0ROFYftL0xN0IhL/oYVyQfHi/Z1O2NlBgkuA==</ds:X509Certificate><ds:X509Certificate>MIIEWTCCA0GgAwIBAgILBAAAAAABMYnGMwYwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTEwODAyMTAwMDAwWhcNMTkwODAyMTAwMDAwWjBdMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEzMDEGA1UEAxMqR2xvYmFsU2lnbiBQZXJzb25hbFNpZ24gMiBDQSAtIFNIQTI1NiAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApgE6Bj5MPSUnvWXsVw3T83OPrVnh4H83EkyxLGF6+C1RRzDHJZiSgcOX4WhAxd7wlJito4g3tSlm+8Nr19VWmi7GWeTW6l9FMclGlTrfpKUdMQTlmddNhZDelMvnWgSg8vh8vg4gcc7xd7Qftf/2fD43y03EIKIYpEEwJwcde4kt5bekVQhIZpXB9zabJ7yaMjD5uMgnqC2MrrpZpRbp9ZjfbeqSRLxb27N0JcpWkY+RlSGyapZ8aWDaax9vHc7y2jwtoKTRGqVW9X6DtmtjvEHB1YZ9koJF3lHWS3ZAFg4G1l9EFXt188yyMjhdxBS4rJNilxyPtVO8t1p/4H5NmQIDAQABo4IBKTCCASUwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD9sV0SeV599/Wg5y7nxGuS5dlA4MEcGA1UdIARAMD4wPAYEVR0gADA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L3Jvb3QtcjMuY3JsMD4GCCsGAQUFBwEBBDIwMDAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL3Jvb3RyMzAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAZQXbpodKnOC3uGNy7zFRCxjalxvDMwBLoTLH6bzRd+mixceKwU/Sqc8SedsX4Yff9zDYM4UsheQ8Fc54VFLHblW121Uk9kZBw167YxvbNwMFH3nSxdvwD/l931lfMYpN/vnVsAWfg5fUEBhmVxJIgtEyKIelUxDuuF8Ls0KEhChEvuy76jGIg4weFiQKF4YaGd/mSY8Njx/cg1SM+V+1SmRDp4FX/JnQEqnrDTh4raFrd1J38ZL9/7KhWLbNAabDiqHyt32KOwmCOvmo4IrziNFLxWnsl8oX5G8OTfx3Oxd0Ee6+J7mYybD0OC3MBnbP3cSi+QV5BidYyLq2H4+0bQ==</ds:X509Certificate></ds:X509Data></ds:KeyInfo><ds:Object><xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#id-21397ed7ea00cd8bd472caa0c5c94cc6\"><xades:SignedProperties Id=\"xades-id-21397ed7ea00cd8bd472caa0c5c94cc6\"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-18T09:10:09Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>Rng2CooXsen7dOYSNbDtwPggzsM=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=GlobalSign PersonalSign 2 CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE</ds:X509IssuerName><ds:X509SerialNumber>288350169419475868349393263988944744462</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>yIiEUu5bMuMyvzmYuZhd87NlQ6s=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3</ds:X509IssuerName><ds:X509SerialNumber>4835703278459828975317766</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference=\"#r-id-1\"><xades:MimeType>application/octet-stream</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object><ds:Object Id=\"o-id-1\">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Q29udGVudD4NCjxwPlNpZ25pbmcgbWV0aG9kIC0gVG9vbCAtIENvbmZvcm1hbmNlIGxldmVsIC0gUEtDUy9Db25uZWN0aXZlIHBsdWdpbiAtIEVuY3J5cHRpZTwvcD4NCjxwPlhBZEVTIC0gRFNTIC0gQiAtIFBLQ1MgLSBTSEE1MTIgLSBFbnZlbG9waW5nPC9wPg0KPC9Db250ZW50Pg==</ds:Object></ds:Signature>`;\n\nconst X_BG_BOR_1 = `<xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Target=\"#id-413b14fe0d49b47be2670d4dbe692ded\"><xades:SignedProperties Id=\"xades-id-413b14fe0d49b47be2670d4dbe692ded\"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-11T13:47:15Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>AzoH1LMpBhOQFKS80NgcGFtUFJI=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>2.5.4.20=#13102b333539203220392032313520313030,1.2.840.113549.1.9.1=#161263613571657340622d74727573742e6f7267,2.5.4.17=#130431373834,STREET=bul. Tsarigradsko shose No 117,CN=B-Trust Operational CA QES,OU=B-Trust,O=BORICA - BANKSERVICE AD\\, EIK 201230426,L=Sofia,ST=Sofia,C=BG</ds:X509IssuerName><ds:X509SerialNumber>10027144</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier><xades:SignaturePolicyImplied/></xades:SignaturePolicyIdentifier><xades:SignatureProductionPlace><xades:City>Sofia</xades:City><xades:PostalCode>1784</xades:PostalCode><xades:StateOrProvince>bul. Tsar Boris 3 41,Sofia,PK:1612,EGN:8205301708</xades:StateOrProvince><xades:CountryName>BG</xades:CountryName></xades:SignatureProductionPlace><xades:SignerRole><xades:ClaimedRoles><xades:ClaimedRole>ПОДПИСАН ОТ</xades:ClaimedRole></xades:ClaimedRoles></xades:SignerRole></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference=\"#r-id-1\"><xades:MimeType>text/xml</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties>`;\n\nconst X_FR_CS_3 = `<xad:QualifyingProperties xmlns:xad=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#PRF_2\"><xad:SignedProperties Id=\"PRF_2-SignedProperties\"><xad:SignedSignatureProperties><xad:SigningTime>2016-04-12T10:34:36.132+02:00</xad:SigningTime><xad:SigningCertificate><xad:Cert><xad:CertDigest><xd:DigestMethod xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><xd:DigestValue xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\">arKMp/9CG2nbErN89ysQMIo1xKZONGn9VJ+BmjRSse8=</xd:DigestValue></xad:CertDigest><xad:IssuerSerial><xd:X509IssuerName xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\">CN=Secu Test Intermediate1, OU=SECU, O=CS, C=FR</xd:X509IssuerName><xd:X509SerialNumber xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\">4106</xd:X509SerialNumber></xad:IssuerSerial></xad:Cert></xad:SigningCertificate><xad:SignaturePolicyIdentifier><xad:SignaturePolicyId><xad:SigPolicyId><xad:Identifier>1.2.3</xad:Identifier></xad:SigPolicyId><xad:SigPolicyHash><xd:DigestMethod xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><xd:DigestValue xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\">s7DOPlXltkzAM96+KVFfxyBRYEVB4cR2BRF8eUaBPk8=</xd:DigestValue></xad:SigPolicyHash></xad:SignaturePolicyId></xad:SignaturePolicyIdentifier><xad:SignatureProductionPlace><xad:City>Paris</xad:City><xad:PostalCode>75013</xad:PostalCode><xad:CountryName>France</xad:CountryName></xad:SignatureProductionPlace><xad:SignerRole><xad:ClaimedRoles><xad:ClaimedRole>Marketing manager</xad:ClaimedRole></xad:ClaimedRoles></xad:SignerRole></xad:SignedSignatureProperties><xad:SignedDataObjectProperties><xad:DataObjectFormat ObjectReference=\"\"/><xad:CommitmentTypeIndication><xad:CommitmentTypeId><xad:Identifier>1.2.840.113549.1.9.16.6.3</xad:Identifier></xad:CommitmentTypeId><xad:AllSignedDataObjects/></xad:CommitmentTypeIndication></xad:SignedDataObjectProperties></xad:SignedProperties></xad:QualifyingProperties>`;\n\nconst X_BE_CONN_26 = `<xades:QualifyingProperties Target=\"#id-b26a17d23edf045b392cf714167df701\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\"><xades:SignedProperties Id=\"xades-id-b26a17d23edf045b392cf714167df701\"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-18T11:07:17Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>13t0/E8vfe/xdM+VBjmfdSA6xxo=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>2.5.4.5=#1306323031333033,CN=Citizen CA,C=BE</ds:X509IssuerName><ds:X509SerialNumber>21267647932559255678179375349212923798</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>ddcwZeM/LkMfMyoOyekc1gP9AWo=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=Belgium Root CA2,C=BE</ds:X509IssuerName><ds:X509SerialNumber>4881694401549605148318437027298508885</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue>UcygcQr3cz00rNwZRQmfQ1x/xZ8=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=Belgium Root CA2,C=BE</ds:X509IssuerName><ds:X509SerialNumber>3098404661496965511</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference=\"#r-id-1\"><xades:MimeType>text/xml</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties><xades:UnsignedProperties><xades:UnsignedSignatureProperties><xades:SignatureTimeStamp Id=\"TS-e964b0fc-172d-4631-bc0e-fa456c429a5e\"><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/><xades:EncapsulatedTimeStamp Id=\"ETS-e964b0fc-172d-4631-bc0e-fa456c429a5e\">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</xades:EncapsulatedTimeStamp></xades:SignatureTimeStamp><xades:CertificateValues><xades:EncapsulatedX509Certificate>MIIDjjCCAnagAwIBAgIIKv++n6Lw6YcwDQYJKoZIhvcNAQEFBQAwKDELMAkGA1UEBhMCQkUxGTAXBgNVBAMTEEJlbGdpdW0gUm9vdCBDQTIwHhcNMDcxMDA0MTAwMDAwWhcNMjExMjE1MDgwMDAwWjAoMQswCQYDVQQGEwJCRTEZMBcGA1UEAxMQQmVsZ2l1bSBSb290IENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMZzQh6S/3UPi790hqc/7bIYLS2X+an7mEoj39WN4IzGMhwWLQdC1i22bi+n9fzGhYJdld61IgDMqFNAn68KNaJ6x+HK92AQZw6nUHMXU5WfIp8MXW+2QbyM69odRr2nlL/zGsvU+40OHjPIltfsjFPekx40HopQcSZYtF3CiInaYNKJIT/e1wEYNm7hLHADBGXvmAYrXR5i3FVr/mZkIV/4L+HXmymvb82fqgxG0YjFnaKVn6w/Fa7yYd/vw2uaItgscf1YHewApDgglVrH1Tdjuk+bqv5WRi5j2Qsj1Yr6tSPwiRuhFA0m2kHwOI8w7QUmecFLTqG4flVSOmlGhHUCAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4CQEBMC4wLAYIKwYBBQUHAgEWIGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBSFiuv0xbu+DlkDlN7WgAEV4xCcOTARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUhYrr9MW7vg5ZA5Te1oABFeMQnDkwDQYJKoZIhvcNAQEFBQADggEBAFHYhd27V2/MoGy1oyCcUwnzSgEMdL8rs5qauhjyC4isHLMzr87lEwEnkoRYmhC598wUkmt0FoqW6FHvv/pKJaeJtmMrXZRY0c8RcrYeuTlBFk0pvDVTC9rejg7NqZV3JcqUWumyaa7YwBO+mPyWnIR/VRPmPIfjvCCkpDZoa01gZhz5v6yAlGYuuUGK02XThIAC71AdXkbc98m6tTR8KvPG2F9fVJ3bTc0R5/0UAoNmXsimABKgX77OFP67H6dh96tK8QYUn8pJQsKpvO2FsauBQeYNxUJpU4c5nUwfAA4+Bw11V0SoU7Q2dmSZ3G7rPUZuFF1eR1ONeE3gJ7uOhXY=</xades:EncapsulatedX509Certificate><xades:EncapsulatedX509Certificate>MIIEBTCCAu2gAwIBAgILBAAAAAABQeUqkm4wDQYJKoZIhvcNAQEFBQAwKDELMAkGA1UEBhMCQkUxGTAXBgNVBAMTEEJlbGdpdW0gUm9vdCBDQTIwHhcNMTMxMDIzMTEwMDAwWhcNMTkwMTIzMTEwMDAwWjBjMQswCQYDVQQGEwJCRTENMAsGA1UEBRMEMjAxNDEjMCEGA1UEChMaQmVsZ2l1bSBGZWRlcmFsIEdvdmVybm1lbnQxIDAeBgNVBAMTF1RpbWUgU3RhbXBpbmcgQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuurzcUZ9xj0Hxj8pzLPSdodxbl9hTzmvVFjVwkPlO/CKItuMv5jdX78vkJyxDoCIzlaydC8iX6LKVvbKWS8DHU4Q9vUg9jlyPrG3pM8/7uMKEiVJlo1Q7G/j3ycVIfKW5JgLEUkkA7prtjxumaUaNtoSoLXVbHU+4qIVLuBOq7dYwZN0oftYM6cUEslqDi8OSAZVyPYvUNI7klcQRh28duuMyUXhOzu4neBz49uSA5c3nAIHJxJH+zsIEIZ/rv2+oiFsN3NRy8mu8sHwOR1bf81SP73C6Gsgx0cjb4JaEvAdEXayOx5YjIkp8p9rF0sMHbimYy6Xhg6uAzObjFrQtwIDAQABo4H0MIHxMA4GA1UdDwEB/wQEAwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBDBgNVHSAEPDA6MDgGBmA4CQEBBTAuMCwGCCsGAQUFBwIBFiBodHRwOi8vcmVwb3NpdG9yeS5wa2kuYmVsZ2l1bS5iZTAdBgNVHQ4EFgQUhy+xl8l/bUtfYofrFHxPI0hLRJIwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NybC5wa2kuYmVsZ2l1bS5iZS9iZWxnaXVtMi5jcmwwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSFiuv0xbu+DlkDlN7WgAEV4xCcOTANBgkqhkiG9w0BAQUFAAOCAQEAKtng/BMJwJ4moDPdh0wJbMcDupg7Cr3PboLqNiVtJHtojtgya5+LDfIpDaBt054es/OKV3fNd40LU1eNBj0flU0SNgxwRqqWwBjdpBj9XCZsLsTlCjLDG7HJq6toyAfXYjHBj3KldUQS2g4wf3nxeQgDbLTs28MhpJWN9FCk2DJ63aPEbAZ/HA20NPAb86KM/LhO2AlkDwhpP510ih1dBWjiwNRrkrmxInW+PCQmBGR60rqRs5f8naosyR8URDz/wHiQ4Arn/HrX/KVZ2HMD8pt1IZY+5LuIuA2fn0hNCQyrGZoa3HNqIIP5zfavw0Tp+jDKLNNSsi5L8CP128lkug==</xades:EncapsulatedX509Certificate></xades:CertificateValues><xades:RevocationValues><xades:CRLValues><xades:EncapsulatedCRLValue>MIIDOjCCAiIwDQYJKoZIhvcNAQEFBQAwKDELMAkGA1UEBhMCQkUxGTAXBgNVBAMTEEJlbGdpdW0gUm9vdCBDQTIXDTE2MDIxNTExMDAwMFoXDTE2MDczMTExMDAwMFowggHHMCECEE1FUFdJcjw9LyE+OHxeLmQXDTE2MDIxNTExMDAwMFowIQIQamp3Qm1FeS4sVkc2USJxZRcNMTYwMjE1MTEwMDAwWjAhAhAvV8eiCxXGZ8wGRrmri7NpFw0xNjAyMTUxMTAwMDBaMCECEEiVlv1B8vdvwaYrBfEM2YQXDTE2MDIxNTExMDAwMFowIQIQVUtahOwvvmJFwlvmGDZP5xcNMTYwMjE1MTEwMDAwWjAhAhB+uPmNO6oGdDh+WM+9VTcoFw0xNjAyMTUxMTAwMDBaMCECEGXjBoGclQTpuh34YiPoxM8XDTE2MDIxNTExMDAwMFowIQIQVBSf+IncsTB3RZS4KFCJPRcNMTYwMjE1MTEwMDAwWjAhAhBEftaGyHBdErp/RV85+NeBFw0xNjAyMTUxMTAwMDBaMCECEDW3OvEPBB82u9j/4UlnHXcXDTE2MDIxNTExMDAwMFowIQIQeLumDUO40KwnecZLJxFM2BcNMTYwMjE1MTEwMDAwWjAhAhBEWWaaO6WPpV7s98GLjiefFw0xNjAyMTUxMTAwMDBaMCECEC4s3llxVj+aWTyP3S3Pj1UXDTE2MDIxNTExMDAwMFowDQYJKoZIhvcNAQEFBQADggEBAJPYAG93mARGcfcS+v9eVtpd3oC9DNXW1mJBGb0h10H9HFkWshI05oebFP2EMF4t4bUK/3Tv6nnQc2fXkuTZsLPVluIFnrAM2H4Qj8EilsL9nSOeqMT4uy1QW4gQNeI5fiFiA2+JOL3ZfCx6aB3NIyeCyOFsUb2/STV3DdXxr+Z+quU1TYQF6OuIqdsGzngdab/+r64gjZ+x6dLvuosZ28rxraN8ZTEbHg+VTvCM1qOswPlgIyt38g7/PTjODDIvtlaCI9MnC5jmjylyNinDiBkjNK7XiTUGhQCNxSZX3yWfXdNEj9FeLuLtmNCvog/WRy7TgVT5P4jW8j+DkLD1Cg0=</xades:EncapsulatedCRLValue></xades:CRLValues></xades:RevocationValues><xades:ArchiveTimeStamp Id=\"TS-8081f955-d8c9-498f-8922-dea64a21128d\"><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/><xades:EncapsulatedTimeStamp Id=\"ETS-8081f955-d8c9-498f-8922-dea64a21128d\">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</xades:EncapsulatedTimeStamp></xades:ArchiveTimeStamp></xades:UnsignedSignatureProperties></xades:UnsignedProperties></xades:QualifyingProperties>`;\n\nconst X_IT_ICB_6 = `<xades:QualifyingProperties Target=\"#signature-6758-0293-4666-9275\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\"><xades:SignedProperties Id=\"signed-properties-5477-4132-8829-9766\"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-22T14:23:00Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>24o1xkhJejCjOcx00GUUSXZZx4hJK8lHk0+6jlU09Oo=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=InfoCert Firma Qualificata 2,2.5.4.5=#130b3037393435323131303036,OU=Certificatore Accreditato,O=INFOCERT SPA,C=IT</ds:X509IssuerName><ds:X509SerialNumber>95008</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties></xades:SignedProperties><xades:UnsignedProperties xmlns:dsig-xpath=\"http://www.w3.org/2002/06/xmldsig-filter2\"><xades:UnsignedSignatureProperties><xades:CounterSignature><ds:Signature Id=\"signature-3538-3546-1081-6658\"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/><ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/><ds:Reference URI=\"#signature-value-2025-1319-7620-7516\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>r+zpLf5hQ0wGUIlSBJcP6rimYq1Sk0MwIF+OOpCN1qc=</ds:DigestValue></ds:Reference><ds:Reference URI=\"#signed-properties-2073-4209-0424-3452\" Type=\"http://uri.etsi.org/01903#SignedProperties\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>/FR4LxuhnQ/TVJJnnshWeaBWOCoZVlNOq3jAlDq8Its=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id=\"signature-value-5406-7359-6864-1138\">tYWkIp+eWYN8FQBYl5OIyo7tOxyJkZAL5MygeMrGaQNDtbT6VTTVkhvleSiZNC5jwS3tH34rQHU+bdFFk+86RUzFJdmc0reRrmqY4JGswXNonVX0rptN+cRiYB/pnzBSjt5wLL8Q4sOibnidbbsxumnZ/4qy0N+RvLC1uYzen+xOqLa3Zpd3L5L7AhBxo5rqQnUULUm1n7t2u6QnrnudrtM0AqDcq8R2FrPdPwghDPHONeaHx+O7riUhQLzX/7EtkDJw1cP9JsMN+AbI2BYnMPV9MYBdHTTE1Bk/NulOY7RPUbVtNIHSeFFGOmqjEqsQAQ9veiotV2sGQDx6oPMQ5Q==</ds:SignatureValue><ds:KeyInfo Id=\"key-info-1656-2673-2198-8151\"><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data><ds:KeyValue><ds:RSAKeyValue><ds:Modulus>0jwq+OeV9Xxhf1TN3z4hMaXtJPmXoNk+GqaCczv24GDdxoKR8TQe/DQAh6jjb8D7V34asIfJq3mJ/0oS+Sy72U1+FcXp+fpJh3HJiUnQBRM1U+g4s3JdTQ6mcefOq7I7Gp7yNAHwmXX91XKFoQI4gqaMCdMLI6W1LWe9D5kk1mqOR5K/1mwLk6iYoxSXE2A2G2kIXwwQLcm8CaNjywt3HDI16twsDr3a7vhpC/TFHDEvnmW1lI6w+Yi3HiHGSxwFvi65pNoBD0a/ZIX8escVhabD+KEwa0EO+VhigcID30m4hP+crtHW785/NpUGeAmhrjZvorluI43jhKdV+i/vuQ==</ds:Modulus><ds:Exponent>AQAB</ds:Exponent></ds:RSAKeyValue></ds:KeyValue></ds:KeyInfo><ds:Object Id=\"signature-object-3957-6255-1632-3295\"><xades:QualifyingProperties Target=\"#signature-3538-3546-1081-6658\"><xades:SignedProperties Id=\"signed-properties-2073-4209-0424-3452\"><xades:SignedSignatureProperties><xades:SigningTime>2016-04-22T14:23:18Z</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>24o1xkhJejCjOcx00GUUSXZZx4hJK8lHk0+6jlU09Oo=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=InfoCert Firma Qualificata 2,2.5.4.5=#130b3037393435323131303036,OU=Certificatore Accreditato,O=INFOCERT SPA,C=IT</ds:X509IssuerName><ds:X509SerialNumber>95008</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object></ds:Signature></xades:CounterSignature></xades:UnsignedSignatureProperties></xades:UnsignedProperties></xades:QualifyingProperties>`;\n\ncontext('Reading XAdES', () => {\n  it('X_AT_SIT_1', async () => {\n    const xades = new SignedXml(XAdES.Parse(X_AT_SIT_1));\n\n    xades.LoadXml(X_AT_SIT_1);\n\n    if (!xades.Properties) {\n      assert.fail('Properties is empty');\n    }\n\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningTime.Value instanceof Date, true);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningTime.Value.getFullYear(), 2016);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Count, 1);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(0)!.IssuerSerial.X509IssuerName, 'CN=a-sign-Premium-Sig-02,OU=a-sign-Premium-Sig-02,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT');\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(0)!.IssuerSerial.X509SerialNumber, '2039910436');\n    assert.equal(xades.Properties.SignedProperties.SignedDataObjectProperties.DataObjectFormats.Count, 1);\n    assert.equal(xades.Properties.SignedProperties.SignedDataObjectProperties.DataObjectFormats.Item(0)!.ObjectReference, '#r-id-1');\n    assert.equal(xades.Properties.SignedProperties.SignedDataObjectProperties.DataObjectFormats.Item(0)!.MimeType, 'text/xml');\n\n    const ok = await xades.Verify();\n\n    assert.equal(ok, true);\n  });\n\n  it('X_BE_CONN_10', async () => {\n    const xades = new SignedXml(XAdES.Parse(X_BE_CONN_10));\n\n    xades.LoadXml(X_BE_CONN_10);\n\n    if (!xades.Properties) {\n      assert.fail('Properties is empty');\n    }\n\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningTime.Value instanceof Date, true);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningTime.Value.getFullYear(), 2016);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Count, 2);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(0)!.IssuerSerial.X509IssuerName, 'CN=GlobalSign PersonalSign 2 CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE');\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(0)!.IssuerSerial.X509SerialNumber, '288350169419475868349393263988944744462');\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(0)!.CertDigest.DigestMethod.Algorithm, 'http://www.w3.org/2000/09/xmldsig#sha1');\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(0)!.CertDigest.DigestValue.byteLength, 20);\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(1)!.IssuerSerial.X509IssuerName, 'CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3');\n    assert.equal(xades.Properties.SignedProperties.SignedSignatureProperties.SigningCertificate.Item(1)!.IssuerSerial.X509SerialNumber, '4835703278459828975317766');\n    assert.equal(xades.Properties.SignedProperties.SignedDataObjectProperties.DataObjectFormats.Count, 1);\n    assert.equal(xades.Properties.SignedProperties.SignedDataObjectProperties.DataObjectFormats.Item(0)!.ObjectReference, '#r-id-1');\n    assert.equal(xades.Properties.SignedProperties.SignedDataObjectProperties.DataObjectFormats.Item(0)!.MimeType, 'application/octet-stream');\n\n    const ok = await xades.Verify();\n\n    assert.equal(ok, true);\n  });\n\n  it('X_FR_CS_3', () => {\n    const xades = QualifyingProperties.LoadXml(X_FR_CS_3);\n\n    assert.equal(xades.Target, '#PRF_2');\n    assert.equal(xades.SignedProperties.Id, 'PRF_2-SignedProperties');\n\n    const signaturePolicyIdentifier = xades.SignedProperties.SignedSignatureProperties.SignaturePolicyIdentifier;\n\n    assert.equal(!!signaturePolicyIdentifier, true);\n\n    const signaturePolicyId = signaturePolicyIdentifier.SignaturePolicyId;\n\n    assert.equal(signaturePolicyId.SigPolicyId.Identifier.Value, '1.2.3');\n    assert.equal(signaturePolicyId.SigPolicyHash.DigestMethod.Algorithm, 'http://www.w3.org/2001/04/xmlenc#sha256');\n    assert.equal(signaturePolicyId.SigPolicyHash.DigestValue.byteLength, 32);\n\n    const signerRole = xades.SignedProperties.SignedSignatureProperties.SignerRole;\n\n    assert.equal(signerRole.ClaimedRoles.Count, 1);\n    assert.equal(signerRole.ClaimedRoles.Item(0)!.Value, 'Marketing manager');\n\n    const signedDataObjectProperties = xades.SignedProperties.SignedDataObjectProperties;\n\n    assert.equal(signedDataObjectProperties.DataObjectFormats.Count, 1);\n    assert.equal(signedDataObjectProperties.DataObjectFormats.Item(0)!.ObjectReference, '');\n    assert.equal(signedDataObjectProperties.CommitmentTypeIndications.Count, 1);\n    assert.equal(signedDataObjectProperties.CommitmentTypeIndications.Item(0)!.CommitmentTypeId.Identifier.Value, '1.2.840.113549.1.9.16.6.3');\n    assert.equal(signedDataObjectProperties.CommitmentTypeIndications.Item(0)!.AllSignedDataObjects, true);\n  });\n\n  it('X_BG_BOR_1', () => {\n    const xades = QualifyingProperties.LoadXml(X_BG_BOR_1);\n\n    assert.equal(xades.Target, '#id-413b14fe0d49b47be2670d4dbe692ded');\n    assert.equal(xades.SignedProperties.Id, 'xades-id-413b14fe0d49b47be2670d4dbe692ded');\n\n    const signedSignatureProperties = xades.SignedProperties.SignedSignatureProperties;\n\n    assert.equal(!!signedSignatureProperties, true);\n    const cert = signedSignatureProperties.SigningCertificate.Item(0)!;\n\n    assert.equal(!!cert, true);\n    assert.equal(cert.CertDigest.DigestMethod.Algorithm, 'http://www.w3.org/2000/09/xmldsig#sha1');\n    assert.equal(cert.CertDigest.DigestValue.byteLength, 20);\n    assert.equal(cert.IssuerSerial.X509IssuerName, '2.5.4.20=#13102b333539203220392032313520313030,1.2.840.113549.1.9.1=#161263613571657340622d74727573742e6f7267,2.5.4.17=#130431373834,STREET=bul. Tsarigradsko shose No 117,CN=B-Trust Operational CA QES,OU=B-Trust,O=BORICA - BANKSERVICE AD\\, EIK 201230426,L=Sofia,ST=Sofia,C=BG');\n    assert.equal(cert.IssuerSerial.X509SerialNumber, '10027144');\n\n    const signaturePolicyIdentifier = signedSignatureProperties.SignaturePolicyIdentifier;\n\n    assert.equal(!!signaturePolicyIdentifier, true);\n    assert.equal(signaturePolicyIdentifier.SignaturePolicyImplied, true);\n\n    const signatureProductionPlace = signedSignatureProperties.SignatureProductionPlace;\n\n    assert.equal(!!signatureProductionPlace, true);\n    assert.equal(signatureProductionPlace.City, 'Sofia');\n    assert.equal(signatureProductionPlace.PostalCode, '1784');\n    assert.equal(signatureProductionPlace.StateOrProvince, 'bul. Tsar Boris 3 41,Sofia,PK:1612,EGN:8205301708');\n    assert.equal(signatureProductionPlace.CountryName, 'BG');\n\n    const signerRole = signedSignatureProperties.SignerRole;\n\n    assert.equal(!!signerRole, true);\n    assert.equal(signerRole.ClaimedRoles.Count, 1);\n    assert.equal(signerRole.ClaimedRoles.Item(0)!.Value, 'ПОДПИСАН ОТ');\n\n    const signedDataObjectProperties = xades.SignedProperties.SignedDataObjectProperties;\n\n    assert.equal(!!signedDataObjectProperties, true);\n    assert.equal(signedDataObjectProperties.DataObjectFormats.Count, 1);\n    assert.equal(signedDataObjectProperties.DataObjectFormats.Item(0)!.ObjectReference, '#r-id-1');\n    assert.equal(signedDataObjectProperties.DataObjectFormats.Item(0)!.MimeType, 'text/xml');\n  });\n\n  it('X_BE_CONN_26', () => {\n    const xades = QualifyingProperties.LoadXml(X_BE_CONN_26);\n\n    assert.equal(xades.Target, '#id-b26a17d23edf045b392cf714167df701');\n    assert.equal(xades.SignedProperties.Id, 'xades-id-b26a17d23edf045b392cf714167df701');\n\n    assert.equal(xades.UnsignedProperties.UnsignedSignatureProperties.Count, 4);\n\n    xades.UnsignedProperties.UnsignedSignatureProperties.Some((item) => {\n      if (item instanceof SignatureTimeStamp) {\n        assert.equal(item.Id, 'TS-e964b0fc-172d-4631-bc0e-fa456c429a5e');\n        assert.equal(item.CanonicalizationMethod.Algorithm, 'http://www.w3.org/2001/10/xml-exc-c14n#');\n        assert.equal(item.EncapsulatedTimeStamp.Count, 1);\n        assert.equal(item.EncapsulatedTimeStamp.Item(0)!.Id, 'ETS-e964b0fc-172d-4631-bc0e-fa456c429a5e');\n        assert.equal(item.EncapsulatedTimeStamp.Item(0)!.Value.byteLength, 4758);\n\n        return true;\n      }\n\n      return false;\n    });\n\n    xades.UnsignedProperties.UnsignedSignatureProperties.Some((item) => {\n      if (item instanceof CertificateValues) {\n        assert.equal(item.EncapsulatedX509Certificates.Count, 2);\n        assert.equal(item.EncapsulatedX509Certificates.Item(0)!.Value.byteLength, 914);\n\n        return true;\n      }\n\n      return false;\n    });\n\n    xades.UnsignedProperties.UnsignedSignatureProperties.Some((item) => {\n      if (item instanceof RevocationValues) {\n        assert.equal(item.CRLValues.Count, 1);\n        assert.equal(item.CRLValues.Item(0)!.Value.byteLength, 830);\n\n        return true;\n      }\n\n      return false;\n    });\n\n    xades.UnsignedProperties.UnsignedSignatureProperties.Some((item) => {\n      if (item instanceof ArchiveTimeStamp) {\n        assert.equal(item.Id, 'TS-8081f955-d8c9-498f-8922-dea64a21128d');\n        assert.equal(item.CanonicalizationMethod.Algorithm, 'http://www.w3.org/2001/10/xml-exc-c14n#');\n        assert.equal(item.EncapsulatedTimeStamp.Count, 1);\n        assert.equal(item.EncapsulatedTimeStamp.Item(0)!.Id, 'ETS-8081f955-d8c9-498f-8922-dea64a21128d');\n        assert.equal(item.EncapsulatedTimeStamp.Item(0)!.Value.byteLength, 4758);\n\n        return true;\n      }\n\n      return false;\n    });\n  });\n\n  it('X_IT_ICB_6', () => {\n    const xades = QualifyingProperties.LoadXml(X_IT_ICB_6);\n\n    assert.equal(xades.Target, '#signature-6758-0293-4666-9275');\n\n    assert.equal(xades.UnsignedProperties.UnsignedSignatureProperties.Count, 1);\n\n    xades.UnsignedProperties.UnsignedSignatureProperties.Some((item) => {\n      if (item instanceof CounterSignature) {\n        assert.equal(item.Signature.Id, 'signature-3538-3546-1081-6658');\n\n        return true;\n      }\n\n      return false;\n    });\n  });\n});\n"
  },
  {
    "path": "test/xml/date_time.ts",
    "content": "import * as assert from 'assert';\nimport { XMLSerializer } from '@xmldom/xmldom';\nimport * as XAdES from '../../src';\n\ncontext('xml', () => {\n  context('DateTime', () => {\n    const DATE = new Date();\n\n    context('Get XML', () => {\n      it('Default format', () => {\n        const dt = new XAdES.xml.XadesDateTime();\n\n        dt.Value = DATE;\n\n        const xml = dt.GetXml();\n        const test = new XMLSerializer().serializeToString(xml as Node);\n\n        assert.equal(test, `<xades:XadesDateTime xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\">${DATE.toISOString()}</xades:XadesDateTime>`);\n      });\n\n      it('Format HH:mm:ss', () => {\n        const dt = new XAdES.xml.XadesDateTime();\n\n        dt.Value = DATE;\n        dt.Format = 'HH:mm:ss';\n\n        const xml = dt.GetXml();\n        const test = new XMLSerializer().serializeToString(xml as Node);\n\n        assert.equal(/\\<xades\\:XadesDateTime xmlns\\:xades\\=\\\"http\\:\\/\\/uri\\.etsi\\.org\\/01903\\/v1\\.3\\.2\\#\"\\>\\d+\\:\\d+\\:\\d+\\<\\/xades\\:XadesDateTime\\>/.test(test), true);\n      });\n\n      it('Format yyyy-mm-dd\\'T\\'HH:MM:sso', () => {\n        const dt = new XAdES.xml.XadesDateTime();\n\n        dt.Value = DATE;\n        dt.Format = 'isoDateTime';\n\n        const xml = dt.GetXml();\n        const test = new XMLSerializer().serializeToString(xml as Node);\n\n        assert.equal(/\\<xades\\:XadesDateTime xmlns\\:xades\\=\\\"http\\:\\/\\/uri\\.etsi\\.org\\/01903\\/v1\\.3\\.2\\#\"\\>\\d+\\-\\d+\\-\\d+T\\d{2}\\:\\d{2}\\:\\d{2}[\\+\\-]\\d{4}\\<\\/xades\\:XadesDateTime\\>/.test(test), true);\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/xml/encapsulated_pki_data.ts",
    "content": "import * as assert from 'assert';\nimport * as XAdES from '../../src';\n\ncontext('xml', () => {\n  context('EncapsulatedPKIData', () => {\n    it('Parse', () => {\n      const xmlObject = new XAdES.xml.EncapsulatedPKIData();\n\n      xmlObject.Id = '123';\n      xmlObject.Encoding = 'der';\n      xmlObject.Value = new Uint8Array([1, 0, 1]);\n\n      const xml = xmlObject.toString();\n\n      assert.equal(xml, `<xades:EncapsulatedPKIData Id=\"123\" Encoding=\"http://uri.etsi.org/01903/v1.2.2#DER\" xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\">AQAB</xades:EncapsulatedPKIData>`);\n\n      const xmlObject2 = XAdES.xml.EncapsulatedPKIData.LoadXml(xml);\n\n      assert.equal(xmlObject2.Id, xmlObject.Id);\n      assert.equal(xmlObject2.Encoding, xmlObject.Encoding);\n      assert.equal(xmlObject2.Value.byteLength, 3);\n    });\n  });\n});\n"
  },
  {
    "path": "test/xml/generic_time_stamp.ts",
    "content": "import * as assert from 'assert';\nimport { XmlDsigC14NTransform } from 'xmldsigjs';\nimport * as XAdES from '../../src';\n\ncontext('xml', () => {\n  context('GenericTimeStamp', () => {\n    it('Parse', () => {\n      const xmlObject = new XAdES.xml.GenericTimeStamp();\n\n      xmlObject.Id = '123';\n      const encTS = new XAdES.xml.EncapsulatedTimeStamp();\n\n      encTS.Value = new Uint8Array([1, 0, 1]);\n      xmlObject.EncapsulatedTimeStamp.Add(encTS);\n      xmlObject.Include.Uri = 'http://some.com';\n      xmlObject.Include.ReferencedData = true;\n      const rInfo = new XAdES.xml.ReferenceInfo();\n\n      rInfo.DigestMethod.Algorithm = 'http://www.w3.org/2001/04/xmlenc#sha256';\n      rInfo.DigestValue = new Uint8Array([1, 0, 1]);\n      rInfo.Id = '123';\n      rInfo.Uri = 'http://some.com';\n      xmlObject.ReferenceInfo.Add(rInfo);\n      const xmlTS = new XAdES.xml.XMLTimeStamp();\n\n      xmlTS.Value = 'some';\n      xmlObject.XMLTimeStamp.Add(xmlTS);\n      xmlObject.CanonicalizationMethod.Algorithm = 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315';\n\n      // fix xmldom namespace error\n      const c14n = new XmlDsigC14NTransform();\n\n      c14n.LoadInnerXml(xmlObject.GetXml() !);\n      const xml = c14n.GetOutput();\n      const testXml = `<xades:GenericTimeStamp xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Id=\"123\"><xades:Include URI=\"http://some.com\" referencedData=\"true\"></xades:Include><xades:ReferenceInfo Id=\"123\" URI=\"http://some.com\"><ds:DigestMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"></ds:DigestMethod><ds:DigestValue xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">AQAB</ds:DigestValue></xades:ReferenceInfo><ds:CanonicalizationMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"></ds:CanonicalizationMethod><xades:EncapsulatedTimeStamp>AQAB</xades:EncapsulatedTimeStamp><xades:XMLTimeStamp>some</xades:XMLTimeStamp></xades:GenericTimeStamp>`;\n\n      assert.equal(xml, testXml);\n\n      const xmlObject2 = XAdES.xml.GenericTimeStamp.LoadXml(xml);\n\n      assert.equal(xmlObject2.Id, xmlObject.Id);\n    });\n  });\n});\n"
  },
  {
    "path": "test/xml/object_identifier.ts",
    "content": "import * as assert from 'assert';\nimport * as XAdES from '../../src';\n\ncontext('xml', () => {\n  context('ObjectIdentifier', () => {\n    it('Parse', () => {\n      const xmlObject = new XAdES.xml.ObjectIdentifier();\n\n      xmlObject.Description = 'Description';\n      xmlObject.Identifier.Value = 'uri:oid';\n      xmlObject.Identifier.Qualifier = 'OIDAsURI';\n\n      const ref = new XAdES.xml.DocumentationReference();\n\n      ref.Uri = 'http://some1.com';\n      xmlObject.DocumentationReferences.Add(ref);\n      assert.equal(xmlObject.DocumentationReferences.Count, 1);\n\n      const xml = xmlObject.toString();\n\n      assert.equal(xml, `<xades:ObjectIdentifier xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\"><xades:Identifier Qualifier=\"OIDAsURI\">uri:oid</xades:Identifier><xades:Description>Description</xades:Description><xades:DocumentationReferences><xades:DocumentationReference>http://some1.com</xades:DocumentationReference></xades:DocumentationReferences></xades:ObjectIdentifier>`);\n\n      const xmlObject2 = XAdES.xml.ObjectIdentifier.LoadXml(xml);\n\n      assert.equal(xmlObject2.Description, xmlObject.Description);\n      assert.equal(xmlObject2.Identifier.Value, xmlObject.Identifier.Value);\n      assert.equal(xmlObject2.Identifier.Qualifier, xmlObject.Identifier.Qualifier);\n      assert.equal(xmlObject2.DocumentationReferences.Count, 1);\n      assert.equal(xmlObject2.DocumentationReferences.Item(0) !.Uri, ref.Uri);\n    });\n  });\n});\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n    \"compilerOptions\": {\n        \"module\": \"commonjs\",\n        \"moduleResolution\": \"node\",\n        \"target\": \"ES2018\",\n        \"lib\": [\n            \"dom\",\n            \"es2015\"\n        ],\n        \"outDir\": \"build\",\n        \"esModuleInterop\": true,\n        \"noImplicitAny\": false,\n        \"removeComments\": true,\n        \"sourceMap\": true,\n        \"noUnusedLocals\": true,\n        \"noUnusedParameters\": false,\n        \"strict\": true,\n        \"strictPropertyInitialization\": false,\n        \"strictNullChecks\": true,\n        \"pretty\": true,\n        \"noImplicitReturns\": true,\n        \"experimentalDecorators\": true,\n        \"importHelpers\": true,\n        \"forceConsistentCasingInFileNames\": true,\n        \"skipLibCheck\": true\n    },\n    \"exclude\": [\n        \"build\"\n    ]\n}\n"
  },
  {
    "path": "tsconfig.types.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"removeComments\": false,\n    \"outDir\": \"build/types\"\n  },\n  \"exclude\": [\"test\", \"build\"]\n}"
  }
]