JavaScript generic ASN.1 parser (mirror)

Compare changes

Choose any two refs to compare.

+10
.editorconfig
··· 1 + root = true 2 + end_of_line = lf 3 + max_line_length = 120 4 + 5 + [*.{js,css}] 6 + charset = utf-8 7 + indent_size = 4 8 + indent_style = space 9 + insert_final_newline = true 10 + trim_trailing_whitespace = true
+12 -5
.github/workflows/node.js.yml
··· 12 12 13 13 strategy: 14 14 matrix: 15 - node-version: [16.x] 15 + node-version: [ 14.6.0, latest ] 16 16 17 17 steps: 18 - - uses: actions/checkout@v2 18 + - uses: actions/checkout@v4 19 + - name: Use pnpm 20 + uses: pnpm/action-setup@v4 21 + with: 22 + run_install: false 19 23 - name: Use Node.js ${{ matrix.node-version }} 20 - uses: actions/setup-node@v1 24 + uses: actions/setup-node@v4 21 25 with: 22 26 node-version: ${{ matrix.node-version }} 23 - - run: npm test all 24 - - run: npm run lint 27 + cache: pnpm 28 + - run: pnpm install 29 + - run: node test all 30 + - run: pnpm run lint 31 + if: matrix.node-version == 'latest'
+16 -5
.gitignore
··· 1 - .DS_Store 2 - .vscode 1 + _MTN/ 2 + .DS_Store/ 3 + .vscode/ 4 + node_modules/ 5 + dist/ 6 + package-lock.json 7 + # Artifacts from release.sh 8 + index-local.html 9 + sha256sums.asc 10 + asn1js.zip 11 + # Artifacts from mirror_to_github.sh 3 12 git-*.txt 4 - node_modules 5 - package-lock.json 6 - pnpm-lock.yaml 13 + # Artifacts from updateOID.sh 14 + dumpasn1.cfg 15 + # Artifacts from parseRFC.js 16 + rfc/ 17 + rfcdef.json
+16 -6
.mtn-ignore
··· 1 - .DS_Store 2 - .vscode 3 - git-*.txt 4 - node_modules 5 - package-lock.json 6 - pnpm-lock.yaml 1 + [.]DS_Store$ 2 + [.]vscode$ 3 + node_modules$ 4 + dist$ 5 + package-lock[.]json 6 + # Artifacts from release.sh 7 + index-local.html 8 + sha256sums[.]asc 9 + asn1js[.]zip 10 + # Artifacts from mirror_to_github.sh 11 + git-[^.]*[.]txt 12 + # Artifacts from updateOID.sh 13 + dumpasn1[.]cfg 14 + # Artifacts from updateRFC.sh / parseRFC.js 15 + rfc$ 16 + rfcdef[.]json
+99
.vscode/launch.json
··· 1 + { 2 + // Use IntelliSense to learn about possible attributes. 3 + // Hover to view descriptions of existing attributes. 4 + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 + "version": "0.2.0", 6 + "configurations": [ 7 + { 8 + "type": "node", 9 + "request": "launch", 10 + "name": "test", 11 + "skipFiles": [ 12 + "<node_internals>/**" 13 + ], 14 + "program": "${workspaceFolder}/test.js", 15 + "args": [] 16 + }, 17 + { 18 + "type": "node", 19 + "request": "launch", 20 + "name": "dumpASN1", 21 + "skipFiles": [ 22 + "<node_internals>/**" 23 + ], 24 + "program": "${workspaceFolder}/dumpASN1.js", 25 + "args": [ 26 + "examples/ed25519.cer" 27 + ] 28 + }, 29 + { 30 + "type": "node", 31 + "request": "launch", 32 + "name": "parseRFC", 33 + "skipFiles": [ 34 + "<node_internals>/**" 35 + ], 36 + "program": "${workspaceFolder}/parseRFC.js", 37 + "args": [ 38 + "rfc/rfc4511.txt", 39 + "rfcdef.json" 40 + ] 41 + }, 42 + { 43 + "type": "node", 44 + "request": "launch", 45 + "name": "dumpASN1 X.509", 46 + "skipFiles": [ 47 + "<node_internals>/**" 48 + ], 49 + "program": "${workspaceFolder}/dumpASN1.js", 50 + "args": [ 51 + "examples/ed25519.cer", 52 + "1.3.6.1.5.5.7.0.18", 53 + "Certificate" 54 + ] 55 + }, 56 + { 57 + "type": "node", 58 + "request": "launch", 59 + "name": "dumpASN1 CRL", 60 + "skipFiles": [ 61 + "<node_internals>/**" 62 + ], 63 + "program": "${workspaceFolder}/dumpASN1.js", 64 + "args": [ 65 + "data:base64,MIG9AgEBMA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUUjM0IFNhbXBsZXMxGzAZBgNVBAMTElRSMzQgU2FtcGxlIENBIEtESBcNMTAxMTAyMTczMzMwWhcNMTAxMjAyMTczMzMwWjBIMBYCBTQAAAAIFw0xMDExMDIxNzI4MTNaMBYCBTQAAAAKFw0xMDExMDIxNzMxNDZaMBYCBTQAAAALFw0xMDExMDIxNzMzMjVa", 66 + "1.3.6.1.5.5.7.0.18", 67 + "TBSCertList" 68 + ] 69 + }, 70 + { 71 + "type": "node", 72 + "request": "launch", 73 + "name": "dumpASN1 CMS", 74 + "skipFiles": [ 75 + "<node_internals>/**" 76 + ], 77 + "program": "${workspaceFolder}/dumpASN1.js", 78 + "args": [ 79 + "examples/cms-password.p7m", 80 + "1.2.840.113549.1.9.16.0.14", 81 + "ContentInfo" 82 + ] 83 + }, 84 + { 85 + "type": "node", 86 + "request": "launch", 87 + "name": "dumpASN1 LDAP", 88 + "skipFiles": [ 89 + "<node_internals>/**" 90 + ], 91 + "program": "${workspaceFolder}/dumpASN1.js", 92 + "args": [ 93 + "data:base64,MDMCAQFjLgQACgEACgEAAgEAAgEAAQEAoA+jDQQFTnRWZXIEBAEAAAAwCgQITmV0bG9nb24===", 94 + "1.3.6.1.1.18", 95 + "LDAPMessage" 96 + ] 97 + } 98 + ] 99 + }
+9
.vscode/settings.json
··· 1 + { 2 + "editor.insertSpaces": true, 3 + "editor.tabSize": 8, 4 + "editor.indentSize": 4, 5 + "editor.stickyScroll.enabled": true, 6 + "explorer.excludeGitIgnore": true, 7 + "files.eol": "\n", 8 + "git.openRepositoryInParentFolders": "never" 9 + }
+38
CHANGELOG.md
··· 1 + # ChangeLog 2 + 3 + ## 2.1.1 - 2025-10-24 4 + 5 + ### Changed 6 + 7 + - update dev dependencies 8 + - fix test suite that was reporting no error with empty responses 9 + 10 + ### Added 11 + 12 + - add content length check for BOOLEAN, INTEGER, OID ([GitHub #104](https://github.com/lapo-luchini/asn1js/pull/104)) 13 + 14 + ## 2.1.0 - 2025-08-03 15 + 16 + ### Changed 17 + 18 + - when fields are CHOICEs now both the field name and the choice name are shown (fixes [GitHub #102](https://github.com/lapo-luchini/asn1js/issues/102)) 19 + - upgrade minimum NodeJS version supported from 12.20.0 to 14.6.0 due to usage of ?. and ?? operators in defs.js (ECMAScript 2020); older code is still linted against ECMAScript 2015 for now 20 + 21 + ### Added 22 + 23 + - add tests to check expected decoding 24 + 25 + ## 2.0.6 - 2025-07-29 26 + 27 + ### Added 28 + 29 + - add proper support for standard Base64 (we previously only supported Base64url) (fixes [GitHub #99](https://github.com/lapo-luchini/asn1js/pull/99)) 30 + - improve test harness 31 + 32 + ## 2.0.5 - 2025-04-12 33 + 34 + ### Added 35 + 36 + - add `index-local.html` for local `file://` usage without needing a web server 37 + - add definitions support for `LDAPMessage` 38 + - #TODO continue producing old ChangeLog entries
+1 -1
LICENSE
··· 1 1 ISC License 2 2 3 - Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 3 + Copyright (c) 2008-2025 Lapo Luchini <lapo@lapo.it> 4 4 5 5 Permission to use, copy, modify, and/or distribute this software for any 6 6 purpose with or without fee is hereby granted, provided that the above
+57 -25
README.md
··· 3 3 4 4 asn1js is a JavaScript generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures. 5 5 6 - An example page that can decode Base64-encoded (raw base64, PEM armoring and `begin-base64` are recognized) or Hex-encoded (or local files with some browsers) is included and can be used both [online on the official website](https://lapo.it/asn1js/) or [offline (ZIP file)](https://lapo.it/asn1js/asn1js.zip). 6 + An example page that can decode Base64-encoded (raw base64, PEM armoring and `begin-base64` are recognized) or Hex-encoded (or local files with some browsers) is included and can be used both [online on the official website](https://asn1js.eu/) or [offline (ZIP file)](https://lapo.it/asn1js/asn1js.zip) by opening `index-local.html`. 7 7 8 - Usage with `npm` / `yarn` 9 - ------------------------- 8 + Usage with `nodejs` 9 + ------------------- 10 10 11 11 This package can be installed with either npm or yarn via the following commands: 12 12 13 13 ```sh 14 14 npm install @lapo/asn1js 15 - # or with yarn 15 + # or other tools 16 + pnpm install @lapo/asn1js 16 17 yarn add @lapo/asn1js 17 18 ``` 18 19 19 - Assuming a standard javascript bundler is setup you can import it like so: 20 + You can import the classes like this: 20 21 21 22 ```js 22 - const ASN1 = require('@lapo/asn1js'); 23 - // or with ES modules 24 - import ASN1 from '@lapo/asn1js'; 23 + import { ASN1 } from '@lapo/asn1js'; 25 24 ``` 26 25 27 26 A submodule of this package can also be imported: 28 27 29 28 ```js 30 - const Hex = require('@lapo/asn1js/hex'); 31 - // or with ES modules 32 - import Hex from '@lapo/asn1js/hex'; 29 + import { Hex } from '@lapo/asn1js/hex.js'; 30 + ``` 31 + 32 + If your code is still not using ES6 Modules (and is using CommonJS) you can `require` it normally [since NodeJS 22](https://joyeecheung.github.io/blog/2024/03/18/require-esm-in-node-js/) (with parameter `--experimental-require-module`): 33 + 34 + ```js 35 + const 36 + { ASN1 } = require('@lapo/asn1js'), 37 + { Hex } = require('@lapo/asn1js/hex.js'); 38 + console.log(ASN1.decode(Hex.decode('06032B6570')).content()); 33 39 ``` 34 40 35 - Usage with RequireJS 41 + On older NodeJS you instead need to use async `import`: 42 + 43 + ```js 44 + async function main() { 45 + const 46 + { ASN1 } = await import('@lapo/asn1js'), 47 + { Hex } = await import('@lapo/asn1js/hex.js'); 48 + console.log(ASN1.decode(Hex.decode('06032B6570')).content()); 49 + } 50 + main(); 51 + ``` 52 + 53 + Usage on the web 36 54 -------------------- 37 55 38 - Can be [tested on JSFiddle](https://jsfiddle.net/lapo/tmdq35ug/). 56 + Can be [tested on JSFiddle](https://jsfiddle.net/lapo/y6t2wo7q/). 39 57 40 58 ```html 41 - <script type="text/javascript" src="https://unpkg.com/requirejs/require.js"></script> 42 59 <script> 43 - require([ 44 - 'https://unpkg.com/@lapo/asn1js/asn1.js', 45 - 'https://unpkg.com/@lapo/asn1js/hex.js' 46 - ], function(ASN1, Hex) { 47 - document.body.innerText = ASN1.decode(Hex.decode('06032B6570')).content(); 48 - }); 60 + import { ASN1 } from 'https://unpkg.com/@lapo/asn1js@2.0.0/asn1.js'; 61 + import { Hex } from 'https://unpkg.com/@lapo/asn1js@2.0.0/hex.js'; 62 + 63 + document.body.innerText = ASN1.decode(Hex.decode('06032B6570')).content(); 49 64 </script> 50 65 ``` 51 66 67 + Local usage 68 + -------------------- 69 + 70 + Since unfortunately ESM modules are not working on `file:` protocol due to [CORS issues](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#other_differences_between_modules_and_standard_scripts), there is a bundled [single-file version working locally](https://asn1js.eu/index-local.html). It doesn't work online (due to [CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) restrictions about inline content) but can be saved locally and opened in a browser. 71 + 72 + Usage from CLI 73 + -------------------- 74 + 75 + You can dump an ASN.1 structure from the command line using the following command (no need to even install it): 76 + 77 + ```sh 78 + npx @lapo/asn1js ed25519.cer 79 + ``` 80 + 52 81 ISC license 53 82 ----------- 54 83 55 - ASN.1 JavaScript decoder Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 84 + ASN.1 JavaScript decoder Copyright (c) 2008-2025 Lapo Luchini <lapo@lapo.it> 56 85 57 86 Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 58 87 ··· 66 95 - extended tag support added by [Pรฉter Budai](https://www.peterbudai.eu/) 67 96 - patches by [Gergely Nagy](https://github.com/ngg) 68 97 - Relative OID support added by [Mistial Developer](https://github.com/mistial-dev) 69 - - dark mode support added by [Oliver Burgmaier](https://github.com/olibu/) 98 + - dark mode and other UI improvements by [Oliver Burgmaier](https://github.com/olibu/) 99 + - patches by [Nicolai Sรธborg](https://github.com/NicolaiSoeborg) 70 100 71 101 links 72 102 ----- 73 103 74 - - [official website](https://lapo.it/asn1js/) 75 - - [dedicated domain](https://asn1js.eu/) 76 - - [InDefero tracker](http://idf.lapo.it/p/asn1js/) 104 + - [official website](https://asn1js.eu/) 105 + - [alternate website](https://lapo.it/asn1js/) 106 + - [single-file version working locally](https://asn1js.eu/index-local.html) (just save this link) 107 + - [InDefero tracker](http://idf.lapo.it/p/asn1js/) (currently offline) 77 108 - [GitHub mirror](https://github.com/lapo-luchini/asn1js) 109 + - [ChangeLog on GitHub](https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md) 78 110 - [Ohloh code stats](https://www.openhub.net/p/asn1js)
+786 -525
asn1.js
··· 1 1 // ASN.1 JavaScript decoder 2 - // Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 2 + // Copyright (c) 2008 Lapo Luchini <lapo@lapo.it> 3 3 4 4 // Permission to use, copy, modify, and/or distribute this software for any 5 5 // purpose with or without fee is hereby granted, provided that the above 6 6 // copyright notice and this permission notice appear in all copies. 7 - // 7 + // 8 8 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 9 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 10 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ··· 13 13 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 14 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 15 16 - (typeof define != 'undefined' ? define : function (factory) { 'use strict'; 17 - if (typeof module == 'object') module.exports = factory(function (name) { return require(name); }); 18 - else window.asn1 = factory(function (name) { return window[name.substring(2)]; }); 19 - })(function (require) { 20 - "use strict"; 16 + import { oids } from './oids.js'; 21 17 22 - var Int10 = require('./int10'), 23 - oids = require('./oids'), 24 - ellipsis = "\u2026", 18 + const 19 + ellipsis = '\u2026', 25 20 reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|(-(?:0\d|1[0-2])|[+](?:0\d|1[0-4]))([0-5]\d)?)?$/, 26 - reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|(-(?:0\d|1[0-2])|[+](?:0\d|1[0-4]))([0-5]\d)?)?$/; 21 + reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|(-(?:0\d|1[0-2])|[+](?:0\d|1[0-4]))([0-5]\d)?)?$/, 22 + hexDigits = '0123456789ABCDEF', 23 + b64Std = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 24 + b64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 25 + tableT61 = [ 26 + ['', ''], 27 + ['AEIOUaeiou', 'ร€รˆรŒร’ร™ร รจรฌรฒรน'], // Grave 28 + ['ACEILNORSUYZacegilnorsuyz', 'รฤ†ร‰รฤนลƒร“ล”ลšรšรลนรกฤ‡รฉฤฃรญฤบล„รณล•ล›รบรฝลบ'], // Acute 29 + ['ACEGHIJOSUWYaceghijosuwy', 'ร‚ฤˆรŠฤœฤครŽฤดร”ลœร›ลดลถรขฤ‰รชฤฤฅรฎฤตรดลรปลตลท'], // Circumflex 30 + ['AINOUainou', 'รƒฤจร‘ร•ลจรฃฤฉรฑรตลฉ'], // Tilde 31 + ['AEIOUaeiou', 'ฤ€ฤ’ฤชลŒลชฤฤ“ฤซลลซ'], // Macron 32 + ['AGUagu', 'ฤ‚ฤžลฌฤƒฤŸลญ'], // Breve 33 + ['CEGIZcegz', 'ฤŠฤ–ฤ ฤฐลปฤ‹ฤ—ฤกลผ'], // Dot 34 + ['AEIOUYaeiouy', 'ร„ร‹รร–รœลธรครซรฏรถรผรฟ'], // Umlaut or diรฆresis 35 + ['', ''], 36 + ['AUau', 'ร…ลฎรฅลฏ'], // Ring 37 + ['CGKLNRSTcklnrst', 'ร‡ฤขฤถฤปล…ล–ลžลขรงฤทฤผล†ล—ลŸลฃ'], // Cedilla 38 + ['', ''], 39 + ['OUou', 'ลลฐล‘ลฑ'], // Double Acute 40 + ['AEIUaeiu', 'ฤ„ฤ˜ฤฎลฒฤ…ฤ™ฤฏลณ'], // Ogonek 41 + ['CDELNRSTZcdelnrstz', 'ฤŒฤŽฤšฤฝล‡ล˜ล ลคลฝฤฤฤ›ฤพลˆล™ลกลฅลพ'], // Caron 42 + ]; 27 43 44 + /** 45 + * Truncates a string to a specified length and adds an ellipsis if needed. 46 + * @param {string} str - The input string to truncate 47 + * @param {number} len - The maximum length of the string 48 + * @returns {string} The truncated string 49 + */ 28 50 function stringCut(str, len) { 29 51 if (str.length > len) 30 52 str = str.substring(0, len) + ellipsis; 31 53 return str; 32 54 } 33 55 34 - function Stream(enc, pos) { 35 - if (enc instanceof Stream) { 36 - this.enc = enc.enc; 37 - this.pos = enc.pos; 38 - } else { 39 - // enc should be an array or a binary string 40 - this.enc = enc; 41 - this.pos = pos; 56 + /** 57 + * Checks if a string contains only printable characters (ASCII 32-126, plus tab, newline, carriage return) 58 + * @param {string} s - The string to check 59 + * @throws {Error} If an unprintable character is found 60 + */ 61 + function checkPrintable(s) { 62 + let i, v; 63 + for (i = 0; i < s.length; ++i) { 64 + v = s.charCodeAt(i); 65 + if (v < 32 && v != 9 && v != 10 && v != 13) // [\t\r\n] are (kinda) printable 66 + throw new Error('Unprintable character at index ' + i + ' (code ' + s.str.charCodeAt(i) + ')'); 42 67 } 43 68 } 44 - Stream.prototype.get = function (pos) { 45 - if (pos === undefined) 46 - pos = this.pos++; 47 - if (pos >= this.enc.length) 48 - throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length; 49 - return (typeof this.enc == "string") ? this.enc.charCodeAt(pos) : this.enc[pos]; 50 - }; 51 - Stream.prototype.hexDigits = "0123456789ABCDEF"; 52 - Stream.prototype.hexByte = function (b) { 53 - return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); 54 - }; 55 - Stream.prototype.hexDump = function (start, end, raw) { 56 - var s = ""; 57 - for (var i = start; i < end; ++i) { 58 - s += this.hexByte(this.get(i)); 59 - if (raw !== true) 60 - switch (i & 0xF) { 61 - case 0x7: s += " "; break; 62 - case 0xF: s += "\n"; break; 63 - default: s += " "; 64 - } 65 - } 66 - return s; 67 - }; 68 - var b64Safe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; 69 - Stream.prototype.b64Dump = function (start, end) { 70 - var extra = (end - start) % 3, 71 - s = '', 72 - i, c; 73 - for (i = start; i + 2 < end; i += 3) { 74 - c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2); 75 - s += b64Safe.charAt(c >> 18 & 0x3F); 76 - s += b64Safe.charAt(c >> 12 & 0x3F); 77 - s += b64Safe.charAt(c >> 6 & 0x3F); 78 - s += b64Safe.charAt(c & 0x3F); 79 - } 80 - if (extra > 0) { 81 - c = this.get(i) << 16; 82 - if (extra > 1) c |= this.get(i + 1) << 8; 83 - s += b64Safe.charAt(c >> 18 & 0x3F); 84 - s += b64Safe.charAt(c >> 12 & 0x3F); 85 - if (extra == 2) s += b64Safe.charAt(c >> 6 & 0x3F); 86 - } 87 - return s; 88 - }; 89 - Stream.prototype.isASCII = function (start, end) { 90 - for (var i = start; i < end; ++i) { 91 - var c = this.get(i); 92 - if (c < 32 || c > 176) 93 - return false; 69 + 70 + /** 71 + * Class to manage a stream of bytes, with a zero-copy approach. 72 + * It uses an existing array or binary string and advances a position index. 73 + */ 74 + export class Stream { 75 + 76 + /** 77 + * Creates a new Stream object. 78 + * @param {Stream|array|string} enc data (will not be copied) 79 + * @param {?number} pos starting position (mandatory when `end` is not a Stream) 80 + */ 81 + constructor(enc, pos) { 82 + if (enc instanceof Stream) { 83 + this.enc = enc.enc; 84 + this.pos = enc.pos; 85 + } else { 86 + this.enc = enc; 87 + this.pos = pos; 88 + } 89 + if (typeof this.pos != 'number') 90 + throw new Error('"pos" must be a numeric value'); 91 + // Set up the raw byte access function based on the type of data 92 + if (typeof this.enc == 'string') 93 + this.getRaw = pos => this.enc.charCodeAt(pos); 94 + else if (typeof this.enc[0] == 'number') 95 + this.getRaw = pos => this.enc[pos]; 96 + else 97 + throw new Error('"enc" must be a numeric array or a string'); 94 98 } 95 - return true; 96 - }; 97 - Stream.prototype.parseStringISO = function (start, end, maxLength) { 98 - var s = ""; 99 - for (var i = start; i < end; ++i) 100 - s += String.fromCharCode(this.get(i)); 101 - return { size: s.length, str: stringCut(s, maxLength) }; 102 - }; 103 - var tableT61 = [ 104 - ['', ''], 105 - ['AEIOUaeiou', 'ร€รˆรŒร’ร™ร รจรฌรฒรน'], // Grave 106 - ['ACEILNORSUYZacegilnorsuyz', 'รฤ†ร‰รฤนลƒร“ล”ลšรšรลนรกฤ‡รฉฤฃรญฤบล„รณล•ล›รบรฝลบ'], // Acute 107 - ['ACEGHIJOSUWYaceghijosuwy', 'ร‚ฤˆรŠฤœฤครŽฤดร”ลœร›ลดลถรขฤ‰รชฤฤฅรฎฤตรดลรปลตลท'], // Circumflex 108 - ['AINOUainou', 'รƒฤจร‘ร•ลจรฃฤฉรฑรตลฉ'], // Tilde 109 - ['AEIOUaeiou', 'ฤ€ฤ’ฤชลŒลชฤฤ“ฤซลลซ'], // Macron 110 - ['AGUagu', 'ฤ‚ฤžลฌฤƒฤŸลญ'], // Breve 111 - ['CEGIZcegz', 'ฤŠฤ–ฤ ฤฐลปฤ‹ฤ—ฤกลผ'], // Dot 112 - ['AEIOUYaeiouy', 'ร„ร‹รร–รœลธรครซรฏรถรผรฟ'], // Umlaut or diรฆresis 113 - ['', ''], 114 - ['AUau', 'ร…ลฎรฅลฏ'], // Ring 115 - ['CGKLNRSTcklnrst', 'ร‡ฤขฤถฤปล…ล–ลžลขรงฤทฤผล†ล—ลŸลฃ'], // Cedilla 116 - ['', ''], 117 - ['OUou', 'ลลฐล‘ลฑ'], // Double Acute 118 - ['AEIUaeiu', 'ฤ„ฤ˜ฤฎลฒฤ…ฤ™ฤฏลณ'], // Ogonek 119 - ['CDELNRSTZcdelnrstz', 'ฤŒฤŽฤšฤฝล‡ล˜ล ลคลฝฤฤฤ›ฤพลˆล™ลกลฅลพ'] // Caron 120 - ]; 121 - Stream.prototype.parseStringT61 = function (start, end, maxLength) { 122 - // warning: this code is not very well tested so far 123 - function merge(c, d) { 124 - var t = tableT61[c - 0xC0]; 125 - var i = t[0].indexOf(String.fromCharCode(d)); 126 - return (i < 0) ? '\0' : t[1].charAt(i); 99 + 100 + /** 101 + * Get the byte at current position (and increment it) or at a specified position (and avoid moving current position). 102 + * @param {?number} pos read position if specified, else current position (and increment it) 103 + * @returns {number} The byte value at the specified position 104 + */ 105 + get(pos) { 106 + if (pos === undefined) 107 + pos = this.pos++; 108 + if (pos >= this.enc.length) 109 + throw new Error('Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length); 110 + return this.getRaw(pos); 127 111 } 128 - var s = "", c; 129 - for (var i = start; i < end; ++i) { 130 - c = this.get(i); 131 - if (c >= 0xA4 && c <= 0xBF) 132 - s += '$ยฅ#ยงยค\0\0ยซ\0\0\0\0ยฐยฑยฒยณร—ยตยถยทรท\0\0ยปยผยฝยพยฟ'.charAt(c - 0xA4); 133 - else if (c >= 0xE0 && c <= 0xFF) 134 - s += 'โ„ฆร†รยชฤฆ\0ฤฒฤฟลร˜ล’ยบรžลฆลŠล‰ฤธรฆฤ‘รฐฤงฤฑฤณล€ล‚รธล“รŸรพลงล‹\0'.charAt(c - 0xE0); 135 - else if (c >= 0xC0 && c <= 0xCF) 136 - s += merge(c, this.get(++i)); 137 - else // using ISO 8859-1 for characters undefined (or equal) in T.61 138 - s += String.fromCharCode(c); 112 + 113 + /** 114 + * Convert a single byte to a hexadecimal string (of length 2). 115 + * @param {number} b - The byte to convert 116 + * @returns {string} Hexadecimal representation of the byte 117 + */ 118 + static hexByte(b) { 119 + return hexDigits.charAt((b >> 4) & 0xF) + hexDigits.charAt(b & 0xF); 139 120 } 140 - return { size: s.length, str: stringCut(s, maxLength) }; 141 - }; 142 - Stream.prototype.parseStringUTF = function (start, end, maxLength) { 143 - function ex(c) { // must be 10xxxxxx 144 - if ((c < 0x80) || (c >= 0xC0)) 145 - throw new Error('Invalid UTF-8 continuation byte: ' + c); 146 - return (c & 0x3F); 121 + 122 + /** 123 + * Hexadecimal dump of a specified region of the stream. 124 + * @param {number} start - starting position (included) 125 + * @param {number} end - ending position (excluded) 126 + * @param {string} type - 'raw', 'byte' or 'dump' (default) 127 + * @returns {string} Hexadecimal representation of the data 128 + */ 129 + hexDump(start, end, type = 'dump') { 130 + let s = ''; 131 + for (let i = start; i < end; ++i) { 132 + if (type == 'byte' && i > start) 133 + s += ' '; 134 + s += Stream.hexByte(this.get(i)); 135 + if (type == 'dump') 136 + switch (i & 0xF) { 137 + case 0x7: s += ' '; break; 138 + case 0xF: s += '\n'; break; 139 + default: s += ' '; 140 + } 141 + } 142 + return s; 147 143 } 148 - function surrogate(cp) { 149 - if (cp < 0x10000) 150 - throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp); 151 - // we could use String.fromCodePoint(cp) but let's be nice to older browsers and use surrogate pairs 152 - cp -= 0x10000; 153 - return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00); 144 + 145 + /** 146 + * Base64url dump of a specified region of the stream (according to RFC 4648 section 5). 147 + * @param {number} start - starting position (included) 148 + * @param {number} end - ending position (excluded) 149 + * @param {string} type - 'url' (default, section 5 without padding) or 'std' (section 4 with padding) 150 + * @returns {string} Base64 encoded representation of the data 151 + */ 152 + b64Dump(start, end, type = 'url') { 153 + const b64 = type === 'url' ? b64URL : b64Std, 154 + extra = (end - start) % 3; 155 + let s = '', 156 + i, c; 157 + for (i = start; i + 2 < end; i += 3) { 158 + c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2); 159 + s += b64.charAt(c >> 18 & 0x3F); 160 + s += b64.charAt(c >> 12 & 0x3F); 161 + s += b64.charAt(c >> 6 & 0x3F); 162 + s += b64.charAt(c & 0x3F); 163 + } 164 + if (extra > 0) { 165 + c = this.get(i) << 16; 166 + if (extra > 1) c |= this.get(i + 1) << 8; 167 + s += b64.charAt(c >> 18 & 0x3F); 168 + s += b64.charAt(c >> 12 & 0x3F); 169 + if (extra == 2) s += b64.charAt(c >> 6 & 0x3F); 170 + if (b64 === b64Std) s += '==='.slice(0, 3 - extra); 171 + } 172 + return s; 154 173 } 155 - var s = ""; 156 - for (var i = start; i < end; ) { 157 - var c = this.get(i++); 158 - if (c < 0x80) // 0xxxxxxx (7 bit) 159 - s += String.fromCharCode(c); 160 - else if (c < 0xC0) 161 - throw new Error('Invalid UTF-8 starting byte: ' + c); 162 - else if (c < 0xE0) // 110xxxxx 10xxxxxx (11 bit) 163 - s += String.fromCharCode(((c & 0x1F) << 6) | ex(this.get(i++))); 164 - else if (c < 0xF0) // 1110xxxx 10xxxxxx 10xxxxxx (16 bit) 165 - s += String.fromCharCode(((c & 0x0F) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++))); 166 - else if (c < 0xF8) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (21 bit) 167 - s += surrogate(((c & 0x07) << 18) | (ex(this.get(i++)) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++))); 168 - else 169 - throw new Error('Invalid UTF-8 starting byte (since 2003 it is restricted to 4 bytes): ' + c); 174 + 175 + /** 176 + * Check if a region of the stream contains only ASCII characters (32-176) 177 + * @param {number} start - starting position (included) 178 + * @param {number} end - ending position (excluded) 179 + * @returns {boolean} True if all characters are ASCII, false otherwise 180 + */ 181 + isASCII(start, end) { 182 + for (let i = start; i < end; ++i) { 183 + let c = this.get(i); 184 + if (c < 32 || c > 176) 185 + return false; 186 + } 187 + return true; 170 188 } 171 - return { size: s.length, str: stringCut(s, maxLength) }; 172 - }; 173 - Stream.prototype.parseStringBMP = function (start, end, maxLength) { 174 - var s = "", hi, lo; 175 - for (var i = start; i < end; ) { 176 - hi = this.get(i++); 177 - lo = this.get(i++); 178 - s += String.fromCharCode((hi << 8) | lo); 189 + 190 + /** 191 + * Parse a region of the stream as an ISO string 192 + * @param {number} start - starting position (included) 193 + * @param {number} end - ending position (excluded) 194 + * @param {number} maxLength - maximum length of the output string 195 + * @returns {Object} Object with size and str properties 196 + */ 197 + parseStringISO(start, end, maxLength) { 198 + let s = ''; 199 + for (let i = start; i < end; ++i) 200 + s += String.fromCharCode(this.get(i)); 201 + return { size: s.length, str: stringCut(s, maxLength) }; 179 202 } 180 - return { size: s.length, str: stringCut(s, maxLength) }; 181 - }; 182 - Stream.prototype.parseTime = function (start, end, shortYear) { 183 - var s = this.parseStringISO(start, end).str, 184 - m = (shortYear ? reTimeS : reTimeL).exec(s); 185 - if (!m) 186 - return "Unrecognized time: " + s; 187 - if (shortYear) { 188 - // to avoid querying the timer, use the fixed range [1970, 2069] 189 - // it will conform with ITU X.400 [-10, +40] sliding window until 2030 190 - m[1] = +m[1]; 191 - m[1] += (m[1] < 70) ? 2000 : 1900; 203 + 204 + /** 205 + * Parse a region of the stream as a T.61 string 206 + * @param {number} start - starting position (included) 207 + * @param {number} end - ending position (excluded) 208 + * @param {number} maxLength - maximum length of the output string 209 + * @returns {Object} Object with size and str properties 210 + */ 211 + parseStringT61(start, end, maxLength) { 212 + // warning: this code is not very well tested so far 213 + function merge(c, d) { 214 + const t = tableT61[c - 0xC0]; 215 + const i = t[0].indexOf(String.fromCharCode(d)); 216 + return (i < 0) ? '\0' : t[1].charAt(i); 217 + } 218 + let s = '', c; 219 + for (let i = start; i < end; ++i) { 220 + c = this.get(i); 221 + if (c >= 0xA4 && c <= 0xBF) 222 + s += '$ยฅ#ยงยค\0\0ยซ\0\0\0\0ยฐยฑยฒยณร—ยตยถยทรท\0\0ยปยผยฝยพยฟ'.charAt(c - 0xA4); 223 + else if (c >= 0xE0 && c <= 0xFF) 224 + s += 'โ„ฆร†รยชฤฆ\0ฤฒฤฟลร˜ล’ยบรžลฆลŠล‰ฤธรฆฤ‘รฐฤงฤฑฤณล€ล‚รธล“รŸรพลงล‹\0'.charAt(c - 0xE0); 225 + else if (c >= 0xC0 && c <= 0xCF) 226 + s += merge(c, this.get(++i)); 227 + else // using ISO 8859-1 for characters undefined (or equal) in T.61 228 + s += String.fromCharCode(c); 229 + } 230 + return { size: s.length, str: stringCut(s, maxLength) }; 192 231 } 193 - s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; 194 - if (m[5]) { 195 - s += ":" + m[5]; 196 - if (m[6]) { 197 - s += ":" + m[6]; 198 - if (m[7]) 199 - s += "." + m[7]; 232 + 233 + /** 234 + * Parse a region of the stream as a UTF-8 string 235 + * @param {number} start - starting position (included) 236 + * @param {number} end - ending position (excluded) 237 + * @param {number} maxLength - maximum length of the output string 238 + * @returns {Object} Object with size and str properties 239 + */ 240 + parseStringUTF(start, end, maxLength) { 241 + /** 242 + * Helper function to process UTF-8 continuation bytes 243 + * @param {number} c - The continuation byte 244 + * @returns {number} The extracted data bits 245 + */ 246 + function ex(c) { // must be 10xxxxxx 247 + if ((c < 0x80) || (c >= 0xC0)) 248 + throw new Error('Invalid UTF-8 continuation byte: ' + c); 249 + return (c & 0x3F); 200 250 } 251 + /** 252 + * Helper function to convert a code point to a surrogate pair 253 + * @param {number} cp - The code point to convert 254 + * @returns {string} The surrogate pair as a string 255 + */ 256 + function surrogate(cp) { 257 + if (cp < 0x10000) 258 + throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp); 259 + // we could use String.fromCodePoint(cp) but let's be nice to older browsers and use surrogate pairs 260 + cp -= 0x10000; 261 + return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00); 262 + } 263 + let s = ''; 264 + for (let i = start; i < end; ) { 265 + const c = this.get(i++); 266 + if (c < 0x80) // 0xxxxxxx (7 bit) 267 + s += String.fromCharCode(c); 268 + else if (c < 0xC0) 269 + throw new Error('Invalid UTF-8 starting byte: ' + c); 270 + else if (c < 0xE0) // 110xxxxx 10xxxxxx (11 bit) 271 + s += String.fromCharCode(((c & 0x1F) << 6) | ex(this.get(i++))); 272 + else if (c < 0xF0) // 1110xxxx 10xxxxxx 10xxxxxx (16 bit) 273 + s += String.fromCharCode(((c & 0x0F) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++))); 274 + else if (c < 0xF8) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (21 bit) 275 + s += surrogate(((c & 0x07) << 18) | (ex(this.get(i++)) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++))); 276 + else 277 + throw new Error('Invalid UTF-8 starting byte (since 2003 it is restricted to 4 bytes): ' + c); 278 + } 279 + return { size: s.length, str: stringCut(s, maxLength) }; 201 280 } 202 - if (m[8]) { 203 - s += " UTC"; 204 - if (m[9]) 205 - s += m[9] + ":" + (m[10] || "00"); 281 + 282 + /** 283 + * Parse a region of the stream as a BMP (Basic Multilingual Plane) string 284 + * @param {number} start - starting position (included) 285 + * @param {number} end - ending position (excluded) 286 + * @param {number} maxLength - maximum length of the output string 287 + * @returns {Object} Object with size and str properties 288 + */ 289 + parseStringBMP(start, end, maxLength) { 290 + let s = '', hi, lo; 291 + for (let i = start; i < end; ) { 292 + hi = this.get(i++); 293 + lo = this.get(i++); 294 + s += String.fromCharCode((hi << 8) | lo); 295 + } 296 + return { size: s.length, str: stringCut(s, maxLength) }; 206 297 } 207 - return s; 208 - }; 209 - Stream.prototype.parseInteger = function (start, end) { 210 - var v = this.get(start), 211 - neg = (v > 127), 212 - pad = neg ? 255 : 0, 213 - len, 214 - s = ''; 215 - // skip unuseful bits (not allowed in DER) 216 - while (v == pad && ++start < end) 217 - v = this.get(start); 218 - len = end - start; 219 - if (len === 0) 220 - return neg ? '-1' : '0'; 221 - // show bit length of huge integers 222 - if (len > 4) { 223 - s = v; 224 - len <<= 3; 225 - while (((s ^ pad) & 0x80) == 0) { 226 - s <<= 1; 227 - --len; 298 + 299 + /** 300 + * Parse a region of the stream as a time string 301 + * @param {number} start - starting position (included) 302 + * @param {number} end - ending position (excluded) 303 + * @param {boolean} shortYear - Whether to parse as short year (2-digit) 304 + * @returns {string} Formatted time string 305 + */ 306 + parseTime(start, end, shortYear) { 307 + let s = this.parseStringISO(start, end).str, 308 + m = (shortYear ? reTimeS : reTimeL).exec(s); 309 + if (!m) 310 + throw new Error('Unrecognized time: ' + s); 311 + if (shortYear) { 312 + // to avoid querying the timer, use the fixed range [1970, 2069] 313 + // it will conform with ITU X.400 [-10, +40] sliding window until 2030 314 + m[1] = +m[1]; 315 + m[1] += (m[1] < 70) ? 2000 : 1900; 316 + } 317 + s = m[1] + '-' + m[2] + '-' + m[3] + ' ' + m[4]; 318 + if (m[5]) { 319 + s += ':' + m[5]; 320 + if (m[6]) { 321 + s += ':' + m[6]; 322 + if (m[7]) 323 + s += '.' + m[7]; 324 + } 228 325 } 229 - s = "(" + len + " bit)\n"; 326 + if (m[8]) { 327 + s += ' UTC'; 328 + if (m[9]) 329 + s += m[9] + ':' + (m[10] || '00'); 330 + } 331 + return s; 230 332 } 231 - // decode the integer 232 - if (neg) v = v - 256; 233 - var n = new Int10(v); 234 - for (var i = start + 1; i < end; ++i) 235 - n.mulAdd(256, this.get(i)); 236 - return s + n.toString(); 237 - }; 238 - Stream.prototype.parseBitString = function (start, end, maxLength) { 239 - var unusedBits = this.get(start); 240 - if (unusedBits > 7) 241 - throw 'Invalid BitString with unusedBits=' + unusedBits; 242 - var lenBit = ((end - start - 1) << 3) - unusedBits, 243 - s = ""; 244 - for (var i = start + 1; i < end; ++i) { 245 - var b = this.get(i), 246 - skip = (i == end - 1) ? unusedBits : 0; 247 - for (var j = 7; j >= skip; --j) 248 - s += (b >> j) & 1 ? "1" : "0"; 249 - if (s.length > maxLength) 250 - s = stringCut(s, maxLength); 333 + 334 + /** 335 + * Parse a region of the stream as an integer 336 + * @param {number} start - starting position (included) 337 + * @param {number} end - ending position (excluded) 338 + * @returns {string} Formatted integer string 339 + */ 340 + parseInteger(start, end) { 341 + let v = this.get(start), 342 + s = ''; 343 + const neg = (v > 127), 344 + pad = neg ? 255 : 0; 345 + // skip unuseful bits (not allowed in DER) 346 + while (v == pad && ++start < end) 347 + v = this.get(start); 348 + const len = end - start; 349 + if (len === 0) 350 + return neg ? '-1' : '0'; 351 + // show bit length of huge integers 352 + if (len > 4) { 353 + let v2 = v, 354 + lenBit = len << 3; 355 + while (((v2 ^ pad) & 0x80) == 0) { 356 + v2 <<= 1; 357 + --lenBit; 358 + } 359 + s = '(' + lenBit + ' bit)\n'; 360 + } 361 + // decode the integer 362 + if (neg) v = v - 256; 363 + let n = BigInt(v); 364 + for (let i = start + 1; i < end; ++i) 365 + n = (n << 8n) | BigInt(this.get(i)); 366 + return s + n; 251 367 } 252 - return { size: lenBit, str: s }; 253 - }; 254 - function checkPrintable(s) { 255 - var i, v; 256 - for (i = 0; i < s.length; ++i) { 257 - v = s.charCodeAt(i); 258 - if (v < 32 && v != 9 && v != 10 && v != 13) // [\t\r\n] are (kinda) printable 259 - throw new Error('Unprintable character at index ' + i + ' (code ' + s.str.charCodeAt(i) + ")"); 368 + 369 + /** 370 + * Parse a region of the stream as a bit string. 371 + * @param {number} start - starting position (included) 372 + * @param {number} end - ending position (excluded) 373 + * @param {number} maxLength - maximum length of the output string 374 + * @returns {Object} Object with size and str properties 375 + */ 376 + parseBitString(start, end, maxLength) { 377 + const unusedBits = this.get(start); 378 + if (unusedBits > 7) 379 + throw new Error('Invalid BitString with unusedBits=' + unusedBits); 380 + const lenBit = ((end - start - 1) << 3) - unusedBits; 381 + let s = ''; 382 + for (let i = start + 1; i < end; ++i) { 383 + let b = this.get(i), 384 + skip = (i == end - 1) ? unusedBits : 0; 385 + for (let j = 7; j >= skip; --j) 386 + s += (b >> j) & 1 ? '1' : '0'; 387 + if (s.length > maxLength) 388 + s = stringCut(s, maxLength); 389 + } 390 + return { size: lenBit, str: s }; 260 391 } 261 - } 262 - Stream.prototype.parseOctetString = function (start, end, maxLength) { 263 - var len = end - start, 264 - s; 265 - try { 266 - s = this.parseStringUTF(start, end, maxLength); 267 - checkPrintable(s.str); 268 - return { size: end - start, str: s.str }; 269 - } catch (e) { 270 - // ignore 392 + 393 + /** 394 + * Parse a region of the stream as an octet string. 395 + * @param {number} start - starting position (included) 396 + * @param {number} end - ending position (excluded) 397 + * @param {number} maxLength - maximum length of the output string 398 + * @returns {Object} Object with size and str properties 399 + */ 400 + parseOctetString(start, end, maxLength) { 401 + try { 402 + let s = this.parseStringUTF(start, end, maxLength); 403 + checkPrintable(s.str); 404 + return { size: end - start, str: s.str }; 405 + } catch (ignore) { 406 + // If UTF-8 parsing fails, fall back to hexadecimal dump 407 + } 408 + const len = end - start; 409 + maxLength /= 2; // we work in bytes 410 + if (len > maxLength) 411 + end = start + maxLength; 412 + let s = ''; 413 + for (let i = start; i < end; ++i) 414 + s += Stream.hexByte(this.get(i)); 415 + if (len > maxLength) 416 + s += ellipsis; 417 + return { size: len, str: s }; 271 418 } 272 - maxLength /= 2; // we work in bytes 273 - if (len > maxLength) 274 - end = start + maxLength; 275 - s = ''; 276 - for (var i = start; i < end; ++i) 277 - s += this.hexByte(this.get(i)); 278 - if (len > maxLength) 279 - s += ellipsis; 280 - return { size: len, str: s }; 281 - }; 282 - Stream.prototype.parseOID = function (start, end, maxLength, isRelative) { 283 - var s = '', 284 - n = new Int10(), 285 - bits = 0; 286 - for (var i = start; i < end; ++i) { 287 - var v = this.get(i); 288 - n.mulAdd(128, v & 0x7F); 289 - bits += 7; 290 - if (!(v & 0x80)) { // finished 291 - if (s === '') { 292 - n = n.simplify(); 293 - if (isRelative) { 294 - s = (n instanceof Int10) ? n.toString() : "" + n; 295 - } else if (n instanceof Int10) { 296 - n.sub(80); 297 - s = "2." + n.toString(); 298 - } else { 299 - var m = n < 80 ? n < 40 ? 0 : 1 : 2; 300 - s = m + "." + (n - m * 40); 301 - } 302 - } else 303 - s += "." + n.toString(); 304 - if (s.length > maxLength) 305 - return stringCut(s, maxLength); 306 - n = new Int10(); 419 + 420 + /** 421 + * Parse a region of the stream as an OID (Object Identifier). 422 + * @param {number} start - starting position (included) 423 + * @param {number} end - ending position (excluded) 424 + * @param {number} maxLength - maximum length of the output string 425 + * @param {boolean} isRelative - Whether the OID is relative 426 + * @returns {string} Formatted OID string 427 + */ 428 + parseOID(start, end, maxLength, isRelative) { 429 + let s = '', 430 + n = 0n, 307 431 bits = 0; 432 + for (let i = start; i < end; ++i) { 433 + let v = this.get(i); 434 + // Shift bits and add the lower 7 bits of the byte 435 + n = (n << 7n) | BigInt(v & 0x7F); 436 + bits += 7; 437 + // If the most significant bit is 0, this is the last byte of the OID component 438 + if (!(v & 0x80)) { // finished 439 + // If this is the first component, handle it specially 440 + if (s === '') { 441 + if (isRelative) { 442 + s = n.toString(); 443 + } else { 444 + let m = n < 80 ? n < 40 ? 0n : 1n : 2n; 445 + s = m + '.' + (n - m * 40n); 446 + } 447 + } else 448 + s += '.' + n; 449 + if (s.length > maxLength) 450 + return stringCut(s, maxLength); 451 + n = 0n; 452 + bits = 0; 453 + } 308 454 } 309 - } 310 - if (bits > 0) 311 - s += ".incomplete"; 312 - if (typeof oids === 'object' && !isRelative) { 313 - var oid = oids[s]; 314 - if (oid) { 315 - if (oid.d) s += "\n" + oid.d; 316 - if (oid.c) s += "\n" + oid.c; 317 - if (oid.w) s += "\n(warning!)"; 455 + if (bits > 0) 456 + s += '.incomplete'; 457 + // If OIDs mapping is available and the OID is absolute, try to resolve it 458 + if (typeof oids === 'object' && !isRelative) { 459 + let oid = oids[s]; 460 + if (oid) { 461 + if (oid.d) s += '\n' + oid.d; 462 + if (oid.c) s += '\n' + oid.c; 463 + if (oid.w) s += '\n(warning!)'; 464 + } 318 465 } 466 + return s; 319 467 } 320 - return s; 321 - }; 322 - Stream.prototype.parseRelativeOID = function (start, end, maxLength) { 323 - return this.parseOID(start, end, maxLength, true); 324 - }; 325 468 326 - function ASN1(stream, header, length, tag, tagLen, sub) { 327 - if (!(tag instanceof ASN1Tag)) throw 'Invalid tag value.'; 328 - this.stream = stream; 329 - this.header = header; 330 - this.length = length; 331 - this.tag = tag; 332 - this.tagLen = tagLen; 333 - this.sub = sub; 334 - } 335 - ASN1.prototype.typeName = function () { 336 - switch (this.tag.tagClass) { 337 - case 0: // universal 338 - switch (this.tag.tagNumber) { 339 - case 0x00: return "EOC"; 340 - case 0x01: return "BOOLEAN"; 341 - case 0x02: return "INTEGER"; 342 - case 0x03: return "BIT_STRING"; 343 - case 0x04: return "OCTET_STRING"; 344 - case 0x05: return "NULL"; 345 - case 0x06: return "OBJECT_IDENTIFIER"; 346 - case 0x07: return "ObjectDescriptor"; 347 - case 0x08: return "EXTERNAL"; 348 - case 0x09: return "REAL"; 349 - case 0x0A: return "ENUMERATED"; 350 - case 0x0B: return "EMBEDDED_PDV"; 351 - case 0x0C: return "UTF8String"; 352 - case 0x0D: return "RELATIVE_OID"; 353 - case 0x10: return "SEQUENCE"; 354 - case 0x11: return "SET"; 355 - case 0x12: return "NumericString"; 356 - case 0x13: return "PrintableString"; // ASCII subset 357 - case 0x14: return "TeletexString"; // aka T61String 358 - case 0x15: return "VideotexString"; 359 - case 0x16: return "IA5String"; // ASCII 360 - case 0x17: return "UTCTime"; 361 - case 0x18: return "GeneralizedTime"; 362 - case 0x19: return "GraphicString"; 363 - case 0x1A: return "VisibleString"; // ASCII subset 364 - case 0x1B: return "GeneralString"; 365 - case 0x1C: return "UniversalString"; 366 - case 0x1E: return "BMPString"; 367 - } 368 - return "Universal_" + this.tag.tagNumber.toString(); 369 - case 1: return "Application_" + this.tag.tagNumber.toString(); 370 - case 2: return "[" + this.tag.tagNumber.toString() + "]"; // Context 371 - case 3: return "Private_" + this.tag.tagNumber.toString(); 469 + /** 470 + * Parse a region of the stream as a relative OID (Object Identifier). 471 + * @param {number} start - starting position (included) 472 + * @param {number} end - ending position (excluded) 473 + * @param {number} maxLength - maximum length of the output string 474 + * @returns {string} Formatted relative OID string 475 + */ 476 + parseRelativeOID(start, end, maxLength) { 477 + return this.parseOID(start, end, maxLength, true); 372 478 } 373 - }; 479 + } 480 + 374 481 function recurse(el, parser, maxLength) { 375 - var avoidRecurse = true; 482 + let avoidRecurse = true; 376 483 if (el.tag.tagConstructed && el.sub) { 377 484 avoidRecurse = false; 378 485 el.sub.forEach(function (e1) { ··· 382 489 } 383 490 if (avoidRecurse) 384 491 return el.stream[parser](el.posContent(), el.posContent() + Math.abs(el.length), maxLength); 385 - var d = { size: 0, str: '' }; 492 + let d = { size: 0, str: '' }; 386 493 el.sub.forEach(function (el) { 387 - var d1 = recurse(el, parser, maxLength - d.str.length); 494 + let d1 = recurse(el, parser, maxLength - d.str.length); 388 495 d.size += d1.size; 389 496 d.str += d1.str; 390 497 }); 391 498 return d; 392 499 } 393 - /** A string preview of the content (intended for humans). */ 394 - ASN1.prototype.content = function (maxLength) { 395 - if (this.tag === undefined) 500 + 501 + class ASN1Tag { 502 + constructor(stream) { 503 + let buf = stream.get(); 504 + this.tagClass = buf >> 6; 505 + this.tagConstructed = ((buf & 0x20) !== 0); 506 + this.tagNumber = buf & 0x1F; 507 + if (this.tagNumber == 0x1F) { // long tag 508 + let n = 0n; 509 + do { 510 + buf = stream.get(); 511 + n = (n << 7n) | BigInt(buf & 0x7F); 512 + } while (buf & 0x80); 513 + this.tagNumber = n <= Number.MAX_SAFE_INTEGER ? Number(n) : n; 514 + } 515 + } 516 + isUniversal() { 517 + return this.tagClass === 0x00; 518 + } 519 + isEOC() { 520 + return this.tagClass === 0x00 && this.tagNumber === 0x00; 521 + } 522 + } 523 + 524 + /** 525 + * ASN1 class for parsing ASN.1 encoded data. 526 + * Instances of this class represent an ASN.1 element and provides methods to parse and display its content. 527 + */ 528 + export class ASN1 { 529 + /** 530 + * Creates an ASN1 parser object. 531 + * @param {Stream} stream - The stream containing the ASN.1 data. 532 + * @param {number} header - The header length. 533 + * @param {number} length - The length of the data. 534 + * @param {ASN1Tag} tag - The ASN.1 tag. 535 + * @param {number} tagLen - The length of the tag. 536 + * @param {Array} sub - The sub-elements. 537 + */ 538 + constructor(stream, header, length, tag, tagLen, sub) { 539 + if (!(tag instanceof ASN1Tag)) throw new Error('Invalid tag value.'); 540 + this.stream = stream; 541 + this.header = header; 542 + this.length = length; 543 + this.tag = tag; 544 + this.tagLen = tagLen; 545 + this.sub = sub; 546 + } 547 + 548 + /** 549 + * Get the type name of the ASN.1 element. 550 + * @returns {string} The type name. 551 + */ 552 + typeName() { 553 + switch (this.tag.tagClass) { 554 + case 0: // universal 555 + switch (this.tag.tagNumber) { 556 + case 0x00: return 'EOC'; 557 + case 0x01: return 'BOOLEAN'; 558 + case 0x02: return 'INTEGER'; 559 + case 0x03: return 'BIT_STRING'; 560 + case 0x04: return 'OCTET_STRING'; 561 + case 0x05: return 'NULL'; 562 + case 0x06: return 'OBJECT_IDENTIFIER'; 563 + case 0x07: return 'ObjectDescriptor'; 564 + case 0x08: return 'EXTERNAL'; 565 + case 0x09: return 'REAL'; 566 + case 0x0A: return 'ENUMERATED'; 567 + case 0x0B: return 'EMBEDDED_PDV'; 568 + case 0x0C: return 'UTF8String'; 569 + case 0x0D: return 'RELATIVE_OID'; 570 + case 0x10: return 'SEQUENCE'; 571 + case 0x11: return 'SET'; 572 + case 0x12: return 'NumericString'; 573 + case 0x13: return 'PrintableString'; // ASCII subset 574 + case 0x14: return 'TeletexString'; // aka T61String 575 + case 0x15: return 'VideotexString'; 576 + case 0x16: return 'IA5String'; // ASCII 577 + case 0x17: return 'UTCTime'; 578 + case 0x18: return 'GeneralizedTime'; 579 + case 0x19: return 'GraphicString'; 580 + case 0x1A: return 'VisibleString'; // ASCII subset 581 + case 0x1B: return 'GeneralString'; 582 + case 0x1C: return 'UniversalString'; 583 + case 0x1E: return 'BMPString'; 584 + } 585 + return 'Universal_' + this.tag.tagNumber.toString(); 586 + case 1: return 'Application_' + this.tag.tagNumber.toString(); 587 + case 2: return '[' + this.tag.tagNumber.toString() + ']'; // Context 588 + case 3: return 'Private_' + this.tag.tagNumber.toString(); 589 + } 590 + } 591 + 592 + /** 593 + * Get a string preview of the content (intended for humans). 594 + * @param {number} maxLength - The maximum length of the content. 595 + * @returns {string|null} The content preview or null if not supported. 596 + */ 597 + content(maxLength) { 598 + if (this.tag === undefined) 599 + return null; 600 + if (maxLength === undefined) 601 + maxLength = Infinity; 602 + const content = this.posContent(), 603 + len = Math.abs(this.length); 604 + if (!this.tag.isUniversal()) { 605 + if (this.sub !== null) 606 + return '(' + this.sub.length + ' elem)'; 607 + let d1 = this.stream.parseOctetString(content, content + len, maxLength); 608 + return '(' + d1.size + ' byte)\n' + d1.str; 609 + } 610 + switch (this.tag.tagNumber) { 611 + case 0x01: // BOOLEAN 612 + if (len != 1) return 'invalid length ' + len; 613 + return (this.stream.get(content) === 0) ? 'false' : 'true'; 614 + case 0x02: // INTEGER 615 + if (len < 1) return 'invalid length ' + len; 616 + return this.stream.parseInteger(content, content + len); 617 + case 0x03: { // BIT_STRING 618 + let d = recurse(this, 'parseBitString', maxLength); 619 + return '(' + d.size + ' bit)\n' + d.str; 620 + } 621 + case 0x04: { // OCTET_STRING 622 + let d = recurse(this, 'parseOctetString', maxLength); 623 + return '(' + d.size + ' byte)\n' + d.str; 624 + } 625 + //case 0x05: // NULL 626 + case 0x06: // OBJECT_IDENTIFIER 627 + if (len < 1) return 'invalid length ' + len; // pgut001's dumpasn1.c enforces a minimum lenght of 3 628 + return this.stream.parseOID(content, content + len, maxLength); 629 + //case 0x07: // ObjectDescriptor 630 + //case 0x08: // EXTERNAL 631 + //case 0x09: // REAL 632 + case 0x0A: // ENUMERATED 633 + return this.stream.parseInteger(content, content + len); 634 + //case 0x0B: // EMBEDDED_PDV 635 + case 0x0D: // RELATIVE-OID 636 + return this.stream.parseRelativeOID(content, content + len, maxLength); 637 + case 0x10: // SEQUENCE 638 + case 0x11: // SET 639 + if (this.sub !== null) 640 + return '(' + this.sub.length + ' elem)'; 641 + else 642 + return '(no elem)'; 643 + case 0x0C: // UTF8String 644 + return recurse(this, 'parseStringUTF', maxLength).str; 645 + case 0x14: // TeletexString 646 + return recurse(this, 'parseStringT61', maxLength).str; 647 + case 0x12: // NumericString 648 + case 0x13: // PrintableString 649 + case 0x15: // VideotexString 650 + case 0x16: // IA5String 651 + case 0x1A: // VisibleString 652 + case 0x1B: // GeneralString 653 + //case 0x19: // GraphicString 654 + //case 0x1C: // UniversalString 655 + return recurse(this, 'parseStringISO', maxLength).str; 656 + case 0x1E: // BMPString 657 + return recurse(this, 'parseStringBMP', maxLength).str; 658 + case 0x17: // UTCTime 659 + case 0x18: // GeneralizedTime 660 + return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); 661 + } 396 662 return null; 397 - if (maxLength === undefined) 398 - maxLength = Infinity; 399 - var content = this.posContent(), 400 - len = Math.abs(this.length); 401 - if (!this.tag.isUniversal()) { 402 - if (this.sub !== null) 403 - return "(" + this.sub.length + " elem)"; 404 - var d1 = this.stream.parseOctetString(content, content + len, maxLength); 405 - return "(" + d1.size + " byte)\n" + d1.str; 663 + } 664 + 665 + /** 666 + * Get a string representation of the ASN.1 element. 667 + * @returns {string} The string representation. 668 + */ 669 + toString() { 670 + return this.typeName() + '@' + this.stream.pos + '[header:' + this.header + ',length:' + this.length + ',sub:' + ((this.sub === null) ? 'null' : this.sub.length) + ']'; 671 + } 672 + 673 + /** 674 + * Get a pretty string representation of the ASN.1 element. 675 + * @param {string} indent - The indentation string. 676 + * @returns {string} The pretty string representation. 677 + */ 678 + toPrettyString(indent) { 679 + if (indent === undefined) indent = ''; 680 + let s = indent; 681 + if (this.def) { 682 + if (this.def.id) 683 + s += this.def.id + ' '; 684 + if (this.def.name && this.def.name != this.typeName().replace(/_/g, ' ')) 685 + s+= this.def.name + ' '; 686 + if (this.def.mismatch) 687 + s += '[?] '; 688 + } 689 + s += this.typeName() + ' @' + this.stream.pos; 690 + if (this.length >= 0) 691 + s += '+'; 692 + s += this.length; 693 + if (this.tag.tagConstructed) 694 + s += ' (constructed)'; 695 + else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 696 + s += ' (encapsulates)'; 697 + let content = this.content(); 698 + if (content) 699 + s += ': ' + content.replace(/\n/g, '|'); 700 + s += '\n'; 701 + if (this.sub !== null) { 702 + indent += ' '; 703 + for (let i = 0, max = this.sub.length; i < max; ++i) 704 + s += this.sub[i].toPrettyString(indent); 705 + } 706 + return s; 707 + } 708 + 709 + /** 710 + * Get the starting position of the element in the stream. 711 + * @returns {number} The starting position. 712 + */ 713 + posStart() { 714 + return this.stream.pos; 406 715 } 407 - switch (this.tag.tagNumber) { 408 - case 0x01: // BOOLEAN 409 - return (this.stream.get(content) === 0) ? "false" : "true"; 410 - case 0x02: // INTEGER 411 - return this.stream.parseInteger(content, content + len); 412 - case 0x03: // BIT_STRING 413 - var d = recurse(this, 'parseBitString', maxLength); 414 - return "(" + d.size + " bit)\n" + d.str; 415 - case 0x04: // OCTET_STRING 416 - d = recurse(this, 'parseOctetString', maxLength); 417 - return "(" + d.size + " byte)\n" + d.str; 418 - //case 0x05: // NULL 419 - case 0x06: // OBJECT_IDENTIFIER 420 - return this.stream.parseOID(content, content + len, maxLength); 421 - //case 0x07: // ObjectDescriptor 422 - //case 0x08: // EXTERNAL 423 - //case 0x09: // REAL 424 - case 0x0A: // ENUMERATED 425 - return this.stream.parseInteger(content, content + len); 426 - //case 0x0B: // EMBEDDED_PDV 427 - case 0x0D: // RELATIVE-OID 428 - return this.stream.parseRelativeOID(content, content + len, maxLength); 429 - case 0x10: // SEQUENCE 430 - case 0x11: // SET 431 - if (this.sub !== null) 432 - return "(" + this.sub.length + " elem)"; 433 - else 434 - return "(no elem)"; 435 - case 0x0C: // UTF8String 436 - return recurse(this, 'parseStringUTF', maxLength).str; 437 - case 0x14: // TeletexString 438 - return recurse(this, 'parseStringT61', maxLength).str; 439 - case 0x12: // NumericString 440 - case 0x13: // PrintableString 441 - case 0x15: // VideotexString 442 - case 0x16: // IA5String 443 - case 0x1A: // VisibleString 444 - case 0x1B: // GeneralString 445 - //case 0x19: // GraphicString 446 - //case 0x1C: // UniversalString 447 - return recurse(this, 'parseStringISO', maxLength).str; 448 - case 0x1E: // BMPString 449 - return recurse(this, 'parseStringBMP', maxLength).str; 450 - case 0x17: // UTCTime 451 - case 0x18: // GeneralizedTime 452 - return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); 716 + 717 + /** 718 + * Get the position of the content in the stream. 719 + * @returns {number} The content position. 720 + */ 721 + posContent() { 722 + return this.stream.pos + this.header; 453 723 } 454 - return null; 455 - }; 456 - ASN1.prototype.toString = function () { 457 - return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? 'null' : this.sub.length) + "]"; 458 - }; 459 - ASN1.prototype.toPrettyString = function (indent) { 460 - if (indent === undefined) indent = ''; 461 - var s = indent + this.typeName() + " @" + this.stream.pos; 462 - if (this.length >= 0) 463 - s += "+"; 464 - s += this.length; 465 - if (this.tag.tagConstructed) 466 - s += " (constructed)"; 467 - else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 468 - s += " (encapsulates)"; 469 - var content = this.content(); 470 - if (content) 471 - s += ": " + content.replace(/\n/g, '|'); 472 - s += "\n"; 473 - if (this.sub !== null) { 474 - indent += ' '; 475 - for (var i = 0, max = this.sub.length; i < max; ++i) 476 - s += this.sub[i].toPrettyString(indent); 724 + 725 + /** 726 + * Get the ending position of the element in the stream. 727 + * @returns {number} The ending position. 728 + */ 729 + posEnd() { 730 + return this.stream.pos + this.header + Math.abs(this.length); 477 731 } 478 - return s; 479 - }; 480 - ASN1.prototype.posStart = function () { 481 - return this.stream.pos; 482 - }; 483 - ASN1.prototype.posContent = function () { 484 - return this.stream.pos + this.header; 485 - }; 486 - ASN1.prototype.posEnd = function () { 487 - return this.stream.pos + this.header + Math.abs(this.length); 488 - }; 489 - /** Position of the length. */ 490 - ASN1.prototype.posLen = function() { 491 - return this.stream.pos + this.tagLen; 492 - }; 493 - ASN1.prototype.toHexString = function () { 494 - return this.stream.hexDump(this.posStart(), this.posEnd(), true); 495 - }; 496 - ASN1.prototype.toB64String = function () { 497 - return this.stream.b64Dump(this.posStart(), this.posEnd()); 498 - }; 499 - ASN1.decodeLength = function (stream) { 500 - var buf = stream.get(), 501 - len = buf & 0x7F; 502 - if (len == buf) // first bit was 0, short form 503 - return len; 504 - if (len === 0) // long form with length 0 is a special case 505 - return null; // undefined length 506 - if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways 507 - throw "Length over 48 bits not supported at position " + (stream.pos - 1); 508 - buf = 0; 509 - for (var i = 0; i < len; ++i) 510 - buf = (buf * 256) + stream.get(); 511 - return buf; 512 - }; 513 - function ASN1Tag(stream) { 514 - var buf = stream.get(); 515 - this.tagClass = buf >> 6; 516 - this.tagConstructed = ((buf & 0x20) !== 0); 517 - this.tagNumber = buf & 0x1F; 518 - if (this.tagNumber == 0x1F) { // long tag 519 - var n = new Int10(); 520 - do { 521 - buf = stream.get(); 522 - n.mulAdd(128, buf & 0x7F); 523 - } while (buf & 0x80); 524 - this.tagNumber = n.simplify(); 732 + 733 + /** 734 + * Get the position of the length in the stream. 735 + * @returns {number} The length position. 736 + */ 737 + posLen() { 738 + return this.stream.pos + this.tagLen; 739 + } 740 + 741 + /** 742 + * Get a hexadecimal dump of the node. 743 + * @param {string} [type='raw'] - The dump type: 'raw', 'byte', or 'dump'. 744 + * @returns {string} The hexadecimal dump. 745 + */ 746 + toHexString(type = 'raw') { 747 + return this.stream.hexDump(this.posStart(), this.posEnd(), type); 748 + } 749 + 750 + /** 751 + * Get a base64url dump of the node (according to RFC 4648 section 5). 752 + * @param {string} [type='url'] - The dump type: 'url' (section 5 without padding) or 'std' (section 4 with padding). 753 + * @returns {string} The base64 encoded representation. 754 + */ 755 + toB64String(type = 'url') { 756 + return this.stream.b64Dump(this.posStart(), this.posEnd(), type); 757 + } 758 + 759 + /** 760 + * Decode the length field of an ASN.1 element. 761 + * @param {Stream} stream - The stream to read from. 762 + * @returns {number|null} The decoded length, or null for indefinite length. 763 + * @throws {Error} If the length is invalid or exceeds 48 bits. 764 + */ 765 + static decodeLength(stream) { 766 + const buf = stream.get(), 767 + len = buf & 0x7F; 768 + if (len == buf) // first bit was 0, short form 769 + return len; 770 + if (len === 0) // long form with length 0 is a special case 771 + return null; // undefined length 772 + if (len > 6) // no reason to use BigInt, as it would be a huge buffer anyways 773 + throw new Error('Length over 48 bits not supported at position ' + (stream.pos - 1)); 774 + let value = 0; 775 + for (let i = 0; i < len; ++i) 776 + value = (value << 8) | stream.get(); 777 + return value; 525 778 } 526 - } 527 - ASN1Tag.prototype.isUniversal = function () { 528 - return this.tagClass === 0x00; 529 - }; 530 - ASN1Tag.prototype.isEOC = function () { 531 - return this.tagClass === 0x00 && this.tagNumber === 0x00; 532 - }; 533 - ASN1.decode = function (stream, offset) { 534 - if (!(stream instanceof Stream)) 535 - stream = new Stream(stream, offset || 0); 536 - var streamStart = new Stream(stream), 537 - tag = new ASN1Tag(stream), 538 - tagLen = stream.pos - streamStart.pos, 539 - len = ASN1.decodeLength(stream), 540 - start = stream.pos, 541 - header = start - streamStart.pos, 542 - sub = null, 543 - getSub = function () { 544 - sub = []; 545 - if (len !== null) { 546 - // definite length 547 - var end = start + len; 548 - if (end > stream.enc.length) 549 - throw 'Container at offset ' + start + ' has a length of ' + len + ', which is past the end of the stream'; 550 - while (stream.pos < end) 551 - sub[sub.length] = ASN1.decode(stream); 552 - if (stream.pos != end) 553 - throw 'Content size is not correct for container at offset ' + start; 554 - } else { 555 - // undefined length 556 - try { 557 - for (;;) { 558 - var s = ASN1.decode(stream); 559 - if (s.tag.isEOC()) 560 - break; 561 - sub[sub.length] = s; 779 + 780 + /** 781 + * Decode an ASN.1 element from a stream. 782 + * @param {Stream|array|string} stream - The input data. 783 + * @param {number} [offset=0] - The offset to start decoding from. 784 + * @param {Function} [type=ASN1] - The class to instantiate. 785 + * @returns {ASN1} The decoded ASN.1 element. 786 + * @throws {Error} If the decoding fails. 787 + */ 788 + static decode(stream, offset, type = ASN1) { 789 + if (!(type == ASN1 || type.prototype instanceof ASN1)) 790 + throw new Error('Must pass a class that extends ASN1'); 791 + if (!(stream instanceof Stream)) 792 + stream = new Stream(stream, offset || 0); 793 + let streamStart = new Stream(stream), 794 + tag = new ASN1Tag(stream), 795 + tagLen = stream.pos - streamStart.pos, 796 + len = ASN1.decodeLength(stream), 797 + start = stream.pos, 798 + header = start - streamStart.pos, 799 + sub = null, 800 + getSub = function () { 801 + sub = []; 802 + if (len !== null) { 803 + // definite length 804 + let end = start + len; 805 + if (end > stream.enc.length) 806 + throw new Error('Container at offset ' + start + ' has a length of ' + len + ', which is past the end of the stream'); 807 + while (stream.pos < end) 808 + sub[sub.length] = type.decode(stream); 809 + if (stream.pos != end) 810 + throw new Error('Content size is not correct for container at offset ' + start); 811 + } else { 812 + // undefined length 813 + try { 814 + for (;;) { 815 + let s = type.decode(stream); 816 + if (s.tag.isEOC()) 817 + break; 818 + sub[sub.length] = s; 819 + } 820 + len = start - stream.pos; // undefined lengths are represented as negative values 821 + } catch (e) { 822 + throw new Error('Exception while decoding undefined length content at offset ' + start + ': ' + e); 823 + } 824 + } 825 + }; 826 + if (tag.tagConstructed) { 827 + // must have valid content 828 + getSub(); 829 + } else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { 830 + // sometimes BitString and OctetString are used to encapsulate ASN.1 831 + try { 832 + if (tag.tagNumber == 0x03) 833 + if (stream.get() != 0) 834 + throw new Error('BIT STRINGs with unused bits cannot encapsulate.'); 835 + getSub(); 836 + for (let s of sub) { 837 + if (s.tag.isEOC()) 838 + throw new Error('EOC is not supposed to be actual content.'); 839 + try { 840 + s.content(); 841 + } catch (e) { 842 + throw new Error('Unable to parse content: ' + e); 562 843 } 563 - len = start - stream.pos; // undefined lengths are represented as negative values 564 - } catch (e) { 565 - throw 'Exception while decoding undefined length content at offset ' + start + ': ' + e; 566 844 } 845 + } catch (ignore) { 846 + // but silently ignore when they don't 847 + sub = null; 848 + //DEBUG console.log('Could not decode structure at ' + start + ':', e); 567 849 } 568 - }; 569 - if (tag.tagConstructed) { 570 - // must have valid content 571 - getSub(); 572 - } else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { 573 - // sometimes BitString and OctetString are used to encapsulate ASN.1 574 - try { 575 - if (tag.tagNumber == 0x03) 576 - if (stream.get() != 0) 577 - throw "BIT STRINGs with unused bits cannot encapsulate."; 578 - getSub(); 579 - for (var i = 0; i < sub.length; ++i) 580 - if (sub[i].tag.isEOC()) 581 - throw 'EOC is not supposed to be actual content.'; 582 - } catch (e) { 583 - // but silently ignore when they don't 584 - sub = null; 585 - //DEBUG console.log('Could not decode structure at ' + start + ':', e); 586 850 } 587 - } 588 - if (sub === null) { 589 - if (len === null) 590 - throw "We can't skip over an invalid tag with undefined length at offset " + start; 591 - stream.pos = start + Math.abs(len); 851 + if (sub === null) { 852 + if (len === null) 853 + throw new Error("We can't skip over an invalid tag with undefined length at offset " + start); 854 + stream.pos = start + Math.abs(len); 855 + } 856 + return new type(streamStart, header, len, tag, tagLen, sub); 592 857 } 593 - return new ASN1(streamStart, header, len, tag, tagLen, sub); 594 - }; 595 858 596 - return ASN1; 597 - 598 - }); 859 + }
+79 -82
base64.js
··· 1 1 // Base64 JavaScript decoder 2 - // Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 2 + // Copyright (c) 2008 Lapo Luchini <lapo@lapo.it> 3 3 4 4 // Permission to use, copy, modify, and/or distribute this software for any 5 5 // purpose with or without fee is hereby granted, provided that the above 6 6 // copyright notice and this permission notice appear in all copies. 7 - // 7 + // 8 8 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 9 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 10 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ··· 13 13 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 14 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 15 16 - (typeof define != 'undefined' ? define : function (factory) { 'use strict'; 17 - if (typeof module == 'object') module.exports = factory(); 18 - else window.base64 = factory(); 19 - })(function () { 20 - "use strict"; 16 + const 17 + haveU8 = (typeof Uint8Array == 'function'); 18 + 19 + let decoder; // populated on first usage 21 20 22 - var Base64 = {}, 23 - decoder, // populated on first usage 24 - haveU8 = (typeof Uint8Array == 'function'); 21 + export class Base64 { 25 22 26 - Base64.decode = function (a) { 27 - var isString = (typeof a == 'string'); 28 - var i; 29 - if (decoder === undefined) { 30 - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", 31 - ignore = "= \f\n\r\t\u00A0\u2028\u2029"; 32 - decoder = []; 33 - for (i = 0; i < 64; ++i) 34 - decoder[b64.charCodeAt(i)] = i; 35 - for (i = 0; i < ignore.length; ++i) 36 - decoder[ignore.charCodeAt(i)] = -1; 37 - // RFC 3548 URL & file safe encoding 38 - decoder['-'.charCodeAt(0)] = decoder['+'.charCodeAt(0)]; 39 - decoder['_'.charCodeAt(0)] = decoder['/'.charCodeAt(0)]; 40 - } 41 - var out = haveU8 ? new Uint8Array(a.length * 3 >> 2) : []; 42 - var bits = 0, char_count = 0, len = 0; 43 - for (i = 0; i < a.length; ++i) { 44 - var c = isString ? a.charCodeAt(i) : a[i]; 45 - if (c == 61) // '='.charCodeAt(0) 23 + static decode(a) { 24 + let isString = (typeof a == 'string'); 25 + let i; 26 + if (decoder === undefined) { 27 + let b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 28 + ignore = '= \f\n\r\t\u00A0\u2028\u2029'; 29 + decoder = []; 30 + for (i = 0; i < 64; ++i) 31 + decoder[b64.charCodeAt(i)] = i; 32 + for (i = 0; i < ignore.length; ++i) 33 + decoder[ignore.charCodeAt(i)] = -1; 34 + // also support decoding Base64url (RFC 4648 section 5) 35 + decoder['-'.charCodeAt(0)] = decoder['+'.charCodeAt(0)]; 36 + decoder['_'.charCodeAt(0)] = decoder['/'.charCodeAt(0)]; 37 + } 38 + let out = haveU8 ? new Uint8Array(a.length * 3 >> 2) : []; 39 + let bits = 0, char_count = 0, len = 0; 40 + for (i = 0; i < a.length; ++i) { 41 + let c = isString ? a.charCodeAt(i) : a[i]; 42 + if (c == 61) // '='.charCodeAt(0) 43 + break; 44 + c = decoder[c]; 45 + if (c == -1) 46 + continue; 47 + if (c === undefined) 48 + throw 'Illegal character at offset ' + i; 49 + bits |= c; 50 + if (++char_count >= 4) { 51 + out[len++] = (bits >> 16); 52 + out[len++] = (bits >> 8) & 0xFF; 53 + out[len++] = bits & 0xFF; 54 + bits = 0; 55 + char_count = 0; 56 + } else { 57 + bits <<= 6; 58 + } 59 + } 60 + switch (char_count) { 61 + case 1: 62 + throw 'Base64 encoding incomplete: at least 2 bits missing'; 63 + case 2: 64 + out[len++] = (bits >> 10); 46 65 break; 47 - c = decoder[c]; 48 - if (c == -1) 49 - continue; 50 - if (c === undefined) 51 - throw 'Illegal character at offset ' + i; 52 - bits |= c; 53 - if (++char_count >= 4) { 66 + case 3: 54 67 out[len++] = (bits >> 16); 55 68 out[len++] = (bits >> 8) & 0xFF; 56 - out[len++] = bits & 0xFF; 57 - bits = 0; 58 - char_count = 0; 59 - } else { 60 - bits <<= 6; 69 + break; 61 70 } 62 - } 63 - switch (char_count) { 64 - case 1: 65 - throw "Base64 encoding incomplete: at least 2 bits missing"; 66 - case 2: 67 - out[len++] = (bits >> 10); 68 - break; 69 - case 3: 70 - out[len++] = (bits >> 16); 71 - out[len++] = (bits >> 8) & 0xFF; 72 - break; 71 + if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters 72 + out = out.subarray(0, len); 73 + return out; 73 74 } 74 - if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters 75 - out = out.subarray(0, len); 76 - return out; 77 - }; 78 75 79 - Base64.pretty = function (str) { 80 - // fix padding 81 - if (str.length % 4 > 0) 82 - str = (str + '===').slice(0, str.length + str.length % 4); 83 - // convert RFC 3548 to standard Base64 84 - str = str.replace(/-/g, '+').replace(/_/g, '/'); 85 - // 80 column width 86 - return str.replace(/(.{80})/g, '$1\n'); 87 - }; 76 + static pretty(str) { 77 + // fix padding 78 + let pad = 4 - str.length % 4; 79 + if (pad < 4) 80 + str += '==='.slice(0, pad); 81 + // convert Base64url (RFC 4648 section 5) to standard Base64 (RFC 4648 section 4) 82 + str = str.replace(/-/g, '+').replace(/_/g, '/'); 83 + // 80 column width 84 + return str.replace(/.{80}/g, '$&\n'); 85 + } 88 86 89 - Base64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====|^([A-Za-z0-9+/=\s]+)$/; 90 - Base64.unarmor = function (a) { 91 - var m = Base64.re.exec(a); 92 - if (m) { 93 - if (m[1]) 94 - a = m[1]; 95 - else if (m[2]) 96 - a = m[2]; 97 - else if (m[3]) 98 - a = m[3]; 99 - else 100 - throw "RegExp out of sync"; 87 + static unarmor(a) { 88 + let m = Base64.re.exec(a); 89 + if (m) { 90 + if (m[1]) 91 + a = m[1]; 92 + else if (m[2]) 93 + a = m[2]; 94 + else if (m[3]) 95 + a = m[3]; 96 + else 97 + throw 'RegExp out of sync'; 98 + } 99 + return Base64.decode(a); 101 100 } 102 - return Base64.decode(a); 103 - }; 104 101 105 - return Base64; 102 + } 106 103 107 - }); 104 + Base64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====|^([A-Za-z0-9+/=\s]+)$/;
+1 -1
check.sh
··· 1 1 #!/bin/sh 2 - type gsha256sum >/dev/null && SHA256=gsha256sum || SHA256=sha256sum 2 + type gsha256sum >/dev/null 2>/dev/null && SHA256=gsha256sum || SHA256=sha256sum 3 3 gpg --verify -o - sha256sums.asc | $SHA256 -c --quiet
+53
context.js
··· 1 + const 2 + id = (elem) => document.getElementById(elem), 3 + contextMenu = id('contextmenu'), 4 + btnCopyHex = id('btnCopyHex'), 5 + btnCopyB64 = id('btnCopyB64'), 6 + btnCopyTree = id('btnCopyTree'), 7 + btnCopyValue = id('btnCopyValue'); 8 + 9 + export function bindContextMenu(node) { 10 + const type = node.asn1.typeName(); 11 + const valueEnabled = type != 'SET' && type != 'SEQUENCE'; 12 + node.onclick = function (event) { 13 + // do not show the menu in case of clicking the icon 14 + if (event.srcElement.nodeName != 'SPAN') return; 15 + contextMenu.style.left = event.pageX + 'px'; 16 + contextMenu.style.top = event.pageY + 'px'; 17 + contextMenu.style.visibility = 'visible'; 18 + contextMenu.node = this; 19 + btnCopyValue.style.display = valueEnabled ? 'block' : 'none'; 20 + event.preventDefault(); 21 + event.stopPropagation(); 22 + }; 23 + } 24 + 25 + function close(event) { 26 + contextMenu.style.visibility = 'hidden'; 27 + event.stopPropagation(); 28 + } 29 + 30 + contextMenu.onmouseleave = close; 31 + 32 + btnCopyHex.onclick = function (event) { 33 + navigator.clipboard.writeText(contextMenu.node.asn1.toHexString('byte')); 34 + close(event); 35 + }; 36 + 37 + btnCopyB64.onclick = function (event) { 38 + event.stopPropagation(); 39 + navigator.clipboard.writeText(contextMenu.node.asn1.toB64String()); 40 + close(event); 41 + }; 42 + 43 + btnCopyTree.onclick = function (event) { 44 + event.stopPropagation(); 45 + navigator.clipboard.writeText(contextMenu.node.asn1.toPrettyString()); 46 + close(event); 47 + }; 48 + 49 + btnCopyValue.onclick = function (event) { 50 + event.stopPropagation(); 51 + navigator.clipboard.writeText(contextMenu.node.asn1.content()); 52 + close(event); 53 + };
+144
defs.js
··· 1 + // ASN.1 RFC definitions matcher 2 + // Copyright (c) 2023 Lapo Luchini <lapo@lapo.it> 3 + 4 + // Permission to use, copy, modify, and/or distribute this software for any 5 + // purpose with or without fee is hereby granted, provided that the above 6 + // copyright notice and this permission notice appear in all copies. 7 + // 8 + // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 + // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 + // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 + // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 + // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 + // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 + // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 + 16 + import { rfcdef } from './rfcdef.js'; 17 + 18 + function translate(def, tn, stats) { 19 + if (def?.type == 'tag' && !def.explicit) 20 + // def.type = def.content[0].type; 21 + def = def.content[0].type; 22 + if (def?.definedBy) 23 + try { 24 + // hope current OIDs contain the type name (will need to parse from RFC itself) 25 + def = Defs.searchType(firstUpper(stats.defs[def.definedBy][1])); 26 + } catch (ignore) { /*ignore*/ } 27 + while (def?.type == 'defined' || def?.type?.type == 'defined') { 28 + const name = def?.type?.type ? def.type.name : def.name; 29 + def = Object.assign({}, def); 30 + def.type = Defs.searchType(name).type; 31 + } 32 + if (def?.name == 'CHOICE' || def?.type?.name == 'CHOICE') { 33 + for (let c of def.content ?? def.type.content) { 34 + if (tn != c.type.name && tn != c.name) 35 + c = translate(c); 36 + if (tn == c.type.name || tn == c.name) { 37 + def = Object.assign({}, def); 38 + if (c.id) // show the CHOICE id, but add it to existing one if present 39 + def.id = def.id ? def.id + ' ' + c.id : c.id; 40 + def.type = c.type.name ? c.type : c; 41 + break; 42 + } 43 + } 44 + } 45 + const id = def?.id; 46 + if (id) 47 + def = Object.assign({}, def, { id }); 48 + return def ?? { type: {} }; 49 + } 50 + 51 + function firstUpper(s) { 52 + return s[0].toUpperCase() + s.slice(1); 53 + } 54 + 55 + export class Defs { 56 + 57 + static moduleAndType(mod, name) { 58 + return Object.assign({ module: { oid: mod.oid, name: mod.name, source: mod.source } }, mod.types[name]); 59 + } 60 + 61 + static searchType(name) { 62 + for (const mod of Object.values(rfcdef)) 63 + if (name in mod.types) { 64 + // console.log(name + ' found in ' + r.name); 65 + // return r.types[name]; 66 + return Defs.moduleAndType(mod, name); 67 + } 68 + throw new Error('Type not found: ' + name); 69 + } 70 + 71 + static match(value, def, stats = { total: 0, recognized: 0, defs: {} }) { 72 + value.def = {}; 73 + let tn = value.typeName().replace(/_/g, ' '); 74 + def = translate(def, tn, stats); 75 + ++stats.total; 76 + if (def?.type) { 77 + // if (def.id || def.name) ++stats.recognized; 78 + if (tn == def.type.name || tn == def.name || def.name == 'ANY') 79 + ++stats.recognized; 80 + else if (def.name) 81 + def = Object.assign({ mismatch: 1 }, def); 82 + value.def = def; 83 + } 84 + if (value.sub !== null) { 85 + if (def?.type?.type) 86 + def = def.type; 87 + let j = def?.content ? 0 : -1; 88 + for (const subval of value.sub) { 89 + let type; 90 + if (j >= 0) { 91 + if (def.typeOf) 92 + type = def.content[0]; 93 + else { 94 + let tn = subval.typeName().replace(/_/g, ' '); 95 + for (;;) { 96 + type = def.content[j++]; 97 + if (!type || typeof type != 'object') break; 98 + if (type?.type?.type) 99 + // type = type.type; 100 + type = Object.assign({}, type.type, {id: type.id}); 101 + if (type.type == 'defined') { 102 + let t2 = translate(type, tn); 103 + if (t2.type.name == tn) break; // exact match 104 + if (t2.type.name == 'ANY') break; // good enough 105 + } 106 + if (type.name == tn) break; // exact match 107 + if (type.name == 'ANY') break; // good enough 108 + if (!('optional' in type || 'default' in type)) break; 109 + } 110 + if (type?.type == 'builtin' || type?.type == 'defined') { 111 + let v = subval.content(); 112 + if (typeof v == 'string') 113 + v = v.split(/\n/); 114 + stats.defs[type.id] = v; 115 + } else if (type?.definedBy && stats.defs?.[type.definedBy]?.[1]) { // hope current OIDs contain the type name (will need to parse from RFC itself) 116 + try { 117 + type = Defs.searchType(firstUpper(stats.defs[type.definedBy][1])); 118 + } catch (ignore) { /*ignore*/ } 119 + } 120 + } 121 + } 122 + Defs.match(subval, type, stats); 123 + } 124 + } 125 + return stats; 126 + } 127 + 128 + } 129 + 130 + Defs.RFC = rfcdef; 131 + 132 + Defs.commonTypes = [ 133 + [ 'X.509 certificate', '1.3.6.1.5.5.7.0.18', 'Certificate' ], 134 + [ 'X.509 public key info', '1.3.6.1.5.5.7.0.18', 'SubjectPublicKeyInfo' ], 135 + [ 'X.509 certificate revocation list', '1.3.6.1.5.5.7.0.18', 'CertificateList' ], 136 + [ 'CMS / PKCS#7 envelope', '1.2.840.113549.1.9.16.0.14', 'ContentInfo' ], 137 + [ 'PKCS#1 RSA private key', '1.2.840.113549.1.1.0.1', 'RSAPrivateKey' ], 138 + [ 'PKCS#8 encrypted private key', '1.2.840.113549.1.8.1.1', 'EncryptedPrivateKeyInfo' ], 139 + [ 'PKCS#8 private key', '1.2.840.113549.1.8.1.1', 'PrivateKeyInfo' ], 140 + [ 'PKCS#10 certification request', '1.2.840.113549.1.10.1.1', 'CertificationRequest' ], 141 + [ 'CMP PKI Message', '1.3.6.1.5.5.7.0.16', 'PKIMessage' ], 142 + [ 'LDAP Message', '1.3.6.1.1.18', 'LDAPMessage' ], 143 + [ 'Time Stamp Request', '1.3.6.1.5.5.7.0.13', 'TimeStampReq' ], 144 + ].map(arr => ({ description: arr[0], ...Defs.moduleAndType(rfcdef[arr[1]], arr[2]) }));
+204 -176
dom.js
··· 1 1 // ASN.1 JavaScript decoder 2 - // Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 2 + // Copyright (c) 2008 Lapo Luchini <lapo@lapo.it> 3 3 4 4 // Permission to use, copy, modify, and/or distribute this software for any 5 5 // purpose with or without fee is hereby granted, provided that the above 6 6 // copyright notice and this permission notice appear in all copies. 7 - // 7 + // 8 8 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 9 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 10 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ··· 13 13 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 14 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 15 16 - (typeof define != 'undefined' ? define : function (factory) { 'use strict'; 17 - if (typeof module == 'object') factory(function (name) { return require(name); }); 18 - else factory(function (name) { return window[name.substring(2)]; }); 19 - })(function (require) { 20 - "use strict"; 16 + import { ASN1 } from './asn1.js'; 17 + import { oids } from './oids.js'; 18 + import { bindContextMenu } from './context.js'; 21 19 22 - var ASN1 = require('./asn1'), 23 - oids = require('./oids'), 20 + const 24 21 lineLength = 80, 25 22 contentLength = 8 * lineLength, 26 23 DOM = { 27 - ellipsis: "\u2026", 28 - tag: function (tagName, className) { 29 - var t = document.createElement(tagName); 30 - t.className = className; 24 + ellipsis: '\u2026', 25 + tag: function (tagName, className, text) { 26 + let t = document.createElement(tagName); 27 + if (className) t.className = className; 28 + if (text) t.innerText = text; 31 29 return t; 32 30 }, 33 31 text: function (str) { 34 32 return document.createTextNode(str); 35 33 }, 36 34 space: function () { 37 - var t = document.createElement('span'); 38 - t.className = 'spaces'; 39 - t.innerHTML = ' '; 40 - return t; 35 + return DOM.tag('span', 'spaces', ' '); 41 36 }, 42 37 breakLines: function (str, length) { 43 - var lines = str.split(/\r?\n/), 38 + let lines = str.split(/\r?\n/), 44 39 o = ''; 45 - for (var i = 0; i < lines.length; ++i) { 46 - var line = lines[i]; 47 - if (i > 0) o += "\n"; 40 + for (let i = 0; i < lines.length; ++i) { 41 + let line = lines[i]; 42 + if (i > 0) o += '\n'; 48 43 while (line.length > length) { 49 44 o += line.substring(0, length); 50 - o += "\n"; 45 + o += '\n'; 51 46 line = line.substring(length); 52 47 } 53 48 o += line; 54 49 } 55 50 return o; 56 - } 51 + }, 57 52 }; 58 53 59 - ASN1.prototype.toDOM = function (spaces) { 60 - spaces = spaces || ''; 61 - var isOID = (typeof oids === 'object') && (this.tag.isUniversal() && (this.tag.tagNumber == 0x06) || (this.tag.tagNumber == 0x0D)); 62 - var node = DOM.tag("div", "node"); 63 - node.asn1 = this; 64 - var head = DOM.tag("div", "head"); 65 - head.innerHTML = "<span class='spaces'>" + spaces + "</span>" + this.typeName().replace(/_/g, " "); 66 - var content = this.content(contentLength); 67 - if (content !== null) { 68 - var preview = DOM.tag("span", "preview"), 69 - shortContent; 70 - if (isOID) 71 - content = content.split('\n', 1)[0]; 72 - shortContent = (content.length > lineLength) ? content.substring(0, lineLength) + DOM.ellipsis : content; 73 - preview.appendChild(DOM.space()); 74 - preview.appendChild(DOM.text(shortContent)); 75 - if (isOID) { 76 - var oid = oids[content]; 77 - if (oid) { 78 - if (oid.d) { 79 - preview.appendChild(DOM.space()); 80 - var oidd = DOM.tag("span", "oid description"); 81 - oidd.appendChild(DOM.text(oid.d)); 82 - preview.appendChild(oidd); 83 - } 84 - if (oid.c) { 85 - preview.appendChild(DOM.space()); 86 - var oidc = DOM.tag("span", "oid comment"); 87 - oidc.appendChild(DOM.text("(" + oid.c + ")")); 88 - preview.appendChild(oidc); 89 - } 54 + export class ASN1DOM extends ASN1 { 55 + 56 + toDOM(spaces) { 57 + spaces = spaces || ''; 58 + let isOID = (typeof oids === 'object') && (this.tag.isUniversal() && (this.tag.tagNumber == 0x06) || (this.tag.tagNumber == 0x0D)); 59 + let node = DOM.tag('li'); 60 + node.asn1 = this; 61 + let head = DOM.tag('span', 'head'); 62 + const typeName = this.typeName().replace(/_/g, ' '); 63 + if (this.def) { 64 + if (this.def.id) { 65 + head.appendChild(DOM.tag('span', 'name id', this.def.id)); 66 + head.appendChild(DOM.space()); 67 + } 68 + if (this.def.name && this.def.name != typeName) { 69 + head.appendChild(DOM.tag('span', 'name type', this.def.name)); 70 + head.appendChild(DOM.space()); 71 + } 72 + if (this.def.mismatch) { 73 + head.appendChild(DOM.tag('span', 'name type', '[?]')); 74 + head.appendChild(DOM.space()); 90 75 } 91 76 } 92 - head.appendChild(preview); 93 - content = DOM.breakLines(content, lineLength); 94 - content = content.replace(/</g, "&lt;"); 95 - content = content.replace(/\n/g, "<br>"); 96 - } 97 - node.appendChild(head); 98 - this.node = node; 99 - this.head = head; 100 - var value = DOM.tag("div", "value"); 101 - var s = "Offset: " + this.stream.pos + "<br>"; 102 - s += "Length: " + this.header + "+"; 103 - if (this.length >= 0) 104 - s += this.length; 105 - else 106 - s += (-this.length) + " (undefined)"; 107 - if (this.tag.tagConstructed) 108 - s += "<br>(constructed)"; 109 - else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 110 - s += "<br>(encapsulates)"; 111 - //TODO if (this.tag.isUniversal() && this.tag.tagNumber == 0x03) s += "Unused bits: " 112 - if (content !== null) { 113 - s += "<br>Value:<br><b>" + content + "</b>"; 114 - if (isOID && oid) { 115 - if (oid.d) s += "<br>" + oid.d; 116 - if (oid.c) s += "<br>" + oid.c; 117 - if (oid.w) s += "<br>(warning!)"; 77 + head.appendChild(DOM.text(typeName)); 78 + let content; 79 + try { 80 + content = this.content(contentLength); 81 + } catch (e) { 82 + content = 'Cannot decode: ' + e; 118 83 } 119 - } 120 - value.innerHTML = s; 121 - node.appendChild(value); 122 - var sub = DOM.tag("div", "sub"); 123 - if (this.sub !== null) { 124 - spaces += '\xA0 '; 125 - for (var i = 0, max = this.sub.length; i < max; ++i) 126 - sub.appendChild(this.sub[i].toDOM(spaces)); 127 - } 128 - node.appendChild(sub); 129 - head.onclick = function () { 130 - node.className = (node.className == "node collapsed") ? "node" : "node collapsed"; 131 - }; 132 - return node; 133 - }; 134 - ASN1.prototype.fakeHover = function (current) { 135 - this.node.className += " hover"; 136 - if (current) 137 - this.head.className += " hover"; 138 - }; 139 - ASN1.prototype.fakeOut = function (current) { 140 - var re = / ?hover/; 141 - this.node.className = this.node.className.replace(re, ""); 142 - if (current) 143 - this.head.className = this.head.className.replace(re, ""); 144 - }; 145 - ASN1.prototype.toHexDOM_sub = function (node, className, stream, start, end) { 146 - if (start >= end) 147 - return; 148 - var sub = DOM.tag("span", className); 149 - sub.appendChild(DOM.text( 150 - stream.hexDump(start, end))); 151 - node.appendChild(sub); 152 - }; 153 - ASN1.prototype.toHexDOM = function (root) { 154 - var node = DOM.tag("span", "hex"); 155 - if (root === undefined) root = node; 156 - this.head.hexNode = node; 157 - this.head.onmouseover = function () { this.hexNode.className = "hexCurrent"; }; 158 - this.head.onmouseout = function () { this.hexNode.className = "hex"; }; 159 - node.asn1 = this; 160 - node.onmouseover = function () { 161 - var current = !root.selected; 162 - if (current) { 163 - root.selected = this.asn1; 164 - this.className = "hexCurrent"; 84 + let oid; 85 + if (content !== null) { 86 + let preview = DOM.tag('span', 'preview'), 87 + shortContent; 88 + if (isOID) 89 + content = content.split('\n', 1)[0]; 90 + shortContent = (content.length > lineLength) ? content.substring(0, lineLength) + DOM.ellipsis : content; 91 + preview.appendChild(DOM.space()); 92 + preview.appendChild(DOM.text(shortContent)); 93 + if (isOID) { 94 + oid = oids[content]; 95 + if (oid) { 96 + if (oid.d) { 97 + preview.appendChild(DOM.space()); 98 + let oidd = DOM.tag('span', 'oid description', oid.d); 99 + preview.appendChild(oidd); 100 + } 101 + if (oid.c) { 102 + preview.appendChild(DOM.space()); 103 + let oidc = DOM.tag('span', 'oid comment', '(' + oid.c + ')'); 104 + preview.appendChild(oidc); 105 + } 106 + } 107 + } 108 + head.appendChild(preview); 109 + content = DOM.breakLines(content, lineLength); 110 + content = content.replace(/</g, '&lt;'); 111 + content = content.replace(/\n/g, '<br>'); 165 112 } 166 - this.asn1.fakeHover(current); 167 - }; 168 - node.onmouseout = function () { 169 - var current = (root.selected == this.asn1); 170 - this.asn1.fakeOut(current); 171 - if (current) { 172 - root.selected = null; 173 - this.className = "hex"; 113 + // add the li and details section for this node 114 + let contentNode; 115 + let childNode; 116 + if (this.sub !== null) { 117 + let details = DOM.tag('details'); 118 + details.setAttribute('open', ''); 119 + node.appendChild(details); 120 + let summary = DOM.tag('summary', 'node'); 121 + details.appendChild(summary); 122 + summary.appendChild(head); 123 + contentNode = summary; 124 + childNode = details; 125 + } else { 126 + contentNode = node; 127 + contentNode.classList.add('node'); 128 + contentNode.appendChild(head); 129 + } 130 + this.node = contentNode; 131 + this.head = head; 132 + let value = DOM.tag('div', 'value'); 133 + let s = 'Offset: ' + this.stream.pos + '<br>'; 134 + s += 'Length: ' + this.header + '+'; 135 + if (this.length >= 0) 136 + s += this.length; 137 + else 138 + s += (-this.length) + ' (undefined)'; 139 + if (this.tag.tagConstructed) 140 + s += '<br>(constructed)'; 141 + else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 142 + s += '<br>(encapsulates)'; 143 + //TODO if (this.tag.isUniversal() && this.tag.tagNumber == 0x03) s += "Unused bits: " 144 + if (content !== null) { 145 + s += '<br>Value:<br><b>' + content + '</b>'; 146 + if (isOID && oid) { 147 + if (oid.d) s += '<br>' + oid.d; 148 + if (oid.c) s += '<br>' + oid.c; 149 + if (oid.w) s += '<br>(warning!)'; 150 + } 174 151 } 175 - }; 176 - if (root == node) { 177 - var lineStart = this.posStart() & 0xF; 178 - if (lineStart != 0) { 179 - var skip = DOM.tag("span", "skip"); 180 - var skipStr = ''; 181 - for (var j = lineStart; j > 0; --j) 182 - skipStr += ' '; 183 - if (lineStart >= 8) 184 - skipStr += ' '; 185 - skip.innerText = skipStr; 186 - node.appendChild(skip); 152 + value.innerHTML = s; 153 + contentNode.appendChild(value); 154 + if (this.sub !== null) { 155 + let sub = DOM.tag('ul'); 156 + childNode.appendChild(sub); 157 + spaces += '\xA0 '; 158 + for (let i = 0, max = this.sub.length; i < max; ++i) 159 + sub.appendChild(this.sub[i].toDOM(spaces)); 187 160 } 161 + bindContextMenu(node); 162 + return node; 188 163 } 189 - this.toHexDOM_sub(node, "tag", this.stream, this.posStart(), this.posLen()); 190 - this.toHexDOM_sub(node, (this.length >= 0) ? "dlen" : "ulen", this.stream, this.posLen(), this.posContent()); 191 - if (this.sub === null) { 192 - var start = this.posContent(); 193 - var end = this.posEnd(); 194 - if (end - start < 10 * 16) 195 - node.appendChild(DOM.text( 196 - this.stream.hexDump(start, end))); 197 - else { 198 - var end1 = start + 5 * 16 - (start & 0xF); 199 - var start2 = end - 16 - (end & 0xF); 200 - node.appendChild(DOM.text( 201 - this.stream.hexDump(start, end1))); 202 - var sub = DOM.tag("span", "skip"); 203 - sub.appendChild(DOM.text("\u2026 skipping " + (start2 - end1) + " bytes \u2026\n")); 204 - node.appendChild(sub); 205 - node.appendChild(DOM.text( 206 - this.stream.hexDump(start2, end))); 164 + fakeHover(current) { 165 + this.node.classList.add('hover'); 166 + if (current) 167 + this.head.classList.add('hover'); 168 + } 169 + fakeOut(current) { 170 + this.node.classList.remove('hover'); 171 + if (current) 172 + this.head.classList.remove('hover'); 173 + } 174 + toHexDOM_sub(node, className, stream, start, end) { 175 + if (start >= end) 176 + return; 177 + let sub = DOM.tag('span', className, stream.hexDump(start, end)); 178 + node.appendChild(sub); 179 + } 180 + toHexDOM(root, trim=true) { 181 + let node = DOM.tag('span', 'hex'); 182 + if (root === undefined) root = node; 183 + this.head.hexNode = node; 184 + this.head.onmouseover = function () { this.hexNode.className = 'hexCurrent'; }; 185 + this.head.onmouseout = function () { this.hexNode.className = 'hex'; }; 186 + node.asn1 = this; 187 + node.onmouseover = function (event) { 188 + let current = !root.selected; 189 + if (current) { 190 + root.selected = this.asn1; 191 + this.className = 'hexCurrent'; 192 + } 193 + this.asn1.fakeHover(current); 194 + event.stopPropagation(); 195 + }; 196 + node.onmouseout = function () { 197 + let current = (root.selected == this.asn1); 198 + this.asn1.fakeOut(current); 199 + if (current) { 200 + root.selected = null; 201 + this.className = 'hex'; 202 + } 203 + }; 204 + bindContextMenu(node); 205 + if (root == node) { 206 + let lineStart = this.posStart() & 0xF; 207 + if (lineStart != 0) { 208 + let skip = DOM.tag('span', 'skip'); 209 + let skipStr = ''; 210 + for (let j = lineStart; j > 0; --j) 211 + skipStr += ' '; 212 + if (lineStart >= 8) 213 + skipStr += ' '; 214 + skip.innerText = skipStr; 215 + node.appendChild(skip); 216 + } 207 217 } 208 - } else if (this.sub.length > 0) { 209 - var first = this.sub[0]; 210 - var last = this.sub[this.sub.length - 1]; 211 - this.toHexDOM_sub(node, "intro", this.stream, this.posContent(), first.posStart()); 212 - for (var i = 0, max = this.sub.length; i < max; ++i) 213 - node.appendChild(this.sub[i].toHexDOM(root)); 214 - this.toHexDOM_sub(node, "outro", this.stream, last.posEnd(), this.posEnd()); 215 - } else 216 - this.toHexDOM_sub(node, "outro", this.stream, this.posContent(), this.posEnd()); 217 - return node; 218 - }; 218 + this.toHexDOM_sub(node, 'tag', this.stream, this.posStart(), this.posLen()); 219 + this.toHexDOM_sub(node, (this.length >= 0) ? 'dlen' : 'ulen', this.stream, this.posLen(), this.posContent()); 220 + if (this.sub === null) { 221 + let start = this.posContent(); 222 + let end = this.posEnd(); 223 + if (!trim || end - start < 10 * 16) 224 + node.appendChild(DOM.text( 225 + this.stream.hexDump(start, end))); 226 + else { 227 + let end1 = start + 5 * 16 - (start & 0xF); 228 + let start2 = end - 16 - (end & 0xF); 229 + node.appendChild(DOM.text(this.stream.hexDump(start, end1))); 230 + node.appendChild(DOM.tag('span', 'skip', '\u2026 skipping ' + (start2 - end1) + ' bytes \u2026\n')); 231 + node.appendChild(DOM.text(this.stream.hexDump(start2, end))); 232 + } 233 + } else if (this.sub.length > 0) { 234 + let first = this.sub[0]; 235 + let last = this.sub[this.sub.length - 1]; 236 + this.toHexDOM_sub(node, 'intro', this.stream, this.posContent(), first.posStart()); 237 + for (let i = 0, max = this.sub.length; i < max; ++i) 238 + node.appendChild(this.sub[i].toHexDOM(root, trim)); 239 + this.toHexDOM_sub(node, 'outro', this.stream, last.posEnd(), this.posEnd()); 240 + } else 241 + this.toHexDOM_sub(node, 'outro', this.stream, this.posContent(), this.posEnd()); 242 + return node; 243 + } 244 + static decode(stream, offset) { 245 + return ASN1.decode(stream, offset, ASN1DOM); 246 + } 219 247 220 - }); 248 + }
+54 -91
dumpASN1.js
··· 1 1 #!/usr/bin/env node 2 - 'use strict'; 3 2 4 - const 5 - fs = require('fs'), 6 - Base64 = require('./base64.js'), 7 - ASN1 = require('./asn1.js'), 8 - rfc = require('./rfcasn1.json'), 9 - colYellow = "\x1b[33m", 10 - colBlue = "\x1b[34m", 11 - colReset = "\x1b[0m"; 3 + // usage: 4 + // ./dumpASN1.js filename 5 + // ./dumpASN1.js data:base64,MDMCAQFjLgQACgEACgEAAgEAAgEAAQEAoA+jDQQFTnRWZXIEBAEAAAAwCgQITmV0bG9nb24=== 12 6 13 - function searchType(name) { 14 - for (const r of Object.values(rfc)) 15 - if (name in r.types) { 16 - // console.log(name + ' found in ' + r.name); 17 - return r.types[name]; 18 - } 19 - throw 'Type not found: ' + name; 20 - } 7 + import * as fs from 'node:fs'; 8 + import { Base64 } from './base64.js'; 9 + import { ASN1 } from './asn1.js'; 10 + import { Defs } from './defs.js'; 21 11 22 - function translate(def, tn) { 23 - const id = def?.id; 24 - if (def?.type == 'tag' && !def.explicit) 25 - // def.type = def.content[0].type; 26 - def = def.content[0].type; 27 - while (def?.type == 'defined' || def?.type?.type == 'defined') { 28 - const name = def?.type?.type ? def.type.name : def.name; 29 - def = Object.assign({}, def); 30 - def.type = searchType(name).type; 31 - } 32 - if (def?.type?.name == 'CHOICE') { 33 - for (let c of def.type.content) { 34 - c = translate(c); 35 - if (tn == c.type.name || tn == c.name) { 36 - def = Object.assign({}, def); 37 - def.type = c.type.name ? c.type : c; 38 - break; 39 - } 40 - } 41 - } 42 - if (id) 43 - def = Object.assign({}, def, { id }); 44 - return def ?? { type: {} }; 45 - } 12 + const 13 + colYellow = '\x1b[33m', 14 + colBlue = '\x1b[34m', 15 + colReset = '\x1b[0m', 16 + reDataURI = /^data:(?:[a-z-]+[/][a-z.+-]+;)?base64,([A-Za-z0-9+/=\s]+)$/; 46 17 47 - function firstUpper(s) { 48 - return s[0].toUpperCase() + s.slice(1); 49 - } 50 - 51 - function print(value, def, stats, indent) { 18 + function print(value, indent) { 52 19 if (indent === undefined) indent = ''; 53 - stats ??= {}; 54 - stats.total ??= 0; 55 - stats.recognized ??= 0; 56 - stats.defs ??= {}; 57 - let tn = value.typeName(); 58 - def = translate(def, tn); 59 - tn = tn.replaceAll('_', ' '); 60 - if (stats) ++stats.total; 20 + const def = value.def; 61 21 let name = ''; 62 22 if (def?.type) { 63 23 if (def.id) name += colBlue + def.id + colReset; 64 24 if (typeof def.type == 'object' && def.name) name = (name ? name + ' ' : '') + def.name; 65 - if (stats && name != '') ++stats.recognized; 25 + if (def.mismatch) name = (name ? name + ' ' : '') + '[?]'; 66 26 if (name) name += ' '; 67 27 } 68 - let s = indent + name + colYellow + value.typeName() + colReset + " @" + value.stream.pos; 28 + let s = indent + name + colYellow + value.typeName() + colReset + ' @' + value.stream.pos; 69 29 if (value.length >= 0) 70 - s += "+"; 30 + s += '+'; 71 31 s += value.length; 72 32 if (value.tag.tagConstructed) 73 - s += " (constructed)"; 33 + s += ' (constructed)'; 74 34 else if ((value.tag.isUniversal() && ((value.tag.tagNumber == 0x03) || (value.tag.tagNumber == 0x04))) && (value.sub !== null)) 75 - s += " (encapsulates)"; 35 + s += ' (encapsulates)'; 76 36 let content = value.content(); 77 37 if (content) 78 - s += ": " + content.replace(/\n/g, '|'); 79 - s += "\n"; 38 + s += ': ' + content.replace(/\n/g, '|'); 39 + s += '\n'; 80 40 if (value.sub !== null) { 81 41 indent += ' '; 82 - if (def?.type?.type) 83 - def = def.type; 84 - let j = def?.content ? 0 : -1; 85 - for (const subval of value.sub) { 86 - let type; 87 - if (j >= 0) { 88 - if (def.typeOf) 89 - type = def.content[0]; 90 - else { 91 - let tn = subval.typeName(); //.replaceAll('_', ' '); 92 - do { 93 - type = def.content[j++]; 94 - // type = translate(type, tn); 95 - if (type?.type?.type) 96 - type = type.type; 97 - } while (type && ('optional' in type || 'default' in type) && type.name != 'ANY' && type.name != tn); 98 - if (type?.type == 'defined') 99 - stats.defs[type.id] = subval.content().split(/\n/); 100 - else if (type?.definedBy && stats.defs?.[type.definedBy]?.[1]) // hope current OIDs contain the type name (will need to parse from RFC itself) 101 - type = searchType(firstUpper(stats.defs[type.definedBy][1])); 102 - } 103 - } 104 - s += print(subval, type, stats, indent); 105 - } 42 + for (const subval of value.sub) 43 + s += print(subval, indent); 106 44 } 107 45 return s; 108 46 } 109 47 110 - let content = fs.readFileSync(process.argv[3]); 48 + const filename = process.argv[2]; 49 + const match = reDataURI.exec(filename); 50 + let content = match 51 + ? Buffer.from(match[1]) 52 + : fs.readFileSync(filename); 111 53 try { // try PEM first 112 54 content = Base64.unarmor(content); 113 - } catch (e) { // try DER/BER then 55 + } catch (ignore) { // try DER/BER then 114 56 } 115 57 let result = ASN1.decode(content); 116 58 content = null; 117 - let stats = {}; 118 - console.log(print(result, searchType(process.argv[2]), stats)); 119 - console.log('Stats:', (stats.recognized * 100 / stats.total).toFixed(2) + '%'); 120 - // console.log('Defs:', stats.defs); 59 + const t0 = performance.now(); 60 + if (process.argv.length == 5) { 61 + Defs.match(result, Defs.moduleAndType(Defs.RFC[process.argv[3]], process.argv[4])); 62 + } else { 63 + const types = Defs.commonTypes 64 + .map(type => { 65 + const stats = Defs.match(result, type); 66 + return { type, match: stats.recognized / stats.total }; 67 + }) 68 + .sort((a, b) => b.match - a.match); 69 + const t1 = performance.now(); 70 + console.log('Parsed in ' + (t1 - t0).toFixed(2) + ' ms; possible types:'); 71 + for (const t of types) 72 + console.log((t.match * 100).toFixed(2).padStart(6) + '% ' + t.type.description); 73 + Defs.match(result, types[0].type); 74 + // const stats = Defs.match(result, types[0].type); 75 + // console.log('Stats:', stats); 76 + console.log('Parsed as:', result.def); 77 + // const type = searchType(process.argv[2]); 78 + // const stats = applyDef(result, type); 79 + } 80 + console.log(print(result)); 81 + // console.log('Stats:', (stats.recognized * 100 / stats.total).toFixed(2) + '%'); 82 + // // print(result, searchType(process.argv[2]), stats); 83 + // // console.log('Defs:', stats.defs);
+63
eslint.config.js
··· 1 + import globals from 'globals'; 2 + import js from '@eslint/js'; 3 + 4 + export default [ 5 + js.configs.recommended, 6 + { 7 + languageOptions: { 8 + globals: { 9 + ...globals.browser, 10 + ...globals.node, 11 + Uint8Array: 'readonly', 12 + }, 13 + ecmaVersion: 2020, 14 + }, 15 + rules: { 16 + indent: ['error', 4], 17 + 'no-trailing-spaces': ['error'], 18 + 'linebreak-style': ['error', 'unix'], 19 + 'eol-last': ['error', 'always'], 20 + semi: ['warn', 'always'], 21 + quotes: [ 'error', 'single', { 22 + avoidEscape: true, 23 + }], 24 + 'no-var': ['warn'], 25 + 'comma-dangle': ['error', 'always-multiline'], 26 + 'no-unused-vars': ['error', { 27 + caughtErrorsIgnorePattern: 'ignore', 28 + }], 29 + }, 30 + }, 31 + { 32 + files: ['oids.js'], 33 + rules: { 34 + indent: 'off', 35 + quotes: ['warn', 'double'], 36 + }, 37 + }, 38 + { 39 + files: ['tags.js', 'rfcdef.js'], 40 + rules: { 41 + indent: [ 42 + 'error', 43 + 2, 44 + { 45 + ignoredNodes: [ 46 + "Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement > ExpressionStatement[directive='use strict']:first-child", 47 + ], 48 + }, 49 + ], 50 + 'comma-dangle': 'off', 51 + quotes: ['warn', 'double'], 52 + }, 53 + }, 54 + { 55 + files: ['test.js', 'parseRFC.js', 'dumpASN1.js', 'testDefs.js', 'eslint.config.js'], 56 + languageOptions: { 57 + ecmaVersion: 'latest', 58 + }, 59 + rules: { 60 + strict: ['error', 'global'], 61 + }, 62 + }, 63 + ];
+21
examples/cmpv2.b64
··· 1 + CMPv2 example as found on Wireshark page. 2 + 3 + Original link: 4 + https://wiki.wireshark.org/CMP 5 + 6 + Attachment found moved here: 7 + https://wiki.wireshark.org/uploads/__moin_import__/attachments/SampleCaptures/cmp_IR_sequence_OpenSSL-Cryptlib.pcap 8 + 9 + begin-base64 644 cmpv2.der 10 + MIICPjCB1QIBAqQCMACkRjBEMQswCQYDVQQGEwJERTEMMAoGA1UEChMDTlNOMREwDwYDVQQLEwhQ 11 + RyBSREUgMzEUMBIGA1UEAxMLTWFydGluJ3MgQ0GgERgPMjAxMDA3MDUwNzM1MzhaoTwwOgYJKoZI 12 + hvZ9B0INMC0EEJ5EpSD3zKjvmzHEK5+aoAAwCQYFKw4DAhoFAAICAfQwCgYIKwYBBQUIAQKiCwQJ 13 + b/KGO0ILNJqApBIEEJGOKFG/9crkwU+z/I5ICa6lEgQQnnbd7EB2QjRCwOHt9QWdBKCCAUkwggFF 14 + MIIBQTCBqAIBADCBoqaBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqVTOtjEEYELkomc3sMOy 15 + Too5a9YeC91IMn52cVx7doY4AeO6J9e8p+CtWNbzVF8aRgHUhh31m+/X3MkQOaY5i8nF33uxAxDL 16 + MDXttHjsqrF/tsgYuuHSs/Znz4PA1kLkdhKE9DLiGlCFaJH5QY5Hzl6bcS3ApuWCny0RRzIA1/cC 17 + AwEAAaGBkzANBgkqhkiG9w0BAQUFAAOBgQArOldjg75fDx7BaFp0oAknLDREvB1KyE+BV96R+lB+ 18 + tRRhwv3dyc/GTvRw4GtaeDjWCjNPaDCl9ZvvVljaR2aMZvhaQV+DUmCMjFSP3DPiGuszBA6R2azX 19 + NKtnpJ3SGx2vk0+Iv05tXLhdnqQJZs5a3S3R30kn4Vw+4WQm3kb0fKAXAxUA9K8u+7hv5Rg6GDn6 20 + aoPxbUo6fpU= 21 + ====
+9
examples/cms-password.p7m
··· 1 + This is a PKCS#7/CMS encrypted with passwod. 2 + $ echo content | openssl cms -encrypt -pwri_password test -aes256 -outform pem -out examples/cms-password.p7m 3 + -----BEGIN CMS----- 4 + MIHYBgkqhkiG9w0BBwOggcowgccCAQMxgYOjgYACAQCgGwYJKoZIhvcNAQUMMA4E 5 + CED/DSxXMtH6AgIIADAsBgsqhkiG9w0BCRADCTAdBglghkgBZQMEASoEEDIQbJMC 6 + Sfb3LpwHduj/meQEMKwrwq5M4V0stztm6OUTAsFY2zKDY20SApwSEeEcAh9TM42E 7 + 1palnHeqHTBpC8pIpjA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBByt+scPrdM 8 + giR7WUOJyB3hgBDcD3UDMtZSep8X/3yy1/Yq 9 + -----END CMS-----
+12
examples/crl-rfc5280.b64
··· 1 + CRL example from RFC5280 as found here: 2 + https://csrc.nist.gov/projects/pki-testing/sample-certificates-and-crls 3 + 4 + begin-base64 644 crl-rfc5280.der 5 + MIIBYDCBygIBATANBgkqhkiG9w0BAQUFADBDMRMwEQYKCZImiZPyLGQBGRYDY29tMRcwFQYKCZIm 6 + iZPyLGQBGRYHZXhhbXBsZTETMBEGA1UEAxMKRXhhbXBsZSBDQRcNMDUwMjA1MTIwMDAwWhcNMDUw 7 + MjA2MTIwMDAwWjAiMCACARIXDTA0MTExOTE1NTcwM1owDDAKBgNVHRUEAwoBAaAvMC0wHwYDVR0j 8 + BBgwFoAUCGivhTPIOUp6+IKTjnBqSiCELDIwCgYDVR0UBAMCAQwwDQYJKoZIhvcNAQEFBQADgYEA 9 + ItwYffcIzsx10NBqm60Q9HYjtIFutW2+DvsVFGzIF20f7pAXom9g5L2qjFXejoRvkvifEBInr0rU 10 + L4XiNkR9qqNMJTgV/wD9Pn7uPSYS69jnK2LiK8NGgO94gtEVxtCccmrLznrtZ5mLbnCBfUNCdMGm 11 + r8FVF6IzTNYGmCuk/C4= 12 + ====
+45
examples/crl-rfc5280.b64.dump
··· 1 + CertificateList SEQUENCE @0+352 (constructed): (3 elem) 2 + tbsCertList TBSCertList SEQUENCE @4+202 (constructed): (7 elem) 3 + version Version INTEGER @7+1: 1 4 + signature AlgorithmIdentifier SEQUENCE @10+13 (constructed): (2 elem) 5 + algorithm OBJECT_IDENTIFIER @12+9: 1.2.840.113549.1.1.5|sha1WithRSAEncryption|PKCS #1 6 + parameters ANY NULL @23+0 7 + issuer rdnSequence Name SEQUENCE @25+67 (constructed): (3 elem) 8 + RelativeDistinguishedName SET @27+19 (constructed): (1 elem) 9 + AttributeTypeAndValue SEQUENCE @29+17 (constructed): (2 elem) 10 + type AttributeType OBJECT_IDENTIFIER @31+10: 0.9.2342.19200300.100.1.25|domainComponent|Men are from Mars, this OID is from Pluto 11 + value AttributeValue [?] IA5String @43+3: com 12 + RelativeDistinguishedName SET @48+23 (constructed): (1 elem) 13 + AttributeTypeAndValue SEQUENCE @50+21 (constructed): (2 elem) 14 + type AttributeType OBJECT_IDENTIFIER @52+10: 0.9.2342.19200300.100.1.25|domainComponent|Men are from Mars, this OID is from Pluto 15 + value AttributeValue [?] IA5String @64+7: example 16 + RelativeDistinguishedName SET @73+19 (constructed): (1 elem) 17 + AttributeTypeAndValue SEQUENCE @75+17 (constructed): (2 elem) 18 + type AttributeType OBJECT_IDENTIFIER @77+3: 2.5.4.3|commonName|X.520 DN component 19 + value AttributeValue [?] PrintableString @82+10: Example CA 20 + thisUpdate utcTime Time UTCTime @94+13: 2005-02-05 12:00:00 UTC 21 + nextUpdate utcTime Time UTCTime @109+13: 2005-02-06 12:00:00 UTC 22 + revokedCertificates SEQUENCE @124+34 (constructed): (1 elem) 23 + SEQUENCE @126+32 (constructed): (3 elem) 24 + userCertificate CertificateSerialNumber INTEGER @128+1: 18 25 + revocationDate utcTime Time UTCTime @131+13: 2004-11-19 15:57:03 UTC 26 + crlEntryExtensions Extensions SEQUENCE @146+12 (constructed): (1 elem) 27 + Extension SEQUENCE @148+10 (constructed): (2 elem) 28 + extnID OBJECT_IDENTIFIER @150+3: 2.5.29.21|cRLReason|X.509 extension 29 + extnValue OCTET_STRING @155+3 (encapsulates): (3 byte)|0A0101 30 + ENUMERATED @157+1: 1 31 + crlExtensions [0] @160+47 (constructed): (1 elem) 32 + Extensions SEQUENCE @162+45 (constructed): (2 elem) 33 + Extension SEQUENCE @164+31 (constructed): (2 elem) 34 + extnID OBJECT_IDENTIFIER @166+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension 35 + extnValue OCTET_STRING @171+24 (encapsulates): (24 byte)|301680140868AF8533C8394A7AF882938E706A4A20842C32 36 + SEQUENCE @173+22 (constructed): (1 elem) 37 + [0] @175+20: (20 byte)|0868AF8533C8394A7AF882938E706A4A20842C32 38 + Extension SEQUENCE @197+10 (constructed): (2 elem) 39 + extnID OBJECT_IDENTIFIER @199+3: 2.5.29.20|cRLNumber|X.509 extension 40 + extnValue OCTET_STRING @204+3 (encapsulates): (3 byte)|02010C 41 + INTEGER @206+1: 12 42 + signatureAlgorithm AlgorithmIdentifier SEQUENCE @209+13 (constructed): (2 elem) 43 + algorithm OBJECT_IDENTIFIER @211+9: 1.2.840.113549.1.1.5|sha1WithRSAEncryption|PKCS #1 44 + parameters ANY NULL @222+0 45 + signature BIT_STRING @224+129: (1024 bit)|0010001011011100000110000111110111110111000010001100111011001100011101011101000011010000011010101001101110101101000100001111010001110110001000111011010010000001011011101011010101101101101111100000111011111011000101010001010001101100110010000001011101101101000111111110111010010000000101111010001001101111011000001110010010111101101010101000110001010101110111101000111010000100011011111001001011111000100111110001000000010010001001111010111101001010110101000010111110000101111000100011011001000100011111011010101010100011010011000010010100111000000101011111111100000000111111010011111001111110111011100011110100100110000100101110101111011000111001110010101101100010111000100010101111000011010001101000000011101111011110001000001011010001000101011100011011010000100111000111001001101010110010111100111001111010111011010110011110011001100010110110111001110000100000010111110101000011010000100111010011000001101001101010111111000001010101010001011110100010001100110100110011010110000001101001100000101011101001001111110000101110
+60
examples/ed25519.cer.dump
··· 1 + Certificate SEQUENCE @0+383 (constructed): (3 elem) 2 + tbsCertificate TBSCertificate SEQUENCE @4+305 (constructed): (8 elem) 3 + version [0] @8+3 (constructed): (1 elem) 4 + Version INTEGER @10+1: 2 5 + serialNumber CertificateSerialNumber INTEGER @13+20: (159 bit)|711090297755414526861352146244170174161660335942 6 + signature AlgorithmIdentifier SEQUENCE @35+5 (constructed): (1 elem) 7 + algorithm OBJECT_IDENTIFIER @37+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm 8 + issuer rdnSequence Name SEQUENCE @42+53 (constructed): (3 elem) 9 + RelativeDistinguishedName SET @44+11 (constructed): (1 elem) 10 + AttributeTypeAndValue SEQUENCE @46+9 (constructed): (2 elem) 11 + type AttributeType OBJECT_IDENTIFIER @48+3: 2.5.4.6|countryName|X.520 DN component 12 + value AttributeValue [?] PrintableString @53+2: IT 13 + RelativeDistinguishedName SET @57+15 (constructed): (1 elem) 14 + AttributeTypeAndValue SEQUENCE @59+13 (constructed): (2 elem) 15 + type AttributeType OBJECT_IDENTIFIER @61+3: 2.5.4.7|localityName|X.520 DN component 16 + value AttributeValue [?] UTF8String @66+6: Milano 17 + RelativeDistinguishedName SET @74+21 (constructed): (1 elem) 18 + AttributeTypeAndValue SEQUENCE @76+19 (constructed): (2 elem) 19 + type AttributeType OBJECT_IDENTIFIER @78+3: 2.5.4.3|commonName|X.520 DN component 20 + value AttributeValue [?] UTF8String @83+12: Test ed25519 21 + validity Validity SEQUENCE @97+30 (constructed): (2 elem) 22 + notBefore utcTime Time UTCTime @99+13: 2020-09-02 13:25:26 UTC 23 + notAfter utcTime Time UTCTime @114+13: 2030-09-02 13:25:26 UTC 24 + subject rdnSequence Name SEQUENCE @129+53 (constructed): (3 elem) 25 + RelativeDistinguishedName SET @131+11 (constructed): (1 elem) 26 + AttributeTypeAndValue SEQUENCE @133+9 (constructed): (2 elem) 27 + type AttributeType OBJECT_IDENTIFIER @135+3: 2.5.4.6|countryName|X.520 DN component 28 + value AttributeValue [?] PrintableString @140+2: IT 29 + RelativeDistinguishedName SET @144+15 (constructed): (1 elem) 30 + AttributeTypeAndValue SEQUENCE @146+13 (constructed): (2 elem) 31 + type AttributeType OBJECT_IDENTIFIER @148+3: 2.5.4.7|localityName|X.520 DN component 32 + value AttributeValue [?] UTF8String @153+6: Milano 33 + RelativeDistinguishedName SET @161+21 (constructed): (1 elem) 34 + AttributeTypeAndValue SEQUENCE @163+19 (constructed): (2 elem) 35 + type AttributeType OBJECT_IDENTIFIER @165+3: 2.5.4.3|commonName|X.520 DN component 36 + value AttributeValue [?] UTF8String @170+12: Test ed25519 37 + subjectPublicKeyInfo SubjectPublicKeyInfo SEQUENCE @184+42 (constructed): (2 elem) 38 + algorithm AlgorithmIdentifier SEQUENCE @186+5 (constructed): (1 elem) 39 + algorithm OBJECT_IDENTIFIER @188+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm 40 + subjectPublicKey BIT_STRING @193+33: (256 bit)|0011101110101001001011111111110111001011000101110110011011011110010000001010001010010010111101111001001111011110001100001111100000001010001000111010100000110001001000010101110111010000000001111101100001100011001001000010111011111111011010000010000110000101 41 + extensions [3] @228+83 (constructed): (1 elem) 42 + Extensions SEQUENCE @230+81 (constructed): (3 elem) 43 + Extension SEQUENCE @232+29 (constructed): (2 elem) 44 + extnID OBJECT_IDENTIFIER @234+3: 2.5.29.14|subjectKeyIdentifier|X.509 extension 45 + extnValue OCTET_STRING @239+22 (encapsulates): (22 byte)|04146BA5BDCF9DFA235978126417AE1E72D89A804AE8 46 + OCTET_STRING @241+20: (20 byte)|6BA5BDCF9DFA235978126417AE1E72D89A804AE8 47 + Extension SEQUENCE @263+31 (constructed): (2 elem) 48 + extnID OBJECT_IDENTIFIER @265+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension 49 + extnValue OCTET_STRING @270+24 (encapsulates): (24 byte)|301680146BA5BDCF9DFA235978126417AE1E72D89A804AE8 50 + SEQUENCE @272+22 (constructed): (1 elem) 51 + [0] @274+20: (20 byte)|6BA5BDCF9DFA235978126417AE1E72D89A804AE8 52 + Extension SEQUENCE @296+15 (constructed): (3 elem) 53 + extnID OBJECT_IDENTIFIER @298+3: 2.5.29.19|basicConstraints|X.509 extension 54 + critical BOOLEAN @303+1: true 55 + extnValue OCTET_STRING @306+5 (encapsulates): (5 byte)|30030101FF 56 + SEQUENCE @308+3 (constructed): (1 elem) 57 + BOOLEAN @310+1: true 58 + signatureAlgorithm AlgorithmIdentifier SEQUENCE @313+5 (constructed): (1 elem) 59 + algorithm OBJECT_IDENTIFIER @315+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm 60 + signature BIT_STRING @320+65: (512 bit)|01101111011100110111011110111110001010001001011001011010001100110011011011010111111001010011010011111101100100001111001111111101010000000111111100011111000000101111100100000000010101111111001000010110000011110001011001101011000001001011111101100101100001001011011010011000110100101101000011010010101111110100110011010110011011110000111010110110111000101110100010011101000001001010001111100000100110010101000011111001110000100110110111011110011100111010110100011101001101010101011110000101011001011000011000000110
+8
examples/ldapmessage.b64
··· 1 + LDAPMessage example as found on ldap.com. 2 + 3 + Original link: 4 + https://ldap.com/ldapv3-wire-protocol-reference-ldap-message/ 5 + 6 + begin-base64 644 ldapmessage.der 7 + MDUCAQVKEWRjPWV4YW1wbGUsZGM9Y29toB0wGwQWMS4yLjg0MC4xMTM1NTYuMS40LjgwNQEB/w== 8 + ====
+7
examples/ldapmessage.b64.dump
··· 1 + LDAPMessage SEQUENCE @0+53 (constructed): (3 elem) 2 + messageID MessageID INTEGER @2+1: 5 3 + protocolOp delRequest CHOICE Application_10 @5+17: (17 byte)|dc=example,dc=com 4 + Controls [?] [0] @24+29 (constructed): (1 elem) 5 + AttributeTypeAndValue SEQUENCE @26+27 (constructed): (2 elem) 6 + type AttributeType [?] OCTET_STRING @28+22: (22 byte)|1.2.840.113556.1.4.805 7 + value AttributeValue [?] BOOLEAN @52+1: true
+18
examples/pkcs1.pem
··· 1 + PKCS#1 RSA key 2 + $ openssl genrsa -out examples/pkcs8-rsa.pem 1024 3 + $ openssl rsa -in examples/pkcs8-rsa.pem -out examples/pkcs1.pem -traditional 4 + -----BEGIN RSA PRIVATE KEY----- 5 + MIICXQIBAAKBgQCmy23ifN9pi5LO4MR3LUhU0v+LZmv78H+jd+R6kFcWZf1qW4yf 6 + KTDkryjjLlIhYqxmzXCqGyaIjj7uJoorWf7KfkxpOuJrh4swJ/WGhCn9i+voW/7T 7 + sOXfDp1yqrEhaQKwdPot1ZAB78TNsecwX/SODTEMCk95jvx1j5cDxPlskwIDAQAB 8 + AoGBAINn4bp+BsVwYMj768y4sDOjyBBbMNfcMbLn0el9rh7HW09fsPnzycFg/iV9 9 + aNdEle6oDAr4OPN8nbeiRVjCHijEnVdHCwAtkKODyuu1ghpZWD0VUC8AEskjX4Bs 10 + Ysl/HjyvvHIRj89gdDFoElgB4GzHKTzeZNJBM5qtUW57zBCBAkEA0A6N5l98MglL 11 + cypWKM7+3DXteWt86mKXYUVF33HY28Z+oUVlU0v8m8XxpoAjkicYnC1JOSSlvWRk 12 + EWlTMgHW5QJBAM06yIHMR6p3apgpwOUp49DbtaQ8NmhCV4NBoFHa+vT2Fk8twOcq 13 + O9OzP4svhKbPNfB4HnxGbmd/+OVT3lySxhcCQHRPPpqD1K0wLwKxrzrfBPDcIOaY 14 + 5VsuRIw3KqmQPngWTiIf5lYbi5sVnFLFHZ2Nx58/XcjZKOJopdxp8f1ps9UCQQC3 15 + rOqSsF9bg3DVKllHQAxyepDAolsXSHjGMk/nspJz9mLVDl/dBAFzYLN4QFj6ae0e 16 + gILYOrjIzNHXfQ4/z+SVAkBPebkAzpGFgzVzu6VOGx0Vft/ow3/DKNJSDM58yASp 17 + ootY2TdibrrV/ellNLvuTiku6AEM/8jbHlRsmfxRe0xn 18 + -----END RSA PRIVATE KEY-----
+10
examples/pkcs1.pem.dump
··· 1 + RSAPrivateKey SEQUENCE @0+605 (constructed): (9 elem) 2 + version Version INTEGER @4+1: 0 3 + modulus INTEGER @7+129: (1024 bit)|117127183230921204401013393277767517103803021018182691416238029726599496957198017684901559383009459523071384847726671610377559004781710040051270748910270447756432733966622455162759462672603884318432883204215291756888413811504344870556870978773843838353155520698675084344179957236491745093327422201227604749459 4 + publicExponent INTEGER @139+3: 65537 5 + privateExponent INTEGER @144+129: (1024 bit)|92276282475226568589241550905865273709561889943250510752753436239739158443231274686159532997597455087892667385718350070754140814118578097684166368734227728473322161416664690885212698653195373932779792506838124961141214987311742627151011567342689730655630521241854903774681567286735997541758916977964830429313 6 + prime1 INTEGER @276+65: (512 bit)|10896821561662485361386011233938116142526936125648167362054539174681694465821232677159478832161550957167298418313068706031799276527005193877616679381489381 7 + prime2 INTEGER @343+65: (512 bit)|10748747473575365133625210720374663113238804836624829882840358384492696273600075746246298849279878235356215808273663889910189484797595139778277124898735639 8 + exponent1 INTEGER @410+64: (511 bit)|6091625365131581796315047890165719534213640521161662994088715561328917102465668272778610952193459304175325574129665657306361751287362700277617869028176853 9 + exponent2 INTEGER @476+65: (512 bit)|9619864112105977791898517014707043200694399482542575521432448550956476604540013165392532656448448632323473488540572223305800601817570919153380021725291669 10 + coefficient INTEGER @543+64: (511 bit)|4162468593383244686217782691133418477400302049612992866028022118893358867845916127581019785866484075341057799618361552573853678007698434146811407259880551
+9
examples/pkcs10.pem
··· 1 + PKCS#10 certification request based on Daniel J. Bernsteinโ€™s Curve25519. 2 + $ openssl req -nodes -newkey ed25519 -keyout /dev/null -out pkcs10.pem -days 36500 -subj '/CN=test' -addext 'subjectAltName=otherName:msUPN;UTF8:address@domain.test' 3 + -----BEGIN CERTIFICATE REQUEST----- 4 + MIHQMIGDAgEAMA8xDTALBgNVBAMMBHRlc3QwKjAFBgMrZXADIQD7Fua9ZF+wPXVd 5 + DCBwQr+Aqny6OFvs25wZ/P4LyVsYmKBBMD8GCSqGSIb3DQEJDjEyMDAwLgYDVR0R 6 + BCcwJaAjBgorBgEEAYI3FAIDoBUME2FkZHJlc3NAZG9tYWluLnRlc3QwBQYDK2Vw 7 + A0EAUp5FenHF1rZzRGU+7wiF+/D1bfyDRF0dzWz2sl44nltu8iLjHO3aIfOTYWpq 8 + ZlaDg1Bq3L7Fcb7If4yZAsE5Cw== 9 + -----END CERTIFICATE REQUEST-----
+18
examples/pkcs8-rsa.pem
··· 1 + PKCS#8 RSA key 2 + $ openssl genrsa -out examples/pkcs8-rsa.pem 1024 3 + -----BEGIN PRIVATE KEY----- 4 + MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKbLbeJ832mLks7g 5 + xHctSFTS/4tma/vwf6N35HqQVxZl/WpbjJ8pMOSvKOMuUiFirGbNcKobJoiOPu4m 6 + iitZ/sp+TGk64muHizAn9YaEKf2L6+hb/tOw5d8OnXKqsSFpArB0+i3VkAHvxM2x 7 + 5zBf9I4NMQwKT3mO/HWPlwPE+WyTAgMBAAECgYEAg2fhun4GxXBgyPvrzLiwM6PI 8 + EFsw19wxsufR6X2uHsdbT1+w+fPJwWD+JX1o10SV7qgMCvg483ydt6JFWMIeKMSd 9 + V0cLAC2Qo4PK67WCGllYPRVQLwASySNfgGxiyX8ePK+8chGPz2B0MWgSWAHgbMcp 10 + PN5k0kEzmq1RbnvMEIECQQDQDo3mX3wyCUtzKlYozv7cNe15a3zqYpdhRUXfcdjb 11 + xn6hRWVTS/ybxfGmgCOSJxicLUk5JKW9ZGQRaVMyAdblAkEAzTrIgcxHqndqmCnA 12 + 5Snj0Nu1pDw2aEJXg0GgUdr69PYWTy3A5yo707M/iy+Eps818HgefEZuZ3/45VPe 13 + XJLGFwJAdE8+moPUrTAvArGvOt8E8Nwg5pjlWy5EjDcqqZA+eBZOIh/mVhuLmxWc 14 + UsUdnY3Hnz9dyNko4mil3Gnx/Wmz1QJBALes6pKwX1uDcNUqWUdADHJ6kMCiWxdI 15 + eMYyT+eyknP2YtUOX90EAXNgs3hAWPpp7R6Agtg6uMjM0dd9Dj/P5JUCQE95uQDO 16 + kYWDNXO7pU4bHRV+3+jDf8Mo0lIMznzIBKmii1jZN2JuutX96WU0u+5OKS7oAQz/ 17 + yNseVGyZ/FF7TGc= 18 + -----END PRIVATE KEY-----
+16
examples/pkcs8-rsa.pem.dump
··· 1 + PrivateKeyInfo SEQUENCE @0+631 (constructed): (3 elem) 2 + version Version INTEGER @4+1: 0 3 + privateKeyAlgorithm AlgorithmIdentifier SEQUENCE @7+13 (constructed): (2 elem) 4 + algorithm OBJECT_IDENTIFIER @9+9: 1.2.840.113549.1.1.1|rsaEncryption|PKCS #1 5 + parameters ANY NULL @20+0 6 + privateKey PrivateKey OCTET_STRING @22+609 (encapsulates): (609 byte)|3082025D02010002818100A6CB6DE27CDF698B92CEE0C4772D4854D2FF8B666BFBF07FA377E47A90571665FD6A5B8C9F2930E4AF28E32E522162AC66CD70AA1B26888E3EEE268A2B59FECA7E4C693AE26B878B3027F5868429FD8BEBE85BFED3B0E5DF0E9D72AAB1216902B074FA2DD59001EFC4CDB1E7305FF48E0D310C0A4F798EFC758F9703C4F96C930203010001028181008367E1BA7E06C57060C8FBEBCCB8B033A3C8105B30D7DC31B2E7D1E97DAE1EC75B4F5FB0F9F3C9C160FE257D68D74495EEA80C0AF838F37C9DB7A24558C21E28C49D57470B002D90A383CAEBB5821A59583D15502F0012C9235F806C62C97F1E3CAFBC72118FCF60743168125801E06CC7293CDE64D241339AAD516E7BCC1081024100D00E8DE65F7C32094B732A5628CEFEDC35ED796B7CEA6297614545DF71D8DBC67EA14565534BFC9BC5F1A680239227189C2D493924A5BD64641169533201D6E5024100CD3AC881CC47AA776A9829C0E529E3D0DBB5A43C366842578341A051DAFAF4F6164F2DC0E72A3BD3B33F8B2F84A6CF35F0781E7C466E677FF8E553DE5C92C6170240744F3E9A83D4AD302F02B1AF3ADF04F0DC20E698E55B2E448C372AA9903E78164E221FE6561B8B9B159C52C51D9D8DC79F3F5DC8D928E268A5DC69F1FD69B3D5024100B7ACEA92B05F5B8370D52A5947400C727A90C0A25B174878C6324FE7B29273F662D50E5FDD04017360B3784058FA69ED1E8082D83AB8C8CCD1D77D0E3FCFE49502404F79B900CE9185833573BBA54E1B1D157EDFE8C37FC328D2520CCE7CC804A9A28B58D937626EBAD5FDE96534BBEE4E292EE8010CFFC8DB1E546C99FC517B4C67 7 + SEQUENCE @26+605 (constructed): (9 elem) 8 + INTEGER @30+1: 0 9 + INTEGER @33+129: (1024 bit)|117127183230921204401013393277767517103803021018182691416238029726599496957198017684901559383009459523071384847726671610377559004781710040051270748910270447756432733966622455162759462672603884318432883204215291756888413811504344870556870978773843838353155520698675084344179957236491745093327422201227604749459 10 + INTEGER @165+3: 65537 11 + INTEGER @170+129: (1024 bit)|92276282475226568589241550905865273709561889943250510752753436239739158443231274686159532997597455087892667385718350070754140814118578097684166368734227728473322161416664690885212698653195373932779792506838124961141214987311742627151011567342689730655630521241854903774681567286735997541758916977964830429313 12 + INTEGER @302+65: (512 bit)|10896821561662485361386011233938116142526936125648167362054539174681694465821232677159478832161550957167298418313068706031799276527005193877616679381489381 13 + INTEGER @369+65: (512 bit)|10748747473575365133625210720374663113238804836624829882840358384492696273600075746246298849279878235356215808273663889910189484797595139778277124898735639 14 + INTEGER @436+64: (511 bit)|6091625365131581796315047890165719534213640521161662994088715561328917102465668272778610952193459304175325574129665657306361751287362700277617869028176853 15 + INTEGER @502+65: (512 bit)|9619864112105977791898517014707043200694399482542575521432448550956476604540013165392532656448448632323473488540572223305800601817570919153380021725291669 16 + INTEGER @569+64: (511 bit)|4162468593383244686217782691133418477400302049612992866028022118893358867845916127581019785866484075341057799618361552573853678007698434146811407259880551
+118
examples/sig-p256-der.p7m.dump
··· 1 + ContentInfo SEQUENCE @0+10868 (constructed): (2 elem) 2 + contentType ContentType OBJECT_IDENTIFIER @4+9: 1.2.840.113549.1.7.2|signedData|PKCS #7 3 + content [0] @15+10853 (constructed): (1 elem) 4 + SignedData SEQUENCE @19+10849 (constructed): (5 elem) 5 + version CMSVersion INTEGER @23+1: 1 6 + digestAlgorithms DigestAlgorithmIdentifiers SET @26+15 (constructed): (1 elem) 7 + DigestAlgorithmIdentifier SEQUENCE @28+13 (constructed): (2 elem) 8 + algorithm OBJECT_IDENTIFIER @30+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm 9 + parameters ANY NULL @41+0 10 + encapContentInfo EncapsulatedContentInfo SEQUENCE @43+10053 (constructed): (2 elem) 11 + eContentType ContentType OBJECT_IDENTIFIER @47+9: 1.2.840.113549.1.7.1|data|PKCS #7 12 + eContent [0] @58+10038 (constructed): (1 elem) 13 + OCTET_STRING @62+10034: (10034 byte)|Inizio contenuto.|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|Fine contenuto. 14 + CertificateSet [?] [0] @10100+370 (constructed): (1 elem) 15 + certificate CertificateChoices SEQUENCE @10104+366 (constructed): (3 elem) 16 + tbsCertificate TBSCertificate SEQUENCE @10108+276 (constructed): (8 elem) 17 + version [0] @10112+3 (constructed): (1 elem) 18 + Version INTEGER @10114+1: 2 19 + serialNumber CertificateSerialNumber INTEGER @10117+16: (127 bit)|128087855099855233032551836648087377254 20 + signature AlgorithmIdentifier SEQUENCE @10135+10 (constructed): (1 elem) 21 + algorithm OBJECT_IDENTIFIER @10137+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 22 + issuer rdnSequence Name SEQUENCE @10147+15 (constructed): (1 elem) 23 + RelativeDistinguishedName SET @10149+13 (constructed): (1 elem) 24 + AttributeTypeAndValue SEQUENCE @10151+11 (constructed): (2 elem) 25 + type AttributeType OBJECT_IDENTIFIER @10153+3: 2.5.4.3|commonName|X.520 DN component 26 + value AttributeValue [?] UTF8String @10158+4: Test 27 + validity Validity SEQUENCE @10164+30 (constructed): (2 elem) 28 + notBefore utcTime Time UTCTime @10166+13: 2018-07-16 14:56:35 UTC 29 + notAfter utcTime Time UTCTime @10181+13: 2019-07-16 14:56:35 UTC 30 + subject rdnSequence Name SEQUENCE @10196+15 (constructed): (1 elem) 31 + RelativeDistinguishedName SET @10198+13 (constructed): (1 elem) 32 + AttributeTypeAndValue SEQUENCE @10200+11 (constructed): (2 elem) 33 + type AttributeType OBJECT_IDENTIFIER @10202+3: 2.5.4.3|commonName|X.520 DN component 34 + value AttributeValue [?] UTF8String @10207+4: Test 35 + subjectPublicKeyInfo SubjectPublicKeyInfo SEQUENCE @10213+89 (constructed): (2 elem) 36 + algorithm AlgorithmIdentifier SEQUENCE @10215+19 (constructed): (2 elem) 37 + algorithm OBJECT_IDENTIFIER @10217+7: 1.2.840.10045.2.1|ecPublicKey|ANSI X9.62 public key type 38 + parameters ANY OBJECT_IDENTIFIER @10226+8: 1.2.840.10045.3.1.7|prime256v1|ANSI X9.62 named elliptic curve 39 + subjectPublicKey BIT_STRING @10236+66: (520 bit)|0000010000100100010011001011011011001100000111000110100100100001111111110100100111011000101111100010011000111110000010110111110011010000010110100010100001100101010110101000010001101100100000100101111011001010111001101110110011100110100110100110101000100001110001001110010011110010001000000010010011000000111010011111010011100100011101001001110010011000101000011010110111110010010111111001000011011110011011101111100101001000001010110110011100011000100000111010011100001110101101001011011110101011100111110000011001000011 40 + extensions [3] @10304+82 (constructed): (1 elem) 41 + Extensions SEQUENCE @10306+80 (constructed): (3 elem) 42 + Extension SEQUENCE @10308+14 (constructed): (3 elem) 43 + extnID OBJECT_IDENTIFIER @10310+3: 2.5.29.15|keyUsage|X.509 extension 44 + critical BOOLEAN @10315+1: true 45 + extnValue OCTET_STRING @10318+4 (encapsulates): (4 byte)|030204F0 46 + BIT_STRING @10320+2: (4 bit)|1111 47 + Extension SEQUENCE @10324+29 (constructed): (2 elem) 48 + extnID OBJECT_IDENTIFIER @10326+3: 2.5.29.14|subjectKeyIdentifier|X.509 extension 49 + extnValue OCTET_STRING @10331+22 (encapsulates): (22 byte)|0414C3C084DF7B040DB038AF518CE397F6EC20D626E6 50 + OCTET_STRING @10333+20: (20 byte)|C3C084DF7B040DB038AF518CE397F6EC20D626E6 51 + Extension SEQUENCE @10355+31 (constructed): (2 elem) 52 + extnID OBJECT_IDENTIFIER @10357+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension 53 + extnValue OCTET_STRING @10362+24 (encapsulates): (24 byte)|30168014C3C084DF7B040DB038AF518CE397F6EC20D626E6 54 + SEQUENCE @10364+22 (constructed): (1 elem) 55 + [0] @10366+20: (20 byte)|C3C084DF7B040DB038AF518CE397F6EC20D626E6 56 + signatureAlgorithm AlgorithmIdentifier SEQUENCE @10388+10 (constructed): (1 elem) 57 + algorithm OBJECT_IDENTIFIER @10390+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 58 + signature BIT_STRING @10400+72 (encapsulates): (568 bit)|0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010 59 + SEQUENCE @10403+69 (constructed): (2 elem) 60 + INTEGER @10405+33: (256 bit)|100583279108105959323277080420227859612360091217401498640290749528265835693079 61 + INTEGER @10440+32: (255 bit)|46934510925111877438867701170553238261516280994969183555881415710868278719026 62 + signerInfos SignerInfos SET @10474+394 (constructed): (1 elem) 63 + SignerInfo SEQUENCE @10478+390 (constructed): (6 elem) 64 + version CMSVersion INTEGER @10482+1: 1 65 + sid issuerAndSerialNumber SignerIdentifier SEQUENCE @10485+35 (constructed): (2 elem) 66 + issuer rdnSequence Name SEQUENCE @10487+15 (constructed): (1 elem) 67 + RelativeDistinguishedName SET @10489+13 (constructed): (1 elem) 68 + AttributeTypeAndValue SEQUENCE @10491+11 (constructed): (2 elem) 69 + type AttributeType OBJECT_IDENTIFIER @10493+3: 2.5.4.3|commonName|X.520 DN component 70 + value AttributeValue [?] UTF8String @10498+4: Test 71 + serialNumber CertificateSerialNumber INTEGER @10504+16: (127 bit)|128087855099855233032551836648087377254 72 + digestAlgorithm DigestAlgorithmIdentifier SEQUENCE @10522+13 (constructed): (2 elem) 73 + algorithm OBJECT_IDENTIFIER @10524+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm 74 + parameters ANY NULL @10535+0 75 + SignedAttributes [?] [0] @10537+247 (constructed): (5 elem) 76 + Attribute SEQUENCE @10540+24 (constructed): (2 elem) 77 + type AttributeType OBJECT_IDENTIFIER @10542+9: 1.2.840.113549.1.9.3|contentType|PKCS #9 78 + values SET @10553+11 (constructed): (1 elem) 79 + AttributeValue [?] OBJECT_IDENTIFIER @10555+9: 1.2.840.113549.1.7.1|data|PKCS #7 80 + Attribute SEQUENCE @10566+28 (constructed): (2 elem) 81 + type AttributeType OBJECT_IDENTIFIER @10568+9: 1.2.840.113549.1.9.5|signingTime|PKCS #9 82 + values SET @10579+15 (constructed): (1 elem) 83 + AttributeValue [?] UTCTime @10581+13: 2018-07-16 14:56:35 UTC 84 + Attribute SEQUENCE @10596+42 (constructed): (2 elem) 85 + type AttributeType OBJECT_IDENTIFIER @10598+9: 1.2.840.113549.1.9.52|cmsAlgorithmProtection|RFC 6211 86 + values SET @10609+29 (constructed): (1 elem) 87 + AttributeValue [?] SEQUENCE @10611+27 (constructed): (2 elem) 88 + SEQUENCE @10613+13 (constructed): (2 elem) 89 + OBJECT_IDENTIFIER @10615+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm 90 + NULL @10626+0 91 + [1] @10628+10 (constructed): (1 elem) 92 + OBJECT_IDENTIFIER @10630+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 93 + Attribute SEQUENCE @10640+47 (constructed): (2 elem) 94 + type AttributeType OBJECT_IDENTIFIER @10642+9: 1.2.840.113549.1.9.4|messageDigest|PKCS #9 95 + values SET @10653+34 (constructed): (1 elem) 96 + AttributeValue [?] OCTET_STRING @10655+32: (32 byte)|724C51BBE76DA05AFB20CBE8EB037CDAE1AFD713125D2DC13D552DA9F442D24D 97 + Attribute SEQUENCE @10689+96 (constructed): (2 elem) 98 + type AttributeType OBJECT_IDENTIFIER @10691+11: 1.2.840.113549.1.9.16.2.47|signingCertificateV2|S/MIME Authenticated Attributes 99 + values SET @10704+81 (constructed): (1 elem) 100 + AttributeValue [?] SEQUENCE @10706+79 (constructed): (1 elem) 101 + SEQUENCE @10708+77 (constructed): (1 elem) 102 + SEQUENCE @10710+75 (constructed): (2 elem) 103 + OCTET_STRING @10712+32: (32 byte)|BABC08434C58267301E006861D27ECA125670E792797248E76A5717A5BF993C2 104 + SEQUENCE @10746+39 (constructed): (2 elem) 105 + SEQUENCE @10748+19 (constructed): (1 elem) 106 + [4] @10750+17 (constructed): (1 elem) 107 + SEQUENCE @10752+15 (constructed): (1 elem) 108 + SET @10754+13 (constructed): (1 elem) 109 + SEQUENCE @10756+11 (constructed): (2 elem) 110 + OBJECT_IDENTIFIER @10758+3: 2.5.4.3|commonName|X.520 DN component 111 + UTF8String @10763+4: Test 112 + INTEGER @10769+16: (127 bit)|128087855099855233032551836648087377254 113 + signatureAlgorithm SignatureAlgorithmIdentifier SEQUENCE @10787+10 (constructed): (1 elem) 114 + algorithm OBJECT_IDENTIFIER @10789+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 115 + signature SignatureValue OCTET_STRING @10799+71 (encapsulates): (71 byte)|3045022100F104302EABB428ECC8E71CE2E38F6CBED848A8E9A2B5D5DA19933E485C83CC7102200CBB40A0B7B9B2E048920622FB286FD14695F24CF650BDAA40B885F84C34BBB9 116 + SEQUENCE @10801+69 (constructed): (2 elem) 117 + INTEGER @10803+33: (256 bit)|109014796438891021115527318269695135443977065935278579101750090430030910049393 118 + INTEGER @10838+32: (252 bit)|5758600628818957274240888478952309319266088628943097300803726649607194983353
+5
examples/timestamp-req.b64
··· 1 + RFC3161 TimeStamp Request 2 + 3 + begin-base64 644 timestamp-req.der 4 + ME4CAQEwLzALBglghkgBZQMEAgEEIEbUJK38SA8/2dz78XnG7DJfIYsSer3shYMmZa1VLFIRAhUA 5 + /1AduFa4EwRirIpvChE2VrV/JWYBAf8=
+99
favicon-src.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + 4 + <svg 5 + width="192" 6 + height="192" 7 + viewBox="0 0 50.799999 50.8" 8 + version="1.1" 9 + id="svg1" 10 + inkscape:version="1.3 (0e150ed6c4, 2023-07-21)" 11 + sodipodi:docname="favicon.svg" 12 + inkscape:export-filename="favicon-2.png" 13 + inkscape:export-xdpi="96" 14 + inkscape:export-ydpi="96" 15 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 16 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 17 + xmlns="http://www.w3.org/2000/svg" 18 + xmlns:svg="http://www.w3.org/2000/svg"> 19 + <sodipodi:namedview 20 + id="namedview1" 21 + pagecolor="#ffffff" 22 + bordercolor="#000000" 23 + borderopacity="0.25" 24 + inkscape:showpageshadow="2" 25 + inkscape:pageopacity="0.0" 26 + inkscape:pagecheckerboard="0" 27 + inkscape:deskcolor="#d1d1d1" 28 + inkscape:document-units="px" 29 + inkscape:zoom="5.1635163" 30 + inkscape:cx="98.963569" 31 + inkscape:cy="99.060402" 32 + inkscape:window-width="2058" 33 + inkscape:window-height="1469" 34 + inkscape:window-x="610" 35 + inkscape:window-y="320" 36 + inkscape:window-maximized="0" 37 + inkscape:current-layer="g2" /> 38 + <defs 39 + id="defs1"> 40 + <rect 41 + x="-2.8229867" 42 + y="7.5329568" 43 + width="191.88329" 44 + height="136.71218" 45 + id="rect2" /> 46 + <rect 47 + x="-2.8229866" 48 + y="7.5329566" 49 + width="191.88329" 50 + height="136.71217" 51 + id="rect2-0" /> 52 + </defs> 53 + <g 54 + inkscape:label="Layer 1" 55 + inkscape:groupmode="layer" 56 + id="layer1"> 57 + <rect 58 + style="fill:#000000;stroke-width:0.252748" 59 + id="rect1" 60 + width="50.799999" 61 + height="50.799999" 62 + x="0" 63 + y="0" /> 64 + <g 65 + id="g2" 66 + transform="translate(0,0.23697939)"> 67 + <g 68 + id="g4" 69 + transform="translate(0,-0.304314)"> 70 + <text 71 + xml:space="preserve" 72 + transform="matrix(0.26458333,0,0,0.26458333,0.72191975,-3.1336521)" 73 + id="text1" 74 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:106.667px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:10px;white-space:pre;shape-inside:url(#rect2);shape-padding:0.244802;display:inline;fill:#000000" 75 + x="69.453331" 76 + y="0"><tspan 77 + x="8.4313917" 78 + y="102.15264" 79 + id="tspan5"><tspan 80 + style="font-weight:bold;-inkscape-font-specification:'DejaVu Sans, Bold';text-align:center;text-anchor:middle;fill:#58a6ff" 81 + id="tspan1">AS</tspan></tspan></text> 82 + <text 83 + xml:space="preserve" 84 + transform="matrix(0.26458333,0,0,0.26458333,2.8069955,20.958796)" 85 + id="text1-1" 86 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:106.667px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:10px;white-space:pre;shape-inside:url(#rect2-0);shape-padding:0.244802;display:inline;fill:#000000" 87 + x="69.453331" 88 + y="0"><tspan 89 + x="-2.578125" 90 + y="102.15264" 91 + id="tspan8"><tspan 92 + style="font-weight:bold;font-family:Sans;-inkscape-font-specification:'Sans, Bold';fill:#58a6ff" 93 + id="tspan6">N</tspan><tspan 94 + style="font-weight:bold;font-family:Sans;-inkscape-font-specification:'Sans, Bold';fill:#fffe58" 95 + id="tspan7">1</tspan></tspan></text> 96 + </g> 97 + </g> 98 + </g> 99 + </svg>
+1
favicon.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" viewBox="0 0 50.8 50.8"><path d="M0 0h50.8v50.8H0z"/><path fill="#58a6ff" d="M18.028 20.078H9.733l-1.31 3.749H3.092l7.62-20.574h6.325l7.62 20.574h-5.332zm-6.972-3.817h5.636L13.88 8.076zm33.292-12.36v4.354q-1.695-.758-3.308-1.144t-3.045-.386q-1.902 0-2.811.524t-.91 1.626q0 .827.607 1.295.62.455 2.232.786l2.26.454q3.432.69 4.879 2.095t1.446 3.996q0 3.404-2.025 5.072-2.012 1.653-6.16 1.653-1.957 0-3.927-.372t-3.942-1.102v-4.479q1.971 1.047 3.804 1.585 1.846.523 3.555.523 1.737 0 2.66-.578t.923-1.654q0-.965-.634-1.488-.62-.524-2.494-.937l-2.053-.455q-3.087-.661-4.52-2.108-1.42-1.447-1.42-3.9 0-3.073 1.985-4.727 1.984-1.654 5.705-1.654 1.695 0 3.486.262 1.792.248 3.707.758z" aria-label="AS"/><g aria-label="N1" style="white-space:pre"><path fill="#58a6ff" d="M4.716 27.345h5.925l7.483 14.111v-14.11h5.03v20.573h-5.926L9.745 33.81v14.11h-5.03z"/><path fill="#fffe58" d="M31.696 44.254h4.686V30.955l-4.81.993v-3.61l4.782-.993h5.044v16.908h4.685v3.666H31.696z"/></g></svg>
+51 -56
hex.js
··· 1 1 // Hex JavaScript decoder 2 - // Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 2 + // Copyright (c) 2008 Lapo Luchini <lapo@lapo.it> 3 3 4 4 // Permission to use, copy, modify, and/or distribute this software for any 5 5 // purpose with or without fee is hereby granted, provided that the above 6 6 // copyright notice and this permission notice appear in all copies. 7 - // 7 + // 8 8 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 9 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 10 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ··· 13 13 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 14 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 15 16 - (typeof define != 'undefined' ? define : function (factory) { 'use strict'; 17 - if (typeof module == 'object') module.exports = factory(); 18 - else window.hex = factory(); 19 - })(function () { 20 - "use strict"; 16 + const 17 + haveU8 = (typeof Uint8Array == 'function'); 18 + 19 + let decoder; // populated on first usage 21 20 22 - var Hex = {}, 23 - decoder, // populated on first usage 24 - haveU8 = (typeof Uint8Array == 'function'); 21 + export class Hex { 25 22 26 - /** 27 - * Decodes an hexadecimal value. 28 - * @param {string|Array|Uint8Array} a - a string representing hexadecimal data, or an array representation of its charcodes 29 - */ 30 - Hex.decode = function(a) { 31 - var isString = (typeof a == 'string'); 32 - var i; 33 - if (decoder === undefined) { 34 - var hex = "0123456789ABCDEF", 35 - ignore = " \f\n\r\t\u00A0\u2028\u2029"; 36 - decoder = []; 37 - for (i = 0; i < 16; ++i) 38 - decoder[hex.charCodeAt(i)] = i; 39 - hex = hex.toLowerCase(); 40 - for (i = 10; i < 16; ++i) 41 - decoder[hex.charCodeAt(i)] = i; 42 - for (i = 0; i < ignore.length; ++i) 43 - decoder[ignore.charCodeAt(i)] = -1; 44 - } 45 - var out = haveU8 ? new Uint8Array(a.length >> 1) : [], 46 - bits = 0, 47 - char_count = 0, 48 - len = 0; 49 - for (i = 0; i < a.length; ++i) { 50 - var c = isString ? a.charCodeAt(i) : a[i]; 51 - c = decoder[c]; 52 - if (c == -1) 53 - continue; 54 - if (c === undefined) 55 - throw 'Illegal character at offset ' + i; 56 - bits |= c; 57 - if (++char_count >= 2) { 58 - out[len++] = bits; 59 - bits = 0; 60 - char_count = 0; 61 - } else { 62 - bits <<= 4; 23 + /** 24 + * Decodes an hexadecimal value. 25 + * @param {string|Array|Uint8Array} a - a string representing hexadecimal data, or an array representation of its charcodes 26 + */ 27 + static decode(a) { 28 + let isString = (typeof a == 'string'); 29 + let i; 30 + if (decoder === undefined) { 31 + let hex = '0123456789ABCDEF', 32 + ignore = ' \f\n\r\t\u00A0\u2028\u2029'; 33 + decoder = []; 34 + for (i = 0; i < 16; ++i) 35 + decoder[hex.charCodeAt(i)] = i; 36 + hex = hex.toLowerCase(); 37 + for (i = 10; i < 16; ++i) 38 + decoder[hex.charCodeAt(i)] = i; 39 + for (i = 0; i < ignore.length; ++i) 40 + decoder[ignore.charCodeAt(i)] = -1; 41 + } 42 + let out = haveU8 ? new Uint8Array(a.length >> 1) : [], 43 + bits = 0, 44 + char_count = 0, 45 + len = 0; 46 + for (i = 0; i < a.length; ++i) { 47 + let c = isString ? a.charCodeAt(i) : a[i]; 48 + c = decoder[c]; 49 + if (c == -1) 50 + continue; 51 + if (c === undefined) 52 + throw 'Illegal character at offset ' + i; 53 + bits |= c; 54 + if (++char_count >= 2) { 55 + out[len++] = bits; 56 + bits = 0; 57 + char_count = 0; 58 + } else { 59 + bits <<= 4; 60 + } 63 61 } 62 + if (char_count) 63 + throw 'Hex encoding incomplete: 4 bits missing'; 64 + if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters 65 + out = out.subarray(0, len); 66 + return out; 64 67 } 65 - if (char_count) 66 - throw "Hex encoding incomplete: 4 bits missing"; 67 - if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters 68 - out = out.subarray(0, len); 69 - return out; 70 - }; 71 68 72 - return Hex; 73 - 74 - }); 69 + }
-182
index-dark.css
··· 1 - :root { 2 - --main-bg-color: #0d1116; 3 - --main-text-color: #f8f8f2; 4 - --headline-text-color: #8be9fd; 5 - --button-border-color: #505050; 6 - --button-bg-color: #303030; 7 - --button-bghover-color: #404040; 8 - --input-border-color: #505050; 9 - --input-bg-color: #0c0e11; 10 - --link-color: #58a6ff; 11 - --link-hover-color: #9b9bea; 12 - --header-bg-color: #161b22; 13 - --page-bg-color: #000000; 14 - --license-bg-color: #4b4a4a; 15 - --license-border-color: black; 16 - --sub-border-color: #383838; 17 - --preview-bg-color: #989797; 18 - --preview-border-color: #b5b3b3; 19 - --dump-bg-color: #0c0e11; 20 - --dump-border-color: #505050; 21 - } 22 - html, body { 23 - background-color: var(--page-bg-color); 24 - color: var(--main-text-color); 25 - font-family: Arial, Helvetica, sans-serif; 26 - text-align: justify; 27 - font-size: 10pt; 28 - margin: 0px; 29 - } 30 - h1 { 31 - font-weight: 200; 32 - } 33 - input, 34 - textarea { 35 - background-color: var(--input-bg-color); 36 - color: var(--main-text-color); 37 - border: 1px solid var(--input-border-color); 38 - } 39 - input[type="button"] { 40 - background-color: var(--button-bg-color); 41 - color: var(--main-text-color); 42 - border: 1px solid var(--button-border-color); 43 - } 44 - input[type="button"]:hover { 45 - background-color: var(--button-bghover-color); 46 - } 47 - ::file-selector-button, 48 - ::-webkit-file-upload-button { 49 - background-color: var(--button-bg-color); 50 - color: var(--main-text-color); 51 - border: 0px; 52 - border-right: 1px solid var(--button-border-color); 53 - } 54 - ::-webkit-file-upload-button:hover { 55 - background-color: var(--button-bghover-color); 56 - } 57 - ::file-selector-button:hover { 58 - background-color: var(--button-bghover-color); 59 - } 60 - select { 61 - background-color: var(--input-bg-color); 62 - color: var(--main-text-color); 63 - border: 1px solid var(--input-border-color); 64 - 65 - } 66 - a { 67 - color: var(--link-color); 68 - } 69 - header { 70 - background-color: var(--header-bg-color); 71 - padding: 8px; 72 - padding-left: 16px; 73 - } 74 - #main-page { 75 - background-color: var(--main-bg-color); 76 - border: 0px; 77 - padding: 15px; 78 - } 79 - #help { 80 - margin: 0px; 81 - padding: 4px; 82 - padding-left: 20px; 83 - } 84 - .tt { 85 - font-family: monospace; 86 - } 87 - .license .ref { 88 - position: relative; 89 - } 90 - .license .hidden { 91 - visibility: hidden; 92 - position: absolute; 93 - bottom: 0em; 94 - /*white-space: pre;*/ 95 - background-color: var(--license-bg-color); 96 - border: solid 1px var(--license-border-color); 97 - padding: 2px; 98 - margin-left: 15%; 99 - margin-right: 15%; 100 - } 101 - .license:hover .hidden { 102 - /*display: block;*/ 103 - visibility: visible; 104 - } 105 - .node { 106 - position: relative; 107 - } 108 - .sub { 109 - padding-left: 1.5em; 110 - border-left: solid 1px var(--sub-border-color); 111 - } 112 - .head { 113 - height: 1em; 114 - white-space: nowrap; 115 - } 116 - .node:hover > .head, .node.hover > .head { 117 - color: var(--link-color); 118 - font-weight: bold; 119 - } 120 - .node:hover > .head:hover, .node.hover > .head.hover { 121 - color: var(--link-hover-color); 122 - } 123 - .node.collapsed { 124 - font-style: italic; 125 - } 126 - .node.collapsed > .sub { 127 - display: none; 128 - } 129 - .node.collapsed.hover > .sub { 130 - display: block; 131 - } 132 - .value { 133 - display: none; 134 - position: absolute; 135 - z-index: 2; 136 - top: 1.2em; 137 - left: 0; 138 - background-color: var(--button-bg-color); 139 - border: solid 1px var(--button-border-color); 140 - padding: 2px; 141 - } 142 - .head:hover + .value, .head.hover + .value { 143 - display: block; 144 - } 145 - .preview { 146 - margin-left: 1em; 147 - color: var(--preview-border-color); 148 - font-weight: normal; 149 - } 150 - .preview > .oid { 151 - margin-left: 1em; 152 - color: var(--preview-bg-color); 153 - font-weight: normal; 154 - } 155 - .spaces { 156 - font-size: 0px; 157 - } 158 - #tree { 159 - font-family: monospace; 160 - } 161 - #tree > p { 162 - font-family: Arial, Helvetica, sans-serif; 163 - } 164 - #dump { 165 - z-index: 1; 166 - background-color: var(--dump-bg-color); 167 - border: solid 1px var(--dump-border-color); 168 - font-family: monospace; 169 - white-space: pre; 170 - padding: 5px; 171 - } 172 - #dump .tag { color: #58a6ff; } 173 - #dump .dlen { color: darkcyan; } 174 - #dump .ulen { color: #00b6b6; } 175 - #dump .intro { color: #58a6ff; } 176 - #dump .outro { color: #00b6b6; } 177 - #dump .skip { color: #707070; background-color: #222222; } 178 - #dump .hexCurrent { background-color: #727272; } 179 - #dump .hexCurrent .hex { background-color: #474747; } 180 - #dump .hexCurrent .tag { color: #6db0fc; } 181 - #dump .hexCurrent .dlen { color: #00b6b6; } 182 - #file { display: none; }
+207 -23
index.css
··· 1 - :root { 1 + html { 2 2 --main-bg-color: #C0C0C0; 3 3 --main-text-color: #000000; 4 4 --headline-text-color: #8be9fd; ··· 18 18 --preview-border-color: #505050; 19 19 --dump-bg-color: #C0C0C0; 20 20 --dump-border-color: #E0E0E0; 21 + --dump-tag: blue; 22 + --dump-dlen: darkcyan; 23 + --dump-ulen: darkgreen; 24 + --dump-intro: blue; 25 + --dump-outro: darkgreen; 26 + --dump-skip: #666666; 27 + --dump-skip-bg: #C0C0C0; 28 + --dump-hex-current: #808080; 29 + --dump-hex-current-hex: #A0A0A0; 30 + --dump-hex-current-dlen: #004040; 31 + --hover-bg-color: #E0E0E0; 32 + --tree-zoom-fix: -1px; 33 + --tree-line: #999; 34 + } 35 + html[data-theme="dark"] { 36 + --main-bg-color: #0d1116; 37 + --main-text-color: #f8f8f2; 38 + --headline-text-color: #8be9fd; 39 + --button-border-color: #505050; 40 + --button-bg-color: #303030; 41 + --button-bghover-color: #404040; 42 + --input-border-color: #505050; 43 + --input-bg-color: #0c0e11; 44 + --link-color: #58a6ff; 45 + --link-hover-color: #9b9bea; 46 + --header-bg-color: #161b22; 47 + --page-bg-color: #000000; 48 + --license-bg-color: #4b4a4a; 49 + --license-border-color: black; 50 + --sub-border-color: #383838; 51 + --preview-bg-color: #989797; 52 + --preview-border-color: #b5b3b3; 53 + --dump-bg-color: #0c0e11; 54 + --dump-border-color: #505050; 55 + --dump-tag: #58a6ff; 56 + --dump-dlen: darkcyan; 57 + --dump-ulen: #00b6b6; 58 + --dump-intro: #58a6ff; 59 + --dump-outro: #00b6b6; 60 + --dump-skip: #707070; 61 + --dump-skip-bg: #222222; 62 + --dump-hex-current: #727272; 63 + --dump-hex-current-hex: #474747; 64 + --dump-hex-current-dlen: #00b6b6; 65 + --hover-bg-color: #505050; 66 + --tree-line: #333; 21 67 } 22 68 html, body { 23 69 background-color: var(--page-bg-color); ··· 27 73 font-size: 10pt; 28 74 margin: 0px; 29 75 } 76 + header { 77 + display: flex; 78 + flex: nowrap; 79 + } 80 + header > .title { 81 + flex: auto; 82 + } 83 + header > .menu { 84 + display: flex; 85 + align-items: center; 86 + padding-right: 10px; 87 + } 30 88 input, 31 89 textarea { 32 90 background-color: var(--input-bg-color); ··· 71 129 #main-page { 72 130 background-color: var(--main-bg-color); 73 131 border: 0px; 74 - padding: 15px; 132 + padding: 5px; 133 + } 134 + #main-page > div { 135 + position: relative; 136 + padding-bottom: 1em; 75 137 } 76 138 #help { 77 139 margin: 0px; ··· 81 143 .tt { 82 144 font-family: monospace; 83 145 } 84 - .license .ref { 146 + .license { 85 147 position: relative; 86 148 } 87 149 .license .hidden { 88 150 visibility: hidden; 89 151 position: absolute; 90 - bottom: 0em; 91 - /*white-space: pre;*/ 152 + top: 0px; 153 + background-color: #D0D0D0; /*minimal support for IE11*/ 92 154 background-color: var(--license-bg-color); 93 155 border: solid 1px var(--license-border-color); 94 156 padding: 2px; ··· 99 161 /*display: block;*/ 100 162 visibility: visible; 101 163 } 102 - .node { 103 - position: relative; 104 - } 105 - .sub { 106 - padding-left: 1.5em; 107 - border-left: solid 1px var(--sub-border-color); 108 - } 109 164 .head { 110 165 height: 1em; 111 166 white-space: nowrap; 112 167 } 113 168 .node:hover > .head, .node.hover > .head { 114 169 color: var(--link-color); 115 - font-weight: bold; 170 + background-color: var(--hover-bg-color); 116 171 } 117 172 .node:hover > .head:hover, .node.hover > .head.hover { 118 173 color: var(--link-hover-color); ··· 126 181 .node.collapsed.hover > .sub { 127 182 display: block; 128 183 } 184 + .name { 185 + margin-right: 1em; 186 + color: var(--preview-border-color); 187 + } 188 + .name.id { 189 + color: var(--main-text-color); 190 + } 129 191 .value { 130 192 display: none; 131 193 position: absolute; 132 194 z-index: 2; 133 195 top: 1.2em; 134 - left: 0; 196 + left: 30px; 197 + background-color: #efefef; /*minimal support for IE11*/ 135 198 background-color: var(--button-bg-color); 136 199 border: solid 1px var(--button-border-color); 137 200 padding: 2px; ··· 159 222 font-family: Arial, Helvetica, sans-serif; 160 223 } 161 224 #dump { 225 + position: absolute; 226 + right: 0px; 162 227 z-index: 1; 163 228 background-color: var(--dump-bg-color); 164 229 border: solid 1px var(--dump-border-color); ··· 166 231 white-space: pre; 167 232 padding: 5px; 168 233 } 169 - #dump .tag { color: blue; } 170 - #dump .dlen { color: darkcyan; } 171 - #dump .ulen { color: darkgreen; } 172 - #dump .intro { color: blue; } 173 - #dump .outro { color: darkgreen; } 174 - #dump .skip { color: #666666; background-color: #C0C0C0; } 175 - #dump .hexCurrent { background-color: #808080; } 176 - #dump .hexCurrent .hex { background-color: #A0A0A0; } 177 - #dump .hexCurrent .dlen { color: #004040; } 234 + #dump .tag { color: var(--dump-tag); } 235 + #dump .dlen { color: var(--dump-dlen); } 236 + #dump .ulen { color: var(--dump-ulen); } 237 + #dump .intro { color: var(--dump-intro); } 238 + #dump .outro { color: var(--dump-outro); } 239 + #dump .skip { color: var(--dump-skip); background-color: var(--dump-skip-bg); } 240 + #dump .hexCurrent { background-color: var(--dump-hex-current); } 241 + #dump .hexCurrent .hex { background-color: var(--dump-hex-current-hex); } 242 + #dump .hexCurrent .dlen { color: var(--dump-hex-current-dlen); } 178 243 #file { display: none; } 244 + #area { width: 100%; } 245 + #contextmenu { 246 + position: absolute; 247 + visibility: hidden; 248 + top: 0; 249 + left: 0; 250 + padding: 2px; 251 + background-color: var(--button-bg-color); 252 + border: 1px solid var(--button-bg-color); 253 + z-index: 2; 254 + } 255 + #contextmenu > button { 256 + display: block; 257 + width: 120px; 258 + background-color: var(--button-bg-color); 259 + color: var(--main-text-color); 260 + border: 1px solid var(--button-border-color); 261 + text-align: left; 262 + } 263 + #contextmenu > button:hover { 264 + background-color: var(--button-bghover-color); 265 + } 266 + 267 + .treecollapse { 268 + --spacing: 1.5rem; 269 + --radius: 7px; 270 + padding-inline-start: 0px; 271 + } 272 + .treecollapse li{ 273 + display: block; 274 + position: relative; 275 + padding-left: calc(2 * var(--spacing) - var(--radius) - 2px); 276 + } 277 + .treecollapse ul{ 278 + padding-left: 0; 279 + margin-left: calc(var(--radius) - var(--spacing)); 280 + } 281 + .treecollapse ul li{ 282 + border-left: 1px solid var(--tree-line); 283 + } 284 + .treecollapse ul li:last-child{ 285 + border-color: transparent; 286 + } 287 + .treecollapse ul li::before{ 288 + content: ''; 289 + display: block; 290 + position: absolute; 291 + top: calc(var(--spacing) / -1.6); 292 + left: var(--tree-zoom-fix); 293 + width: calc(var(--spacing) + 2px); 294 + height: calc(var(--spacing) + 1px); 295 + border: solid var(--tree-line); 296 + border-width: 0 0 1px 1px; 297 + } 298 + .treecollapse summary{ 299 + display : block; 300 + cursor : pointer; 301 + } 302 + .treecollapse summary::marker, 303 + .treecollapse summary::-webkit-details-marker{ 304 + display : none; 305 + } 306 + .treecollapse summary:focus{ 307 + outline : none; 308 + } 309 + .treecollapse summary:focus-visible{ 310 + outline : 1px dotted #000; 311 + } 312 + .treecollapse summary::before{ 313 + content: ''; 314 + display: block; 315 + position: absolute; 316 + top: calc(var(--spacing) / 2 - var(--radius)); 317 + left: calc(var(--spacing) - var(--radius) - 1px); 318 + width: calc(2 * var(--radius)); 319 + height: calc(2 * var(--radius)); 320 + } 321 + .treecollapse summary::before{ 322 + z-index: 1; 323 + top: 1px; 324 + background: url('tree-icon-light.svg'); 325 + } 326 + html[data-theme="dark"] .treecollapse summary::before{ 327 + background: url('tree-icon-dark.svg'); 328 + } 329 + .treecollapse details[open] > summary::before{ 330 + background-position : calc(-2 * var(--radius)) 0; 331 + } 332 + 333 + /* 334 + Zoom fix to have straight lines in treeview 335 + Zoom level and dpi resolution: 336 + - 175%: 336dpi 337 + - 150%: 288dpi 338 + - 110%: 212dpi 339 + - 100%: 192dpi 340 + - 90%: 173dpi 341 + - 80%: 154dpi 342 + */ 343 + @media (resolution <= 154dpi) { 344 + :root{ 345 + --tree-zoom-fix: -0.6px; 346 + } 347 + } 348 + @media (155dpi <= resolution < 192dpi) { 349 + :root{ 350 + --tree-zoom-fix: -0.7px; 351 + } 352 + } 353 + @media (192dpi <= resolution < 336dpi) { 354 + :root{ 355 + --tree-zoom-fix: -1px; 356 + } 357 + } 358 + @media (336dpi <= resolution) { 359 + :root{ 360 + --tree-zoom-fix: -0.9px; 361 + } 362 + }
+63 -53
index.html
··· 1 1 <!DOCTYPE html> 2 - <html> 2 + <html data-theme="dark"> 3 3 <head> 4 - <meta charset="US-ASCII"> 4 + <meta charset="UTF-8"> 5 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 + <meta name="theme-color" content="#0d1116" media="(prefers-color-scheme: dark)"> 7 + <meta name="theme-color" content="#C0C0C0" media="(prefers-color-scheme: light)"> 6 8 <title>ASN.1 JavaScript decoder</title> 7 - <link rel="stylesheet" href="index.css" type="text/css" id="theme-link"> 9 + <link rel="stylesheet" href="index.css" type="text/css"> 10 + <link rel="icon" type="image/svg+xml" sizes="192x192" href="favicon.svg"> 8 11 </head> 9 12 <body> 10 - <header style="display:flex; flex: nowrap"> 11 - <div style="flex: auto"> 13 + <div id="contextmenu"> 14 + <button id="btnCopyHex">Copy hex dump</button> 15 + <button id="btnCopyB64">Copy Base64</button> 16 + <button id="btnCopyTree">Copy subtree</button> 17 + <button id="btnCopyValue">Copy value</button> 18 + </div> 19 + <header> 20 + <div class="title"> 12 21 <h1>ASN.1 JavaScript decoder</h1> 13 22 </div> 14 - <div style="display: flex; align-items: center; padding-right: 10px;"> 15 - <select id="theme-select"> 16 - <option value="os">OS Theme</option> 17 - <option value="dark">Dark Theme</option> 18 - <option value="light">Light Theme</option> 19 - </select> 23 + <div class="menu"> 24 + <form> 25 + <input id="butClear" type="button" value="clear"> 26 + <select id="theme-select"> 27 + <option value="os">OS Theme</option> 28 + <option value="dark">Dark Theme</option> 29 + <option value="light">Light Theme</option> 30 + </select> 31 + </form> 20 32 </div> 21 - 22 33 </header> 23 34 <div id="main-page"> 24 - <div style="position: relative; padding-bottom: 1em;"> 25 - <div id="dump" style="position: absolute; right: 0px;"></div> 35 + <div> 36 + <div id="dump"></div> 26 37 <div id="tree"></div> 27 38 </div> 28 - <br> 29 39 <form> 30 - <textarea id="area" style="width: 100%;" rows="8"></textarea> 40 + <textarea id="area" rows="8" placeholder="Paste hex or base64 or PEM encoded ASN.1 BER or DER structures here, or load a file."></textarea> 31 41 <br> 32 42 <br> 33 43 <label title="can be slow with big files"><input type="checkbox" id="wantHex" checked="checked"> with hex dump</label> 44 + <label title="can be slow with big files"><input type="checkbox" id="trimHex" checked="checked"> trim big chunks</label> 45 + <label title="can be slow with big files"><input type="checkbox" id="wantDef" checked="checked"> with definitions</label> 34 46 <input id="butDecode" type="button" value="decode"> 35 - <input id="butClear" type="button" value="clear"> 36 47 <br><br> 37 48 <table> 38 - <tr> 39 - <td> 40 - <input type="file" id="file"> 41 - </td> 42 - <td>&nbsp;</td> 43 - <td> 44 - <div>Examples: 45 - <select id="examples"> 46 - <option value="sig-p256-der.p7m">PKCS#7/CMS attached signature (DER)</option> 47 - <option value="sig-p256-ber.p7m">PKCS#7/CMS attached signature (BER)</option> 48 - <option value="sig-rsa1024-sha1.p7s">PKCS#7/CMS detached signature (old)</option> 49 - <option value="letsencrypt-x3.cer">X.509 certificate: Let's Encrypt X3</option> 50 - <option value="ed25519.cer">X.509 certificate: ed25519 (RFC 8410)</option> 51 - </select> 52 - <input id="butExample" type="button" value="load example"> 53 - </div> 54 - </td> 55 - </tr> 49 + <tr><td>Drag or load file:</td><td><input type="file" id="file"></td></tr> 50 + <tr id="rowExamples"><td>Load examples:</td><td> 51 + <select id="examples"> 52 + <option value="sig-p256-der.p7m">PKCS#7/CMS attached signature (DER)</option> 53 + <option value="sig-p256-ber.p7m">PKCS#7/CMS attached signature (BER)</option> 54 + <option value="sig-rsa1024-sha1.p7s">PKCS#7/CMS detached signature (old)</option> 55 + <option value="cms-password.p7m">PKCS#7/CMS encrypted with password</option> 56 + <option value="letsencrypt-x3.cer">X.509 certificate: Let's Encrypt X3</option> 57 + <option value="ed25519.cer">X.509 certificate: ed25519 (RFC 8410)</option> 58 + <option value="pkcs1.pem">PKCS#1 RSA key (RFC 8017)</option> 59 + <option value="pkcs8-rsa.pem">PKCS#8 RSA key (RFC 5208)</option> 60 + <option value="pkcs10.pem">PKCS#10 certification request (RFC 2986)</option> 61 + <option value="crl-rfc5280.b64">CRL example (RFC 5280)</option> 62 + <option value="cmpv2.b64">CMP PKI message (RFC 4210)</option> 63 + <option value="ldapmessage.b64">LDAP message (RFC 4511)</option> 64 + <option value="timestamp-req.b64">TimeStamp request (RFC 3161)</option> 65 + </select> 66 + <input id="butExample" type="button" value="load"><br> 67 + </td></tr> 68 + <tr><td>Definitions:</td><td><select id="definitions"></select></td></tr> 56 69 </table> 57 - <br> 58 70 </form> 59 71 <br> 60 72 </div> 61 73 <div id="help"> 62 74 <h2>Instructions</h2> 63 75 <p>This page contains a JavaScript generic ASN.1 parser that can decode any valid ASN.1 DER or BER structure whether Base64-encoded (raw base64, PEM armoring and <span class="tt">begin-base64</span> are recognized) or Hex-encoded. </p> 64 - <p>This tool can be used online at the address <a href="http://lapo.it/asn1js/"><span class="tt">http://lapo.it/asn1js/</span></a> or offline, unpacking <a href="http://lapo.it/asn1js/asn1js.zip">the ZIP file</a> in a directory and opening <span class="tt">index.html</span> in a browser</p> 76 + <p>This tool can be used online at the address <a href="https://asn1js.eu/"><span class="tt">https://asn1js.eu/</span></a> or offline, unpacking <a href="https://asn1js.eu/asn1js.zip">the ZIP file</a> in a directory and opening <span class="tt">index-local.html</span> in a browser.</p> 65 77 <p>On the left of the page will be printed a tree representing the hierarchical structure, on the right side an hex dump will be shown. <br> 66 78 Hovering on the tree highlights ancestry (the hovered node and all its ancestors get colored) and the position of the hovered node gets highlighted in the hex dump (with header and content in a different colors). <br> 67 79 Clicking a node in the tree will hide its sub-nodes (collapsed nodes can be noticed because they will become <i>italic</i>).</p> 80 + <p><b>WARNING:</b> starting from 2024-03-28 this website is using ES6 features (and modules), which can break it for <a href="https://caniuse.com/es6-module">very old browsers</a>.<br> 81 + You can access <a href="https://rawcdn.githack.com/lapo-luchini/asn1js/1.2.4/index.html">last version before ES6 on githack</a> (which <a href="https://www.browserling.com/browse/win7/ie11/https://rawcdn.githack.com/lapo-luchini/asn1js/1.2.4/index.html">still works on IE11</a>).</p> 68 82 <div class="license"> 69 83 <h3>Copyright</h3> 70 - <div class="ref"><p class="hidden"> 84 + <div><p class="hidden"> 71 85 ASN.1 JavaScript decoder<br> 72 - Copyright &copy; 2008-2022 Lapo Luchini &lt;lapo@lapo.it&gt;<br> 86 + Copyright &copy; 2008-2025 Lapo Luchini <a href="mailto:lapo@lapo.it?subject=ASN1js">&lt;lapo@lapo.it&gt;</a><br> 73 87 <br> 74 88 Permission to use, copy, modify, and/or distribute this software for any 75 89 purpose with or without fee is hereby granted, provided that the above ··· 83 97 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 84 98 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 85 99 </p></div> 86 - <p>ASN.1 JavaScript decoder Copyright &copy; 2008-2023 <a href="http://lapo.it/">Lapo Luchini</a>; released as <a href="http://opensource.org/licenses/isc-license.txt">opensource</a> under the <a href="http://en.wikipedia.org/wiki/ISC_licence">ISC license</a>.</p> 100 + <p>ASN.1 JavaScript decoder Copyright &copy; 2008-2025 <a href="https://lapo.it/">Lapo Luchini</a>; released as <a href="https://opensource.org/licenses/isc-license.txt">opensource</a> under the <a href="https://en.wikipedia.org/wiki/ISC_licence">ISC license</a>.</p> 87 101 </div> 88 - <p><span class="tt">OBJECT&nbsp;IDENTIFIER</span> values are recognized using data taken from Peter Gutmann's <a href="http://www.cs.auckland.ac.nz/~pgut001/#standards">dumpasn1</a> program.</p> 102 + <p><span class="tt">OBJECT&nbsp;IDENTIFIER</span> values are recognized using data taken from Peter Gutmann's <a href="https://www.cs.auckland.ac.nz/~pgut001/#standards">dumpasn1</a> program.</p> 89 103 <h3>Links</h3> 90 104 <ul> 91 - <li><a href="http://lapo.it/asn1js/">official website</a></li> 92 - <li><a href="http://asn1js.eu/">dedicated domain</a></li> 93 - <li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a></li> 105 + <li><a href="https://asn1js.eu/">official website</a></li> 106 + <li><a href="https://lapo.it/asn1js/">alternate website</a></li> 107 + <li><a href="https://asn1js.eu/index-local.html">single-file version working locally</a> (just save this link)</li> 108 + <li>previous versions on githack: <select id="tags"><option>[select tag]</option></select></li> 109 + <li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a> (currently offline)</li> 94 110 <li><a href="https://github.com/lapo-luchini/asn1js">github mirror</a></li> 95 - <li><a href="https://www.ohloh.net/p/asn1js">Ohloh code stats</a></li> 111 + <li><a href="https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md">ChangeLog on GitHub</a></li> 112 + <li><a href="https://www.openhub.net/p/asn1js">OpenHub code stats</a></li> 96 113 </ul> 97 114 </div> 98 - 99 - <script type="text/javascript" src="hex.js"></script> 100 - <script type="text/javascript" src="base64.js"></script> 101 - <script type="text/javascript" src="oids.js"></script> 102 - <script type="text/javascript" src="int10.js"></script> 103 - <script type="text/javascript" src="asn1.js"></script> 104 - <script type="text/javascript" src="dom.js"></script> 105 - <script type="text/javascript" src="index.js"></script> 115 + <script type="module" src="index.js"></script> 106 116 </body> 107 117 </html>
+178 -157
index.js
··· 1 - (typeof define != 'undefined' 2 - ? define 3 - : function (factory) { 4 - 'use strict'; 5 - if (typeof module == 'object') 6 - factory(function (name) { 7 - return require(name); 8 - }); 9 - else 10 - factory(function (name) { 11 - return window[name.substring(2)]; 12 - }); 13 - })(function (require) { 14 - 'use strict'; 15 - 16 - // set dark theme depending on os settings 17 - const themeSelect = document.querySelector('#theme-select'); 18 - function setTheme() { 19 - const storedTheme = localStorage.getItem('theme'); 20 - let theme = 'os'; 21 - if (storedTheme) { 22 - theme = storedTheme; 23 - } 24 - 25 - themeSelect.value = theme; 26 - 27 - if (theme == 'os') { 28 - const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)'); 29 - if (prefersDarkScheme.matches) { 30 - theme = 'dark'; 31 - } else { 32 - theme = 'light'; 33 - } 34 - } 35 - 36 - const themeLink = document.querySelector('#theme-link'); 37 - if (theme == 'dark') { 38 - themeLink.href = 'index-dark.css'; 39 - } else { 40 - themeLink.href = 'index.css'; 41 - } 42 - } 43 - setTheme(); 44 - themeSelect.addEventListener('change', function () { 45 - const selectedTheme = themeSelect.value; 46 - localStorage.setItem('theme', selectedTheme); 47 - setTheme(); 48 - }); 1 + import './theme.js'; 2 + import { ASN1DOM } from './dom.js'; 3 + import { Base64 } from './base64.js'; 4 + import { Hex } from './hex.js'; 5 + import { Defs } from './defs.js'; 6 + import { tags } from './tags.js'; 49 7 50 - var ASN1 = require('./asn1'), 51 - Base64 = require('./base64'), 52 - Hex = require('./hex'), 8 + const 53 9 maxLength = 10240, 54 10 reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/, 55 11 tree = id('tree'), 56 12 dump = id('dump'), 57 - wantHex = id('wantHex'), 13 + wantHex = checkbox('wantHex'), 14 + trimHex = checkbox('trimHex'), 15 + wantDef = checkbox('wantDef'), 58 16 area = id('area'), 59 17 file = id('file'), 60 18 examples = id('examples'), 61 - hash = null; 19 + selectDefs = id('definitions'), 20 + selectTag = id('tags'); 62 21 63 - require('./dom'); // side effect: augment ASN1 64 - if (!window.console || !window.console.log) 65 - // IE8 with closed developer tools 22 + let hash = null; 23 + 24 + if (!window.console || !window.console.log) // IE8 with closed developer tools 66 25 window.console = { log: function () {} }; 67 - function id(elem) { 26 + function id(elem) { 68 27 return document.getElementById(elem); 69 - } 70 - function text(el, string) { 28 + } 29 + function text(el, string) { 71 30 if ('textContent' in el) el.textContent = string; 72 31 else el.innerText = string; 73 - } 74 - function decode(der, offset) { 75 - offset = offset || 0; 32 + } 33 + function checkbox(name) { 34 + const el = id(name); 35 + const cfg = localStorage.getItem(name); 36 + if (cfg === 'false') 37 + el.checked = false; 38 + el.onchange = () => localStorage.setItem(name, el.checked); 39 + return el; 40 + } 41 + function show(asn1) { 76 42 tree.innerHTML = ''; 77 43 dump.innerHTML = ''; 44 + let ul = document.createElement('ul'); 45 + ul.className = 'treecollapse'; 46 + tree.appendChild(ul); 47 + ul.appendChild(asn1.toDOM()); 48 + if (wantHex.checked) dump.appendChild(asn1.toHexDOM(undefined, trimHex.checked)); 49 + } 50 + export function decode(der, offset) { 51 + offset = offset || 0; 78 52 try { 79 - var asn1 = ASN1.decode(der, offset); 80 - tree.appendChild(asn1.toDOM()); 81 - if (wantHex.checked) dump.appendChild(asn1.toHexDOM()); 82 - var b64 = der.length < maxLength ? asn1.toB64String() : ''; 83 - if (area.value === '') area.value = Base64.pretty(b64); 84 - try { 85 - window.location.hash = hash = '#' + b64; 86 - } catch (e) { 87 - // fails with "Access Denied" on IE with URLs longer than ~2048 chars 88 - window.location.hash = hash = '#'; 89 - } 90 - var endOffset = asn1.posEnd(); 91 - if (endOffset < der.length) { 92 - var p = document.createElement('p'); 93 - p.innerText = 'Input contains ' + (der.length - endOffset) + ' more bytes to decode.'; 94 - var button = document.createElement('button'); 95 - button.innerText = 'try to decode'; 96 - button.onclick = function () { 97 - decode(der, endOffset); 98 - }; 99 - p.appendChild(button); 100 - tree.insertBefore(p, tree.firstChild); 101 - } 53 + const asn1 = ASN1DOM.decode(der, offset); 54 + if (wantDef.checked) { 55 + selectDefs.innerHTML = ''; 56 + const types = Defs.commonTypes 57 + .map(type => { 58 + const stats = Defs.match(asn1, type); 59 + return { type, match: stats.recognized / stats.total }; 60 + }) 61 + .sort((a, b) => b.match - a.match); 62 + for (const t of types) { 63 + t.element = document.createElement('option'); 64 + t.element.innerText = (t.match * 100).toFixed(1) + '% ' + t.type.description; 65 + selectDefs.appendChild(t.element); 66 + } 67 + let not = document.createElement('option'); 68 + not.innerText = 'no definition'; 69 + selectDefs.appendChild(not); 70 + Defs.match(asn1, types[0].type); 71 + selectDefs.onchange = () => { 72 + for (const t of types) { 73 + if (t.element == selectDefs.selectedOptions[0]) { 74 + Defs.match(asn1, t.type); 75 + show(asn1); 76 + return; 77 + } 78 + } 79 + Defs.match(asn1, null); 80 + show(asn1); 81 + }; 82 + } else 83 + selectDefs.innerHTML = '<option>no definition</option>'; 84 + show(asn1); 85 + let b64 = der.length < maxLength ? asn1.toB64String() : ''; 86 + if (area.value === '') area.value = Base64.pretty(b64); 87 + try { 88 + window.location.hash = hash = '#' + b64; 89 + } catch (ignore) { 90 + // fails with "Access Denied" on IE with URLs longer than ~2048 chars 91 + window.location.hash = hash = '#'; 92 + } 93 + let endOffset = asn1.posEnd(); 94 + if (endOffset < der.length) { 95 + let p = document.createElement('p'); 96 + p.innerText = 'Input contains ' + (der.length - endOffset) + ' more bytes to decode.'; 97 + let button = document.createElement('button'); 98 + button.innerText = 'try to decode'; 99 + button.onclick = function () { 100 + decode(der, endOffset); 101 + }; 102 + p.appendChild(button); 103 + tree.insertBefore(p, tree.firstChild); 104 + } 102 105 } catch (e) { 103 - text(tree, e); 106 + text(tree, e); 104 107 } 105 - } 106 - function decodeText(val) { 108 + } 109 + export function decodeText(val) { 107 110 try { 108 - var der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val); 109 - decode(der); 111 + let der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val); 112 + decode(der); 110 113 } catch (e) { 111 - text(tree, e); 112 - dump.innerHTML = ''; 114 + text(tree, e); 115 + dump.innerHTML = ''; 113 116 } 114 - } 115 - function decodeBinaryString(str) { 116 - var der; 117 + } 118 + export function decodeBinaryString(str) { 119 + let der; 117 120 try { 118 - if (reHex.test(str)) der = Hex.decode(str); 119 - else if (Base64.re.test(str)) der = Base64.unarmor(str); 120 - else der = str; 121 - decode(der); 122 - } catch (e) { 123 - text(tree, 'Cannot decode file.'); 124 - dump.innerHTML = ''; 121 + if (reHex.test(str)) der = Hex.decode(str); 122 + else if (Base64.re.test(str)) der = Base64.unarmor(str); 123 + else der = str; 124 + decode(der); 125 + } catch (ignore) { 126 + text(tree, 'Cannot decode file.'); 127 + dump.innerHTML = ''; 125 128 } 126 - } 127 - // set up buttons 128 - id('butDecode').onclick = function () { 129 - decodeText(area.value); 130 - }; 131 - id('butClear').onclick = function () { 132 - area.value = ''; 133 - file.value = ''; 134 - tree.innerHTML = ''; 135 - dump.innerHTML = ''; 136 - hash = window.location.hash = ''; 137 - }; 138 - id('butExample').onclick = function () { 139 - console.log('Loading example:', examples.value); 140 - var request = new XMLHttpRequest(); 141 - request.open('GET', 'examples/' + examples.value, true); 142 - request.onreadystatechange = function () { 143 - if (this.readyState !== 4) return; 144 - if (this.status >= 200 && this.status < 400) { 145 - area.value = this.responseText; 146 - decodeText(this.responseText); 147 - } else { 148 - console.log('Error loading example.'); 149 - } 150 - }; 151 - request.send(); 152 - }; 153 - // this is only used if window.FileReader 154 - function read(f) { 129 + } 130 + // set up buttons 131 + const butClickHandlers = { 132 + butDecode: () => { 133 + decodeText(area.value); 134 + }, 135 + butClear: () => { 136 + area.value = ''; 137 + file.value = ''; 138 + tree.innerHTML = ''; 139 + dump.innerHTML = ''; 140 + selectDefs.innerHTML = ''; 141 + hash = window.location.hash = ''; 142 + }, 143 + butExample: () => { 144 + console.log('Loading example:', examples.value); 145 + let request = new XMLHttpRequest(); 146 + request.open('GET', 'examples/' + examples.value, true); 147 + request.onreadystatechange = function () { 148 + if (this.readyState !== 4) return; 149 + if (this.status >= 200 && this.status < 400) { 150 + area.value = this.responseText; 151 + decodeText(this.responseText); 152 + } else { 153 + console.log('Error loading example.'); 154 + } 155 + }; 156 + request.send(); 157 + }, 158 + }; 159 + for (const [name, onClick] of Object.entries(butClickHandlers)) { 160 + let elem = id(name); 161 + if (elem) 162 + elem.onclick = onClick; 163 + } 164 + // this is only used if window.FileReader 165 + function read(f) { 155 166 area.value = ''; // clear text area, will get b64 content 156 - var r = new FileReader(); 167 + let r = new FileReader(); 157 168 r.onloadend = function () { 158 - if (r.error) alert("Your browser couldn't read the specified file (error code " + r.error.code + ').'); 159 - else decodeBinaryString(r.result); 169 + if (r.error) alert("Your browser couldn't read the specified file (error code " + r.error.code + ').'); 170 + else decodeBinaryString(r.result); 160 171 }; 161 172 r.readAsBinaryString(f); 162 - } 163 - function load() { 173 + } 174 + function load() { 164 175 if (file.files.length === 0) alert('Select a file to load first.'); 165 176 else read(file.files[0]); 166 - } 167 - function loadFromHash() { 177 + } 178 + function loadFromHash() { 168 179 if (window.location.hash && window.location.hash != hash) { 169 - hash = window.location.hash; 170 - // Firefox is not consistent with other browsers and returns an 171 - // already-decoded hash string so we risk double-decoding here, 172 - // but since % is not allowed in base64 nor hexadecimal, it's ok 173 - var val = decodeURIComponent(hash.substr(1)); 174 - if (val.length) decodeText(val); 180 + hash = window.location.hash; 181 + // Firefox is not consistent with other browsers and returns an 182 + // already-decoded hash string so we risk double-decoding here, 183 + // but since % is not allowed in base64 nor hexadecimal, it's ok 184 + let val = decodeURIComponent(hash.substr(1)); 185 + if (val.length) decodeText(val); 175 186 } 176 - } 177 - function stop(e) { 187 + } 188 + function stop(e) { 178 189 e.stopPropagation(); 179 190 e.preventDefault(); 180 - } 181 - function dragAccept(e) { 191 + } 192 + function dragAccept(e) { 182 193 stop(e); 183 194 if (e.dataTransfer.files.length > 0) read(e.dataTransfer.files[0]); 184 - } 185 - // main 186 - if ('onhashchange' in window) window.onhashchange = loadFromHash; 187 - loadFromHash(); 188 - document.ondragover = stop; 189 - document.ondragleave = stop; 190 - if ('FileReader' in window && 'readAsBinaryString' in new FileReader()) { 195 + } 196 + // main 197 + if ('onhashchange' in window) window.onhashchange = loadFromHash; 198 + loadFromHash(); 199 + document.ondragover = stop; 200 + document.ondragleave = stop; 201 + if ('FileReader' in window && 'readAsBinaryString' in new FileReader()) { 191 202 file.style.display = 'block'; 192 203 file.onchange = load; 193 204 document.ondrop = dragAccept; 194 - } 195 - }); 205 + } 206 + for (let tag in tags) { 207 + let date = tags[tag]; 208 + let el = document.createElement('option'); 209 + el.value = tag; 210 + el.innerText = date + ' ' + tag; 211 + selectTag.appendChild(el); 212 + } 213 + selectTag.onchange = function (ev) { 214 + let tag = ev.target.selectedOptions[0].value; 215 + window.location.href = 'https://rawcdn.githack.com/lapo-luchini/asn1js/' + tag + '/index.html'; 216 + };
-113
int10.js
··· 1 - // Big integer base-10 printing library 2 - // Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it> 3 - 4 - // Permission to use, copy, modify, and/or distribute this software for any 5 - // purpose with or without fee is hereby granted, provided that the above 6 - // copyright notice and this permission notice appear in all copies. 7 - // 8 - // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 - // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 - // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 - // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 - // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 - // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 - // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 - 16 - (typeof define != 'undefined' ? define : function (factory) { 'use strict'; 17 - if (typeof module == 'object') module.exports = factory(); 18 - else window.int10 = factory(); 19 - })(function () { 20 - "use strict"; 21 - 22 - var max = 10000000000000; // biggest 10^n integer that can still fit 2^53 when multiplied by 256 23 - 24 - /** 25 - * Arbitrary length base-10 value. 26 - * @param {number} value - Optional initial value (will be 0 otherwise). 27 - */ 28 - function Int10(value) { 29 - this.buf = [+value || 0]; 30 - } 31 - 32 - /** 33 - * Multiply value by m and add c. 34 - * @param {number} m - multiplier, must be < =256 35 - * @param {number} c - value to add 36 - */ 37 - Int10.prototype.mulAdd = function (m, c) { 38 - // assert(m <= 256) 39 - var b = this.buf, 40 - l = b.length, 41 - i, t; 42 - for (i = 0; i < l; ++i) { 43 - t = b[i] * m + c; 44 - if (t < max) 45 - c = 0; 46 - else { 47 - c = 0|(t / max); 48 - t -= c * max; 49 - } 50 - b[i] = t; 51 - } 52 - if (c > 0) 53 - b[i] = c; 54 - }; 55 - 56 - /** 57 - * Subtract value. 58 - * @param {number} c - value to subtract 59 - */ 60 - Int10.prototype.sub = function (c) { 61 - var b = this.buf, 62 - l = b.length, 63 - i, t; 64 - for (i = 0; i < l; ++i) { 65 - t = b[i] - c; 66 - if (t < 0) { 67 - t += max; 68 - c = 1; 69 - } else 70 - c = 0; 71 - b[i] = t; 72 - } 73 - while (b[b.length - 1] === 0) 74 - b.pop(); 75 - }; 76 - 77 - /** 78 - * Convert to decimal string representation. 79 - * @param {*} base - optional value, only value accepted is 10 80 - */ 81 - Int10.prototype.toString = function (base) { 82 - if ((base || 10) != 10) 83 - throw 'only base 10 is supported'; 84 - var b = this.buf, 85 - s = b[b.length - 1].toString(); 86 - for (var i = b.length - 2; i >= 0; --i) 87 - s += (max + b[i]).toString().substring(1); 88 - return s; 89 - }; 90 - 91 - /** 92 - * Convert to Number value representation. 93 - * Will probably overflow 2^53 and thus become approximate. 94 - */ 95 - Int10.prototype.valueOf = function () { 96 - var b = this.buf, 97 - v = 0; 98 - for (var i = b.length - 1; i >= 0; --i) 99 - v = v * max + b[i]; 100 - return v; 101 - }; 102 - 103 - /** 104 - * Return value as a simple Number (if it is <= 10000000000000), or return this. 105 - */ 106 - Int10.prototype.simplify = function () { 107 - var b = this.buf; 108 - return (b.length == 1) ? b[0] : this; 109 - }; 110 - 111 - return Int10; 112 - 113 - });
+241 -68
oids.js
··· 2 2 // which is made by Peter Gutmann and whose license states: 3 3 // You can use this code in whatever way you want, 4 4 // as long as you don't try to claim you wrote it. 5 - (typeof define != 'undefined' ? define : function (factory) { 'use strict'; 6 - if (typeof module == 'object') module.exports = factory(); 7 - else window.oids = factory(); 8 - })(function () { 9 - 'use strict'; 10 - return { 5 + export const oids = { 11 6 "0.2.262.1.10": { "d": "Telesec", "c": "Deutsche Telekom" }, 12 7 "0.2.262.1.10.0": { "d": "extension", "c": "Telesec" }, 13 8 "0.2.262.1.10.1": { "d": "mechanism", "c": "Telesec" }, ··· 295 290 "0.4.0.127.0.7.4.1.1.2": { "d": "bsiCertReqMsgswithOuterSignature", "c": "BSI TR-03109" }, 296 291 "0.4.0.127.0.7.4.1.1.3": { "d": "bsiAuthorizedCertReqMsgs", "c": "BSI TR-03109" }, 297 292 "0.4.0.127.0.7.4.1.2.2": { "d": "bsiSignedRevReqs", "c": "BSI TR-03109" }, 298 - "0.4.0.1862": { "d": "etsiQcsProfile", "c": "ETSI TS 101 862 qualified certificates" }, 299 - "0.4.0.1862.1": { "d": "etsiQcs", "c": "ETSI TS 101 862 qualified certificates" }, 300 - "0.4.0.1862.1.1": { "d": "etsiQcsCompliance", "c": "ETSI TS 101 862 qualified certificates" }, 301 - "0.4.0.1862.1.2": { "d": "etsiQcsLimitValue", "c": "ETSI TS 101 862 qualified certificates" }, 302 - "0.4.0.1862.1.3": { "d": "etsiQcsRetentionPeriod", "c": "ETSI TS 101 862 qualified certificates" }, 303 - "0.4.0.1862.1.4": { "d": "etsiQcsQcSSCD", "c": "ETSI TS 101 862 qualified certificates" }, 293 + "0.4.0.1862": { "d": "etsiQcsProfile", "c": "ETSI TS 101 862 Qualified Certificates" }, 294 + "0.4.0.1862.1": { "d": "etsiQcs", "c": "ETSI TS 101 862 Qualified Certificates" }, 295 + "0.4.0.1862.1.1": { "d": "etsiQcsCompliance", "c": "ETSI TS 101 862 Qualified Certificates" }, 296 + "0.4.0.1862.1.2": { "d": "etsiQcsLimitValue", "c": "ETSI TS 101 862 Qualified Certificates" }, 297 + "0.4.0.1862.1.3": { "d": "etsiQcsRetentionPeriod", "c": "ETSI TS 101 862 Qualified Certificates" }, 298 + "0.4.0.1862.1.4": { "d": "etsiQcsQcSSCD", "c": "ETSI TS 101 862 Qualified Certificates" }, 299 + "0.4.0.1862.1.5": { "d": "etsiQcsQcPDS", "c": "ETSI TS 101 862 Qualified Certificates" }, 300 + "0.4.0.1862.1.6": { "d": "etsiQcsQcType", "c": "ETSI TS 101 862 Qualified Certificates" }, 301 + "0.4.0.1862.1.6.1": { "d": "etsiQcsQctEsign", "c": "ETSI TS 101 862 Qualified Certificates" }, 302 + "0.4.0.1862.1.6.2": { "d": "etsiQcsQctEseal", "c": "ETSI TS 101 862 Qualified Certificates" }, 303 + "0.4.0.1862.1.6.3": { "d": "etsiQcsQctWeb", "c": "ETSI TS 101 862 Qualified Certificates" }, 304 + "0.4.0.2042.1.1": { "d": "normalisedCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" }, 305 + "0.4.0.2042.1.2": { "d": "normalisedCertificatePolicyPlus", "c": "ETSI TS 102 042 Certificate Policies" }, 306 + "0.4.0.2042.1.3": { "d": "lightweightCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" }, 307 + "0.4.0.2042.1.4": { "d": "evCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" }, 308 + "0.4.0.2042.1.5": { "d": "evCertificatePolicyPlus", "c": "ETSI TS 102 042 Certificate Policies" }, 309 + "0.4.0.2042.1.6": { "d": "dvCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" }, 310 + "0.4.0.2042.1.7": { "d": "ovCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" }, 311 + "0.4.0.194112.1.0": { "d": "qcpNatural", "c": "EU Qualified Certificate Policy" }, 312 + "0.4.0.194112.1.1": { "d": "qcpLegal", "c": "EU Qualified Certificate Policy" }, 313 + "0.4.0.194112.1.2": { "d": "qcpNaturalQscd", "c": "EU Qualified Certificate Policy" }, 314 + "0.4.0.194112.1.3": { "d": "qcpLegalQscd", "c": "EU Qualified Certificate Policy" }, 315 + "0.4.0.194112.1.4": { "d": "qcpWeb", "c": "EU Qualified Certificate Policy" }, 316 + "0.4.0.194121.1.1": { "d": "qcsSemanticsIdNatural", "c": "EU Qualified Certificate Identifier" }, 317 + "0.4.0.194121.1.2": { "d": "qcsSemanticsIdLegal", "c": "EU Qualified Certificate Identifier" }, 318 + "0.4.0.194121.1.3": { "d": "qcsSemanticsIdeIDASNatural", "c": "EU Qualified Certificate Identifier" }, 319 + "0.4.0.194121.1.4": { "d": "qcsSemanticsIdeIDASLegal", "c": "EU Qualified Certificate Identifier" }, 304 320 "0.9.2342.19200300.100.1.1": { "d": "userID", "c": "Some oddball X.500 attribute collection" }, 305 321 "0.9.2342.19200300.100.1.3": { "d": "rfc822Mailbox", "c": "Some oddball X.500 attribute collection" }, 306 322 "0.9.2342.19200300.100.1.25": { "d": "domainComponent", "c": "Men are from Mars, this OID is from Pluto" }, ··· 376 392 "1.2.36.68980861.1.1.11": { "d": "signetIntraNet", "c": "Signet CA" }, 377 393 "1.2.36.68980861.1.1.20": { "d": "signetPolicy", "c": "Signet CA" }, 378 394 "1.2.36.75878867.1.100.1.1": { "d": "certificatesAustraliaPolicy", "c": "Certificates Australia CA" }, 395 + "1.2.112.0.2.0.34.101.45.2.1": { "d": "bignPubkey", "c": "Belarus STB 34.101.45" }, 396 + "1.2.112.0.2.0.34.101.45.3.1": { "d": "bignParamB1", "c": "Belarus STB 34.101.45" }, 397 + "1.2.112.0.2.0.34.101.45.3.2": { "d": "bignParamB2", "c": "Belarus STB 34.101.45" }, 398 + "1.2.112.0.2.0.34.101.45.3.3": { "d": "bignParamB3", "c": "Belarus STB 34.101.45" }, 399 + "1.2.112.0.2.0.34.101.45.11": { "d": "bignWithHSpec", "c": "Belarus STB 34.101.45" }, 400 + "1.2.112.0.2.0.34.101.45.12": { "d": "bignWithHBelt", "c": "Belarus STB 34.101.45" }, 379 401 "1.2.156.10197.1": { "d": "gmtCryptographicAlgorithm", "c": "China GM Standards Committee" }, 380 402 "1.2.156.10197.1.100": { "d": "gmtBlockCipher", "c": "China GM Standards Committee" }, 381 403 "1.2.156.10197.1.102": { "d": "sm1Cipher", "c": "China GM Standards Committee" }, ··· 552 574 "1.2.643.7.1.1.3.3": { "d": "gost2012Signature512", "c": "GOST R 34.10-2012 512 bit signature" }, 553 575 "1.2.643.7.1.1.6.1": { "d": "cryptoProECDH256", "c": "CryptoPro ECC DH algorithm for GOST R 34.10-2012 256 bit key" }, 554 576 "1.2.643.7.1.1.6.2": { "d": "cryptoProECDH512", "c": "CryptoPro ECC DH algorithm for GOST R 34.10-2012 512 bit key" }, 577 + "1.2.643.100.113.1": { "d": "cryptoProClassSignToolKC1", "c": "CryptoPro GOST" }, 578 + "1.2.643.100.113.2": { "d": "cryptoProClassSignToolKC2", "c": "CryptoPro GOST" }, 579 + "1.2.643.100.113.3": { "d": "cryptoProClassSignToolKC3", "c": "CryptoPro GOST" }, 580 + "1.2.643.100.113.4": { "d": "cryptoProClassSignToolKB1", "c": "CryptoPro GOST" }, 581 + "1.2.643.100.113.5": { "d": "cryptoProClassSignToolKB2", "c": "CryptoPro GOST" }, 582 + "1.2.643.100.113.6": { "d": "cryptoProClassSignToolKA1", "c": "CryptoPro GOST" }, 555 583 "1.2.752.34.1": { "d": "seis-cp", "c": "SEIS Project" }, 556 584 "1.2.752.34.1.1": { "d": "SEIS high-assurance policyIdentifier", "c": "SEIS Project certificate policies" }, 557 585 "1.2.752.34.1.2": { "d": "SEIS GAK policyIdentifier", "c": "SEIS Project certificate policies" }, ··· 758 786 "1.2.840.113549.1.9.16.1.45": { "d": "cborSequence", "c": "S/MIME Content Types" }, 759 787 "1.2.840.113549.1.9.16.1.46": { "d": "animaCBORVoucher", "c": "S/MIME Content Types", "w": true }, 760 788 "1.2.840.113549.1.9.16.1.47": { "d": "geofeedCSVwithCRLF", "c": "S/MIME Content Types" }, 789 + "1.2.840.113549.1.9.16.1.48": { "d": "rpkiSignedChecklist", "c": "S/MIME Content Types" }, 790 + "1.2.840.113549.1.9.16.1.49": { "d": "rpkiASPA", "c": "S/MIME Content Types" }, 761 791 "1.2.840.113549.1.9.16.2": { "d": "authenticatedAttributes", "c": "S/MIME" }, 762 792 "1.2.840.113549.1.9.16.2.1": { "d": "receiptRequest", "c": "S/MIME Authenticated Attributes" }, 763 793 "1.2.840.113549.1.9.16.2.2": { "d": "securityLabel", "c": "S/MIME Authenticated Attributes" }, ··· 1125 1155 "1.2.840.113635.100.15.2": { "d": "appleCustomCertificateExtension2", "c": "Apple custom certificate extension" }, 1126 1156 "1.2.840.113635.100.15.3": { "d": "appleCustomCertificateExtension3", "c": "Apple custom certificate extension" }, 1127 1157 "1.3.6.1.4.1.311.2.1.4": { "d": "spcIndirectDataContext", "c": "Microsoft code signing" }, 1128 - "1.3.6.1.4.1.311.2.1.10": { "d": "spcAgencyInfo", "c": "Microsoft code signing. Also known as policyLink" }, 1158 + "1.3.6.1.4.1.311.2.1.10": { "d": "spcAgencyInfo", "c": "Microsoft code signing. Also assigned as policyLink" }, 1129 1159 "1.3.6.1.4.1.311.2.1.11": { "d": "spcStatementType", "c": "Microsoft code signing" }, 1130 1160 "1.3.6.1.4.1.311.2.1.12": { "d": "spcSpOpusInfo", "c": "Microsoft code signing" }, 1131 1161 "1.3.6.1.4.1.311.2.1.14": { "d": "certReqExtensions", "c": "Microsoft" }, ··· 1135 1165 "1.3.6.1.4.1.311.2.1.20": { "d": "spcJavaClassData (type 1)", "c": "Microsoft code signing. Formerly \"link extension\" aka \"glue extension\"" }, 1136 1166 "1.3.6.1.4.1.311.2.1.21": { "d": "individualCodeSigning", "c": "Microsoft" }, 1137 1167 "1.3.6.1.4.1.311.2.1.22": { "d": "commercialCodeSigning", "c": "Microsoft" }, 1138 - "1.3.6.1.4.1.311.2.1.25": { "d": "spcLink (type 2)", "c": "Microsoft code signing. Also known as \"glue extension\"" }, 1168 + "1.3.6.1.4.1.311.2.1.25": { "d": "spcLink (type 2)", "c": "Microsoft code signing. Also assigned as \"glue extension\"" }, 1139 1169 "1.3.6.1.4.1.311.2.1.26": { "d": "spcMinimalCriteriaInfo", "c": "Microsoft code signing" }, 1140 1170 "1.3.6.1.4.1.311.2.1.27": { "d": "spcFinancialCriteriaInfo", "c": "Microsoft code signing" }, 1141 - "1.3.6.1.4.1.311.2.1.28": { "d": "spcLink (type 3)", "c": "Microsoft code signing. Also known as \"glue extension\"" }, 1171 + "1.3.6.1.4.1.311.2.1.28": { "d": "spcLink (type 3)", "c": "Microsoft code signing. Also assigned as \"glue extension\"" }, 1142 1172 "1.3.6.1.4.1.311.2.1.29": { "d": "spcHashInfoObjID", "c": "Microsoft code signing" }, 1143 1173 "1.3.6.1.4.1.311.2.1.30": { "d": "spcSipInfoObjID", "c": "Microsoft code signing" }, 1144 1174 "1.3.6.1.4.1.311.2.2": { "d": "ctl", "c": "Microsoft CTL" }, ··· 1149 1179 "1.3.6.1.4.1.311.10.1": { "d": "certTrustList", "c": "Microsoft contentType" }, 1150 1180 "1.3.6.1.4.1.311.10.1.1": { "d": "sortedCtl", "c": "Microsoft contentType" }, 1151 1181 "1.3.6.1.4.1.311.10.2": { "d": "nextUpdateLocation", "c": "Microsoft" }, 1152 - "1.3.6.1.4.1.311.10.3.1": { "d": "certTrustListSigning", "c": "Microsoft enhanced key usage" }, 1153 - "1.3.6.1.4.1.311.10.3.2": { "d": "timeStampSigning", "c": "Microsoft enhanced key usage" }, 1154 - "1.3.6.1.4.1.311.10.3.3": { "d": "serverGatedCrypto", "c": "Microsoft enhanced key usage" }, 1182 + "1.3.6.1.4.1.311.10.3.1": { "d": "certTrustListSigning", "c": "Microsoft extended key usage" }, 1183 + "1.3.6.1.4.1.311.10.3.2": { "d": "timeStampSigning", "c": "Microsoft extended key usage" }, 1184 + "1.3.6.1.4.1.311.10.3.3": { "d": "serverGatedCrypto", "c": "Microsoft extended key usage" }, 1155 1185 "1.3.6.1.4.1.311.10.3.3.1": { "d": "serialized", "c": "Microsoft" }, 1156 - "1.3.6.1.4.1.311.10.3.4": { "d": "encryptedFileSystem", "c": "Microsoft enhanced key usage" }, 1157 - "1.3.6.1.4.1.311.10.3.5": { "d": "whqlCrypto", "c": "Microsoft enhanced key usage" }, 1158 - "1.3.6.1.4.1.311.10.3.6": { "d": "nt5Crypto", "c": "Microsoft enhanced key usage" }, 1159 - "1.3.6.1.4.1.311.10.3.7": { "d": "oemWHQLCrypto", "c": "Microsoft enhanced key usage" }, 1160 - "1.3.6.1.4.1.311.10.3.8": { "d": "embeddedNTCrypto", "c": "Microsoft enhanced key usage" }, 1161 - "1.3.6.1.4.1.311.10.3.9": { "d": "rootListSigner", "c": "Microsoft enhanced key usage" }, 1162 - "1.3.6.1.4.1.311.10.3.10": { "d": "qualifiedSubordination", "c": "Microsoft enhanced key usage" }, 1163 - "1.3.6.1.4.1.311.10.3.11": { "d": "keyRecovery", "c": "Microsoft enhanced key usage" }, 1164 - "1.3.6.1.4.1.311.10.3.12": { "d": "documentSigning", "c": "Microsoft enhanced key usage" }, 1165 - "1.3.6.1.4.1.311.10.3.13": { "d": "lifetimeSigning", "c": "Microsoft enhanced key usage" }, 1166 - "1.3.6.1.4.1.311.10.3.14": { "d": "mobileDeviceSoftware", "c": "Microsoft enhanced key usage" }, 1167 - "1.3.6.1.4.1.311.10.3.15": { "d": "smartDisplay", "c": "Microsoft enhanced key usage" }, 1168 - "1.3.6.1.4.1.311.10.3.16": { "d": "cspSignature", "c": "Microsoft enhanced key usage" }, 1169 - "1.3.6.1.4.1.311.10.3.4.1": { "d": "efsRecovery", "c": "Microsoft enhanced key usage" }, 1186 + "1.3.6.1.4.1.311.10.3.4": { "d": "encryptedFileSystem", "c": "Microsoft extended key usage" }, 1187 + "1.3.6.1.4.1.311.10.3.5": { "d": "whqlCrypto", "c": "Microsoft extended key usage" }, 1188 + "1.3.6.1.4.1.311.10.3.6": { "d": "nt5Crypto", "c": "Microsoft extended key usage" }, 1189 + "1.3.6.1.4.1.311.10.3.7": { "d": "oemWHQLCrypto", "c": "Microsoft extended key usage" }, 1190 + "1.3.6.1.4.1.311.10.3.8": { "d": "embeddedNTCrypto", "c": "Microsoft extended key usage" }, 1191 + "1.3.6.1.4.1.311.10.3.9": { "d": "rootListSigner", "c": "Microsoft extended key usage" }, 1192 + "1.3.6.1.4.1.311.10.3.10": { "d": "qualifiedSubordination", "c": "Microsoft extended 3key usage" }, 1193 + "1.3.6.1.4.1.311.10.3.11": { "d": "keyRecovery", "c": "Microsoft extended key usage" }, 1194 + "1.3.6.1.4.1.311.10.3.12": { "d": "documentSigning", "c": "Microsoft extended key usage" }, 1195 + "1.3.6.1.4.1.311.10.3.13": { "d": "lifetimeSigning", "c": "Microsoft extended key usage" }, 1196 + "1.3.6.1.4.1.311.10.3.14": { "d": "mobileDeviceSoftware", "c": "Microsoft extended key usage" }, 1197 + "1.3.6.1.4.1.311.10.3.15": { "d": "smartDisplay", "c": "Microsoft extended key usage" }, 1198 + "1.3.6.1.4.1.311.10.3.16": { "d": "cspSignature", "c": "Microsoft extended key usage" }, 1199 + "1.3.6.1.4.1.311.10.3.4.1": { "d": "efsRecovery", "c": "Microsoft extended key usage" }, 1170 1200 "1.3.6.1.4.1.311.10.4.1": { "d": "yesnoTrustAttr", "c": "Microsoft attribute" }, 1171 - "1.3.6.1.4.1.311.10.5.1": { "d": "drm", "c": "Microsoft enhanced key usage" }, 1172 - "1.3.6.1.4.1.311.10.5.2": { "d": "drmIndividualization", "c": "Microsoft enhanced key usage" }, 1173 - "1.3.6.1.4.1.311.10.6.1": { "d": "licenses", "c": "Microsoft enhanced key usage" }, 1174 - "1.3.6.1.4.1.311.10.6.2": { "d": "licenseServer", "c": "Microsoft enhanced key usage" }, 1201 + "1.3.6.1.4.1.311.10.5.1": { "d": "drm", "c": "Microsoft extended key usage" }, 1202 + "1.3.6.1.4.1.311.10.5.2": { "d": "drmIndividualization", "c": "Microsoft extended key usage" }, 1203 + "1.3.6.1.4.1.311.10.6.1": { "d": "licenses", "c": "Microsoft extended key usage" }, 1204 + "1.3.6.1.4.1.311.10.6.2": { "d": "licenseServer", "c": "Microsoft extended key usage" }, 1175 1205 "1.3.6.1.4.1.311.10.7.1": { "d": "keyidRdn", "c": "Microsoft attribute" }, 1176 1206 "1.3.6.1.4.1.311.10.8.1": { "d": "removeCertificate", "c": "Microsoft attribute" }, 1177 1207 "1.3.6.1.4.1.311.10.9.1": { "d": "crossCertDistPoints", "c": "Microsoft attribute" }, ··· 1197 1227 "1.3.6.1.4.1.311.17.3": { "d": "pkcs12ExtendedAttributes", "c": "Microsoft attribute" }, 1198 1228 "1.3.6.1.4.1.311.20.1": { "d": "autoEnrollCtlUsage", "c": "Microsoft" }, 1199 1229 "1.3.6.1.4.1.311.20.2": { "d": "enrollCerttypeExtension", "c": "Microsoft CAPICOM certificate template, V1" }, 1200 - "1.3.6.1.4.1.311.20.2.1": { "d": "enrollmentAgent", "c": "Microsoft enhanced key usage" }, 1201 - "1.3.6.1.4.1.311.20.2.2": { "d": "smartcardLogon", "c": "Microsoft enhanced key usage" }, 1202 - "1.3.6.1.4.1.311.20.2.3": { "d": "universalPrincipalName", "c": "Microsoft UPN" }, 1230 + "1.3.6.1.4.1.311.20.2.1": { "d": "enrollmentAgent", "c": "Microsoft extended key usage" }, 1231 + "1.3.6.1.4.1.311.20.2.2": { "d": "smartcardLogon", "c": "Microsoft extended key usage" }, 1232 + "1.3.6.1.4.1.311.20.2.3": { "d": "userPrincipalName", "c": "Microsoft UPN" }, 1203 1233 "1.3.6.1.4.1.311.20.3": { "d": "certManifold", "c": "Microsoft" }, 1204 - "1.3.6.1.4.1.311.21.1": { "d": "cAKeyCertIndexPair", "c": "Microsoft attribute. Also known as certsrvCaVersion" }, 1234 + "1.3.6.1.4.1.311.21.1": { "d": "cAKeyCertIndexPair", "c": "Microsoft attribute. Also assigned as certsrvCaVersion" }, 1205 1235 "1.3.6.1.4.1.311.21.2": { "d": "certSrvPreviousCertHash", "c": "Microsoft" }, 1206 1236 "1.3.6.1.4.1.311.21.3": { "d": "crlVirtualBase", "c": "Microsoft" }, 1207 1237 "1.3.6.1.4.1.311.21.4": { "d": "crlNextPublish", "c": "Microsoft" }, ··· 1222 1252 "1.3.6.1.4.1.311.21.21": { "d": "encryptedKeyHash", "c": "Microsoft attribute" }, 1223 1253 "1.3.6.1.4.1.311.21.22": { "d": "certsrvCrossCaVersion", "c": "Microsoft" }, 1224 1254 "1.3.6.1.4.1.311.25.1": { "d": "ntdsReplication", "c": "Microsoft" }, 1255 + "1.3.6.1.4.1.311.25.2": { "d": "ntdsCASecurityExt", "c": "Microsoft" }, 1256 + "1.3.6.1.4.1.311.25.2.1": { "d": "ntdsObjectSID", "c": "Microsoft" }, 1225 1257 "1.3.6.1.4.1.311.31.1": { "d": "productUpdate", "c": "Microsoft attribute" }, 1226 1258 "1.3.6.1.4.1.311.47.1.1": { "d": "systemHealth", "c": "Microsoft extended key usage" }, 1227 1259 "1.3.6.1.4.1.311.47.1.3": { "d": "systemHealthLoophole", "c": "Microsoft extended key usage" }, 1228 1260 "1.3.6.1.4.1.311.60.1.1": { "d": "rootProgramFlags", "c": "Microsoft policy attribute" }, 1229 - "1.3.6.1.4.1.311.61.1.1": { "d": "kernelModeCodeSigning", "c": "Microsoft enhanced key usage" }, 1261 + "1.3.6.1.4.1.311.61.1.1": { "d": "kernelModeCodeSigning", "c": "Microsoft extended key usage" }, 1230 1262 "1.3.6.1.4.1.311.60.2.1.1": { "d": "jurisdictionOfIncorporationL", "c": "Microsoft (???)" }, 1231 1263 "1.3.6.1.4.1.311.60.2.1.2": { "d": "jurisdictionOfIncorporationSP", "c": "Microsoft (???)" }, 1232 1264 "1.3.6.1.4.1.311.60.2.1.3": { "d": "jurisdictionOfIncorporationC", "c": "Microsoft (???)" }, ··· 1243 1275 "1.3.6.1.4.1.188.7.1.1.2": { "d": "ideaCBC", "c": "Ascom Systech" }, 1244 1276 "1.3.6.1.4.1.188.7.1.1.3": { "d": "ideaCFB", "c": "Ascom Systech" }, 1245 1277 "1.3.6.1.4.1.188.7.1.1.4": { "d": "ideaOFB", "c": "Ascom Systech" }, 1278 + "1.3.6.1.4.1.2363.3.2": { "d": "euroControlUntrustedEA", "c": "Eurocontrol certificate policy" }, 1279 + "1.3.6.1.4.1.2363.4.3": { "d": "euroControlEARootCA", "c": "Eurocontrol certificate policy" }, 1280 + "1.3.6.1.4.1.2363.4.3.1": { "d": "euroControlEABridgeCA", "c": "Eurocontrol certificate policy" }, 1281 + "1.3.6.1.4.1.2363.4.3.1.1": { "d": "euroControlEAIssuingCA", "c": "Eurocontrol certificate policy" }, 1282 + "1.3.6.1.4.1.2363.4.3.1.1.1": { "d": "euroControlEAClientCertificate", "c": "Eurocontrol certificate policy" }, 1283 + "1.3.6.1.4.1.2363.4.3.1.1.2": { "d": "euroControlEAServerCertificate", "c": "Eurocontrol certificate policy" }, 1284 + "1.3.6.1.4.1.2363.4.3.1.1.3": { "d": "euroControlEASWIMSigningCertificate", "c": "Eurocontrol certificate policy" }, 1246 1285 "1.3.6.1.4.1.2428.10.1.1": { "d": "UNINETT policyIdentifier", "c": "UNINETT PCA" }, 1247 1286 "1.3.6.1.4.1.2712.10": { "d": "ICE-TEL policyIdentifier", "c": "ICE-TEL CA" }, 1248 1287 "1.3.6.1.4.1.2786.1.1.1": { "d": "ICE-TEL Italian policyIdentifier", "c": "ICE-TEL CA policy" }, ··· 1308 1347 "1.3.6.1.4.1.8301.3.5.1": { "d": "validityModelChain", "c": "TU Darmstadt ValidityModel" }, 1309 1348 "1.3.6.1.4.1.8301.3.5.2": { "d": "validityModelShell", "c": "ValidityModel" }, 1310 1349 "1.3.6.1.4.1.8231.1": { "d": "rolUnicoNacional", "c": "Chilean Government national unique roll number" }, 1350 + "1.3.6.1.4.1.11129.2.4.2": { "d": "googleSignedCertificateTimestamp", "c": "Google Certificate Transparency" }, 1351 + "1.3.6.1.4.1.11129.2.4.3": { "d": "googlePrecertificatePoison", "c": "Google Certificate Transparency" }, 1352 + "1.3.6.1.4.1.11129.2.4.4": { "d": "googlePrecertificateCA", "c": "Google Certificate Transparency" }, 1353 + "1.3.6.1.4.1.11129.2.4.5": { "d": "googleOcspSignedCertificateTimestamp", "c": "Google Certificate Transparency" }, 1311 1354 "1.3.6.1.4.1.11591": { "d": "gnu", "c": "GNU Project (see https://www.gnupg.org/oids.html)" }, 1312 1355 "1.3.6.1.4.1.11591.1": { "d": "gnuRadius", "c": "GNU Radius" }, 1356 + "1.3.6.1.4.1.11591.2.2.1": { "d": "gpgX509StandaloneCert", "c": "Cert is intentionally self-signed." }, 1357 + "1.3.6.1.4.1.11591.2.2.2": { "d": "gpgX509WellKnownPrivateKey", "c": "Mark cert as having a well known key" }, 1358 + "1.3.6.1.4.1.11591.2.2.10": { "d": "gpgX509PgpKdfKekParm", "c": "Description of ECC params" }, 1359 + "1.3.6.1.4.1.11591.2.3.1": { "d": "gpgCtPgpKeyblock", "c": "CMS ct for a binary PGP keyblock" }, 1360 + "1.3.6.1.4.1.11591.2.4.1.1": { "d": "gpgFingerprint", "c": "LDAP keyserver attribute" }, 1361 + "1.3.6.1.4.1.11591.2.4.1.2": { "d": "gpgSubFingerprint", "c": "LDAP keyserver attribute" }, 1362 + "1.3.6.1.4.1.11591.2.4.1.3": { "d": "gpgMailbox", "c": "LDAP keyserver attribute" }, 1363 + "1.3.6.1.4.1.11591.2.4.1.4": { "d": "gpgSubCertID", "c": "LDAP keyserver attribute" }, 1364 + "1.3.6.1.4.1.11591.2.5.1": { "d": "gpgNtds", "c": "LDAP URL ext, auth with current AD user" }, 1365 + "1.3.6.1.4.1.11591.2.6.1": { "d": "gpgX509PgpUseCert", "c": "X.509 encoded OpenPGP key usage" }, 1366 + "1.3.6.1.4.1.11591.2.6.2": { "d": "gpgX509PgpUseSign", "c": "X.509 encoded PGP key usage" }, 1367 + "1.3.6.1.4.1.11591.2.6.3": { "d": "gpgX509PgpUseEncr", "c": "X.509 encoded PGP key usage" }, 1368 + "1.3.6.1.4.1.11591.2.6.4": { "d": "gpgX509PgpUseAuth", "c": "X.509 encoded PGP key usage" }, 1369 + "1.3.6.1.4.1.11591.2.12242973": { "d": "gpgInvalidOid", "c": "0xBAD01D to indicate an invalid encoded OID" }, 1313 1370 "1.3.6.1.4.1.11591.3": { "d": "gnuRadar", "c": "GNU Radar" }, 1314 1371 "1.3.6.1.4.1.11591.4.11": { "d": "scrypt", "c": "GNU Generic Security Service" }, 1315 1372 "1.3.6.1.4.1.11591.12": { "d": "gnuDigestAlgorithm", "c": "GNU digest algorithm" }, ··· 1341 1398 "1.3.6.1.4.1.23629.1.4.2.1.3": { "d": "safenetStartDate", "c": "SafeNet" }, 1342 1399 "1.3.6.1.4.1.23629.1.4.2.1.4": { "d": "safenetAdminCert", "c": "SafeNet" }, 1343 1400 "1.3.6.1.4.1.23629.1.4.2.2.1": { "d": "safenetKeyDigest", "c": "SafeNet" }, 1401 + "1.3.6.1.4.1.25054.3": { "d": "carillonSecurity", "c": "Carillon security" }, 1402 + "1.3.6.1.4.1.25054.3.1": { "d": "carillonCommercialPKI", "c": "Carillon security" }, 1403 + "1.3.6.1.4.1.25054.3.2": { "d": "carillonCommercialTSA", "c": "Carillon security" }, 1404 + "1.3.6.1.4.1.25054.3.3": { "d": "carillonCommercialSCVP", "c": "Carillon security" }, 1405 + "1.3.6.1.4.1.25054.3.3.1": { "d": "carillonSCVPExtendedStatusInfo", "c": "Carillon security" }, 1406 + "1.3.6.1.4.1.25054.3.4": { "d": "carillonCommercialCMS", "c": "Carillon security" }, 1407 + "1.3.6.1.4.1.25054.3.4.1": { "d": "carillonExtKeyUsageCIVCardAuth", "c": "Carillon security" }, 1408 + "1.3.6.1.4.1.25054.3.4.2": { "d": "carillonExtKeyUsageCIVContentSigning", "c": "Carillon security" }, 1409 + "1.3.6.1.4.1.25054.3.5": { "d": "carillonCommercialLSAP", "c": "Carillon security" }, 1410 + "1.3.6.1.4.1.25054.3.5.1": { "d": "carillonExtKeyUsageLSAPCodeSigning", "c": "Carillon security" }, 1411 + "1.3.6.1.4.1.25054.3.6": { "d": "carillonCommercialCE", "c": "Carillon security" }, 1412 + "1.3.6.1.4.1.25054.3.7": { "d": "carillonCommercialLicense", "c": "Carillon security" }, 1413 + "1.3.6.1.4.1.25054.3.7.1": { "d": "carillonExtKeyUsageLicenseSigning", "c": "Carillon security" }, 1414 + "1.3.6.1.4.1.25054.3.8": { "d": "carillonCommercialSecret", "c": "Carillon security" }, 1344 1415 "1.3.6.1.4.1.51483.2.1": { "d": "hashOfRootKey", "c": "CTIA" }, 1345 1416 "1.3.6.1.5.2.3.1": { "d": "authData", "c": "Kerberos" }, 1346 1417 "1.3.6.1.5.2.3.2": { "d": "dHKeyData", "c": "Kerberos" }, ··· 1382 1453 "1.3.6.1.5.5.7.1.30": { "d": "manufacturerUsageDescriptionSigner", "c": "PKIX private extension" }, 1383 1454 "1.3.6.1.5.5.7.1.31": { "d": "acmeIdentifier", "c": "PKIX private extension" }, 1384 1455 "1.3.6.1.5.5.7.1.32": { "d": "masaURL", "c": "PKIX private extension" }, 1456 + "1.3.6.1.5.5.7.1.33": { "d": "enhancedJWTClaimConstraints", "c": "PKIX private extension" }, 1457 + "1.3.6.1.5.5.7.1.34": { "d": "nfTypes", "c": "PKIX private extension" }, 1385 1458 "1.3.6.1.5.5.7.2": { "d": "policyQualifierIds", "c": "PKIX" }, 1386 1459 "1.3.6.1.5.5.7.2.1": { "d": "cps", "c": "PKIX policy qualifier" }, 1387 1460 "1.3.6.1.5.5.7.2.2": { "d": "unotice", "c": "PKIX policy qualifier" }, ··· 1423 1496 "1.3.6.1.5.5.7.3.32": { "d": "cmKGA", "c": "PKIX key purpose" }, 1424 1497 "1.3.6.1.5.5.7.3.33": { "d": "rpcTLSClient", "c": "PKIX key purpose" }, 1425 1498 "1.3.6.1.5.5.7.3.34": { "d": "rpcTLSServer", "c": "PKIX key purpose" }, 1499 + "1.3.6.1.5.5.7.3.35": { "d": "bundleSecurity", "c": "PKIX key purpose" }, 1500 + "1.3.6.1.5.5.7.3.36": { "d": "documentSigning", "c": "PKIX key purpose" }, 1426 1501 "1.3.6.1.5.5.7.4": { "d": "cmpInformationTypes", "c": "PKIX" }, 1427 1502 "1.3.6.1.5.5.7.4.1": { "d": "caProtEncCert", "c": "PKIX CMP information" }, 1428 1503 "1.3.6.1.5.5.7.4.2": { "d": "signKeyPairTypes", "c": "PKIX CMP information" }, ··· 1468 1543 "1.3.6.1.5.5.7.6.26": { "d": "ecdhPopStaticSha256HmacSha256", "c": "PKIX algorithm" }, 1469 1544 "1.3.6.1.5.5.7.6.27": { "d": "ecdhPopStaticSha384HmacSha384", "c": "PKIX algorithm" }, 1470 1545 "1.3.6.1.5.5.7.6.28": { "d": "ecdhPopStaticSha512HmacSha512", "c": "PKIX algorithm" }, 1546 + "1.3.6.1.5.5.7.6.30": { "d": "rsaPssShake128", "c": "PKIX algorithm" }, 1547 + "1.3.6.1.5.5.7.6.31": { "d": "rsaPssShake256", "c": "PKIX algorithm" }, 1548 + "1.3.6.1.5.5.7.6.32": { "d": "ecdsaShake128", "c": "PKIX algorithm" }, 1549 + "1.3.6.1.5.5.7.6.33": { "d": "ecdsaShake256", "c": "PKIX algorithm" }, 1471 1550 "1.3.6.1.5.5.7.7": { "d": "cmcControls", "c": "PKIX" }, 1472 1551 "1.3.6.1.5.5.7.8": { "d": "otherNames", "c": "PKIX" }, 1473 1552 "1.3.6.1.5.5.7.8.1": { "d": "personalData", "c": "PKIX other name" }, ··· 1475 1554 "1.3.6.1.5.5.7.8.3": { "d": "permanentIdentifier", "c": "PKIX other name" }, 1476 1555 "1.3.6.1.5.5.7.8.5": { "d": "xmppAddr", "c": "PKIX other name" }, 1477 1556 "1.3.6.1.5.5.7.8.6": { "d": "SIM", "c": "PKIX other name" }, 1557 + "1.3.6.1.5.5.7.8.7": { "d": "dnsSRV", "c": "PKIX other name" }, 1558 + "1.3.6.1.5.5.7.8.8": { "d": "naiRealm", "c": "PKIX other name" }, 1559 + "1.3.6.1.5.5.7.8.9": { "d": "smtpUTF8Mailbox", "c": "PKIX other name" }, 1560 + "1.3.6.1.5.5.7.8.10": { "d": "acpNodeName", "c": "PKIX other name" }, 1561 + "1.3.6.1.5.5.7.8.11": { "d": "bundleEID", "c": "PKIX other name" }, 1478 1562 "1.3.6.1.5.5.7.9": { "d": "personalData", "c": "PKIX qualified certificates" }, 1479 1563 "1.3.6.1.5.5.7.9.1": { "d": "dateOfBirth", "c": "PKIX personal data" }, 1480 1564 "1.3.6.1.5.5.7.9.2": { "d": "placeOfBirth", "c": "PKIX personal data" }, ··· 1495 1579 "1.3.6.1.5.5.7.12.2": { "d": "pkiData", "c": "PKIX CMC Content Types" }, 1496 1580 "1.3.6.1.5.5.7.12.3": { "d": "pkiResponse", "c": "PKIX CMC Content Types" }, 1497 1581 "1.3.6.1.5.5.7.14.2": { "d": "resourceCertificatePolicy", "c": "PKIX policies" }, 1498 - "1.3.6.1.5.5.7.20": { "d": "logo", "c": "PKIX qualified certificates" }, 1499 - "1.3.6.1.5.5.7.20.1": { "d": "logoLoyalty", "c": "PKIX" }, 1500 - "1.3.6.1.5.5.7.20.2": { "d": "logoBackground", "c": "PKIX" }, 1501 - "1.3.6.1.5.5.7.48.1": { "d": "ocsp", "c": "PKIX" }, 1582 + "1.3.6.1.5.5.7.17": { "d": "scvpCheck", "c": "PKIX SCVP check" }, 1583 + "1.3.6.1.5.5.7.17.1": { "d": "scvpCheckBuildPath", "c": "SCVP" }, 1584 + "1.3.6.1.5.5.7.17.2": { "d": "scvpCheckBuildValidPath", "c": "SCVP" }, 1585 + "1.3.6.1.5.5.7.17.3": { "d": "scvpCheckBuildStatusCheckedPath", "c": "SCVP" }, 1586 + "1.3.6.1.5.5.7.17.4": { "d": "scvpCheckBuildAaPath", "c": "SCVP" }, 1587 + "1.3.6.1.5.5.7.17.5": { "d": "scvpCheckBuildValidAaPath", "c": "SCVP" }, 1588 + "1.3.6.1.5.5.7.17.6": { "d": "scvpCheckBuildStatusCheckedAaPath", "c": "SCVP" }, 1589 + "1.3.6.1.5.5.7.17.7": { "d": "scvpCheckStatusCheckAcAndBuildStatusCheckedAaPath", "c": "SCVP" }, 1590 + "1.3.6.1.5.5.7.18": { "d": "scvpWantBack", "c": "PKIX SCVP wantback" }, 1591 + "1.3.6.1.5.5.7.18.1": { "d": "scvpWantbackBestCertPath", "c": "SCVP wantback" }, 1592 + "1.3.6.1.5.5.7.18.2": { "d": "scvpWantbackRevocationInfo", "c": "SCVP wantback" }, 1593 + "1.3.6.1.5.5.7.18.4": { "d": "scvpWantbackPublicKeyInfo", "c": "SCVP wantback" }, 1594 + "1.3.6.1.5.5.7.18.5": { "d": "scvpWantbackAaCertPath", "c": "SCVP wantback" }, 1595 + "1.3.6.1.5.5.7.18.6": { "d": "scvpWantbackAaRevocationInfo", "c": "SCVP wantback" }, 1596 + "1.3.6.1.5.5.7.18.7": { "d": "scvpWantbackAcRevocationInfo", "c": "SCVP wantback" }, 1597 + "1.3.6.1.5.5.7.18.9": { "d": "scvpWantbackRelayedResponses", "c": "SCVP wantback" }, 1598 + "1.3.6.1.5.5.7.18.10": { "d": "scvpWantbackCert", "c": "SCVP wantback" }, 1599 + "1.3.6.1.5.5.7.18.11": { "d": "scvpWantbackAcCert", "c": "SCVP wantback" }, 1600 + "1.3.6.1.5.5.7.18.12": { "d": "scvpWantbackAllCertPaths", "c": "SCVP wantback" }, 1601 + "1.3.6.1.5.5.7.18.13": { "d": "scvpWantbackEeRevocationInfo", "c": "SCVP wantback" }, 1602 + "1.3.6.1.5.5.7.18.14": { "d": "scvpWantbackCAsRevocationInfo", "c": "SCVP wantback" }, 1603 + "1.3.6.1.5.5.7.19": { "d": "scvpValPolicy", "c": "SCVP validation policy" }, 1604 + "1.3.6.1.5.5.7.19.1": { "d": "scvpDefaultValPolicy", "c": "SCVP validation policy" }, 1605 + "1.3.6.1.5.5.7.19.2": { "d": "scvpNameValAlg", "c": "SCVP validation policy" }, 1606 + "1.3.6.1.5.5.7.19.2.1": { "d": "scvpNameErrorNameMismatch", "c": "SCVP validation policy" }, 1607 + "1.3.6.1.5.5.7.19.2.2": { "d": "scvpNameErrorNoName", "c": "SCVP validation policy" }, 1608 + "1.3.6.1.5.5.7.19.2.3": { "d": "scvpNameErrorUnknownAlg", "c": "SCVP validation policy" }, 1609 + "1.3.6.1.5.5.7.19.2.4": { "d": "scvpNameErrorBadName", "c": "SCVP validation policy" }, 1610 + "1.3.6.1.5.5.7.19.2.5": { "d": "scvpNameErrorBadNameType", "c": "SCVP validation policy" }, 1611 + "1.3.6.1.5.5.7.19.2.6": { "d": "scvpNameErrorMixedNames", "c": "SCVP validation policy" }, 1612 + "1.3.6.1.5.5.7.19.3": { "d": "scvpBasicValAlg", "c": "SCVP validation policy" }, 1613 + "1.3.6.1.5.5.7.19.3.1": { "d": "scvpValErrorExpired", "c": "SCVP validation policy error" }, 1614 + "1.3.6.1.5.5.7.19.3.2": { "d": "scvpValErrorNotYetValid", "c": "SCVP validation policy error" }, 1615 + "1.3.6.1.5.5.7.19.3.3": { "d": "scvpValErrorWrongTrustAnchor", "c": "SCVP validation policy error" }, 1616 + "1.3.6.1.5.5.7.19.3.4": { "d": "scvpValErrorNoValidCertPath", "c": "SCVP validation policy error" }, 1617 + "1.3.6.1.5.5.7.19.3.5": { "d": "scvpValErrorRevoked", "c": "SCVP validation policy error" }, 1618 + "1.3.6.1.5.5.7.19.3.9": { "d": "scvpValErrorInvalidKeyPurpose", "c": "SCVP validation policy error" }, 1619 + "1.3.6.1.5.5.7.19.3.10": { "d": "scvpValErrorInvalidKeyUsage", "c": "SCVP validation policy error" }, 1620 + "1.3.6.1.5.5.7.19.3.11": { "d": "scvpValErrorInvalidCertPolicy", "c": "SCVP validation policy error" }, 1621 + "1.3.6.1.5.5.7.20": { "d": "logo", "c": "Qualified Certificate" }, 1622 + "1.3.6.1.5.5.7.20.1": { "d": "logoLoyalty", "c": "Qualified Certificate" }, 1623 + "1.3.6.1.5.5.7.20.2": { "d": "logoBackground", "c": "Qualified Certificate" }, 1624 + "1.3.6.1.5.5.7.48.1": { "d": "ocsp", "c": "PKIX OCSP" }, 1502 1625 "1.3.6.1.5.5.7.48.1.1": { "d": "ocspBasic", "c": "OCSP" }, 1503 1626 "1.3.6.1.5.5.7.48.1.2": { "d": "ocspNonce", "c": "OCSP" }, 1504 1627 "1.3.6.1.5.5.7.48.1.3": { "d": "ocspCRL", "c": "OCSP" }, ··· 1561 1684 "1.3.14.7.2.1.1": { "d": "ElGamal", "c": "Unsure about this OID" }, 1562 1685 "1.3.14.7.2.3.1": { "d": "md2WithRSA", "c": "Unsure about this OID" }, 1563 1686 "1.3.14.7.2.3.2": { "d": "md2WithElGamal", "c": "Unsure about this OID" }, 1687 + "1.3.18.0.2.18.1": { "d": "hostIDMapping", "c": "IBM RACF ID mapping" }, 1688 + "1.3.27.16": { "d": "icaoSecurity", "c": "ICAO security" }, 1689 + "1.3.27.16.0": { "d": "icaoSecurity", "c": "ICAO security test?" }, 1690 + "1.3.27.16.0.1.1.1.1.1.1.0": { "d": "icaoTestValidationPolicy", "c": "ICAO security test?" }, 1691 + "1.3.27.16.1": { "d": "icaoCertPolicy", "c": "ICAO certificate policies" }, 1692 + "1.3.27.16.1.2": { "d": "icaoIATFRootCA", "c": "ICAO certificate policies" }, 1693 + "1.3.27.16.1.2.0.1": { "d": "icaoIdentityAssurance", "c": "ICAO certificate policies" }, 1694 + "1.3.27.16.1.2.0.1.1": { "d": "icaoIdentityAssuranceLow", "c": "ICAO certificate policies" }, 1695 + "1.3.27.16.1.2.0.1.2": { "d": "icaoIdentityAssuranceLowDevice", "c": "ICAO certificate policies" }, 1696 + "1.3.27.16.1.2.0.1.3": { "d": "icaoIdentityAssuranceLowTSPMediated", "c": "ICAO certificate policies" }, 1697 + "1.3.27.16.1.2.0.1.4": { "d": "icaoIdentityAssuranceMedium", "c": "ICAO certificate policies" }, 1698 + "1.3.27.16.1.2.0.1.5": { "d": "icaoIdentityAssuranceMediumDevice", "c": "ICAO certificate policies" }, 1699 + "1.3.27.16.1.2.0.1.6": { "d": "icaoIdentityAssuranceMediumTSPMediated", "c": "ICAO certificate policies" }, 1700 + "1.3.27.16.1.2.0.1.7": { "d": "icaoIdentityAssuranceMediumHardware", "c": "ICAO certificate policies" }, 1701 + "1.3.27.16.1.2.0.1.8": { "d": "icaoIdentityAssuranceMediumDeviceHardware", "c": "ICAO certificate policies" }, 1702 + "1.3.27.16.1.2.0.1.9": { "d": "icaoIdentityAssuranceHigh", "c": "ICAO certificate policies" }, 1703 + "1.3.27.16.1.2.0.1.10": { "d": "icaoIdentityAssuranceHighCardAuth", "c": "ICAO certificate policies" }, 1704 + "1.3.27.16.1.2.0.1.11": { "d": "icaoIdentityAssuranceHighContentSigning", "c": "ICAO certificate policies" }, 1705 + "1.3.27.16.1.2.1": { "d": "icaoIATFBridgeCA", "c": "ICAO certificate policies" }, 1706 + "1.3.27.16.1.2.1.0": { "d": "icaoCAODRootCA", "c": "ICAO certificate policies" }, 1707 + "1.3.27.16.1.2.1.1": { "d": "icaoCAODBridgeCA", "c": "ICAO certificate policies" }, 1708 + "1.3.27.16.1.2.1.1.1": { "d": "icaoUSBridgeCA", "c": "ICAO certificate policies" }, 1709 + "1.3.27.16.1.2.1.1.1.1": { "d": "icaoFAARootCA", "c": "ICAO certificate policies" }, 1710 + "1.3.27.16.1.2.1.1.1.1.1": { "d": "icaoFAAIssuingCA", "c": "ICAO certificate policies" }, 1711 + "1.3.27.16.1.2.1.1.1.1.1.1": { "d": "icaoFAAClientCertificate", "c": "ICAO certificate policies" }, 1712 + "1.3.27.16.1.2.1.1.1.1.1.2": { "d": "icaoFAAServerCertificate", "c": "ICAO certificate policies" }, 1713 + "1.3.27.16.1.2.1.1.1.1.1.3": { "d": "icaoFAASWIMSigningCertificate", "c": "ICAO certificate policies" }, 1714 + "1.3.27.16.1.4.1.1": { "d": "icaoSWIMSigning", "c": "ICAO extended key usage" }, 1564 1715 "1.3.36.1": { "d": "document", "c": "Teletrust document" }, 1565 1716 "1.3.36.1.1": { "d": "finalVersion", "c": "Teletrust document" }, 1566 1717 "1.3.36.1.2": { "d": "draft", "c": "Teletrust document" }, ··· 1782 1933 "1.3.132.0.37": { "d": "sect409r1", "c": "SECG (Certicom) named elliptic curve" }, 1783 1934 "1.3.132.0.38": { "d": "sect571k1", "c": "SECG (Certicom) named elliptic curve" }, 1784 1935 "1.3.132.0.39": { "d": "sect571r1", "c": "SECG (Certicom) named elliptic curve" }, 1936 + "1.3.132.1.11.0": { "d": "ecdhX963KDF-SHA224", "c": "SECG (Certicom) elliptic curve key agreement" }, 1785 1937 "1.3.132.1.11.1": { "d": "ecdhX963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" }, 1786 1938 "1.3.132.1.11.2": { "d": "ecdhX963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" }, 1787 1939 "1.3.132.1.11.3": { "d": "ecdhX963KDF-SHA512", "c": "SECG (Certicom) elliptic curve key agreement" }, 1940 + "1.3.132.1.14.0": { "d": "eccofactordhX963KDF-SHA224", "c": "SECG (Certicom) elliptic curve key agreement" }, 1941 + "1.3.132.1.14.1": { "d": "eccofactordhX963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" }, 1942 + "1.3.132.1.14.2": { "d": "eccofactordhX963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" }, 1943 + "1.3.132.1.14.3": { "d": "eccofactordhX963KDF-SHA512", "c": "SECG (Certicom) elliptic curve key agreement" }, 1944 + "1.3.132.1.15.0": { "d": "ecmqv-X963KDF-SHA224", "c": "SECG (Certicom) elliptic curve key agreement" }, 1945 + "1.3.132.1.15.1": { "d": "ecmqv-X963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" }, 1946 + "1.3.132.1.15.2": { "d": "ecmqv-X963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" }, 1947 + "1.3.132.1.15.3": { "d": "ecmqv-X963KDF-SHA512", "c": "SECG (Certicom) elliptic curve key agreement" }, 1788 1948 "1.3.133.16.840.9.44": { "d": "x944", "c": "X9.44" }, 1789 1949 "1.3.133.16.840.9.44.1": { "d": "x944Components", "c": "X9.44" }, 1790 1950 "1.3.133.16.840.9.44.1.1": { "d": "x944Kdf2", "c": "X9.44" }, ··· 1837 1997 "1.3.133.16.840.9.84.4.1.16": { "d": "ibiaOwnerA3Vision", "c": "X9.84 IBIA Format Owner" }, 1838 1998 "1.3.133.16.840.9.84.4.1.17": { "d": "ibiaOwnerNEC", "c": "X9.84 IBIA Format Owner" }, 1839 1999 "1.3.133.16.840.9.84.4.1.18": { "d": "ibiaOwnerSTMicroelectronics", "c": "X9.84 IBIA Format Owner" }, 2000 + "1.3.158.36061701.0.0.0.1.2.2": { "d": "qcpSK", "c": "Slovakia Qualified Electronic Signature policies" }, 1840 2001 "2.5.4.0": { "d": "objectClass", "c": "X.520 DN component" }, 1841 2002 "2.5.4.1": { "d": "aliasedEntryName", "c": "X.520 DN component" }, 1842 2003 "2.5.4.2": { "d": "knowledgeInformation", "c": "X.520 DN component" }, ··· 2050 2211 "2.5.29.67": { "d": "allowedAttAss", "c": "X.509 extension" }, 2051 2212 "2.5.29.68": { "d": "attributeMappings", "c": "X.509 extension" }, 2052 2213 "2.5.29.69": { "d": "holderNameConstraints", "c": "X.509 extension" }, 2214 + "2.16.578.1.26.1.3.1": { "d": "privateKeySmartCard", "c": "Norway Buypass CA policy" }, 2215 + "2.16.578.1.26.1.3.2": { "d": "privateKeySoftToken", "c": "Norway Buypass CA policy" }, 2216 + "2.16.578.1.26.1.3.3": { "d": "sslEvident. Also assigned as BuyPass EV policy", "c": "Norway Buypass CA policy" }, 2217 + "2.16.578.1.26.1.3.4": { "d": "sslBusinessPlus", "c": "Norway Buypass CA policy" }, 2218 + "2.16.578.1.26.1.3.5": { "d": "privateKeyHardToken", "c": "Norway Buypass CA policy" }, 2219 + "2.16.578.1.26.1.3.6": { "d": "privateKeyHSM", "c": "Norway Buypass CA policy" }, 2053 2220 "2.16.724.1.2.2.4.1": { "d": "personalDataInfo", "c": "Spanish Government PKI?" }, 2054 2221 "2.16.840.1.101.2.1.1.1": { "d": "sdnsSignatureAlgorithm", "c": "SDN.700 INFOSEC algorithms" }, 2055 2222 "2.16.840.1.101.2.1.1.2": { "d": "fortezzaSignatureAlgorithm", "c": "SDN.700 INFOSEC algorithms. Formerly known as mosaicSignatureAlgorithm, this OID is better known as dsaWithSHA-1." }, ··· 2485 2652 "2.23.43.1.4.6": { "d": "wTLS-ECC-curve6", "c": "WAP WTLS" }, 2486 2653 "2.23.43.1.4.8": { "d": "wTLS-ECC-curve8", "c": "WAP WTLS" }, 2487 2654 "2.23.43.1.4.9": { "d": "wTLS-ECC-curve9", "c": "WAP WTLS" }, 2488 - "2.23.133": { "d": "tCPA", "c": "TCPA" }, 2489 - "2.23.133.1": { "d": "tcpaSpecVersion", "c": "TCPA" }, 2490 - "2.23.133.2": { "d": "tcpaAttribute", "c": "TCPA" }, 2491 - "2.23.133.2.1": { "d": "tcpaTpmManufacturer", "c": "TCPA Attribute" }, 2492 - "2.23.133.2.2": { "d": "tcpaTpmModel", "c": "TCPA Attribute" }, 2493 - "2.23.133.2.3": { "d": "tcpaTpmVersion", "c": "TCPA Attribute" }, 2494 - "2.23.133.2.4": { "d": "tcpaPlatformManufacturer", "c": "TCPA Attribute" }, 2495 - "2.23.133.2.5": { "d": "tcpaPlatformModel", "c": "TCPA Attribute" }, 2496 - "2.23.133.2.6": { "d": "tcpaPlatformVersion", "c": "TCPA Attribute" }, 2497 - "2.23.133.2.7": { "d": "tcpaComponentManufacturer", "c": "TCPA Attribute" }, 2498 - "2.23.133.2.8": { "d": "tcpaComponentModel", "c": "TCPA Attribute" }, 2499 - "2.23.133.2.9": { "d": "tcpaComponentVersion", "c": "TCPA Attribute" }, 2500 - "2.23.133.2.10": { "d": "tcpaSecurityQualities", "c": "TCPA Attribute" }, 2501 - "2.23.133.2.11": { "d": "tcpaTpmProtectionProfile", "c": "TCPA Attribute" }, 2502 - "2.23.133.2.12": { "d": "tcpaTpmSecurityTarget", "c": "TCPA Attribute" }, 2503 - "2.23.133.2.13": { "d": "tcpaFoundationProtectionProfile", "c": "TCPA Attribute" }, 2504 - "2.23.133.2.14": { "d": "tcpaFoundationSecurityTarget", "c": "TCPA Attribute" }, 2505 - "2.23.133.2.15": { "d": "tcpaTpmIdLabel", "c": "TCPA Attribute" }, 2506 - "2.23.133.3": { "d": "tcpaProtocol", "c": "TCPA" }, 2507 - "2.23.133.3.1": { "d": "tcpaPrttTpmIdProtocol", "c": "TCPA Protocol" }, 2655 + "2.23.133": { "d": "tCPA", "c": "TCPA/TCG" }, 2656 + "2.23.133.1": { "d": "tcgSpecVersion", "c": "TCPA/TCG" }, 2657 + "2.23.133.2": { "d": "tcgAttribute", "c": "TCPA/TCG" }, 2658 + "2.23.133.2.1": { "d": "tcgTpmManufacturer", "c": "TCPA/TCG Attribute" }, 2659 + "2.23.133.2.2": { "d": "tcgTpmModel", "c": "TCPA/TCG Attribute" }, 2660 + "2.23.133.2.3": { "d": "tcgTpmVersion", "c": "TCPA/TCG Attribute" }, 2661 + "2.23.133.2.4": { "d": "tcgPlatformManufacturer", "c": "TCPA/TCG Attribute" }, 2662 + "2.23.133.2.5": { "d": "tcgPlatformModel", "c": "TCPA/TCG Attribute" }, 2663 + "2.23.133.2.6": { "d": "tcgPlatformVersion", "c": "TCPA/TCG Attribute" }, 2664 + "2.23.133.2.7": { "d": "tcgComponentManufacturer", "c": "TCPA/TCG Attribute" }, 2665 + "2.23.133.2.8": { "d": "tcgComponentModel", "c": "TCPA/TCG Attribute" }, 2666 + "2.23.133.2.9": { "d": "tcgComponentVersion", "c": "TCPA/TCG Attribute" }, 2667 + "2.23.133.2.10": { "d": "tcgSecurityQualities", "c": "TCPA/TCG Attribute" }, 2668 + "2.23.133.2.11": { "d": "tcgTpmProtectionProfile", "c": "TCPA/TCG Attribute" }, 2669 + "2.23.133.2.12": { "d": "tcgTpmSecurityTarget", "c": "TCPA/TCG Attribute" }, 2670 + "2.23.133.2.13": { "d": "tcgFoundationProtectionProfile", "c": "TCPA/TCG Attribute" }, 2671 + "2.23.133.2.14": { "d": "tcgFoundationSecurityTarget", "c": "TCPA/TCG Attribute" }, 2672 + "2.23.133.2.15": { "d": "tcgTpmIdLabel", "c": "TCPA/TCG Attribute" }, 2673 + "2.23.133.2.16": { "d": "tcgTpmSpecification", "c": "TCPA/TCG Attribute" }, 2674 + "2.23.133.2.18": { "d": "tcgTpmSecurityAssertions", "c": "TCPA/TCG Attribute" }, 2675 + "2.23.133.3": { "d": "tcgProtocol", "c": "TCPA/TCG" }, 2676 + "2.23.133.3.1": { "d": "tcgPrttTpmIdProtocol", "c": "TCPA/TCG Protocol" }, 2677 + "2.23.133.8.1": { "d": "tcgEKCertificate", "c": "TCPA/TCG Key Usage" }, 2678 + "2.23.133.10.1.1.1": { "d": "tcgObject", "c": "TCPA/TCG Object" }, 2508 2679 "2.23.134.1.4.2.1": { "d": "postSignumRootQCA", "c": "PostSignum CA" }, 2509 2680 "2.23.134.1.2.2.3": { "d": "postSignumPublicCA", "c": "PostSignum CA" }, 2510 2681 "2.23.134.1.2.1.8.210": { "d": "postSignumCommercialServerPolicy", "c": "PostSignum CA" }, 2511 2682 "2.23.136.1.1.1": { "d": "mRTDSignatureData", "c": "ICAO MRTD" }, 2683 + "2.23.140.1.1": { "d": "evGuidelines", "c": "CAB Certificate Policies" }, 2684 + "2.23.140.1.2.1": { "d": "domainValidated", "c": "CAB Certificate Policies" }, 2685 + "2.23.140.1.2.2": { "d": "subjectIdentityValidated", "c": "CAB Certificate Policies" }, 2686 + "2.23.140.1.4.1": { "d": "codeSigningRequirements", "c": "CAB Certificate Policies" }, 2512 2687 "2.54.1775.2": { "d": "hashedRootKey", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true }, 2513 2688 "2.54.1775.3": { "d": "certificateType", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true }, 2514 2689 "2.54.1775.4": { "d": "merchantData", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true }, ··· 2521 2696 "1.3.6.1.4.1.34697.2.2": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Networking" }, 2522 2697 "1.3.6.1.4.1.34697.2.3": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Premium" }, 2523 2698 "1.3.6.1.4.1.34697.2.4": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Premium ECC" }, 2524 - "2.16.578.1.26.1.3.3": { "d": "BuyPass EV policy", "c": "BuyPass Class 3 EV" }, 2525 2699 "1.3.6.1.4.1.17326.10.14.2.1.2": { "d": "Camerfirma EV policy", "c": "Camerfirma CA Root" }, 2526 2700 "1.3.6.1.4.1.17326.10.8.12.1.2": { "d": "Camerfirma EV policy", "c": "Camerfirma CA Root" }, 2527 2701 "1.3.6.1.4.1.22234.2.5.2.3.1": { "d": "CertPlus EV policy", "c": "CertPlus Class 2 Primary CA (formerly Keynectis)" }, ··· 2548 2722 "1.3.6.1.4.1.40869.1.1.22.3": { "d": "TWCA EV policy", "c": "TWCA Root Certification Authority" }, 2549 2723 "2.16.840.1.113733.1.7.23.6": { "d": "VeriSign EV policy", "c": "VeriSign Class 3 Public Primary Certification Authority" }, 2550 2724 "2.16.840.1.114171.500.9": { "d": "Wells Fargo EV policy", "c": "Wells Fargo WellsSecure Public Root Certificate Authority" }, 2551 - "END": "" 2552 - };}); 2725 + };
+54 -41
package.json
··· 1 1 { 2 2 "name": "@lapo/asn1js", 3 - "version": "1.2.4", 3 + "version": "2.1.1", 4 4 "description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.", 5 + "type": "module", 5 6 "main": "asn1.js", 6 7 "repository": { 7 8 "type": "git", 8 9 "url": "git+https://github.com/lapo-luchini/asn1js.git" 9 10 }, 10 - "keywords": [ "asn1", "ber", "der", "pem" ], 11 + "keywords": [ 12 + "asn1", 13 + "ber", 14 + "der", 15 + "pem" 16 + ], 11 17 "author": "Lapo Luchini <lapo@lapo.it>", 12 18 "license": "ISC", 13 - "bugs": { "url": "https://github.com/lapo-luchini/asn1js/issues" }, 19 + "bugs": { 20 + "url": "https://github.com/lapo-luchini/asn1js/issues" 21 + }, 14 22 "homepage": "https://lapo.it/asn1js/", 15 - "files": [ "asn1.js", "base64.js", "hex.js", "int10.js", "oids.js" ], 16 - "scripts" : { 17 - "lint" : "npx eslint asn1.js base64.js hex.js int10.js oids.js parseRFC.js dumpASN1.js", 18 - "test" : "node test" 23 + "files": [ 24 + "asn1.js", 25 + "base64.js", 26 + "hex.js", 27 + "dom.js", 28 + "defs.js", 29 + "oids.js", 30 + "rfcdef.js", 31 + "dumpASN1.js" 32 + ], 33 + "scripts": { 34 + "lint": "npx eslint asn1.js base64.js hex.js dom.js defs.js oids.js rfcdef.js tags.js context.js index.js parseRFC.js dumpASN1.js test.js testDefs.js vite.config.js theme.js", 35 + "lint-action": "npx @action-validator/cli .github/workflows/node.js.yml", 36 + "build": "vite build", 37 + "serve": "npx -p local-web-server ws", 38 + "test": "node test", 39 + "testdefs": "node testDefs" 40 + }, 41 + "bin": { 42 + "dumpASN1": "./dumpASN1.js" 43 + }, 44 + "engines": { 45 + "node": ">=14.6.0" 46 + }, 47 + "packageManager": "pnpm@7.33.7", 48 + "devDependencies": { 49 + "@eslint/eslintrc": "^3.3.1", 50 + "@eslint/js": "^9.38.0", 51 + "@rollup/wasm-node": "^4.52.5", 52 + "diff": "^8.0.2", 53 + "eslint": "^9.38.0", 54 + "globals": "^16.4.0", 55 + "htmlparser2": "^9.1.0", 56 + "vite": "^7.1.12", 57 + "vite-plugin-dom": "^1.0.5", 58 + "vite-plugin-singlefile": "^2.3.0" 19 59 }, 20 - "eslintConfig": { 21 - "env": { 22 - "amd": true, 23 - "browser": true, 24 - "node": true 25 - }, 26 - "extends": [ "eslint:recommended" ], 27 - "globals": { 28 - "Uint8Array": "readonly" 29 - }, 30 - "rules": { 31 - "strict": [ "error", "function" ], 32 - "indent": [ "error", 4, { "ignoredNodes": [ "Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement > ExpressionStatement[directive='use strict']:first-child" ] } ], 33 - "linebreak-style": [ "error", "unix" ], 34 - "semi": [ "warn", "always" ], 35 - "comma-dangle": [ "error", "never" ] 36 - }, 37 - "overrides": [ 38 - { 39 - "files": [ "test.js", "parseRFC.js", "dumpASN1.js" ], 40 - "parserOptions": { 41 - "ecmaVersion": 2021 42 - }, 43 - "rules": { 44 - "strict": [ "error", "global" ], 45 - "comma-dangle": [ "error", "always-multiline" ] 46 - } 47 - }, { 48 - "files": [ "oids.js" ], 49 - "rules": { 50 - "indent": "off" 51 - } 52 - } 53 - ] 60 + "overrides": { 61 + "rollup": "npm:@rollup/wasm-node" 62 + }, 63 + "pnpm": { 64 + "overrides": { 65 + "rollup": "npm:@rollup/wasm-node" 66 + } 54 67 } 55 68 }
+491 -389
parseRFC.js
··· 1 1 #! /usr/bin/env node 2 - 'use strict'; 2 + 3 + // RFC ASN.1 definition parser 4 + // Copyright (c) 2021 Lapo Luchini <lapo@lapo.it> 5 + 6 + // Permission to use, copy, modify, and/or distribute this software for any 7 + // purpose with or without fee is hereby granted, provided that the above 8 + // copyright notice and this permission notice appear in all copies. 9 + // 10 + // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 + // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 + // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 + // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 + // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 + // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 + // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 + 18 + import * as fs from 'node:fs'; 3 19 4 20 const 5 - fs = require('fs'), 6 21 patches = { // to fix some known RFCs' ASN.1 syntax errors 7 22 0: [ 8 23 [ /\n\n[A-Z].*\n\f\n[A-Z].*\n\n/g, '' ], // page change ··· 13 28 [ /SIGNED \{ (SEQUENCE \{[^}]+\})\s*\}/g, 'SEQUENCE { toBeSigned $1, algorithm AlgorithmIdentifier, signature BIT STRING }' ], 14 29 [ /EXTENSION\.&[^,]+/g, 'OBJECT IDENTIFIER'], 15 30 ], 31 + 2986: [ // currently unsupported 32 + [ /FROM (InformationFramework|AuthenticationFramework) [a-zA-Z]+/g, 'FROM $1 {joint-iso-itu-t(2) ds(5) module(1) usefulDefinitions(0) 3}' ], 33 + [ /[(]v1,[^)]+[)]/g, '' ], 34 + [ /[{][{][^}]+[}][}]/g, '' ], 35 + [ 'SubjectPublicKeyInfo {ALGORITHM: IOSet}', 'SubjectPublicKeyInfo' ], 36 + [ /PKInfoAlgorithms ALGORITHM ::=[^}]+[}]/g, '' ], 37 + [ /(Attributes?) [{] ATTRIBUTE:IOSet [}]/g, '$1' ], 38 + [ /CRIAttributes +ATTRIBUTE +::=[^}]+[}]/g, '' ], 39 + [ /[A-Z]+[.]&id[(][{]IOSet[}][)]/g, 'OBJECT IDENTIFIER' ], 40 + [ /[A-Z]+[.]&Type[(][{]IOSet[}][{]@[a-z]+[}][)]/g, 'ANY' ], 41 + [ /(AlgorithmIdentifier) [{]ALGORITHM:IOSet [}]/g, '$1' ], 42 + [ /SignatureAlgorithms ALGORITHM ::=[^}]+[}]/g, '' ], 43 + ], 16 44 3161: [ // actual syntax errors 17 45 [ /--.*}/g, '}' ], 18 46 [ /^( +)--.*\n(?:\1 .*\n)+/mg, '' ], 19 47 [ /addInfoNotAvailable \(17\)/g, '$&,' ], 20 48 ], 49 + 5208: [ // currently unsupported 50 + [ 'FROM InformationFramework informationFramework', 'FROM InformationFramework {joint-iso-itu-t(2) ds(5) module(1) usefulDefinitions(0) 3}' ], 51 + [ ' {{PrivateKeyAlgorithms}}', '' ], 52 + [ 'Version ::= INTEGER {v1(0)} (v1,...)', 'Version ::= INTEGER {v1(0)}' ], 53 + [ ' {{KeyEncryptionAlgorithms}}', '' ], 54 + [ /\.\.\. -- For local profiles/g, '' ], 55 + ], 21 56 5280: [ // currently unsupported 22 57 [ 'videotex (8) } (0..ub-integer-options)', 'videotex (8) }' ], 23 58 [ /OBJECT IDENTIFIER \( id-qt-cps \| id-qt-unotice \)/g, 'OBJECT IDENTIFIER' ], 24 59 ], 60 + 4210: [ 61 + [ /^\s+-- .*\r?\n/mg, '' ], // comments 62 + ], 63 + 8017: [ // this RFC uses a lot of currently unsupported syntax 64 + [ /ALGORITHM-IDENTIFIER ::= CLASS[^-]+--/, '--' ], 65 + [ /\n +\S+ +ALGORITHM-IDENTIFIER[^\n]+(\n {6}[^\n]+)+\n {3}[}]/g, '' ], 66 + [ /AlgorithmIdentifier [{] ALGORITHM-IDENTIFIER:InfoObjectSet [}] ::=(\n {6}[^\n]+)+\n {3}[}]/, 'AlgorithmIdentifier ::= ANY'], 67 + [ /algorithm +id-[^,\n]+,/g, 'algorithm ANY,' ], 68 + [ / (sha1 {4}HashAlgorithm|mgf1SHA1 {4}MaskGenAlgorithm|pSpecifiedEmpty {4}PSourceAlgorithm|rSAES-OAEP-Default-Identifier {4}RSAES-AlgorithmIdentifier|rSASSA-PSS-Default-Identifier {4}RSASSA-AlgorithmIdentifier) ::= [{](\n( {6}[^\n]+)?)+\n {3}[}]/g, '' ], 69 + [ / ::= AlgorithmIdentifier [{]\s+[{][^}]+[}]\s+[}]/g, ' ::= AlgorithmIdentifier' ], 70 + [ /OCTET STRING[(]SIZE[(]0..MAX[)][)]/g, 'OCTET STRING' ], 71 + [ /emptyString {4}EncodingParameters ::= ''H/g, '' ], 72 + [ /[(]CONSTRAINED BY[^)]+[)]/g, '' ], 73 + ], 74 + 4511: [ 75 + [ /^\s+-- .*\r?\n/mg, '' ], // comments 76 + [ 'EXTENSIBILITY IMPLIED', '' ], 77 + [ /\.\.\.(,| {2})/g, '' ], 78 + [ /value AttributeValue/g, 'AttributeValue' ], 79 + [ /control Control/g, 'Control' ], 80 + [ /Attribute ::= PartialAttribute\(WITH COMPONENTS \{[^}]+\}\)/g, 'PartialAttribute ::= SEQUENCE { type AttributeDescription, vals SET SIZE (1..MAX) OF AttributeValue }' ], 81 + [ /,\s+\}/g, '}' ], 82 + [ /SaslCredentials,/g, 'SaslCredentials' ], 83 + [ /(BindResponse|ExtendedResponse) ::= \[APPLICATION [0-9]+\] SEQUENCE \{[^}]+\}/g, '$1 ::= ANY' ], 84 + [ /selector LDAPString/g, 'LDAPString' ], 85 + [ /filter Filter/g, 'Filter' ], 86 + [ /MatchingRuleAssertion,/g, 'MatchingRuleAssertion' ], 87 + [ /OF substring CHOICE/g, 'OF CHOICE' ], 88 + [ /partialAttribute PartialAttribute/g, 'PartialAttribute' ], 89 + [ /uri URI/g, 'URI' ], 90 + [ /OF change SEQUENCE/g, 'OF SEQUENCE' ], 91 + [ /attribute Attribute/g, 'Attribute' ], 92 + ], 25 93 }; 26 94 27 - let asn1; 28 - let currentMod; 29 - 30 - function Parser(enc, pos) { 31 - this.enc = enc; 32 - this.pos = pos; 33 - this.start = pos; 34 - } 35 - Parser.prototype.getChar = function (pos) { 36 - if (pos === undefined) 37 - pos = this.pos++; 38 - if (pos >= this.enc.length) 39 - throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length; 40 - return this.enc.charAt(pos); 41 - }; 42 - Parser.prototype.exception = function (s, pos) { 43 - if (pos == undefined) pos = this.pos; 44 - let from = Math.max(pos - 30, this.start); 45 - let to = Math.min(pos + 30, this.enc.length); 46 - let ctx = ''; 47 - let arrow = ''; 48 - let i = from; 49 - for (; i < pos; ++i) { 50 - ctx += this.getChar(i); 51 - arrow += ' '; 52 - } 53 - ctx += this.getChar(i++); 54 - arrow += '^'; 55 - for (; i < to; ++i) 56 - ctx += this.getChar(i); 57 - throw new Error('[position ' + pos + '] ' + s + '\n' + ctx.replace(/\s/g, ' ') + '\n' + arrow); 58 - }; 59 - Parser.prototype.peek = function () { 60 - return (typeof this.enc == "string") ? this.enc.charCodeAt(this.pos) : this.enc[this.pos]; 61 - }; 62 - Parser.prototype.peekChar = function () { 63 - return (typeof this.enc == "string") ? this.enc.charAt(this.pos) : String.fromCharCode(this.enc[this.pos]); 64 - }; 65 - Parser.prototype.isWhitespace = function () { 66 - let c = this.peekChar(); 67 - return c == ' ' || c == '\n'; 68 - }; 69 - Parser.prototype.isDigit = function () { 70 - let c = this.peekChar(); 71 - return c >= '0' && c <= '9'; 72 - }; 73 95 // const reWhitespace = /(?:\s|--(?:[}-]?[^\n}-])*(?:\n|--))*/y; 74 96 const reWhitespace = /(?:\s|--(?:-?[^\n-])*(?:\n|--))*/my; 75 - Parser.prototype.skipWhitespace = function () { 76 - reWhitespace.lastIndex = this.pos; 77 - let s = reWhitespace.exec(this.enc); 78 - if (s) 79 - this.pos = reWhitespace.lastIndex; 80 - }; 81 - // DefStream.prototype.eat = function (str) { 82 - // for (let i = 0; i < str.length; ++i) { 83 - // let c = this.getChar(); 84 - // if (c != str.charAt(i)) 85 - // throw new Error("Found '" + c + "', was expecting '" + str.charAt(i) + "'"); 86 - // } 87 - // }; 88 - Parser.prototype.getRegEx = function (type, re) { 89 - this.skipWhitespace(); 90 - re.lastIndex = this.pos; 91 - let s = re.exec(this.enc); //TODO: does not work with typed arrays 92 - if (!s) 93 - this.exception("Found '" + this.peekChar() + "', was expecting a " + type); 94 - s = s[0]; 95 - // console.log('[debug] getRexEx@' + this.pos + ' = ' + s); 96 - this.pos = re.lastIndex; 97 - this.skipWhitespace(); 98 - return s; 99 - }; 100 97 const reIdentifier = /[a-zA-Z](?:[-]?[a-zA-Z0-9])*/y; 101 - Parser.prototype.parseIdentifier = function () { 102 - let id = this.getRegEx('identifier', reIdentifier); 103 - // console.log('[debug] parseIdentifier = ' + id); 104 - return id; 105 - }; 106 98 const reNumber = /0|[1-9][0-9]*/y; 107 - Parser.prototype.parseNumber = function () { 108 - let id = this.getRegEx('number', reNumber); 109 - // console.log('[debug] parseNumber = ' + id); 110 - return id; 111 - }; 112 99 const reToken = /[(){},[\];]|::=|OPTIONAL|DEFAULT|NULL|TRUE|FALSE|\.\.|OF|SIZE|MIN|MAX|DEFINED BY|DEFINITIONS|TAGS|BEGIN|EXPORTS|IMPORTS|FROM|END/y; 113 - Parser.prototype.parseToken = function () { 114 - let tok = this.getRegEx('token', reToken); 115 - return tok; 116 - }; 117 - Parser.prototype.tryToken = function (expect) { 118 - let p = this.pos; 119 - let t; 120 - try { t = this.parseToken(); } catch (e) { /*ignore*/ } 121 - // console.log('[debug] tryToken(' + expect + ') = ' + t); 122 - if (t == expect) 123 - return true; 124 - else { 125 - this.pos = p; 126 - return false; 127 - } 128 - }; 129 - Parser.prototype.expectToken = function (expect) { 130 - let p = this.pos; 131 - let t; 132 - try { t = this.parseToken(); } 133 - catch (e) { console.log('[debug] expectToken', e); } 134 - // console.log('[debug] expectToken(' + expect + ') = ' + t); 135 - if (t != expect) { 136 - this.pos = p; 137 - this.exception("Found '" + t + "', was expecting '" + expect + "'"); 138 - } 139 - }; 140 - Parser.prototype.parseNumberOrValue = function () { 141 - if (this.isDigit()) 142 - return +this.parseNumber(); 143 - return this.parseIdentifier(); 144 - }; 145 - Parser.prototype.parseRange = function () { 146 - let min = this.tryToken('MIN') ? 'MIN' : this.parseNumberOrValue(); 147 - if (this.tryToken('..')) { 148 - let max = this.tryToken('MAX') ? 'MAX' : this.parseNumberOrValue(); 149 - return [min, max]; 150 - } 151 - return min; 152 - }; 153 - const reType = /ANY|BOOLEAN|INTEGER|(?:BIT|OCTET)\s+STRING|OBJECT\s+IDENTIFIER|SEQUENCE|SET|CHOICE|ENUMERATED|(?:Generalized|UTC)Time|(?:BMP|General|Graphic|IA5|ISO64|Numeric|Printable|Teletex|T61|Universal|UTF8|Videotex|Visible)String/y; 154 - Parser.prototype.parseBuiltinType = function () { 155 - let x = { 156 - name: this.getRegEx('type', reType), 157 - type: 'builtin', 158 - }; 159 - // console.log('[debug] parseType = ' + x.name); 160 - try { 161 - switch (x.name) { 162 - case 'ANY': 163 - if (this.tryToken('DEFINED BY')) 164 - x.definedBy = this.parseIdentifier(); 165 - break; 166 - case 'BOOLEAN': 167 - case 'OCTET STRING': 168 - case 'OBJECT IDENTIFIER': 169 - break; 170 - case 'CHOICE': 171 - x.content = this.parseElementTypeList(); 172 - break; 173 - case 'SEQUENCE': 174 - case 'SET': 175 - if (this.peekChar() == '{') { 176 - x.content = this.parseElementTypeList(); 177 - } else { 178 - x.typeOf = 1; 179 - if (this.tryToken('SIZE')) { 180 - this.expectToken('('); 181 - x.size = this.parseRange(); 182 - this.expectToken(')'); 183 - } 184 - this.expectToken('OF'); 185 - x.content = [this.parseType()]; 186 - } 187 - break; 188 - case 'INTEGER': 189 - if (this.tryToken('(')) { 190 - x.range = this.parseRange(); 191 - this.expectToken(')'); 192 - } 193 - // falls through 194 - case 'ENUMERATED': 195 - case 'BIT STRING': 196 - if (this.tryToken('{')) { 197 - x.content = {}; 198 - do { 199 - let id = this.parseIdentifier(); 200 - this.expectToken('('); 201 - let val = this.parseNumber(); //TODO: signed 202 - this.expectToken(')'); 203 - x.content[id] = +val; 204 - } while (this.tryToken(',')); 205 - this.expectToken('}'); 206 - } 207 - break; 208 - case 'BMPString': 209 - case 'GeneralString': 210 - case 'GraphicString': 211 - case 'IA5String': 212 - case 'ISO646String': 213 - case 'NumericString': 214 - case 'PrintableString': 215 - case 'TeletexString': 216 - case 'T61String': 217 - case 'UniversalString': 218 - case 'UTF8String': 219 - case 'VideotexString': 220 - case 'VisibleString': 221 - if (this.tryToken('(')) { 222 - if (this.tryToken('SIZE')) { 223 - this.expectToken('('); 224 - x.size = this.parseRange(); 225 - this.expectToken(')'); 226 - } 227 - this.expectToken(')'); 228 - } 229 - break; 230 - default: 231 - x.content = 'TODO:unknown'; 232 - } 233 - } catch (e) { 234 - console.log('[debug] parseBuiltinType content', e); 235 - x.content = 'TODO:exception'; 236 - } 237 - return x; 238 - }; 100 + const reType = /ANY|NULL|BOOLEAN|INTEGER|(?:BIT|OCTET)\s+STRING|OBJECT\s+IDENTIFIER|SEQUENCE|SET|CHOICE|ENUMERATED|(?:Generalized|UTC)Time|(?:BMP|General|Graphic|IA5|ISO64|Numeric|Printable|Teletex|T61|Universal|UTF8|Videotex|Visible)String/y; 239 101 const reTagClass = /UNIVERSAL|APPLICATION|PRIVATE|/y; 240 102 const reTagType = /IMPLICIT|EXPLICIT|/y; 241 - Parser.prototype.parseTaggedType = function () { 242 - this.expectToken('['); 243 - let tagClass = this.getRegEx('class', reTagClass) || 'CONTEXT'; //TODO: use module defaults 244 - let t = this.parseNumber(); 245 - this.expectToken(']'); 246 - let plicit = this.getRegEx('explicit/implicit', reTagType); 247 - if (plicit == '') plicit = currentMod.tagDefault; 248 - let x = this.parseType(); 249 - return { 250 - name: '[' + t + ']', 251 - type: 'tag', 252 - "class": tagClass, 253 - explicit: (plicit == 'EXPLICIT'), 254 - content: [{ name: '', type: x }], 255 - }; 256 - }; 257 - Parser.prototype.parseType = function () { 258 - if (this.peekChar() == '[') 259 - return this.parseTaggedType(); 260 - let p = this.pos; 261 - try { 262 - return this.parseBuiltinType(); 263 - } catch (e) { 264 - // console.log('[debug] parseAssignment failed on parseType', e); 265 - this.pos = p; 266 - let x = { 267 - name: this.parseIdentifier(), 268 - type: 'defined', 269 - }; 270 - // let from = searchImportedType(x.name); 271 - // if (from) 272 - // x.module = from; 273 - return x; 274 - //TODO "restricted string type" 275 - } 276 - }; 277 - Parser.prototype.parseValueBoolean = function () { 278 - let p = this.pos; 279 - let t = this.parseToken(); 280 - if (t == 'TRUE') 281 - return true; 282 - if (t == 'FALSE') 283 - return false; 284 - this.pos = p; 285 - this.exception("Found '" + t + "', was expecting a boolean"); 286 - }; 103 + const reTagDefault = /(AUTOMATIC|IMPLICIT|EXPLICIT) TAGS|/y; 104 + 105 + let asn1; 106 + let currentMod; 107 + 287 108 function searchImportedValue(id) { 288 109 for (let imp of Object.values(currentMod.imports)) 289 110 for (let name of imp.types) ··· 296 117 } 297 118 throw new Error('Cannot find imported value in any module: ' + id); 298 119 } 299 - Parser.prototype.parseValueOID = function () { 300 - this.expectToken('{'); 301 - let v = ''; 302 - while (!this.tryToken('}')) { 120 + 121 + class Parser { 122 + constructor(enc, pos) { 123 + this.enc = enc; 124 + this.pos = pos; 125 + this.start = pos; 126 + } 127 + getChar(pos) { 128 + if (pos === undefined) 129 + pos = this.pos++; 130 + if (pos >= this.enc.length) 131 + throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length; 132 + return this.enc.charAt(pos); 133 + } 134 + exception(s) { 135 + const pos = this.pos; 136 + let from = Math.max(pos - 30, this.start); 137 + let to = Math.min(pos + 30, this.enc.length); 138 + let ctx = ''; 139 + let arrow = ''; 140 + let i = from; 141 + for (; i < pos; ++i) { 142 + ctx += this.getChar(i); 143 + arrow += ' '; 144 + } 145 + ctx += this.getChar(i++); 146 + arrow += '^'; 147 + for (; i < to; ++i) 148 + ctx += this.getChar(i); 149 + // calculate line/column 150 + let line = 1; 151 + let lastLF = 0; 152 + for (let i = 0; i < pos; ++i) 153 + if (this.enc.charAt(i) == '\n') { 154 + ++line; 155 + lastLF = i; 156 + } 157 + let column = pos - lastLF; 158 + throw new Error('[position ' + pos + ', line ' + line + ':' + column + '] ' + s + '\n' + ctx.replace(/\s/g, ' ') + '\n' + arrow); 159 + } 160 + peek() { 161 + return this.enc.charCodeAt(this.pos); 162 + } 163 + peekChar() { 164 + return this.enc.charAt(this.pos); 165 + } 166 + isWhitespace() { 167 + let c = this.peekChar(); 168 + return c == ' ' || c == '\n'; 169 + } 170 + isDigit() { 171 + let c = this.peekChar(); 172 + return c >= '0' && c <= '9'; 173 + } 174 + skipWhitespace() { 175 + reWhitespace.lastIndex = this.pos; 176 + let s = reWhitespace.exec(this.enc); 177 + if (s) 178 + this.pos = reWhitespace.lastIndex; 179 + } 180 + // DefStream.prototype.eat = function (str) { 181 + // for (let i = 0; i < str.length; ++i) { 182 + // let c = this.getChar(); 183 + // if (c != str.charAt(i)) 184 + // throw new Error("Found '" + c + "', was expecting '" + str.charAt(i) + "'"); 185 + // } 186 + // }; 187 + getRegEx(type, re) { 188 + this.skipWhitespace(); 189 + re.lastIndex = this.pos; 190 + let s = re.exec(this.enc); //TODO: does not work with typed arrays 191 + if (!s) 192 + this.exception("Found '" + this.peekChar() + "', was expecting a " + type); 193 + s = s[0]; 194 + // console.log('[debug] getRexEx@' + this.pos + ' = ' + s); 195 + this.pos = re.lastIndex; 196 + this.skipWhitespace(); 197 + return s; 198 + } 199 + parseIdentifier() { 200 + let id = this.getRegEx('identifier', reIdentifier); 201 + // console.log('[debug] parseIdentifier = ' + id); 202 + return id; 203 + } 204 + parseNumber() { 205 + let id = this.getRegEx('number', reNumber); 206 + // console.log('[debug] parseNumber = ' + id); 207 + return id; 208 + } 209 + parseToken() { 210 + let tok = this.getRegEx('token', reToken); 211 + return tok; 212 + } 213 + tryToken(expect) { 303 214 let p = this.pos; 304 - let val; 305 - if (this.isDigit()) 306 - val = this.parseNumber(); 215 + let t; 216 + try { t = this.parseToken(); } catch (ignore) { /*ignore*/ } 217 + // console.log('[debug] tryToken(' + expect + ') = ' + t); 218 + if (t == expect) 219 + return true; 307 220 else { 308 221 this.pos = p; 309 - let id = this.parseIdentifier(); 310 - if (this.tryToken('(')) { 311 - val = this.parseNumber(); 312 - this.expectToken(')'); 313 - } else { 314 - if (id in currentMod.values) // defined in local module 315 - val = currentMod.values[id].value; 316 - else 317 - val = searchImportedValue(id); 318 - } 222 + return false; 319 223 } 320 - if (v.length) v += '.'; 321 - v += val; 322 224 } 323 - return v; 324 - }; 325 - Parser.prototype.parseValue = function () { 326 - let c = this.peekChar(); 327 - if (c == '{') 328 - return this.parseValueOID(); 329 - if (c >= '0' && c <= '9') 330 - return +this.parseNumber(); 331 - if (c == '-') 332 - return -this.parseNumber(); 333 - let p = this.pos; 334 - try { 335 - switch (this.parseToken()) { 336 - case 'TRUE': 337 - return true; 338 - case 'FALSE': 339 - return false; 340 - case 'NULL': 341 - return null; 225 + expectToken(expect) { 226 + let p = this.pos; 227 + let t; 228 + try { t = this.parseToken(); } 229 + catch (e) { console.log('[debug] expectToken', e); } 230 + // console.log('[debug] expectToken(' + expect + ') = ' + t); 231 + if (t != expect) { 232 + this.pos = p; 233 + this.exception("Found '" + t + "', was expecting '" + expect + "'"); 342 234 } 343 - } catch (e) { 344 - this.pos = p; 345 235 } 346 - p = this.pos; 347 - try { 236 + parseNumberOrValue() { 237 + if (this.isDigit()) 238 + return +this.parseNumber(); 348 239 return this.parseIdentifier(); 349 - } catch (e) { 240 + } 241 + parseRange() { 242 + let min = this.tryToken('MIN') ? 'MIN' : this.parseNumberOrValue(); 243 + if (this.tryToken('..')) { 244 + let max = this.tryToken('MAX') ? 'MAX' : this.parseNumberOrValue(); 245 + return [min, max]; 246 + } 247 + return min; 248 + } 249 + parseBuiltinType() { 250 + let x = { 251 + name: this.getRegEx('type', reType), 252 + type: 'builtin', 253 + }; 254 + // console.log('[debug] parseType = ' + x.name); 255 + try { 256 + switch (x.name) { 257 + case 'ANY': 258 + if (this.tryToken('DEFINED BY')) 259 + x.definedBy = this.parseIdentifier(); 260 + break; 261 + case 'NULL': 262 + case 'BOOLEAN': 263 + case 'OCTET STRING': 264 + case 'OBJECT IDENTIFIER': 265 + break; 266 + case 'CHOICE': 267 + x.content = this.parseElementTypeList(); 268 + break; 269 + case 'SEQUENCE': 270 + case 'SET': 271 + if (this.peekChar() == '{') { 272 + x.content = this.parseElementTypeList(); 273 + } else { 274 + x.typeOf = 1; 275 + if (this.tryToken('SIZE')) { 276 + this.expectToken('('); 277 + x.size = this.parseRange(); 278 + this.expectToken(')'); 279 + } 280 + this.expectToken('OF'); 281 + x.content = [this.parseType()]; 282 + } 283 + break; 284 + case 'INTEGER': 285 + if (this.tryToken('(')) { 286 + x.range = this.parseRange(); 287 + this.expectToken(')'); 288 + } 289 + // falls through 290 + case 'ENUMERATED': 291 + case 'BIT STRING': 292 + if (this.tryToken('{')) { 293 + x.content = {}; 294 + do { 295 + let id = this.parseIdentifier(); 296 + this.expectToken('('); 297 + let val = this.parseNumber(); //TODO: signed 298 + this.expectToken(')'); 299 + x.content[id] = +val; 300 + } while (this.tryToken(',')); 301 + this.expectToken('}'); 302 + } 303 + break; 304 + case 'BMPString': 305 + case 'GeneralString': 306 + case 'GraphicString': 307 + case 'IA5String': 308 + case 'ISO646String': 309 + case 'NumericString': 310 + case 'PrintableString': 311 + case 'TeletexString': 312 + case 'T61String': 313 + case 'UniversalString': 314 + case 'UTF8String': 315 + case 'VideotexString': 316 + case 'VisibleString': 317 + if (this.tryToken('(')) { 318 + if (this.tryToken('SIZE')) { 319 + this.expectToken('('); 320 + x.size = this.parseRange(); 321 + this.expectToken(')'); 322 + } 323 + this.expectToken(')'); 324 + } 325 + break; 326 + case 'UTCTime': 327 + case 'GeneralizedTime': 328 + break; 329 + default: 330 + x.warning = 'type unknown'; 331 + } 332 + } catch (e) { 333 + console.log('[debug] parseBuiltinType content', e); 334 + x.warning = 'type exception'; 335 + } 336 + return x; 337 + } 338 + parseTaggedType() { 339 + this.expectToken('['); 340 + let tagClass = this.getRegEx('class', reTagClass) || 'CONTEXT'; //TODO: use module defaults 341 + let t = this.parseNumber(); 342 + this.expectToken(']'); 343 + let plicit = this.getRegEx('explicit/implicit', reTagType); 344 + if (plicit == '') plicit = currentMod.tagDefault; 345 + let x = this.parseType(); 346 + let name; 347 + switch (tagClass) { // keep in sync with ASN1.typeName 348 + case 'APPLICATION': 349 + name = 'Application ' + t; 350 + break; 351 + case 'PRIVATE': 352 + name = 'Private ' + t; 353 + break; 354 + case 'CONTEXT': 355 + // fall through 356 + default: 357 + name = '[' + t + ']'; 358 + break; 359 + } 360 + return { 361 + name, 362 + type: 'tag', 363 + 'class': tagClass, 364 + explicit: (plicit == 'EXPLICIT'), 365 + content: [{ name: '', type: x }], 366 + }; 367 + } 368 + parseType() { 369 + if (this.peekChar() == '[') 370 + return this.parseTaggedType(); 371 + let p = this.pos; 372 + try { 373 + return this.parseBuiltinType(); 374 + } catch (ignore) { 375 + // console.log('[debug] parseAssignment failed on parseType', e); 376 + this.pos = p; 377 + let x = { 378 + name: this.parseIdentifier(), 379 + type: 'defined', 380 + }; 381 + // let from = searchImportedType(x.name); 382 + // if (from) 383 + // x.module = from; 384 + return x; 385 + //TODO "restricted string type" 386 + } 387 + } 388 + parseValueBoolean() { 389 + let p = this.pos; 390 + let t = this.parseToken(); 391 + if (t == 'TRUE') 392 + return true; 393 + if (t == 'FALSE') 394 + return false; 350 395 this.pos = p; 396 + this.exception("Found '" + t + "', was expecting a boolean"); 351 397 } 352 - this.exception('Unknown value type.'); 353 - }; 354 - /*DefStream.prototype.parseValue = function (type) { 355 - console.log('[debug] parseValue type:', type); 356 - if (type.type == 'defined') { 357 - if (!(type.name in types)) 358 - this.exception("Missing type: " + type.name); 359 - type = types[type.name]; 398 + parseValueOID() { 399 + this.expectToken('{'); 400 + let v = ''; 401 + while (!this.tryToken('}')) { 402 + let p = this.pos; 403 + let val; 404 + if (this.isDigit()) 405 + val = this.parseNumber(); 406 + else { 407 + this.pos = p; 408 + let id = this.parseIdentifier(); 409 + if (this.tryToken('(')) { 410 + val = this.parseNumber(); 411 + this.expectToken(')'); 412 + } else { 413 + if (id in currentMod.values) // defined in local module 414 + val = currentMod.values[id].value; 415 + else try { 416 + val = searchImportedValue(id); 417 + } catch (e) { 418 + this.exception(e.message); 419 + } 420 + } 421 + } 422 + if (v.length) v += '.'; 423 + v += val; 424 + } 425 + return v; 360 426 } 361 - switch (type.name) { 362 - case 'BOOLEAN': 363 - return this.parseValueBoolean(); 364 - case 'OBJECT IDENTIFIER': 427 + parseValue() { 428 + let c = this.peekChar(); 429 + if (c == '{') 365 430 return this.parseValueOID(); 366 - default: 367 - console.log('[debug] parseValue unknown:', type); 368 - return 'TODO:value'; 431 + if (c >= '0' && c <= '9') 432 + return +this.parseNumber(); 433 + if (c == '-') 434 + return -this.parseNumber(); 435 + let p = this.pos; 436 + try { 437 + switch (this.parseToken()) { 438 + case 'TRUE': 439 + return true; 440 + case 'FALSE': 441 + return false; 442 + case 'NULL': 443 + return null; 444 + } 445 + } catch (ignore) { 446 + this.pos = p; 447 + } 448 + p = this.pos; 449 + try { 450 + return this.parseIdentifier(); 451 + } catch (ignore) { 452 + this.pos = p; 453 + } 454 + this.exception('Unknown value type.'); 369 455 } 370 - };*/ 371 - Parser.prototype.parseElementType = function () { 372 - let x = Object.assign({ id: this.parseIdentifier() }, this.parseType()); 373 - // console.log('[debug] parseElementType 1:', x); 374 - if (this.tryToken('OPTIONAL')) 375 - x.optional = true; 376 - if (this.tryToken('DEFAULT')) 377 - x.default = this.parseValue(x.type); 378 - // console.log('[debug] parseElementType 2:', x); 379 - return x; 380 - }; 381 - Parser.prototype.parseElementTypeList = function () { 382 - let v = []; 383 - this.expectToken('{'); 384 - do { 385 - v.push(this.parseElementType()); 386 - } while (this.tryToken(',')); 387 - this.expectToken('}'); 388 - return v; 389 - }; 390 - Parser.prototype.parseAssignment = function () { 391 - let name = this.parseIdentifier(); 392 - if (this.tryToken('::=')) { // type assignment 393 - // console.log('type name', name); 394 - let type = this.parseType(); 395 - currentMod.types[name] = { name, type }; 396 - return currentMod.types[name]; 397 - } else { // value assignment 398 - // console.log('value name', name); 399 - let type = this.parseType(); 400 - // console.log('[debug] parseAssignment type:', type); 401 - this.expectToken('::='); 402 - let value = this.parseValue(type); 403 - currentMod.values[name] = { name, type, value }; 404 - return currentMod.values[name]; 456 + /*DefStream.prototype.parseValue = function (type) { 457 + console.log('[debug] parseValue type:', type); 458 + if (type.type == 'defined') { 459 + if (!(type.name in types)) 460 + this.exception("Missing type: " + type.name); 461 + type = types[type.name]; 462 + } 463 + switch (type.name) { 464 + case 'BOOLEAN': 465 + return this.parseValueBoolean(); 466 + case 'OBJECT IDENTIFIER': 467 + return this.parseValueOID(); 468 + default: 469 + console.log('[debug] parseValue unknown:', type); 470 + return 'TODO:value'; 471 + } 472 + }*/ 473 + parseElementType() { 474 + let x = Object.assign({ id: this.parseIdentifier() }, this.parseType()); 475 + // console.log('[debug] parseElementType 1:', x); 476 + if (this.tryToken('OPTIONAL')) 477 + x.optional = true; 478 + if (this.tryToken('DEFAULT')) 479 + x.default = this.parseValue(x.type); 480 + // console.log('[debug] parseElementType 2:', x); 481 + return x; 405 482 } 406 - }; 407 - Parser.prototype.parseModuleIdentifier = function () { 408 - return { 409 - name: this.parseIdentifier(), 410 - oid: this.parseValueOID(), 411 - }; 412 - }; 413 - Parser.prototype.parseSymbolsImported = function () { 414 - let imports = {}; 415 - do { 416 - let l = []; 483 + parseElementTypeList() { 484 + let v = []; 485 + this.expectToken('{'); 417 486 do { 418 - l.push(this.parseIdentifier()); 487 + v.push(this.parseElementType()); 419 488 } while (this.tryToken(',')); 420 - this.expectToken('FROM'); 489 + this.expectToken('}'); 490 + return v; 491 + } 492 + parseAssignment() { 493 + let name = this.parseIdentifier(); 494 + if (this.tryToken('::=')) { // type assignment 495 + // console.log('type name', name); 496 + let type = this.parseType(); 497 + currentMod.types[name] = { name, type }; 498 + return currentMod.types[name]; 499 + } else { // value assignment 500 + // console.log('value name', name); 501 + let type = this.parseType(); 502 + // console.log('[debug] parseAssignment type:', type); 503 + this.expectToken('::='); 504 + let value = this.parseValue(type); 505 + currentMod.values[name] = { name, type, value }; 506 + return currentMod.values[name]; 507 + } 508 + } 509 + parseModuleIdentifier() { 510 + return { 511 + name: this.parseIdentifier(), 512 + oid: this.parseValueOID(), 513 + }; 514 + } 515 + parseSymbolsImported() { 516 + let imports = {}; 517 + do { 518 + let l = []; 519 + do { 520 + l.push(this.parseIdentifier()); 521 + } while (this.tryToken(',')); 522 + this.expectToken('FROM'); 523 + let mod = this.parseModuleIdentifier(); 524 + mod.types = l; 525 + imports[mod.oid] = mod; 526 + } while (this.peekChar() != ';'); 527 + return imports; 528 + } 529 + parseModuleDefinition(file) { 421 530 let mod = this.parseModuleIdentifier(); 422 - mod.types = l; 423 - imports[mod.oid] = mod; 424 - } while (this.peekChar() != ';'); 425 - return imports; 426 - }; 427 - const reTagDefault = /(AUTOMATIC|IMPLICIT|EXPLICIT) TAGS|/y; 428 - Parser.prototype.parseModuleDefinition = function (file) { 429 - let mod = this.parseModuleIdentifier(); 430 - currentMod = mod; // for deeply nested parsers 431 - mod.source = file; 432 - this.expectToken('DEFINITIONS'); 433 - mod.tagDefault = this.getRegEx('tag default', reTagDefault).split(' ')[0]; 434 - this.expectToken('::='); 435 - this.expectToken('BEGIN'); 436 - //TODO this.tryToken('EXPORTS') 437 - if (this.tryToken('IMPORTS')) { 438 - mod.imports = this.parseSymbolsImported(); 439 - this.expectToken(';'); 531 + currentMod = mod; // for deeply nested parsers 532 + mod.source = file; 533 + this.expectToken('DEFINITIONS'); 534 + mod.tagDefault = this.getRegEx('tag default', reTagDefault).split(' ')[0]; 535 + this.expectToken('::='); 536 + this.expectToken('BEGIN'); 537 + //TODO this.tryToken('EXPORTS') 538 + if (this.tryToken('IMPORTS')) { 539 + mod.imports = this.parseSymbolsImported(); 540 + this.expectToken(';'); 541 + } 542 + mod.values = {}; 543 + mod.types = {}; 544 + while (!this.tryToken('END')) 545 + this.parseAssignment(); 546 + return mod; 440 547 } 441 - mod.values = {}; 442 - mod.types = {}; 443 - while (!this.tryToken('END')) 444 - this.parseAssignment(); 445 - return mod; 446 - }; 548 + } 447 549 448 550 let s = fs.readFileSync(process.argv[2], 'utf8'); 449 551 let num = /^Request for Comments: ([0-9]+)/m.exec(s)[1]; ··· 453 555 if (num in patches) 454 556 for (let p of patches[num]) 455 557 s = s.replace(p[0], p[1]); 456 - // fs.writeFileSync('rfc3161_patched.txt', s, 'utf8'); 558 + fs.writeFileSync(process.argv[2].replace(/[.]txt$/, '_patched.txt'), s, 'utf8'); 457 559 // console.log(s); 458 560 asn1 = JSON.parse(fs.readFileSync(process.argv[3], 'utf8')); 459 - const reModuleDefinition = /\s[A-Z](?:[-]?[a-zA-Z0-9])*\s*\{[^}]+\}\s*DEFINITIONS/gm; 561 + const reModuleDefinition = /\s[A-Z](?:[-]?[a-zA-Z0-9])*\s*\{[^}]+\}\s*(^--.*|\n)*DEFINITIONS/gm; 460 562 let m; 461 563 while ((m = reModuleDefinition.exec(s))) { 462 564 new Parser(s, m.index).parseModuleDefinition(process.argv[2]); ··· 465 567 asn1[currentMod.oid] = currentMod; 466 568 } 467 569 /*asn1 = Object.keys(asn1).sort().reduce( 468 - (obj, key) => { 570 + (obj, key) => { 469 571 obj[key] = asn1[key]; 470 572 return obj; 471 - }, 573 + }, 472 574 {} 473 575 );*/ 474 576 fs.writeFileSync(process.argv[3], JSON.stringify(asn1, null, 2) + '\n', 'utf8');
+1115
pnpm-lock.yaml
··· 1 + lockfileVersion: 5.4 2 + 3 + overrides: 4 + rollup: npm:@rollup/wasm-node 5 + 6 + specifiers: 7 + '@eslint/eslintrc': ^3.3.1 8 + '@eslint/js': ^9.38.0 9 + '@rollup/wasm-node': ^4.52.5 10 + diff: ^8.0.2 11 + eslint: ^9.38.0 12 + globals: ^16.4.0 13 + htmlparser2: ^9.1.0 14 + vite: ^7.1.12 15 + vite-plugin-dom: ^1.0.5 16 + vite-plugin-singlefile: ^2.3.0 17 + 18 + devDependencies: 19 + '@eslint/eslintrc': 3.3.1 20 + '@eslint/js': 9.38.0 21 + '@rollup/wasm-node': 4.52.5 22 + diff: 8.0.2 23 + eslint: 9.38.0 24 + globals: 16.4.0 25 + htmlparser2: 9.1.0 26 + vite: 7.1.12 27 + vite-plugin-dom: 1.0.5_vite@7.1.12 28 + vite-plugin-singlefile: 2.3.0_vite@7.1.12 29 + 30 + packages: 31 + 32 + /@esbuild/aix-ppc64/0.25.11: 33 + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} 34 + engines: {node: '>=18'} 35 + cpu: [ppc64] 36 + os: [aix] 37 + requiresBuild: true 38 + dev: true 39 + optional: true 40 + 41 + /@esbuild/android-arm/0.25.11: 42 + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} 43 + engines: {node: '>=18'} 44 + cpu: [arm] 45 + os: [android] 46 + requiresBuild: true 47 + dev: true 48 + optional: true 49 + 50 + /@esbuild/android-arm64/0.25.11: 51 + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} 52 + engines: {node: '>=18'} 53 + cpu: [arm64] 54 + os: [android] 55 + requiresBuild: true 56 + dev: true 57 + optional: true 58 + 59 + /@esbuild/android-x64/0.25.11: 60 + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} 61 + engines: {node: '>=18'} 62 + cpu: [x64] 63 + os: [android] 64 + requiresBuild: true 65 + dev: true 66 + optional: true 67 + 68 + /@esbuild/darwin-arm64/0.25.11: 69 + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} 70 + engines: {node: '>=18'} 71 + cpu: [arm64] 72 + os: [darwin] 73 + requiresBuild: true 74 + dev: true 75 + optional: true 76 + 77 + /@esbuild/darwin-x64/0.25.11: 78 + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} 79 + engines: {node: '>=18'} 80 + cpu: [x64] 81 + os: [darwin] 82 + requiresBuild: true 83 + dev: true 84 + optional: true 85 + 86 + /@esbuild/freebsd-arm64/0.25.11: 87 + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} 88 + engines: {node: '>=18'} 89 + cpu: [arm64] 90 + os: [freebsd] 91 + requiresBuild: true 92 + dev: true 93 + optional: true 94 + 95 + /@esbuild/freebsd-x64/0.25.11: 96 + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} 97 + engines: {node: '>=18'} 98 + cpu: [x64] 99 + os: [freebsd] 100 + requiresBuild: true 101 + dev: true 102 + optional: true 103 + 104 + /@esbuild/linux-arm/0.25.11: 105 + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} 106 + engines: {node: '>=18'} 107 + cpu: [arm] 108 + os: [linux] 109 + requiresBuild: true 110 + dev: true 111 + optional: true 112 + 113 + /@esbuild/linux-arm64/0.25.11: 114 + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} 115 + engines: {node: '>=18'} 116 + cpu: [arm64] 117 + os: [linux] 118 + requiresBuild: true 119 + dev: true 120 + optional: true 121 + 122 + /@esbuild/linux-ia32/0.25.11: 123 + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} 124 + engines: {node: '>=18'} 125 + cpu: [ia32] 126 + os: [linux] 127 + requiresBuild: true 128 + dev: true 129 + optional: true 130 + 131 + /@esbuild/linux-loong64/0.25.11: 132 + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} 133 + engines: {node: '>=18'} 134 + cpu: [loong64] 135 + os: [linux] 136 + requiresBuild: true 137 + dev: true 138 + optional: true 139 + 140 + /@esbuild/linux-mips64el/0.25.11: 141 + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} 142 + engines: {node: '>=18'} 143 + cpu: [mips64el] 144 + os: [linux] 145 + requiresBuild: true 146 + dev: true 147 + optional: true 148 + 149 + /@esbuild/linux-ppc64/0.25.11: 150 + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} 151 + engines: {node: '>=18'} 152 + cpu: [ppc64] 153 + os: [linux] 154 + requiresBuild: true 155 + dev: true 156 + optional: true 157 + 158 + /@esbuild/linux-riscv64/0.25.11: 159 + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} 160 + engines: {node: '>=18'} 161 + cpu: [riscv64] 162 + os: [linux] 163 + requiresBuild: true 164 + dev: true 165 + optional: true 166 + 167 + /@esbuild/linux-s390x/0.25.11: 168 + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} 169 + engines: {node: '>=18'} 170 + cpu: [s390x] 171 + os: [linux] 172 + requiresBuild: true 173 + dev: true 174 + optional: true 175 + 176 + /@esbuild/linux-x64/0.25.11: 177 + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} 178 + engines: {node: '>=18'} 179 + cpu: [x64] 180 + os: [linux] 181 + requiresBuild: true 182 + dev: true 183 + optional: true 184 + 185 + /@esbuild/netbsd-arm64/0.25.11: 186 + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} 187 + engines: {node: '>=18'} 188 + cpu: [arm64] 189 + os: [netbsd] 190 + requiresBuild: true 191 + dev: true 192 + optional: true 193 + 194 + /@esbuild/netbsd-x64/0.25.11: 195 + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} 196 + engines: {node: '>=18'} 197 + cpu: [x64] 198 + os: [netbsd] 199 + requiresBuild: true 200 + dev: true 201 + optional: true 202 + 203 + /@esbuild/openbsd-arm64/0.25.11: 204 + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} 205 + engines: {node: '>=18'} 206 + cpu: [arm64] 207 + os: [openbsd] 208 + requiresBuild: true 209 + dev: true 210 + optional: true 211 + 212 + /@esbuild/openbsd-x64/0.25.11: 213 + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} 214 + engines: {node: '>=18'} 215 + cpu: [x64] 216 + os: [openbsd] 217 + requiresBuild: true 218 + dev: true 219 + optional: true 220 + 221 + /@esbuild/openharmony-arm64/0.25.11: 222 + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} 223 + engines: {node: '>=18'} 224 + cpu: [arm64] 225 + os: [openharmony] 226 + requiresBuild: true 227 + dev: true 228 + optional: true 229 + 230 + /@esbuild/sunos-x64/0.25.11: 231 + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} 232 + engines: {node: '>=18'} 233 + cpu: [x64] 234 + os: [sunos] 235 + requiresBuild: true 236 + dev: true 237 + optional: true 238 + 239 + /@esbuild/win32-arm64/0.25.11: 240 + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} 241 + engines: {node: '>=18'} 242 + cpu: [arm64] 243 + os: [win32] 244 + requiresBuild: true 245 + dev: true 246 + optional: true 247 + 248 + /@esbuild/win32-ia32/0.25.11: 249 + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} 250 + engines: {node: '>=18'} 251 + cpu: [ia32] 252 + os: [win32] 253 + requiresBuild: true 254 + dev: true 255 + optional: true 256 + 257 + /@esbuild/win32-x64/0.25.11: 258 + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} 259 + engines: {node: '>=18'} 260 + cpu: [x64] 261 + os: [win32] 262 + requiresBuild: true 263 + dev: true 264 + optional: true 265 + 266 + /@eslint-community/eslint-utils/4.9.0_eslint@9.38.0: 267 + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} 268 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 269 + peerDependencies: 270 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 271 + dependencies: 272 + eslint: 9.38.0 273 + eslint-visitor-keys: 3.4.3 274 + dev: true 275 + 276 + /@eslint-community/regexpp/4.12.2: 277 + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 278 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 279 + dev: true 280 + 281 + /@eslint/config-array/0.21.1: 282 + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 283 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 284 + dependencies: 285 + '@eslint/object-schema': 2.1.7 286 + debug: 4.4.3 287 + minimatch: 3.1.2 288 + transitivePeerDependencies: 289 + - supports-color 290 + dev: true 291 + 292 + /@eslint/config-helpers/0.4.2: 293 + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} 294 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 295 + dependencies: 296 + '@eslint/core': 0.17.0 297 + dev: true 298 + 299 + /@eslint/core/0.16.0: 300 + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} 301 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 302 + dependencies: 303 + '@types/json-schema': 7.0.15 304 + dev: true 305 + 306 + /@eslint/core/0.17.0: 307 + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} 308 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 309 + dependencies: 310 + '@types/json-schema': 7.0.15 311 + dev: true 312 + 313 + /@eslint/eslintrc/3.3.1: 314 + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 315 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 316 + dependencies: 317 + ajv: 6.12.6 318 + debug: 4.4.3 319 + espree: 10.4.0 320 + globals: 14.0.0 321 + ignore: 5.3.2 322 + import-fresh: 3.3.1 323 + js-yaml: 4.1.0 324 + minimatch: 3.1.2 325 + strip-json-comments: 3.1.1 326 + transitivePeerDependencies: 327 + - supports-color 328 + dev: true 329 + 330 + /@eslint/js/9.38.0: 331 + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} 332 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 333 + dev: true 334 + 335 + /@eslint/object-schema/2.1.7: 336 + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 337 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 338 + dev: true 339 + 340 + /@eslint/plugin-kit/0.4.1: 341 + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} 342 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 343 + dependencies: 344 + '@eslint/core': 0.17.0 345 + levn: 0.4.1 346 + dev: true 347 + 348 + /@humanfs/core/0.19.1: 349 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 350 + engines: {node: '>=18.18.0'} 351 + dev: true 352 + 353 + /@humanfs/node/0.16.7: 354 + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 355 + engines: {node: '>=18.18.0'} 356 + dependencies: 357 + '@humanfs/core': 0.19.1 358 + '@humanwhocodes/retry': 0.4.3 359 + dev: true 360 + 361 + /@humanwhocodes/module-importer/1.0.1: 362 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 363 + engines: {node: '>=12.22'} 364 + dev: true 365 + 366 + /@humanwhocodes/retry/0.4.3: 367 + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 368 + engines: {node: '>=18.18'} 369 + dev: true 370 + 371 + /@rollup/wasm-node/4.52.5: 372 + resolution: {integrity: sha512-ldY4tEzSMBHNwB8TfRpi7RRRjjyfKlwjdebw5pS1lu0xaY3g4RDc6ople2wEYulVOKVeH7ZJwRx0iw4pGtjMHg==} 373 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 374 + hasBin: true 375 + dependencies: 376 + '@types/estree': 1.0.8 377 + optionalDependencies: 378 + fsevents: 2.3.3 379 + dev: true 380 + 381 + /@types/estree/1.0.8: 382 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 383 + dev: true 384 + 385 + /@types/json-schema/7.0.15: 386 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 387 + dev: true 388 + 389 + /acorn-jsx/5.3.2_acorn@8.15.0: 390 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 391 + peerDependencies: 392 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 393 + dependencies: 394 + acorn: 8.15.0 395 + dev: true 396 + 397 + /acorn/8.15.0: 398 + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 399 + engines: {node: '>=0.4.0'} 400 + hasBin: true 401 + dev: true 402 + 403 + /ajv/6.12.6: 404 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 405 + dependencies: 406 + fast-deep-equal: 3.1.3 407 + fast-json-stable-stringify: 2.1.0 408 + json-schema-traverse: 0.4.1 409 + uri-js: 4.4.1 410 + dev: true 411 + 412 + /ansi-styles/4.3.0: 413 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 414 + engines: {node: '>=8'} 415 + dependencies: 416 + color-convert: 2.0.1 417 + dev: true 418 + 419 + /argparse/2.0.1: 420 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 421 + dev: true 422 + 423 + /balanced-match/1.0.2: 424 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 425 + dev: true 426 + 427 + /brace-expansion/1.1.12: 428 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 429 + dependencies: 430 + balanced-match: 1.0.2 431 + concat-map: 0.0.1 432 + dev: true 433 + 434 + /braces/3.0.3: 435 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 436 + engines: {node: '>=8'} 437 + dependencies: 438 + fill-range: 7.1.1 439 + dev: true 440 + 441 + /callsites/3.1.0: 442 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 443 + engines: {node: '>=6'} 444 + dev: true 445 + 446 + /chalk/4.1.2: 447 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 448 + engines: {node: '>=10'} 449 + dependencies: 450 + ansi-styles: 4.3.0 451 + supports-color: 7.2.0 452 + dev: true 453 + 454 + /color-convert/2.0.1: 455 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 456 + engines: {node: '>=7.0.0'} 457 + dependencies: 458 + color-name: 1.1.4 459 + dev: true 460 + 461 + /color-name/1.1.4: 462 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 463 + dev: true 464 + 465 + /concat-map/0.0.1: 466 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 467 + dev: true 468 + 469 + /cross-spawn/7.0.6: 470 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 471 + engines: {node: '>= 8'} 472 + dependencies: 473 + path-key: 3.1.1 474 + shebang-command: 2.0.0 475 + which: 2.0.2 476 + dev: true 477 + 478 + /debug/4.4.3: 479 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 480 + engines: {node: '>=6.0'} 481 + peerDependencies: 482 + supports-color: '*' 483 + peerDependenciesMeta: 484 + supports-color: 485 + optional: true 486 + dependencies: 487 + ms: 2.1.3 488 + dev: true 489 + 490 + /deep-is/0.1.4: 491 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 492 + dev: true 493 + 494 + /diff/8.0.2: 495 + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} 496 + engines: {node: '>=0.3.1'} 497 + dev: true 498 + 499 + /dom-serializer/2.0.0: 500 + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 501 + dependencies: 502 + domelementtype: 2.3.0 503 + domhandler: 5.0.3 504 + entities: 4.5.0 505 + dev: true 506 + 507 + /domelementtype/2.3.0: 508 + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 509 + dev: true 510 + 511 + /domhandler/5.0.3: 512 + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 513 + engines: {node: '>= 4'} 514 + dependencies: 515 + domelementtype: 2.3.0 516 + dev: true 517 + 518 + /domutils/3.2.2: 519 + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 520 + dependencies: 521 + dom-serializer: 2.0.0 522 + domelementtype: 2.3.0 523 + domhandler: 5.0.3 524 + dev: true 525 + 526 + /entities/4.5.0: 527 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 528 + engines: {node: '>=0.12'} 529 + dev: true 530 + 531 + /entities/6.0.1: 532 + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 533 + engines: {node: '>=0.12'} 534 + dev: true 535 + 536 + /esbuild/0.25.11: 537 + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} 538 + engines: {node: '>=18'} 539 + hasBin: true 540 + requiresBuild: true 541 + optionalDependencies: 542 + '@esbuild/aix-ppc64': 0.25.11 543 + '@esbuild/android-arm': 0.25.11 544 + '@esbuild/android-arm64': 0.25.11 545 + '@esbuild/android-x64': 0.25.11 546 + '@esbuild/darwin-arm64': 0.25.11 547 + '@esbuild/darwin-x64': 0.25.11 548 + '@esbuild/freebsd-arm64': 0.25.11 549 + '@esbuild/freebsd-x64': 0.25.11 550 + '@esbuild/linux-arm': 0.25.11 551 + '@esbuild/linux-arm64': 0.25.11 552 + '@esbuild/linux-ia32': 0.25.11 553 + '@esbuild/linux-loong64': 0.25.11 554 + '@esbuild/linux-mips64el': 0.25.11 555 + '@esbuild/linux-ppc64': 0.25.11 556 + '@esbuild/linux-riscv64': 0.25.11 557 + '@esbuild/linux-s390x': 0.25.11 558 + '@esbuild/linux-x64': 0.25.11 559 + '@esbuild/netbsd-arm64': 0.25.11 560 + '@esbuild/netbsd-x64': 0.25.11 561 + '@esbuild/openbsd-arm64': 0.25.11 562 + '@esbuild/openbsd-x64': 0.25.11 563 + '@esbuild/openharmony-arm64': 0.25.11 564 + '@esbuild/sunos-x64': 0.25.11 565 + '@esbuild/win32-arm64': 0.25.11 566 + '@esbuild/win32-ia32': 0.25.11 567 + '@esbuild/win32-x64': 0.25.11 568 + dev: true 569 + 570 + /escape-string-regexp/4.0.0: 571 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 572 + engines: {node: '>=10'} 573 + dev: true 574 + 575 + /eslint-scope/8.4.0: 576 + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 577 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 578 + dependencies: 579 + esrecurse: 4.3.0 580 + estraverse: 5.3.0 581 + dev: true 582 + 583 + /eslint-visitor-keys/3.4.3: 584 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 585 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 586 + dev: true 587 + 588 + /eslint-visitor-keys/4.2.1: 589 + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 590 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 591 + dev: true 592 + 593 + /eslint/9.38.0: 594 + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} 595 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 596 + hasBin: true 597 + peerDependencies: 598 + jiti: '*' 599 + peerDependenciesMeta: 600 + jiti: 601 + optional: true 602 + dependencies: 603 + '@eslint-community/eslint-utils': 4.9.0_eslint@9.38.0 604 + '@eslint-community/regexpp': 4.12.2 605 + '@eslint/config-array': 0.21.1 606 + '@eslint/config-helpers': 0.4.2 607 + '@eslint/core': 0.16.0 608 + '@eslint/eslintrc': 3.3.1 609 + '@eslint/js': 9.38.0 610 + '@eslint/plugin-kit': 0.4.1 611 + '@humanfs/node': 0.16.7 612 + '@humanwhocodes/module-importer': 1.0.1 613 + '@humanwhocodes/retry': 0.4.3 614 + '@types/estree': 1.0.8 615 + ajv: 6.12.6 616 + chalk: 4.1.2 617 + cross-spawn: 7.0.6 618 + debug: 4.4.3 619 + escape-string-regexp: 4.0.0 620 + eslint-scope: 8.4.0 621 + eslint-visitor-keys: 4.2.1 622 + espree: 10.4.0 623 + esquery: 1.6.0 624 + esutils: 2.0.3 625 + fast-deep-equal: 3.1.3 626 + file-entry-cache: 8.0.0 627 + find-up: 5.0.0 628 + glob-parent: 6.0.2 629 + ignore: 5.3.2 630 + imurmurhash: 0.1.4 631 + is-glob: 4.0.3 632 + json-stable-stringify-without-jsonify: 1.0.1 633 + lodash.merge: 4.6.2 634 + minimatch: 3.1.2 635 + natural-compare: 1.4.0 636 + optionator: 0.9.4 637 + transitivePeerDependencies: 638 + - supports-color 639 + dev: true 640 + 641 + /espree/10.4.0: 642 + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 643 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 644 + dependencies: 645 + acorn: 8.15.0 646 + acorn-jsx: 5.3.2_acorn@8.15.0 647 + eslint-visitor-keys: 4.2.1 648 + dev: true 649 + 650 + /esquery/1.6.0: 651 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 652 + engines: {node: '>=0.10'} 653 + dependencies: 654 + estraverse: 5.3.0 655 + dev: true 656 + 657 + /esrecurse/4.3.0: 658 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 659 + engines: {node: '>=4.0'} 660 + dependencies: 661 + estraverse: 5.3.0 662 + dev: true 663 + 664 + /estraverse/5.3.0: 665 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 666 + engines: {node: '>=4.0'} 667 + dev: true 668 + 669 + /esutils/2.0.3: 670 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 671 + engines: {node: '>=0.10.0'} 672 + dev: true 673 + 674 + /fast-deep-equal/3.1.3: 675 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 676 + dev: true 677 + 678 + /fast-json-stable-stringify/2.1.0: 679 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 680 + dev: true 681 + 682 + /fast-levenshtein/2.0.6: 683 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 684 + dev: true 685 + 686 + /fdir/6.5.0_picomatch@4.0.3: 687 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 688 + engines: {node: '>=12.0.0'} 689 + peerDependencies: 690 + picomatch: ^3 || ^4 691 + peerDependenciesMeta: 692 + picomatch: 693 + optional: true 694 + dependencies: 695 + picomatch: 4.0.3 696 + dev: true 697 + 698 + /file-entry-cache/8.0.0: 699 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 700 + engines: {node: '>=16.0.0'} 701 + dependencies: 702 + flat-cache: 4.0.1 703 + dev: true 704 + 705 + /fill-range/7.1.1: 706 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 707 + engines: {node: '>=8'} 708 + dependencies: 709 + to-regex-range: 5.0.1 710 + dev: true 711 + 712 + /find-up/5.0.0: 713 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 714 + engines: {node: '>=10'} 715 + dependencies: 716 + locate-path: 6.0.0 717 + path-exists: 4.0.0 718 + dev: true 719 + 720 + /flat-cache/4.0.1: 721 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 722 + engines: {node: '>=16'} 723 + dependencies: 724 + flatted: 3.3.3 725 + keyv: 4.5.4 726 + dev: true 727 + 728 + /flatted/3.3.3: 729 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 730 + dev: true 731 + 732 + /fsevents/2.3.3: 733 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 734 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 735 + os: [darwin] 736 + requiresBuild: true 737 + dev: true 738 + optional: true 739 + 740 + /glob-parent/6.0.2: 741 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 742 + engines: {node: '>=10.13.0'} 743 + dependencies: 744 + is-glob: 4.0.3 745 + dev: true 746 + 747 + /globals/14.0.0: 748 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 749 + engines: {node: '>=18'} 750 + dev: true 751 + 752 + /globals/16.4.0: 753 + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} 754 + engines: {node: '>=18'} 755 + dev: true 756 + 757 + /has-flag/4.0.0: 758 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 759 + engines: {node: '>=8'} 760 + dev: true 761 + 762 + /htmlparser2/10.0.0: 763 + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} 764 + dependencies: 765 + domelementtype: 2.3.0 766 + domhandler: 5.0.3 767 + domutils: 3.2.2 768 + entities: 6.0.1 769 + dev: true 770 + 771 + /htmlparser2/9.1.0: 772 + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} 773 + dependencies: 774 + domelementtype: 2.3.0 775 + domhandler: 5.0.3 776 + domutils: 3.2.2 777 + entities: 4.5.0 778 + dev: true 779 + 780 + /ignore/5.3.2: 781 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 782 + engines: {node: '>= 4'} 783 + dev: true 784 + 785 + /import-fresh/3.3.1: 786 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 787 + engines: {node: '>=6'} 788 + dependencies: 789 + parent-module: 1.0.1 790 + resolve-from: 4.0.0 791 + dev: true 792 + 793 + /imurmurhash/0.1.4: 794 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 795 + engines: {node: '>=0.8.19'} 796 + dev: true 797 + 798 + /is-extglob/2.1.1: 799 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 800 + engines: {node: '>=0.10.0'} 801 + dev: true 802 + 803 + /is-glob/4.0.3: 804 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 805 + engines: {node: '>=0.10.0'} 806 + dependencies: 807 + is-extglob: 2.1.1 808 + dev: true 809 + 810 + /is-number/7.0.0: 811 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 812 + engines: {node: '>=0.12.0'} 813 + dev: true 814 + 815 + /isexe/2.0.0: 816 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 817 + dev: true 818 + 819 + /js-yaml/4.1.0: 820 + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 821 + hasBin: true 822 + dependencies: 823 + argparse: 2.0.1 824 + dev: true 825 + 826 + /json-buffer/3.0.1: 827 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 828 + dev: true 829 + 830 + /json-schema-traverse/0.4.1: 831 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 832 + dev: true 833 + 834 + /json-stable-stringify-without-jsonify/1.0.1: 835 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 836 + dev: true 837 + 838 + /keyv/4.5.4: 839 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 840 + dependencies: 841 + json-buffer: 3.0.1 842 + dev: true 843 + 844 + /levn/0.4.1: 845 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 846 + engines: {node: '>= 0.8.0'} 847 + dependencies: 848 + prelude-ls: 1.2.1 849 + type-check: 0.4.0 850 + dev: true 851 + 852 + /locate-path/6.0.0: 853 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 854 + engines: {node: '>=10'} 855 + dependencies: 856 + p-locate: 5.0.0 857 + dev: true 858 + 859 + /lodash.merge/4.6.2: 860 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 861 + dev: true 862 + 863 + /micromatch/4.0.8: 864 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 865 + engines: {node: '>=8.6'} 866 + dependencies: 867 + braces: 3.0.3 868 + picomatch: 2.3.1 869 + dev: true 870 + 871 + /minimatch/3.1.2: 872 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 873 + dependencies: 874 + brace-expansion: 1.1.12 875 + dev: true 876 + 877 + /ms/2.1.3: 878 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 879 + dev: true 880 + 881 + /nanoid/3.3.11: 882 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 883 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 884 + hasBin: true 885 + dev: true 886 + 887 + /natural-compare/1.4.0: 888 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 889 + dev: true 890 + 891 + /optionator/0.9.4: 892 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 893 + engines: {node: '>= 0.8.0'} 894 + dependencies: 895 + deep-is: 0.1.4 896 + fast-levenshtein: 2.0.6 897 + levn: 0.4.1 898 + prelude-ls: 1.2.1 899 + type-check: 0.4.0 900 + word-wrap: 1.2.5 901 + dev: true 902 + 903 + /p-limit/3.1.0: 904 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 905 + engines: {node: '>=10'} 906 + dependencies: 907 + yocto-queue: 0.1.0 908 + dev: true 909 + 910 + /p-locate/5.0.0: 911 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 912 + engines: {node: '>=10'} 913 + dependencies: 914 + p-limit: 3.1.0 915 + dev: true 916 + 917 + /parent-module/1.0.1: 918 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 919 + engines: {node: '>=6'} 920 + dependencies: 921 + callsites: 3.1.0 922 + dev: true 923 + 924 + /path-exists/4.0.0: 925 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 926 + engines: {node: '>=8'} 927 + dev: true 928 + 929 + /path-key/3.1.1: 930 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 931 + engines: {node: '>=8'} 932 + dev: true 933 + 934 + /picocolors/1.1.1: 935 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 936 + dev: true 937 + 938 + /picomatch/2.3.1: 939 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 940 + engines: {node: '>=8.6'} 941 + dev: true 942 + 943 + /picomatch/4.0.3: 944 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 945 + engines: {node: '>=12'} 946 + dev: true 947 + 948 + /postcss/8.5.6: 949 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 950 + engines: {node: ^10 || ^12 || >=14} 951 + dependencies: 952 + nanoid: 3.3.11 953 + picocolors: 1.1.1 954 + source-map-js: 1.2.1 955 + dev: true 956 + 957 + /prelude-ls/1.2.1: 958 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 959 + engines: {node: '>= 0.8.0'} 960 + dev: true 961 + 962 + /punycode/2.3.1: 963 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 964 + engines: {node: '>=6'} 965 + dev: true 966 + 967 + /resolve-from/4.0.0: 968 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 969 + engines: {node: '>=4'} 970 + dev: true 971 + 972 + /shebang-command/2.0.0: 973 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 974 + engines: {node: '>=8'} 975 + dependencies: 976 + shebang-regex: 3.0.0 977 + dev: true 978 + 979 + /shebang-regex/3.0.0: 980 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 981 + engines: {node: '>=8'} 982 + dev: true 983 + 984 + /source-map-js/1.2.1: 985 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 986 + engines: {node: '>=0.10.0'} 987 + dev: true 988 + 989 + /strip-json-comments/3.1.1: 990 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 991 + engines: {node: '>=8'} 992 + dev: true 993 + 994 + /supports-color/7.2.0: 995 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 996 + engines: {node: '>=8'} 997 + dependencies: 998 + has-flag: 4.0.0 999 + dev: true 1000 + 1001 + /tinyglobby/0.2.15: 1002 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1003 + engines: {node: '>=12.0.0'} 1004 + dependencies: 1005 + fdir: 6.5.0_picomatch@4.0.3 1006 + picomatch: 4.0.3 1007 + dev: true 1008 + 1009 + /to-regex-range/5.0.1: 1010 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1011 + engines: {node: '>=8.0'} 1012 + dependencies: 1013 + is-number: 7.0.0 1014 + dev: true 1015 + 1016 + /type-check/0.4.0: 1017 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1018 + engines: {node: '>= 0.8.0'} 1019 + dependencies: 1020 + prelude-ls: 1.2.1 1021 + dev: true 1022 + 1023 + /uri-js/4.4.1: 1024 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1025 + dependencies: 1026 + punycode: 2.3.1 1027 + dev: true 1028 + 1029 + /vite-plugin-dom/1.0.5_vite@7.1.12: 1030 + resolution: {integrity: sha512-G3MbuH30FpBD800I26xlB6lUiDm7sCxvQkHPt9OAJyUEbyiO9UWrKADxVUhWbO65WqL/TGtH1OEez+w++TlfMw==} 1031 + peerDependencies: 1032 + vite: '>=4.0.0' 1033 + dependencies: 1034 + htmlparser2: 10.0.0 1035 + vite: 7.1.12 1036 + dev: true 1037 + 1038 + /vite-plugin-singlefile/2.3.0_vite@7.1.12: 1039 + resolution: {integrity: sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==} 1040 + engines: {node: '>18.0.0'} 1041 + peerDependencies: 1042 + rollup: ^4.44.1 1043 + vite: ^5.4.11 || ^6.0.0 || ^7.0.0 1044 + dependencies: 1045 + micromatch: 4.0.8 1046 + vite: 7.1.12 1047 + dev: true 1048 + 1049 + /vite/7.1.12: 1050 + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} 1051 + engines: {node: ^20.19.0 || >=22.12.0} 1052 + hasBin: true 1053 + peerDependencies: 1054 + '@types/node': ^20.19.0 || >=22.12.0 1055 + jiti: '>=1.21.0' 1056 + less: ^4.0.0 1057 + lightningcss: ^1.21.0 1058 + sass: ^1.70.0 1059 + sass-embedded: ^1.70.0 1060 + stylus: '>=0.54.8' 1061 + sugarss: ^5.0.0 1062 + terser: ^5.16.0 1063 + tsx: ^4.8.1 1064 + yaml: ^2.4.2 1065 + peerDependenciesMeta: 1066 + '@types/node': 1067 + optional: true 1068 + jiti: 1069 + optional: true 1070 + less: 1071 + optional: true 1072 + lightningcss: 1073 + optional: true 1074 + sass: 1075 + optional: true 1076 + sass-embedded: 1077 + optional: true 1078 + stylus: 1079 + optional: true 1080 + sugarss: 1081 + optional: true 1082 + terser: 1083 + optional: true 1084 + tsx: 1085 + optional: true 1086 + yaml: 1087 + optional: true 1088 + dependencies: 1089 + esbuild: 0.25.11 1090 + fdir: 6.5.0_picomatch@4.0.3 1091 + picomatch: 4.0.3 1092 + postcss: 8.5.6 1093 + rollup: /@rollup/wasm-node/4.52.5 1094 + tinyglobby: 0.2.15 1095 + optionalDependencies: 1096 + fsevents: 2.3.3 1097 + dev: true 1098 + 1099 + /which/2.0.2: 1100 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1101 + engines: {node: '>= 8'} 1102 + hasBin: true 1103 + dependencies: 1104 + isexe: 2.0.0 1105 + dev: true 1106 + 1107 + /word-wrap/1.2.5: 1108 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1109 + engines: {node: '>=0.10.0'} 1110 + dev: true 1111 + 1112 + /yocto-queue/0.1.0: 1113 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1114 + engines: {node: '>=10'} 1115 + dev: true
+27 -5
release.sh
··· 1 1 #!/bin/sh 2 2 set -e 3 3 FILES=" 4 - asn1.js oids.js base64.js hex.js int10.js dom.js test.js 5 - index.css index.js index.html 6 - README.md LICENSE 4 + asn1.js oids.js defs.js base64.js hex.js dom.js context.js theme.js 5 + rfcdef.js test.js tags.js 6 + index.html index.css index.js index-local.html 7 + favicon.svg tree-icon-light.svg tree-icon-dark.svg 8 + README.md LICENSE CHANGELOG.md 7 9 updateOID.sh check.sh 8 10 examples 9 11 " 10 - type gsha256sum >/dev/null && SHA256=gsha256sum || SHA256=sha256sum 11 - $SHA256 -t $FILES | gpg --clearsign > sha256sums.asc 12 + mtn automate tags 'it.lapo.asn1js{,.*}' | \ 13 + awk '/^revision/ { print substr($2, 2, length($2) - 2)}' | \ 14 + while read rev; do 15 + mtn automate certs $rev | awk -v q='"' ' 16 + $2 == q "date" q { rdate=NR+1 } 17 + $2 == q "tag" q { rtag=NR+1 } 18 + NR == rdate { date=substr($2, 2, 10) } 19 + NR == rtag { tag=substr($2, 2, length($2)-2) } 20 + END { print date " " tag } 21 + ' 22 + done | sort -r | awk -v q='"' ' 23 + BEGIN { 24 + print "export const tags = {" 25 + } 26 + { print " " q $2 q ": " q $1 q "," } 27 + END { print "};" } 28 + ' > tags.js 29 + chmod 644 examples/* 30 + type gsha256sum >/dev/null 2>/dev/null && SHA256=gsha256sum || SHA256=sha256sum 31 + pnpm build 32 + cp dist/index.html index-local.html 33 + $SHA256 -t $FILES examples/* | gpg --clearsign > sha256sums.asc 12 34 7z a -tzip -mx=9 asn1js.zip $FILES sha256sums.asc 13 35 rsync -Pvrtz asn1js.zip $FILES lapo.it:www/asn1js/
+11877
rfcdef.js
··· 1 + // content parsed from ASN.1 definitions as found in the following RFCs: 5280 5208 3369 3161 2986 4211 4210 8017 4511 2 + // Copyright (C) The IETF Trust (2008) 3 + // as far as I can tell this file is allowed under the following clause: 4 + // It is acceptable under the current IETF rules (RFC 5378) to modify extracted code if necessary. 5 + // https://trustee.ietf.org/about/faq/#reproducing-rfcs 6 + export const rfcdef = { 7 + "1.3.6.1.5.5.7.0.18": { 8 + "name": "PKIX1Explicit88", 9 + "oid": "1.3.6.1.5.5.7.0.18", 10 + "source": "rfc5280.txt", 11 + "tagDefault": "EXPLICIT", 12 + "values": { 13 + "id-pkix": { 14 + "name": "id-pkix", 15 + "type": { 16 + "name": "OBJECT IDENTIFIER", 17 + "type": "builtin" 18 + }, 19 + "value": "1.3.6.1.5.5.7" 20 + }, 21 + "id-pe": { 22 + "name": "id-pe", 23 + "type": { 24 + "name": "OBJECT IDENTIFIER", 25 + "type": "builtin" 26 + }, 27 + "value": "1.3.6.1.5.5.7.1" 28 + }, 29 + "id-qt": { 30 + "name": "id-qt", 31 + "type": { 32 + "name": "OBJECT IDENTIFIER", 33 + "type": "builtin" 34 + }, 35 + "value": "1.3.6.1.5.5.7.2" 36 + }, 37 + "id-kp": { 38 + "name": "id-kp", 39 + "type": { 40 + "name": "OBJECT IDENTIFIER", 41 + "type": "builtin" 42 + }, 43 + "value": "1.3.6.1.5.5.7.3" 44 + }, 45 + "id-ad": { 46 + "name": "id-ad", 47 + "type": { 48 + "name": "OBJECT IDENTIFIER", 49 + "type": "builtin" 50 + }, 51 + "value": "1.3.6.1.5.5.7.48" 52 + }, 53 + "id-qt-cps": { 54 + "name": "id-qt-cps", 55 + "type": { 56 + "name": "OBJECT IDENTIFIER", 57 + "type": "builtin" 58 + }, 59 + "value": "1.3.6.1.5.5.7.2.1" 60 + }, 61 + "id-qt-unotice": { 62 + "name": "id-qt-unotice", 63 + "type": { 64 + "name": "OBJECT IDENTIFIER", 65 + "type": "builtin" 66 + }, 67 + "value": "1.3.6.1.5.5.7.2.2" 68 + }, 69 + "id-ad-ocsp": { 70 + "name": "id-ad-ocsp", 71 + "type": { 72 + "name": "OBJECT IDENTIFIER", 73 + "type": "builtin" 74 + }, 75 + "value": "1.3.6.1.5.5.7.48.1" 76 + }, 77 + "id-ad-caIssuers": { 78 + "name": "id-ad-caIssuers", 79 + "type": { 80 + "name": "OBJECT IDENTIFIER", 81 + "type": "builtin" 82 + }, 83 + "value": "1.3.6.1.5.5.7.48.2" 84 + }, 85 + "id-ad-timeStamping": { 86 + "name": "id-ad-timeStamping", 87 + "type": { 88 + "name": "OBJECT IDENTIFIER", 89 + "type": "builtin" 90 + }, 91 + "value": "1.3.6.1.5.5.7.48.3" 92 + }, 93 + "id-ad-caRepository": { 94 + "name": "id-ad-caRepository", 95 + "type": { 96 + "name": "OBJECT IDENTIFIER", 97 + "type": "builtin" 98 + }, 99 + "value": "1.3.6.1.5.5.7.48.5" 100 + }, 101 + "id-at": { 102 + "name": "id-at", 103 + "type": { 104 + "name": "OBJECT IDENTIFIER", 105 + "type": "builtin" 106 + }, 107 + "value": "2.5.4" 108 + }, 109 + "id-at-name": { 110 + "name": "id-at-name", 111 + "type": { 112 + "name": "AttributeType", 113 + "type": "defined" 114 + }, 115 + "value": "2.5.4.41" 116 + }, 117 + "id-at-surname": { 118 + "name": "id-at-surname", 119 + "type": { 120 + "name": "AttributeType", 121 + "type": "defined" 122 + }, 123 + "value": "2.5.4.4" 124 + }, 125 + "id-at-givenName": { 126 + "name": "id-at-givenName", 127 + "type": { 128 + "name": "AttributeType", 129 + "type": "defined" 130 + }, 131 + "value": "2.5.4.42" 132 + }, 133 + "id-at-initials": { 134 + "name": "id-at-initials", 135 + "type": { 136 + "name": "AttributeType", 137 + "type": "defined" 138 + }, 139 + "value": "2.5.4.43" 140 + }, 141 + "id-at-generationQualifier": { 142 + "name": "id-at-generationQualifier", 143 + "type": { 144 + "name": "AttributeType", 145 + "type": "defined" 146 + }, 147 + "value": "2.5.4.44" 148 + }, 149 + "id-at-commonName": { 150 + "name": "id-at-commonName", 151 + "type": { 152 + "name": "AttributeType", 153 + "type": "defined" 154 + }, 155 + "value": "2.5.4.3" 156 + }, 157 + "id-at-localityName": { 158 + "name": "id-at-localityName", 159 + "type": { 160 + "name": "AttributeType", 161 + "type": "defined" 162 + }, 163 + "value": "2.5.4.7" 164 + }, 165 + "id-at-stateOrProvinceName": { 166 + "name": "id-at-stateOrProvinceName", 167 + "type": { 168 + "name": "AttributeType", 169 + "type": "defined" 170 + }, 171 + "value": "2.5.4.8" 172 + }, 173 + "id-at-organizationName": { 174 + "name": "id-at-organizationName", 175 + "type": { 176 + "name": "AttributeType", 177 + "type": "defined" 178 + }, 179 + "value": "2.5.4.10" 180 + }, 181 + "id-at-organizationalUnitName": { 182 + "name": "id-at-organizationalUnitName", 183 + "type": { 184 + "name": "AttributeType", 185 + "type": "defined" 186 + }, 187 + "value": "2.5.4.11" 188 + }, 189 + "id-at-title": { 190 + "name": "id-at-title", 191 + "type": { 192 + "name": "AttributeType", 193 + "type": "defined" 194 + }, 195 + "value": "2.5.4.12" 196 + }, 197 + "id-at-dnQualifier": { 198 + "name": "id-at-dnQualifier", 199 + "type": { 200 + "name": "AttributeType", 201 + "type": "defined" 202 + }, 203 + "value": "2.5.4.46" 204 + }, 205 + "id-at-countryName": { 206 + "name": "id-at-countryName", 207 + "type": { 208 + "name": "AttributeType", 209 + "type": "defined" 210 + }, 211 + "value": "2.5.4.6" 212 + }, 213 + "id-at-serialNumber": { 214 + "name": "id-at-serialNumber", 215 + "type": { 216 + "name": "AttributeType", 217 + "type": "defined" 218 + }, 219 + "value": "2.5.4.5" 220 + }, 221 + "id-at-pseudonym": { 222 + "name": "id-at-pseudonym", 223 + "type": { 224 + "name": "AttributeType", 225 + "type": "defined" 226 + }, 227 + "value": "2.5.4.65" 228 + }, 229 + "id-domainComponent": { 230 + "name": "id-domainComponent", 231 + "type": { 232 + "name": "AttributeType", 233 + "type": "defined" 234 + }, 235 + "value": "0.9.2342.19200300.100.1.25" 236 + }, 237 + "pkcs-9": { 238 + "name": "pkcs-9", 239 + "type": { 240 + "name": "OBJECT IDENTIFIER", 241 + "type": "builtin" 242 + }, 243 + "value": "1.2.840.113549.1.9" 244 + }, 245 + "id-emailAddress": { 246 + "name": "id-emailAddress", 247 + "type": { 248 + "name": "AttributeType", 249 + "type": "defined" 250 + }, 251 + "value": "1.2.840.113549.1.9.1" 252 + }, 253 + "common-name": { 254 + "name": "common-name", 255 + "type": { 256 + "name": "INTEGER", 257 + "type": "builtin" 258 + }, 259 + "value": 1 260 + }, 261 + "teletex-common-name": { 262 + "name": "teletex-common-name", 263 + "type": { 264 + "name": "INTEGER", 265 + "type": "builtin" 266 + }, 267 + "value": 2 268 + }, 269 + "teletex-organization-name": { 270 + "name": "teletex-organization-name", 271 + "type": { 272 + "name": "INTEGER", 273 + "type": "builtin" 274 + }, 275 + "value": 3 276 + }, 277 + "teletex-personal-name": { 278 + "name": "teletex-personal-name", 279 + "type": { 280 + "name": "INTEGER", 281 + "type": "builtin" 282 + }, 283 + "value": 4 284 + }, 285 + "teletex-organizational-unit-names": { 286 + "name": "teletex-organizational-unit-names", 287 + "type": { 288 + "name": "INTEGER", 289 + "type": "builtin" 290 + }, 291 + "value": 5 292 + }, 293 + "pds-name": { 294 + "name": "pds-name", 295 + "type": { 296 + "name": "INTEGER", 297 + "type": "builtin" 298 + }, 299 + "value": 7 300 + }, 301 + "physical-delivery-country-name": { 302 + "name": "physical-delivery-country-name", 303 + "type": { 304 + "name": "INTEGER", 305 + "type": "builtin" 306 + }, 307 + "value": 8 308 + }, 309 + "postal-code": { 310 + "name": "postal-code", 311 + "type": { 312 + "name": "INTEGER", 313 + "type": "builtin" 314 + }, 315 + "value": 9 316 + }, 317 + "physical-delivery-office-name": { 318 + "name": "physical-delivery-office-name", 319 + "type": { 320 + "name": "INTEGER", 321 + "type": "builtin" 322 + }, 323 + "value": 10 324 + }, 325 + "physical-delivery-office-number": { 326 + "name": "physical-delivery-office-number", 327 + "type": { 328 + "name": "INTEGER", 329 + "type": "builtin" 330 + }, 331 + "value": 11 332 + }, 333 + "extension-OR-address-components": { 334 + "name": "extension-OR-address-components", 335 + "type": { 336 + "name": "INTEGER", 337 + "type": "builtin" 338 + }, 339 + "value": 12 340 + }, 341 + "physical-delivery-personal-name": { 342 + "name": "physical-delivery-personal-name", 343 + "type": { 344 + "name": "INTEGER", 345 + "type": "builtin" 346 + }, 347 + "value": 13 348 + }, 349 + "physical-delivery-organization-name": { 350 + "name": "physical-delivery-organization-name", 351 + "type": { 352 + "name": "INTEGER", 353 + "type": "builtin" 354 + }, 355 + "value": 14 356 + }, 357 + "extension-physical-delivery-address-components": { 358 + "name": "extension-physical-delivery-address-components", 359 + "type": { 360 + "name": "INTEGER", 361 + "type": "builtin" 362 + }, 363 + "value": 15 364 + }, 365 + "unformatted-postal-address": { 366 + "name": "unformatted-postal-address", 367 + "type": { 368 + "name": "INTEGER", 369 + "type": "builtin" 370 + }, 371 + "value": 16 372 + }, 373 + "street-address": { 374 + "name": "street-address", 375 + "type": { 376 + "name": "INTEGER", 377 + "type": "builtin" 378 + }, 379 + "value": 17 380 + }, 381 + "post-office-box-address": { 382 + "name": "post-office-box-address", 383 + "type": { 384 + "name": "INTEGER", 385 + "type": "builtin" 386 + }, 387 + "value": 18 388 + }, 389 + "poste-restante-address": { 390 + "name": "poste-restante-address", 391 + "type": { 392 + "name": "INTEGER", 393 + "type": "builtin" 394 + }, 395 + "value": 19 396 + }, 397 + "unique-postal-name": { 398 + "name": "unique-postal-name", 399 + "type": { 400 + "name": "INTEGER", 401 + "type": "builtin" 402 + }, 403 + "value": 20 404 + }, 405 + "local-postal-attributes": { 406 + "name": "local-postal-attributes", 407 + "type": { 408 + "name": "INTEGER", 409 + "type": "builtin" 410 + }, 411 + "value": 21 412 + }, 413 + "extended-network-address": { 414 + "name": "extended-network-address", 415 + "type": { 416 + "name": "INTEGER", 417 + "type": "builtin" 418 + }, 419 + "value": 22 420 + }, 421 + "terminal-type": { 422 + "name": "terminal-type", 423 + "type": { 424 + "name": "INTEGER", 425 + "type": "builtin" 426 + }, 427 + "value": 23 428 + }, 429 + "teletex-domain-defined-attributes": { 430 + "name": "teletex-domain-defined-attributes", 431 + "type": { 432 + "name": "INTEGER", 433 + "type": "builtin" 434 + }, 435 + "value": 6 436 + }, 437 + "ub-name": { 438 + "name": "ub-name", 439 + "type": { 440 + "name": "INTEGER", 441 + "type": "builtin" 442 + }, 443 + "value": 32768 444 + }, 445 + "ub-common-name": { 446 + "name": "ub-common-name", 447 + "type": { 448 + "name": "INTEGER", 449 + "type": "builtin" 450 + }, 451 + "value": 64 452 + }, 453 + "ub-locality-name": { 454 + "name": "ub-locality-name", 455 + "type": { 456 + "name": "INTEGER", 457 + "type": "builtin" 458 + }, 459 + "value": 128 460 + }, 461 + "ub-state-name": { 462 + "name": "ub-state-name", 463 + "type": { 464 + "name": "INTEGER", 465 + "type": "builtin" 466 + }, 467 + "value": 128 468 + }, 469 + "ub-organization-name": { 470 + "name": "ub-organization-name", 471 + "type": { 472 + "name": "INTEGER", 473 + "type": "builtin" 474 + }, 475 + "value": 64 476 + }, 477 + "ub-organizational-unit-name": { 478 + "name": "ub-organizational-unit-name", 479 + "type": { 480 + "name": "INTEGER", 481 + "type": "builtin" 482 + }, 483 + "value": 64 484 + }, 485 + "ub-title": { 486 + "name": "ub-title", 487 + "type": { 488 + "name": "INTEGER", 489 + "type": "builtin" 490 + }, 491 + "value": 64 492 + }, 493 + "ub-serial-number": { 494 + "name": "ub-serial-number", 495 + "type": { 496 + "name": "INTEGER", 497 + "type": "builtin" 498 + }, 499 + "value": 64 500 + }, 501 + "ub-match": { 502 + "name": "ub-match", 503 + "type": { 504 + "name": "INTEGER", 505 + "type": "builtin" 506 + }, 507 + "value": 128 508 + }, 509 + "ub-emailaddress-length": { 510 + "name": "ub-emailaddress-length", 511 + "type": { 512 + "name": "INTEGER", 513 + "type": "builtin" 514 + }, 515 + "value": 255 516 + }, 517 + "ub-common-name-length": { 518 + "name": "ub-common-name-length", 519 + "type": { 520 + "name": "INTEGER", 521 + "type": "builtin" 522 + }, 523 + "value": 64 524 + }, 525 + "ub-country-name-alpha-length": { 526 + "name": "ub-country-name-alpha-length", 527 + "type": { 528 + "name": "INTEGER", 529 + "type": "builtin" 530 + }, 531 + "value": 2 532 + }, 533 + "ub-country-name-numeric-length": { 534 + "name": "ub-country-name-numeric-length", 535 + "type": { 536 + "name": "INTEGER", 537 + "type": "builtin" 538 + }, 539 + "value": 3 540 + }, 541 + "ub-domain-defined-attributes": { 542 + "name": "ub-domain-defined-attributes", 543 + "type": { 544 + "name": "INTEGER", 545 + "type": "builtin" 546 + }, 547 + "value": 4 548 + }, 549 + "ub-domain-defined-attribute-type-length": { 550 + "name": "ub-domain-defined-attribute-type-length", 551 + "type": { 552 + "name": "INTEGER", 553 + "type": "builtin" 554 + }, 555 + "value": 8 556 + }, 557 + "ub-domain-defined-attribute-value-length": { 558 + "name": "ub-domain-defined-attribute-value-length", 559 + "type": { 560 + "name": "INTEGER", 561 + "type": "builtin" 562 + }, 563 + "value": 128 564 + }, 565 + "ub-domain-name-length": { 566 + "name": "ub-domain-name-length", 567 + "type": { 568 + "name": "INTEGER", 569 + "type": "builtin" 570 + }, 571 + "value": 16 572 + }, 573 + "ub-extension-attributes": { 574 + "name": "ub-extension-attributes", 575 + "type": { 576 + "name": "INTEGER", 577 + "type": "builtin" 578 + }, 579 + "value": 256 580 + }, 581 + "ub-e163-4-number-length": { 582 + "name": "ub-e163-4-number-length", 583 + "type": { 584 + "name": "INTEGER", 585 + "type": "builtin" 586 + }, 587 + "value": 15 588 + }, 589 + "ub-e163-4-sub-address-length": { 590 + "name": "ub-e163-4-sub-address-length", 591 + "type": { 592 + "name": "INTEGER", 593 + "type": "builtin" 594 + }, 595 + "value": 40 596 + }, 597 + "ub-generation-qualifier-length": { 598 + "name": "ub-generation-qualifier-length", 599 + "type": { 600 + "name": "INTEGER", 601 + "type": "builtin" 602 + }, 603 + "value": 3 604 + }, 605 + "ub-given-name-length": { 606 + "name": "ub-given-name-length", 607 + "type": { 608 + "name": "INTEGER", 609 + "type": "builtin" 610 + }, 611 + "value": 16 612 + }, 613 + "ub-initials-length": { 614 + "name": "ub-initials-length", 615 + "type": { 616 + "name": "INTEGER", 617 + "type": "builtin" 618 + }, 619 + "value": 5 620 + }, 621 + "ub-integer-options": { 622 + "name": "ub-integer-options", 623 + "type": { 624 + "name": "INTEGER", 625 + "type": "builtin" 626 + }, 627 + "value": 256 628 + }, 629 + "ub-numeric-user-id-length": { 630 + "name": "ub-numeric-user-id-length", 631 + "type": { 632 + "name": "INTEGER", 633 + "type": "builtin" 634 + }, 635 + "value": 32 636 + }, 637 + "ub-organization-name-length": { 638 + "name": "ub-organization-name-length", 639 + "type": { 640 + "name": "INTEGER", 641 + "type": "builtin" 642 + }, 643 + "value": 64 644 + }, 645 + "ub-organizational-unit-name-length": { 646 + "name": "ub-organizational-unit-name-length", 647 + "type": { 648 + "name": "INTEGER", 649 + "type": "builtin" 650 + }, 651 + "value": 32 652 + }, 653 + "ub-organizational-units": { 654 + "name": "ub-organizational-units", 655 + "type": { 656 + "name": "INTEGER", 657 + "type": "builtin" 658 + }, 659 + "value": 4 660 + }, 661 + "ub-pds-name-length": { 662 + "name": "ub-pds-name-length", 663 + "type": { 664 + "name": "INTEGER", 665 + "type": "builtin" 666 + }, 667 + "value": 16 668 + }, 669 + "ub-pds-parameter-length": { 670 + "name": "ub-pds-parameter-length", 671 + "type": { 672 + "name": "INTEGER", 673 + "type": "builtin" 674 + }, 675 + "value": 30 676 + }, 677 + "ub-pds-physical-address-lines": { 678 + "name": "ub-pds-physical-address-lines", 679 + "type": { 680 + "name": "INTEGER", 681 + "type": "builtin" 682 + }, 683 + "value": 6 684 + }, 685 + "ub-postal-code-length": { 686 + "name": "ub-postal-code-length", 687 + "type": { 688 + "name": "INTEGER", 689 + "type": "builtin" 690 + }, 691 + "value": 16 692 + }, 693 + "ub-pseudonym": { 694 + "name": "ub-pseudonym", 695 + "type": { 696 + "name": "INTEGER", 697 + "type": "builtin" 698 + }, 699 + "value": 128 700 + }, 701 + "ub-surname-length": { 702 + "name": "ub-surname-length", 703 + "type": { 704 + "name": "INTEGER", 705 + "type": "builtin" 706 + }, 707 + "value": 40 708 + }, 709 + "ub-terminal-id-length": { 710 + "name": "ub-terminal-id-length", 711 + "type": { 712 + "name": "INTEGER", 713 + "type": "builtin" 714 + }, 715 + "value": 24 716 + }, 717 + "ub-unformatted-address-length": { 718 + "name": "ub-unformatted-address-length", 719 + "type": { 720 + "name": "INTEGER", 721 + "type": "builtin" 722 + }, 723 + "value": 180 724 + }, 725 + "ub-x121-address-length": { 726 + "name": "ub-x121-address-length", 727 + "type": { 728 + "name": "INTEGER", 729 + "type": "builtin" 730 + }, 731 + "value": 16 732 + } 733 + }, 734 + "types": { 735 + "UniversalString": { 736 + "name": "UniversalString", 737 + "type": { 738 + "name": "[28]", 739 + "type": "tag", 740 + "class": "UNIVERSAL", 741 + "explicit": false, 742 + "content": [ 743 + { 744 + "name": "", 745 + "type": { 746 + "name": "OCTET STRING", 747 + "type": "builtin" 748 + } 749 + } 750 + ] 751 + } 752 + }, 753 + "BMPString": { 754 + "name": "BMPString", 755 + "type": { 756 + "name": "[30]", 757 + "type": "tag", 758 + "class": "UNIVERSAL", 759 + "explicit": false, 760 + "content": [ 761 + { 762 + "name": "", 763 + "type": { 764 + "name": "OCTET STRING", 765 + "type": "builtin" 766 + } 767 + } 768 + ] 769 + } 770 + }, 771 + "UTF8String": { 772 + "name": "UTF8String", 773 + "type": { 774 + "name": "[12]", 775 + "type": "tag", 776 + "class": "UNIVERSAL", 777 + "explicit": false, 778 + "content": [ 779 + { 780 + "name": "", 781 + "type": { 782 + "name": "OCTET STRING", 783 + "type": "builtin" 784 + } 785 + } 786 + ] 787 + } 788 + }, 789 + "Attribute": { 790 + "name": "Attribute", 791 + "type": { 792 + "name": "SEQUENCE", 793 + "type": "builtin", 794 + "content": [ 795 + { 796 + "id": "type", 797 + "name": "AttributeType", 798 + "type": "defined" 799 + }, 800 + { 801 + "id": "values", 802 + "name": "SET", 803 + "type": "builtin", 804 + "typeOf": 1, 805 + "content": [ 806 + { 807 + "name": "AttributeValue", 808 + "type": "defined" 809 + } 810 + ] 811 + } 812 + ] 813 + } 814 + }, 815 + "AttributeType": { 816 + "name": "AttributeType", 817 + "type": { 818 + "name": "OBJECT IDENTIFIER", 819 + "type": "builtin" 820 + } 821 + }, 822 + "AttributeValue": { 823 + "name": "AttributeValue", 824 + "type": { 825 + "name": "ANY", 826 + "type": "builtin" 827 + } 828 + }, 829 + "AttributeTypeAndValue": { 830 + "name": "AttributeTypeAndValue", 831 + "type": { 832 + "name": "SEQUENCE", 833 + "type": "builtin", 834 + "content": [ 835 + { 836 + "id": "type", 837 + "name": "AttributeType", 838 + "type": "defined" 839 + }, 840 + { 841 + "id": "value", 842 + "name": "AttributeValue", 843 + "type": "defined" 844 + } 845 + ] 846 + } 847 + }, 848 + "X520name": { 849 + "name": "X520name", 850 + "type": { 851 + "name": "CHOICE", 852 + "type": "builtin", 853 + "content": [ 854 + { 855 + "id": "teletexString", 856 + "name": "TeletexString", 857 + "type": "builtin", 858 + "size": [ 859 + 1, 860 + "ub-name" 861 + ] 862 + }, 863 + { 864 + "id": "printableString", 865 + "name": "PrintableString", 866 + "type": "builtin", 867 + "size": [ 868 + 1, 869 + "ub-name" 870 + ] 871 + }, 872 + { 873 + "id": "universalString", 874 + "name": "UniversalString", 875 + "type": "builtin", 876 + "size": [ 877 + 1, 878 + "ub-name" 879 + ] 880 + }, 881 + { 882 + "id": "utf8String", 883 + "name": "UTF8String", 884 + "type": "builtin", 885 + "size": [ 886 + 1, 887 + "ub-name" 888 + ] 889 + }, 890 + { 891 + "id": "bmpString", 892 + "name": "BMPString", 893 + "type": "builtin", 894 + "size": [ 895 + 1, 896 + "ub-name" 897 + ] 898 + } 899 + ] 900 + } 901 + }, 902 + "X520CommonName": { 903 + "name": "X520CommonName", 904 + "type": { 905 + "name": "CHOICE", 906 + "type": "builtin", 907 + "content": [ 908 + { 909 + "id": "teletexString", 910 + "name": "TeletexString", 911 + "type": "builtin", 912 + "size": [ 913 + 1, 914 + "ub-common-name" 915 + ] 916 + }, 917 + { 918 + "id": "printableString", 919 + "name": "PrintableString", 920 + "type": "builtin", 921 + "size": [ 922 + 1, 923 + "ub-common-name" 924 + ] 925 + }, 926 + { 927 + "id": "universalString", 928 + "name": "UniversalString", 929 + "type": "builtin", 930 + "size": [ 931 + 1, 932 + "ub-common-name" 933 + ] 934 + }, 935 + { 936 + "id": "utf8String", 937 + "name": "UTF8String", 938 + "type": "builtin", 939 + "size": [ 940 + 1, 941 + "ub-common-name" 942 + ] 943 + }, 944 + { 945 + "id": "bmpString", 946 + "name": "BMPString", 947 + "type": "builtin", 948 + "size": [ 949 + 1, 950 + "ub-common-name" 951 + ] 952 + } 953 + ] 954 + } 955 + }, 956 + "X520LocalityName": { 957 + "name": "X520LocalityName", 958 + "type": { 959 + "name": "CHOICE", 960 + "type": "builtin", 961 + "content": [ 962 + { 963 + "id": "teletexString", 964 + "name": "TeletexString", 965 + "type": "builtin", 966 + "size": [ 967 + 1, 968 + "ub-locality-name" 969 + ] 970 + }, 971 + { 972 + "id": "printableString", 973 + "name": "PrintableString", 974 + "type": "builtin", 975 + "size": [ 976 + 1, 977 + "ub-locality-name" 978 + ] 979 + }, 980 + { 981 + "id": "universalString", 982 + "name": "UniversalString", 983 + "type": "builtin", 984 + "size": [ 985 + 1, 986 + "ub-locality-name" 987 + ] 988 + }, 989 + { 990 + "id": "utf8String", 991 + "name": "UTF8String", 992 + "type": "builtin", 993 + "size": [ 994 + 1, 995 + "ub-locality-name" 996 + ] 997 + }, 998 + { 999 + "id": "bmpString", 1000 + "name": "BMPString", 1001 + "type": "builtin", 1002 + "size": [ 1003 + 1, 1004 + "ub-locality-name" 1005 + ] 1006 + } 1007 + ] 1008 + } 1009 + }, 1010 + "X520StateOrProvinceName": { 1011 + "name": "X520StateOrProvinceName", 1012 + "type": { 1013 + "name": "CHOICE", 1014 + "type": "builtin", 1015 + "content": [ 1016 + { 1017 + "id": "teletexString", 1018 + "name": "TeletexString", 1019 + "type": "builtin", 1020 + "size": [ 1021 + 1, 1022 + "ub-state-name" 1023 + ] 1024 + }, 1025 + { 1026 + "id": "printableString", 1027 + "name": "PrintableString", 1028 + "type": "builtin", 1029 + "size": [ 1030 + 1, 1031 + "ub-state-name" 1032 + ] 1033 + }, 1034 + { 1035 + "id": "universalString", 1036 + "name": "UniversalString", 1037 + "type": "builtin", 1038 + "size": [ 1039 + 1, 1040 + "ub-state-name" 1041 + ] 1042 + }, 1043 + { 1044 + "id": "utf8String", 1045 + "name": "UTF8String", 1046 + "type": "builtin", 1047 + "size": [ 1048 + 1, 1049 + "ub-state-name" 1050 + ] 1051 + }, 1052 + { 1053 + "id": "bmpString", 1054 + "name": "BMPString", 1055 + "type": "builtin", 1056 + "size": [ 1057 + 1, 1058 + "ub-state-name" 1059 + ] 1060 + } 1061 + ] 1062 + } 1063 + }, 1064 + "X520OrganizationName": { 1065 + "name": "X520OrganizationName", 1066 + "type": { 1067 + "name": "CHOICE", 1068 + "type": "builtin", 1069 + "content": [ 1070 + { 1071 + "id": "teletexString", 1072 + "name": "TeletexString", 1073 + "type": "builtin", 1074 + "size": [ 1075 + 1, 1076 + "ub-organization-name" 1077 + ] 1078 + }, 1079 + { 1080 + "id": "printableString", 1081 + "name": "PrintableString", 1082 + "type": "builtin", 1083 + "size": [ 1084 + 1, 1085 + "ub-organization-name" 1086 + ] 1087 + }, 1088 + { 1089 + "id": "universalString", 1090 + "name": "UniversalString", 1091 + "type": "builtin", 1092 + "size": [ 1093 + 1, 1094 + "ub-organization-name" 1095 + ] 1096 + }, 1097 + { 1098 + "id": "utf8String", 1099 + "name": "UTF8String", 1100 + "type": "builtin", 1101 + "size": [ 1102 + 1, 1103 + "ub-organization-name" 1104 + ] 1105 + }, 1106 + { 1107 + "id": "bmpString", 1108 + "name": "BMPString", 1109 + "type": "builtin", 1110 + "size": [ 1111 + 1, 1112 + "ub-organization-name" 1113 + ] 1114 + } 1115 + ] 1116 + } 1117 + }, 1118 + "X520OrganizationalUnitName": { 1119 + "name": "X520OrganizationalUnitName", 1120 + "type": { 1121 + "name": "CHOICE", 1122 + "type": "builtin", 1123 + "content": [ 1124 + { 1125 + "id": "teletexString", 1126 + "name": "TeletexString", 1127 + "type": "builtin", 1128 + "size": [ 1129 + 1, 1130 + "ub-organizational-unit-name" 1131 + ] 1132 + }, 1133 + { 1134 + "id": "printableString", 1135 + "name": "PrintableString", 1136 + "type": "builtin", 1137 + "size": [ 1138 + 1, 1139 + "ub-organizational-unit-name" 1140 + ] 1141 + }, 1142 + { 1143 + "id": "universalString", 1144 + "name": "UniversalString", 1145 + "type": "builtin", 1146 + "size": [ 1147 + 1, 1148 + "ub-organizational-unit-name" 1149 + ] 1150 + }, 1151 + { 1152 + "id": "utf8String", 1153 + "name": "UTF8String", 1154 + "type": "builtin", 1155 + "size": [ 1156 + 1, 1157 + "ub-organizational-unit-name" 1158 + ] 1159 + }, 1160 + { 1161 + "id": "bmpString", 1162 + "name": "BMPString", 1163 + "type": "builtin", 1164 + "size": [ 1165 + 1, 1166 + "ub-organizational-unit-name" 1167 + ] 1168 + } 1169 + ] 1170 + } 1171 + }, 1172 + "X520Title": { 1173 + "name": "X520Title", 1174 + "type": { 1175 + "name": "CHOICE", 1176 + "type": "builtin", 1177 + "content": [ 1178 + { 1179 + "id": "teletexString", 1180 + "name": "TeletexString", 1181 + "type": "builtin", 1182 + "size": [ 1183 + 1, 1184 + "ub-title" 1185 + ] 1186 + }, 1187 + { 1188 + "id": "printableString", 1189 + "name": "PrintableString", 1190 + "type": "builtin", 1191 + "size": [ 1192 + 1, 1193 + "ub-title" 1194 + ] 1195 + }, 1196 + { 1197 + "id": "universalString", 1198 + "name": "UniversalString", 1199 + "type": "builtin", 1200 + "size": [ 1201 + 1, 1202 + "ub-title" 1203 + ] 1204 + }, 1205 + { 1206 + "id": "utf8String", 1207 + "name": "UTF8String", 1208 + "type": "builtin", 1209 + "size": [ 1210 + 1, 1211 + "ub-title" 1212 + ] 1213 + }, 1214 + { 1215 + "id": "bmpString", 1216 + "name": "BMPString", 1217 + "type": "builtin", 1218 + "size": [ 1219 + 1, 1220 + "ub-title" 1221 + ] 1222 + } 1223 + ] 1224 + } 1225 + }, 1226 + "X520dnQualifier": { 1227 + "name": "X520dnQualifier", 1228 + "type": { 1229 + "name": "PrintableString", 1230 + "type": "builtin" 1231 + } 1232 + }, 1233 + "X520countryName": { 1234 + "name": "X520countryName", 1235 + "type": { 1236 + "name": "PrintableString", 1237 + "type": "builtin", 1238 + "size": 2 1239 + } 1240 + }, 1241 + "X520SerialNumber": { 1242 + "name": "X520SerialNumber", 1243 + "type": { 1244 + "name": "PrintableString", 1245 + "type": "builtin", 1246 + "size": [ 1247 + 1, 1248 + "ub-serial-number" 1249 + ] 1250 + } 1251 + }, 1252 + "X520Pseudonym": { 1253 + "name": "X520Pseudonym", 1254 + "type": { 1255 + "name": "CHOICE", 1256 + "type": "builtin", 1257 + "content": [ 1258 + { 1259 + "id": "teletexString", 1260 + "name": "TeletexString", 1261 + "type": "builtin", 1262 + "size": [ 1263 + 1, 1264 + "ub-pseudonym" 1265 + ] 1266 + }, 1267 + { 1268 + "id": "printableString", 1269 + "name": "PrintableString", 1270 + "type": "builtin", 1271 + "size": [ 1272 + 1, 1273 + "ub-pseudonym" 1274 + ] 1275 + }, 1276 + { 1277 + "id": "universalString", 1278 + "name": "UniversalString", 1279 + "type": "builtin", 1280 + "size": [ 1281 + 1, 1282 + "ub-pseudonym" 1283 + ] 1284 + }, 1285 + { 1286 + "id": "utf8String", 1287 + "name": "UTF8String", 1288 + "type": "builtin", 1289 + "size": [ 1290 + 1, 1291 + "ub-pseudonym" 1292 + ] 1293 + }, 1294 + { 1295 + "id": "bmpString", 1296 + "name": "BMPString", 1297 + "type": "builtin", 1298 + "size": [ 1299 + 1, 1300 + "ub-pseudonym" 1301 + ] 1302 + } 1303 + ] 1304 + } 1305 + }, 1306 + "DomainComponent": { 1307 + "name": "DomainComponent", 1308 + "type": { 1309 + "name": "IA5String", 1310 + "type": "builtin" 1311 + } 1312 + }, 1313 + "EmailAddress": { 1314 + "name": "EmailAddress", 1315 + "type": { 1316 + "name": "IA5String", 1317 + "type": "builtin", 1318 + "size": [ 1319 + 1, 1320 + "ub-emailaddress-length" 1321 + ] 1322 + } 1323 + }, 1324 + "Name": { 1325 + "name": "Name", 1326 + "type": { 1327 + "name": "CHOICE", 1328 + "type": "builtin", 1329 + "content": [ 1330 + { 1331 + "id": "rdnSequence", 1332 + "name": "RDNSequence", 1333 + "type": "defined" 1334 + } 1335 + ] 1336 + } 1337 + }, 1338 + "RDNSequence": { 1339 + "name": "RDNSequence", 1340 + "type": { 1341 + "name": "SEQUENCE", 1342 + "type": "builtin", 1343 + "typeOf": 1, 1344 + "content": [ 1345 + { 1346 + "name": "RelativeDistinguishedName", 1347 + "type": "defined" 1348 + } 1349 + ] 1350 + } 1351 + }, 1352 + "DistinguishedName": { 1353 + "name": "DistinguishedName", 1354 + "type": { 1355 + "name": "RDNSequence", 1356 + "type": "defined" 1357 + } 1358 + }, 1359 + "RelativeDistinguishedName": { 1360 + "name": "RelativeDistinguishedName", 1361 + "type": { 1362 + "name": "SET", 1363 + "type": "builtin", 1364 + "typeOf": 1, 1365 + "size": [ 1366 + 1, 1367 + "MAX" 1368 + ], 1369 + "content": [ 1370 + { 1371 + "name": "AttributeTypeAndValue", 1372 + "type": "defined" 1373 + } 1374 + ] 1375 + } 1376 + }, 1377 + "DirectoryString": { 1378 + "name": "DirectoryString", 1379 + "type": { 1380 + "name": "CHOICE", 1381 + "type": "builtin", 1382 + "content": [ 1383 + { 1384 + "id": "teletexString", 1385 + "name": "TeletexString", 1386 + "type": "builtin", 1387 + "size": [ 1388 + 1, 1389 + "MAX" 1390 + ] 1391 + }, 1392 + { 1393 + "id": "printableString", 1394 + "name": "PrintableString", 1395 + "type": "builtin", 1396 + "size": [ 1397 + 1, 1398 + "MAX" 1399 + ] 1400 + }, 1401 + { 1402 + "id": "universalString", 1403 + "name": "UniversalString", 1404 + "type": "builtin", 1405 + "size": [ 1406 + 1, 1407 + "MAX" 1408 + ] 1409 + }, 1410 + { 1411 + "id": "utf8String", 1412 + "name": "UTF8String", 1413 + "type": "builtin", 1414 + "size": [ 1415 + 1, 1416 + "MAX" 1417 + ] 1418 + }, 1419 + { 1420 + "id": "bmpString", 1421 + "name": "BMPString", 1422 + "type": "builtin", 1423 + "size": [ 1424 + 1, 1425 + "MAX" 1426 + ] 1427 + } 1428 + ] 1429 + } 1430 + }, 1431 + "Certificate": { 1432 + "name": "Certificate", 1433 + "type": { 1434 + "name": "SEQUENCE", 1435 + "type": "builtin", 1436 + "content": [ 1437 + { 1438 + "id": "tbsCertificate", 1439 + "name": "TBSCertificate", 1440 + "type": "defined" 1441 + }, 1442 + { 1443 + "id": "signatureAlgorithm", 1444 + "name": "AlgorithmIdentifier", 1445 + "type": "defined" 1446 + }, 1447 + { 1448 + "id": "signature", 1449 + "name": "BIT STRING", 1450 + "type": "builtin" 1451 + } 1452 + ] 1453 + } 1454 + }, 1455 + "TBSCertificate": { 1456 + "name": "TBSCertificate", 1457 + "type": { 1458 + "name": "SEQUENCE", 1459 + "type": "builtin", 1460 + "content": [ 1461 + { 1462 + "id": "version", 1463 + "name": "[0]", 1464 + "type": "tag", 1465 + "class": "CONTEXT", 1466 + "explicit": true, 1467 + "content": [ 1468 + { 1469 + "name": "", 1470 + "type": { 1471 + "name": "Version", 1472 + "type": "defined" 1473 + } 1474 + } 1475 + ], 1476 + "default": "v1" 1477 + }, 1478 + { 1479 + "id": "serialNumber", 1480 + "name": "CertificateSerialNumber", 1481 + "type": "defined" 1482 + }, 1483 + { 1484 + "id": "signature", 1485 + "name": "AlgorithmIdentifier", 1486 + "type": "defined" 1487 + }, 1488 + { 1489 + "id": "issuer", 1490 + "name": "Name", 1491 + "type": "defined" 1492 + }, 1493 + { 1494 + "id": "validity", 1495 + "name": "Validity", 1496 + "type": "defined" 1497 + }, 1498 + { 1499 + "id": "subject", 1500 + "name": "Name", 1501 + "type": "defined" 1502 + }, 1503 + { 1504 + "id": "subjectPublicKeyInfo", 1505 + "name": "SubjectPublicKeyInfo", 1506 + "type": "defined" 1507 + }, 1508 + { 1509 + "id": "issuerUniqueID", 1510 + "name": "[1]", 1511 + "type": "tag", 1512 + "class": "CONTEXT", 1513 + "explicit": false, 1514 + "content": [ 1515 + { 1516 + "name": "", 1517 + "type": { 1518 + "name": "UniqueIdentifier", 1519 + "type": "defined" 1520 + } 1521 + } 1522 + ], 1523 + "optional": true 1524 + }, 1525 + { 1526 + "id": "subjectUniqueID", 1527 + "name": "[2]", 1528 + "type": "tag", 1529 + "class": "CONTEXT", 1530 + "explicit": false, 1531 + "content": [ 1532 + { 1533 + "name": "", 1534 + "type": { 1535 + "name": "UniqueIdentifier", 1536 + "type": "defined" 1537 + } 1538 + } 1539 + ], 1540 + "optional": true 1541 + }, 1542 + { 1543 + "id": "extensions", 1544 + "name": "[3]", 1545 + "type": "tag", 1546 + "class": "CONTEXT", 1547 + "explicit": true, 1548 + "content": [ 1549 + { 1550 + "name": "", 1551 + "type": { 1552 + "name": "Extensions", 1553 + "type": "defined" 1554 + } 1555 + } 1556 + ], 1557 + "optional": true 1558 + } 1559 + ] 1560 + } 1561 + }, 1562 + "Version": { 1563 + "name": "Version", 1564 + "type": { 1565 + "name": "INTEGER", 1566 + "type": "builtin", 1567 + "content": { 1568 + "v1": 0, 1569 + "v2": 1, 1570 + "v3": 2 1571 + } 1572 + } 1573 + }, 1574 + "CertificateSerialNumber": { 1575 + "name": "CertificateSerialNumber", 1576 + "type": { 1577 + "name": "INTEGER", 1578 + "type": "builtin" 1579 + } 1580 + }, 1581 + "Validity": { 1582 + "name": "Validity", 1583 + "type": { 1584 + "name": "SEQUENCE", 1585 + "type": "builtin", 1586 + "content": [ 1587 + { 1588 + "id": "notBefore", 1589 + "name": "Time", 1590 + "type": "defined" 1591 + }, 1592 + { 1593 + "id": "notAfter", 1594 + "name": "Time", 1595 + "type": "defined" 1596 + } 1597 + ] 1598 + } 1599 + }, 1600 + "Time": { 1601 + "name": "Time", 1602 + "type": { 1603 + "name": "CHOICE", 1604 + "type": "builtin", 1605 + "content": [ 1606 + { 1607 + "id": "utcTime", 1608 + "name": "UTCTime", 1609 + "type": "builtin" 1610 + }, 1611 + { 1612 + "id": "generalTime", 1613 + "name": "GeneralizedTime", 1614 + "type": "builtin" 1615 + } 1616 + ] 1617 + } 1618 + }, 1619 + "UniqueIdentifier": { 1620 + "name": "UniqueIdentifier", 1621 + "type": { 1622 + "name": "BIT STRING", 1623 + "type": "builtin" 1624 + } 1625 + }, 1626 + "SubjectPublicKeyInfo": { 1627 + "name": "SubjectPublicKeyInfo", 1628 + "type": { 1629 + "name": "SEQUENCE", 1630 + "type": "builtin", 1631 + "content": [ 1632 + { 1633 + "id": "algorithm", 1634 + "name": "AlgorithmIdentifier", 1635 + "type": "defined" 1636 + }, 1637 + { 1638 + "id": "subjectPublicKey", 1639 + "name": "BIT STRING", 1640 + "type": "builtin" 1641 + } 1642 + ] 1643 + } 1644 + }, 1645 + "Extensions": { 1646 + "name": "Extensions", 1647 + "type": { 1648 + "name": "SEQUENCE", 1649 + "type": "builtin", 1650 + "typeOf": 1, 1651 + "size": [ 1652 + 1, 1653 + "MAX" 1654 + ], 1655 + "content": [ 1656 + { 1657 + "name": "Extension", 1658 + "type": "defined" 1659 + } 1660 + ] 1661 + } 1662 + }, 1663 + "Extension": { 1664 + "name": "Extension", 1665 + "type": { 1666 + "name": "SEQUENCE", 1667 + "type": "builtin", 1668 + "content": [ 1669 + { 1670 + "id": "extnID", 1671 + "name": "OBJECT IDENTIFIER", 1672 + "type": "builtin" 1673 + }, 1674 + { 1675 + "id": "critical", 1676 + "name": "BOOLEAN", 1677 + "type": "builtin", 1678 + "default": false 1679 + }, 1680 + { 1681 + "id": "extnValue", 1682 + "name": "OCTET STRING", 1683 + "type": "builtin" 1684 + } 1685 + ] 1686 + } 1687 + }, 1688 + "CertificateList": { 1689 + "name": "CertificateList", 1690 + "type": { 1691 + "name": "SEQUENCE", 1692 + "type": "builtin", 1693 + "content": [ 1694 + { 1695 + "id": "tbsCertList", 1696 + "name": "TBSCertList", 1697 + "type": "defined" 1698 + }, 1699 + { 1700 + "id": "signatureAlgorithm", 1701 + "name": "AlgorithmIdentifier", 1702 + "type": "defined" 1703 + }, 1704 + { 1705 + "id": "signature", 1706 + "name": "BIT STRING", 1707 + "type": "builtin" 1708 + } 1709 + ] 1710 + } 1711 + }, 1712 + "TBSCertList": { 1713 + "name": "TBSCertList", 1714 + "type": { 1715 + "name": "SEQUENCE", 1716 + "type": "builtin", 1717 + "content": [ 1718 + { 1719 + "id": "version", 1720 + "name": "Version", 1721 + "type": "defined", 1722 + "optional": true 1723 + }, 1724 + { 1725 + "id": "signature", 1726 + "name": "AlgorithmIdentifier", 1727 + "type": "defined" 1728 + }, 1729 + { 1730 + "id": "issuer", 1731 + "name": "Name", 1732 + "type": "defined" 1733 + }, 1734 + { 1735 + "id": "thisUpdate", 1736 + "name": "Time", 1737 + "type": "defined" 1738 + }, 1739 + { 1740 + "id": "nextUpdate", 1741 + "name": "Time", 1742 + "type": "defined", 1743 + "optional": true 1744 + }, 1745 + { 1746 + "id": "revokedCertificates", 1747 + "name": "SEQUENCE", 1748 + "type": "builtin", 1749 + "typeOf": 1, 1750 + "content": [ 1751 + { 1752 + "name": "SEQUENCE", 1753 + "type": "builtin", 1754 + "content": [ 1755 + { 1756 + "id": "userCertificate", 1757 + "name": "CertificateSerialNumber", 1758 + "type": "defined" 1759 + }, 1760 + { 1761 + "id": "revocationDate", 1762 + "name": "Time", 1763 + "type": "defined" 1764 + }, 1765 + { 1766 + "id": "crlEntryExtensions", 1767 + "name": "Extensions", 1768 + "type": "defined", 1769 + "optional": true 1770 + } 1771 + ] 1772 + } 1773 + ], 1774 + "optional": true 1775 + }, 1776 + { 1777 + "id": "crlExtensions", 1778 + "name": "[0]", 1779 + "type": "tag", 1780 + "class": "CONTEXT", 1781 + "explicit": true, 1782 + "content": [ 1783 + { 1784 + "name": "", 1785 + "type": { 1786 + "name": "Extensions", 1787 + "type": "defined" 1788 + } 1789 + } 1790 + ], 1791 + "optional": true 1792 + } 1793 + ] 1794 + } 1795 + }, 1796 + "AlgorithmIdentifier": { 1797 + "name": "AlgorithmIdentifier", 1798 + "type": { 1799 + "name": "SEQUENCE", 1800 + "type": "builtin", 1801 + "content": [ 1802 + { 1803 + "id": "algorithm", 1804 + "name": "OBJECT IDENTIFIER", 1805 + "type": "builtin" 1806 + }, 1807 + { 1808 + "id": "parameters", 1809 + "name": "ANY", 1810 + "type": "builtin", 1811 + "definedBy": "algorithm", 1812 + "optional": true 1813 + } 1814 + ] 1815 + } 1816 + }, 1817 + "ORAddress": { 1818 + "name": "ORAddress", 1819 + "type": { 1820 + "name": "SEQUENCE", 1821 + "type": "builtin", 1822 + "content": [ 1823 + { 1824 + "id": "built-in-standard-attributes", 1825 + "name": "BuiltInStandardAttributes", 1826 + "type": "defined" 1827 + }, 1828 + { 1829 + "id": "built-in-domain-defined-attributes", 1830 + "name": "BuiltInDomainDefinedAttributes", 1831 + "type": "defined", 1832 + "optional": true 1833 + }, 1834 + { 1835 + "id": "extension-attributes", 1836 + "name": "ExtensionAttributes", 1837 + "type": "defined", 1838 + "optional": true 1839 + } 1840 + ] 1841 + } 1842 + }, 1843 + "BuiltInStandardAttributes": { 1844 + "name": "BuiltInStandardAttributes", 1845 + "type": { 1846 + "name": "SEQUENCE", 1847 + "type": "builtin", 1848 + "content": [ 1849 + { 1850 + "id": "country-name", 1851 + "name": "CountryName", 1852 + "type": "defined", 1853 + "optional": true 1854 + }, 1855 + { 1856 + "id": "administration-domain-name", 1857 + "name": "AdministrationDomainName", 1858 + "type": "defined", 1859 + "optional": true 1860 + }, 1861 + { 1862 + "id": "network-address", 1863 + "name": "[0]", 1864 + "type": "tag", 1865 + "class": "CONTEXT", 1866 + "explicit": false, 1867 + "content": [ 1868 + { 1869 + "name": "", 1870 + "type": { 1871 + "name": "NetworkAddress", 1872 + "type": "defined" 1873 + } 1874 + } 1875 + ], 1876 + "optional": true 1877 + }, 1878 + { 1879 + "id": "terminal-identifier", 1880 + "name": "[1]", 1881 + "type": "tag", 1882 + "class": "CONTEXT", 1883 + "explicit": false, 1884 + "content": [ 1885 + { 1886 + "name": "", 1887 + "type": { 1888 + "name": "TerminalIdentifier", 1889 + "type": "defined" 1890 + } 1891 + } 1892 + ], 1893 + "optional": true 1894 + }, 1895 + { 1896 + "id": "private-domain-name", 1897 + "name": "[2]", 1898 + "type": "tag", 1899 + "class": "CONTEXT", 1900 + "explicit": true, 1901 + "content": [ 1902 + { 1903 + "name": "", 1904 + "type": { 1905 + "name": "PrivateDomainName", 1906 + "type": "defined" 1907 + } 1908 + } 1909 + ], 1910 + "optional": true 1911 + }, 1912 + { 1913 + "id": "organization-name", 1914 + "name": "[3]", 1915 + "type": "tag", 1916 + "class": "CONTEXT", 1917 + "explicit": false, 1918 + "content": [ 1919 + { 1920 + "name": "", 1921 + "type": { 1922 + "name": "OrganizationName", 1923 + "type": "defined" 1924 + } 1925 + } 1926 + ], 1927 + "optional": true 1928 + }, 1929 + { 1930 + "id": "numeric-user-identifier", 1931 + "name": "[4]", 1932 + "type": "tag", 1933 + "class": "CONTEXT", 1934 + "explicit": false, 1935 + "content": [ 1936 + { 1937 + "name": "", 1938 + "type": { 1939 + "name": "NumericUserIdentifier", 1940 + "type": "defined" 1941 + } 1942 + } 1943 + ], 1944 + "optional": true 1945 + }, 1946 + { 1947 + "id": "personal-name", 1948 + "name": "[5]", 1949 + "type": "tag", 1950 + "class": "CONTEXT", 1951 + "explicit": false, 1952 + "content": [ 1953 + { 1954 + "name": "", 1955 + "type": { 1956 + "name": "PersonalName", 1957 + "type": "defined" 1958 + } 1959 + } 1960 + ], 1961 + "optional": true 1962 + }, 1963 + { 1964 + "id": "organizational-unit-names", 1965 + "name": "[6]", 1966 + "type": "tag", 1967 + "class": "CONTEXT", 1968 + "explicit": false, 1969 + "content": [ 1970 + { 1971 + "name": "", 1972 + "type": { 1973 + "name": "OrganizationalUnitNames", 1974 + "type": "defined" 1975 + } 1976 + } 1977 + ], 1978 + "optional": true 1979 + } 1980 + ] 1981 + } 1982 + }, 1983 + "CountryName": { 1984 + "name": "CountryName", 1985 + "type": { 1986 + "name": "Application 1", 1987 + "type": "tag", 1988 + "class": "APPLICATION", 1989 + "explicit": true, 1990 + "content": [ 1991 + { 1992 + "name": "", 1993 + "type": { 1994 + "name": "CHOICE", 1995 + "type": "builtin", 1996 + "content": [ 1997 + { 1998 + "id": "x121-dcc-code", 1999 + "name": "NumericString", 2000 + "type": "builtin", 2001 + "size": "ub-country-name-numeric-length" 2002 + }, 2003 + { 2004 + "id": "iso-3166-alpha2-code", 2005 + "name": "PrintableString", 2006 + "type": "builtin", 2007 + "size": "ub-country-name-alpha-length" 2008 + } 2009 + ] 2010 + } 2011 + } 2012 + ] 2013 + } 2014 + }, 2015 + "AdministrationDomainName": { 2016 + "name": "AdministrationDomainName", 2017 + "type": { 2018 + "name": "Application 2", 2019 + "type": "tag", 2020 + "class": "APPLICATION", 2021 + "explicit": true, 2022 + "content": [ 2023 + { 2024 + "name": "", 2025 + "type": { 2026 + "name": "CHOICE", 2027 + "type": "builtin", 2028 + "content": [ 2029 + { 2030 + "id": "numeric", 2031 + "name": "NumericString", 2032 + "type": "builtin", 2033 + "size": [ 2034 + 0, 2035 + "ub-domain-name-length" 2036 + ] 2037 + }, 2038 + { 2039 + "id": "printable", 2040 + "name": "PrintableString", 2041 + "type": "builtin", 2042 + "size": [ 2043 + 0, 2044 + "ub-domain-name-length" 2045 + ] 2046 + } 2047 + ] 2048 + } 2049 + } 2050 + ] 2051 + } 2052 + }, 2053 + "NetworkAddress": { 2054 + "name": "NetworkAddress", 2055 + "type": { 2056 + "name": "X121Address", 2057 + "type": "defined" 2058 + } 2059 + }, 2060 + "X121Address": { 2061 + "name": "X121Address", 2062 + "type": { 2063 + "name": "NumericString", 2064 + "type": "builtin", 2065 + "size": [ 2066 + 1, 2067 + "ub-x121-address-length" 2068 + ] 2069 + } 2070 + }, 2071 + "TerminalIdentifier": { 2072 + "name": "TerminalIdentifier", 2073 + "type": { 2074 + "name": "PrintableString", 2075 + "type": "builtin", 2076 + "size": [ 2077 + 1, 2078 + "ub-terminal-id-length" 2079 + ] 2080 + } 2081 + }, 2082 + "PrivateDomainName": { 2083 + "name": "PrivateDomainName", 2084 + "type": { 2085 + "name": "CHOICE", 2086 + "type": "builtin", 2087 + "content": [ 2088 + { 2089 + "id": "numeric", 2090 + "name": "NumericString", 2091 + "type": "builtin", 2092 + "size": [ 2093 + 1, 2094 + "ub-domain-name-length" 2095 + ] 2096 + }, 2097 + { 2098 + "id": "printable", 2099 + "name": "PrintableString", 2100 + "type": "builtin", 2101 + "size": [ 2102 + 1, 2103 + "ub-domain-name-length" 2104 + ] 2105 + } 2106 + ] 2107 + } 2108 + }, 2109 + "OrganizationName": { 2110 + "name": "OrganizationName", 2111 + "type": { 2112 + "name": "PrintableString", 2113 + "type": "builtin", 2114 + "size": [ 2115 + 1, 2116 + "ub-organization-name-length" 2117 + ] 2118 + } 2119 + }, 2120 + "NumericUserIdentifier": { 2121 + "name": "NumericUserIdentifier", 2122 + "type": { 2123 + "name": "NumericString", 2124 + "type": "builtin", 2125 + "size": [ 2126 + 1, 2127 + "ub-numeric-user-id-length" 2128 + ] 2129 + } 2130 + }, 2131 + "PersonalName": { 2132 + "name": "PersonalName", 2133 + "type": { 2134 + "name": "SET", 2135 + "type": "builtin", 2136 + "content": [ 2137 + { 2138 + "id": "surname", 2139 + "name": "[0]", 2140 + "type": "tag", 2141 + "class": "CONTEXT", 2142 + "explicit": false, 2143 + "content": [ 2144 + { 2145 + "name": "", 2146 + "type": { 2147 + "name": "PrintableString", 2148 + "type": "builtin", 2149 + "size": [ 2150 + 1, 2151 + "ub-surname-length" 2152 + ] 2153 + } 2154 + } 2155 + ] 2156 + }, 2157 + { 2158 + "id": "given-name", 2159 + "name": "[1]", 2160 + "type": "tag", 2161 + "class": "CONTEXT", 2162 + "explicit": false, 2163 + "content": [ 2164 + { 2165 + "name": "", 2166 + "type": { 2167 + "name": "PrintableString", 2168 + "type": "builtin", 2169 + "size": [ 2170 + 1, 2171 + "ub-given-name-length" 2172 + ] 2173 + } 2174 + } 2175 + ], 2176 + "optional": true 2177 + }, 2178 + { 2179 + "id": "initials", 2180 + "name": "[2]", 2181 + "type": "tag", 2182 + "class": "CONTEXT", 2183 + "explicit": false, 2184 + "content": [ 2185 + { 2186 + "name": "", 2187 + "type": { 2188 + "name": "PrintableString", 2189 + "type": "builtin", 2190 + "size": [ 2191 + 1, 2192 + "ub-initials-length" 2193 + ] 2194 + } 2195 + } 2196 + ], 2197 + "optional": true 2198 + }, 2199 + { 2200 + "id": "generation-qualifier", 2201 + "name": "[3]", 2202 + "type": "tag", 2203 + "class": "CONTEXT", 2204 + "explicit": false, 2205 + "content": [ 2206 + { 2207 + "name": "", 2208 + "type": { 2209 + "name": "PrintableString", 2210 + "type": "builtin", 2211 + "size": [ 2212 + 1, 2213 + "ub-generation-qualifier-length" 2214 + ] 2215 + } 2216 + } 2217 + ], 2218 + "optional": true 2219 + } 2220 + ] 2221 + } 2222 + }, 2223 + "OrganizationalUnitNames": { 2224 + "name": "OrganizationalUnitNames", 2225 + "type": { 2226 + "name": "SEQUENCE", 2227 + "type": "builtin", 2228 + "typeOf": 1, 2229 + "size": [ 2230 + 1, 2231 + "ub-organizational-units" 2232 + ], 2233 + "content": [ 2234 + { 2235 + "name": "OrganizationalUnitName", 2236 + "type": "defined" 2237 + } 2238 + ] 2239 + } 2240 + }, 2241 + "OrganizationalUnitName": { 2242 + "name": "OrganizationalUnitName", 2243 + "type": { 2244 + "name": "PrintableString", 2245 + "type": "builtin", 2246 + "size": [ 2247 + 1, 2248 + "ub-organizational-unit-name-length" 2249 + ] 2250 + } 2251 + }, 2252 + "BuiltInDomainDefinedAttributes": { 2253 + "name": "BuiltInDomainDefinedAttributes", 2254 + "type": { 2255 + "name": "SEQUENCE", 2256 + "type": "builtin", 2257 + "typeOf": 1, 2258 + "size": [ 2259 + 1, 2260 + "ub-domain-defined-attributes" 2261 + ], 2262 + "content": [ 2263 + { 2264 + "name": "BuiltInDomainDefinedAttribute", 2265 + "type": "defined" 2266 + } 2267 + ] 2268 + } 2269 + }, 2270 + "BuiltInDomainDefinedAttribute": { 2271 + "name": "BuiltInDomainDefinedAttribute", 2272 + "type": { 2273 + "name": "SEQUENCE", 2274 + "type": "builtin", 2275 + "content": [ 2276 + { 2277 + "id": "type", 2278 + "name": "PrintableString", 2279 + "type": "builtin", 2280 + "size": [ 2281 + 1, 2282 + "ub-domain-defined-attribute-type-length" 2283 + ] 2284 + }, 2285 + { 2286 + "id": "value", 2287 + "name": "PrintableString", 2288 + "type": "builtin", 2289 + "size": [ 2290 + 1, 2291 + "ub-domain-defined-attribute-value-length" 2292 + ] 2293 + } 2294 + ] 2295 + } 2296 + }, 2297 + "ExtensionAttributes": { 2298 + "name": "ExtensionAttributes", 2299 + "type": { 2300 + "name": "SET", 2301 + "type": "builtin", 2302 + "typeOf": 1, 2303 + "size": [ 2304 + 1, 2305 + "ub-extension-attributes" 2306 + ], 2307 + "content": [ 2308 + { 2309 + "name": "ExtensionAttribute", 2310 + "type": "defined" 2311 + } 2312 + ] 2313 + } 2314 + }, 2315 + "ExtensionAttribute": { 2316 + "name": "ExtensionAttribute", 2317 + "type": { 2318 + "name": "SEQUENCE", 2319 + "type": "builtin", 2320 + "content": [ 2321 + { 2322 + "id": "extension-attribute-type", 2323 + "name": "[0]", 2324 + "type": "tag", 2325 + "class": "CONTEXT", 2326 + "explicit": false, 2327 + "content": [ 2328 + { 2329 + "name": "", 2330 + "type": { 2331 + "name": "INTEGER", 2332 + "type": "builtin", 2333 + "range": [ 2334 + 0, 2335 + "ub-extension-attributes" 2336 + ] 2337 + } 2338 + } 2339 + ] 2340 + }, 2341 + { 2342 + "id": "extension-attribute-value", 2343 + "name": "[1]", 2344 + "type": "tag", 2345 + "class": "CONTEXT", 2346 + "explicit": true, 2347 + "content": [ 2348 + { 2349 + "name": "", 2350 + "type": { 2351 + "name": "ANY", 2352 + "type": "builtin", 2353 + "definedBy": "extension-attribute-type" 2354 + } 2355 + } 2356 + ] 2357 + } 2358 + ] 2359 + } 2360 + }, 2361 + "CommonName": { 2362 + "name": "CommonName", 2363 + "type": { 2364 + "name": "PrintableString", 2365 + "type": "builtin", 2366 + "size": [ 2367 + 1, 2368 + "ub-common-name-length" 2369 + ] 2370 + } 2371 + }, 2372 + "TeletexCommonName": { 2373 + "name": "TeletexCommonName", 2374 + "type": { 2375 + "name": "TeletexString", 2376 + "type": "builtin", 2377 + "size": [ 2378 + 1, 2379 + "ub-common-name-length" 2380 + ] 2381 + } 2382 + }, 2383 + "TeletexOrganizationName": { 2384 + "name": "TeletexOrganizationName", 2385 + "type": { 2386 + "name": "TeletexString", 2387 + "type": "builtin", 2388 + "size": [ 2389 + 1, 2390 + "ub-organization-name-length" 2391 + ] 2392 + } 2393 + }, 2394 + "TeletexPersonalName": { 2395 + "name": "TeletexPersonalName", 2396 + "type": { 2397 + "name": "SET", 2398 + "type": "builtin", 2399 + "content": [ 2400 + { 2401 + "id": "surname", 2402 + "name": "[0]", 2403 + "type": "tag", 2404 + "class": "CONTEXT", 2405 + "explicit": false, 2406 + "content": [ 2407 + { 2408 + "name": "", 2409 + "type": { 2410 + "name": "TeletexString", 2411 + "type": "builtin", 2412 + "size": [ 2413 + 1, 2414 + "ub-surname-length" 2415 + ] 2416 + } 2417 + } 2418 + ] 2419 + }, 2420 + { 2421 + "id": "given-name", 2422 + "name": "[1]", 2423 + "type": "tag", 2424 + "class": "CONTEXT", 2425 + "explicit": false, 2426 + "content": [ 2427 + { 2428 + "name": "", 2429 + "type": { 2430 + "name": "TeletexString", 2431 + "type": "builtin", 2432 + "size": [ 2433 + 1, 2434 + "ub-given-name-length" 2435 + ] 2436 + } 2437 + } 2438 + ], 2439 + "optional": true 2440 + }, 2441 + { 2442 + "id": "initials", 2443 + "name": "[2]", 2444 + "type": "tag", 2445 + "class": "CONTEXT", 2446 + "explicit": false, 2447 + "content": [ 2448 + { 2449 + "name": "", 2450 + "type": { 2451 + "name": "TeletexString", 2452 + "type": "builtin", 2453 + "size": [ 2454 + 1, 2455 + "ub-initials-length" 2456 + ] 2457 + } 2458 + } 2459 + ], 2460 + "optional": true 2461 + }, 2462 + { 2463 + "id": "generation-qualifier", 2464 + "name": "[3]", 2465 + "type": "tag", 2466 + "class": "CONTEXT", 2467 + "explicit": false, 2468 + "content": [ 2469 + { 2470 + "name": "", 2471 + "type": { 2472 + "name": "TeletexString", 2473 + "type": "builtin", 2474 + "size": [ 2475 + 1, 2476 + "ub-generation-qualifier-length" 2477 + ] 2478 + } 2479 + } 2480 + ], 2481 + "optional": true 2482 + } 2483 + ] 2484 + } 2485 + }, 2486 + "TeletexOrganizationalUnitNames": { 2487 + "name": "TeletexOrganizationalUnitNames", 2488 + "type": { 2489 + "name": "SEQUENCE", 2490 + "type": "builtin", 2491 + "typeOf": 1, 2492 + "size": [ 2493 + 1, 2494 + "ub-organizational-units" 2495 + ], 2496 + "content": [ 2497 + { 2498 + "name": "TeletexOrganizationalUnitName", 2499 + "type": "defined" 2500 + } 2501 + ] 2502 + } 2503 + }, 2504 + "TeletexOrganizationalUnitName": { 2505 + "name": "TeletexOrganizationalUnitName", 2506 + "type": { 2507 + "name": "TeletexString", 2508 + "type": "builtin", 2509 + "size": [ 2510 + 1, 2511 + "ub-organizational-unit-name-length" 2512 + ] 2513 + } 2514 + }, 2515 + "PDSName": { 2516 + "name": "PDSName", 2517 + "type": { 2518 + "name": "PrintableString", 2519 + "type": "builtin", 2520 + "size": [ 2521 + 1, 2522 + "ub-pds-name-length" 2523 + ] 2524 + } 2525 + }, 2526 + "PhysicalDeliveryCountryName": { 2527 + "name": "PhysicalDeliveryCountryName", 2528 + "type": { 2529 + "name": "CHOICE", 2530 + "type": "builtin", 2531 + "content": [ 2532 + { 2533 + "id": "x121-dcc-code", 2534 + "name": "NumericString", 2535 + "type": "builtin", 2536 + "size": "ub-country-name-numeric-length" 2537 + }, 2538 + { 2539 + "id": "iso-3166-alpha2-code", 2540 + "name": "PrintableString", 2541 + "type": "builtin", 2542 + "size": "ub-country-name-alpha-length" 2543 + } 2544 + ] 2545 + } 2546 + }, 2547 + "PostalCode": { 2548 + "name": "PostalCode", 2549 + "type": { 2550 + "name": "CHOICE", 2551 + "type": "builtin", 2552 + "content": [ 2553 + { 2554 + "id": "numeric-code", 2555 + "name": "NumericString", 2556 + "type": "builtin", 2557 + "size": [ 2558 + 1, 2559 + "ub-postal-code-length" 2560 + ] 2561 + }, 2562 + { 2563 + "id": "printable-code", 2564 + "name": "PrintableString", 2565 + "type": "builtin", 2566 + "size": [ 2567 + 1, 2568 + "ub-postal-code-length" 2569 + ] 2570 + } 2571 + ] 2572 + } 2573 + }, 2574 + "PhysicalDeliveryOfficeName": { 2575 + "name": "PhysicalDeliveryOfficeName", 2576 + "type": { 2577 + "name": "PDSParameter", 2578 + "type": "defined" 2579 + } 2580 + }, 2581 + "PhysicalDeliveryOfficeNumber": { 2582 + "name": "PhysicalDeliveryOfficeNumber", 2583 + "type": { 2584 + "name": "PDSParameter", 2585 + "type": "defined" 2586 + } 2587 + }, 2588 + "ExtensionORAddressComponents": { 2589 + "name": "ExtensionORAddressComponents", 2590 + "type": { 2591 + "name": "PDSParameter", 2592 + "type": "defined" 2593 + } 2594 + }, 2595 + "PhysicalDeliveryPersonalName": { 2596 + "name": "PhysicalDeliveryPersonalName", 2597 + "type": { 2598 + "name": "PDSParameter", 2599 + "type": "defined" 2600 + } 2601 + }, 2602 + "PhysicalDeliveryOrganizationName": { 2603 + "name": "PhysicalDeliveryOrganizationName", 2604 + "type": { 2605 + "name": "PDSParameter", 2606 + "type": "defined" 2607 + } 2608 + }, 2609 + "ExtensionPhysicalDeliveryAddressComponents": { 2610 + "name": "ExtensionPhysicalDeliveryAddressComponents", 2611 + "type": { 2612 + "name": "PDSParameter", 2613 + "type": "defined" 2614 + } 2615 + }, 2616 + "UnformattedPostalAddress": { 2617 + "name": "UnformattedPostalAddress", 2618 + "type": { 2619 + "name": "SET", 2620 + "type": "builtin", 2621 + "content": [ 2622 + { 2623 + "id": "printable-address", 2624 + "name": "SEQUENCE", 2625 + "type": "builtin", 2626 + "typeOf": 1, 2627 + "size": [ 2628 + 1, 2629 + "ub-pds-physical-address-lines" 2630 + ], 2631 + "content": [ 2632 + { 2633 + "name": "PrintableString", 2634 + "type": "builtin", 2635 + "size": [ 2636 + 1, 2637 + "ub-pds-parameter-length" 2638 + ] 2639 + } 2640 + ], 2641 + "optional": true 2642 + }, 2643 + { 2644 + "id": "teletex-string", 2645 + "name": "TeletexString", 2646 + "type": "builtin", 2647 + "size": [ 2648 + 1, 2649 + "ub-unformatted-address-length" 2650 + ], 2651 + "optional": true 2652 + } 2653 + ] 2654 + } 2655 + }, 2656 + "StreetAddress": { 2657 + "name": "StreetAddress", 2658 + "type": { 2659 + "name": "PDSParameter", 2660 + "type": "defined" 2661 + } 2662 + }, 2663 + "PostOfficeBoxAddress": { 2664 + "name": "PostOfficeBoxAddress", 2665 + "type": { 2666 + "name": "PDSParameter", 2667 + "type": "defined" 2668 + } 2669 + }, 2670 + "PosteRestanteAddress": { 2671 + "name": "PosteRestanteAddress", 2672 + "type": { 2673 + "name": "PDSParameter", 2674 + "type": "defined" 2675 + } 2676 + }, 2677 + "UniquePostalName": { 2678 + "name": "UniquePostalName", 2679 + "type": { 2680 + "name": "PDSParameter", 2681 + "type": "defined" 2682 + } 2683 + }, 2684 + "LocalPostalAttributes": { 2685 + "name": "LocalPostalAttributes", 2686 + "type": { 2687 + "name": "PDSParameter", 2688 + "type": "defined" 2689 + } 2690 + }, 2691 + "PDSParameter": { 2692 + "name": "PDSParameter", 2693 + "type": { 2694 + "name": "SET", 2695 + "type": "builtin", 2696 + "content": [ 2697 + { 2698 + "id": "printable-string", 2699 + "name": "PrintableString", 2700 + "type": "builtin", 2701 + "size": [ 2702 + 1, 2703 + "ub-pds-parameter-length" 2704 + ], 2705 + "optional": true 2706 + }, 2707 + { 2708 + "id": "teletex-string", 2709 + "name": "TeletexString", 2710 + "type": "builtin", 2711 + "size": [ 2712 + 1, 2713 + "ub-pds-parameter-length" 2714 + ], 2715 + "optional": true 2716 + } 2717 + ] 2718 + } 2719 + }, 2720 + "ExtendedNetworkAddress": { 2721 + "name": "ExtendedNetworkAddress", 2722 + "type": { 2723 + "name": "CHOICE", 2724 + "type": "builtin", 2725 + "content": [ 2726 + { 2727 + "id": "e163-4-address", 2728 + "name": "SEQUENCE", 2729 + "type": "builtin", 2730 + "content": [ 2731 + { 2732 + "id": "number", 2733 + "name": "[0]", 2734 + "type": "tag", 2735 + "class": "CONTEXT", 2736 + "explicit": false, 2737 + "content": [ 2738 + { 2739 + "name": "", 2740 + "type": { 2741 + "name": "NumericString", 2742 + "type": "builtin", 2743 + "size": [ 2744 + 1, 2745 + "ub-e163-4-number-length" 2746 + ] 2747 + } 2748 + } 2749 + ] 2750 + }, 2751 + { 2752 + "id": "sub-address", 2753 + "name": "[1]", 2754 + "type": "tag", 2755 + "class": "CONTEXT", 2756 + "explicit": false, 2757 + "content": [ 2758 + { 2759 + "name": "", 2760 + "type": { 2761 + "name": "NumericString", 2762 + "type": "builtin", 2763 + "size": [ 2764 + 1, 2765 + "ub-e163-4-sub-address-length" 2766 + ] 2767 + } 2768 + } 2769 + ], 2770 + "optional": true 2771 + } 2772 + ] 2773 + }, 2774 + { 2775 + "id": "psap-address", 2776 + "name": "[0]", 2777 + "type": "tag", 2778 + "class": "CONTEXT", 2779 + "explicit": false, 2780 + "content": [ 2781 + { 2782 + "name": "", 2783 + "type": { 2784 + "name": "PresentationAddress", 2785 + "type": "defined" 2786 + } 2787 + } 2788 + ] 2789 + } 2790 + ] 2791 + } 2792 + }, 2793 + "PresentationAddress": { 2794 + "name": "PresentationAddress", 2795 + "type": { 2796 + "name": "SEQUENCE", 2797 + "type": "builtin", 2798 + "content": [ 2799 + { 2800 + "id": "pSelector", 2801 + "name": "[0]", 2802 + "type": "tag", 2803 + "class": "CONTEXT", 2804 + "explicit": true, 2805 + "content": [ 2806 + { 2807 + "name": "", 2808 + "type": { 2809 + "name": "OCTET STRING", 2810 + "type": "builtin" 2811 + } 2812 + } 2813 + ], 2814 + "optional": true 2815 + }, 2816 + { 2817 + "id": "sSelector", 2818 + "name": "[1]", 2819 + "type": "tag", 2820 + "class": "CONTEXT", 2821 + "explicit": true, 2822 + "content": [ 2823 + { 2824 + "name": "", 2825 + "type": { 2826 + "name": "OCTET STRING", 2827 + "type": "builtin" 2828 + } 2829 + } 2830 + ], 2831 + "optional": true 2832 + }, 2833 + { 2834 + "id": "tSelector", 2835 + "name": "[2]", 2836 + "type": "tag", 2837 + "class": "CONTEXT", 2838 + "explicit": true, 2839 + "content": [ 2840 + { 2841 + "name": "", 2842 + "type": { 2843 + "name": "OCTET STRING", 2844 + "type": "builtin" 2845 + } 2846 + } 2847 + ], 2848 + "optional": true 2849 + }, 2850 + { 2851 + "id": "nAddresses", 2852 + "name": "[3]", 2853 + "type": "tag", 2854 + "class": "CONTEXT", 2855 + "explicit": true, 2856 + "content": [ 2857 + { 2858 + "name": "", 2859 + "type": { 2860 + "name": "SET", 2861 + "type": "builtin", 2862 + "typeOf": 1, 2863 + "size": [ 2864 + 1, 2865 + "MAX" 2866 + ], 2867 + "content": [ 2868 + { 2869 + "name": "OCTET STRING", 2870 + "type": "builtin" 2871 + } 2872 + ] 2873 + } 2874 + } 2875 + ] 2876 + } 2877 + ] 2878 + } 2879 + }, 2880 + "TerminalType": { 2881 + "name": "TerminalType", 2882 + "type": { 2883 + "name": "INTEGER", 2884 + "type": "builtin", 2885 + "content": { 2886 + "telex": 3, 2887 + "teletex": 4, 2888 + "g3-facsimile": 5, 2889 + "g4-facsimile": 6, 2890 + "ia5-terminal": 7, 2891 + "videotex": 8 2892 + } 2893 + } 2894 + }, 2895 + "TeletexDomainDefinedAttributes": { 2896 + "name": "TeletexDomainDefinedAttributes", 2897 + "type": { 2898 + "name": "SEQUENCE", 2899 + "type": "builtin", 2900 + "typeOf": 1, 2901 + "size": [ 2902 + 1, 2903 + "ub-domain-defined-attributes" 2904 + ], 2905 + "content": [ 2906 + { 2907 + "name": "TeletexDomainDefinedAttribute", 2908 + "type": "defined" 2909 + } 2910 + ] 2911 + } 2912 + }, 2913 + "TeletexDomainDefinedAttribute": { 2914 + "name": "TeletexDomainDefinedAttribute", 2915 + "type": { 2916 + "name": "SEQUENCE", 2917 + "type": "builtin", 2918 + "content": [ 2919 + { 2920 + "id": "type", 2921 + "name": "TeletexString", 2922 + "type": "builtin", 2923 + "size": [ 2924 + 1, 2925 + "ub-domain-defined-attribute-type-length" 2926 + ] 2927 + }, 2928 + { 2929 + "id": "value", 2930 + "name": "TeletexString", 2931 + "type": "builtin", 2932 + "size": [ 2933 + 1, 2934 + "ub-domain-defined-attribute-value-length" 2935 + ] 2936 + } 2937 + ] 2938 + } 2939 + } 2940 + } 2941 + }, 2942 + "1.3.6.1.5.5.7.0.19": { 2943 + "name": "PKIX1Implicit88", 2944 + "oid": "1.3.6.1.5.5.7.0.19", 2945 + "source": "rfc5280.txt", 2946 + "tagDefault": "IMPLICIT", 2947 + "imports": { 2948 + "1.3.6.1.5.5.7.0.18": { 2949 + "name": "PKIX1Explicit88", 2950 + "oid": "1.3.6.1.5.5.7.0.18", 2951 + "types": [ 2952 + "id-pe", 2953 + "id-kp", 2954 + "id-qt-unotice", 2955 + "id-qt-cps", 2956 + "BMPString", 2957 + "UTF8String", 2958 + "ORAddress", 2959 + "Name", 2960 + "RelativeDistinguishedName", 2961 + "CertificateSerialNumber", 2962 + "Attribute", 2963 + "DirectoryString" 2964 + ] 2965 + } 2966 + }, 2967 + "values": { 2968 + "id-ce": { 2969 + "name": "id-ce", 2970 + "type": { 2971 + "name": "OBJECT IDENTIFIER", 2972 + "type": "builtin" 2973 + }, 2974 + "value": "2.5.29" 2975 + }, 2976 + "id-ce-authorityKeyIdentifier": { 2977 + "name": "id-ce-authorityKeyIdentifier", 2978 + "type": { 2979 + "name": "OBJECT IDENTIFIER", 2980 + "type": "builtin" 2981 + }, 2982 + "value": "2.5.29.35" 2983 + }, 2984 + "id-ce-subjectKeyIdentifier": { 2985 + "name": "id-ce-subjectKeyIdentifier", 2986 + "type": { 2987 + "name": "OBJECT IDENTIFIER", 2988 + "type": "builtin" 2989 + }, 2990 + "value": "2.5.29.14" 2991 + }, 2992 + "id-ce-keyUsage": { 2993 + "name": "id-ce-keyUsage", 2994 + "type": { 2995 + "name": "OBJECT IDENTIFIER", 2996 + "type": "builtin" 2997 + }, 2998 + "value": "2.5.29.15" 2999 + }, 3000 + "id-ce-privateKeyUsagePeriod": { 3001 + "name": "id-ce-privateKeyUsagePeriod", 3002 + "type": { 3003 + "name": "OBJECT IDENTIFIER", 3004 + "type": "builtin" 3005 + }, 3006 + "value": "2.5.29.16" 3007 + }, 3008 + "id-ce-certificatePolicies": { 3009 + "name": "id-ce-certificatePolicies", 3010 + "type": { 3011 + "name": "OBJECT IDENTIFIER", 3012 + "type": "builtin" 3013 + }, 3014 + "value": "2.5.29.32" 3015 + }, 3016 + "anyPolicy": { 3017 + "name": "anyPolicy", 3018 + "type": { 3019 + "name": "OBJECT IDENTIFIER", 3020 + "type": "builtin" 3021 + }, 3022 + "value": "2.5.29.32.0" 3023 + }, 3024 + "id-ce-policyMappings": { 3025 + "name": "id-ce-policyMappings", 3026 + "type": { 3027 + "name": "OBJECT IDENTIFIER", 3028 + "type": "builtin" 3029 + }, 3030 + "value": "2.5.29.33" 3031 + }, 3032 + "id-ce-subjectAltName": { 3033 + "name": "id-ce-subjectAltName", 3034 + "type": { 3035 + "name": "OBJECT IDENTIFIER", 3036 + "type": "builtin" 3037 + }, 3038 + "value": "2.5.29.17" 3039 + }, 3040 + "id-ce-issuerAltName": { 3041 + "name": "id-ce-issuerAltName", 3042 + "type": { 3043 + "name": "OBJECT IDENTIFIER", 3044 + "type": "builtin" 3045 + }, 3046 + "value": "2.5.29.18" 3047 + }, 3048 + "id-ce-subjectDirectoryAttributes": { 3049 + "name": "id-ce-subjectDirectoryAttributes", 3050 + "type": { 3051 + "name": "OBJECT IDENTIFIER", 3052 + "type": "builtin" 3053 + }, 3054 + "value": "2.5.29.9" 3055 + }, 3056 + "id-ce-basicConstraints": { 3057 + "name": "id-ce-basicConstraints", 3058 + "type": { 3059 + "name": "OBJECT IDENTIFIER", 3060 + "type": "builtin" 3061 + }, 3062 + "value": "2.5.29.19" 3063 + }, 3064 + "id-ce-nameConstraints": { 3065 + "name": "id-ce-nameConstraints", 3066 + "type": { 3067 + "name": "OBJECT IDENTIFIER", 3068 + "type": "builtin" 3069 + }, 3070 + "value": "2.5.29.30" 3071 + }, 3072 + "id-ce-policyConstraints": { 3073 + "name": "id-ce-policyConstraints", 3074 + "type": { 3075 + "name": "OBJECT IDENTIFIER", 3076 + "type": "builtin" 3077 + }, 3078 + "value": "2.5.29.36" 3079 + }, 3080 + "id-ce-cRLDistributionPoints": { 3081 + "name": "id-ce-cRLDistributionPoints", 3082 + "type": { 3083 + "name": "OBJECT IDENTIFIER", 3084 + "type": "builtin" 3085 + }, 3086 + "value": "2.5.29.31" 3087 + }, 3088 + "id-ce-extKeyUsage": { 3089 + "name": "id-ce-extKeyUsage", 3090 + "type": { 3091 + "name": "OBJECT IDENTIFIER", 3092 + "type": "builtin" 3093 + }, 3094 + "value": "2.5.29.37" 3095 + }, 3096 + "anyExtendedKeyUsage": { 3097 + "name": "anyExtendedKeyUsage", 3098 + "type": { 3099 + "name": "OBJECT IDENTIFIER", 3100 + "type": "builtin" 3101 + }, 3102 + "value": "2.5.29.37.0" 3103 + }, 3104 + "id-kp-serverAuth": { 3105 + "name": "id-kp-serverAuth", 3106 + "type": { 3107 + "name": "OBJECT IDENTIFIER", 3108 + "type": "builtin" 3109 + }, 3110 + "value": "[object Object].1" 3111 + }, 3112 + "id-kp-clientAuth": { 3113 + "name": "id-kp-clientAuth", 3114 + "type": { 3115 + "name": "OBJECT IDENTIFIER", 3116 + "type": "builtin" 3117 + }, 3118 + "value": "[object Object].2" 3119 + }, 3120 + "id-kp-codeSigning": { 3121 + "name": "id-kp-codeSigning", 3122 + "type": { 3123 + "name": "OBJECT IDENTIFIER", 3124 + "type": "builtin" 3125 + }, 3126 + "value": "[object Object].3" 3127 + }, 3128 + "id-kp-emailProtection": { 3129 + "name": "id-kp-emailProtection", 3130 + "type": { 3131 + "name": "OBJECT IDENTIFIER", 3132 + "type": "builtin" 3133 + }, 3134 + "value": "[object Object].4" 3135 + }, 3136 + "id-kp-timeStamping": { 3137 + "name": "id-kp-timeStamping", 3138 + "type": { 3139 + "name": "OBJECT IDENTIFIER", 3140 + "type": "builtin" 3141 + }, 3142 + "value": "[object Object].8" 3143 + }, 3144 + "id-kp-OCSPSigning": { 3145 + "name": "id-kp-OCSPSigning", 3146 + "type": { 3147 + "name": "OBJECT IDENTIFIER", 3148 + "type": "builtin" 3149 + }, 3150 + "value": "[object Object].9" 3151 + }, 3152 + "id-ce-inhibitAnyPolicy": { 3153 + "name": "id-ce-inhibitAnyPolicy", 3154 + "type": { 3155 + "name": "OBJECT IDENTIFIER", 3156 + "type": "builtin" 3157 + }, 3158 + "value": "2.5.29.54" 3159 + }, 3160 + "id-ce-freshestCRL": { 3161 + "name": "id-ce-freshestCRL", 3162 + "type": { 3163 + "name": "OBJECT IDENTIFIER", 3164 + "type": "builtin" 3165 + }, 3166 + "value": "2.5.29.46" 3167 + }, 3168 + "id-pe-authorityInfoAccess": { 3169 + "name": "id-pe-authorityInfoAccess", 3170 + "type": { 3171 + "name": "OBJECT IDENTIFIER", 3172 + "type": "builtin" 3173 + }, 3174 + "value": "[object Object].1" 3175 + }, 3176 + "id-pe-subjectInfoAccess": { 3177 + "name": "id-pe-subjectInfoAccess", 3178 + "type": { 3179 + "name": "OBJECT IDENTIFIER", 3180 + "type": "builtin" 3181 + }, 3182 + "value": "[object Object].11" 3183 + }, 3184 + "id-ce-cRLNumber": { 3185 + "name": "id-ce-cRLNumber", 3186 + "type": { 3187 + "name": "OBJECT IDENTIFIER", 3188 + "type": "builtin" 3189 + }, 3190 + "value": "2.5.29.20" 3191 + }, 3192 + "id-ce-issuingDistributionPoint": { 3193 + "name": "id-ce-issuingDistributionPoint", 3194 + "type": { 3195 + "name": "OBJECT IDENTIFIER", 3196 + "type": "builtin" 3197 + }, 3198 + "value": "2.5.29.28" 3199 + }, 3200 + "id-ce-deltaCRLIndicator": { 3201 + "name": "id-ce-deltaCRLIndicator", 3202 + "type": { 3203 + "name": "OBJECT IDENTIFIER", 3204 + "type": "builtin" 3205 + }, 3206 + "value": "2.5.29.27" 3207 + }, 3208 + "id-ce-cRLReasons": { 3209 + "name": "id-ce-cRLReasons", 3210 + "type": { 3211 + "name": "OBJECT IDENTIFIER", 3212 + "type": "builtin" 3213 + }, 3214 + "value": "2.5.29.21" 3215 + }, 3216 + "id-ce-certificateIssuer": { 3217 + "name": "id-ce-certificateIssuer", 3218 + "type": { 3219 + "name": "OBJECT IDENTIFIER", 3220 + "type": "builtin" 3221 + }, 3222 + "value": "2.5.29.29" 3223 + }, 3224 + "id-ce-holdInstructionCode": { 3225 + "name": "id-ce-holdInstructionCode", 3226 + "type": { 3227 + "name": "OBJECT IDENTIFIER", 3228 + "type": "builtin" 3229 + }, 3230 + "value": "2.5.29.23" 3231 + }, 3232 + "holdInstruction": { 3233 + "name": "holdInstruction", 3234 + "type": { 3235 + "name": "OBJECT IDENTIFIER", 3236 + "type": "builtin" 3237 + }, 3238 + "value": "2.2.840.10040.2" 3239 + }, 3240 + "id-holdinstruction-none": { 3241 + "name": "id-holdinstruction-none", 3242 + "type": { 3243 + "name": "OBJECT IDENTIFIER", 3244 + "type": "builtin" 3245 + }, 3246 + "value": "2.2.840.10040.2.1" 3247 + }, 3248 + "id-holdinstruction-callissuer": { 3249 + "name": "id-holdinstruction-callissuer", 3250 + "type": { 3251 + "name": "OBJECT IDENTIFIER", 3252 + "type": "builtin" 3253 + }, 3254 + "value": "2.2.840.10040.2.2" 3255 + }, 3256 + "id-holdinstruction-reject": { 3257 + "name": "id-holdinstruction-reject", 3258 + "type": { 3259 + "name": "OBJECT IDENTIFIER", 3260 + "type": "builtin" 3261 + }, 3262 + "value": "2.2.840.10040.2.3" 3263 + }, 3264 + "id-ce-invalidityDate": { 3265 + "name": "id-ce-invalidityDate", 3266 + "type": { 3267 + "name": "OBJECT IDENTIFIER", 3268 + "type": "builtin" 3269 + }, 3270 + "value": "2.5.29.24" 3271 + } 3272 + }, 3273 + "types": { 3274 + "AuthorityKeyIdentifier": { 3275 + "name": "AuthorityKeyIdentifier", 3276 + "type": { 3277 + "name": "SEQUENCE", 3278 + "type": "builtin", 3279 + "content": [ 3280 + { 3281 + "id": "keyIdentifier", 3282 + "name": "[0]", 3283 + "type": "tag", 3284 + "class": "CONTEXT", 3285 + "explicit": false, 3286 + "content": [ 3287 + { 3288 + "name": "", 3289 + "type": { 3290 + "name": "KeyIdentifier", 3291 + "type": "defined" 3292 + } 3293 + } 3294 + ], 3295 + "optional": true 3296 + }, 3297 + { 3298 + "id": "authorityCertIssuer", 3299 + "name": "[1]", 3300 + "type": "tag", 3301 + "class": "CONTEXT", 3302 + "explicit": false, 3303 + "content": [ 3304 + { 3305 + "name": "", 3306 + "type": { 3307 + "name": "GeneralNames", 3308 + "type": "defined" 3309 + } 3310 + } 3311 + ], 3312 + "optional": true 3313 + }, 3314 + { 3315 + "id": "authorityCertSerialNumber", 3316 + "name": "[2]", 3317 + "type": "tag", 3318 + "class": "CONTEXT", 3319 + "explicit": false, 3320 + "content": [ 3321 + { 3322 + "name": "", 3323 + "type": { 3324 + "name": "CertificateSerialNumber", 3325 + "type": "defined" 3326 + } 3327 + } 3328 + ], 3329 + "optional": true 3330 + } 3331 + ] 3332 + } 3333 + }, 3334 + "KeyIdentifier": { 3335 + "name": "KeyIdentifier", 3336 + "type": { 3337 + "name": "OCTET STRING", 3338 + "type": "builtin" 3339 + } 3340 + }, 3341 + "SubjectKeyIdentifier": { 3342 + "name": "SubjectKeyIdentifier", 3343 + "type": { 3344 + "name": "KeyIdentifier", 3345 + "type": "defined" 3346 + } 3347 + }, 3348 + "KeyUsage": { 3349 + "name": "KeyUsage", 3350 + "type": { 3351 + "name": "BIT STRING", 3352 + "type": "builtin", 3353 + "content": { 3354 + "digitalSignature": 0, 3355 + "nonRepudiation": 1, 3356 + "keyEncipherment": 2, 3357 + "dataEncipherment": 3, 3358 + "keyAgreement": 4, 3359 + "keyCertSign": 5, 3360 + "cRLSign": 6, 3361 + "encipherOnly": 7, 3362 + "decipherOnly": 8 3363 + } 3364 + } 3365 + }, 3366 + "PrivateKeyUsagePeriod": { 3367 + "name": "PrivateKeyUsagePeriod", 3368 + "type": { 3369 + "name": "SEQUENCE", 3370 + "type": "builtin", 3371 + "content": [ 3372 + { 3373 + "id": "notBefore", 3374 + "name": "[0]", 3375 + "type": "tag", 3376 + "class": "CONTEXT", 3377 + "explicit": false, 3378 + "content": [ 3379 + { 3380 + "name": "", 3381 + "type": { 3382 + "name": "GeneralizedTime", 3383 + "type": "builtin" 3384 + } 3385 + } 3386 + ], 3387 + "optional": true 3388 + }, 3389 + { 3390 + "id": "notAfter", 3391 + "name": "[1]", 3392 + "type": "tag", 3393 + "class": "CONTEXT", 3394 + "explicit": false, 3395 + "content": [ 3396 + { 3397 + "name": "", 3398 + "type": { 3399 + "name": "GeneralizedTime", 3400 + "type": "builtin" 3401 + } 3402 + } 3403 + ], 3404 + "optional": true 3405 + } 3406 + ] 3407 + } 3408 + }, 3409 + "CertificatePolicies": { 3410 + "name": "CertificatePolicies", 3411 + "type": { 3412 + "name": "SEQUENCE", 3413 + "type": "builtin", 3414 + "typeOf": 1, 3415 + "size": [ 3416 + 1, 3417 + "MAX" 3418 + ], 3419 + "content": [ 3420 + { 3421 + "name": "PolicyInformation", 3422 + "type": "defined" 3423 + } 3424 + ] 3425 + } 3426 + }, 3427 + "PolicyInformation": { 3428 + "name": "PolicyInformation", 3429 + "type": { 3430 + "name": "SEQUENCE", 3431 + "type": "builtin", 3432 + "content": [ 3433 + { 3434 + "id": "policyIdentifier", 3435 + "name": "CertPolicyId", 3436 + "type": "defined" 3437 + }, 3438 + { 3439 + "id": "policyQualifiers", 3440 + "name": "SEQUENCE", 3441 + "type": "builtin", 3442 + "typeOf": 1, 3443 + "size": [ 3444 + 1, 3445 + "MAX" 3446 + ], 3447 + "content": [ 3448 + { 3449 + "name": "PolicyQualifierInfo", 3450 + "type": "defined" 3451 + } 3452 + ], 3453 + "optional": true 3454 + } 3455 + ] 3456 + } 3457 + }, 3458 + "CertPolicyId": { 3459 + "name": "CertPolicyId", 3460 + "type": { 3461 + "name": "OBJECT IDENTIFIER", 3462 + "type": "builtin" 3463 + } 3464 + }, 3465 + "PolicyQualifierInfo": { 3466 + "name": "PolicyQualifierInfo", 3467 + "type": { 3468 + "name": "SEQUENCE", 3469 + "type": "builtin", 3470 + "content": [ 3471 + { 3472 + "id": "policyQualifierId", 3473 + "name": "PolicyQualifierId", 3474 + "type": "defined" 3475 + }, 3476 + { 3477 + "id": "qualifier", 3478 + "name": "ANY", 3479 + "type": "builtin", 3480 + "definedBy": "policyQualifierId" 3481 + } 3482 + ] 3483 + } 3484 + }, 3485 + "PolicyQualifierId": { 3486 + "name": "PolicyQualifierId", 3487 + "type": { 3488 + "name": "OBJECT IDENTIFIER", 3489 + "type": "builtin" 3490 + } 3491 + }, 3492 + "CPSuri": { 3493 + "name": "CPSuri", 3494 + "type": { 3495 + "name": "IA5String", 3496 + "type": "builtin" 3497 + } 3498 + }, 3499 + "UserNotice": { 3500 + "name": "UserNotice", 3501 + "type": { 3502 + "name": "SEQUENCE", 3503 + "type": "builtin", 3504 + "content": [ 3505 + { 3506 + "id": "noticeRef", 3507 + "name": "NoticeReference", 3508 + "type": "defined", 3509 + "optional": true 3510 + }, 3511 + { 3512 + "id": "explicitText", 3513 + "name": "DisplayText", 3514 + "type": "defined", 3515 + "optional": true 3516 + } 3517 + ] 3518 + } 3519 + }, 3520 + "NoticeReference": { 3521 + "name": "NoticeReference", 3522 + "type": { 3523 + "name": "SEQUENCE", 3524 + "type": "builtin", 3525 + "content": [ 3526 + { 3527 + "id": "organization", 3528 + "name": "DisplayText", 3529 + "type": "defined" 3530 + }, 3531 + { 3532 + "id": "noticeNumbers", 3533 + "name": "SEQUENCE", 3534 + "type": "builtin", 3535 + "typeOf": 1, 3536 + "content": [ 3537 + { 3538 + "name": "INTEGER", 3539 + "type": "builtin" 3540 + } 3541 + ] 3542 + } 3543 + ] 3544 + } 3545 + }, 3546 + "DisplayText": { 3547 + "name": "DisplayText", 3548 + "type": { 3549 + "name": "CHOICE", 3550 + "type": "builtin", 3551 + "content": [ 3552 + { 3553 + "id": "ia5String", 3554 + "name": "IA5String", 3555 + "type": "builtin", 3556 + "size": [ 3557 + 1, 3558 + 200 3559 + ] 3560 + }, 3561 + { 3562 + "id": "visibleString", 3563 + "name": "VisibleString", 3564 + "type": "builtin", 3565 + "size": [ 3566 + 1, 3567 + 200 3568 + ] 3569 + }, 3570 + { 3571 + "id": "bmpString", 3572 + "name": "BMPString", 3573 + "type": "builtin", 3574 + "size": [ 3575 + 1, 3576 + 200 3577 + ] 3578 + }, 3579 + { 3580 + "id": "utf8String", 3581 + "name": "UTF8String", 3582 + "type": "builtin", 3583 + "size": [ 3584 + 1, 3585 + 200 3586 + ] 3587 + } 3588 + ] 3589 + } 3590 + }, 3591 + "PolicyMappings": { 3592 + "name": "PolicyMappings", 3593 + "type": { 3594 + "name": "SEQUENCE", 3595 + "type": "builtin", 3596 + "typeOf": 1, 3597 + "size": [ 3598 + 1, 3599 + "MAX" 3600 + ], 3601 + "content": [ 3602 + { 3603 + "name": "SEQUENCE", 3604 + "type": "builtin", 3605 + "content": [ 3606 + { 3607 + "id": "issuerDomainPolicy", 3608 + "name": "CertPolicyId", 3609 + "type": "defined" 3610 + }, 3611 + { 3612 + "id": "subjectDomainPolicy", 3613 + "name": "CertPolicyId", 3614 + "type": "defined" 3615 + } 3616 + ] 3617 + } 3618 + ] 3619 + } 3620 + }, 3621 + "SubjectAltName": { 3622 + "name": "SubjectAltName", 3623 + "type": { 3624 + "name": "GeneralNames", 3625 + "type": "defined" 3626 + } 3627 + }, 3628 + "GeneralNames": { 3629 + "name": "GeneralNames", 3630 + "type": { 3631 + "name": "SEQUENCE", 3632 + "type": "builtin", 3633 + "typeOf": 1, 3634 + "size": [ 3635 + 1, 3636 + "MAX" 3637 + ], 3638 + "content": [ 3639 + { 3640 + "name": "GeneralName", 3641 + "type": "defined" 3642 + } 3643 + ] 3644 + } 3645 + }, 3646 + "GeneralName": { 3647 + "name": "GeneralName", 3648 + "type": { 3649 + "name": "CHOICE", 3650 + "type": "builtin", 3651 + "content": [ 3652 + { 3653 + "id": "otherName", 3654 + "name": "[0]", 3655 + "type": "tag", 3656 + "class": "CONTEXT", 3657 + "explicit": false, 3658 + "content": [ 3659 + { 3660 + "name": "", 3661 + "type": { 3662 + "name": "AnotherName", 3663 + "type": "defined" 3664 + } 3665 + } 3666 + ] 3667 + }, 3668 + { 3669 + "id": "rfc822Name", 3670 + "name": "[1]", 3671 + "type": "tag", 3672 + "class": "CONTEXT", 3673 + "explicit": false, 3674 + "content": [ 3675 + { 3676 + "name": "", 3677 + "type": { 3678 + "name": "IA5String", 3679 + "type": "builtin" 3680 + } 3681 + } 3682 + ] 3683 + }, 3684 + { 3685 + "id": "dNSName", 3686 + "name": "[2]", 3687 + "type": "tag", 3688 + "class": "CONTEXT", 3689 + "explicit": false, 3690 + "content": [ 3691 + { 3692 + "name": "", 3693 + "type": { 3694 + "name": "IA5String", 3695 + "type": "builtin" 3696 + } 3697 + } 3698 + ] 3699 + }, 3700 + { 3701 + "id": "x400Address", 3702 + "name": "[3]", 3703 + "type": "tag", 3704 + "class": "CONTEXT", 3705 + "explicit": false, 3706 + "content": [ 3707 + { 3708 + "name": "", 3709 + "type": { 3710 + "name": "ORAddress", 3711 + "type": "defined" 3712 + } 3713 + } 3714 + ] 3715 + }, 3716 + { 3717 + "id": "directoryName", 3718 + "name": "[4]", 3719 + "type": "tag", 3720 + "class": "CONTEXT", 3721 + "explicit": false, 3722 + "content": [ 3723 + { 3724 + "name": "", 3725 + "type": { 3726 + "name": "Name", 3727 + "type": "defined" 3728 + } 3729 + } 3730 + ] 3731 + }, 3732 + { 3733 + "id": "ediPartyName", 3734 + "name": "[5]", 3735 + "type": "tag", 3736 + "class": "CONTEXT", 3737 + "explicit": false, 3738 + "content": [ 3739 + { 3740 + "name": "", 3741 + "type": { 3742 + "name": "EDIPartyName", 3743 + "type": "defined" 3744 + } 3745 + } 3746 + ] 3747 + }, 3748 + { 3749 + "id": "uniformResourceIdentifier", 3750 + "name": "[6]", 3751 + "type": "tag", 3752 + "class": "CONTEXT", 3753 + "explicit": false, 3754 + "content": [ 3755 + { 3756 + "name": "", 3757 + "type": { 3758 + "name": "IA5String", 3759 + "type": "builtin" 3760 + } 3761 + } 3762 + ] 3763 + }, 3764 + { 3765 + "id": "iPAddress", 3766 + "name": "[7]", 3767 + "type": "tag", 3768 + "class": "CONTEXT", 3769 + "explicit": false, 3770 + "content": [ 3771 + { 3772 + "name": "", 3773 + "type": { 3774 + "name": "OCTET STRING", 3775 + "type": "builtin" 3776 + } 3777 + } 3778 + ] 3779 + }, 3780 + { 3781 + "id": "registeredID", 3782 + "name": "[8]", 3783 + "type": "tag", 3784 + "class": "CONTEXT", 3785 + "explicit": false, 3786 + "content": [ 3787 + { 3788 + "name": "", 3789 + "type": { 3790 + "name": "OBJECT IDENTIFIER", 3791 + "type": "builtin" 3792 + } 3793 + } 3794 + ] 3795 + } 3796 + ] 3797 + } 3798 + }, 3799 + "AnotherName": { 3800 + "name": "AnotherName", 3801 + "type": { 3802 + "name": "SEQUENCE", 3803 + "type": "builtin", 3804 + "content": [ 3805 + { 3806 + "id": "type-id", 3807 + "name": "OBJECT IDENTIFIER", 3808 + "type": "builtin" 3809 + }, 3810 + { 3811 + "id": "value", 3812 + "name": "[0]", 3813 + "type": "tag", 3814 + "class": "CONTEXT", 3815 + "explicit": true, 3816 + "content": [ 3817 + { 3818 + "name": "", 3819 + "type": { 3820 + "name": "ANY", 3821 + "type": "builtin", 3822 + "definedBy": "type-id" 3823 + } 3824 + } 3825 + ] 3826 + } 3827 + ] 3828 + } 3829 + }, 3830 + "EDIPartyName": { 3831 + "name": "EDIPartyName", 3832 + "type": { 3833 + "name": "SEQUENCE", 3834 + "type": "builtin", 3835 + "content": [ 3836 + { 3837 + "id": "nameAssigner", 3838 + "name": "[0]", 3839 + "type": "tag", 3840 + "class": "CONTEXT", 3841 + "explicit": false, 3842 + "content": [ 3843 + { 3844 + "name": "", 3845 + "type": { 3846 + "name": "DirectoryString", 3847 + "type": "defined" 3848 + } 3849 + } 3850 + ], 3851 + "optional": true 3852 + }, 3853 + { 3854 + "id": "partyName", 3855 + "name": "[1]", 3856 + "type": "tag", 3857 + "class": "CONTEXT", 3858 + "explicit": false, 3859 + "content": [ 3860 + { 3861 + "name": "", 3862 + "type": { 3863 + "name": "DirectoryString", 3864 + "type": "defined" 3865 + } 3866 + } 3867 + ] 3868 + } 3869 + ] 3870 + } 3871 + }, 3872 + "IssuerAltName": { 3873 + "name": "IssuerAltName", 3874 + "type": { 3875 + "name": "GeneralNames", 3876 + "type": "defined" 3877 + } 3878 + }, 3879 + "SubjectDirectoryAttributes": { 3880 + "name": "SubjectDirectoryAttributes", 3881 + "type": { 3882 + "name": "SEQUENCE", 3883 + "type": "builtin", 3884 + "typeOf": 1, 3885 + "size": [ 3886 + 1, 3887 + "MAX" 3888 + ], 3889 + "content": [ 3890 + { 3891 + "name": "Attribute", 3892 + "type": "defined" 3893 + } 3894 + ] 3895 + } 3896 + }, 3897 + "BasicConstraints": { 3898 + "name": "BasicConstraints", 3899 + "type": { 3900 + "name": "SEQUENCE", 3901 + "type": "builtin", 3902 + "content": [ 3903 + { 3904 + "id": "cA", 3905 + "name": "BOOLEAN", 3906 + "type": "builtin", 3907 + "default": false 3908 + }, 3909 + { 3910 + "id": "pathLenConstraint", 3911 + "name": "INTEGER", 3912 + "type": "builtin", 3913 + "range": [ 3914 + 0, 3915 + "MAX" 3916 + ], 3917 + "optional": true 3918 + } 3919 + ] 3920 + } 3921 + }, 3922 + "NameConstraints": { 3923 + "name": "NameConstraints", 3924 + "type": { 3925 + "name": "SEQUENCE", 3926 + "type": "builtin", 3927 + "content": [ 3928 + { 3929 + "id": "permittedSubtrees", 3930 + "name": "[0]", 3931 + "type": "tag", 3932 + "class": "CONTEXT", 3933 + "explicit": false, 3934 + "content": [ 3935 + { 3936 + "name": "", 3937 + "type": { 3938 + "name": "GeneralSubtrees", 3939 + "type": "defined" 3940 + } 3941 + } 3942 + ], 3943 + "optional": true 3944 + }, 3945 + { 3946 + "id": "excludedSubtrees", 3947 + "name": "[1]", 3948 + "type": "tag", 3949 + "class": "CONTEXT", 3950 + "explicit": false, 3951 + "content": [ 3952 + { 3953 + "name": "", 3954 + "type": { 3955 + "name": "GeneralSubtrees", 3956 + "type": "defined" 3957 + } 3958 + } 3959 + ], 3960 + "optional": true 3961 + } 3962 + ] 3963 + } 3964 + }, 3965 + "GeneralSubtrees": { 3966 + "name": "GeneralSubtrees", 3967 + "type": { 3968 + "name": "SEQUENCE", 3969 + "type": "builtin", 3970 + "typeOf": 1, 3971 + "size": [ 3972 + 1, 3973 + "MAX" 3974 + ], 3975 + "content": [ 3976 + { 3977 + "name": "GeneralSubtree", 3978 + "type": "defined" 3979 + } 3980 + ] 3981 + } 3982 + }, 3983 + "GeneralSubtree": { 3984 + "name": "GeneralSubtree", 3985 + "type": { 3986 + "name": "SEQUENCE", 3987 + "type": "builtin", 3988 + "content": [ 3989 + { 3990 + "id": "base", 3991 + "name": "GeneralName", 3992 + "type": "defined" 3993 + }, 3994 + { 3995 + "id": "minimum", 3996 + "name": "[0]", 3997 + "type": "tag", 3998 + "class": "CONTEXT", 3999 + "explicit": false, 4000 + "content": [ 4001 + { 4002 + "name": "", 4003 + "type": { 4004 + "name": "BaseDistance", 4005 + "type": "defined" 4006 + } 4007 + } 4008 + ], 4009 + "default": 0 4010 + }, 4011 + { 4012 + "id": "maximum", 4013 + "name": "[1]", 4014 + "type": "tag", 4015 + "class": "CONTEXT", 4016 + "explicit": false, 4017 + "content": [ 4018 + { 4019 + "name": "", 4020 + "type": { 4021 + "name": "BaseDistance", 4022 + "type": "defined" 4023 + } 4024 + } 4025 + ], 4026 + "optional": true 4027 + } 4028 + ] 4029 + } 4030 + }, 4031 + "BaseDistance": { 4032 + "name": "BaseDistance", 4033 + "type": { 4034 + "name": "INTEGER", 4035 + "type": "builtin", 4036 + "range": [ 4037 + 0, 4038 + "MAX" 4039 + ] 4040 + } 4041 + }, 4042 + "PolicyConstraints": { 4043 + "name": "PolicyConstraints", 4044 + "type": { 4045 + "name": "SEQUENCE", 4046 + "type": "builtin", 4047 + "content": [ 4048 + { 4049 + "id": "requireExplicitPolicy", 4050 + "name": "[0]", 4051 + "type": "tag", 4052 + "class": "CONTEXT", 4053 + "explicit": false, 4054 + "content": [ 4055 + { 4056 + "name": "", 4057 + "type": { 4058 + "name": "SkipCerts", 4059 + "type": "defined" 4060 + } 4061 + } 4062 + ], 4063 + "optional": true 4064 + }, 4065 + { 4066 + "id": "inhibitPolicyMapping", 4067 + "name": "[1]", 4068 + "type": "tag", 4069 + "class": "CONTEXT", 4070 + "explicit": false, 4071 + "content": [ 4072 + { 4073 + "name": "", 4074 + "type": { 4075 + "name": "SkipCerts", 4076 + "type": "defined" 4077 + } 4078 + } 4079 + ], 4080 + "optional": true 4081 + } 4082 + ] 4083 + } 4084 + }, 4085 + "SkipCerts": { 4086 + "name": "SkipCerts", 4087 + "type": { 4088 + "name": "INTEGER", 4089 + "type": "builtin", 4090 + "range": [ 4091 + 0, 4092 + "MAX" 4093 + ] 4094 + } 4095 + }, 4096 + "CRLDistributionPoints": { 4097 + "name": "CRLDistributionPoints", 4098 + "type": { 4099 + "name": "SEQUENCE", 4100 + "type": "builtin", 4101 + "typeOf": 1, 4102 + "size": [ 4103 + 1, 4104 + "MAX" 4105 + ], 4106 + "content": [ 4107 + { 4108 + "name": "DistributionPoint", 4109 + "type": "defined" 4110 + } 4111 + ] 4112 + } 4113 + }, 4114 + "DistributionPoint": { 4115 + "name": "DistributionPoint", 4116 + "type": { 4117 + "name": "SEQUENCE", 4118 + "type": "builtin", 4119 + "content": [ 4120 + { 4121 + "id": "distributionPoint", 4122 + "name": "[0]", 4123 + "type": "tag", 4124 + "class": "CONTEXT", 4125 + "explicit": false, 4126 + "content": [ 4127 + { 4128 + "name": "", 4129 + "type": { 4130 + "name": "DistributionPointName", 4131 + "type": "defined" 4132 + } 4133 + } 4134 + ], 4135 + "optional": true 4136 + }, 4137 + { 4138 + "id": "reasons", 4139 + "name": "[1]", 4140 + "type": "tag", 4141 + "class": "CONTEXT", 4142 + "explicit": false, 4143 + "content": [ 4144 + { 4145 + "name": "", 4146 + "type": { 4147 + "name": "ReasonFlags", 4148 + "type": "defined" 4149 + } 4150 + } 4151 + ], 4152 + "optional": true 4153 + }, 4154 + { 4155 + "id": "cRLIssuer", 4156 + "name": "[2]", 4157 + "type": "tag", 4158 + "class": "CONTEXT", 4159 + "explicit": false, 4160 + "content": [ 4161 + { 4162 + "name": "", 4163 + "type": { 4164 + "name": "GeneralNames", 4165 + "type": "defined" 4166 + } 4167 + } 4168 + ], 4169 + "optional": true 4170 + } 4171 + ] 4172 + } 4173 + }, 4174 + "DistributionPointName": { 4175 + "name": "DistributionPointName", 4176 + "type": { 4177 + "name": "CHOICE", 4178 + "type": "builtin", 4179 + "content": [ 4180 + { 4181 + "id": "fullName", 4182 + "name": "[0]", 4183 + "type": "tag", 4184 + "class": "CONTEXT", 4185 + "explicit": false, 4186 + "content": [ 4187 + { 4188 + "name": "", 4189 + "type": { 4190 + "name": "GeneralNames", 4191 + "type": "defined" 4192 + } 4193 + } 4194 + ] 4195 + }, 4196 + { 4197 + "id": "nameRelativeToCRLIssuer", 4198 + "name": "[1]", 4199 + "type": "tag", 4200 + "class": "CONTEXT", 4201 + "explicit": false, 4202 + "content": [ 4203 + { 4204 + "name": "", 4205 + "type": { 4206 + "name": "RelativeDistinguishedName", 4207 + "type": "defined" 4208 + } 4209 + } 4210 + ] 4211 + } 4212 + ] 4213 + } 4214 + }, 4215 + "ReasonFlags": { 4216 + "name": "ReasonFlags", 4217 + "type": { 4218 + "name": "BIT STRING", 4219 + "type": "builtin", 4220 + "content": { 4221 + "unused": 0, 4222 + "keyCompromise": 1, 4223 + "cACompromise": 2, 4224 + "affiliationChanged": 3, 4225 + "superseded": 4, 4226 + "cessationOfOperation": 5, 4227 + "certificateHold": 6, 4228 + "privilegeWithdrawn": 7, 4229 + "aACompromise": 8 4230 + } 4231 + } 4232 + }, 4233 + "ExtKeyUsageSyntax": { 4234 + "name": "ExtKeyUsageSyntax", 4235 + "type": { 4236 + "name": "SEQUENCE", 4237 + "type": "builtin", 4238 + "typeOf": 1, 4239 + "size": [ 4240 + 1, 4241 + "MAX" 4242 + ], 4243 + "content": [ 4244 + { 4245 + "name": "KeyPurposeId", 4246 + "type": "defined" 4247 + } 4248 + ] 4249 + } 4250 + }, 4251 + "KeyPurposeId": { 4252 + "name": "KeyPurposeId", 4253 + "type": { 4254 + "name": "OBJECT IDENTIFIER", 4255 + "type": "builtin" 4256 + } 4257 + }, 4258 + "InhibitAnyPolicy": { 4259 + "name": "InhibitAnyPolicy", 4260 + "type": { 4261 + "name": "SkipCerts", 4262 + "type": "defined" 4263 + } 4264 + }, 4265 + "FreshestCRL": { 4266 + "name": "FreshestCRL", 4267 + "type": { 4268 + "name": "CRLDistributionPoints", 4269 + "type": "defined" 4270 + } 4271 + }, 4272 + "AuthorityInfoAccessSyntax": { 4273 + "name": "AuthorityInfoAccessSyntax", 4274 + "type": { 4275 + "name": "SEQUENCE", 4276 + "type": "builtin", 4277 + "typeOf": 1, 4278 + "size": [ 4279 + 1, 4280 + "MAX" 4281 + ], 4282 + "content": [ 4283 + { 4284 + "name": "AccessDescription", 4285 + "type": "defined" 4286 + } 4287 + ] 4288 + } 4289 + }, 4290 + "AccessDescription": { 4291 + "name": "AccessDescription", 4292 + "type": { 4293 + "name": "SEQUENCE", 4294 + "type": "builtin", 4295 + "content": [ 4296 + { 4297 + "id": "accessMethod", 4298 + "name": "OBJECT IDENTIFIER", 4299 + "type": "builtin" 4300 + }, 4301 + { 4302 + "id": "accessLocation", 4303 + "name": "GeneralName", 4304 + "type": "defined" 4305 + } 4306 + ] 4307 + } 4308 + }, 4309 + "SubjectInfoAccessSyntax": { 4310 + "name": "SubjectInfoAccessSyntax", 4311 + "type": { 4312 + "name": "SEQUENCE", 4313 + "type": "builtin", 4314 + "typeOf": 1, 4315 + "size": [ 4316 + 1, 4317 + "MAX" 4318 + ], 4319 + "content": [ 4320 + { 4321 + "name": "AccessDescription", 4322 + "type": "defined" 4323 + } 4324 + ] 4325 + } 4326 + }, 4327 + "CRLNumber": { 4328 + "name": "CRLNumber", 4329 + "type": { 4330 + "name": "INTEGER", 4331 + "type": "builtin", 4332 + "range": [ 4333 + 0, 4334 + "MAX" 4335 + ] 4336 + } 4337 + }, 4338 + "IssuingDistributionPoint": { 4339 + "name": "IssuingDistributionPoint", 4340 + "type": { 4341 + "name": "SEQUENCE", 4342 + "type": "builtin", 4343 + "content": [ 4344 + { 4345 + "id": "distributionPoint", 4346 + "name": "[0]", 4347 + "type": "tag", 4348 + "class": "CONTEXT", 4349 + "explicit": false, 4350 + "content": [ 4351 + { 4352 + "name": "", 4353 + "type": { 4354 + "name": "DistributionPointName", 4355 + "type": "defined" 4356 + } 4357 + } 4358 + ], 4359 + "optional": true 4360 + }, 4361 + { 4362 + "id": "onlyContainsUserCerts", 4363 + "name": "[1]", 4364 + "type": "tag", 4365 + "class": "CONTEXT", 4366 + "explicit": false, 4367 + "content": [ 4368 + { 4369 + "name": "", 4370 + "type": { 4371 + "name": "BOOLEAN", 4372 + "type": "builtin" 4373 + } 4374 + } 4375 + ], 4376 + "default": false 4377 + }, 4378 + { 4379 + "id": "onlyContainsCACerts", 4380 + "name": "[2]", 4381 + "type": "tag", 4382 + "class": "CONTEXT", 4383 + "explicit": false, 4384 + "content": [ 4385 + { 4386 + "name": "", 4387 + "type": { 4388 + "name": "BOOLEAN", 4389 + "type": "builtin" 4390 + } 4391 + } 4392 + ], 4393 + "default": false 4394 + }, 4395 + { 4396 + "id": "onlySomeReasons", 4397 + "name": "[3]", 4398 + "type": "tag", 4399 + "class": "CONTEXT", 4400 + "explicit": false, 4401 + "content": [ 4402 + { 4403 + "name": "", 4404 + "type": { 4405 + "name": "ReasonFlags", 4406 + "type": "defined" 4407 + } 4408 + } 4409 + ], 4410 + "optional": true 4411 + }, 4412 + { 4413 + "id": "indirectCRL", 4414 + "name": "[4]", 4415 + "type": "tag", 4416 + "class": "CONTEXT", 4417 + "explicit": false, 4418 + "content": [ 4419 + { 4420 + "name": "", 4421 + "type": { 4422 + "name": "BOOLEAN", 4423 + "type": "builtin" 4424 + } 4425 + } 4426 + ], 4427 + "default": false 4428 + }, 4429 + { 4430 + "id": "onlyContainsAttributeCerts", 4431 + "name": "[5]", 4432 + "type": "tag", 4433 + "class": "CONTEXT", 4434 + "explicit": false, 4435 + "content": [ 4436 + { 4437 + "name": "", 4438 + "type": { 4439 + "name": "BOOLEAN", 4440 + "type": "builtin" 4441 + } 4442 + } 4443 + ], 4444 + "default": false 4445 + } 4446 + ] 4447 + } 4448 + }, 4449 + "BaseCRLNumber": { 4450 + "name": "BaseCRLNumber", 4451 + "type": { 4452 + "name": "CRLNumber", 4453 + "type": "defined" 4454 + } 4455 + }, 4456 + "CRLReason": { 4457 + "name": "CRLReason", 4458 + "type": { 4459 + "name": "ENUMERATED", 4460 + "type": "builtin", 4461 + "content": { 4462 + "unspecified": 0, 4463 + "keyCompromise": 1, 4464 + "cACompromise": 2, 4465 + "affiliationChanged": 3, 4466 + "superseded": 4, 4467 + "cessationOfOperation": 5, 4468 + "certificateHold": 6, 4469 + "removeFromCRL": 8, 4470 + "privilegeWithdrawn": 9, 4471 + "aACompromise": 10 4472 + } 4473 + } 4474 + }, 4475 + "CertificateIssuer": { 4476 + "name": "CertificateIssuer", 4477 + "type": { 4478 + "name": "GeneralNames", 4479 + "type": "defined" 4480 + } 4481 + }, 4482 + "HoldInstructionCode": { 4483 + "name": "HoldInstructionCode", 4484 + "type": { 4485 + "name": "OBJECT IDENTIFIER", 4486 + "type": "builtin" 4487 + } 4488 + }, 4489 + "InvalidityDate": { 4490 + "name": "InvalidityDate", 4491 + "type": { 4492 + "name": "GeneralizedTime", 4493 + "type": "builtin" 4494 + } 4495 + } 4496 + } 4497 + }, 4498 + "1.2.840.113549.1.8.1.1": { 4499 + "name": "PKCS-8", 4500 + "oid": "1.2.840.113549.1.8.1.1", 4501 + "source": "rfc5208.txt", 4502 + "tagDefault": "IMPLICIT", 4503 + "imports": { 4504 + "2.5.1.0.3": { 4505 + "name": "InformationFramework", 4506 + "oid": "2.5.1.0.3", 4507 + "types": [ 4508 + "Attribute" 4509 + ] 4510 + }, 4511 + "1.2.840.113549.1.5.16.1": { 4512 + "name": "PKCS-5", 4513 + "oid": "1.2.840.113549.1.5.16.1", 4514 + "types": [ 4515 + "AlgorithmIdentifier", 4516 + "ALGORITHM-IDENTIFIER" 4517 + ] 4518 + } 4519 + }, 4520 + "values": { 4521 + "PrivateKeyAlgorithms": { 4522 + "name": "PrivateKeyAlgorithms", 4523 + "type": { 4524 + "name": "ALGORITHM-IDENTIFIER", 4525 + "type": "defined" 4526 + }, 4527 + "value": "" 4528 + }, 4529 + "KeyEncryptionAlgorithms": { 4530 + "name": "KeyEncryptionAlgorithms", 4531 + "type": { 4532 + "name": "ALGORITHM-IDENTIFIER", 4533 + "type": "defined" 4534 + }, 4535 + "value": "" 4536 + } 4537 + }, 4538 + "types": { 4539 + "PrivateKeyInfo": { 4540 + "name": "PrivateKeyInfo", 4541 + "type": { 4542 + "name": "SEQUENCE", 4543 + "type": "builtin", 4544 + "content": [ 4545 + { 4546 + "id": "version", 4547 + "name": "Version", 4548 + "type": "defined" 4549 + }, 4550 + { 4551 + "id": "privateKeyAlgorithm", 4552 + "name": "AlgorithmIdentifier", 4553 + "type": "defined" 4554 + }, 4555 + { 4556 + "id": "privateKey", 4557 + "name": "PrivateKey", 4558 + "type": "defined" 4559 + }, 4560 + { 4561 + "id": "attributes", 4562 + "name": "[0]", 4563 + "type": "tag", 4564 + "class": "CONTEXT", 4565 + "explicit": false, 4566 + "content": [ 4567 + { 4568 + "name": "", 4569 + "type": { 4570 + "name": "Attributes", 4571 + "type": "defined" 4572 + } 4573 + } 4574 + ], 4575 + "optional": true 4576 + } 4577 + ] 4578 + } 4579 + }, 4580 + "Version": { 4581 + "name": "Version", 4582 + "type": { 4583 + "name": "INTEGER", 4584 + "type": "builtin", 4585 + "content": { 4586 + "v1": 0 4587 + } 4588 + } 4589 + }, 4590 + "PrivateKey": { 4591 + "name": "PrivateKey", 4592 + "type": { 4593 + "name": "OCTET STRING", 4594 + "type": "builtin" 4595 + } 4596 + }, 4597 + "Attributes": { 4598 + "name": "Attributes", 4599 + "type": { 4600 + "name": "SET", 4601 + "type": "builtin", 4602 + "typeOf": 1, 4603 + "content": [ 4604 + { 4605 + "name": "Attribute", 4606 + "type": "defined" 4607 + } 4608 + ] 4609 + } 4610 + }, 4611 + "EncryptedPrivateKeyInfo": { 4612 + "name": "EncryptedPrivateKeyInfo", 4613 + "type": { 4614 + "name": "SEQUENCE", 4615 + "type": "builtin", 4616 + "content": [ 4617 + { 4618 + "id": "encryptionAlgorithm", 4619 + "name": "AlgorithmIdentifier", 4620 + "type": "defined" 4621 + }, 4622 + { 4623 + "id": "encryptedData", 4624 + "name": "EncryptedData", 4625 + "type": "defined" 4626 + } 4627 + ] 4628 + } 4629 + }, 4630 + "EncryptedData": { 4631 + "name": "EncryptedData", 4632 + "type": { 4633 + "name": "OCTET STRING", 4634 + "type": "builtin" 4635 + } 4636 + } 4637 + } 4638 + }, 4639 + "1.2.840.113549.1.9.16.0.14": { 4640 + "name": "CryptographicMessageSyntax", 4641 + "oid": "1.2.840.113549.1.9.16.0.14", 4642 + "source": "rfc3369.txt", 4643 + "tagDefault": "IMPLICIT", 4644 + "imports": { 4645 + "1.3.6.1.5.5.7.0.18": { 4646 + "name": "PKIX1Explicit88", 4647 + "oid": "1.3.6.1.5.5.7.0.18", 4648 + "types": [ 4649 + "AlgorithmIdentifier", 4650 + "Certificate", 4651 + "CertificateList", 4652 + "CertificateSerialNumber", 4653 + "Name" 4654 + ] 4655 + }, 4656 + "1.3.6.1.5.5.7.0.12": { 4657 + "name": "PKIXAttributeCertificate", 4658 + "oid": "1.3.6.1.5.5.7.0.12", 4659 + "types": [ 4660 + "AttributeCertificate" 4661 + ] 4662 + }, 4663 + "1.2.840.113549.1.9.16.0.15": { 4664 + "name": "AttributeCertificateVersion1", 4665 + "oid": "1.2.840.113549.1.9.16.0.15", 4666 + "types": [ 4667 + "AttributeCertificateV1" 4668 + ] 4669 + } 4670 + }, 4671 + "values": { 4672 + "id-contentType": { 4673 + "name": "id-contentType", 4674 + "type": { 4675 + "name": "OBJECT IDENTIFIER", 4676 + "type": "builtin" 4677 + }, 4678 + "value": "1.2.840.113549.1.9.3" 4679 + }, 4680 + "id-messageDigest": { 4681 + "name": "id-messageDigest", 4682 + "type": { 4683 + "name": "OBJECT IDENTIFIER", 4684 + "type": "builtin" 4685 + }, 4686 + "value": "1.2.840.113549.1.9.4" 4687 + }, 4688 + "id-signingTime": { 4689 + "name": "id-signingTime", 4690 + "type": { 4691 + "name": "OBJECT IDENTIFIER", 4692 + "type": "builtin" 4693 + }, 4694 + "value": "1.2.840.113549.1.9.5" 4695 + }, 4696 + "id-countersignature": { 4697 + "name": "id-countersignature", 4698 + "type": { 4699 + "name": "OBJECT IDENTIFIER", 4700 + "type": "builtin" 4701 + }, 4702 + "value": "1.2.840.113549.1.9.6" 4703 + } 4704 + }, 4705 + "types": { 4706 + "ContentInfo": { 4707 + "name": "ContentInfo", 4708 + "type": { 4709 + "name": "SEQUENCE", 4710 + "type": "builtin", 4711 + "content": [ 4712 + { 4713 + "id": "contentType", 4714 + "name": "ContentType", 4715 + "type": "defined" 4716 + }, 4717 + { 4718 + "id": "content", 4719 + "name": "[0]", 4720 + "type": "tag", 4721 + "class": "CONTEXT", 4722 + "explicit": true, 4723 + "content": [ 4724 + { 4725 + "name": "", 4726 + "type": { 4727 + "name": "ANY", 4728 + "type": "builtin", 4729 + "definedBy": "contentType" 4730 + } 4731 + } 4732 + ] 4733 + } 4734 + ] 4735 + } 4736 + }, 4737 + "ContentType": { 4738 + "name": "ContentType", 4739 + "type": { 4740 + "name": "OBJECT IDENTIFIER", 4741 + "type": "builtin" 4742 + } 4743 + }, 4744 + "SignedData": { 4745 + "name": "SignedData", 4746 + "type": { 4747 + "name": "SEQUENCE", 4748 + "type": "builtin", 4749 + "content": [ 4750 + { 4751 + "id": "version", 4752 + "name": "CMSVersion", 4753 + "type": "defined" 4754 + }, 4755 + { 4756 + "id": "digestAlgorithms", 4757 + "name": "DigestAlgorithmIdentifiers", 4758 + "type": "defined" 4759 + }, 4760 + { 4761 + "id": "encapContentInfo", 4762 + "name": "EncapsulatedContentInfo", 4763 + "type": "defined" 4764 + }, 4765 + { 4766 + "id": "certificates", 4767 + "name": "[0]", 4768 + "type": "tag", 4769 + "class": "CONTEXT", 4770 + "explicit": false, 4771 + "content": [ 4772 + { 4773 + "name": "", 4774 + "type": { 4775 + "name": "CertificateSet", 4776 + "type": "defined" 4777 + } 4778 + } 4779 + ], 4780 + "optional": true 4781 + }, 4782 + { 4783 + "id": "crls", 4784 + "name": "[1]", 4785 + "type": "tag", 4786 + "class": "CONTEXT", 4787 + "explicit": false, 4788 + "content": [ 4789 + { 4790 + "name": "", 4791 + "type": { 4792 + "name": "CertificateRevocationLists", 4793 + "type": "defined" 4794 + } 4795 + } 4796 + ], 4797 + "optional": true 4798 + }, 4799 + { 4800 + "id": "signerInfos", 4801 + "name": "SignerInfos", 4802 + "type": "defined" 4803 + } 4804 + ] 4805 + } 4806 + }, 4807 + "DigestAlgorithmIdentifiers": { 4808 + "name": "DigestAlgorithmIdentifiers", 4809 + "type": { 4810 + "name": "SET", 4811 + "type": "builtin", 4812 + "typeOf": 1, 4813 + "content": [ 4814 + { 4815 + "name": "DigestAlgorithmIdentifier", 4816 + "type": "defined" 4817 + } 4818 + ] 4819 + } 4820 + }, 4821 + "SignerInfos": { 4822 + "name": "SignerInfos", 4823 + "type": { 4824 + "name": "SET", 4825 + "type": "builtin", 4826 + "typeOf": 1, 4827 + "content": [ 4828 + { 4829 + "name": "SignerInfo", 4830 + "type": "defined" 4831 + } 4832 + ] 4833 + } 4834 + }, 4835 + "EncapsulatedContentInfo": { 4836 + "name": "EncapsulatedContentInfo", 4837 + "type": { 4838 + "name": "SEQUENCE", 4839 + "type": "builtin", 4840 + "content": [ 4841 + { 4842 + "id": "eContentType", 4843 + "name": "ContentType", 4844 + "type": "defined" 4845 + }, 4846 + { 4847 + "id": "eContent", 4848 + "name": "[0]", 4849 + "type": "tag", 4850 + "class": "CONTEXT", 4851 + "explicit": true, 4852 + "content": [ 4853 + { 4854 + "name": "", 4855 + "type": { 4856 + "name": "OCTET STRING", 4857 + "type": "builtin" 4858 + } 4859 + } 4860 + ], 4861 + "optional": true 4862 + } 4863 + ] 4864 + } 4865 + }, 4866 + "SignerInfo": { 4867 + "name": "SignerInfo", 4868 + "type": { 4869 + "name": "SEQUENCE", 4870 + "type": "builtin", 4871 + "content": [ 4872 + { 4873 + "id": "version", 4874 + "name": "CMSVersion", 4875 + "type": "defined" 4876 + }, 4877 + { 4878 + "id": "sid", 4879 + "name": "SignerIdentifier", 4880 + "type": "defined" 4881 + }, 4882 + { 4883 + "id": "digestAlgorithm", 4884 + "name": "DigestAlgorithmIdentifier", 4885 + "type": "defined" 4886 + }, 4887 + { 4888 + "id": "signedAttrs", 4889 + "name": "[0]", 4890 + "type": "tag", 4891 + "class": "CONTEXT", 4892 + "explicit": false, 4893 + "content": [ 4894 + { 4895 + "name": "", 4896 + "type": { 4897 + "name": "SignedAttributes", 4898 + "type": "defined" 4899 + } 4900 + } 4901 + ], 4902 + "optional": true 4903 + }, 4904 + { 4905 + "id": "signatureAlgorithm", 4906 + "name": "SignatureAlgorithmIdentifier", 4907 + "type": "defined" 4908 + }, 4909 + { 4910 + "id": "signature", 4911 + "name": "SignatureValue", 4912 + "type": "defined" 4913 + }, 4914 + { 4915 + "id": "unsignedAttrs", 4916 + "name": "[1]", 4917 + "type": "tag", 4918 + "class": "CONTEXT", 4919 + "explicit": false, 4920 + "content": [ 4921 + { 4922 + "name": "", 4923 + "type": { 4924 + "name": "UnsignedAttributes", 4925 + "type": "defined" 4926 + } 4927 + } 4928 + ], 4929 + "optional": true 4930 + } 4931 + ] 4932 + } 4933 + }, 4934 + "SignerIdentifier": { 4935 + "name": "SignerIdentifier", 4936 + "type": { 4937 + "name": "CHOICE", 4938 + "type": "builtin", 4939 + "content": [ 4940 + { 4941 + "id": "issuerAndSerialNumber", 4942 + "name": "IssuerAndSerialNumber", 4943 + "type": "defined" 4944 + }, 4945 + { 4946 + "id": "subjectKeyIdentifier", 4947 + "name": "[0]", 4948 + "type": "tag", 4949 + "class": "CONTEXT", 4950 + "explicit": false, 4951 + "content": [ 4952 + { 4953 + "name": "", 4954 + "type": { 4955 + "name": "SubjectKeyIdentifier", 4956 + "type": "defined" 4957 + } 4958 + } 4959 + ] 4960 + } 4961 + ] 4962 + } 4963 + }, 4964 + "SignedAttributes": { 4965 + "name": "SignedAttributes", 4966 + "type": { 4967 + "name": "SET", 4968 + "type": "builtin", 4969 + "typeOf": 1, 4970 + "size": [ 4971 + 1, 4972 + "MAX" 4973 + ], 4974 + "content": [ 4975 + { 4976 + "name": "Attribute", 4977 + "type": "defined" 4978 + } 4979 + ] 4980 + } 4981 + }, 4982 + "UnsignedAttributes": { 4983 + "name": "UnsignedAttributes", 4984 + "type": { 4985 + "name": "SET", 4986 + "type": "builtin", 4987 + "typeOf": 1, 4988 + "size": [ 4989 + 1, 4990 + "MAX" 4991 + ], 4992 + "content": [ 4993 + { 4994 + "name": "Attribute", 4995 + "type": "defined" 4996 + } 4997 + ] 4998 + } 4999 + }, 5000 + "Attribute": { 5001 + "name": "Attribute", 5002 + "type": { 5003 + "name": "SEQUENCE", 5004 + "type": "builtin", 5005 + "content": [ 5006 + { 5007 + "id": "attrType", 5008 + "name": "OBJECT IDENTIFIER", 5009 + "type": "builtin" 5010 + }, 5011 + { 5012 + "id": "attrValues", 5013 + "name": "SET", 5014 + "type": "builtin", 5015 + "typeOf": 1, 5016 + "content": [ 5017 + { 5018 + "name": "AttributeValue", 5019 + "type": "defined" 5020 + } 5021 + ] 5022 + } 5023 + ] 5024 + } 5025 + }, 5026 + "AttributeValue": { 5027 + "name": "AttributeValue", 5028 + "type": { 5029 + "name": "ANY", 5030 + "type": "builtin" 5031 + } 5032 + }, 5033 + "SignatureValue": { 5034 + "name": "SignatureValue", 5035 + "type": { 5036 + "name": "OCTET STRING", 5037 + "type": "builtin" 5038 + } 5039 + }, 5040 + "EnvelopedData": { 5041 + "name": "EnvelopedData", 5042 + "type": { 5043 + "name": "SEQUENCE", 5044 + "type": "builtin", 5045 + "content": [ 5046 + { 5047 + "id": "version", 5048 + "name": "CMSVersion", 5049 + "type": "defined" 5050 + }, 5051 + { 5052 + "id": "originatorInfo", 5053 + "name": "[0]", 5054 + "type": "tag", 5055 + "class": "CONTEXT", 5056 + "explicit": false, 5057 + "content": [ 5058 + { 5059 + "name": "", 5060 + "type": { 5061 + "name": "OriginatorInfo", 5062 + "type": "defined" 5063 + } 5064 + } 5065 + ], 5066 + "optional": true 5067 + }, 5068 + { 5069 + "id": "recipientInfos", 5070 + "name": "RecipientInfos", 5071 + "type": "defined" 5072 + }, 5073 + { 5074 + "id": "encryptedContentInfo", 5075 + "name": "EncryptedContentInfo", 5076 + "type": "defined" 5077 + }, 5078 + { 5079 + "id": "unprotectedAttrs", 5080 + "name": "[1]", 5081 + "type": "tag", 5082 + "class": "CONTEXT", 5083 + "explicit": false, 5084 + "content": [ 5085 + { 5086 + "name": "", 5087 + "type": { 5088 + "name": "UnprotectedAttributes", 5089 + "type": "defined" 5090 + } 5091 + } 5092 + ], 5093 + "optional": true 5094 + } 5095 + ] 5096 + } 5097 + }, 5098 + "OriginatorInfo": { 5099 + "name": "OriginatorInfo", 5100 + "type": { 5101 + "name": "SEQUENCE", 5102 + "type": "builtin", 5103 + "content": [ 5104 + { 5105 + "id": "certs", 5106 + "name": "[0]", 5107 + "type": "tag", 5108 + "class": "CONTEXT", 5109 + "explicit": false, 5110 + "content": [ 5111 + { 5112 + "name": "", 5113 + "type": { 5114 + "name": "CertificateSet", 5115 + "type": "defined" 5116 + } 5117 + } 5118 + ], 5119 + "optional": true 5120 + }, 5121 + { 5122 + "id": "crls", 5123 + "name": "[1]", 5124 + "type": "tag", 5125 + "class": "CONTEXT", 5126 + "explicit": false, 5127 + "content": [ 5128 + { 5129 + "name": "", 5130 + "type": { 5131 + "name": "CertificateRevocationLists", 5132 + "type": "defined" 5133 + } 5134 + } 5135 + ], 5136 + "optional": true 5137 + } 5138 + ] 5139 + } 5140 + }, 5141 + "RecipientInfos": { 5142 + "name": "RecipientInfos", 5143 + "type": { 5144 + "name": "SET", 5145 + "type": "builtin", 5146 + "typeOf": 1, 5147 + "size": [ 5148 + 1, 5149 + "MAX" 5150 + ], 5151 + "content": [ 5152 + { 5153 + "name": "RecipientInfo", 5154 + "type": "defined" 5155 + } 5156 + ] 5157 + } 5158 + }, 5159 + "EncryptedContentInfo": { 5160 + "name": "EncryptedContentInfo", 5161 + "type": { 5162 + "name": "SEQUENCE", 5163 + "type": "builtin", 5164 + "content": [ 5165 + { 5166 + "id": "contentType", 5167 + "name": "ContentType", 5168 + "type": "defined" 5169 + }, 5170 + { 5171 + "id": "contentEncryptionAlgorithm", 5172 + "name": "ContentEncryptionAlgorithmIdentifier", 5173 + "type": "defined" 5174 + }, 5175 + { 5176 + "id": "encryptedContent", 5177 + "name": "[0]", 5178 + "type": "tag", 5179 + "class": "CONTEXT", 5180 + "explicit": false, 5181 + "content": [ 5182 + { 5183 + "name": "", 5184 + "type": { 5185 + "name": "EncryptedContent", 5186 + "type": "defined" 5187 + } 5188 + } 5189 + ], 5190 + "optional": true 5191 + } 5192 + ] 5193 + } 5194 + }, 5195 + "EncryptedContent": { 5196 + "name": "EncryptedContent", 5197 + "type": { 5198 + "name": "OCTET STRING", 5199 + "type": "builtin" 5200 + } 5201 + }, 5202 + "UnprotectedAttributes": { 5203 + "name": "UnprotectedAttributes", 5204 + "type": { 5205 + "name": "SET", 5206 + "type": "builtin", 5207 + "typeOf": 1, 5208 + "size": [ 5209 + 1, 5210 + "MAX" 5211 + ], 5212 + "content": [ 5213 + { 5214 + "name": "Attribute", 5215 + "type": "defined" 5216 + } 5217 + ] 5218 + } 5219 + }, 5220 + "RecipientInfo": { 5221 + "name": "RecipientInfo", 5222 + "type": { 5223 + "name": "CHOICE", 5224 + "type": "builtin", 5225 + "content": [ 5226 + { 5227 + "id": "ktri", 5228 + "name": "KeyTransRecipientInfo", 5229 + "type": "defined" 5230 + }, 5231 + { 5232 + "id": "kari", 5233 + "name": "[1]", 5234 + "type": "tag", 5235 + "class": "CONTEXT", 5236 + "explicit": false, 5237 + "content": [ 5238 + { 5239 + "name": "", 5240 + "type": { 5241 + "name": "KeyAgreeRecipientInfo", 5242 + "type": "defined" 5243 + } 5244 + } 5245 + ] 5246 + }, 5247 + { 5248 + "id": "kekri", 5249 + "name": "[2]", 5250 + "type": "tag", 5251 + "class": "CONTEXT", 5252 + "explicit": false, 5253 + "content": [ 5254 + { 5255 + "name": "", 5256 + "type": { 5257 + "name": "KEKRecipientInfo", 5258 + "type": "defined" 5259 + } 5260 + } 5261 + ] 5262 + }, 5263 + { 5264 + "id": "pwri", 5265 + "name": "[3]", 5266 + "type": "tag", 5267 + "class": "CONTEXT", 5268 + "explicit": false, 5269 + "content": [ 5270 + { 5271 + "name": "", 5272 + "type": { 5273 + "name": "PasswordRecipientInfo", 5274 + "type": "defined" 5275 + } 5276 + } 5277 + ] 5278 + }, 5279 + { 5280 + "id": "ori", 5281 + "name": "[4]", 5282 + "type": "tag", 5283 + "class": "CONTEXT", 5284 + "explicit": false, 5285 + "content": [ 5286 + { 5287 + "name": "", 5288 + "type": { 5289 + "name": "OtherRecipientInfo", 5290 + "type": "defined" 5291 + } 5292 + } 5293 + ] 5294 + } 5295 + ] 5296 + } 5297 + }, 5298 + "EncryptedKey": { 5299 + "name": "EncryptedKey", 5300 + "type": { 5301 + "name": "OCTET STRING", 5302 + "type": "builtin" 5303 + } 5304 + }, 5305 + "KeyTransRecipientInfo": { 5306 + "name": "KeyTransRecipientInfo", 5307 + "type": { 5308 + "name": "SEQUENCE", 5309 + "type": "builtin", 5310 + "content": [ 5311 + { 5312 + "id": "version", 5313 + "name": "CMSVersion", 5314 + "type": "defined" 5315 + }, 5316 + { 5317 + "id": "rid", 5318 + "name": "RecipientIdentifier", 5319 + "type": "defined" 5320 + }, 5321 + { 5322 + "id": "keyEncryptionAlgorithm", 5323 + "name": "KeyEncryptionAlgorithmIdentifier", 5324 + "type": "defined" 5325 + }, 5326 + { 5327 + "id": "encryptedKey", 5328 + "name": "EncryptedKey", 5329 + "type": "defined" 5330 + } 5331 + ] 5332 + } 5333 + }, 5334 + "RecipientIdentifier": { 5335 + "name": "RecipientIdentifier", 5336 + "type": { 5337 + "name": "CHOICE", 5338 + "type": "builtin", 5339 + "content": [ 5340 + { 5341 + "id": "issuerAndSerialNumber", 5342 + "name": "IssuerAndSerialNumber", 5343 + "type": "defined" 5344 + }, 5345 + { 5346 + "id": "subjectKeyIdentifier", 5347 + "name": "[0]", 5348 + "type": "tag", 5349 + "class": "CONTEXT", 5350 + "explicit": false, 5351 + "content": [ 5352 + { 5353 + "name": "", 5354 + "type": { 5355 + "name": "SubjectKeyIdentifier", 5356 + "type": "defined" 5357 + } 5358 + } 5359 + ] 5360 + } 5361 + ] 5362 + } 5363 + }, 5364 + "KeyAgreeRecipientInfo": { 5365 + "name": "KeyAgreeRecipientInfo", 5366 + "type": { 5367 + "name": "SEQUENCE", 5368 + "type": "builtin", 5369 + "content": [ 5370 + { 5371 + "id": "version", 5372 + "name": "CMSVersion", 5373 + "type": "defined" 5374 + }, 5375 + { 5376 + "id": "originator", 5377 + "name": "[0]", 5378 + "type": "tag", 5379 + "class": "CONTEXT", 5380 + "explicit": true, 5381 + "content": [ 5382 + { 5383 + "name": "", 5384 + "type": { 5385 + "name": "OriginatorIdentifierOrKey", 5386 + "type": "defined" 5387 + } 5388 + } 5389 + ] 5390 + }, 5391 + { 5392 + "id": "ukm", 5393 + "name": "[1]", 5394 + "type": "tag", 5395 + "class": "CONTEXT", 5396 + "explicit": true, 5397 + "content": [ 5398 + { 5399 + "name": "", 5400 + "type": { 5401 + "name": "UserKeyingMaterial", 5402 + "type": "defined" 5403 + } 5404 + } 5405 + ], 5406 + "optional": true 5407 + }, 5408 + { 5409 + "id": "keyEncryptionAlgorithm", 5410 + "name": "KeyEncryptionAlgorithmIdentifier", 5411 + "type": "defined" 5412 + }, 5413 + { 5414 + "id": "recipientEncryptedKeys", 5415 + "name": "RecipientEncryptedKeys", 5416 + "type": "defined" 5417 + } 5418 + ] 5419 + } 5420 + }, 5421 + "OriginatorIdentifierOrKey": { 5422 + "name": "OriginatorIdentifierOrKey", 5423 + "type": { 5424 + "name": "CHOICE", 5425 + "type": "builtin", 5426 + "content": [ 5427 + { 5428 + "id": "issuerAndSerialNumber", 5429 + "name": "IssuerAndSerialNumber", 5430 + "type": "defined" 5431 + }, 5432 + { 5433 + "id": "subjectKeyIdentifier", 5434 + "name": "[0]", 5435 + "type": "tag", 5436 + "class": "CONTEXT", 5437 + "explicit": false, 5438 + "content": [ 5439 + { 5440 + "name": "", 5441 + "type": { 5442 + "name": "SubjectKeyIdentifier", 5443 + "type": "defined" 5444 + } 5445 + } 5446 + ] 5447 + }, 5448 + { 5449 + "id": "originatorKey", 5450 + "name": "[1]", 5451 + "type": "tag", 5452 + "class": "CONTEXT", 5453 + "explicit": false, 5454 + "content": [ 5455 + { 5456 + "name": "", 5457 + "type": { 5458 + "name": "OriginatorPublicKey", 5459 + "type": "defined" 5460 + } 5461 + } 5462 + ] 5463 + } 5464 + ] 5465 + } 5466 + }, 5467 + "OriginatorPublicKey": { 5468 + "name": "OriginatorPublicKey", 5469 + "type": { 5470 + "name": "SEQUENCE", 5471 + "type": "builtin", 5472 + "content": [ 5473 + { 5474 + "id": "algorithm", 5475 + "name": "AlgorithmIdentifier", 5476 + "type": "defined" 5477 + }, 5478 + { 5479 + "id": "publicKey", 5480 + "name": "BIT STRING", 5481 + "type": "builtin" 5482 + } 5483 + ] 5484 + } 5485 + }, 5486 + "RecipientEncryptedKeys": { 5487 + "name": "RecipientEncryptedKeys", 5488 + "type": { 5489 + "name": "SEQUENCE", 5490 + "type": "builtin", 5491 + "typeOf": 1, 5492 + "content": [ 5493 + { 5494 + "name": "RecipientEncryptedKey", 5495 + "type": "defined" 5496 + } 5497 + ] 5498 + } 5499 + }, 5500 + "RecipientEncryptedKey": { 5501 + "name": "RecipientEncryptedKey", 5502 + "type": { 5503 + "name": "SEQUENCE", 5504 + "type": "builtin", 5505 + "content": [ 5506 + { 5507 + "id": "rid", 5508 + "name": "KeyAgreeRecipientIdentifier", 5509 + "type": "defined" 5510 + }, 5511 + { 5512 + "id": "encryptedKey", 5513 + "name": "EncryptedKey", 5514 + "type": "defined" 5515 + } 5516 + ] 5517 + } 5518 + }, 5519 + "KeyAgreeRecipientIdentifier": { 5520 + "name": "KeyAgreeRecipientIdentifier", 5521 + "type": { 5522 + "name": "CHOICE", 5523 + "type": "builtin", 5524 + "content": [ 5525 + { 5526 + "id": "issuerAndSerialNumber", 5527 + "name": "IssuerAndSerialNumber", 5528 + "type": "defined" 5529 + }, 5530 + { 5531 + "id": "rKeyId", 5532 + "name": "[0]", 5533 + "type": "tag", 5534 + "class": "CONTEXT", 5535 + "explicit": false, 5536 + "content": [ 5537 + { 5538 + "name": "", 5539 + "type": { 5540 + "name": "RecipientKeyIdentifier", 5541 + "type": "defined" 5542 + } 5543 + } 5544 + ] 5545 + } 5546 + ] 5547 + } 5548 + }, 5549 + "RecipientKeyIdentifier": { 5550 + "name": "RecipientKeyIdentifier", 5551 + "type": { 5552 + "name": "SEQUENCE", 5553 + "type": "builtin", 5554 + "content": [ 5555 + { 5556 + "id": "subjectKeyIdentifier", 5557 + "name": "SubjectKeyIdentifier", 5558 + "type": "defined" 5559 + }, 5560 + { 5561 + "id": "date", 5562 + "name": "GeneralizedTime", 5563 + "type": "builtin", 5564 + "optional": true 5565 + }, 5566 + { 5567 + "id": "other", 5568 + "name": "OtherKeyAttribute", 5569 + "type": "defined", 5570 + "optional": true 5571 + } 5572 + ] 5573 + } 5574 + }, 5575 + "SubjectKeyIdentifier": { 5576 + "name": "SubjectKeyIdentifier", 5577 + "type": { 5578 + "name": "OCTET STRING", 5579 + "type": "builtin" 5580 + } 5581 + }, 5582 + "KEKRecipientInfo": { 5583 + "name": "KEKRecipientInfo", 5584 + "type": { 5585 + "name": "SEQUENCE", 5586 + "type": "builtin", 5587 + "content": [ 5588 + { 5589 + "id": "version", 5590 + "name": "CMSVersion", 5591 + "type": "defined" 5592 + }, 5593 + { 5594 + "id": "kekid", 5595 + "name": "KEKIdentifier", 5596 + "type": "defined" 5597 + }, 5598 + { 5599 + "id": "keyEncryptionAlgorithm", 5600 + "name": "KeyEncryptionAlgorithmIdentifier", 5601 + "type": "defined" 5602 + }, 5603 + { 5604 + "id": "encryptedKey", 5605 + "name": "EncryptedKey", 5606 + "type": "defined" 5607 + } 5608 + ] 5609 + } 5610 + }, 5611 + "KEKIdentifier": { 5612 + "name": "KEKIdentifier", 5613 + "type": { 5614 + "name": "SEQUENCE", 5615 + "type": "builtin", 5616 + "content": [ 5617 + { 5618 + "id": "keyIdentifier", 5619 + "name": "OCTET STRING", 5620 + "type": "builtin" 5621 + }, 5622 + { 5623 + "id": "date", 5624 + "name": "GeneralizedTime", 5625 + "type": "builtin", 5626 + "optional": true 5627 + }, 5628 + { 5629 + "id": "other", 5630 + "name": "OtherKeyAttribute", 5631 + "type": "defined", 5632 + "optional": true 5633 + } 5634 + ] 5635 + } 5636 + }, 5637 + "PasswordRecipientInfo": { 5638 + "name": "PasswordRecipientInfo", 5639 + "type": { 5640 + "name": "SEQUENCE", 5641 + "type": "builtin", 5642 + "content": [ 5643 + { 5644 + "id": "version", 5645 + "name": "CMSVersion", 5646 + "type": "defined" 5647 + }, 5648 + { 5649 + "id": "keyDerivationAlgorithm", 5650 + "name": "[0]", 5651 + "type": "tag", 5652 + "class": "CONTEXT", 5653 + "explicit": false, 5654 + "content": [ 5655 + { 5656 + "name": "", 5657 + "type": { 5658 + "name": "KeyDerivationAlgorithmIdentifier", 5659 + "type": "defined" 5660 + } 5661 + } 5662 + ], 5663 + "optional": true 5664 + }, 5665 + { 5666 + "id": "keyEncryptionAlgorithm", 5667 + "name": "KeyEncryptionAlgorithmIdentifier", 5668 + "type": "defined" 5669 + }, 5670 + { 5671 + "id": "encryptedKey", 5672 + "name": "EncryptedKey", 5673 + "type": "defined" 5674 + } 5675 + ] 5676 + } 5677 + }, 5678 + "OtherRecipientInfo": { 5679 + "name": "OtherRecipientInfo", 5680 + "type": { 5681 + "name": "SEQUENCE", 5682 + "type": "builtin", 5683 + "content": [ 5684 + { 5685 + "id": "oriType", 5686 + "name": "OBJECT IDENTIFIER", 5687 + "type": "builtin" 5688 + }, 5689 + { 5690 + "id": "oriValue", 5691 + "name": "ANY", 5692 + "type": "builtin", 5693 + "definedBy": "oriType" 5694 + } 5695 + ] 5696 + } 5697 + }, 5698 + "DigestedData": { 5699 + "name": "DigestedData", 5700 + "type": { 5701 + "name": "SEQUENCE", 5702 + "type": "builtin", 5703 + "content": [ 5704 + { 5705 + "id": "version", 5706 + "name": "CMSVersion", 5707 + "type": "defined" 5708 + }, 5709 + { 5710 + "id": "digestAlgorithm", 5711 + "name": "DigestAlgorithmIdentifier", 5712 + "type": "defined" 5713 + }, 5714 + { 5715 + "id": "encapContentInfo", 5716 + "name": "EncapsulatedContentInfo", 5717 + "type": "defined" 5718 + }, 5719 + { 5720 + "id": "digest", 5721 + "name": "Digest", 5722 + "type": "defined" 5723 + } 5724 + ] 5725 + } 5726 + }, 5727 + "Digest": { 5728 + "name": "Digest", 5729 + "type": { 5730 + "name": "OCTET STRING", 5731 + "type": "builtin" 5732 + } 5733 + }, 5734 + "EncryptedData": { 5735 + "name": "EncryptedData", 5736 + "type": { 5737 + "name": "SEQUENCE", 5738 + "type": "builtin", 5739 + "content": [ 5740 + { 5741 + "id": "version", 5742 + "name": "CMSVersion", 5743 + "type": "defined" 5744 + }, 5745 + { 5746 + "id": "encryptedContentInfo", 5747 + "name": "EncryptedContentInfo", 5748 + "type": "defined" 5749 + }, 5750 + { 5751 + "id": "unprotectedAttrs", 5752 + "name": "[1]", 5753 + "type": "tag", 5754 + "class": "CONTEXT", 5755 + "explicit": false, 5756 + "content": [ 5757 + { 5758 + "name": "", 5759 + "type": { 5760 + "name": "UnprotectedAttributes", 5761 + "type": "defined" 5762 + } 5763 + } 5764 + ], 5765 + "optional": true 5766 + } 5767 + ] 5768 + } 5769 + }, 5770 + "AuthenticatedData": { 5771 + "name": "AuthenticatedData", 5772 + "type": { 5773 + "name": "SEQUENCE", 5774 + "type": "builtin", 5775 + "content": [ 5776 + { 5777 + "id": "version", 5778 + "name": "CMSVersion", 5779 + "type": "defined" 5780 + }, 5781 + { 5782 + "id": "originatorInfo", 5783 + "name": "[0]", 5784 + "type": "tag", 5785 + "class": "CONTEXT", 5786 + "explicit": false, 5787 + "content": [ 5788 + { 5789 + "name": "", 5790 + "type": { 5791 + "name": "OriginatorInfo", 5792 + "type": "defined" 5793 + } 5794 + } 5795 + ], 5796 + "optional": true 5797 + }, 5798 + { 5799 + "id": "recipientInfos", 5800 + "name": "RecipientInfos", 5801 + "type": "defined" 5802 + }, 5803 + { 5804 + "id": "macAlgorithm", 5805 + "name": "MessageAuthenticationCodeAlgorithm", 5806 + "type": "defined" 5807 + }, 5808 + { 5809 + "id": "digestAlgorithm", 5810 + "name": "[1]", 5811 + "type": "tag", 5812 + "class": "CONTEXT", 5813 + "explicit": false, 5814 + "content": [ 5815 + { 5816 + "name": "", 5817 + "type": { 5818 + "name": "DigestAlgorithmIdentifier", 5819 + "type": "defined" 5820 + } 5821 + } 5822 + ], 5823 + "optional": true 5824 + }, 5825 + { 5826 + "id": "encapContentInfo", 5827 + "name": "EncapsulatedContentInfo", 5828 + "type": "defined" 5829 + }, 5830 + { 5831 + "id": "authAttrs", 5832 + "name": "[2]", 5833 + "type": "tag", 5834 + "class": "CONTEXT", 5835 + "explicit": false, 5836 + "content": [ 5837 + { 5838 + "name": "", 5839 + "type": { 5840 + "name": "AuthAttributes", 5841 + "type": "defined" 5842 + } 5843 + } 5844 + ], 5845 + "optional": true 5846 + }, 5847 + { 5848 + "id": "mac", 5849 + "name": "MessageAuthenticationCode", 5850 + "type": "defined" 5851 + }, 5852 + { 5853 + "id": "unauthAttrs", 5854 + "name": "[3]", 5855 + "type": "tag", 5856 + "class": "CONTEXT", 5857 + "explicit": false, 5858 + "content": [ 5859 + { 5860 + "name": "", 5861 + "type": { 5862 + "name": "UnauthAttributes", 5863 + "type": "defined" 5864 + } 5865 + } 5866 + ], 5867 + "optional": true 5868 + } 5869 + ] 5870 + } 5871 + }, 5872 + "AuthAttributes": { 5873 + "name": "AuthAttributes", 5874 + "type": { 5875 + "name": "SET", 5876 + "type": "builtin", 5877 + "typeOf": 1, 5878 + "size": [ 5879 + 1, 5880 + "MAX" 5881 + ], 5882 + "content": [ 5883 + { 5884 + "name": "Attribute", 5885 + "type": "defined" 5886 + } 5887 + ] 5888 + } 5889 + }, 5890 + "UnauthAttributes": { 5891 + "name": "UnauthAttributes", 5892 + "type": { 5893 + "name": "SET", 5894 + "type": "builtin", 5895 + "typeOf": 1, 5896 + "size": [ 5897 + 1, 5898 + "MAX" 5899 + ], 5900 + "content": [ 5901 + { 5902 + "name": "Attribute", 5903 + "type": "defined" 5904 + } 5905 + ] 5906 + } 5907 + }, 5908 + "MessageAuthenticationCode": { 5909 + "name": "MessageAuthenticationCode", 5910 + "type": { 5911 + "name": "OCTET STRING", 5912 + "type": "builtin" 5913 + } 5914 + }, 5915 + "DigestAlgorithmIdentifier": { 5916 + "name": "DigestAlgorithmIdentifier", 5917 + "type": { 5918 + "name": "AlgorithmIdentifier", 5919 + "type": "defined" 5920 + } 5921 + }, 5922 + "SignatureAlgorithmIdentifier": { 5923 + "name": "SignatureAlgorithmIdentifier", 5924 + "type": { 5925 + "name": "AlgorithmIdentifier", 5926 + "type": "defined" 5927 + } 5928 + }, 5929 + "KeyEncryptionAlgorithmIdentifier": { 5930 + "name": "KeyEncryptionAlgorithmIdentifier", 5931 + "type": { 5932 + "name": "AlgorithmIdentifier", 5933 + "type": "defined" 5934 + } 5935 + }, 5936 + "ContentEncryptionAlgorithmIdentifier": { 5937 + "name": "ContentEncryptionAlgorithmIdentifier", 5938 + "type": { 5939 + "name": "AlgorithmIdentifier", 5940 + "type": "defined" 5941 + } 5942 + }, 5943 + "MessageAuthenticationCodeAlgorithm": { 5944 + "name": "MessageAuthenticationCodeAlgorithm", 5945 + "type": { 5946 + "name": "AlgorithmIdentifier", 5947 + "type": "defined" 5948 + } 5949 + }, 5950 + "KeyDerivationAlgorithmIdentifier": { 5951 + "name": "KeyDerivationAlgorithmIdentifier", 5952 + "type": { 5953 + "name": "AlgorithmIdentifier", 5954 + "type": "defined" 5955 + } 5956 + }, 5957 + "CertificateRevocationLists": { 5958 + "name": "CertificateRevocationLists", 5959 + "type": { 5960 + "name": "SET", 5961 + "type": "builtin", 5962 + "typeOf": 1, 5963 + "content": [ 5964 + { 5965 + "name": "CertificateList", 5966 + "type": "defined" 5967 + } 5968 + ] 5969 + } 5970 + }, 5971 + "CertificateChoices": { 5972 + "name": "CertificateChoices", 5973 + "type": { 5974 + "name": "CHOICE", 5975 + "type": "builtin", 5976 + "content": [ 5977 + { 5978 + "id": "certificate", 5979 + "name": "Certificate", 5980 + "type": "defined" 5981 + }, 5982 + { 5983 + "id": "extendedCertificate", 5984 + "name": "[0]", 5985 + "type": "tag", 5986 + "class": "CONTEXT", 5987 + "explicit": false, 5988 + "content": [ 5989 + { 5990 + "name": "", 5991 + "type": { 5992 + "name": "ExtendedCertificate", 5993 + "type": "defined" 5994 + } 5995 + } 5996 + ] 5997 + }, 5998 + { 5999 + "id": "v1AttrCert", 6000 + "name": "[1]", 6001 + "type": "tag", 6002 + "class": "CONTEXT", 6003 + "explicit": false, 6004 + "content": [ 6005 + { 6006 + "name": "", 6007 + "type": { 6008 + "name": "AttributeCertificateV1", 6009 + "type": "defined" 6010 + } 6011 + } 6012 + ] 6013 + }, 6014 + { 6015 + "id": "v2AttrCert", 6016 + "name": "[2]", 6017 + "type": "tag", 6018 + "class": "CONTEXT", 6019 + "explicit": false, 6020 + "content": [ 6021 + { 6022 + "name": "", 6023 + "type": { 6024 + "name": "AttributeCertificateV2", 6025 + "type": "defined" 6026 + } 6027 + } 6028 + ] 6029 + } 6030 + ] 6031 + } 6032 + }, 6033 + "AttributeCertificateV2": { 6034 + "name": "AttributeCertificateV2", 6035 + "type": { 6036 + "name": "AttributeCertificate", 6037 + "type": "defined" 6038 + } 6039 + }, 6040 + "CertificateSet": { 6041 + "name": "CertificateSet", 6042 + "type": { 6043 + "name": "SET", 6044 + "type": "builtin", 6045 + "typeOf": 1, 6046 + "content": [ 6047 + { 6048 + "name": "CertificateChoices", 6049 + "type": "defined" 6050 + } 6051 + ] 6052 + } 6053 + }, 6054 + "IssuerAndSerialNumber": { 6055 + "name": "IssuerAndSerialNumber", 6056 + "type": { 6057 + "name": "SEQUENCE", 6058 + "type": "builtin", 6059 + "content": [ 6060 + { 6061 + "id": "issuer", 6062 + "name": "Name", 6063 + "type": "defined" 6064 + }, 6065 + { 6066 + "id": "serialNumber", 6067 + "name": "CertificateSerialNumber", 6068 + "type": "defined" 6069 + } 6070 + ] 6071 + } 6072 + }, 6073 + "CMSVersion": { 6074 + "name": "CMSVersion", 6075 + "type": { 6076 + "name": "INTEGER", 6077 + "type": "builtin", 6078 + "content": { 6079 + "v0": 0, 6080 + "v1": 1, 6081 + "v2": 2, 6082 + "v3": 3, 6083 + "v4": 4 6084 + } 6085 + } 6086 + }, 6087 + "UserKeyingMaterial": { 6088 + "name": "UserKeyingMaterial", 6089 + "type": { 6090 + "name": "OCTET STRING", 6091 + "type": "builtin" 6092 + } 6093 + }, 6094 + "OtherKeyAttribute": { 6095 + "name": "OtherKeyAttribute", 6096 + "type": { 6097 + "name": "SEQUENCE", 6098 + "type": "builtin", 6099 + "content": [ 6100 + { 6101 + "id": "keyAttrId", 6102 + "name": "OBJECT IDENTIFIER", 6103 + "type": "builtin" 6104 + }, 6105 + { 6106 + "id": "keyAttr", 6107 + "name": "ANY", 6108 + "type": "builtin", 6109 + "definedBy": "keyAttrId", 6110 + "optional": true 6111 + } 6112 + ] 6113 + } 6114 + }, 6115 + "MessageDigest": { 6116 + "name": "MessageDigest", 6117 + "type": { 6118 + "name": "OCTET STRING", 6119 + "type": "builtin" 6120 + } 6121 + }, 6122 + "SigningTime": { 6123 + "name": "SigningTime", 6124 + "type": { 6125 + "name": "Time", 6126 + "type": "defined" 6127 + } 6128 + }, 6129 + "Time": { 6130 + "name": "Time", 6131 + "type": { 6132 + "name": "CHOICE", 6133 + "type": "builtin", 6134 + "content": [ 6135 + { 6136 + "id": "utcTime", 6137 + "name": "UTCTime", 6138 + "type": "builtin" 6139 + }, 6140 + { 6141 + "id": "generalTime", 6142 + "name": "GeneralizedTime", 6143 + "type": "builtin" 6144 + } 6145 + ] 6146 + } 6147 + }, 6148 + "Countersignature": { 6149 + "name": "Countersignature", 6150 + "type": { 6151 + "name": "SignerInfo", 6152 + "type": "defined" 6153 + } 6154 + }, 6155 + "ExtendedCertificateOrCertificate": { 6156 + "name": "ExtendedCertificateOrCertificate", 6157 + "type": { 6158 + "name": "CHOICE", 6159 + "type": "builtin", 6160 + "content": [ 6161 + { 6162 + "id": "certificate", 6163 + "name": "Certificate", 6164 + "type": "defined" 6165 + }, 6166 + { 6167 + "id": "extendedCertificate", 6168 + "name": "[0]", 6169 + "type": "tag", 6170 + "class": "CONTEXT", 6171 + "explicit": false, 6172 + "content": [ 6173 + { 6174 + "name": "", 6175 + "type": { 6176 + "name": "ExtendedCertificate", 6177 + "type": "defined" 6178 + } 6179 + } 6180 + ] 6181 + } 6182 + ] 6183 + } 6184 + }, 6185 + "ExtendedCertificate": { 6186 + "name": "ExtendedCertificate", 6187 + "type": { 6188 + "name": "SEQUENCE", 6189 + "type": "builtin", 6190 + "content": [ 6191 + { 6192 + "id": "extendedCertificateInfo", 6193 + "name": "ExtendedCertificateInfo", 6194 + "type": "defined" 6195 + }, 6196 + { 6197 + "id": "signatureAlgorithm", 6198 + "name": "SignatureAlgorithmIdentifier", 6199 + "type": "defined" 6200 + }, 6201 + { 6202 + "id": "signature", 6203 + "name": "Signature", 6204 + "type": "defined" 6205 + } 6206 + ] 6207 + } 6208 + }, 6209 + "ExtendedCertificateInfo": { 6210 + "name": "ExtendedCertificateInfo", 6211 + "type": { 6212 + "name": "SEQUENCE", 6213 + "type": "builtin", 6214 + "content": [ 6215 + { 6216 + "id": "version", 6217 + "name": "CMSVersion", 6218 + "type": "defined" 6219 + }, 6220 + { 6221 + "id": "certificate", 6222 + "name": "Certificate", 6223 + "type": "defined" 6224 + }, 6225 + { 6226 + "id": "attributes", 6227 + "name": "UnauthAttributes", 6228 + "type": "defined" 6229 + } 6230 + ] 6231 + } 6232 + }, 6233 + "Signature": { 6234 + "name": "Signature", 6235 + "type": { 6236 + "name": "BIT STRING", 6237 + "type": "builtin" 6238 + } 6239 + } 6240 + } 6241 + }, 6242 + "1.2.840.113549.1.9.16.0.15": { 6243 + "name": "AttributeCertificateVersion1", 6244 + "oid": "1.2.840.113549.1.9.16.0.15", 6245 + "source": "rfc3369.txt", 6246 + "tagDefault": "IMPLICIT", 6247 + "imports": { 6248 + "1.3.6.1.5.5.7.0.18": { 6249 + "name": "PKIX1Explicit88", 6250 + "oid": "1.3.6.1.5.5.7.0.18", 6251 + "types": [ 6252 + "AlgorithmIdentifier", 6253 + "Attribute", 6254 + "CertificateSerialNumber", 6255 + "Extensions", 6256 + "UniqueIdentifier" 6257 + ] 6258 + }, 6259 + "1.3.6.1.5.5.7.0.19": { 6260 + "name": "PKIX1Implicit88", 6261 + "oid": "1.3.6.1.5.5.7.0.19", 6262 + "types": [ 6263 + "GeneralNames" 6264 + ] 6265 + }, 6266 + "1.3.6.1.5.5.7.0.12": { 6267 + "name": "PKIXAttributeCertificate", 6268 + "oid": "1.3.6.1.5.5.7.0.12", 6269 + "types": [ 6270 + "AttCertValidityPeriod", 6271 + "IssuerSerial" 6272 + ] 6273 + } 6274 + }, 6275 + "values": {}, 6276 + "types": { 6277 + "AttributeCertificateV1": { 6278 + "name": "AttributeCertificateV1", 6279 + "type": { 6280 + "name": "SEQUENCE", 6281 + "type": "builtin", 6282 + "content": [ 6283 + { 6284 + "id": "acInfo", 6285 + "name": "AttributeCertificateInfoV1", 6286 + "type": "defined" 6287 + }, 6288 + { 6289 + "id": "signatureAlgorithm", 6290 + "name": "AlgorithmIdentifier", 6291 + "type": "defined" 6292 + }, 6293 + { 6294 + "id": "signature", 6295 + "name": "BIT STRING", 6296 + "type": "builtin" 6297 + } 6298 + ] 6299 + } 6300 + }, 6301 + "AttributeCertificateInfoV1": { 6302 + "name": "AttributeCertificateInfoV1", 6303 + "type": { 6304 + "name": "SEQUENCE", 6305 + "type": "builtin", 6306 + "content": [ 6307 + { 6308 + "id": "version", 6309 + "name": "AttCertVersionV1", 6310 + "type": "defined", 6311 + "default": "v1" 6312 + }, 6313 + { 6314 + "id": "subject", 6315 + "name": "CHOICE", 6316 + "type": "builtin", 6317 + "content": [ 6318 + { 6319 + "id": "baseCertificateID", 6320 + "name": "[0]", 6321 + "type": "tag", 6322 + "class": "CONTEXT", 6323 + "explicit": false, 6324 + "content": [ 6325 + { 6326 + "name": "", 6327 + "type": { 6328 + "name": "IssuerSerial", 6329 + "type": "defined" 6330 + } 6331 + } 6332 + ] 6333 + }, 6334 + { 6335 + "id": "subjectName", 6336 + "name": "[1]", 6337 + "type": "tag", 6338 + "class": "CONTEXT", 6339 + "explicit": false, 6340 + "content": [ 6341 + { 6342 + "name": "", 6343 + "type": { 6344 + "name": "GeneralNames", 6345 + "type": "defined" 6346 + } 6347 + } 6348 + ] 6349 + } 6350 + ] 6351 + }, 6352 + { 6353 + "id": "issuer", 6354 + "name": "GeneralNames", 6355 + "type": "defined" 6356 + }, 6357 + { 6358 + "id": "signature", 6359 + "name": "AlgorithmIdentifier", 6360 + "type": "defined" 6361 + }, 6362 + { 6363 + "id": "serialNumber", 6364 + "name": "CertificateSerialNumber", 6365 + "type": "defined" 6366 + }, 6367 + { 6368 + "id": "attCertValidityPeriod", 6369 + "name": "AttCertValidityPeriod", 6370 + "type": "defined" 6371 + }, 6372 + { 6373 + "id": "attributes", 6374 + "name": "SEQUENCE", 6375 + "type": "builtin", 6376 + "typeOf": 1, 6377 + "content": [ 6378 + { 6379 + "name": "Attribute", 6380 + "type": "defined" 6381 + } 6382 + ] 6383 + }, 6384 + { 6385 + "id": "issuerUniqueID", 6386 + "name": "UniqueIdentifier", 6387 + "type": "defined", 6388 + "optional": true 6389 + }, 6390 + { 6391 + "id": "extensions", 6392 + "name": "Extensions", 6393 + "type": "defined", 6394 + "optional": true 6395 + } 6396 + ] 6397 + } 6398 + }, 6399 + "AttCertVersionV1": { 6400 + "name": "AttCertVersionV1", 6401 + "type": { 6402 + "name": "INTEGER", 6403 + "type": "builtin", 6404 + "content": { 6405 + "v1": 0 6406 + } 6407 + } 6408 + } 6409 + } 6410 + }, 6411 + "1.3.6.1.5.5.7.0.13": { 6412 + "name": "PKIXTSP", 6413 + "oid": "1.3.6.1.5.5.7.0.13", 6414 + "source": "rfc3161.txt", 6415 + "tagDefault": "IMPLICIT", 6416 + "imports": { 6417 + "1.3.6.1.5.5.7.0.1": { 6418 + "name": "PKIX1Explicit88", 6419 + "oid": "1.3.6.1.5.5.7.0.1", 6420 + "types": [ 6421 + "Extensions", 6422 + "AlgorithmIdentifier" 6423 + ] 6424 + }, 6425 + "1.3.6.1.5.5.7.0.2": { 6426 + "name": "PKIX1Implicit88", 6427 + "oid": "1.3.6.1.5.5.7.0.2", 6428 + "types": [ 6429 + "GeneralName" 6430 + ] 6431 + }, 6432 + "1.2.840.113549.1.9.16.0.1": { 6433 + "name": "CryptographicMessageSyntax", 6434 + "oid": "1.2.840.113549.1.9.16.0.1", 6435 + "types": [ 6436 + "ContentInfo" 6437 + ] 6438 + }, 6439 + "1.3.6.1.5.5.7.0.9": { 6440 + "name": "PKIXCMP", 6441 + "oid": "1.3.6.1.5.5.7.0.9", 6442 + "types": [ 6443 + "PKIFreeText" 6444 + ] 6445 + } 6446 + }, 6447 + "values": { 6448 + "id-ct-TSTInfo": { 6449 + "name": "id-ct-TSTInfo", 6450 + "type": { 6451 + "name": "OBJECT IDENTIFIER", 6452 + "type": "builtin" 6453 + }, 6454 + "value": "1.2.840.113549.1.9.16.1.4" 6455 + } 6456 + }, 6457 + "types": { 6458 + "TimeStampReq": { 6459 + "name": "TimeStampReq", 6460 + "type": { 6461 + "name": "SEQUENCE", 6462 + "type": "builtin", 6463 + "content": [ 6464 + { 6465 + "id": "version", 6466 + "name": "INTEGER", 6467 + "type": "builtin", 6468 + "content": { 6469 + "v1": 1 6470 + } 6471 + }, 6472 + { 6473 + "id": "messageImprint", 6474 + "name": "MessageImprint", 6475 + "type": "defined" 6476 + }, 6477 + { 6478 + "id": "reqPolicy", 6479 + "name": "TSAPolicyId", 6480 + "type": "defined", 6481 + "optional": true 6482 + }, 6483 + { 6484 + "id": "nonce", 6485 + "name": "INTEGER", 6486 + "type": "builtin", 6487 + "optional": true 6488 + }, 6489 + { 6490 + "id": "certReq", 6491 + "name": "BOOLEAN", 6492 + "type": "builtin", 6493 + "default": false 6494 + }, 6495 + { 6496 + "id": "extensions", 6497 + "name": "[0]", 6498 + "type": "tag", 6499 + "class": "CONTEXT", 6500 + "explicit": false, 6501 + "content": [ 6502 + { 6503 + "name": "", 6504 + "type": { 6505 + "name": "Extensions", 6506 + "type": "defined" 6507 + } 6508 + } 6509 + ], 6510 + "optional": true 6511 + } 6512 + ] 6513 + } 6514 + }, 6515 + "MessageImprint": { 6516 + "name": "MessageImprint", 6517 + "type": { 6518 + "name": "SEQUENCE", 6519 + "type": "builtin", 6520 + "content": [ 6521 + { 6522 + "id": "hashAlgorithm", 6523 + "name": "AlgorithmIdentifier", 6524 + "type": "defined" 6525 + }, 6526 + { 6527 + "id": "hashedMessage", 6528 + "name": "OCTET STRING", 6529 + "type": "builtin" 6530 + } 6531 + ] 6532 + } 6533 + }, 6534 + "TSAPolicyId": { 6535 + "name": "TSAPolicyId", 6536 + "type": { 6537 + "name": "OBJECT IDENTIFIER", 6538 + "type": "builtin" 6539 + } 6540 + }, 6541 + "TimeStampResp": { 6542 + "name": "TimeStampResp", 6543 + "type": { 6544 + "name": "SEQUENCE", 6545 + "type": "builtin", 6546 + "content": [ 6547 + { 6548 + "id": "status", 6549 + "name": "PKIStatusInfo", 6550 + "type": "defined" 6551 + }, 6552 + { 6553 + "id": "timeStampToken", 6554 + "name": "TimeStampToken", 6555 + "type": "defined", 6556 + "optional": true 6557 + } 6558 + ] 6559 + } 6560 + }, 6561 + "PKIStatusInfo": { 6562 + "name": "PKIStatusInfo", 6563 + "type": { 6564 + "name": "SEQUENCE", 6565 + "type": "builtin", 6566 + "content": [ 6567 + { 6568 + "id": "status", 6569 + "name": "PKIStatus", 6570 + "type": "defined" 6571 + }, 6572 + { 6573 + "id": "statusString", 6574 + "name": "PKIFreeText", 6575 + "type": "defined", 6576 + "optional": true 6577 + }, 6578 + { 6579 + "id": "failInfo", 6580 + "name": "PKIFailureInfo", 6581 + "type": "defined", 6582 + "optional": true 6583 + } 6584 + ] 6585 + } 6586 + }, 6587 + "PKIStatus": { 6588 + "name": "PKIStatus", 6589 + "type": { 6590 + "name": "INTEGER", 6591 + "type": "builtin", 6592 + "content": { 6593 + "granted": 0, 6594 + "grantedWithMods": 1, 6595 + "rejection": 2, 6596 + "waiting": 3, 6597 + "revocationWarning": 4, 6598 + "revocationNotification": 5 6599 + } 6600 + } 6601 + }, 6602 + "PKIFailureInfo": { 6603 + "name": "PKIFailureInfo", 6604 + "type": { 6605 + "name": "BIT STRING", 6606 + "type": "builtin", 6607 + "content": { 6608 + "badAlg": 0, 6609 + "badRequest": 2, 6610 + "badDataFormat": 5, 6611 + "timeNotAvailable": 14, 6612 + "unacceptedPolicy": 15, 6613 + "unacceptedExtension": 16, 6614 + "addInfoNotAvailable": 17, 6615 + "systemFailure": 25 6616 + } 6617 + } 6618 + }, 6619 + "TimeStampToken": { 6620 + "name": "TimeStampToken", 6621 + "type": { 6622 + "name": "ContentInfo", 6623 + "type": "defined" 6624 + } 6625 + }, 6626 + "TSTInfo": { 6627 + "name": "TSTInfo", 6628 + "type": { 6629 + "name": "SEQUENCE", 6630 + "type": "builtin", 6631 + "content": [ 6632 + { 6633 + "id": "version", 6634 + "name": "INTEGER", 6635 + "type": "builtin", 6636 + "content": { 6637 + "v1": 1 6638 + } 6639 + }, 6640 + { 6641 + "id": "policy", 6642 + "name": "TSAPolicyId", 6643 + "type": "defined" 6644 + }, 6645 + { 6646 + "id": "messageImprint", 6647 + "name": "MessageImprint", 6648 + "type": "defined" 6649 + }, 6650 + { 6651 + "id": "serialNumber", 6652 + "name": "INTEGER", 6653 + "type": "builtin" 6654 + }, 6655 + { 6656 + "id": "genTime", 6657 + "name": "GeneralizedTime", 6658 + "type": "builtin" 6659 + }, 6660 + { 6661 + "id": "accuracy", 6662 + "name": "Accuracy", 6663 + "type": "defined", 6664 + "optional": true 6665 + }, 6666 + { 6667 + "id": "ordering", 6668 + "name": "BOOLEAN", 6669 + "type": "builtin", 6670 + "default": false 6671 + }, 6672 + { 6673 + "id": "nonce", 6674 + "name": "INTEGER", 6675 + "type": "builtin", 6676 + "optional": true 6677 + }, 6678 + { 6679 + "id": "tsa", 6680 + "name": "[0]", 6681 + "type": "tag", 6682 + "class": "CONTEXT", 6683 + "explicit": false, 6684 + "content": [ 6685 + { 6686 + "name": "", 6687 + "type": { 6688 + "name": "GeneralName", 6689 + "type": "defined" 6690 + } 6691 + } 6692 + ], 6693 + "optional": true 6694 + }, 6695 + { 6696 + "id": "extensions", 6697 + "name": "[1]", 6698 + "type": "tag", 6699 + "class": "CONTEXT", 6700 + "explicit": false, 6701 + "content": [ 6702 + { 6703 + "name": "", 6704 + "type": { 6705 + "name": "Extensions", 6706 + "type": "defined" 6707 + } 6708 + } 6709 + ], 6710 + "optional": true 6711 + } 6712 + ] 6713 + } 6714 + }, 6715 + "Accuracy": { 6716 + "name": "Accuracy", 6717 + "type": { 6718 + "name": "SEQUENCE", 6719 + "type": "builtin", 6720 + "content": [ 6721 + { 6722 + "id": "seconds", 6723 + "name": "INTEGER", 6724 + "type": "builtin", 6725 + "optional": true 6726 + }, 6727 + { 6728 + "id": "millis", 6729 + "name": "[0]", 6730 + "type": "tag", 6731 + "class": "CONTEXT", 6732 + "explicit": false, 6733 + "content": [ 6734 + { 6735 + "name": "", 6736 + "type": { 6737 + "name": "INTEGER", 6738 + "type": "builtin", 6739 + "range": [ 6740 + 1, 6741 + 999 6742 + ] 6743 + } 6744 + } 6745 + ], 6746 + "optional": true 6747 + }, 6748 + { 6749 + "id": "micros", 6750 + "name": "[1]", 6751 + "type": "tag", 6752 + "class": "CONTEXT", 6753 + "explicit": false, 6754 + "content": [ 6755 + { 6756 + "name": "", 6757 + "type": { 6758 + "name": "INTEGER", 6759 + "type": "builtin", 6760 + "range": [ 6761 + 1, 6762 + 999 6763 + ] 6764 + } 6765 + } 6766 + ], 6767 + "optional": true 6768 + } 6769 + ] 6770 + } 6771 + } 6772 + } 6773 + }, 6774 + "1.2.840.113549.1.10.1.1": { 6775 + "name": "PKCS-10", 6776 + "oid": "1.2.840.113549.1.10.1.1", 6777 + "source": "rfc2986.txt", 6778 + "tagDefault": "IMPLICIT", 6779 + "imports": { 6780 + "2.5.1.0.3": { 6781 + "name": "AuthenticationFramework", 6782 + "oid": "2.5.1.0.3", 6783 + "types": [ 6784 + "ALGORITHM" 6785 + ] 6786 + } 6787 + }, 6788 + "values": {}, 6789 + "types": { 6790 + "CertificationRequestInfo": { 6791 + "name": "CertificationRequestInfo", 6792 + "type": { 6793 + "name": "SEQUENCE", 6794 + "type": "builtin", 6795 + "content": [ 6796 + { 6797 + "id": "version", 6798 + "name": "INTEGER", 6799 + "type": "builtin", 6800 + "content": { 6801 + "v1": 0 6802 + } 6803 + }, 6804 + { 6805 + "id": "subject", 6806 + "name": "Name", 6807 + "type": "defined" 6808 + }, 6809 + { 6810 + "id": "subjectPKInfo", 6811 + "name": "SubjectPublicKeyInfo", 6812 + "type": "defined" 6813 + }, 6814 + { 6815 + "id": "attributes", 6816 + "name": "[0]", 6817 + "type": "tag", 6818 + "class": "CONTEXT", 6819 + "explicit": false, 6820 + "content": [ 6821 + { 6822 + "name": "", 6823 + "type": { 6824 + "name": "Attributes", 6825 + "type": "defined" 6826 + } 6827 + } 6828 + ] 6829 + } 6830 + ] 6831 + } 6832 + }, 6833 + "SubjectPublicKeyInfo": { 6834 + "name": "SubjectPublicKeyInfo", 6835 + "type": { 6836 + "name": "SEQUENCE", 6837 + "type": "builtin", 6838 + "content": [ 6839 + { 6840 + "id": "algorithm", 6841 + "name": "AlgorithmIdentifier", 6842 + "type": "defined" 6843 + }, 6844 + { 6845 + "id": "subjectPublicKey", 6846 + "name": "BIT STRING", 6847 + "type": "builtin" 6848 + } 6849 + ] 6850 + } 6851 + }, 6852 + "Attributes": { 6853 + "name": "Attributes", 6854 + "type": { 6855 + "name": "SET", 6856 + "type": "builtin", 6857 + "typeOf": 1, 6858 + "content": [ 6859 + { 6860 + "name": "Attribute", 6861 + "type": "defined" 6862 + } 6863 + ] 6864 + } 6865 + }, 6866 + "Attribute": { 6867 + "name": "Attribute", 6868 + "type": { 6869 + "name": "SEQUENCE", 6870 + "type": "builtin", 6871 + "content": [ 6872 + { 6873 + "id": "type", 6874 + "name": "OBJECT IDENTIFIER", 6875 + "type": "builtin" 6876 + }, 6877 + { 6878 + "id": "values", 6879 + "name": "SET", 6880 + "type": "builtin", 6881 + "typeOf": 1, 6882 + "size": [ 6883 + 1, 6884 + "MAX" 6885 + ], 6886 + "content": [ 6887 + { 6888 + "name": "ANY", 6889 + "type": "builtin" 6890 + } 6891 + ] 6892 + } 6893 + ] 6894 + } 6895 + }, 6896 + "CertificationRequest": { 6897 + "name": "CertificationRequest", 6898 + "type": { 6899 + "name": "SEQUENCE", 6900 + "type": "builtin", 6901 + "content": [ 6902 + { 6903 + "id": "certificationRequestInfo", 6904 + "name": "CertificationRequestInfo", 6905 + "type": "defined" 6906 + }, 6907 + { 6908 + "id": "signatureAlgorithm", 6909 + "name": "AlgorithmIdentifier", 6910 + "type": "defined" 6911 + }, 6912 + { 6913 + "id": "signature", 6914 + "name": "BIT STRING", 6915 + "type": "builtin" 6916 + } 6917 + ] 6918 + } 6919 + }, 6920 + "AlgorithmIdentifier": { 6921 + "name": "AlgorithmIdentifier", 6922 + "type": { 6923 + "name": "SEQUENCE", 6924 + "type": "builtin", 6925 + "content": [ 6926 + { 6927 + "id": "algorithm", 6928 + "name": "OBJECT IDENTIFIER", 6929 + "type": "builtin" 6930 + }, 6931 + { 6932 + "id": "parameters", 6933 + "name": "ANY", 6934 + "type": "builtin", 6935 + "optional": true 6936 + } 6937 + ] 6938 + } 6939 + } 6940 + } 6941 + }, 6942 + "1.3.6.1.5.5.7.0.36": { 6943 + "name": "PKIXCRMF-2005", 6944 + "oid": "1.3.6.1.5.5.7.0.36", 6945 + "source": "rfc4211.txt", 6946 + "tagDefault": "IMPLICIT", 6947 + "imports": { 6948 + "1.3.6.1.5.5.7.0.18": { 6949 + "name": "PKIX1Explicit88", 6950 + "oid": "1.3.6.1.5.5.7.0.18", 6951 + "types": [ 6952 + "Version", 6953 + "AlgorithmIdentifier", 6954 + "Name", 6955 + "Time", 6956 + "SubjectPublicKeyInfo", 6957 + "Extensions", 6958 + "UniqueIdentifier", 6959 + "Attribute" 6960 + ] 6961 + }, 6962 + "1.3.6.1.5.5.7.0.19": { 6963 + "name": "PKIX1Implicit88", 6964 + "oid": "1.3.6.1.5.5.7.0.19", 6965 + "types": [ 6966 + "GeneralName" 6967 + ] 6968 + }, 6969 + "1.2.840.113549.1.9.16.0.24": { 6970 + "name": "CryptographicMessageSyntax2004", 6971 + "oid": "1.2.840.113549.1.9.16.0.24", 6972 + "types": [ 6973 + "EnvelopedData" 6974 + ] 6975 + } 6976 + }, 6977 + "values": { 6978 + "id-pkix": { 6979 + "name": "id-pkix", 6980 + "type": { 6981 + "name": "OBJECT IDENTIFIER", 6982 + "type": "builtin" 6983 + }, 6984 + "value": "1.3.6.1.5.5.7" 6985 + }, 6986 + "id-pkip": { 6987 + "name": "id-pkip", 6988 + "type": { 6989 + "name": "OBJECT IDENTIFIER", 6990 + "type": "builtin" 6991 + }, 6992 + "value": "1.3.6.1.5.5.7.5" 6993 + }, 6994 + "id-smime": { 6995 + "name": "id-smime", 6996 + "type": { 6997 + "name": "OBJECT IDENTIFIER", 6998 + "type": "builtin" 6999 + }, 7000 + "value": "1.2.840.113549.1.9.16" 7001 + }, 7002 + "id-ct": { 7003 + "name": "id-ct", 7004 + "type": { 7005 + "name": "OBJECT IDENTIFIER", 7006 + "type": "builtin" 7007 + }, 7008 + "value": "1.2.840.113549.1.9.16.1" 7009 + }, 7010 + "id-regCtrl": { 7011 + "name": "id-regCtrl", 7012 + "type": { 7013 + "name": "OBJECT IDENTIFIER", 7014 + "type": "builtin" 7015 + }, 7016 + "value": "1.3.6.1.5.5.7.5.1" 7017 + }, 7018 + "id-regCtrl-regToken": { 7019 + "name": "id-regCtrl-regToken", 7020 + "type": { 7021 + "name": "OBJECT IDENTIFIER", 7022 + "type": "builtin" 7023 + }, 7024 + "value": "1.3.6.1.5.5.7.5.1.1" 7025 + }, 7026 + "id-regCtrl-authenticator": { 7027 + "name": "id-regCtrl-authenticator", 7028 + "type": { 7029 + "name": "OBJECT IDENTIFIER", 7030 + "type": "builtin" 7031 + }, 7032 + "value": "1.3.6.1.5.5.7.5.1.2" 7033 + }, 7034 + "id-regCtrl-pkiPublicationInfo": { 7035 + "name": "id-regCtrl-pkiPublicationInfo", 7036 + "type": { 7037 + "name": "OBJECT IDENTIFIER", 7038 + "type": "builtin" 7039 + }, 7040 + "value": "1.3.6.1.5.5.7.5.1.3" 7041 + }, 7042 + "id-regCtrl-pkiArchiveOptions": { 7043 + "name": "id-regCtrl-pkiArchiveOptions", 7044 + "type": { 7045 + "name": "OBJECT IDENTIFIER", 7046 + "type": "builtin" 7047 + }, 7048 + "value": "1.3.6.1.5.5.7.5.1.4" 7049 + }, 7050 + "id-regCtrl-oldCertID": { 7051 + "name": "id-regCtrl-oldCertID", 7052 + "type": { 7053 + "name": "OBJECT IDENTIFIER", 7054 + "type": "builtin" 7055 + }, 7056 + "value": "1.3.6.1.5.5.7.5.1.5" 7057 + }, 7058 + "id-regCtrl-protocolEncrKey": { 7059 + "name": "id-regCtrl-protocolEncrKey", 7060 + "type": { 7061 + "name": "OBJECT IDENTIFIER", 7062 + "type": "builtin" 7063 + }, 7064 + "value": "1.3.6.1.5.5.7.5.1.6" 7065 + }, 7066 + "id-regInfo": { 7067 + "name": "id-regInfo", 7068 + "type": { 7069 + "name": "OBJECT IDENTIFIER", 7070 + "type": "builtin" 7071 + }, 7072 + "value": "1.3.6.1.5.5.7.5.2" 7073 + }, 7074 + "id-regInfo-utf8Pairs": { 7075 + "name": "id-regInfo-utf8Pairs", 7076 + "type": { 7077 + "name": "OBJECT IDENTIFIER", 7078 + "type": "builtin" 7079 + }, 7080 + "value": "1.3.6.1.5.5.7.5.2.1" 7081 + }, 7082 + "id-regInfo-certReq": { 7083 + "name": "id-regInfo-certReq", 7084 + "type": { 7085 + "name": "OBJECT IDENTIFIER", 7086 + "type": "builtin" 7087 + }, 7088 + "value": "1.3.6.1.5.5.7.5.2.2" 7089 + }, 7090 + "id-ct-encKeyWithID": { 7091 + "name": "id-ct-encKeyWithID", 7092 + "type": { 7093 + "name": "OBJECT IDENTIFIER", 7094 + "type": "builtin" 7095 + }, 7096 + "value": "1.2.840.113549.1.9.16.1.21" 7097 + } 7098 + }, 7099 + "types": { 7100 + "CertReqMessages": { 7101 + "name": "CertReqMessages", 7102 + "type": { 7103 + "name": "SEQUENCE", 7104 + "type": "builtin", 7105 + "typeOf": 1, 7106 + "size": [ 7107 + 1, 7108 + "MAX" 7109 + ], 7110 + "content": [ 7111 + { 7112 + "name": "CertReqMsg", 7113 + "type": "defined" 7114 + } 7115 + ] 7116 + } 7117 + }, 7118 + "CertReqMsg": { 7119 + "name": "CertReqMsg", 7120 + "type": { 7121 + "name": "SEQUENCE", 7122 + "type": "builtin", 7123 + "content": [ 7124 + { 7125 + "id": "certReq", 7126 + "name": "CertRequest", 7127 + "type": "defined" 7128 + }, 7129 + { 7130 + "id": "popo", 7131 + "name": "ProofOfPossession", 7132 + "type": "defined", 7133 + "optional": true 7134 + }, 7135 + { 7136 + "id": "regInfo", 7137 + "name": "SEQUENCE", 7138 + "type": "builtin", 7139 + "typeOf": 1, 7140 + "size": [ 7141 + 1, 7142 + "MAX" 7143 + ], 7144 + "content": [ 7145 + { 7146 + "name": "AttributeTypeAndValue", 7147 + "type": "defined" 7148 + } 7149 + ], 7150 + "optional": true 7151 + } 7152 + ] 7153 + } 7154 + }, 7155 + "CertRequest": { 7156 + "name": "CertRequest", 7157 + "type": { 7158 + "name": "SEQUENCE", 7159 + "type": "builtin", 7160 + "content": [ 7161 + { 7162 + "id": "certReqId", 7163 + "name": "INTEGER", 7164 + "type": "builtin" 7165 + }, 7166 + { 7167 + "id": "certTemplate", 7168 + "name": "CertTemplate", 7169 + "type": "defined" 7170 + }, 7171 + { 7172 + "id": "controls", 7173 + "name": "Controls", 7174 + "type": "defined", 7175 + "optional": true 7176 + } 7177 + ] 7178 + } 7179 + }, 7180 + "CertTemplate": { 7181 + "name": "CertTemplate", 7182 + "type": { 7183 + "name": "SEQUENCE", 7184 + "type": "builtin", 7185 + "content": [ 7186 + { 7187 + "id": "version", 7188 + "name": "[0]", 7189 + "type": "tag", 7190 + "class": "CONTEXT", 7191 + "explicit": false, 7192 + "content": [ 7193 + { 7194 + "name": "", 7195 + "type": { 7196 + "name": "Version", 7197 + "type": "defined" 7198 + } 7199 + } 7200 + ], 7201 + "optional": true 7202 + }, 7203 + { 7204 + "id": "serialNumber", 7205 + "name": "[1]", 7206 + "type": "tag", 7207 + "class": "CONTEXT", 7208 + "explicit": false, 7209 + "content": [ 7210 + { 7211 + "name": "", 7212 + "type": { 7213 + "name": "INTEGER", 7214 + "type": "builtin" 7215 + } 7216 + } 7217 + ], 7218 + "optional": true 7219 + }, 7220 + { 7221 + "id": "signingAlg", 7222 + "name": "[2]", 7223 + "type": "tag", 7224 + "class": "CONTEXT", 7225 + "explicit": false, 7226 + "content": [ 7227 + { 7228 + "name": "", 7229 + "type": { 7230 + "name": "AlgorithmIdentifier", 7231 + "type": "defined" 7232 + } 7233 + } 7234 + ], 7235 + "optional": true 7236 + }, 7237 + { 7238 + "id": "issuer", 7239 + "name": "[3]", 7240 + "type": "tag", 7241 + "class": "CONTEXT", 7242 + "explicit": false, 7243 + "content": [ 7244 + { 7245 + "name": "", 7246 + "type": { 7247 + "name": "Name", 7248 + "type": "defined" 7249 + } 7250 + } 7251 + ], 7252 + "optional": true 7253 + }, 7254 + { 7255 + "id": "validity", 7256 + "name": "[4]", 7257 + "type": "tag", 7258 + "class": "CONTEXT", 7259 + "explicit": false, 7260 + "content": [ 7261 + { 7262 + "name": "", 7263 + "type": { 7264 + "name": "OptionalValidity", 7265 + "type": "defined" 7266 + } 7267 + } 7268 + ], 7269 + "optional": true 7270 + }, 7271 + { 7272 + "id": "subject", 7273 + "name": "[5]", 7274 + "type": "tag", 7275 + "class": "CONTEXT", 7276 + "explicit": false, 7277 + "content": [ 7278 + { 7279 + "name": "", 7280 + "type": { 7281 + "name": "Name", 7282 + "type": "defined" 7283 + } 7284 + } 7285 + ], 7286 + "optional": true 7287 + }, 7288 + { 7289 + "id": "publicKey", 7290 + "name": "[6]", 7291 + "type": "tag", 7292 + "class": "CONTEXT", 7293 + "explicit": false, 7294 + "content": [ 7295 + { 7296 + "name": "", 7297 + "type": { 7298 + "name": "SubjectPublicKeyInfo", 7299 + "type": "defined" 7300 + } 7301 + } 7302 + ], 7303 + "optional": true 7304 + }, 7305 + { 7306 + "id": "issuerUID", 7307 + "name": "[7]", 7308 + "type": "tag", 7309 + "class": "CONTEXT", 7310 + "explicit": false, 7311 + "content": [ 7312 + { 7313 + "name": "", 7314 + "type": { 7315 + "name": "UniqueIdentifier", 7316 + "type": "defined" 7317 + } 7318 + } 7319 + ], 7320 + "optional": true 7321 + }, 7322 + { 7323 + "id": "subjectUID", 7324 + "name": "[8]", 7325 + "type": "tag", 7326 + "class": "CONTEXT", 7327 + "explicit": false, 7328 + "content": [ 7329 + { 7330 + "name": "", 7331 + "type": { 7332 + "name": "UniqueIdentifier", 7333 + "type": "defined" 7334 + } 7335 + } 7336 + ], 7337 + "optional": true 7338 + }, 7339 + { 7340 + "id": "extensions", 7341 + "name": "[9]", 7342 + "type": "tag", 7343 + "class": "CONTEXT", 7344 + "explicit": false, 7345 + "content": [ 7346 + { 7347 + "name": "", 7348 + "type": { 7349 + "name": "Extensions", 7350 + "type": "defined" 7351 + } 7352 + } 7353 + ], 7354 + "optional": true 7355 + } 7356 + ] 7357 + } 7358 + }, 7359 + "OptionalValidity": { 7360 + "name": "OptionalValidity", 7361 + "type": { 7362 + "name": "SEQUENCE", 7363 + "type": "builtin", 7364 + "content": [ 7365 + { 7366 + "id": "notBefore", 7367 + "name": "[0]", 7368 + "type": "tag", 7369 + "class": "CONTEXT", 7370 + "explicit": false, 7371 + "content": [ 7372 + { 7373 + "name": "", 7374 + "type": { 7375 + "name": "Time", 7376 + "type": "defined" 7377 + } 7378 + } 7379 + ], 7380 + "optional": true 7381 + }, 7382 + { 7383 + "id": "notAfter", 7384 + "name": "[1]", 7385 + "type": "tag", 7386 + "class": "CONTEXT", 7387 + "explicit": false, 7388 + "content": [ 7389 + { 7390 + "name": "", 7391 + "type": { 7392 + "name": "Time", 7393 + "type": "defined" 7394 + } 7395 + } 7396 + ], 7397 + "optional": true 7398 + } 7399 + ] 7400 + } 7401 + }, 7402 + "Controls": { 7403 + "name": "Controls", 7404 + "type": { 7405 + "name": "SEQUENCE", 7406 + "type": "builtin", 7407 + "typeOf": 1, 7408 + "size": [ 7409 + 1, 7410 + "MAX" 7411 + ], 7412 + "content": [ 7413 + { 7414 + "name": "AttributeTypeAndValue", 7415 + "type": "defined" 7416 + } 7417 + ] 7418 + } 7419 + }, 7420 + "AttributeTypeAndValue": { 7421 + "name": "AttributeTypeAndValue", 7422 + "type": { 7423 + "name": "SEQUENCE", 7424 + "type": "builtin", 7425 + "content": [ 7426 + { 7427 + "id": "type", 7428 + "name": "OBJECT IDENTIFIER", 7429 + "type": "builtin" 7430 + }, 7431 + { 7432 + "id": "value", 7433 + "name": "ANY", 7434 + "type": "builtin", 7435 + "definedBy": "type" 7436 + } 7437 + ] 7438 + } 7439 + }, 7440 + "ProofOfPossession": { 7441 + "name": "ProofOfPossession", 7442 + "type": { 7443 + "name": "CHOICE", 7444 + "type": "builtin", 7445 + "content": [ 7446 + { 7447 + "id": "raVerified", 7448 + "name": "[0]", 7449 + "type": "tag", 7450 + "class": "CONTEXT", 7451 + "explicit": false, 7452 + "content": [ 7453 + { 7454 + "name": "", 7455 + "type": { 7456 + "name": "NULL", 7457 + "type": "builtin" 7458 + } 7459 + } 7460 + ] 7461 + }, 7462 + { 7463 + "id": "signature", 7464 + "name": "[1]", 7465 + "type": "tag", 7466 + "class": "CONTEXT", 7467 + "explicit": false, 7468 + "content": [ 7469 + { 7470 + "name": "", 7471 + "type": { 7472 + "name": "POPOSigningKey", 7473 + "type": "defined" 7474 + } 7475 + } 7476 + ] 7477 + }, 7478 + { 7479 + "id": "keyEncipherment", 7480 + "name": "[2]", 7481 + "type": "tag", 7482 + "class": "CONTEXT", 7483 + "explicit": false, 7484 + "content": [ 7485 + { 7486 + "name": "", 7487 + "type": { 7488 + "name": "POPOPrivKey", 7489 + "type": "defined" 7490 + } 7491 + } 7492 + ] 7493 + }, 7494 + { 7495 + "id": "keyAgreement", 7496 + "name": "[3]", 7497 + "type": "tag", 7498 + "class": "CONTEXT", 7499 + "explicit": false, 7500 + "content": [ 7501 + { 7502 + "name": "", 7503 + "type": { 7504 + "name": "POPOPrivKey", 7505 + "type": "defined" 7506 + } 7507 + } 7508 + ] 7509 + } 7510 + ] 7511 + } 7512 + }, 7513 + "POPOSigningKey": { 7514 + "name": "POPOSigningKey", 7515 + "type": { 7516 + "name": "SEQUENCE", 7517 + "type": "builtin", 7518 + "content": [ 7519 + { 7520 + "id": "poposkInput", 7521 + "name": "[0]", 7522 + "type": "tag", 7523 + "class": "CONTEXT", 7524 + "explicit": false, 7525 + "content": [ 7526 + { 7527 + "name": "", 7528 + "type": { 7529 + "name": "POPOSigningKeyInput", 7530 + "type": "defined" 7531 + } 7532 + } 7533 + ], 7534 + "optional": true 7535 + }, 7536 + { 7537 + "id": "algorithmIdentifier", 7538 + "name": "AlgorithmIdentifier", 7539 + "type": "defined" 7540 + }, 7541 + { 7542 + "id": "signature", 7543 + "name": "BIT STRING", 7544 + "type": "builtin" 7545 + } 7546 + ] 7547 + } 7548 + }, 7549 + "POPOSigningKeyInput": { 7550 + "name": "POPOSigningKeyInput", 7551 + "type": { 7552 + "name": "SEQUENCE", 7553 + "type": "builtin", 7554 + "content": [ 7555 + { 7556 + "id": "authInfo", 7557 + "name": "CHOICE", 7558 + "type": "builtin", 7559 + "content": [ 7560 + { 7561 + "id": "sender", 7562 + "name": "[0]", 7563 + "type": "tag", 7564 + "class": "CONTEXT", 7565 + "explicit": false, 7566 + "content": [ 7567 + { 7568 + "name": "", 7569 + "type": { 7570 + "name": "GeneralName", 7571 + "type": "defined" 7572 + } 7573 + } 7574 + ] 7575 + }, 7576 + { 7577 + "id": "publicKeyMAC", 7578 + "name": "PKMACValue", 7579 + "type": "defined" 7580 + } 7581 + ] 7582 + }, 7583 + { 7584 + "id": "publicKey", 7585 + "name": "SubjectPublicKeyInfo", 7586 + "type": "defined" 7587 + } 7588 + ] 7589 + } 7590 + }, 7591 + "PKMACValue": { 7592 + "name": "PKMACValue", 7593 + "type": { 7594 + "name": "SEQUENCE", 7595 + "type": "builtin", 7596 + "content": [ 7597 + { 7598 + "id": "algId", 7599 + "name": "AlgorithmIdentifier", 7600 + "type": "defined" 7601 + }, 7602 + { 7603 + "id": "value", 7604 + "name": "BIT STRING", 7605 + "type": "builtin" 7606 + } 7607 + ] 7608 + } 7609 + }, 7610 + "PBMParameter": { 7611 + "name": "PBMParameter", 7612 + "type": { 7613 + "name": "SEQUENCE", 7614 + "type": "builtin", 7615 + "content": [ 7616 + { 7617 + "id": "salt", 7618 + "name": "OCTET STRING", 7619 + "type": "builtin" 7620 + }, 7621 + { 7622 + "id": "owf", 7623 + "name": "AlgorithmIdentifier", 7624 + "type": "defined" 7625 + }, 7626 + { 7627 + "id": "iterationCount", 7628 + "name": "INTEGER", 7629 + "type": "builtin" 7630 + }, 7631 + { 7632 + "id": "mac", 7633 + "name": "AlgorithmIdentifier", 7634 + "type": "defined" 7635 + } 7636 + ] 7637 + } 7638 + }, 7639 + "POPOPrivKey": { 7640 + "name": "POPOPrivKey", 7641 + "type": { 7642 + "name": "CHOICE", 7643 + "type": "builtin", 7644 + "content": [ 7645 + { 7646 + "id": "thisMessage", 7647 + "name": "[0]", 7648 + "type": "tag", 7649 + "class": "CONTEXT", 7650 + "explicit": false, 7651 + "content": [ 7652 + { 7653 + "name": "", 7654 + "type": { 7655 + "name": "BIT STRING", 7656 + "type": "builtin" 7657 + } 7658 + } 7659 + ] 7660 + }, 7661 + { 7662 + "id": "subsequentMessage", 7663 + "name": "[1]", 7664 + "type": "tag", 7665 + "class": "CONTEXT", 7666 + "explicit": false, 7667 + "content": [ 7668 + { 7669 + "name": "", 7670 + "type": { 7671 + "name": "SubsequentMessage", 7672 + "type": "defined" 7673 + } 7674 + } 7675 + ] 7676 + }, 7677 + { 7678 + "id": "dhMAC", 7679 + "name": "[2]", 7680 + "type": "tag", 7681 + "class": "CONTEXT", 7682 + "explicit": false, 7683 + "content": [ 7684 + { 7685 + "name": "", 7686 + "type": { 7687 + "name": "BIT STRING", 7688 + "type": "builtin" 7689 + } 7690 + } 7691 + ] 7692 + }, 7693 + { 7694 + "id": "agreeMAC", 7695 + "name": "[3]", 7696 + "type": "tag", 7697 + "class": "CONTEXT", 7698 + "explicit": false, 7699 + "content": [ 7700 + { 7701 + "name": "", 7702 + "type": { 7703 + "name": "PKMACValue", 7704 + "type": "defined" 7705 + } 7706 + } 7707 + ] 7708 + }, 7709 + { 7710 + "id": "encryptedKey", 7711 + "name": "[4]", 7712 + "type": "tag", 7713 + "class": "CONTEXT", 7714 + "explicit": false, 7715 + "content": [ 7716 + { 7717 + "name": "", 7718 + "type": { 7719 + "name": "EnvelopedData", 7720 + "type": "defined" 7721 + } 7722 + } 7723 + ] 7724 + } 7725 + ] 7726 + } 7727 + }, 7728 + "SubsequentMessage": { 7729 + "name": "SubsequentMessage", 7730 + "type": { 7731 + "name": "INTEGER", 7732 + "type": "builtin", 7733 + "content": { 7734 + "encrCert": 0, 7735 + "challengeResp": 1 7736 + } 7737 + } 7738 + }, 7739 + "RegToken": { 7740 + "name": "RegToken", 7741 + "type": { 7742 + "name": "UTF8String", 7743 + "type": "builtin" 7744 + } 7745 + }, 7746 + "Authenticator": { 7747 + "name": "Authenticator", 7748 + "type": { 7749 + "name": "UTF8String", 7750 + "type": "builtin" 7751 + } 7752 + }, 7753 + "PKIPublicationInfo": { 7754 + "name": "PKIPublicationInfo", 7755 + "type": { 7756 + "name": "SEQUENCE", 7757 + "type": "builtin", 7758 + "content": [ 7759 + { 7760 + "id": "action", 7761 + "name": "INTEGER", 7762 + "type": "builtin", 7763 + "content": { 7764 + "dontPublish": 0, 7765 + "pleasePublish": 1 7766 + } 7767 + }, 7768 + { 7769 + "id": "pubInfos", 7770 + "name": "SEQUENCE", 7771 + "type": "builtin", 7772 + "typeOf": 1, 7773 + "size": [ 7774 + 1, 7775 + "MAX" 7776 + ], 7777 + "content": [ 7778 + { 7779 + "name": "SinglePubInfo", 7780 + "type": "defined" 7781 + } 7782 + ], 7783 + "optional": true 7784 + } 7785 + ] 7786 + } 7787 + }, 7788 + "SinglePubInfo": { 7789 + "name": "SinglePubInfo", 7790 + "type": { 7791 + "name": "SEQUENCE", 7792 + "type": "builtin", 7793 + "content": [ 7794 + { 7795 + "id": "pubMethod", 7796 + "name": "INTEGER", 7797 + "type": "builtin", 7798 + "content": { 7799 + "dontCare": 0, 7800 + "x500": 1, 7801 + "web": 2, 7802 + "ldap": 3 7803 + } 7804 + }, 7805 + { 7806 + "id": "pubLocation", 7807 + "name": "GeneralName", 7808 + "type": "defined", 7809 + "optional": true 7810 + } 7811 + ] 7812 + } 7813 + }, 7814 + "PKIArchiveOptions": { 7815 + "name": "PKIArchiveOptions", 7816 + "type": { 7817 + "name": "CHOICE", 7818 + "type": "builtin", 7819 + "content": [ 7820 + { 7821 + "id": "encryptedPrivKey", 7822 + "name": "[0]", 7823 + "type": "tag", 7824 + "class": "CONTEXT", 7825 + "explicit": false, 7826 + "content": [ 7827 + { 7828 + "name": "", 7829 + "type": { 7830 + "name": "EncryptedKey", 7831 + "type": "defined" 7832 + } 7833 + } 7834 + ] 7835 + }, 7836 + { 7837 + "id": "keyGenParameters", 7838 + "name": "[1]", 7839 + "type": "tag", 7840 + "class": "CONTEXT", 7841 + "explicit": false, 7842 + "content": [ 7843 + { 7844 + "name": "", 7845 + "type": { 7846 + "name": "KeyGenParameters", 7847 + "type": "defined" 7848 + } 7849 + } 7850 + ] 7851 + }, 7852 + { 7853 + "id": "archiveRemGenPrivKey", 7854 + "name": "[2]", 7855 + "type": "tag", 7856 + "class": "CONTEXT", 7857 + "explicit": false, 7858 + "content": [ 7859 + { 7860 + "name": "", 7861 + "type": { 7862 + "name": "BOOLEAN", 7863 + "type": "builtin" 7864 + } 7865 + } 7866 + ] 7867 + } 7868 + ] 7869 + } 7870 + }, 7871 + "EncryptedKey": { 7872 + "name": "EncryptedKey", 7873 + "type": { 7874 + "name": "CHOICE", 7875 + "type": "builtin", 7876 + "content": [ 7877 + { 7878 + "id": "encryptedValue", 7879 + "name": "EncryptedValue", 7880 + "type": "defined" 7881 + }, 7882 + { 7883 + "id": "envelopedData", 7884 + "name": "[0]", 7885 + "type": "tag", 7886 + "class": "CONTEXT", 7887 + "explicit": false, 7888 + "content": [ 7889 + { 7890 + "name": "", 7891 + "type": { 7892 + "name": "EnvelopedData", 7893 + "type": "defined" 7894 + } 7895 + } 7896 + ] 7897 + } 7898 + ] 7899 + } 7900 + }, 7901 + "EncryptedValue": { 7902 + "name": "EncryptedValue", 7903 + "type": { 7904 + "name": "SEQUENCE", 7905 + "type": "builtin", 7906 + "content": [ 7907 + { 7908 + "id": "intendedAlg", 7909 + "name": "[0]", 7910 + "type": "tag", 7911 + "class": "CONTEXT", 7912 + "explicit": false, 7913 + "content": [ 7914 + { 7915 + "name": "", 7916 + "type": { 7917 + "name": "AlgorithmIdentifier", 7918 + "type": "defined" 7919 + } 7920 + } 7921 + ], 7922 + "optional": true 7923 + }, 7924 + { 7925 + "id": "symmAlg", 7926 + "name": "[1]", 7927 + "type": "tag", 7928 + "class": "CONTEXT", 7929 + "explicit": false, 7930 + "content": [ 7931 + { 7932 + "name": "", 7933 + "type": { 7934 + "name": "AlgorithmIdentifier", 7935 + "type": "defined" 7936 + } 7937 + } 7938 + ], 7939 + "optional": true 7940 + }, 7941 + { 7942 + "id": "encSymmKey", 7943 + "name": "[2]", 7944 + "type": "tag", 7945 + "class": "CONTEXT", 7946 + "explicit": false, 7947 + "content": [ 7948 + { 7949 + "name": "", 7950 + "type": { 7951 + "name": "BIT STRING", 7952 + "type": "builtin" 7953 + } 7954 + } 7955 + ], 7956 + "optional": true 7957 + }, 7958 + { 7959 + "id": "keyAlg", 7960 + "name": "[3]", 7961 + "type": "tag", 7962 + "class": "CONTEXT", 7963 + "explicit": false, 7964 + "content": [ 7965 + { 7966 + "name": "", 7967 + "type": { 7968 + "name": "AlgorithmIdentifier", 7969 + "type": "defined" 7970 + } 7971 + } 7972 + ], 7973 + "optional": true 7974 + }, 7975 + { 7976 + "id": "valueHint", 7977 + "name": "[4]", 7978 + "type": "tag", 7979 + "class": "CONTEXT", 7980 + "explicit": false, 7981 + "content": [ 7982 + { 7983 + "name": "", 7984 + "type": { 7985 + "name": "OCTET STRING", 7986 + "type": "builtin" 7987 + } 7988 + } 7989 + ], 7990 + "optional": true 7991 + }, 7992 + { 7993 + "id": "encValue", 7994 + "name": "BIT STRING", 7995 + "type": "builtin" 7996 + } 7997 + ] 7998 + } 7999 + }, 8000 + "KeyGenParameters": { 8001 + "name": "KeyGenParameters", 8002 + "type": { 8003 + "name": "OCTET STRING", 8004 + "type": "builtin" 8005 + } 8006 + }, 8007 + "OldCertId": { 8008 + "name": "OldCertId", 8009 + "type": { 8010 + "name": "CertId", 8011 + "type": "defined" 8012 + } 8013 + }, 8014 + "CertId": { 8015 + "name": "CertId", 8016 + "type": { 8017 + "name": "SEQUENCE", 8018 + "type": "builtin", 8019 + "content": [ 8020 + { 8021 + "id": "issuer", 8022 + "name": "GeneralName", 8023 + "type": "defined" 8024 + }, 8025 + { 8026 + "id": "serialNumber", 8027 + "name": "INTEGER", 8028 + "type": "builtin" 8029 + } 8030 + ] 8031 + } 8032 + }, 8033 + "ProtocolEncrKey": { 8034 + "name": "ProtocolEncrKey", 8035 + "type": { 8036 + "name": "SubjectPublicKeyInfo", 8037 + "type": "defined" 8038 + } 8039 + }, 8040 + "UTF8Pairs": { 8041 + "name": "UTF8Pairs", 8042 + "type": { 8043 + "name": "UTF8String", 8044 + "type": "builtin" 8045 + } 8046 + }, 8047 + "CertReq": { 8048 + "name": "CertReq", 8049 + "type": { 8050 + "name": "CertRequest", 8051 + "type": "defined" 8052 + } 8053 + }, 8054 + "EncKeyWithID": { 8055 + "name": "EncKeyWithID", 8056 + "type": { 8057 + "name": "SEQUENCE", 8058 + "type": "builtin", 8059 + "content": [ 8060 + { 8061 + "id": "privateKey", 8062 + "name": "PrivateKeyInfo", 8063 + "type": "defined" 8064 + }, 8065 + { 8066 + "id": "identifier", 8067 + "name": "CHOICE", 8068 + "type": "builtin", 8069 + "content": [ 8070 + { 8071 + "id": "string", 8072 + "name": "UTF8String", 8073 + "type": "builtin" 8074 + }, 8075 + { 8076 + "id": "generalName", 8077 + "name": "GeneralName", 8078 + "type": "defined" 8079 + } 8080 + ], 8081 + "optional": true 8082 + } 8083 + ] 8084 + } 8085 + }, 8086 + "PrivateKeyInfo": { 8087 + "name": "PrivateKeyInfo", 8088 + "type": { 8089 + "name": "SEQUENCE", 8090 + "type": "builtin", 8091 + "content": [ 8092 + { 8093 + "id": "version", 8094 + "name": "INTEGER", 8095 + "type": "builtin" 8096 + }, 8097 + { 8098 + "id": "privateKeyAlgorithm", 8099 + "name": "AlgorithmIdentifier", 8100 + "type": "defined" 8101 + }, 8102 + { 8103 + "id": "privateKey", 8104 + "name": "OCTET STRING", 8105 + "type": "builtin" 8106 + }, 8107 + { 8108 + "id": "attributes", 8109 + "name": "[0]", 8110 + "type": "tag", 8111 + "class": "CONTEXT", 8112 + "explicit": false, 8113 + "content": [ 8114 + { 8115 + "name": "", 8116 + "type": { 8117 + "name": "Attributes", 8118 + "type": "defined" 8119 + } 8120 + } 8121 + ], 8122 + "optional": true 8123 + } 8124 + ] 8125 + } 8126 + }, 8127 + "Attributes": { 8128 + "name": "Attributes", 8129 + "type": { 8130 + "name": "SET", 8131 + "type": "builtin", 8132 + "typeOf": 1, 8133 + "content": [ 8134 + { 8135 + "name": "Attribute", 8136 + "type": "defined" 8137 + } 8138 + ] 8139 + } 8140 + } 8141 + } 8142 + }, 8143 + "1.3.6.1.5.5.7.0.16": { 8144 + "name": "PKIXCMP", 8145 + "oid": "1.3.6.1.5.5.7.0.16", 8146 + "source": "rfc4210.txt", 8147 + "tagDefault": "EXPLICIT", 8148 + "imports": { 8149 + "1.3.6.1.5.5.7.0.1": { 8150 + "name": "PKIX1Explicit88", 8151 + "oid": "1.3.6.1.5.5.7.0.1", 8152 + "types": [ 8153 + "Certificate", 8154 + "CertificateList", 8155 + "Extensions", 8156 + "AlgorithmIdentifier", 8157 + "UTF8String" 8158 + ] 8159 + }, 8160 + "1.3.6.1.5.5.7.0.2": { 8161 + "name": "PKIX1Implicit88", 8162 + "oid": "1.3.6.1.5.5.7.0.2", 8163 + "types": [ 8164 + "GeneralName", 8165 + "KeyIdentifier" 8166 + ] 8167 + }, 8168 + "1.3.6.1.5.5.7.0.36": { 8169 + "name": "PKIXCRMF-2005", 8170 + "oid": "1.3.6.1.5.5.7.0.36", 8171 + "types": [ 8172 + "CertTemplate", 8173 + "PKIPublicationInfo", 8174 + "EncryptedValue", 8175 + "CertId", 8176 + "CertReqMessages" 8177 + ] 8178 + }, 8179 + "1.2.840.113549.1.10.1.1": { 8180 + "name": "PKCS-10", 8181 + "oid": "1.2.840.113549.1.10.1.1", 8182 + "types": [ 8183 + "CertificationRequest" 8184 + ] 8185 + } 8186 + }, 8187 + "values": { 8188 + "id-PasswordBasedMac": { 8189 + "name": "id-PasswordBasedMac", 8190 + "type": { 8191 + "name": "OBJECT IDENTIFIER", 8192 + "type": "builtin" 8193 + }, 8194 + "value": "1.2.840.113533.7.66.13" 8195 + }, 8196 + "id-DHBasedMac": { 8197 + "name": "id-DHBasedMac", 8198 + "type": { 8199 + "name": "OBJECT IDENTIFIER", 8200 + "type": "builtin" 8201 + }, 8202 + "value": "1.2.840.113533.7.66.30" 8203 + } 8204 + }, 8205 + "types": { 8206 + "CMPCertificate": { 8207 + "name": "CMPCertificate", 8208 + "type": { 8209 + "name": "CHOICE", 8210 + "type": "builtin", 8211 + "content": [ 8212 + { 8213 + "id": "x509v3PKCert", 8214 + "name": "Certificate", 8215 + "type": "defined" 8216 + } 8217 + ] 8218 + } 8219 + }, 8220 + "PKIMessage": { 8221 + "name": "PKIMessage", 8222 + "type": { 8223 + "name": "SEQUENCE", 8224 + "type": "builtin", 8225 + "content": [ 8226 + { 8227 + "id": "header", 8228 + "name": "PKIHeader", 8229 + "type": "defined" 8230 + }, 8231 + { 8232 + "id": "body", 8233 + "name": "PKIBody", 8234 + "type": "defined" 8235 + }, 8236 + { 8237 + "id": "protection", 8238 + "name": "[0]", 8239 + "type": "tag", 8240 + "class": "CONTEXT", 8241 + "explicit": true, 8242 + "content": [ 8243 + { 8244 + "name": "", 8245 + "type": { 8246 + "name": "PKIProtection", 8247 + "type": "defined" 8248 + } 8249 + } 8250 + ], 8251 + "optional": true 8252 + }, 8253 + { 8254 + "id": "extraCerts", 8255 + "name": "[1]", 8256 + "type": "tag", 8257 + "class": "CONTEXT", 8258 + "explicit": true, 8259 + "content": [ 8260 + { 8261 + "name": "", 8262 + "type": { 8263 + "name": "SEQUENCE", 8264 + "type": "builtin", 8265 + "typeOf": 1, 8266 + "size": [ 8267 + 1, 8268 + "MAX" 8269 + ], 8270 + "content": [ 8271 + { 8272 + "name": "CMPCertificate", 8273 + "type": "defined" 8274 + } 8275 + ] 8276 + } 8277 + } 8278 + ], 8279 + "optional": true 8280 + } 8281 + ] 8282 + } 8283 + }, 8284 + "PKIMessages": { 8285 + "name": "PKIMessages", 8286 + "type": { 8287 + "name": "SEQUENCE", 8288 + "type": "builtin", 8289 + "typeOf": 1, 8290 + "size": [ 8291 + 1, 8292 + "MAX" 8293 + ], 8294 + "content": [ 8295 + { 8296 + "name": "PKIMessage", 8297 + "type": "defined" 8298 + } 8299 + ] 8300 + } 8301 + }, 8302 + "PKIHeader": { 8303 + "name": "PKIHeader", 8304 + "type": { 8305 + "name": "SEQUENCE", 8306 + "type": "builtin", 8307 + "content": [ 8308 + { 8309 + "id": "pvno", 8310 + "name": "INTEGER", 8311 + "type": "builtin", 8312 + "content": { 8313 + "cmp1999": 1, 8314 + "cmp2000": 2 8315 + } 8316 + }, 8317 + { 8318 + "id": "sender", 8319 + "name": "GeneralName", 8320 + "type": "defined" 8321 + }, 8322 + { 8323 + "id": "recipient", 8324 + "name": "GeneralName", 8325 + "type": "defined" 8326 + }, 8327 + { 8328 + "id": "messageTime", 8329 + "name": "[0]", 8330 + "type": "tag", 8331 + "class": "CONTEXT", 8332 + "explicit": true, 8333 + "content": [ 8334 + { 8335 + "name": "", 8336 + "type": { 8337 + "name": "GeneralizedTime", 8338 + "type": "builtin" 8339 + } 8340 + } 8341 + ], 8342 + "optional": true 8343 + }, 8344 + { 8345 + "id": "protectionAlg", 8346 + "name": "[1]", 8347 + "type": "tag", 8348 + "class": "CONTEXT", 8349 + "explicit": true, 8350 + "content": [ 8351 + { 8352 + "name": "", 8353 + "type": { 8354 + "name": "AlgorithmIdentifier", 8355 + "type": "defined" 8356 + } 8357 + } 8358 + ], 8359 + "optional": true 8360 + }, 8361 + { 8362 + "id": "senderKID", 8363 + "name": "[2]", 8364 + "type": "tag", 8365 + "class": "CONTEXT", 8366 + "explicit": true, 8367 + "content": [ 8368 + { 8369 + "name": "", 8370 + "type": { 8371 + "name": "KeyIdentifier", 8372 + "type": "defined" 8373 + } 8374 + } 8375 + ], 8376 + "optional": true 8377 + }, 8378 + { 8379 + "id": "recipKID", 8380 + "name": "[3]", 8381 + "type": "tag", 8382 + "class": "CONTEXT", 8383 + "explicit": true, 8384 + "content": [ 8385 + { 8386 + "name": "", 8387 + "type": { 8388 + "name": "KeyIdentifier", 8389 + "type": "defined" 8390 + } 8391 + } 8392 + ], 8393 + "optional": true 8394 + }, 8395 + { 8396 + "id": "transactionID", 8397 + "name": "[4]", 8398 + "type": "tag", 8399 + "class": "CONTEXT", 8400 + "explicit": true, 8401 + "content": [ 8402 + { 8403 + "name": "", 8404 + "type": { 8405 + "name": "OCTET STRING", 8406 + "type": "builtin" 8407 + } 8408 + } 8409 + ], 8410 + "optional": true 8411 + }, 8412 + { 8413 + "id": "senderNonce", 8414 + "name": "[5]", 8415 + "type": "tag", 8416 + "class": "CONTEXT", 8417 + "explicit": true, 8418 + "content": [ 8419 + { 8420 + "name": "", 8421 + "type": { 8422 + "name": "OCTET STRING", 8423 + "type": "builtin" 8424 + } 8425 + } 8426 + ], 8427 + "optional": true 8428 + }, 8429 + { 8430 + "id": "recipNonce", 8431 + "name": "[6]", 8432 + "type": "tag", 8433 + "class": "CONTEXT", 8434 + "explicit": true, 8435 + "content": [ 8436 + { 8437 + "name": "", 8438 + "type": { 8439 + "name": "OCTET STRING", 8440 + "type": "builtin" 8441 + } 8442 + } 8443 + ], 8444 + "optional": true 8445 + }, 8446 + { 8447 + "id": "freeText", 8448 + "name": "[7]", 8449 + "type": "tag", 8450 + "class": "CONTEXT", 8451 + "explicit": true, 8452 + "content": [ 8453 + { 8454 + "name": "", 8455 + "type": { 8456 + "name": "PKIFreeText", 8457 + "type": "defined" 8458 + } 8459 + } 8460 + ], 8461 + "optional": true 8462 + }, 8463 + { 8464 + "id": "generalInfo", 8465 + "name": "[8]", 8466 + "type": "tag", 8467 + "class": "CONTEXT", 8468 + "explicit": true, 8469 + "content": [ 8470 + { 8471 + "name": "", 8472 + "type": { 8473 + "name": "SEQUENCE", 8474 + "type": "builtin", 8475 + "typeOf": 1, 8476 + "size": [ 8477 + 1, 8478 + "MAX" 8479 + ], 8480 + "content": [ 8481 + { 8482 + "name": "InfoTypeAndValue", 8483 + "type": "defined" 8484 + } 8485 + ] 8486 + } 8487 + } 8488 + ], 8489 + "optional": true 8490 + } 8491 + ] 8492 + } 8493 + }, 8494 + "PKIFreeText": { 8495 + "name": "PKIFreeText", 8496 + "type": { 8497 + "name": "SEQUENCE", 8498 + "type": "builtin", 8499 + "typeOf": 1, 8500 + "size": [ 8501 + 1, 8502 + "MAX" 8503 + ], 8504 + "content": [ 8505 + { 8506 + "name": "UTF8String", 8507 + "type": "builtin" 8508 + } 8509 + ] 8510 + } 8511 + }, 8512 + "PKIBody": { 8513 + "name": "PKIBody", 8514 + "type": { 8515 + "name": "CHOICE", 8516 + "type": "builtin", 8517 + "content": [ 8518 + { 8519 + "id": "ir", 8520 + "name": "[0]", 8521 + "type": "tag", 8522 + "class": "CONTEXT", 8523 + "explicit": true, 8524 + "content": [ 8525 + { 8526 + "name": "", 8527 + "type": { 8528 + "name": "CertReqMessages", 8529 + "type": "defined" 8530 + } 8531 + } 8532 + ] 8533 + }, 8534 + { 8535 + "id": "ip", 8536 + "name": "[1]", 8537 + "type": "tag", 8538 + "class": "CONTEXT", 8539 + "explicit": true, 8540 + "content": [ 8541 + { 8542 + "name": "", 8543 + "type": { 8544 + "name": "CertRepMessage", 8545 + "type": "defined" 8546 + } 8547 + } 8548 + ] 8549 + }, 8550 + { 8551 + "id": "cr", 8552 + "name": "[2]", 8553 + "type": "tag", 8554 + "class": "CONTEXT", 8555 + "explicit": true, 8556 + "content": [ 8557 + { 8558 + "name": "", 8559 + "type": { 8560 + "name": "CertReqMessages", 8561 + "type": "defined" 8562 + } 8563 + } 8564 + ] 8565 + }, 8566 + { 8567 + "id": "cp", 8568 + "name": "[3]", 8569 + "type": "tag", 8570 + "class": "CONTEXT", 8571 + "explicit": true, 8572 + "content": [ 8573 + { 8574 + "name": "", 8575 + "type": { 8576 + "name": "CertRepMessage", 8577 + "type": "defined" 8578 + } 8579 + } 8580 + ] 8581 + }, 8582 + { 8583 + "id": "p10cr", 8584 + "name": "[4]", 8585 + "type": "tag", 8586 + "class": "CONTEXT", 8587 + "explicit": true, 8588 + "content": [ 8589 + { 8590 + "name": "", 8591 + "type": { 8592 + "name": "CertificationRequest", 8593 + "type": "defined" 8594 + } 8595 + } 8596 + ] 8597 + }, 8598 + { 8599 + "id": "popdecc", 8600 + "name": "[5]", 8601 + "type": "tag", 8602 + "class": "CONTEXT", 8603 + "explicit": true, 8604 + "content": [ 8605 + { 8606 + "name": "", 8607 + "type": { 8608 + "name": "POPODecKeyChallContent", 8609 + "type": "defined" 8610 + } 8611 + } 8612 + ] 8613 + }, 8614 + { 8615 + "id": "popdecr", 8616 + "name": "[6]", 8617 + "type": "tag", 8618 + "class": "CONTEXT", 8619 + "explicit": true, 8620 + "content": [ 8621 + { 8622 + "name": "", 8623 + "type": { 8624 + "name": "POPODecKeyRespContent", 8625 + "type": "defined" 8626 + } 8627 + } 8628 + ] 8629 + }, 8630 + { 8631 + "id": "kur", 8632 + "name": "[7]", 8633 + "type": "tag", 8634 + "class": "CONTEXT", 8635 + "explicit": true, 8636 + "content": [ 8637 + { 8638 + "name": "", 8639 + "type": { 8640 + "name": "CertReqMessages", 8641 + "type": "defined" 8642 + } 8643 + } 8644 + ] 8645 + }, 8646 + { 8647 + "id": "kup", 8648 + "name": "[8]", 8649 + "type": "tag", 8650 + "class": "CONTEXT", 8651 + "explicit": true, 8652 + "content": [ 8653 + { 8654 + "name": "", 8655 + "type": { 8656 + "name": "CertRepMessage", 8657 + "type": "defined" 8658 + } 8659 + } 8660 + ] 8661 + }, 8662 + { 8663 + "id": "krr", 8664 + "name": "[9]", 8665 + "type": "tag", 8666 + "class": "CONTEXT", 8667 + "explicit": true, 8668 + "content": [ 8669 + { 8670 + "name": "", 8671 + "type": { 8672 + "name": "CertReqMessages", 8673 + "type": "defined" 8674 + } 8675 + } 8676 + ] 8677 + }, 8678 + { 8679 + "id": "krp", 8680 + "name": "[10]", 8681 + "type": "tag", 8682 + "class": "CONTEXT", 8683 + "explicit": true, 8684 + "content": [ 8685 + { 8686 + "name": "", 8687 + "type": { 8688 + "name": "KeyRecRepContent", 8689 + "type": "defined" 8690 + } 8691 + } 8692 + ] 8693 + }, 8694 + { 8695 + "id": "rr", 8696 + "name": "[11]", 8697 + "type": "tag", 8698 + "class": "CONTEXT", 8699 + "explicit": true, 8700 + "content": [ 8701 + { 8702 + "name": "", 8703 + "type": { 8704 + "name": "RevReqContent", 8705 + "type": "defined" 8706 + } 8707 + } 8708 + ] 8709 + }, 8710 + { 8711 + "id": "rp", 8712 + "name": "[12]", 8713 + "type": "tag", 8714 + "class": "CONTEXT", 8715 + "explicit": true, 8716 + "content": [ 8717 + { 8718 + "name": "", 8719 + "type": { 8720 + "name": "RevRepContent", 8721 + "type": "defined" 8722 + } 8723 + } 8724 + ] 8725 + }, 8726 + { 8727 + "id": "ccr", 8728 + "name": "[13]", 8729 + "type": "tag", 8730 + "class": "CONTEXT", 8731 + "explicit": true, 8732 + "content": [ 8733 + { 8734 + "name": "", 8735 + "type": { 8736 + "name": "CertReqMessages", 8737 + "type": "defined" 8738 + } 8739 + } 8740 + ] 8741 + }, 8742 + { 8743 + "id": "ccp", 8744 + "name": "[14]", 8745 + "type": "tag", 8746 + "class": "CONTEXT", 8747 + "explicit": true, 8748 + "content": [ 8749 + { 8750 + "name": "", 8751 + "type": { 8752 + "name": "CertRepMessage", 8753 + "type": "defined" 8754 + } 8755 + } 8756 + ] 8757 + }, 8758 + { 8759 + "id": "ckuann", 8760 + "name": "[15]", 8761 + "type": "tag", 8762 + "class": "CONTEXT", 8763 + "explicit": true, 8764 + "content": [ 8765 + { 8766 + "name": "", 8767 + "type": { 8768 + "name": "CAKeyUpdAnnContent", 8769 + "type": "defined" 8770 + } 8771 + } 8772 + ] 8773 + }, 8774 + { 8775 + "id": "cann", 8776 + "name": "[16]", 8777 + "type": "tag", 8778 + "class": "CONTEXT", 8779 + "explicit": true, 8780 + "content": [ 8781 + { 8782 + "name": "", 8783 + "type": { 8784 + "name": "CertAnnContent", 8785 + "type": "defined" 8786 + } 8787 + } 8788 + ] 8789 + }, 8790 + { 8791 + "id": "rann", 8792 + "name": "[17]", 8793 + "type": "tag", 8794 + "class": "CONTEXT", 8795 + "explicit": true, 8796 + "content": [ 8797 + { 8798 + "name": "", 8799 + "type": { 8800 + "name": "RevAnnContent", 8801 + "type": "defined" 8802 + } 8803 + } 8804 + ] 8805 + }, 8806 + { 8807 + "id": "crlann", 8808 + "name": "[18]", 8809 + "type": "tag", 8810 + "class": "CONTEXT", 8811 + "explicit": true, 8812 + "content": [ 8813 + { 8814 + "name": "", 8815 + "type": { 8816 + "name": "CRLAnnContent", 8817 + "type": "defined" 8818 + } 8819 + } 8820 + ] 8821 + }, 8822 + { 8823 + "id": "pkiconf", 8824 + "name": "[19]", 8825 + "type": "tag", 8826 + "class": "CONTEXT", 8827 + "explicit": true, 8828 + "content": [ 8829 + { 8830 + "name": "", 8831 + "type": { 8832 + "name": "PKIConfirmContent", 8833 + "type": "defined" 8834 + } 8835 + } 8836 + ] 8837 + }, 8838 + { 8839 + "id": "nested", 8840 + "name": "[20]", 8841 + "type": "tag", 8842 + "class": "CONTEXT", 8843 + "explicit": true, 8844 + "content": [ 8845 + { 8846 + "name": "", 8847 + "type": { 8848 + "name": "NestedMessageContent", 8849 + "type": "defined" 8850 + } 8851 + } 8852 + ] 8853 + }, 8854 + { 8855 + "id": "genm", 8856 + "name": "[21]", 8857 + "type": "tag", 8858 + "class": "CONTEXT", 8859 + "explicit": true, 8860 + "content": [ 8861 + { 8862 + "name": "", 8863 + "type": { 8864 + "name": "GenMsgContent", 8865 + "type": "defined" 8866 + } 8867 + } 8868 + ] 8869 + }, 8870 + { 8871 + "id": "genp", 8872 + "name": "[22]", 8873 + "type": "tag", 8874 + "class": "CONTEXT", 8875 + "explicit": true, 8876 + "content": [ 8877 + { 8878 + "name": "", 8879 + "type": { 8880 + "name": "GenRepContent", 8881 + "type": "defined" 8882 + } 8883 + } 8884 + ] 8885 + }, 8886 + { 8887 + "id": "error", 8888 + "name": "[23]", 8889 + "type": "tag", 8890 + "class": "CONTEXT", 8891 + "explicit": true, 8892 + "content": [ 8893 + { 8894 + "name": "", 8895 + "type": { 8896 + "name": "ErrorMsgContent", 8897 + "type": "defined" 8898 + } 8899 + } 8900 + ] 8901 + }, 8902 + { 8903 + "id": "certConf", 8904 + "name": "[24]", 8905 + "type": "tag", 8906 + "class": "CONTEXT", 8907 + "explicit": true, 8908 + "content": [ 8909 + { 8910 + "name": "", 8911 + "type": { 8912 + "name": "CertConfirmContent", 8913 + "type": "defined" 8914 + } 8915 + } 8916 + ] 8917 + }, 8918 + { 8919 + "id": "pollReq", 8920 + "name": "[25]", 8921 + "type": "tag", 8922 + "class": "CONTEXT", 8923 + "explicit": true, 8924 + "content": [ 8925 + { 8926 + "name": "", 8927 + "type": { 8928 + "name": "PollReqContent", 8929 + "type": "defined" 8930 + } 8931 + } 8932 + ] 8933 + }, 8934 + { 8935 + "id": "pollRep", 8936 + "name": "[26]", 8937 + "type": "tag", 8938 + "class": "CONTEXT", 8939 + "explicit": true, 8940 + "content": [ 8941 + { 8942 + "name": "", 8943 + "type": { 8944 + "name": "PollRepContent", 8945 + "type": "defined" 8946 + } 8947 + } 8948 + ] 8949 + } 8950 + ] 8951 + } 8952 + }, 8953 + "PKIProtection": { 8954 + "name": "PKIProtection", 8955 + "type": { 8956 + "name": "BIT STRING", 8957 + "type": "builtin" 8958 + } 8959 + }, 8960 + "ProtectedPart": { 8961 + "name": "ProtectedPart", 8962 + "type": { 8963 + "name": "SEQUENCE", 8964 + "type": "builtin", 8965 + "content": [ 8966 + { 8967 + "id": "header", 8968 + "name": "PKIHeader", 8969 + "type": "defined" 8970 + }, 8971 + { 8972 + "id": "body", 8973 + "name": "PKIBody", 8974 + "type": "defined" 8975 + } 8976 + ] 8977 + } 8978 + }, 8979 + "PBMParameter": { 8980 + "name": "PBMParameter", 8981 + "type": { 8982 + "name": "SEQUENCE", 8983 + "type": "builtin", 8984 + "content": [ 8985 + { 8986 + "id": "salt", 8987 + "name": "OCTET STRING", 8988 + "type": "builtin" 8989 + }, 8990 + { 8991 + "id": "owf", 8992 + "name": "AlgorithmIdentifier", 8993 + "type": "defined" 8994 + }, 8995 + { 8996 + "id": "iterationCount", 8997 + "name": "INTEGER", 8998 + "type": "builtin" 8999 + }, 9000 + { 9001 + "id": "mac", 9002 + "name": "AlgorithmIdentifier", 9003 + "type": "defined" 9004 + } 9005 + ] 9006 + } 9007 + }, 9008 + "DHBMParameter": { 9009 + "name": "DHBMParameter", 9010 + "type": { 9011 + "name": "SEQUENCE", 9012 + "type": "builtin", 9013 + "content": [ 9014 + { 9015 + "id": "owf", 9016 + "name": "AlgorithmIdentifier", 9017 + "type": "defined" 9018 + }, 9019 + { 9020 + "id": "mac", 9021 + "name": "AlgorithmIdentifier", 9022 + "type": "defined" 9023 + } 9024 + ] 9025 + } 9026 + }, 9027 + "NestedMessageContent": { 9028 + "name": "NestedMessageContent", 9029 + "type": { 9030 + "name": "PKIMessages", 9031 + "type": "defined" 9032 + } 9033 + }, 9034 + "PKIStatus": { 9035 + "name": "PKIStatus", 9036 + "type": { 9037 + "name": "INTEGER", 9038 + "type": "builtin", 9039 + "content": { 9040 + "accepted": 0, 9041 + "grantedWithMods": 1, 9042 + "rejection": 2, 9043 + "waiting": 3, 9044 + "revocationWarning": 4, 9045 + "revocationNotification": 5, 9046 + "keyUpdateWarning": 6 9047 + } 9048 + } 9049 + }, 9050 + "PKIFailureInfo": { 9051 + "name": "PKIFailureInfo", 9052 + "type": { 9053 + "name": "BIT STRING", 9054 + "type": "builtin", 9055 + "content": { 9056 + "badAlg": 0, 9057 + "badMessageCheck": 1, 9058 + "badRequest": 2, 9059 + "badTime": 3, 9060 + "badCertId": 4, 9061 + "badDataFormat": 5, 9062 + "wrongAuthority": 6, 9063 + "incorrectData": 7, 9064 + "missingTimeStamp": 8, 9065 + "badPOP": 9, 9066 + "certRevoked": 10, 9067 + "certConfirmed": 11, 9068 + "wrongIntegrity": 12, 9069 + "badRecipientNonce": 13, 9070 + "timeNotAvailable": 14, 9071 + "unacceptedPolicy": 15, 9072 + "unacceptedExtension": 16, 9073 + "addInfoNotAvailable": 17, 9074 + "badSenderNonce": 18, 9075 + "badCertTemplate": 19, 9076 + "signerNotTrusted": 20, 9077 + "transactionIdInUse": 21, 9078 + "unsupportedVersion": 22, 9079 + "notAuthorized": 23, 9080 + "systemUnavail": 24, 9081 + "systemFailure": 25, 9082 + "duplicateCertReq": 26 9083 + } 9084 + } 9085 + }, 9086 + "PKIStatusInfo": { 9087 + "name": "PKIStatusInfo", 9088 + "type": { 9089 + "name": "SEQUENCE", 9090 + "type": "builtin", 9091 + "content": [ 9092 + { 9093 + "id": "status", 9094 + "name": "PKIStatus", 9095 + "type": "defined" 9096 + }, 9097 + { 9098 + "id": "statusString", 9099 + "name": "PKIFreeText", 9100 + "type": "defined", 9101 + "optional": true 9102 + }, 9103 + { 9104 + "id": "failInfo", 9105 + "name": "PKIFailureInfo", 9106 + "type": "defined", 9107 + "optional": true 9108 + } 9109 + ] 9110 + } 9111 + }, 9112 + "OOBCert": { 9113 + "name": "OOBCert", 9114 + "type": { 9115 + "name": "CMPCertificate", 9116 + "type": "defined" 9117 + } 9118 + }, 9119 + "OOBCertHash": { 9120 + "name": "OOBCertHash", 9121 + "type": { 9122 + "name": "SEQUENCE", 9123 + "type": "builtin", 9124 + "content": [ 9125 + { 9126 + "id": "hashAlg", 9127 + "name": "[0]", 9128 + "type": "tag", 9129 + "class": "CONTEXT", 9130 + "explicit": true, 9131 + "content": [ 9132 + { 9133 + "name": "", 9134 + "type": { 9135 + "name": "AlgorithmIdentifier", 9136 + "type": "defined" 9137 + } 9138 + } 9139 + ], 9140 + "optional": true 9141 + }, 9142 + { 9143 + "id": "certId", 9144 + "name": "[1]", 9145 + "type": "tag", 9146 + "class": "CONTEXT", 9147 + "explicit": true, 9148 + "content": [ 9149 + { 9150 + "name": "", 9151 + "type": { 9152 + "name": "CertId", 9153 + "type": "defined" 9154 + } 9155 + } 9156 + ], 9157 + "optional": true 9158 + }, 9159 + { 9160 + "id": "hashVal", 9161 + "name": "BIT STRING", 9162 + "type": "builtin" 9163 + } 9164 + ] 9165 + } 9166 + }, 9167 + "POPODecKeyChallContent": { 9168 + "name": "POPODecKeyChallContent", 9169 + "type": { 9170 + "name": "SEQUENCE", 9171 + "type": "builtin", 9172 + "typeOf": 1, 9173 + "content": [ 9174 + { 9175 + "name": "Challenge", 9176 + "type": "defined" 9177 + } 9178 + ] 9179 + } 9180 + }, 9181 + "Challenge": { 9182 + "name": "Challenge", 9183 + "type": { 9184 + "name": "SEQUENCE", 9185 + "type": "builtin", 9186 + "content": [ 9187 + { 9188 + "id": "owf", 9189 + "name": "AlgorithmIdentifier", 9190 + "type": "defined", 9191 + "optional": true 9192 + }, 9193 + { 9194 + "id": "witness", 9195 + "name": "OCTET STRING", 9196 + "type": "builtin" 9197 + }, 9198 + { 9199 + "id": "challenge", 9200 + "name": "OCTET STRING", 9201 + "type": "builtin" 9202 + } 9203 + ] 9204 + } 9205 + }, 9206 + "POPODecKeyRespContent": { 9207 + "name": "POPODecKeyRespContent", 9208 + "type": { 9209 + "name": "SEQUENCE", 9210 + "type": "builtin", 9211 + "typeOf": 1, 9212 + "content": [ 9213 + { 9214 + "name": "INTEGER", 9215 + "type": "builtin" 9216 + } 9217 + ] 9218 + } 9219 + }, 9220 + "CertRepMessage": { 9221 + "name": "CertRepMessage", 9222 + "type": { 9223 + "name": "SEQUENCE", 9224 + "type": "builtin", 9225 + "content": [ 9226 + { 9227 + "id": "caPubs", 9228 + "name": "[1]", 9229 + "type": "tag", 9230 + "class": "CONTEXT", 9231 + "explicit": true, 9232 + "content": [ 9233 + { 9234 + "name": "", 9235 + "type": { 9236 + "name": "SEQUENCE", 9237 + "type": "builtin", 9238 + "typeOf": 1, 9239 + "size": [ 9240 + 1, 9241 + "MAX" 9242 + ], 9243 + "content": [ 9244 + { 9245 + "name": "CMPCertificate", 9246 + "type": "defined" 9247 + } 9248 + ] 9249 + } 9250 + } 9251 + ], 9252 + "optional": true 9253 + }, 9254 + { 9255 + "id": "response", 9256 + "name": "SEQUENCE", 9257 + "type": "builtin", 9258 + "typeOf": 1, 9259 + "content": [ 9260 + { 9261 + "name": "CertResponse", 9262 + "type": "defined" 9263 + } 9264 + ] 9265 + } 9266 + ] 9267 + } 9268 + }, 9269 + "CertResponse": { 9270 + "name": "CertResponse", 9271 + "type": { 9272 + "name": "SEQUENCE", 9273 + "type": "builtin", 9274 + "content": [ 9275 + { 9276 + "id": "certReqId", 9277 + "name": "INTEGER", 9278 + "type": "builtin" 9279 + }, 9280 + { 9281 + "id": "status", 9282 + "name": "PKIStatusInfo", 9283 + "type": "defined" 9284 + }, 9285 + { 9286 + "id": "certifiedKeyPair", 9287 + "name": "CertifiedKeyPair", 9288 + "type": "defined", 9289 + "optional": true 9290 + }, 9291 + { 9292 + "id": "rspInfo", 9293 + "name": "OCTET STRING", 9294 + "type": "builtin", 9295 + "optional": true 9296 + } 9297 + ] 9298 + } 9299 + }, 9300 + "CertifiedKeyPair": { 9301 + "name": "CertifiedKeyPair", 9302 + "type": { 9303 + "name": "SEQUENCE", 9304 + "type": "builtin", 9305 + "content": [ 9306 + { 9307 + "id": "certOrEncCert", 9308 + "name": "CertOrEncCert", 9309 + "type": "defined" 9310 + }, 9311 + { 9312 + "id": "privateKey", 9313 + "name": "[0]", 9314 + "type": "tag", 9315 + "class": "CONTEXT", 9316 + "explicit": true, 9317 + "content": [ 9318 + { 9319 + "name": "", 9320 + "type": { 9321 + "name": "EncryptedValue", 9322 + "type": "defined" 9323 + } 9324 + } 9325 + ], 9326 + "optional": true 9327 + }, 9328 + { 9329 + "id": "publicationInfo", 9330 + "name": "[1]", 9331 + "type": "tag", 9332 + "class": "CONTEXT", 9333 + "explicit": true, 9334 + "content": [ 9335 + { 9336 + "name": "", 9337 + "type": { 9338 + "name": "PKIPublicationInfo", 9339 + "type": "defined" 9340 + } 9341 + } 9342 + ], 9343 + "optional": true 9344 + } 9345 + ] 9346 + } 9347 + }, 9348 + "CertOrEncCert": { 9349 + "name": "CertOrEncCert", 9350 + "type": { 9351 + "name": "CHOICE", 9352 + "type": "builtin", 9353 + "content": [ 9354 + { 9355 + "id": "certificate", 9356 + "name": "[0]", 9357 + "type": "tag", 9358 + "class": "CONTEXT", 9359 + "explicit": true, 9360 + "content": [ 9361 + { 9362 + "name": "", 9363 + "type": { 9364 + "name": "CMPCertificate", 9365 + "type": "defined" 9366 + } 9367 + } 9368 + ] 9369 + }, 9370 + { 9371 + "id": "encryptedCert", 9372 + "name": "[1]", 9373 + "type": "tag", 9374 + "class": "CONTEXT", 9375 + "explicit": true, 9376 + "content": [ 9377 + { 9378 + "name": "", 9379 + "type": { 9380 + "name": "EncryptedValue", 9381 + "type": "defined" 9382 + } 9383 + } 9384 + ] 9385 + } 9386 + ] 9387 + } 9388 + }, 9389 + "KeyRecRepContent": { 9390 + "name": "KeyRecRepContent", 9391 + "type": { 9392 + "name": "SEQUENCE", 9393 + "type": "builtin", 9394 + "content": [ 9395 + { 9396 + "id": "status", 9397 + "name": "PKIStatusInfo", 9398 + "type": "defined" 9399 + }, 9400 + { 9401 + "id": "newSigCert", 9402 + "name": "[0]", 9403 + "type": "tag", 9404 + "class": "CONTEXT", 9405 + "explicit": true, 9406 + "content": [ 9407 + { 9408 + "name": "", 9409 + "type": { 9410 + "name": "CMPCertificate", 9411 + "type": "defined" 9412 + } 9413 + } 9414 + ], 9415 + "optional": true 9416 + }, 9417 + { 9418 + "id": "caCerts", 9419 + "name": "[1]", 9420 + "type": "tag", 9421 + "class": "CONTEXT", 9422 + "explicit": true, 9423 + "content": [ 9424 + { 9425 + "name": "", 9426 + "type": { 9427 + "name": "SEQUENCE", 9428 + "type": "builtin", 9429 + "typeOf": 1, 9430 + "size": [ 9431 + 1, 9432 + "MAX" 9433 + ], 9434 + "content": [ 9435 + { 9436 + "name": "CMPCertificate", 9437 + "type": "defined" 9438 + } 9439 + ] 9440 + } 9441 + } 9442 + ], 9443 + "optional": true 9444 + }, 9445 + { 9446 + "id": "keyPairHist", 9447 + "name": "[2]", 9448 + "type": "tag", 9449 + "class": "CONTEXT", 9450 + "explicit": true, 9451 + "content": [ 9452 + { 9453 + "name": "", 9454 + "type": { 9455 + "name": "SEQUENCE", 9456 + "type": "builtin", 9457 + "typeOf": 1, 9458 + "size": [ 9459 + 1, 9460 + "MAX" 9461 + ], 9462 + "content": [ 9463 + { 9464 + "name": "CertifiedKeyPair", 9465 + "type": "defined" 9466 + } 9467 + ] 9468 + } 9469 + } 9470 + ], 9471 + "optional": true 9472 + } 9473 + ] 9474 + } 9475 + }, 9476 + "RevReqContent": { 9477 + "name": "RevReqContent", 9478 + "type": { 9479 + "name": "SEQUENCE", 9480 + "type": "builtin", 9481 + "typeOf": 1, 9482 + "content": [ 9483 + { 9484 + "name": "RevDetails", 9485 + "type": "defined" 9486 + } 9487 + ] 9488 + } 9489 + }, 9490 + "RevDetails": { 9491 + "name": "RevDetails", 9492 + "type": { 9493 + "name": "SEQUENCE", 9494 + "type": "builtin", 9495 + "content": [ 9496 + { 9497 + "id": "certDetails", 9498 + "name": "CertTemplate", 9499 + "type": "defined" 9500 + }, 9501 + { 9502 + "id": "crlEntryDetails", 9503 + "name": "Extensions", 9504 + "type": "defined", 9505 + "optional": true 9506 + } 9507 + ] 9508 + } 9509 + }, 9510 + "RevRepContent": { 9511 + "name": "RevRepContent", 9512 + "type": { 9513 + "name": "SEQUENCE", 9514 + "type": "builtin", 9515 + "content": [ 9516 + { 9517 + "id": "status", 9518 + "name": "SEQUENCE", 9519 + "type": "builtin", 9520 + "typeOf": 1, 9521 + "size": [ 9522 + 1, 9523 + "MAX" 9524 + ], 9525 + "content": [ 9526 + { 9527 + "name": "PKIStatusInfo", 9528 + "type": "defined" 9529 + } 9530 + ] 9531 + }, 9532 + { 9533 + "id": "revCerts", 9534 + "name": "[0]", 9535 + "type": "tag", 9536 + "class": "CONTEXT", 9537 + "explicit": true, 9538 + "content": [ 9539 + { 9540 + "name": "", 9541 + "type": { 9542 + "name": "SEQUENCE", 9543 + "type": "builtin", 9544 + "typeOf": 1, 9545 + "size": [ 9546 + 1, 9547 + "MAX" 9548 + ], 9549 + "content": [ 9550 + { 9551 + "name": "CertId", 9552 + "type": "defined" 9553 + } 9554 + ] 9555 + } 9556 + } 9557 + ], 9558 + "optional": true 9559 + }, 9560 + { 9561 + "id": "crls", 9562 + "name": "[1]", 9563 + "type": "tag", 9564 + "class": "CONTEXT", 9565 + "explicit": true, 9566 + "content": [ 9567 + { 9568 + "name": "", 9569 + "type": { 9570 + "name": "SEQUENCE", 9571 + "type": "builtin", 9572 + "typeOf": 1, 9573 + "size": [ 9574 + 1, 9575 + "MAX" 9576 + ], 9577 + "content": [ 9578 + { 9579 + "name": "CertificateList", 9580 + "type": "defined" 9581 + } 9582 + ] 9583 + } 9584 + } 9585 + ], 9586 + "optional": true 9587 + } 9588 + ] 9589 + } 9590 + }, 9591 + "CAKeyUpdAnnContent": { 9592 + "name": "CAKeyUpdAnnContent", 9593 + "type": { 9594 + "name": "SEQUENCE", 9595 + "type": "builtin", 9596 + "content": [ 9597 + { 9598 + "id": "oldWithNew", 9599 + "name": "CMPCertificate", 9600 + "type": "defined" 9601 + }, 9602 + { 9603 + "id": "newWithOld", 9604 + "name": "CMPCertificate", 9605 + "type": "defined" 9606 + }, 9607 + { 9608 + "id": "newWithNew", 9609 + "name": "CMPCertificate", 9610 + "type": "defined" 9611 + } 9612 + ] 9613 + } 9614 + }, 9615 + "CertAnnContent": { 9616 + "name": "CertAnnContent", 9617 + "type": { 9618 + "name": "CMPCertificate", 9619 + "type": "defined" 9620 + } 9621 + }, 9622 + "RevAnnContent": { 9623 + "name": "RevAnnContent", 9624 + "type": { 9625 + "name": "SEQUENCE", 9626 + "type": "builtin", 9627 + "content": [ 9628 + { 9629 + "id": "status", 9630 + "name": "PKIStatus", 9631 + "type": "defined" 9632 + }, 9633 + { 9634 + "id": "certId", 9635 + "name": "CertId", 9636 + "type": "defined" 9637 + }, 9638 + { 9639 + "id": "willBeRevokedAt", 9640 + "name": "GeneralizedTime", 9641 + "type": "builtin" 9642 + }, 9643 + { 9644 + "id": "badSinceDate", 9645 + "name": "GeneralizedTime", 9646 + "type": "builtin" 9647 + }, 9648 + { 9649 + "id": "crlDetails", 9650 + "name": "Extensions", 9651 + "type": "defined", 9652 + "optional": true 9653 + } 9654 + ] 9655 + } 9656 + }, 9657 + "CRLAnnContent": { 9658 + "name": "CRLAnnContent", 9659 + "type": { 9660 + "name": "SEQUENCE", 9661 + "type": "builtin", 9662 + "typeOf": 1, 9663 + "content": [ 9664 + { 9665 + "name": "CertificateList", 9666 + "type": "defined" 9667 + } 9668 + ] 9669 + } 9670 + }, 9671 + "CertConfirmContent": { 9672 + "name": "CertConfirmContent", 9673 + "type": { 9674 + "name": "SEQUENCE", 9675 + "type": "builtin", 9676 + "typeOf": 1, 9677 + "content": [ 9678 + { 9679 + "name": "CertStatus", 9680 + "type": "defined" 9681 + } 9682 + ] 9683 + } 9684 + }, 9685 + "CertStatus": { 9686 + "name": "CertStatus", 9687 + "type": { 9688 + "name": "SEQUENCE", 9689 + "type": "builtin", 9690 + "content": [ 9691 + { 9692 + "id": "certHash", 9693 + "name": "OCTET STRING", 9694 + "type": "builtin" 9695 + }, 9696 + { 9697 + "id": "certReqId", 9698 + "name": "INTEGER", 9699 + "type": "builtin" 9700 + }, 9701 + { 9702 + "id": "statusInfo", 9703 + "name": "PKIStatusInfo", 9704 + "type": "defined", 9705 + "optional": true 9706 + } 9707 + ] 9708 + } 9709 + }, 9710 + "PKIConfirmContent": { 9711 + "name": "PKIConfirmContent", 9712 + "type": { 9713 + "name": "NULL", 9714 + "type": "builtin" 9715 + } 9716 + }, 9717 + "InfoTypeAndValue": { 9718 + "name": "InfoTypeAndValue", 9719 + "type": { 9720 + "name": "SEQUENCE", 9721 + "type": "builtin", 9722 + "content": [ 9723 + { 9724 + "id": "infoType", 9725 + "name": "OBJECT IDENTIFIER", 9726 + "type": "builtin" 9727 + }, 9728 + { 9729 + "id": "infoValue", 9730 + "name": "ANY", 9731 + "type": "builtin", 9732 + "definedBy": "infoType", 9733 + "optional": true 9734 + } 9735 + ] 9736 + } 9737 + }, 9738 + "GenMsgContent": { 9739 + "name": "GenMsgContent", 9740 + "type": { 9741 + "name": "SEQUENCE", 9742 + "type": "builtin", 9743 + "typeOf": 1, 9744 + "content": [ 9745 + { 9746 + "name": "InfoTypeAndValue", 9747 + "type": "defined" 9748 + } 9749 + ] 9750 + } 9751 + }, 9752 + "GenRepContent": { 9753 + "name": "GenRepContent", 9754 + "type": { 9755 + "name": "SEQUENCE", 9756 + "type": "builtin", 9757 + "typeOf": 1, 9758 + "content": [ 9759 + { 9760 + "name": "InfoTypeAndValue", 9761 + "type": "defined" 9762 + } 9763 + ] 9764 + } 9765 + }, 9766 + "ErrorMsgContent": { 9767 + "name": "ErrorMsgContent", 9768 + "type": { 9769 + "name": "SEQUENCE", 9770 + "type": "builtin", 9771 + "content": [ 9772 + { 9773 + "id": "pKIStatusInfo", 9774 + "name": "PKIStatusInfo", 9775 + "type": "defined" 9776 + }, 9777 + { 9778 + "id": "errorCode", 9779 + "name": "INTEGER", 9780 + "type": "builtin", 9781 + "optional": true 9782 + }, 9783 + { 9784 + "id": "errorDetails", 9785 + "name": "PKIFreeText", 9786 + "type": "defined", 9787 + "optional": true 9788 + } 9789 + ] 9790 + } 9791 + }, 9792 + "PollReqContent": { 9793 + "name": "PollReqContent", 9794 + "type": { 9795 + "name": "SEQUENCE", 9796 + "type": "builtin", 9797 + "typeOf": 1, 9798 + "content": [ 9799 + { 9800 + "name": "SEQUENCE", 9801 + "type": "builtin", 9802 + "content": [ 9803 + { 9804 + "id": "certReqId", 9805 + "name": "INTEGER", 9806 + "type": "builtin" 9807 + } 9808 + ] 9809 + } 9810 + ] 9811 + } 9812 + }, 9813 + "PollRepContent": { 9814 + "name": "PollRepContent", 9815 + "type": { 9816 + "name": "SEQUENCE", 9817 + "type": "builtin", 9818 + "typeOf": 1, 9819 + "content": [ 9820 + { 9821 + "name": "SEQUENCE", 9822 + "type": "builtin", 9823 + "content": [ 9824 + { 9825 + "id": "certReqId", 9826 + "name": "INTEGER", 9827 + "type": "builtin" 9828 + }, 9829 + { 9830 + "id": "checkAfter", 9831 + "name": "INTEGER", 9832 + "type": "builtin" 9833 + }, 9834 + { 9835 + "id": "reason", 9836 + "name": "PKIFreeText", 9837 + "type": "defined", 9838 + "optional": true 9839 + } 9840 + ] 9841 + } 9842 + ] 9843 + } 9844 + } 9845 + } 9846 + }, 9847 + "1.2.840.113549.1.1.0.1": { 9848 + "name": "PKCS-1", 9849 + "oid": "1.2.840.113549.1.1.0.1", 9850 + "source": "rfc8017.txt", 9851 + "tagDefault": "EXPLICIT", 9852 + "imports": { 9853 + "2.16.840.1.101.3.4.2": { 9854 + "name": "NIST-SHA2", 9855 + "oid": "2.16.840.1.101.3.4.2", 9856 + "types": [ 9857 + "id-sha224", 9858 + "id-sha256", 9859 + "id-sha384", 9860 + "id-sha512", 9861 + "id-sha512-224", 9862 + "id-sha512-256" 9863 + ] 9864 + } 9865 + }, 9866 + "values": { 9867 + "pkcs-1": { 9868 + "name": "pkcs-1", 9869 + "type": { 9870 + "name": "OBJECT IDENTIFIER", 9871 + "type": "builtin" 9872 + }, 9873 + "value": "1.2.840.113549.1.1" 9874 + }, 9875 + "rsaEncryption": { 9876 + "name": "rsaEncryption", 9877 + "type": { 9878 + "name": "OBJECT IDENTIFIER", 9879 + "type": "builtin" 9880 + }, 9881 + "value": "1.2.840.113549.1.1.1" 9882 + }, 9883 + "id-RSAES-OAEP": { 9884 + "name": "id-RSAES-OAEP", 9885 + "type": { 9886 + "name": "OBJECT IDENTIFIER", 9887 + "type": "builtin" 9888 + }, 9889 + "value": "1.2.840.113549.1.1.7" 9890 + }, 9891 + "id-pSpecified": { 9892 + "name": "id-pSpecified", 9893 + "type": { 9894 + "name": "OBJECT IDENTIFIER", 9895 + "type": "builtin" 9896 + }, 9897 + "value": "1.2.840.113549.1.1.9" 9898 + }, 9899 + "id-RSASSA-PSS": { 9900 + "name": "id-RSASSA-PSS", 9901 + "type": { 9902 + "name": "OBJECT IDENTIFIER", 9903 + "type": "builtin" 9904 + }, 9905 + "value": "1.2.840.113549.1.1.10" 9906 + }, 9907 + "md2WithRSAEncryption": { 9908 + "name": "md2WithRSAEncryption", 9909 + "type": { 9910 + "name": "OBJECT IDENTIFIER", 9911 + "type": "builtin" 9912 + }, 9913 + "value": "1.2.840.113549.1.1.2" 9914 + }, 9915 + "md5WithRSAEncryption": { 9916 + "name": "md5WithRSAEncryption", 9917 + "type": { 9918 + "name": "OBJECT IDENTIFIER", 9919 + "type": "builtin" 9920 + }, 9921 + "value": "1.2.840.113549.1.1.4" 9922 + }, 9923 + "sha1WithRSAEncryption": { 9924 + "name": "sha1WithRSAEncryption", 9925 + "type": { 9926 + "name": "OBJECT IDENTIFIER", 9927 + "type": "builtin" 9928 + }, 9929 + "value": "1.2.840.113549.1.1.5" 9930 + }, 9931 + "sha224WithRSAEncryption": { 9932 + "name": "sha224WithRSAEncryption", 9933 + "type": { 9934 + "name": "OBJECT IDENTIFIER", 9935 + "type": "builtin" 9936 + }, 9937 + "value": "1.2.840.113549.1.1.14" 9938 + }, 9939 + "sha256WithRSAEncryption": { 9940 + "name": "sha256WithRSAEncryption", 9941 + "type": { 9942 + "name": "OBJECT IDENTIFIER", 9943 + "type": "builtin" 9944 + }, 9945 + "value": "1.2.840.113549.1.1.11" 9946 + }, 9947 + "sha384WithRSAEncryption": { 9948 + "name": "sha384WithRSAEncryption", 9949 + "type": { 9950 + "name": "OBJECT IDENTIFIER", 9951 + "type": "builtin" 9952 + }, 9953 + "value": "1.2.840.113549.1.1.12" 9954 + }, 9955 + "sha512WithRSAEncryption": { 9956 + "name": "sha512WithRSAEncryption", 9957 + "type": { 9958 + "name": "OBJECT IDENTIFIER", 9959 + "type": "builtin" 9960 + }, 9961 + "value": "1.2.840.113549.1.1.13" 9962 + }, 9963 + "sha512-224WithRSAEncryption": { 9964 + "name": "sha512-224WithRSAEncryption", 9965 + "type": { 9966 + "name": "OBJECT IDENTIFIER", 9967 + "type": "builtin" 9968 + }, 9969 + "value": "1.2.840.113549.1.1.15" 9970 + }, 9971 + "sha512-256WithRSAEncryption": { 9972 + "name": "sha512-256WithRSAEncryption", 9973 + "type": { 9974 + "name": "OBJECT IDENTIFIER", 9975 + "type": "builtin" 9976 + }, 9977 + "value": "1.2.840.113549.1.1.16" 9978 + }, 9979 + "id-sha1": { 9980 + "name": "id-sha1", 9981 + "type": { 9982 + "name": "OBJECT IDENTIFIER", 9983 + "type": "builtin" 9984 + }, 9985 + "value": "1.3.14.3.2.26" 9986 + }, 9987 + "id-md2": { 9988 + "name": "id-md2", 9989 + "type": { 9990 + "name": "OBJECT IDENTIFIER", 9991 + "type": "builtin" 9992 + }, 9993 + "value": "1.2.840.113549.2.2" 9994 + }, 9995 + "id-md5": { 9996 + "name": "id-md5", 9997 + "type": { 9998 + "name": "OBJECT IDENTIFIER", 9999 + "type": "builtin" 10000 + }, 10001 + "value": "1.2.840.113549.2.5" 10002 + }, 10003 + "id-mgf1": { 10004 + "name": "id-mgf1", 10005 + "type": { 10006 + "name": "OBJECT IDENTIFIER", 10007 + "type": "builtin" 10008 + }, 10009 + "value": "1.2.840.113549.1.1.8" 10010 + } 10011 + }, 10012 + "types": { 10013 + "AlgorithmIdentifier": { 10014 + "name": "AlgorithmIdentifier", 10015 + "type": { 10016 + "name": "ANY", 10017 + "type": "builtin" 10018 + } 10019 + }, 10020 + "HashAlgorithm": { 10021 + "name": "HashAlgorithm", 10022 + "type": { 10023 + "name": "AlgorithmIdentifier", 10024 + "type": "defined" 10025 + } 10026 + }, 10027 + "SHA1Parameters": { 10028 + "name": "SHA1Parameters", 10029 + "type": { 10030 + "name": "NULL", 10031 + "type": "builtin" 10032 + } 10033 + }, 10034 + "MaskGenAlgorithm": { 10035 + "name": "MaskGenAlgorithm", 10036 + "type": { 10037 + "name": "AlgorithmIdentifier", 10038 + "type": "defined" 10039 + } 10040 + }, 10041 + "EncodingParameters": { 10042 + "name": "EncodingParameters", 10043 + "type": { 10044 + "name": "OCTET STRING", 10045 + "type": "builtin" 10046 + } 10047 + }, 10048 + "PSourceAlgorithm": { 10049 + "name": "PSourceAlgorithm", 10050 + "type": { 10051 + "name": "AlgorithmIdentifier", 10052 + "type": "defined" 10053 + } 10054 + }, 10055 + "RSAPublicKey": { 10056 + "name": "RSAPublicKey", 10057 + "type": { 10058 + "name": "SEQUENCE", 10059 + "type": "builtin", 10060 + "content": [ 10061 + { 10062 + "id": "modulus", 10063 + "name": "INTEGER", 10064 + "type": "builtin" 10065 + }, 10066 + { 10067 + "id": "publicExponent", 10068 + "name": "INTEGER", 10069 + "type": "builtin" 10070 + } 10071 + ] 10072 + } 10073 + }, 10074 + "RSAPrivateKey": { 10075 + "name": "RSAPrivateKey", 10076 + "type": { 10077 + "name": "SEQUENCE", 10078 + "type": "builtin", 10079 + "content": [ 10080 + { 10081 + "id": "version", 10082 + "name": "Version", 10083 + "type": "defined" 10084 + }, 10085 + { 10086 + "id": "modulus", 10087 + "name": "INTEGER", 10088 + "type": "builtin" 10089 + }, 10090 + { 10091 + "id": "publicExponent", 10092 + "name": "INTEGER", 10093 + "type": "builtin" 10094 + }, 10095 + { 10096 + "id": "privateExponent", 10097 + "name": "INTEGER", 10098 + "type": "builtin" 10099 + }, 10100 + { 10101 + "id": "prime1", 10102 + "name": "INTEGER", 10103 + "type": "builtin" 10104 + }, 10105 + { 10106 + "id": "prime2", 10107 + "name": "INTEGER", 10108 + "type": "builtin" 10109 + }, 10110 + { 10111 + "id": "exponent1", 10112 + "name": "INTEGER", 10113 + "type": "builtin" 10114 + }, 10115 + { 10116 + "id": "exponent2", 10117 + "name": "INTEGER", 10118 + "type": "builtin" 10119 + }, 10120 + { 10121 + "id": "coefficient", 10122 + "name": "INTEGER", 10123 + "type": "builtin" 10124 + }, 10125 + { 10126 + "id": "otherPrimeInfos", 10127 + "name": "OtherPrimeInfos", 10128 + "type": "defined", 10129 + "optional": true 10130 + } 10131 + ] 10132 + } 10133 + }, 10134 + "Version": { 10135 + "name": "Version", 10136 + "type": { 10137 + "name": "INTEGER", 10138 + "type": "builtin", 10139 + "content": { 10140 + "two-prime": 0, 10141 + "multi": 1 10142 + } 10143 + } 10144 + }, 10145 + "OtherPrimeInfos": { 10146 + "name": "OtherPrimeInfos", 10147 + "type": { 10148 + "name": "SEQUENCE", 10149 + "type": "builtin", 10150 + "typeOf": 1, 10151 + "size": [ 10152 + 1, 10153 + "MAX" 10154 + ], 10155 + "content": [ 10156 + { 10157 + "name": "OtherPrimeInfo", 10158 + "type": "defined" 10159 + } 10160 + ] 10161 + } 10162 + }, 10163 + "OtherPrimeInfo": { 10164 + "name": "OtherPrimeInfo", 10165 + "type": { 10166 + "name": "SEQUENCE", 10167 + "type": "builtin", 10168 + "content": [ 10169 + { 10170 + "id": "prime", 10171 + "name": "INTEGER", 10172 + "type": "builtin" 10173 + }, 10174 + { 10175 + "id": "exponent", 10176 + "name": "INTEGER", 10177 + "type": "builtin" 10178 + }, 10179 + { 10180 + "id": "coefficient", 10181 + "name": "INTEGER", 10182 + "type": "builtin" 10183 + } 10184 + ] 10185 + } 10186 + }, 10187 + "RSAES-OAEP-params": { 10188 + "name": "RSAES-OAEP-params", 10189 + "type": { 10190 + "name": "SEQUENCE", 10191 + "type": "builtin", 10192 + "content": [ 10193 + { 10194 + "id": "hashAlgorithm", 10195 + "name": "[0]", 10196 + "type": "tag", 10197 + "class": "CONTEXT", 10198 + "explicit": true, 10199 + "content": [ 10200 + { 10201 + "name": "", 10202 + "type": { 10203 + "name": "HashAlgorithm", 10204 + "type": "defined" 10205 + } 10206 + } 10207 + ], 10208 + "default": "sha1" 10209 + }, 10210 + { 10211 + "id": "maskGenAlgorithm", 10212 + "name": "[1]", 10213 + "type": "tag", 10214 + "class": "CONTEXT", 10215 + "explicit": true, 10216 + "content": [ 10217 + { 10218 + "name": "", 10219 + "type": { 10220 + "name": "MaskGenAlgorithm", 10221 + "type": "defined" 10222 + } 10223 + } 10224 + ], 10225 + "default": "mgf1SHA1" 10226 + }, 10227 + { 10228 + "id": "pSourceAlgorithm", 10229 + "name": "[2]", 10230 + "type": "tag", 10231 + "class": "CONTEXT", 10232 + "explicit": true, 10233 + "content": [ 10234 + { 10235 + "name": "", 10236 + "type": { 10237 + "name": "PSourceAlgorithm", 10238 + "type": "defined" 10239 + } 10240 + } 10241 + ], 10242 + "default": "pSpecifiedEmpty" 10243 + } 10244 + ] 10245 + } 10246 + }, 10247 + "RSAES-AlgorithmIdentifier": { 10248 + "name": "RSAES-AlgorithmIdentifier", 10249 + "type": { 10250 + "name": "AlgorithmIdentifier", 10251 + "type": "defined" 10252 + } 10253 + }, 10254 + "RSASSA-PSS-params": { 10255 + "name": "RSASSA-PSS-params", 10256 + "type": { 10257 + "name": "SEQUENCE", 10258 + "type": "builtin", 10259 + "content": [ 10260 + { 10261 + "id": "hashAlgorithm", 10262 + "name": "[0]", 10263 + "type": "tag", 10264 + "class": "CONTEXT", 10265 + "explicit": true, 10266 + "content": [ 10267 + { 10268 + "name": "", 10269 + "type": { 10270 + "name": "HashAlgorithm", 10271 + "type": "defined" 10272 + } 10273 + } 10274 + ], 10275 + "default": "sha1" 10276 + }, 10277 + { 10278 + "id": "maskGenAlgorithm", 10279 + "name": "[1]", 10280 + "type": "tag", 10281 + "class": "CONTEXT", 10282 + "explicit": true, 10283 + "content": [ 10284 + { 10285 + "name": "", 10286 + "type": { 10287 + "name": "MaskGenAlgorithm", 10288 + "type": "defined" 10289 + } 10290 + } 10291 + ], 10292 + "default": "mgf1SHA1" 10293 + }, 10294 + { 10295 + "id": "saltLength", 10296 + "name": "[2]", 10297 + "type": "tag", 10298 + "class": "CONTEXT", 10299 + "explicit": true, 10300 + "content": [ 10301 + { 10302 + "name": "", 10303 + "type": { 10304 + "name": "INTEGER", 10305 + "type": "builtin" 10306 + } 10307 + } 10308 + ], 10309 + "default": 20 10310 + }, 10311 + { 10312 + "id": "trailerField", 10313 + "name": "[3]", 10314 + "type": "tag", 10315 + "class": "CONTEXT", 10316 + "explicit": true, 10317 + "content": [ 10318 + { 10319 + "name": "", 10320 + "type": { 10321 + "name": "TrailerField", 10322 + "type": "defined" 10323 + } 10324 + } 10325 + ], 10326 + "default": "trailerFieldBC" 10327 + } 10328 + ] 10329 + } 10330 + }, 10331 + "TrailerField": { 10332 + "name": "TrailerField", 10333 + "type": { 10334 + "name": "INTEGER", 10335 + "type": "builtin", 10336 + "content": { 10337 + "trailerFieldBC": 1 10338 + } 10339 + } 10340 + }, 10341 + "RSASSA-AlgorithmIdentifier": { 10342 + "name": "RSASSA-AlgorithmIdentifier", 10343 + "type": { 10344 + "name": "AlgorithmIdentifier", 10345 + "type": "defined" 10346 + } 10347 + }, 10348 + "DigestInfo": { 10349 + "name": "DigestInfo", 10350 + "type": { 10351 + "name": "SEQUENCE", 10352 + "type": "builtin", 10353 + "content": [ 10354 + { 10355 + "id": "digestAlgorithm", 10356 + "name": "DigestAlgorithm", 10357 + "type": "defined" 10358 + }, 10359 + { 10360 + "id": "digest", 10361 + "name": "OCTET STRING", 10362 + "type": "builtin" 10363 + } 10364 + ] 10365 + } 10366 + }, 10367 + "DigestAlgorithm": { 10368 + "name": "DigestAlgorithm", 10369 + "type": { 10370 + "name": "AlgorithmIdentifier", 10371 + "type": "defined" 10372 + } 10373 + } 10374 + } 10375 + }, 10376 + "1.3.6.1.1.18": { 10377 + "name": "Lightweight-Directory-Access-Protocol-V3", 10378 + "oid": "1.3.6.1.1.18", 10379 + "source": "rfc4511.txt", 10380 + "tagDefault": "IMPLICIT", 10381 + "values": { 10382 + "maxInt": { 10383 + "name": "maxInt", 10384 + "type": { 10385 + "name": "INTEGER", 10386 + "type": "builtin" 10387 + }, 10388 + "value": 2147483647 10389 + } 10390 + }, 10391 + "types": { 10392 + "LDAPMessage": { 10393 + "name": "LDAPMessage", 10394 + "type": { 10395 + "name": "SEQUENCE", 10396 + "type": "builtin", 10397 + "content": [ 10398 + { 10399 + "id": "messageID", 10400 + "name": "MessageID", 10401 + "type": "defined" 10402 + }, 10403 + { 10404 + "id": "protocolOp", 10405 + "name": "CHOICE", 10406 + "type": "builtin", 10407 + "content": [ 10408 + { 10409 + "id": "bindRequest", 10410 + "name": "BindRequest", 10411 + "type": "defined" 10412 + }, 10413 + { 10414 + "id": "bindResponse", 10415 + "name": "BindResponse", 10416 + "type": "defined" 10417 + }, 10418 + { 10419 + "id": "unbindRequest", 10420 + "name": "UnbindRequest", 10421 + "type": "defined" 10422 + }, 10423 + { 10424 + "id": "searchRequest", 10425 + "name": "SearchRequest", 10426 + "type": "defined" 10427 + }, 10428 + { 10429 + "id": "searchResEntry", 10430 + "name": "SearchResultEntry", 10431 + "type": "defined" 10432 + }, 10433 + { 10434 + "id": "searchResDone", 10435 + "name": "SearchResultDone", 10436 + "type": "defined" 10437 + }, 10438 + { 10439 + "id": "searchResRef", 10440 + "name": "SearchResultReference", 10441 + "type": "defined" 10442 + }, 10443 + { 10444 + "id": "modifyRequest", 10445 + "name": "ModifyRequest", 10446 + "type": "defined" 10447 + }, 10448 + { 10449 + "id": "modifyResponse", 10450 + "name": "ModifyResponse", 10451 + "type": "defined" 10452 + }, 10453 + { 10454 + "id": "addRequest", 10455 + "name": "AddRequest", 10456 + "type": "defined" 10457 + }, 10458 + { 10459 + "id": "addResponse", 10460 + "name": "AddResponse", 10461 + "type": "defined" 10462 + }, 10463 + { 10464 + "id": "delRequest", 10465 + "name": "DelRequest", 10466 + "type": "defined" 10467 + }, 10468 + { 10469 + "id": "delResponse", 10470 + "name": "DelResponse", 10471 + "type": "defined" 10472 + }, 10473 + { 10474 + "id": "modDNRequest", 10475 + "name": "ModifyDNRequest", 10476 + "type": "defined" 10477 + }, 10478 + { 10479 + "id": "modDNResponse", 10480 + "name": "ModifyDNResponse", 10481 + "type": "defined" 10482 + }, 10483 + { 10484 + "id": "compareRequest", 10485 + "name": "CompareRequest", 10486 + "type": "defined" 10487 + }, 10488 + { 10489 + "id": "compareResponse", 10490 + "name": "CompareResponse", 10491 + "type": "defined" 10492 + }, 10493 + { 10494 + "id": "abandonRequest", 10495 + "name": "AbandonRequest", 10496 + "type": "defined" 10497 + }, 10498 + { 10499 + "id": "extendedReq", 10500 + "name": "ExtendedRequest", 10501 + "type": "defined" 10502 + }, 10503 + { 10504 + "id": "extendedResp", 10505 + "name": "ExtendedResponse", 10506 + "type": "defined" 10507 + }, 10508 + { 10509 + "id": "intermediateResponse", 10510 + "name": "IntermediateResponse", 10511 + "type": "defined" 10512 + } 10513 + ] 10514 + }, 10515 + { 10516 + "id": "controls", 10517 + "name": "[0]", 10518 + "type": "tag", 10519 + "class": "CONTEXT", 10520 + "explicit": false, 10521 + "content": [ 10522 + { 10523 + "name": "", 10524 + "type": { 10525 + "name": "Controls", 10526 + "type": "defined" 10527 + } 10528 + } 10529 + ], 10530 + "optional": true 10531 + } 10532 + ] 10533 + } 10534 + }, 10535 + "MessageID": { 10536 + "name": "MessageID", 10537 + "type": { 10538 + "name": "INTEGER", 10539 + "type": "builtin", 10540 + "range": [ 10541 + 0, 10542 + "maxInt" 10543 + ] 10544 + } 10545 + }, 10546 + "LDAPString": { 10547 + "name": "LDAPString", 10548 + "type": { 10549 + "name": "OCTET STRING", 10550 + "type": "builtin" 10551 + } 10552 + }, 10553 + "LDAPOID": { 10554 + "name": "LDAPOID", 10555 + "type": { 10556 + "name": "OCTET STRING", 10557 + "type": "builtin" 10558 + } 10559 + }, 10560 + "LDAPDN": { 10561 + "name": "LDAPDN", 10562 + "type": { 10563 + "name": "LDAPString", 10564 + "type": "defined" 10565 + } 10566 + }, 10567 + "RelativeLDAPDN": { 10568 + "name": "RelativeLDAPDN", 10569 + "type": { 10570 + "name": "LDAPString", 10571 + "type": "defined" 10572 + } 10573 + }, 10574 + "AttributeDescription": { 10575 + "name": "AttributeDescription", 10576 + "type": { 10577 + "name": "LDAPString", 10578 + "type": "defined" 10579 + } 10580 + }, 10581 + "AttributeValue": { 10582 + "name": "AttributeValue", 10583 + "type": { 10584 + "name": "OCTET STRING", 10585 + "type": "builtin" 10586 + } 10587 + }, 10588 + "AttributeValueAssertion": { 10589 + "name": "AttributeValueAssertion", 10590 + "type": { 10591 + "name": "SEQUENCE", 10592 + "type": "builtin", 10593 + "content": [ 10594 + { 10595 + "id": "attributeDesc", 10596 + "name": "AttributeDescription", 10597 + "type": "defined" 10598 + }, 10599 + { 10600 + "id": "assertionValue", 10601 + "name": "AssertionValue", 10602 + "type": "defined" 10603 + } 10604 + ] 10605 + } 10606 + }, 10607 + "AssertionValue": { 10608 + "name": "AssertionValue", 10609 + "type": { 10610 + "name": "OCTET STRING", 10611 + "type": "builtin" 10612 + } 10613 + }, 10614 + "PartialAttribute": { 10615 + "name": "PartialAttribute", 10616 + "type": { 10617 + "name": "SEQUENCE", 10618 + "type": "builtin", 10619 + "content": [ 10620 + { 10621 + "id": "type", 10622 + "name": "AttributeDescription", 10623 + "type": "defined" 10624 + }, 10625 + { 10626 + "id": "vals", 10627 + "name": "SET", 10628 + "type": "builtin", 10629 + "typeOf": 1, 10630 + "size": [ 10631 + 1, 10632 + "MAX" 10633 + ], 10634 + "content": [ 10635 + { 10636 + "name": "AttributeValue", 10637 + "type": "defined" 10638 + } 10639 + ] 10640 + } 10641 + ] 10642 + } 10643 + }, 10644 + "MatchingRuleId": { 10645 + "name": "MatchingRuleId", 10646 + "type": { 10647 + "name": "LDAPString", 10648 + "type": "defined" 10649 + } 10650 + }, 10651 + "LDAPResult": { 10652 + "name": "LDAPResult", 10653 + "type": { 10654 + "name": "SEQUENCE", 10655 + "type": "builtin", 10656 + "content": [ 10657 + { 10658 + "id": "resultCode", 10659 + "name": "ENUMERATED", 10660 + "type": "builtin", 10661 + "content": { 10662 + "success": 0, 10663 + "operationsError": 1, 10664 + "protocolError": 2, 10665 + "timeLimitExceeded": 3, 10666 + "sizeLimitExceeded": 4, 10667 + "compareFalse": 5, 10668 + "compareTrue": 6, 10669 + "authMethodNotSupported": 7, 10670 + "strongerAuthRequired": 8, 10671 + "referral": 10, 10672 + "adminLimitExceeded": 11, 10673 + "unavailableCriticalExtension": 12, 10674 + "confidentialityRequired": 13, 10675 + "saslBindInProgress": 14, 10676 + "noSuchAttribute": 16, 10677 + "undefinedAttributeType": 17, 10678 + "inappropriateMatching": 18, 10679 + "constraintViolation": 19, 10680 + "attributeOrValueExists": 20, 10681 + "invalidAttributeSyntax": 21, 10682 + "noSuchObject": 32, 10683 + "aliasProblem": 33, 10684 + "invalidDNSyntax": 34, 10685 + "aliasDereferencingProblem": 36, 10686 + "inappropriateAuthentication": 48, 10687 + "invalidCredentials": 49, 10688 + "insufficientAccessRights": 50, 10689 + "busy": 51, 10690 + "unavailable": 52, 10691 + "unwillingToPerform": 53, 10692 + "loopDetect": 54, 10693 + "namingViolation": 64, 10694 + "objectClassViolation": 65, 10695 + "notAllowedOnNonLeaf": 66, 10696 + "notAllowedOnRDN": 67, 10697 + "entryAlreadyExists": 68, 10698 + "objectClassModsProhibited": 69, 10699 + "affectsMultipleDSAs": 71, 10700 + "other": 80 10701 + } 10702 + }, 10703 + { 10704 + "id": "matchedDN", 10705 + "name": "LDAPDN", 10706 + "type": "defined" 10707 + }, 10708 + { 10709 + "id": "diagnosticMessage", 10710 + "name": "LDAPString", 10711 + "type": "defined" 10712 + }, 10713 + { 10714 + "id": "referral", 10715 + "name": "[3]", 10716 + "type": "tag", 10717 + "class": "CONTEXT", 10718 + "explicit": false, 10719 + "content": [ 10720 + { 10721 + "name": "", 10722 + "type": { 10723 + "name": "Referral", 10724 + "type": "defined" 10725 + } 10726 + } 10727 + ], 10728 + "optional": true 10729 + } 10730 + ] 10731 + } 10732 + }, 10733 + "Referral": { 10734 + "name": "Referral", 10735 + "type": { 10736 + "name": "SEQUENCE", 10737 + "type": "builtin", 10738 + "typeOf": 1, 10739 + "size": [ 10740 + 1, 10741 + "MAX" 10742 + ], 10743 + "content": [ 10744 + { 10745 + "name": "URI", 10746 + "type": "defined" 10747 + } 10748 + ] 10749 + } 10750 + }, 10751 + "URI": { 10752 + "name": "URI", 10753 + "type": { 10754 + "name": "LDAPString", 10755 + "type": "defined" 10756 + } 10757 + }, 10758 + "Controls": { 10759 + "name": "Controls", 10760 + "type": { 10761 + "name": "SEQUENCE", 10762 + "type": "builtin", 10763 + "typeOf": 1, 10764 + "content": [ 10765 + { 10766 + "name": "Control", 10767 + "type": "defined" 10768 + } 10769 + ] 10770 + } 10771 + }, 10772 + "Control": { 10773 + "name": "Control", 10774 + "type": { 10775 + "name": "SEQUENCE", 10776 + "type": "builtin", 10777 + "content": [ 10778 + { 10779 + "id": "controlType", 10780 + "name": "LDAPOID", 10781 + "type": "defined" 10782 + }, 10783 + { 10784 + "id": "criticality", 10785 + "name": "BOOLEAN", 10786 + "type": "builtin", 10787 + "default": false 10788 + }, 10789 + { 10790 + "id": "controlValue", 10791 + "name": "OCTET STRING", 10792 + "type": "builtin", 10793 + "optional": true 10794 + } 10795 + ] 10796 + } 10797 + }, 10798 + "BindRequest": { 10799 + "name": "BindRequest", 10800 + "type": { 10801 + "name": "Application 0", 10802 + "type": "tag", 10803 + "class": "APPLICATION", 10804 + "explicit": false, 10805 + "content": [ 10806 + { 10807 + "name": "", 10808 + "type": { 10809 + "name": "SEQUENCE", 10810 + "type": "builtin", 10811 + "content": [ 10812 + { 10813 + "id": "version", 10814 + "name": "INTEGER", 10815 + "type": "builtin", 10816 + "range": [ 10817 + 1, 10818 + 127 10819 + ] 10820 + }, 10821 + { 10822 + "id": "name", 10823 + "name": "LDAPDN", 10824 + "type": "defined" 10825 + }, 10826 + { 10827 + "id": "authentication", 10828 + "name": "AuthenticationChoice", 10829 + "type": "defined" 10830 + } 10831 + ] 10832 + } 10833 + } 10834 + ] 10835 + } 10836 + }, 10837 + "AuthenticationChoice": { 10838 + "name": "AuthenticationChoice", 10839 + "type": { 10840 + "name": "CHOICE", 10841 + "type": "builtin", 10842 + "content": [ 10843 + { 10844 + "id": "simple", 10845 + "name": "[0]", 10846 + "type": "tag", 10847 + "class": "CONTEXT", 10848 + "explicit": false, 10849 + "content": [ 10850 + { 10851 + "name": "", 10852 + "type": { 10853 + "name": "OCTET STRING", 10854 + "type": "builtin" 10855 + } 10856 + } 10857 + ] 10858 + }, 10859 + { 10860 + "id": "sasl", 10861 + "name": "[3]", 10862 + "type": "tag", 10863 + "class": "CONTEXT", 10864 + "explicit": false, 10865 + "content": [ 10866 + { 10867 + "name": "", 10868 + "type": { 10869 + "name": "SaslCredentials", 10870 + "type": "defined" 10871 + } 10872 + } 10873 + ] 10874 + } 10875 + ] 10876 + } 10877 + }, 10878 + "SaslCredentials": { 10879 + "name": "SaslCredentials", 10880 + "type": { 10881 + "name": "SEQUENCE", 10882 + "type": "builtin", 10883 + "content": [ 10884 + { 10885 + "id": "mechanism", 10886 + "name": "LDAPString", 10887 + "type": "defined" 10888 + }, 10889 + { 10890 + "id": "credentials", 10891 + "name": "OCTET STRING", 10892 + "type": "builtin", 10893 + "optional": true 10894 + } 10895 + ] 10896 + } 10897 + }, 10898 + "BindResponse": { 10899 + "name": "BindResponse", 10900 + "type": { 10901 + "name": "ANY", 10902 + "type": "builtin" 10903 + } 10904 + }, 10905 + "UnbindRequest": { 10906 + "name": "UnbindRequest", 10907 + "type": { 10908 + "name": "Application 2", 10909 + "type": "tag", 10910 + "class": "APPLICATION", 10911 + "explicit": false, 10912 + "content": [ 10913 + { 10914 + "name": "", 10915 + "type": { 10916 + "name": "NULL", 10917 + "type": "builtin" 10918 + } 10919 + } 10920 + ] 10921 + } 10922 + }, 10923 + "SearchRequest": { 10924 + "name": "SearchRequest", 10925 + "type": { 10926 + "name": "Application 3", 10927 + "type": "tag", 10928 + "class": "APPLICATION", 10929 + "explicit": false, 10930 + "content": [ 10931 + { 10932 + "name": "", 10933 + "type": { 10934 + "name": "SEQUENCE", 10935 + "type": "builtin", 10936 + "content": [ 10937 + { 10938 + "id": "baseObject", 10939 + "name": "LDAPDN", 10940 + "type": "defined" 10941 + }, 10942 + { 10943 + "id": "scope", 10944 + "name": "ENUMERATED", 10945 + "type": "builtin", 10946 + "content": { 10947 + "baseObject": 0, 10948 + "singleLevel": 1, 10949 + "wholeSubtree": 2 10950 + } 10951 + }, 10952 + { 10953 + "id": "derefAliases", 10954 + "name": "ENUMERATED", 10955 + "type": "builtin", 10956 + "content": { 10957 + "neverDerefAliases": 0, 10958 + "derefInSearching": 1, 10959 + "derefFindingBaseObj": 2, 10960 + "derefAlways": 3 10961 + } 10962 + }, 10963 + { 10964 + "id": "sizeLimit", 10965 + "name": "INTEGER", 10966 + "type": "builtin", 10967 + "range": [ 10968 + 0, 10969 + "maxInt" 10970 + ] 10971 + }, 10972 + { 10973 + "id": "timeLimit", 10974 + "name": "INTEGER", 10975 + "type": "builtin", 10976 + "range": [ 10977 + 0, 10978 + "maxInt" 10979 + ] 10980 + }, 10981 + { 10982 + "id": "typesOnly", 10983 + "name": "BOOLEAN", 10984 + "type": "builtin" 10985 + }, 10986 + { 10987 + "id": "filter", 10988 + "name": "Filter", 10989 + "type": "defined" 10990 + }, 10991 + { 10992 + "id": "attributes", 10993 + "name": "AttributeSelection", 10994 + "type": "defined" 10995 + } 10996 + ] 10997 + } 10998 + } 10999 + ] 11000 + } 11001 + }, 11002 + "AttributeSelection": { 11003 + "name": "AttributeSelection", 11004 + "type": { 11005 + "name": "SEQUENCE", 11006 + "type": "builtin", 11007 + "typeOf": 1, 11008 + "content": [ 11009 + { 11010 + "name": "LDAPString", 11011 + "type": "defined" 11012 + } 11013 + ] 11014 + } 11015 + }, 11016 + "Filter": { 11017 + "name": "Filter", 11018 + "type": { 11019 + "name": "CHOICE", 11020 + "type": "builtin", 11021 + "content": [ 11022 + { 11023 + "id": "and", 11024 + "name": "[0]", 11025 + "type": "tag", 11026 + "class": "CONTEXT", 11027 + "explicit": false, 11028 + "content": [ 11029 + { 11030 + "name": "", 11031 + "type": { 11032 + "name": "SET", 11033 + "type": "builtin", 11034 + "typeOf": 1, 11035 + "size": [ 11036 + 1, 11037 + "MAX" 11038 + ], 11039 + "content": [ 11040 + { 11041 + "name": "Filter", 11042 + "type": "defined" 11043 + } 11044 + ] 11045 + } 11046 + } 11047 + ] 11048 + }, 11049 + { 11050 + "id": "or", 11051 + "name": "[1]", 11052 + "type": "tag", 11053 + "class": "CONTEXT", 11054 + "explicit": false, 11055 + "content": [ 11056 + { 11057 + "name": "", 11058 + "type": { 11059 + "name": "SET", 11060 + "type": "builtin", 11061 + "typeOf": 1, 11062 + "size": [ 11063 + 1, 11064 + "MAX" 11065 + ], 11066 + "content": [ 11067 + { 11068 + "name": "Filter", 11069 + "type": "defined" 11070 + } 11071 + ] 11072 + } 11073 + } 11074 + ] 11075 + }, 11076 + { 11077 + "id": "not", 11078 + "name": "[2]", 11079 + "type": "tag", 11080 + "class": "CONTEXT", 11081 + "explicit": false, 11082 + "content": [ 11083 + { 11084 + "name": "", 11085 + "type": { 11086 + "name": "Filter", 11087 + "type": "defined" 11088 + } 11089 + } 11090 + ] 11091 + }, 11092 + { 11093 + "id": "equalityMatch", 11094 + "name": "[3]", 11095 + "type": "tag", 11096 + "class": "CONTEXT", 11097 + "explicit": false, 11098 + "content": [ 11099 + { 11100 + "name": "", 11101 + "type": { 11102 + "name": "AttributeValueAssertion", 11103 + "type": "defined" 11104 + } 11105 + } 11106 + ] 11107 + }, 11108 + { 11109 + "id": "substrings", 11110 + "name": "[4]", 11111 + "type": "tag", 11112 + "class": "CONTEXT", 11113 + "explicit": false, 11114 + "content": [ 11115 + { 11116 + "name": "", 11117 + "type": { 11118 + "name": "SubstringFilter", 11119 + "type": "defined" 11120 + } 11121 + } 11122 + ] 11123 + }, 11124 + { 11125 + "id": "greaterOrEqual", 11126 + "name": "[5]", 11127 + "type": "tag", 11128 + "class": "CONTEXT", 11129 + "explicit": false, 11130 + "content": [ 11131 + { 11132 + "name": "", 11133 + "type": { 11134 + "name": "AttributeValueAssertion", 11135 + "type": "defined" 11136 + } 11137 + } 11138 + ] 11139 + }, 11140 + { 11141 + "id": "lessOrEqual", 11142 + "name": "[6]", 11143 + "type": "tag", 11144 + "class": "CONTEXT", 11145 + "explicit": false, 11146 + "content": [ 11147 + { 11148 + "name": "", 11149 + "type": { 11150 + "name": "AttributeValueAssertion", 11151 + "type": "defined" 11152 + } 11153 + } 11154 + ] 11155 + }, 11156 + { 11157 + "id": "present", 11158 + "name": "[7]", 11159 + "type": "tag", 11160 + "class": "CONTEXT", 11161 + "explicit": false, 11162 + "content": [ 11163 + { 11164 + "name": "", 11165 + "type": { 11166 + "name": "AttributeDescription", 11167 + "type": "defined" 11168 + } 11169 + } 11170 + ] 11171 + }, 11172 + { 11173 + "id": "approxMatch", 11174 + "name": "[8]", 11175 + "type": "tag", 11176 + "class": "CONTEXT", 11177 + "explicit": false, 11178 + "content": [ 11179 + { 11180 + "name": "", 11181 + "type": { 11182 + "name": "AttributeValueAssertion", 11183 + "type": "defined" 11184 + } 11185 + } 11186 + ] 11187 + }, 11188 + { 11189 + "id": "extensibleMatch", 11190 + "name": "[9]", 11191 + "type": "tag", 11192 + "class": "CONTEXT", 11193 + "explicit": false, 11194 + "content": [ 11195 + { 11196 + "name": "", 11197 + "type": { 11198 + "name": "MatchingRuleAssertion", 11199 + "type": "defined" 11200 + } 11201 + } 11202 + ] 11203 + } 11204 + ] 11205 + } 11206 + }, 11207 + "SubstringFilter": { 11208 + "name": "SubstringFilter", 11209 + "type": { 11210 + "name": "SEQUENCE", 11211 + "type": "builtin", 11212 + "content": [ 11213 + { 11214 + "id": "type", 11215 + "name": "AttributeDescription", 11216 + "type": "defined" 11217 + }, 11218 + { 11219 + "id": "substrings", 11220 + "name": "SEQUENCE", 11221 + "type": "builtin", 11222 + "typeOf": 1, 11223 + "size": [ 11224 + 1, 11225 + "MAX" 11226 + ], 11227 + "content": [ 11228 + { 11229 + "name": "CHOICE", 11230 + "type": "builtin", 11231 + "content": [ 11232 + { 11233 + "id": "initial", 11234 + "name": "[0]", 11235 + "type": "tag", 11236 + "class": "CONTEXT", 11237 + "explicit": false, 11238 + "content": [ 11239 + { 11240 + "name": "", 11241 + "type": { 11242 + "name": "AssertionValue", 11243 + "type": "defined" 11244 + } 11245 + } 11246 + ] 11247 + }, 11248 + { 11249 + "id": "any", 11250 + "name": "[1]", 11251 + "type": "tag", 11252 + "class": "CONTEXT", 11253 + "explicit": false, 11254 + "content": [ 11255 + { 11256 + "name": "", 11257 + "type": { 11258 + "name": "AssertionValue", 11259 + "type": "defined" 11260 + } 11261 + } 11262 + ] 11263 + }, 11264 + { 11265 + "id": "final", 11266 + "name": "[2]", 11267 + "type": "tag", 11268 + "class": "CONTEXT", 11269 + "explicit": false, 11270 + "content": [ 11271 + { 11272 + "name": "", 11273 + "type": { 11274 + "name": "AssertionValue", 11275 + "type": "defined" 11276 + } 11277 + } 11278 + ] 11279 + } 11280 + ] 11281 + } 11282 + ] 11283 + } 11284 + ] 11285 + } 11286 + }, 11287 + "MatchingRuleAssertion": { 11288 + "name": "MatchingRuleAssertion", 11289 + "type": { 11290 + "name": "SEQUENCE", 11291 + "type": "builtin", 11292 + "content": [ 11293 + { 11294 + "id": "matchingRule", 11295 + "name": "[1]", 11296 + "type": "tag", 11297 + "class": "CONTEXT", 11298 + "explicit": false, 11299 + "content": [ 11300 + { 11301 + "name": "", 11302 + "type": { 11303 + "name": "MatchingRuleId", 11304 + "type": "defined" 11305 + } 11306 + } 11307 + ], 11308 + "optional": true 11309 + }, 11310 + { 11311 + "id": "type", 11312 + "name": "[2]", 11313 + "type": "tag", 11314 + "class": "CONTEXT", 11315 + "explicit": false, 11316 + "content": [ 11317 + { 11318 + "name": "", 11319 + "type": { 11320 + "name": "AttributeDescription", 11321 + "type": "defined" 11322 + } 11323 + } 11324 + ], 11325 + "optional": true 11326 + }, 11327 + { 11328 + "id": "matchValue", 11329 + "name": "[3]", 11330 + "type": "tag", 11331 + "class": "CONTEXT", 11332 + "explicit": false, 11333 + "content": [ 11334 + { 11335 + "name": "", 11336 + "type": { 11337 + "name": "AssertionValue", 11338 + "type": "defined" 11339 + } 11340 + } 11341 + ] 11342 + }, 11343 + { 11344 + "id": "dnAttributes", 11345 + "name": "[4]", 11346 + "type": "tag", 11347 + "class": "CONTEXT", 11348 + "explicit": false, 11349 + "content": [ 11350 + { 11351 + "name": "", 11352 + "type": { 11353 + "name": "BOOLEAN", 11354 + "type": "builtin" 11355 + } 11356 + } 11357 + ], 11358 + "default": false 11359 + } 11360 + ] 11361 + } 11362 + }, 11363 + "SearchResultEntry": { 11364 + "name": "SearchResultEntry", 11365 + "type": { 11366 + "name": "Application 4", 11367 + "type": "tag", 11368 + "class": "APPLICATION", 11369 + "explicit": false, 11370 + "content": [ 11371 + { 11372 + "name": "", 11373 + "type": { 11374 + "name": "SEQUENCE", 11375 + "type": "builtin", 11376 + "content": [ 11377 + { 11378 + "id": "objectName", 11379 + "name": "LDAPDN", 11380 + "type": "defined" 11381 + }, 11382 + { 11383 + "id": "attributes", 11384 + "name": "PartialAttributeList", 11385 + "type": "defined" 11386 + } 11387 + ] 11388 + } 11389 + } 11390 + ] 11391 + } 11392 + }, 11393 + "PartialAttributeList": { 11394 + "name": "PartialAttributeList", 11395 + "type": { 11396 + "name": "SEQUENCE", 11397 + "type": "builtin", 11398 + "typeOf": 1, 11399 + "content": [ 11400 + { 11401 + "name": "PartialAttribute", 11402 + "type": "defined" 11403 + } 11404 + ] 11405 + } 11406 + }, 11407 + "SearchResultReference": { 11408 + "name": "SearchResultReference", 11409 + "type": { 11410 + "name": "Application 19", 11411 + "type": "tag", 11412 + "class": "APPLICATION", 11413 + "explicit": false, 11414 + "content": [ 11415 + { 11416 + "name": "", 11417 + "type": { 11418 + "name": "SEQUENCE", 11419 + "type": "builtin", 11420 + "typeOf": 1, 11421 + "size": [ 11422 + 1, 11423 + "MAX" 11424 + ], 11425 + "content": [ 11426 + { 11427 + "name": "URI", 11428 + "type": "defined" 11429 + } 11430 + ] 11431 + } 11432 + } 11433 + ] 11434 + } 11435 + }, 11436 + "SearchResultDone": { 11437 + "name": "SearchResultDone", 11438 + "type": { 11439 + "name": "Application 5", 11440 + "type": "tag", 11441 + "class": "APPLICATION", 11442 + "explicit": false, 11443 + "content": [ 11444 + { 11445 + "name": "", 11446 + "type": { 11447 + "name": "LDAPResult", 11448 + "type": "defined" 11449 + } 11450 + } 11451 + ] 11452 + } 11453 + }, 11454 + "ModifyRequest": { 11455 + "name": "ModifyRequest", 11456 + "type": { 11457 + "name": "Application 6", 11458 + "type": "tag", 11459 + "class": "APPLICATION", 11460 + "explicit": false, 11461 + "content": [ 11462 + { 11463 + "name": "", 11464 + "type": { 11465 + "name": "SEQUENCE", 11466 + "type": "builtin", 11467 + "content": [ 11468 + { 11469 + "id": "object", 11470 + "name": "LDAPDN", 11471 + "type": "defined" 11472 + }, 11473 + { 11474 + "id": "changes", 11475 + "name": "SEQUENCE", 11476 + "type": "builtin", 11477 + "typeOf": 1, 11478 + "content": [ 11479 + { 11480 + "name": "SEQUENCE", 11481 + "type": "builtin", 11482 + "content": [ 11483 + { 11484 + "id": "operation", 11485 + "name": "ENUMERATED", 11486 + "type": "builtin", 11487 + "content": { 11488 + "add": 0, 11489 + "delete": 1, 11490 + "replace": 2 11491 + } 11492 + }, 11493 + { 11494 + "id": "modification", 11495 + "name": "PartialAttribute", 11496 + "type": "defined" 11497 + } 11498 + ] 11499 + } 11500 + ] 11501 + } 11502 + ] 11503 + } 11504 + } 11505 + ] 11506 + } 11507 + }, 11508 + "ModifyResponse": { 11509 + "name": "ModifyResponse", 11510 + "type": { 11511 + "name": "Application 7", 11512 + "type": "tag", 11513 + "class": "APPLICATION", 11514 + "explicit": false, 11515 + "content": [ 11516 + { 11517 + "name": "", 11518 + "type": { 11519 + "name": "LDAPResult", 11520 + "type": "defined" 11521 + } 11522 + } 11523 + ] 11524 + } 11525 + }, 11526 + "AddRequest": { 11527 + "name": "AddRequest", 11528 + "type": { 11529 + "name": "Application 8", 11530 + "type": "tag", 11531 + "class": "APPLICATION", 11532 + "explicit": false, 11533 + "content": [ 11534 + { 11535 + "name": "", 11536 + "type": { 11537 + "name": "SEQUENCE", 11538 + "type": "builtin", 11539 + "content": [ 11540 + { 11541 + "id": "entry", 11542 + "name": "LDAPDN", 11543 + "type": "defined" 11544 + }, 11545 + { 11546 + "id": "attributes", 11547 + "name": "AttributeList", 11548 + "type": "defined" 11549 + } 11550 + ] 11551 + } 11552 + } 11553 + ] 11554 + } 11555 + }, 11556 + "AttributeList": { 11557 + "name": "AttributeList", 11558 + "type": { 11559 + "name": "SEQUENCE", 11560 + "type": "builtin", 11561 + "typeOf": 1, 11562 + "content": [ 11563 + { 11564 + "name": "Attribute", 11565 + "type": "defined" 11566 + } 11567 + ] 11568 + } 11569 + }, 11570 + "AddResponse": { 11571 + "name": "AddResponse", 11572 + "type": { 11573 + "name": "Application 9", 11574 + "type": "tag", 11575 + "class": "APPLICATION", 11576 + "explicit": false, 11577 + "content": [ 11578 + { 11579 + "name": "", 11580 + "type": { 11581 + "name": "LDAPResult", 11582 + "type": "defined" 11583 + } 11584 + } 11585 + ] 11586 + } 11587 + }, 11588 + "DelRequest": { 11589 + "name": "DelRequest", 11590 + "type": { 11591 + "name": "Application 10", 11592 + "type": "tag", 11593 + "class": "APPLICATION", 11594 + "explicit": false, 11595 + "content": [ 11596 + { 11597 + "name": "", 11598 + "type": { 11599 + "name": "LDAPDN", 11600 + "type": "defined" 11601 + } 11602 + } 11603 + ] 11604 + } 11605 + }, 11606 + "DelResponse": { 11607 + "name": "DelResponse", 11608 + "type": { 11609 + "name": "Application 11", 11610 + "type": "tag", 11611 + "class": "APPLICATION", 11612 + "explicit": false, 11613 + "content": [ 11614 + { 11615 + "name": "", 11616 + "type": { 11617 + "name": "LDAPResult", 11618 + "type": "defined" 11619 + } 11620 + } 11621 + ] 11622 + } 11623 + }, 11624 + "ModifyDNRequest": { 11625 + "name": "ModifyDNRequest", 11626 + "type": { 11627 + "name": "Application 12", 11628 + "type": "tag", 11629 + "class": "APPLICATION", 11630 + "explicit": false, 11631 + "content": [ 11632 + { 11633 + "name": "", 11634 + "type": { 11635 + "name": "SEQUENCE", 11636 + "type": "builtin", 11637 + "content": [ 11638 + { 11639 + "id": "entry", 11640 + "name": "LDAPDN", 11641 + "type": "defined" 11642 + }, 11643 + { 11644 + "id": "newrdn", 11645 + "name": "RelativeLDAPDN", 11646 + "type": "defined" 11647 + }, 11648 + { 11649 + "id": "deleteoldrdn", 11650 + "name": "BOOLEAN", 11651 + "type": "builtin" 11652 + }, 11653 + { 11654 + "id": "newSuperior", 11655 + "name": "[0]", 11656 + "type": "tag", 11657 + "class": "CONTEXT", 11658 + "explicit": false, 11659 + "content": [ 11660 + { 11661 + "name": "", 11662 + "type": { 11663 + "name": "LDAPDN", 11664 + "type": "defined" 11665 + } 11666 + } 11667 + ], 11668 + "optional": true 11669 + } 11670 + ] 11671 + } 11672 + } 11673 + ] 11674 + } 11675 + }, 11676 + "ModifyDNResponse": { 11677 + "name": "ModifyDNResponse", 11678 + "type": { 11679 + "name": "Application 13", 11680 + "type": "tag", 11681 + "class": "APPLICATION", 11682 + "explicit": false, 11683 + "content": [ 11684 + { 11685 + "name": "", 11686 + "type": { 11687 + "name": "LDAPResult", 11688 + "type": "defined" 11689 + } 11690 + } 11691 + ] 11692 + } 11693 + }, 11694 + "CompareRequest": { 11695 + "name": "CompareRequest", 11696 + "type": { 11697 + "name": "Application 14", 11698 + "type": "tag", 11699 + "class": "APPLICATION", 11700 + "explicit": false, 11701 + "content": [ 11702 + { 11703 + "name": "", 11704 + "type": { 11705 + "name": "SEQUENCE", 11706 + "type": "builtin", 11707 + "content": [ 11708 + { 11709 + "id": "entry", 11710 + "name": "LDAPDN", 11711 + "type": "defined" 11712 + }, 11713 + { 11714 + "id": "ava", 11715 + "name": "AttributeValueAssertion", 11716 + "type": "defined" 11717 + } 11718 + ] 11719 + } 11720 + } 11721 + ] 11722 + } 11723 + }, 11724 + "CompareResponse": { 11725 + "name": "CompareResponse", 11726 + "type": { 11727 + "name": "Application 15", 11728 + "type": "tag", 11729 + "class": "APPLICATION", 11730 + "explicit": false, 11731 + "content": [ 11732 + { 11733 + "name": "", 11734 + "type": { 11735 + "name": "LDAPResult", 11736 + "type": "defined" 11737 + } 11738 + } 11739 + ] 11740 + } 11741 + }, 11742 + "AbandonRequest": { 11743 + "name": "AbandonRequest", 11744 + "type": { 11745 + "name": "Application 16", 11746 + "type": "tag", 11747 + "class": "APPLICATION", 11748 + "explicit": false, 11749 + "content": [ 11750 + { 11751 + "name": "", 11752 + "type": { 11753 + "name": "MessageID", 11754 + "type": "defined" 11755 + } 11756 + } 11757 + ] 11758 + } 11759 + }, 11760 + "ExtendedRequest": { 11761 + "name": "ExtendedRequest", 11762 + "type": { 11763 + "name": "Application 23", 11764 + "type": "tag", 11765 + "class": "APPLICATION", 11766 + "explicit": false, 11767 + "content": [ 11768 + { 11769 + "name": "", 11770 + "type": { 11771 + "name": "SEQUENCE", 11772 + "type": "builtin", 11773 + "content": [ 11774 + { 11775 + "id": "requestName", 11776 + "name": "[0]", 11777 + "type": "tag", 11778 + "class": "CONTEXT", 11779 + "explicit": false, 11780 + "content": [ 11781 + { 11782 + "name": "", 11783 + "type": { 11784 + "name": "LDAPOID", 11785 + "type": "defined" 11786 + } 11787 + } 11788 + ] 11789 + }, 11790 + { 11791 + "id": "requestValue", 11792 + "name": "[1]", 11793 + "type": "tag", 11794 + "class": "CONTEXT", 11795 + "explicit": false, 11796 + "content": [ 11797 + { 11798 + "name": "", 11799 + "type": { 11800 + "name": "OCTET STRING", 11801 + "type": "builtin" 11802 + } 11803 + } 11804 + ], 11805 + "optional": true 11806 + } 11807 + ] 11808 + } 11809 + } 11810 + ] 11811 + } 11812 + }, 11813 + "ExtendedResponse": { 11814 + "name": "ExtendedResponse", 11815 + "type": { 11816 + "name": "ANY", 11817 + "type": "builtin" 11818 + } 11819 + }, 11820 + "IntermediateResponse": { 11821 + "name": "IntermediateResponse", 11822 + "type": { 11823 + "name": "Application 25", 11824 + "type": "tag", 11825 + "class": "APPLICATION", 11826 + "explicit": false, 11827 + "content": [ 11828 + { 11829 + "name": "", 11830 + "type": { 11831 + "name": "SEQUENCE", 11832 + "type": "builtin", 11833 + "content": [ 11834 + { 11835 + "id": "responseName", 11836 + "name": "[0]", 11837 + "type": "tag", 11838 + "class": "CONTEXT", 11839 + "explicit": false, 11840 + "content": [ 11841 + { 11842 + "name": "", 11843 + "type": { 11844 + "name": "LDAPOID", 11845 + "type": "defined" 11846 + } 11847 + } 11848 + ], 11849 + "optional": true 11850 + }, 11851 + { 11852 + "id": "responseValue", 11853 + "name": "[1]", 11854 + "type": "tag", 11855 + "class": "CONTEXT", 11856 + "explicit": false, 11857 + "content": [ 11858 + { 11859 + "name": "", 11860 + "type": { 11861 + "name": "OCTET STRING", 11862 + "type": "builtin" 11863 + } 11864 + } 11865 + ], 11866 + "optional": true 11867 + } 11868 + ] 11869 + } 11870 + } 11871 + ] 11872 + } 11873 + } 11874 + } 11875 + } 11876 + } 11877 + ;
+21
tags.js
··· 1 + export const tags = { 2 + "2.1.1": "2025-10-24", 3 + "2.1.0": "2025-08-03", 4 + "2.0.6": "2025-07-28", 5 + "2.0.5": "2025-04-12", 6 + "2.0.4": "2024-05-08", 7 + "2.0.3": "2024-05-06", 8 + "2.0.2": "2024-04-20", 9 + "2.0.1": "2024-03-28", 10 + "2.0.0": "2024-03-26", 11 + "1.3.0": "2024-03-26", 12 + "1.2.4": "2022-11-14", 13 + "1.2.3": "2021-10-21", 14 + "1.2.2": "2021-10-21", 15 + "1.2.1": "2020-09-06", 16 + "1.2.0": "2020-07-20", 17 + "1.1.0": "2019-07-13", 18 + "1.0.2": "2018-08-23", 19 + "1.0.1": "2018-08-14", 20 + "1.0.0": "2018-08-14", 21 + };
+177 -37
test.js
··· 1 1 #!/usr/bin/env node 2 - 'use strict'; 2 + 3 + import * as fs from 'fs'; // 'node:fs' doesn't work on NodeJS 14.5.0 4 + import { ASN1, Stream } from './asn1.js'; 5 + import { Defs } from './defs.js'; 6 + import { Hex } from './hex.js'; 7 + import { Base64 } from './base64.js'; 8 + import { createPatch } from 'diff'; 9 + 10 + const all = (process.argv[2] == 'all'); 11 + 12 + /** @type {Array<Tests>} */ 13 + const tests = []; 14 + 15 + const stats = { 16 + run: 0, 17 + error: 0, 18 + }; 19 + 20 + function diff(str1, str2) { 21 + let s = createPatch('test', str1, str2, null, null, { context: 2 }); 22 + s = s.slice(s.indexOf('@@'), -1); 23 + s = s.replace(/^@@.*/mg, '\x1B[34m$&\x1B[39m'); 24 + s = s.replace(/^-.*/mg, '\x1B[31m$&\x1B[39m'); 25 + s = s.replace(/^\+.*/mg, '\x1B[32m$&\x1B[39m'); 26 + return s; 27 + } 28 + 29 + /** 30 + * A class for managing and executing tests. 31 + */ 32 + class Tests { 33 + /** 34 + * The title of the test suite. 35 + * @type {string} 36 + */ 37 + title; 38 + 39 + /** 40 + * An array to store test data. 41 + * @type {Array<unknown>} 42 + */ 43 + data; 44 + 45 + /** 46 + * Checks a row of test data. 47 + * @param {Function} t - How to test a row of data. 48 + */ 49 + checkRow; 50 + 51 + /** 52 + * Constructs a new Tests instance. 53 + * @param {string} title - The title of the test suite. 54 + * @param {Function} checkRow - A function to check each row of data. 55 + * @param {Array<unknown>} data - The test data to be processed. 56 + */ 57 + constructor(title, checkRow, data) { 58 + this.title = title; 59 + this.checkRow = checkRow; 60 + this.data = data; 61 + } 62 + 63 + /** 64 + * Executes the tests and checks their results for all rows. 65 + */ 66 + checkAll() { 67 + if (all) console.log('\x1B[1m\x1B[34m' + this.title + '\x1B[39m\x1B[22m'); 68 + for (const t of this.data) 69 + this.checkRow(t); 70 + } 3 71 4 - const 5 - Hex = require('./hex.js'), 6 - ASN1 = require('./asn1.js'), 7 - all = (process.argv[2] == 'all'); 72 + /** 73 + * Prints the result of a test, indicating if it passed or failed. 74 + * @param {unknown} result The actual result of the test. 75 + * @param {unknown} expected The expected result of the test. 76 + * @param {string} comment A comment describing the test. 77 + */ 78 + checkResult(result, expected, comment) { 79 + ++stats.run; 80 + if ((typeof expected != 'string' && !result) || result == expected) { 81 + if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment); 82 + } else { 83 + ++stats.error; 84 + console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment); 85 + if (!result) result = '(empty)'; 86 + if (typeof expected != 'string') { 87 + console.log(' ' + result); 88 + } else if (result.length > 100) { 89 + console.log(' \x1B[1m\x1B[34mDIF\x1B[39m\x1B[22m ' + diff(result, expected.toString()).replace(/\n/g, '\n ')); 90 + } else { 91 + console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n ')); 92 + console.log(' \x1B[1m\x1B[33mGOT\x1B[39m\x1B[22m ' + result.replace(/\n/g, '\n ')); 93 + } 94 + } 95 + } 96 + } 8 97 9 - const tests = [ 98 + tests.push(new Tests('ASN.1', function (t) { 99 + const input = t[0], 100 + expected = t[1], 101 + comment = t[2]; 102 + let result; 103 + try { 104 + let node = ASN1.decode(Hex.decode(input)); 105 + if (typeof expected == 'function') 106 + result = expected(node); 107 + else 108 + result = node.content(); 109 + //TODO: check structure, not only first level content 110 + } catch (e) { 111 + result = 'Exception:\n' + e; 112 + } 113 + if (expected instanceof RegExp) 114 + result = expected.test(result) ? null : 'does not match'; 115 + this.checkResult(result, expected, comment); 116 + }, [ 10 117 // RSA Laboratories technical notes from https://luca.ntop.org/Teaching/Appunti/asn1.html 11 118 ['0304066E5DC0', '(18 bit)\n011011100101110111', 'ntop, bit string: DER encoding'], 12 119 ['0304066E5DE0', '(18 bit)\n011011100101110111', 'ntop, bit string: padded with "100000"'], ··· 36 143 ['170D3931303530363233343534305A', '1991-05-06 23:45:40 UTC', 'ntop, utc time: UTC'], 37 144 ['17113931303530363136343534302D30373030', '1991-05-06 16:45:40 UTC-07:00', 'ntop, utc time: PDT'], 38 145 // inspired by http://luca.ntop.org/Teaching/Appunti/asn1.html 39 - ['0304086E5DC0', 'Exception:\nInvalid BitString with unusedBits=8', 'bit string: invalid unusedBits'], 146 + ['0304086E5DC0', 'Exception:\nError: Invalid BitString with unusedBits=8', 'bit string: invalid unusedBits'], 40 147 // http://msdn.microsoft.com/en-us/library/windows/desktop/aa379076(v=vs.85).aspx 41 148 ['30820319308202820201003023310F300D0603550403130654657374434E3110300E060355040A1307546573744F726730819F300D06092A864886F70D010101050003818D00308189028181008FE2412A08E851A88CB3E853E7D54950B3278A2BCBEAB54273EA0257CC6533EE882061A11756C12418E3A808D3BED931F3370B94B8CC43080B7024F79CB18D5DD66D82D0540984F89F970175059C89D4D5C91EC913D72A6B309119D6D442E0C49D7C9271E1B22F5C8DEEF0F1171ED25F315BB19CBC2055BF3A37424575DC90650203010001A08201B4301A060A2B0601040182370D0203310C160A362E302E353336312E323042060A2B0601040182370D0201313430321E260043006500720074006900660069006300610074006500540065006D0070006C0061007400651E080055007300650072305706092B0601040182371514314A30480201090C237669636833642E6A646F6D6373632E6E74746573742E6D6963726F736F66742E636F6D0C154A444F4D4353435C61646D696E6973747261746F720C07636572747265713074060A2B0601040182370D0202316630640201011E5C004D006900630072006F0073006F0066007400200045006E00680061006E006300650064002000430072007900700074006F0067007200610070006800690063002000500072006F00760069006400650072002000760031002E003003010030818206092A864886F70D01090E31753073301706092B0601040182371402040A1E08005500730065007230290603551D2504223020060A2B0601040182370A030406082B0601050507030406082B06010505070302300E0603551D0F0101FF0404030205A0301D0603551D0E041604143C0F73DAF8EF41D83AEABE922A5D2C966A7B9454300D06092A864886F70D01010505000381810047EB995ADF9E700DFBA73132C15F5C24C2E0BFC624AF15660EB86A2EAB2BC4971FE3CBDC63A525ECC7B428616636A1311BBFDDD0FCBF1794901DE55EC7115EC9559FEBA33E14C799A6CBBAA1460F39D444C4C84B760E205D6DA9349ED4D58742EB2426511490B40F065E5288327A9520A0FDF7E57D60DD72689BF57B058F6D1E', 42 149 '(3 elem)', 'PKCS#10 request'], ··· 75 182 ['0D04C27B0302','8571.3.2', 'Relative OID from ISO/IEC 8825-1:2002 8.20.5'], 76 183 // UTF-8 77 184 ['0C0E4C61706FE280997320F09F9A972E', 'Lapoโ€™s ๐Ÿš—.', 'UTF-8 4-byte sequence'], 78 - // T-REC-X.690-201508 185 + // T-REC-X.690-202102 79 186 ['0307040A3B5F291CD0', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (primitive encoding)'], 80 187 ['23800303000A3B0305045F291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (constructed encoding)'], 188 + ['0603883703', '2.999.3', 'Example 8.19.5: object identifier'], 189 + // X.690 section 8.2.1 โ€œThe contents octets shall consist of a single octet.โ€ 190 + ['010100', 'false', 'Boolean with correct length (false)'], 191 + ['010101', 'true', 'Boolean with correct length (true)'], 192 + ['0100', 'invalid length 0', 'Boolean with zero length'], 193 + ['01020000', 'invalid length 2', 'Boolean with excessive length'], 194 + // X.690 section 8.3.1 โ€œThe contents octets shall consist of one or more octets.โ€ 195 + ['020100', '0', 'Integer with correct length'], 196 + ['0200', 'invalid length 0', 'Integer with zero length'], 197 + // X.690 section 8.19.4 kinda imples that the minimum number of components is 2 198 + ['0600', 'invalid length 0', 'Object identifier with zero length'], 199 + ['060100', '0.0', 'Object identifier with minimal (?) length'], 81 200 // avoid past bugs 82 201 ['23800303000A3B230A0302005F030404291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Bit string (recursive constructed)'], 83 202 ['0348003045022100DE601E573DAFB59BC551D58E3E7B9EDA0612DD0112805A2217B734759B884417022067C3FDE60780D41C1D7A3B90291F3D39C4DC2F206DCCBA2F982C06B67C09B232', '(568 bit)\n0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010', 'not constructed, but contains structures'], ··· 86 205 ['0420041EE4E3B7ED350CC24D034E436D9A1CB15BB1E328D37062FB82E84618AB0A3C', '(32 byte)\n041EE4E3B7ED350CC24D034E436D9A1CB15BB1E328D37062FB82E84618AB0A3C', 'Do not mix encapsulated and structured octet strings'], // GitHub issue #47 87 206 ['181531393835313130363231303632372E332D31323334', '1985-11-06 21:06:27.3 UTC-12:34', 'UTC offsets with minutes'], // GitHub issue #54 88 207 ['181331393835313130363231303632372E332B3134', '1985-11-06 21:06:27.3 UTC+14:00', 'UTC offset +13 and +14'], // GitHub issue #54 89 - ]; 208 + ['032100171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', n => { if (n.sub != null) return 'Should not decode content: ' + n.sub[0].content(); }, 'Key that resembles an UTCTime'], // GitHub issue #79 209 + ['171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', /^Exception:\nError: Unrecognized time: /, 'Invalid UTCTime'], // GitHub issue #79 210 + ])); 90 211 91 - let 92 - run = 0, 93 - expErr = 0, 94 - error = 0; 95 - tests.forEach(function (t) { 96 - const input = t[0], 97 - expected = t[1], 98 - comment = t[2], 99 - errorReason = t[3]; 100 - let result; 101 - try { 102 - result = ASN1.decode(Hex.decode(input)).content(); 103 - //TODO: check structure, not only first level content 104 - } catch (e) { 105 - result = 'Exception:\n' + e; 212 + tests.push(new Tests('Dump of examples', function () { 213 + const examples = fs.readdirSync('examples/').filter(f => f.endsWith('.dump')); 214 + for (const example of examples) { 215 + const filename = example.slice(0, -5); // Remove '.dump' suffix 216 + const expected = fs.readFileSync('examples/' + example, 'utf8'); 217 + let data = fs.readFileSync('examples/' + filename); 218 + data = Base64.unarmor(data); 219 + let node = ASN1.decode(data); 220 + const types = Defs.commonTypes 221 + .map(type => { 222 + const stats = Defs.match(node, type); 223 + return { type, match: stats.recognized / stats.total }; 224 + }) 225 + .sort((a, b) => b.match - a.match); 226 + Defs.match(node, types[0].type); 227 + let result = node.toPrettyString(); 228 + this.checkResult(result, expected, 'Dump of examples/' + filename); 106 229 } 107 - ++run; 108 - if (result == expected) { 109 - if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment); 110 - } else if (errorReason) { 111 - ++expErr; 112 - console.log('\x1B[1m\x1B[33mEXP\x1B[39m\x1B[22m ' + comment + ' (' + errorReason + ')' + '\n' + result); 113 - } else { 114 - ++error; 115 - console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment + '\n' + result); 116 - } 117 - }); 118 - console.log(run + ' tested, ' + expErr + ' expected, ' + error + ' errors.'); 119 - process.exit(error ? 1 : 0); 230 + }, [ 231 + [0], 232 + ])); 233 + 234 + tests.push(new Tests('Base64', function (t) { 235 + let bin = Base64.decode(t); 236 + let url = new Stream(bin, 0).b64Dump(0, bin.length); 237 + // check base64url encoding 238 + this.checkResult(url, t.replace(/\n/g, '').replace(/=*$/g, ''), 'Base64url: ' + bin.length + ' bytes'); 239 + // check conversion from base64url to base64 240 + let pretty = Base64.pretty(url); 241 + this.checkResult(pretty, t, 'Base64pretty: ' + bin.length + ' bytes'); 242 + let std = new Stream(bin, 0).b64Dump(0, bin.length, 'std'); 243 + // check direct base64 encoding 244 + this.checkResult(std, t.replace(/\n/g, ''), 'Base64: ' + bin.length + ' bytes'); 245 + }, [ 246 + 'AA==', 247 + 'ABA=', 248 + 'ABCD', 249 + 'ABCDEA==', 250 + 'ABCDEFE=', 251 + 'ABCDEFGH', 252 + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQR\nSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456w==', 253 + ])); 254 + 255 + for (const t of tests) 256 + t.checkAll(); 257 + 258 + console.log(stats.run + ' tested, ' + stats.error + ' errors.'); 259 + process.exit(stats.error ? 1 : 0);
+32
testDefs.js
··· 1 + #!/usr/bin/env node 2 + 3 + import { promises as fs } from 'node:fs'; 4 + import { ASN1 } from './asn1.js'; 5 + import { Base64 } from './base64.js'; 6 + import { Defs } from './defs.js'; 7 + 8 + const tot = []; 9 + for await (const file of await fs.opendir('examples')) { 10 + let content = await fs.readFile('examples/' + file.name); 11 + try { 12 + try { // try PEM first 13 + content = Base64.unarmor(content); 14 + } catch (ignore) { // try DER/BER then 15 + } 16 + let result = ASN1.decode(content); 17 + content = null; 18 + const types = Defs.commonTypes 19 + .map(type => { 20 + const stats = Defs.match(result, type); 21 + return { type, match: stats.recognized / stats.total }; 22 + }) 23 + .sort((a, b) => b.match - a.match); 24 + tot.push([ types[0].match, file.name, types[0].type.description ]); 25 + } catch (e) { 26 + tot.push([ 0, file.name, e.message ]); 27 + } 28 + } 29 + for (const f of tot) 30 + console.log(f[0].toFixed(3) + '\t' + f[1] + '\t' + f[2]); 31 + const avg = tot.map(f => f[0]).reduce((sum, val) => sum + val) / tot.length; 32 + console.log('\x1B[1m\x1B[32m' + (avg * 100).toFixed(3) + '\x1B[39m\x1B[22m%\tAVERAGE');
+37
theme.js
··· 1 + // set dark theme depending on OS settings 2 + function setTheme(theme) { 3 + if (theme == 'os') { 4 + let prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)'); 5 + if (prefersDarkScheme.matches) { 6 + theme = 'dark'; 7 + } else { 8 + theme = 'light'; 9 + } 10 + } 11 + document.documentElement.style['color-scheme'] = theme; 12 + document.querySelector('html').setAttribute('data-theme', theme); 13 + // set the theme-color for iOS devices 14 + let bgColor = getComputedStyle(document.documentElement).getPropertyValue('--main-bg-color'); 15 + let metaThemeColor = document.querySelector('meta[name=theme-color]'); 16 + metaThemeColor.setAttribute('content', bgColor); 17 + } 18 + // activate selected theme 19 + let theme = 'os'; 20 + const localStorageTheme = localStorage.getItem('theme'); 21 + if (localStorageTheme) { 22 + theme = localStorageTheme; 23 + } 24 + setTheme(theme); 25 + // add handler to theme selection element 26 + const selectTheme = document.getElementById('theme-select'); 27 + if (selectTheme) { 28 + selectTheme.addEventListener ('change', function () { 29 + localStorage.setItem('theme', selectTheme.value); 30 + setTheme(selectTheme.value); 31 + }); 32 + if (theme == 'light') { 33 + selectTheme.selectedIndex = 2; 34 + } else if (theme == 'dark') { 35 + selectTheme.selectedIndex = 1; 36 + } 37 + }
+1
tree-icon-dark.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="28" height="14"><circle cx="6.903" cy="7.102" r="5.165" style="fill:#000;fill-opacity:1;stroke:#555;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><circle cx="21.133" cy="7.029" r="5.165" style="fill:#000;fill-opacity:1;stroke:#555;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><path d="M17.908 7.071h6.783" style="opacity:1;fill:none;fill-opacity:1;stroke:#555;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><g style="fill:none;fill-opacity:1;stroke:#555;stroke-width:.518375;stroke-dasharray:none;stroke-opacity:1"><path d="M5.231 9.992h9.466" style="opacity:.992268;fill:none;fill-opacity:1;stroke:#555;stroke-width:1.44663;stroke-dasharray:none;stroke-opacity:1" transform="translate(-.289 -.083)scale(.71667)"/><path d="M10.006 5.242v9.465" style="opacity:1;fill:none;fill-opacity:1;stroke:#555;stroke-width:1.44663;stroke-dasharray:none;stroke-opacity:1" transform="translate(-.289 -.083)scale(.71667)"/></g></svg>
+1
tree-icon-light.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="28" height="14"><circle cx="6.936" cy="7.247" r="5.165" style="fill:silver;fill-opacity:1;stroke:#999;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><circle cx="21.166" cy="7.174" r="5.165" style="fill:silver;fill-opacity:1;stroke:#999;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><path d="M17.94 7.216h6.784" style="fill:none;fill-opacity:1;stroke:#999;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><g style="fill:none;fill-opacity:1;stroke:#999;stroke-width:.518375;stroke-dasharray:none;stroke-opacity:1"><path d="M5.231 9.992h9.466" style="opacity:.992268;fill:none;fill-opacity:1;stroke:#999;stroke-width:1.44663;stroke-dasharray:none;stroke-opacity:1" transform="translate(-.256 .062)scale(.71667)"/><path d="M10.006 5.242v9.465" style="opacity:1;fill:none;fill-opacity:1;stroke:#999;stroke-width:1.44663;stroke-dasharray:none;stroke-opacity:1" transform="translate(-.256 .062)scale(.71667)"/></g></svg>
+3 -10
updateOID.sh
··· 10 10 fi 11 11 cat dumpasn1.cfg | \ 12 12 tr -d '\r' | \ 13 - awk -v url="$URL" ' 13 + awk -v apos="'" -v q='"' -v url="$URL" ' 14 14 function clean() { 15 15 oid = ""; 16 16 comment = ""; ··· 19 19 } 20 20 BEGIN { 21 21 FS = "= *"; 22 - apos = sprintf("%c", 39); 23 22 clean(); 24 23 print "// Converted from: " url; 25 24 print "// which is made by Peter Gutmann and whose license states:"; 26 25 print "// You can use this code in whatever way you want,"; 27 26 print "// as long as you don" apos "t try to claim you wrote it."; 28 - print "(typeof define != " apos "undefined" apos " ? define : function (factory) { " apos "use strict" apos ";"; 29 - print " if (typeof module == " apos "object" apos ") module.exports = factory();"; 30 - print " else window.oids = factory();"; 31 - print "})(function () {"; 32 - print apos "use strict" apos ";"; 33 - print "return {"; 27 + print "export const oids = {"; 34 28 } 35 29 /^OID/ { oid = $2; } 36 30 /^Comment/ { comment = $2; } ··· 49 43 } 50 44 } 51 45 END { 52 - print "\"END\": \"\"" 53 - print "};});" 46 + print "};" 54 47 } 55 48 ' >oids.js 56 49 echo Conversion completed.
+15 -3
updateRFC.sh
··· 1 1 #/bin/sh 2 + RFCs="5280 5208 3369 3161 2986 4211 4210 8017 4511" 2 3 downloadRFC() { 3 4 URL="https://www.ietf.org/rfc/rfc$1.txt" 4 5 if [ -x /usr/bin/fetch ]; then ··· 10 11 exit 1 11 12 fi 12 13 } 13 - echo '{}' > rfcasn1.json # start from scratch 14 + echo '{}' > rfcdef.json # start from scratch 14 15 mkdir -p rfc 15 16 cd rfc 16 - for n in 5280 3369 3161; do 17 + for n in $RFCs; do 17 18 downloadRFC $n 18 - ../parseRFC.js rfc$n.txt ../rfcasn1.json 19 + ../parseRFC.js rfc$n.txt ../rfcdef.json 19 20 done 21 + cd .. 22 + { 23 + echo "// content parsed from ASN.1 definitions as found in the following RFCs: $RFCs" 24 + echo "// Copyright (C) The IETF Trust (2008)" 25 + echo "// as far as I can tell this file is allowed under the following clause:" 26 + echo "// It is acceptable under the current IETF rules (RFC 5378) to modify extracted code if necessary." 27 + echo "// https://trustee.ietf.org/about/faq/#reproducing-rfcs" 28 + echo -n "export const rfcdef = " 29 + cat rfcdef.json 30 + echo ";" 31 + } > rfcdef.js 20 32 echo Conversion completed.
+43
vite.config.js
··· 1 + import fs from 'node:fs'; 2 + import { defineConfig } from 'vite'; 3 + import { viteSingleFile } from 'vite-plugin-singlefile'; 4 + import pluginDom from 'vite-plugin-dom'; 5 + import { DomUtils } from 'htmlparser2'; 6 + 7 + const removeNodes = [ 'rowExamples' ]; 8 + 9 + const preventSVGEmit = () => { 10 + return { 11 + generateBundle(opts, bundle) { 12 + for (const key in bundle) 13 + if (key.endsWith('.svg')) 14 + delete bundle[key]; 15 + }, 16 + }; 17 + }; 18 + 19 + function massageSVG(str) { 20 + return str.replace(/["<>#]/g, (c) => { 21 + return '%' + c.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0'); 22 + }); 23 + } 24 + 25 + export default defineConfig({ 26 + plugins: [ 27 + preventSVGEmit(), 28 + pluginDom({ 29 + applyOnMode: true, // all modes 30 + handler: node => { 31 + if (removeNodes.includes(node.attribs.id)) 32 + DomUtils.removeElement(node); 33 + else if (node.name == 'link' && node.attribs.rel == 'icon') 34 + node.attribs.href = 'data:image/svg+xml,' + massageSVG(fs.readFileSync('favicon.svg', 'ascii').replace(/^([^<]+|<[^s]|<s[^v]|<sv[^g])+/, '').trim()); 35 + }, 36 + }), 37 + viteSingleFile(), 38 + ], 39 + build: { 40 + minify: false, 41 + cssMinify: false, 42 + }, 43 + });