JavaScript generic ASN.1 parser (mirror)

Compare changes

Choose any two refs to compare.

+27
.github/workflows/node.js.yml
··· 1 + # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 + # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 + 4 + name: Node.js CI 5 + 6 + on: [push, pull_request] 7 + 8 + jobs: 9 + build: 10 + 11 + runs-on: ubuntu-latest 12 + 13 + strategy: 14 + matrix: 15 + node-version: [ 12.20.0, latest ] 16 + 17 + steps: 18 + - uses: actions/checkout@v4 19 + - name: Use Node.js ${{ matrix.node-version }} 20 + uses: actions/setup-node@v4 21 + with: 22 + node-version: ${{ matrix.node-version }} 23 + - run: npm test all 24 + - run: npm install 25 + if: matrix.node-version == 'latest' 26 + - run: npm run lint 27 + if: matrix.node-version == 'latest'
+18
.gitignore
··· 1 + _MTN/ 2 + .DS_Store/ 3 + .vscode/ 4 + node_modules/ 5 + dist/ 6 + package-lock.json 7 + pnpm-lock.yaml 8 + # Artifacts from release.sh 9 + index-local.html 10 + sha256sums.asc 11 + asn1js.zip 12 + # Artifacts from mirror_to_github.sh 13 + git-*.txt 14 + # Artifacts from updateOID.sh 15 + dumpasn1.cfg 16 + # Artifacts from parseRFC.js 17 + rfc/ 18 + rfcdef.json
+17
.mtn-ignore
··· 1 + [.]DS_Store$ 2 + [.]vscode$ 3 + node_modules$ 4 + dist$ 5 + package-lock[.]json 6 + pnpm-lock[.]yaml 7 + # Artifacts from release.sh 8 + index-local.html 9 + sha256sums[.]asc 10 + asn1js[.]zip 11 + # Artifacts from mirror_to_github.sh 12 + git-[^.]*[.]txt 13 + # Artifacts from updateOID.sh 14 + dumpasn1[.]cfg 15 + # Artifacts from parseRFC.js 16 + rfc$ 17 + rfcdef[.]json
+75
.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": "dumpASN1", 11 + "skipFiles": [ 12 + "<node_internals>/**" 13 + ], 14 + "program": "${workspaceFolder}/dumpASN1.js", 15 + "args": [ 16 + "examples/ed25519.cer" 17 + ] 18 + }, 19 + { 20 + "type": "node", 21 + "request": "launch", 22 + "name": "parseRFC", 23 + "skipFiles": [ 24 + "<node_internals>/**" 25 + ], 26 + "program": "${workspaceFolder}/parseRFC.js", 27 + "args": [ 28 + "rfc/rfc4511.txt", 29 + "rfcdef.json" 30 + ] 31 + }, 32 + { 33 + "type": "node", 34 + "request": "launch", 35 + "name": "dumpASN1 cert", 36 + "skipFiles": [ 37 + "<node_internals>/**" 38 + ], 39 + "program": "${workspaceFolder}/dumpASN1.js", 40 + "args": [ 41 + "data:base64,MIG9AgEBMA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUUjM0IFNhbXBsZXMxGzAZBgNVBAMTElRSMzQgU2FtcGxlIENBIEtESBcNMTAxMTAyMTczMzMwWhcNMTAxMjAyMTczMzMwWjBIMBYCBTQAAAAIFw0xMDExMDIxNzI4MTNaMBYCBTQAAAAKFw0xMDExMDIxNzMxNDZaMBYCBTQAAAALFw0xMDExMDIxNzMzMjVa", 42 + "1.3.6.1.5.5.7.0.18", 43 + "TBSCertList" 44 + ] 45 + }, 46 + { 47 + "type": "node", 48 + "request": "launch", 49 + "name": "dumpASN1 CMS", 50 + "skipFiles": [ 51 + "<node_internals>/**" 52 + ], 53 + "program": "${workspaceFolder}/dumpASN1.js", 54 + "args": [ 55 + "examples/cms-password.p7m", 56 + "1.2.840.113549.1.9.16.0.14", 57 + "ContentInfo" 58 + ] 59 + }, 60 + { 61 + "type": "node", 62 + "request": "launch", 63 + "name": "dumpASN1 LDAP", 64 + "skipFiles": [ 65 + "<node_internals>/**" 66 + ], 67 + "program": "${workspaceFolder}/dumpASN1.js", 68 + "args": [ 69 + "data:base64,MDMCAQFjLgQACgEACgEAAgEAAgEAAQEAoA+jDQQFTnRWZXIEBAEAAAAwCgQITmV0bG9nb24===", 70 + "1.3.6.1.1.18", 71 + "LDAPMessage" 72 + ] 73 + } 74 + ] 75 + }
+9
.vscode/settings.json
··· 1 + { 2 + "editor.insertSpaces": true, 3 + "editor.tabSize": 8, 4 + "editor.indentSize": 2, 5 + "editor.stickyScroll.enabled": true, 6 + "explorer.excludeGitIgnore": true, 7 + "files.eol": "\n", 8 + "git.openRepositoryInParentFolders": "never" 9 + }
+3 -2
LICENSE
··· 1 - ASN.1 JavaScript decoder Copyright (c) 2008-2018 Lapo Luchini <lapo@lapo.it> 1 + ISC License 2 + 3 + Copyright (c) 2008-2025 Lapo Luchini <lapo@lapo.it> 2 4 3 5 Permission to use, copy, modify, and/or distribute this software for any 4 6 purpose with or without fee is hereby granted, provided that the above ··· 11 13 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 14 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 15 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 -
+80 -3
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 + 8 + Usage with `nodejs` 9 + ------------------- 10 + 11 + This package can be installed with either npm or yarn via the following commands: 12 + 13 + ```sh 14 + npm install @lapo/asn1js 15 + # or other tools 16 + pnpm install @lapo/asn1js 17 + yarn add @lapo/asn1js 18 + ``` 19 + 20 + You can import the classes like this: 21 + 22 + ```js 23 + import { ASN1 } from '@lapo/asn1js'; 24 + ``` 25 + 26 + A submodule of this package can also be imported: 27 + 28 + ```js 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()); 39 + ``` 40 + 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 54 + -------------------- 55 + 56 + Can be [tested on JSFiddle](https://jsfiddle.net/lapo/y6t2wo7q/). 57 + 58 + ```html 59 + <script> 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(); 64 + </script> 65 + ``` 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 + ``` 7 80 8 81 ISC license 9 82 ----------- 10 83 11 - ASN.1 JavaScript decoder Copyright (c) 2008-2018 Lapo Luchini <lapo@lapo.it> 84 + ASN.1 JavaScript decoder Copyright (c) 2008-2025 Lapo Luchini <lapo@lapo.it> 12 85 13 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. 14 87 ··· 21 94 - BMPString support added by [Felipe Gasper](https://github.com/FGasper) 22 95 - extended tag support added by [Pรฉter Budai](https://www.peterbudai.eu/) 23 96 - patches by [Gergely Nagy](https://github.com/ngg) 97 + - Relative OID support added by [Mistial Developer](https://github.com/mistial-dev) 98 + - dark mode and other UI improvements by [Oliver Burgmaier](https://github.com/olibu/) 99 + - patches by [Nicolai Sรธborg](https://github.com/NicolaiSoeborg) 24 100 25 101 links 26 102 ----- 27 103 28 104 - [official website](https://lapo.it/asn1js/) 105 + - [dedicated domain](https://asn1js.eu/) 29 106 - [InDefero tracker](http://idf.lapo.it/p/asn1js/) 30 107 - [GitHub mirror](https://github.com/lapo-luchini/asn1js) 31 - - [Ohloh code stats](https://www.ohloh.net/p/asn1js) 108 + - [Ohloh code stats](https://www.openhub.net/p/asn1js)
+600 -410
asn1.js
··· 1 1 // ASN.1 JavaScript decoder 2 - // Copyright (c) 2008-2018 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 - (function (undefined) { 17 - "use strict"; 16 + import { Int10 } from './int10.js'; 17 + import { oids } from './oids.js'; 18 18 19 - var Int10 = (typeof module !== 'undefined') ? require('./int10.js') : window.Int10, 20 - oids = (typeof module !== 'undefined') ? require('./oids.js') : window.oids, 21 - ellipsis = "\u2026", 22 - 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-5]\d)?)?$/, 23 - 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-5]\d)?)?$/; 19 + const 20 + ellipsis = '\u2026', 21 + 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)?)?$/, 22 + 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)?)?$/, 23 + hexDigits = '0123456789ABCDEF', 24 + b64Std = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 25 + b64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 26 + tableT61 = [ 27 + ['', ''], 28 + ['AEIOUaeiou', 'ร€รˆรŒร’ร™ร รจรฌรฒรน'], // Grave 29 + ['ACEILNORSUYZacegilnorsuyz', 'รฤ†ร‰รฤนลƒร“ล”ลšรšรลนรกฤ‡รฉฤฃรญฤบล„รณล•ล›รบรฝลบ'], // Acute 30 + ['ACEGHIJOSUWYaceghijosuwy', 'ร‚ฤˆรŠฤœฤครŽฤดร”ลœร›ลดลถรขฤ‰รชฤฤฅรฎฤตรดลรปลตลท'], // Circumflex 31 + ['AINOUainou', 'รƒฤจร‘ร•ลจรฃฤฉรฑรตลฉ'], // Tilde 32 + ['AEIOUaeiou', 'ฤ€ฤ’ฤชลŒลชฤฤ“ฤซลลซ'], // Macron 33 + ['AGUagu', 'ฤ‚ฤžลฌฤƒฤŸลญ'], // Breve 34 + ['CEGIZcegz', 'ฤŠฤ–ฤ ฤฐลปฤ‹ฤ—ฤกลผ'], // Dot 35 + ['AEIOUYaeiouy', 'ร„ร‹รร–รœลธรครซรฏรถรผรฟ'], // Umlaut or diรฆresis 36 + ['', ''], 37 + ['AUau', 'ร…ลฎรฅลฏ'], // Ring 38 + ['CGKLNRSTcklnrst', 'ร‡ฤขฤถฤปล…ล–ลžลขรงฤทฤผล†ล—ลŸลฃ'], // Cedilla 39 + ['', ''], 40 + ['OUou', 'ลลฐล‘ลฑ'], // Double Acute 41 + ['AEIUaeiu', 'ฤ„ฤ˜ฤฎลฒฤ…ฤ™ฤฏลณ'], // Ogonek 42 + ['CDELNRSTZcdelnrstz', 'ฤŒฤŽฤšฤฝล‡ล˜ล ลคลฝฤฤฤ›ฤพลˆล™ลกลฅลพ'], // Caron 43 + ]; 24 44 25 45 function stringCut(str, len) { 26 46 if (str.length > len) ··· 28 48 return str; 29 49 } 30 50 31 - function Stream(enc, pos) { 32 - if (enc instanceof Stream) { 33 - this.enc = enc.enc; 34 - this.pos = enc.pos; 35 - } else { 36 - // enc should be an array or a binary string 37 - this.enc = enc; 38 - this.pos = pos; 51 + function checkPrintable(s) { 52 + let i, v; 53 + for (i = 0; i < s.length; ++i) { 54 + v = s.charCodeAt(i); 55 + if (v < 32 && v != 9 && v != 10 && v != 13) // [\t\r\n] are (kinda) printable 56 + throw new Error('Unprintable character at index ' + i + ' (code ' + s.str.charCodeAt(i) + ')'); 39 57 } 40 58 } 41 - Stream.prototype.get = function (pos) { 42 - if (pos === undefined) 43 - pos = this.pos++; 44 - if (pos >= this.enc.length) 45 - throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length; 46 - return (typeof this.enc == "string") ? this.enc.charCodeAt(pos) : this.enc[pos]; 47 - }; 48 - Stream.prototype.hexDigits = "0123456789ABCDEF"; 49 - Stream.prototype.hexByte = function (b) { 50 - return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); 51 - }; 52 - Stream.prototype.hexDump = function (start, end, raw) { 53 - var s = ""; 54 - for (var i = start; i < end; ++i) { 55 - s += this.hexByte(this.get(i)); 56 - if (raw !== true) 57 - switch (i & 0xF) { 58 - case 0x7: s += " "; break; 59 - case 0xF: s += "\n"; break; 60 - default: s += " "; 61 - } 59 + 60 + /** Class to manage a stream of bytes, with a zero-copy approach. 61 + * It uses an existing array or binary string and advances a position index. */ 62 + export class Stream { 63 + 64 + /** 65 + * @param {Stream|array|string} enc data (will not be copied) 66 + * @param {?number} pos starting position (mandatory when `end` is not a Stream) 67 + */ 68 + constructor(enc, pos) { 69 + if (enc instanceof Stream) { 70 + this.enc = enc.enc; 71 + this.pos = enc.pos; 72 + } else { 73 + this.enc = enc; 74 + this.pos = pos; 75 + } 76 + if (typeof this.pos != 'number') 77 + throw new Error('"pos" must be a numeric value'); 78 + if (typeof this.enc == 'string') 79 + this.getRaw = pos => this.enc.charCodeAt(pos); 80 + else if (typeof this.enc[0] == 'number') 81 + this.getRaw = pos => this.enc[pos]; 82 + else 83 + throw new Error('"enc" must be a numeric array or a string'); 84 + } 85 + /** Get the byte at current position (and increment it) or at a specified position (and avoid moving current position). 86 + * @param {?number} pos read position if specified, else current position (and increment it) */ 87 + get(pos) { 88 + if (pos === undefined) 89 + pos = this.pos++; 90 + if (pos >= this.enc.length) 91 + throw new Error('Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length); 92 + return this.getRaw(pos); 93 + } 94 + /** Convert a single byte to an hexadcimal string (of length 2). 95 + * @param {number} b */ 96 + static hexByte(b) { 97 + return hexDigits.charAt((b >> 4) & 0xF) + hexDigits.charAt(b & 0xF); 98 + } 99 + /** Hexadecimal dump of a specified region of the stream. 100 + * @param {number} start starting position (included) 101 + * @param {number} end ending position (excluded) 102 + * @param {string} type 'raw', 'byte' or 'dump' (default) */ 103 + hexDump(start, end, type = 'dump') { 104 + let s = ''; 105 + for (let i = start; i < end; ++i) { 106 + if (type == 'byte' && i > start) 107 + s += ' '; 108 + s += Stream.hexByte(this.get(i)); 109 + if (type == 'dump') 110 + switch (i & 0xF) { 111 + case 0x7: s += ' '; break; 112 + case 0xF: s += '\n'; break; 113 + default: s += ' '; 114 + } 115 + } 116 + return s; 117 + } 118 + /** Base64url dump of a specified region of the stream (according to RFC 4648 section 5). 119 + * @param {number} start starting position (included) 120 + * @param {number} end ending position (excluded) 121 + * @param {string} type 'url' (default, section 5 without padding) or 'std' (section 4 with padding) */ 122 + b64Dump(start, end, type = 'url') { 123 + const b64 = type === 'url' ? b64URL : b64Std; 124 + let extra = (end - start) % 3, 125 + s = '', 126 + i, c; 127 + for (i = start; i + 2 < end; i += 3) { 128 + c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2); 129 + s += b64.charAt(c >> 18 & 0x3F); 130 + s += b64.charAt(c >> 12 & 0x3F); 131 + s += b64.charAt(c >> 6 & 0x3F); 132 + s += b64.charAt(c & 0x3F); 133 + } 134 + if (extra > 0) { 135 + c = this.get(i) << 16; 136 + if (extra > 1) c |= this.get(i + 1) << 8; 137 + s += b64.charAt(c >> 18 & 0x3F); 138 + s += b64.charAt(c >> 12 & 0x3F); 139 + if (extra == 2) s += b64.charAt(c >> 6 & 0x3F); 140 + if (b64 === b64Std) s += '==='.slice(0, 3 - extra); 141 + } 142 + return s; 62 143 } 63 - return s; 64 - }; 65 - Stream.prototype.isASCII = function (start, end) { 66 - for (var i = start; i < end; ++i) { 67 - var c = this.get(i); 68 - if (c < 32 || c > 176) 69 - return false; 144 + isASCII(start, end) { 145 + for (let i = start; i < end; ++i) { 146 + let c = this.get(i); 147 + if (c < 32 || c > 176) 148 + return false; 149 + } 150 + return true; 70 151 } 71 - return true; 72 - }; 73 - Stream.prototype.parseStringISO = function (start, end) { 74 - var s = ""; 75 - for (var i = start; i < end; ++i) 76 - s += String.fromCharCode(this.get(i)); 77 - return s; 78 - }; 79 - Stream.prototype.parseStringUTF = function (start, end) { 80 - var s = ""; 81 - for (var i = start; i < end; ) { 82 - var c = this.get(i++); 83 - if (c < 128) 84 - s += String.fromCharCode(c); 85 - else if ((c > 191) && (c < 224)) 86 - s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F)); 87 - else 88 - s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F)); 152 + parseStringISO(start, end, maxLength) { 153 + let s = ''; 154 + for (let i = start; i < end; ++i) 155 + s += String.fromCharCode(this.get(i)); 156 + return { size: s.length, str: stringCut(s, maxLength) }; 89 157 } 90 - return s; 91 - }; 92 - Stream.prototype.parseStringBMP = function (start, end) { 93 - var str = "", hi, lo; 94 - for (var i = start; i < end; ) { 95 - hi = this.get(i++); 96 - lo = this.get(i++); 97 - str += String.fromCharCode((hi << 8) | lo); 158 + parseStringT61(start, end, maxLength) { 159 + // warning: this code is not very well tested so far 160 + function merge(c, d) { 161 + let t = tableT61[c - 0xC0]; 162 + let i = t[0].indexOf(String.fromCharCode(d)); 163 + return (i < 0) ? '\0' : t[1].charAt(i); 164 + } 165 + let s = '', c; 166 + for (let i = start; i < end; ++i) { 167 + c = this.get(i); 168 + if (c >= 0xA4 && c <= 0xBF) 169 + s += '$ยฅ#ยงยค\0\0ยซ\0\0\0\0ยฐยฑยฒยณร—ยตยถยทรท\0\0ยปยผยฝยพยฟ'.charAt(c - 0xA4); 170 + else if (c >= 0xE0 && c <= 0xFF) 171 + s += 'โ„ฆร†รยชฤฆ\0ฤฒฤฟลร˜ล’ยบรžลฆลŠล‰ฤธรฆฤ‘รฐฤงฤฑฤณล€ล‚รธล“รŸรพลงล‹\0'.charAt(c - 0xE0); 172 + else if (c >= 0xC0 && c <= 0xCF) 173 + s += merge(c, this.get(++i)); 174 + else // using ISO 8859-1 for characters undefined (or equal) in T.61 175 + s += String.fromCharCode(c); 176 + } 177 + return { size: s.length, str: stringCut(s, maxLength) }; 98 178 } 99 - return str; 100 - }; 101 - Stream.prototype.parseTime = function (start, end, shortYear) { 102 - var s = this.parseStringISO(start, end), 103 - m = (shortYear ? reTimeS : reTimeL).exec(s); 104 - if (!m) 105 - return "Unrecognized time: " + s; 106 - if (shortYear) { 107 - // to avoid querying the timer, use the fixed range [1970, 2069] 108 - // it will conform with ITU X.400 [-10, +40] sliding window until 2030 109 - m[1] = +m[1]; 110 - m[1] += (m[1] < 70) ? 2000 : 1900; 179 + parseStringUTF(start, end, maxLength) { 180 + function ex(c) { // must be 10xxxxxx 181 + if ((c < 0x80) || (c >= 0xC0)) 182 + throw new Error('Invalid UTF-8 continuation byte: ' + c); 183 + return (c & 0x3F); 184 + } 185 + function surrogate(cp) { 186 + if (cp < 0x10000) 187 + throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp); 188 + // we could use String.fromCodePoint(cp) but let's be nice to older browsers and use surrogate pairs 189 + cp -= 0x10000; 190 + return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00); 191 + } 192 + let s = ''; 193 + for (let i = start; i < end; ) { 194 + let c = this.get(i++); 195 + if (c < 0x80) // 0xxxxxxx (7 bit) 196 + s += String.fromCharCode(c); 197 + else if (c < 0xC0) 198 + throw new Error('Invalid UTF-8 starting byte: ' + c); 199 + else if (c < 0xE0) // 110xxxxx 10xxxxxx (11 bit) 200 + s += String.fromCharCode(((c & 0x1F) << 6) | ex(this.get(i++))); 201 + else if (c < 0xF0) // 1110xxxx 10xxxxxx 10xxxxxx (16 bit) 202 + s += String.fromCharCode(((c & 0x0F) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++))); 203 + else if (c < 0xF8) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (21 bit) 204 + s += surrogate(((c & 0x07) << 18) | (ex(this.get(i++)) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++))); 205 + else 206 + throw new Error('Invalid UTF-8 starting byte (since 2003 it is restricted to 4 bytes): ' + c); 207 + } 208 + return { size: s.length, str: stringCut(s, maxLength) }; 111 209 } 112 - s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; 113 - if (m[5]) { 114 - s += ":" + m[5]; 115 - if (m[6]) { 116 - s += ":" + m[6]; 117 - if (m[7]) 118 - s += "." + m[7]; 210 + parseStringBMP(start, end, maxLength) { 211 + let s = '', hi, lo; 212 + for (let i = start; i < end; ) { 213 + hi = this.get(i++); 214 + lo = this.get(i++); 215 + s += String.fromCharCode((hi << 8) | lo); 119 216 } 217 + return { size: s.length, str: stringCut(s, maxLength) }; 120 218 } 121 - if (m[8]) { 122 - s += " UTC"; 123 - if (m[8] != 'Z') { 124 - s += m[8]; 219 + parseTime(start, end, shortYear) { 220 + let s = this.parseStringISO(start, end).str, 221 + m = (shortYear ? reTimeS : reTimeL).exec(s); 222 + if (!m) 223 + throw new Error('Unrecognized time: ' + s); 224 + if (shortYear) { 225 + // to avoid querying the timer, use the fixed range [1970, 2069] 226 + // it will conform with ITU X.400 [-10, +40] sliding window until 2030 227 + m[1] = +m[1]; 228 + m[1] += (m[1] < 70) ? 2000 : 1900; 229 + } 230 + s = m[1] + '-' + m[2] + '-' + m[3] + ' ' + m[4]; 231 + if (m[5]) { 232 + s += ':' + m[5]; 233 + if (m[6]) { 234 + s += ':' + m[6]; 235 + if (m[7]) 236 + s += '.' + m[7]; 237 + } 238 + } 239 + if (m[8]) { 240 + s += ' UTC'; 125 241 if (m[9]) 126 - s += ":" + m[9]; 242 + s += m[9] + ':' + (m[10] || '00'); 127 243 } 244 + return s; 128 245 } 129 - return s; 130 - }; 131 - Stream.prototype.parseInteger = function (start, end) { 132 - var v = this.get(start), 133 - neg = (v > 127), 134 - pad = neg ? 255 : 0, 135 - len, 136 - s = ''; 137 - // skip unuseful bits (not allowed in DER) 138 - while (v == pad && ++start < end) 139 - v = this.get(start); 140 - len = end - start; 141 - if (len === 0) 142 - return neg ? '-1' : '0'; 143 - // show bit length of huge integers 144 - if (len > 4) { 145 - s = v; 146 - len <<= 3; 147 - while (((s ^ pad) & 0x80) == 0) { 148 - s <<= 1; 149 - --len; 246 + parseInteger(start, end) { 247 + let v = this.get(start), 248 + neg = (v > 127), 249 + pad = neg ? 255 : 0, 250 + len, 251 + s = ''; 252 + // skip unuseful bits (not allowed in DER) 253 + while (v == pad && ++start < end) 254 + v = this.get(start); 255 + len = end - start; 256 + if (len === 0) 257 + return neg ? '-1' : '0'; 258 + // show bit length of huge integers 259 + if (len > 4) { 260 + s = v; 261 + len <<= 3; 262 + while (((s ^ pad) & 0x80) == 0) { 263 + s <<= 1; 264 + --len; 265 + } 266 + s = '(' + len + ' bit)\n'; 150 267 } 151 - s = "(" + len + " bit)\n"; 268 + // decode the integer 269 + if (neg) v = v - 256; 270 + let n = new Int10(v); 271 + for (let i = start + 1; i < end; ++i) 272 + n.mulAdd(256, this.get(i)); 273 + return s + n.toString(); 152 274 } 153 - // decode the integer 154 - if (neg) v = v - 256; 155 - var n = new Int10(v); 156 - for (var i = start + 1; i < end; ++i) 157 - n.mulAdd(256, this.get(i)); 158 - return s + n.toString(); 159 - }; 160 - Stream.prototype.parseBitString = function (start, end, maxLength) { 161 - var unusedBit = this.get(start), 162 - lenBit = ((end - start - 1) << 3) - unusedBit, 163 - intro = "(" + lenBit + " bit)\n", 164 - s = ""; 165 - for (var i = start + 1; i < end; ++i) { 166 - var b = this.get(i), 167 - skip = (i == end - 1) ? unusedBit : 0; 168 - for (var j = 7; j >= skip; --j) 169 - s += (b >> j) & 1 ? "1" : "0"; 170 - if (s.length > maxLength) 171 - return intro + stringCut(s, maxLength); 172 - } 173 - return intro + s; 174 - }; 175 - Stream.prototype.parseOctetString = function (start, end, maxLength) { 176 - if (this.isASCII(start, end)) 177 - return stringCut(this.parseStringISO(start, end), maxLength); 178 - var len = end - start, 179 - s = "(" + len + " byte)\n"; 180 - maxLength /= 2; // we work in bytes 181 - if (len > maxLength) 182 - end = start + maxLength; 183 - for (var i = start; i < end; ++i) 184 - s += this.hexByte(this.get(i)); 185 - if (len > maxLength) 186 - s += ellipsis; 187 - return s; 188 - }; 189 - Stream.prototype.parseOID = function (start, end, maxLength) { 190 - var s = '', 191 - n = new Int10(), 192 - bits = 0; 193 - for (var i = start; i < end; ++i) { 194 - var v = this.get(i); 195 - n.mulAdd(128, v & 0x7F); 196 - bits += 7; 197 - if (!(v & 0x80)) { // finished 198 - if (s === '') { 199 - n = n.simplify(); 200 - if (n instanceof Int10) { 201 - n.sub(80); 202 - s = "2." + n.toString(); 203 - } else { 204 - var m = n < 80 ? n < 40 ? 0 : 1 : 2; 205 - s = m + "." + (n - m * 40); 206 - } 207 - } else 208 - s += "." + n.toString(); 275 + parseBitString(start, end, maxLength) { 276 + let unusedBits = this.get(start); 277 + if (unusedBits > 7) 278 + throw new Error('Invalid BitString with unusedBits=' + unusedBits); 279 + let lenBit = ((end - start - 1) << 3) - unusedBits, 280 + s = ''; 281 + for (let i = start + 1; i < end; ++i) { 282 + let b = this.get(i), 283 + skip = (i == end - 1) ? unusedBits : 0; 284 + for (let j = 7; j >= skip; --j) 285 + s += (b >> j) & 1 ? '1' : '0'; 209 286 if (s.length > maxLength) 210 - return stringCut(s, maxLength); 211 - n = new Int10(); 212 - bits = 0; 287 + s = stringCut(s, maxLength); 213 288 } 289 + return { size: lenBit, str: s }; 214 290 } 215 - if (bits > 0) 216 - s += ".incomplete"; 217 - if (typeof oids === 'object') { 218 - var oid = oids[s]; 219 - if (oid) { 220 - if (oid.d) s += "\n" + oid.d; 221 - if (oid.c) s += "\n" + oid.c; 222 - if (oid.w) s += "\n(warning!)"; 291 + parseOctetString(start, end, maxLength) { 292 + let len = end - start, 293 + s; 294 + try { 295 + s = this.parseStringUTF(start, end, maxLength); 296 + checkPrintable(s.str); 297 + return { size: end - start, str: s.str }; 298 + } catch (e) { 299 + // ignore 223 300 } 301 + maxLength /= 2; // we work in bytes 302 + if (len > maxLength) 303 + end = start + maxLength; 304 + s = ''; 305 + for (let i = start; i < end; ++i) 306 + s += Stream.hexByte(this.get(i)); 307 + if (len > maxLength) 308 + s += ellipsis; 309 + return { size: len, str: s }; 224 310 } 225 - return s; 226 - }; 311 + parseOID(start, end, maxLength, isRelative) { 312 + let s = '', 313 + n = new Int10(), 314 + bits = 0; 315 + for (let i = start; i < end; ++i) { 316 + let v = this.get(i); 317 + n.mulAdd(128, v & 0x7F); 318 + bits += 7; 319 + if (!(v & 0x80)) { // finished 320 + if (s === '') { 321 + n = n.simplify(); 322 + if (isRelative) { 323 + s = (n instanceof Int10) ? n.toString() : '' + n; 324 + } else if (n instanceof Int10) { 325 + n.sub(80); 326 + s = '2.' + n.toString(); 327 + } else { 328 + let m = n < 80 ? n < 40 ? 0 : 1 : 2; 329 + s = m + '.' + (n - m * 40); 330 + } 331 + } else 332 + s += '.' + n.toString(); 333 + if (s.length > maxLength) 334 + return stringCut(s, maxLength); 335 + n = new Int10(); 336 + bits = 0; 337 + } 338 + } 339 + if (bits > 0) 340 + s += '.incomplete'; 341 + if (typeof oids === 'object' && !isRelative) { 342 + let oid = oids[s]; 343 + if (oid) { 344 + if (oid.d) s += '\n' + oid.d; 345 + if (oid.c) s += '\n' + oid.c; 346 + if (oid.w) s += '\n(warning!)'; 347 + } 348 + } 349 + return s; 350 + } 351 + parseRelativeOID(start, end, maxLength) { 352 + return this.parseOID(start, end, maxLength, true); 353 + } 354 + } 227 355 228 - function ASN1(stream, header, length, tag, sub) { 229 - if (!(tag instanceof ASN1Tag)) throw 'Invalid tag value.'; 230 - this.stream = stream; 231 - this.header = header; 232 - this.length = length; 233 - this.tag = tag; 234 - this.sub = sub; 356 + function recurse(el, parser, maxLength) { 357 + let avoidRecurse = true; 358 + if (el.tag.tagConstructed && el.sub) { 359 + avoidRecurse = false; 360 + el.sub.forEach(function (e1) { 361 + if (e1.tag.tagClass != el.tag.tagClass || e1.tag.tagNumber != el.tag.tagNumber) 362 + avoidRecurse = true; 363 + }); 364 + } 365 + if (avoidRecurse) 366 + return el.stream[parser](el.posContent(), el.posContent() + Math.abs(el.length), maxLength); 367 + let d = { size: 0, str: '' }; 368 + el.sub.forEach(function (el) { 369 + let d1 = recurse(el, parser, maxLength - d.str.length); 370 + d.size += d1.size; 371 + d.str += d1.str; 372 + }); 373 + return d; 235 374 } 236 - ASN1.prototype.typeName = function () { 237 - switch (this.tag.tagClass) { 238 - case 0: // universal 375 + 376 + class ASN1Tag { 377 + constructor(stream) { 378 + let buf = stream.get(); 379 + this.tagClass = buf >> 6; 380 + this.tagConstructed = ((buf & 0x20) !== 0); 381 + this.tagNumber = buf & 0x1F; 382 + if (this.tagNumber == 0x1F) { // long tag 383 + let n = new Int10(); 384 + do { 385 + buf = stream.get(); 386 + n.mulAdd(128, buf & 0x7F); 387 + } while (buf & 0x80); 388 + this.tagNumber = n.simplify(); 389 + } 390 + } 391 + isUniversal() { 392 + return this.tagClass === 0x00; 393 + } 394 + isEOC() { 395 + return this.tagClass === 0x00 && this.tagNumber === 0x00; 396 + } 397 + } 398 + 399 + export class ASN1 { 400 + constructor(stream, header, length, tag, tagLen, sub) { 401 + if (!(tag instanceof ASN1Tag)) throw new Error('Invalid tag value.'); 402 + this.stream = stream; 403 + this.header = header; 404 + this.length = length; 405 + this.tag = tag; 406 + this.tagLen = tagLen; 407 + this.sub = sub; 408 + } 409 + typeName() { 410 + switch (this.tag.tagClass) { 411 + case 0: // universal 412 + switch (this.tag.tagNumber) { 413 + case 0x00: return 'EOC'; 414 + case 0x01: return 'BOOLEAN'; 415 + case 0x02: return 'INTEGER'; 416 + case 0x03: return 'BIT_STRING'; 417 + case 0x04: return 'OCTET_STRING'; 418 + case 0x05: return 'NULL'; 419 + case 0x06: return 'OBJECT_IDENTIFIER'; 420 + case 0x07: return 'ObjectDescriptor'; 421 + case 0x08: return 'EXTERNAL'; 422 + case 0x09: return 'REAL'; 423 + case 0x0A: return 'ENUMERATED'; 424 + case 0x0B: return 'EMBEDDED_PDV'; 425 + case 0x0C: return 'UTF8String'; 426 + case 0x0D: return 'RELATIVE_OID'; 427 + case 0x10: return 'SEQUENCE'; 428 + case 0x11: return 'SET'; 429 + case 0x12: return 'NumericString'; 430 + case 0x13: return 'PrintableString'; // ASCII subset 431 + case 0x14: return 'TeletexString'; // aka T61String 432 + case 0x15: return 'VideotexString'; 433 + case 0x16: return 'IA5String'; // ASCII 434 + case 0x17: return 'UTCTime'; 435 + case 0x18: return 'GeneralizedTime'; 436 + case 0x19: return 'GraphicString'; 437 + case 0x1A: return 'VisibleString'; // ASCII subset 438 + case 0x1B: return 'GeneralString'; 439 + case 0x1C: return 'UniversalString'; 440 + case 0x1E: return 'BMPString'; 441 + } 442 + return 'Universal_' + this.tag.tagNumber.toString(); 443 + case 1: return 'Application_' + this.tag.tagNumber.toString(); 444 + case 2: return '[' + this.tag.tagNumber.toString() + ']'; // Context 445 + case 3: return 'Private_' + this.tag.tagNumber.toString(); 446 + } 447 + } 448 + /** A string preview of the content (intended for humans). */ 449 + content(maxLength) { 450 + if (this.tag === undefined) 451 + return null; 452 + if (maxLength === undefined) 453 + maxLength = Infinity; 454 + let content = this.posContent(), 455 + len = Math.abs(this.length); 456 + if (!this.tag.isUniversal()) { 457 + if (this.sub !== null) 458 + return '(' + this.sub.length + ' elem)'; 459 + let d1 = this.stream.parseOctetString(content, content + len, maxLength); 460 + return '(' + d1.size + ' byte)\n' + d1.str; 461 + } 239 462 switch (this.tag.tagNumber) { 240 - case 0x00: return "EOC"; 241 - case 0x01: return "BOOLEAN"; 242 - case 0x02: return "INTEGER"; 243 - case 0x03: return "BIT_STRING"; 244 - case 0x04: return "OCTET_STRING"; 245 - case 0x05: return "NULL"; 246 - case 0x06: return "OBJECT_IDENTIFIER"; 247 - case 0x07: return "ObjectDescriptor"; 248 - case 0x08: return "EXTERNAL"; 249 - case 0x09: return "REAL"; 250 - case 0x0A: return "ENUMERATED"; 251 - case 0x0B: return "EMBEDDED_PDV"; 252 - case 0x0C: return "UTF8String"; 253 - case 0x10: return "SEQUENCE"; 254 - case 0x11: return "SET"; 255 - case 0x12: return "NumericString"; 256 - case 0x13: return "PrintableString"; // ASCII subset 257 - case 0x14: return "TeletexString"; // aka T61String 258 - case 0x15: return "VideotexString"; 259 - case 0x16: return "IA5String"; // ASCII 260 - case 0x17: return "UTCTime"; 261 - case 0x18: return "GeneralizedTime"; 262 - case 0x19: return "GraphicString"; 263 - case 0x1A: return "VisibleString"; // ASCII subset 264 - case 0x1B: return "GeneralString"; 265 - case 0x1C: return "UniversalString"; 266 - case 0x1E: return "BMPString"; 463 + case 0x01: // BOOLEAN 464 + return (this.stream.get(content) === 0) ? 'false' : 'true'; 465 + case 0x02: // INTEGER 466 + return this.stream.parseInteger(content, content + len); 467 + case 0x03: { // BIT_STRING 468 + let d = recurse(this, 'parseBitString', maxLength); 469 + return '(' + d.size + ' bit)\n' + d.str; 470 + } 471 + case 0x04: { // OCTET_STRING 472 + let d = recurse(this, 'parseOctetString', maxLength); 473 + return '(' + d.size + ' byte)\n' + d.str; 474 + } 475 + //case 0x05: // NULL 476 + case 0x06: // OBJECT_IDENTIFIER 477 + return this.stream.parseOID(content, content + len, maxLength); 478 + //case 0x07: // ObjectDescriptor 479 + //case 0x08: // EXTERNAL 480 + //case 0x09: // REAL 481 + case 0x0A: // ENUMERATED 482 + return this.stream.parseInteger(content, content + len); 483 + //case 0x0B: // EMBEDDED_PDV 484 + case 0x0D: // RELATIVE-OID 485 + return this.stream.parseRelativeOID(content, content + len, maxLength); 486 + case 0x10: // SEQUENCE 487 + case 0x11: // SET 488 + if (this.sub !== null) 489 + return '(' + this.sub.length + ' elem)'; 490 + else 491 + return '(no elem)'; 492 + case 0x0C: // UTF8String 493 + return recurse(this, 'parseStringUTF', maxLength).str; 494 + case 0x14: // TeletexString 495 + return recurse(this, 'parseStringT61', maxLength).str; 496 + case 0x12: // NumericString 497 + case 0x13: // PrintableString 498 + case 0x15: // VideotexString 499 + case 0x16: // IA5String 500 + case 0x1A: // VisibleString 501 + case 0x1B: // GeneralString 502 + //case 0x19: // GraphicString 503 + //case 0x1C: // UniversalString 504 + return recurse(this, 'parseStringISO', maxLength).str; 505 + case 0x1E: // BMPString 506 + return recurse(this, 'parseStringBMP', maxLength).str; 507 + case 0x17: // UTCTime 508 + case 0x18: // GeneralizedTime 509 + return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); 267 510 } 268 - return "Universal_" + this.tag.tagNumber.toString(); 269 - case 1: return "Application_" + this.tag.tagNumber.toString(); 270 - case 2: return "[" + this.tag.tagNumber.toString() + "]"; // Context 271 - case 3: return "Private_" + this.tag.tagNumber.toString(); 272 - } 273 - }; 274 - ASN1.prototype.content = function (maxLength) { // a preview of the content (intended for humans) 275 - if (this.tag === undefined) 276 511 return null; 277 - if (maxLength === undefined) 278 - maxLength = Infinity; 279 - var content = this.posContent(), 280 - len = Math.abs(this.length); 281 - if (!this.tag.isUniversal()) { 282 - if (this.sub !== null) 283 - return "(" + this.sub.length + " elem)"; 284 - return this.stream.parseOctetString(content, content + len, maxLength); 512 + } 513 + toString() { 514 + return this.typeName() + '@' + this.stream.pos + '[header:' + this.header + ',length:' + this.length + ',sub:' + ((this.sub === null) ? 'null' : this.sub.length) + ']'; 515 + } 516 + toPrettyString(indent) { 517 + if (indent === undefined) indent = ''; 518 + let s = indent; 519 + if (this.def) { 520 + if (this.def.id) 521 + s += this.def.id + ' '; 522 + if (this.def.name && this.def.name != this.typeName().replace(/_/g, ' ')) 523 + s+= this.def.name + ' '; 524 + if (this.def.mismatch) 525 + s += '[?] '; 526 + } 527 + s += this.typeName() + ' @' + this.stream.pos; 528 + if (this.length >= 0) 529 + s += '+'; 530 + s += this.length; 531 + if (this.tag.tagConstructed) 532 + s += ' (constructed)'; 533 + else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 534 + s += ' (encapsulates)'; 535 + let content = this.content(); 536 + if (content) 537 + s += ': ' + content.replace(/\n/g, '|'); 538 + s += '\n'; 539 + if (this.sub !== null) { 540 + indent += ' '; 541 + for (let i = 0, max = this.sub.length; i < max; ++i) 542 + s += this.sub[i].toPrettyString(indent); 543 + } 544 + return s; 545 + } 546 + posStart() { 547 + return this.stream.pos; 548 + } 549 + posContent() { 550 + return this.stream.pos + this.header; 551 + } 552 + posEnd() { 553 + return this.stream.pos + this.header + Math.abs(this.length); 554 + } 555 + /** Position of the length. */ 556 + posLen() { 557 + return this.stream.pos + this.tagLen; 285 558 } 286 - switch (this.tag.tagNumber) { 287 - case 0x01: // BOOLEAN 288 - return (this.stream.get(content) === 0) ? "false" : "true"; 289 - case 0x02: // INTEGER 290 - return this.stream.parseInteger(content, content + len); 291 - case 0x03: // BIT_STRING 292 - return this.sub ? "(" + this.sub.length + " elem)" : 293 - this.stream.parseBitString(content, content + len, maxLength); 294 - case 0x04: // OCTET_STRING 295 - return this.sub ? "(" + this.sub.length + " elem)" : 296 - this.stream.parseOctetString(content, content + len, maxLength); 297 - //case 0x05: // NULL 298 - case 0x06: // OBJECT_IDENTIFIER 299 - return this.stream.parseOID(content, content + len, maxLength); 300 - //case 0x07: // ObjectDescriptor 301 - //case 0x08: // EXTERNAL 302 - //case 0x09: // REAL 303 - //case 0x0A: // ENUMERATED 304 - //case 0x0B: // EMBEDDED_PDV 305 - case 0x10: // SEQUENCE 306 - case 0x11: // SET 307 - if (this.sub !== null) 308 - return "(" + this.sub.length + " elem)"; 309 - else 310 - return "(no elem)"; 311 - case 0x0C: // UTF8String 312 - return stringCut(this.stream.parseStringUTF(content, content + len), maxLength); 313 - case 0x12: // NumericString 314 - case 0x13: // PrintableString 315 - case 0x14: // TeletexString 316 - case 0x15: // VideotexString 317 - case 0x16: // IA5String 318 - //case 0x19: // GraphicString 319 - case 0x1A: // VisibleString 320 - //case 0x1B: // GeneralString 321 - //case 0x1C: // UniversalString 322 - return stringCut(this.stream.parseStringISO(content, content + len), maxLength); 323 - case 0x1E: // BMPString 324 - return stringCut(this.stream.parseStringBMP(content, content + len), maxLength); 325 - case 0x17: // UTCTime 326 - case 0x18: // GeneralizedTime 327 - return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); 559 + /** Hexadecimal dump of the node. 560 + * @param type 'raw', 'byte' or 'dump' */ 561 + toHexString(type = 'raw') { 562 + return this.stream.hexDump(this.posStart(), this.posEnd(), type); 328 563 } 329 - return null; 330 - }; 331 - ASN1.prototype.toString = function () { 332 - return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? 'null' : this.sub.length) + "]"; 333 - }; 334 - ASN1.prototype.toPrettyString = function (indent) { 335 - if (indent === undefined) indent = ''; 336 - var s = indent + this.typeName() + " @" + this.stream.pos; 337 - if (this.length >= 0) 338 - s += "+"; 339 - s += this.length; 340 - if (this.tag.tagConstructed) 341 - s += " (constructed)"; 342 - else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 343 - s += " (encapsulates)"; 344 - var content = this.content(); 345 - if (content) 346 - s += ": " + content.replace(/\n/g, '|'); 347 - s += "\n"; 348 - if (this.sub !== null) { 349 - indent += ' '; 350 - for (var i = 0, max = this.sub.length; i < max; ++i) 351 - s += this.sub[i].toPrettyString(indent); 564 + /** Base64url dump of the node (according to RFC 4648 section 5). 565 + * @param {string} type 'url' (default, section 5 without padding) or 'std' (section 4 with padding) 566 + */ 567 + toB64String(type = 'url') { 568 + return this.stream.b64Dump(this.posStart(), this.posEnd(), type); 352 569 } 353 - return s; 354 - }; 355 - ASN1.prototype.posStart = function () { 356 - return this.stream.pos; 357 - }; 358 - ASN1.prototype.posContent = function () { 359 - return this.stream.pos + this.header; 360 - }; 361 - ASN1.prototype.posEnd = function () { 362 - return this.stream.pos + this.header + Math.abs(this.length); 363 - }; 364 - ASN1.prototype.toHexString = function (root) { 365 - return this.stream.hexDump(this.posStart(), this.posEnd(), true); 366 - }; 367 - ASN1.decodeLength = function (stream) { 368 - var buf = stream.get(), 369 - len = buf & 0x7F; 370 - if (len == buf) 371 - return len; 372 - if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways 373 - throw "Length over 48 bits not supported at position " + (stream.pos - 1); 374 - if (len === 0) 375 - return null; // undefined 376 - buf = 0; 377 - for (var i = 0; i < len; ++i) 378 - buf = (buf * 256) + stream.get(); 379 - return buf; 380 - }; 381 - function ASN1Tag(stream) { 382 - var buf = stream.get(); 383 - this.tagClass = buf >> 6; 384 - this.tagConstructed = ((buf & 0x20) !== 0); 385 - this.tagNumber = buf & 0x1F; 386 - if (this.tagNumber == 0x1F) { // long tag 387 - var n = new Int10(); 388 - do { 389 - buf = stream.get(); 390 - n.mulAdd(128, buf & 0x7F); 391 - } while (buf & 0x80); 392 - this.tagNumber = n.simplify(); 570 + static decodeLength(stream) { 571 + let buf = stream.get(), 572 + len = buf & 0x7F; 573 + if (len == buf) // first bit was 0, short form 574 + return len; 575 + if (len === 0) // long form with length 0 is a special case 576 + return null; // undefined length 577 + if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways 578 + throw new Error('Length over 48 bits not supported at position ' + (stream.pos - 1)); 579 + buf = 0; 580 + for (let i = 0; i < len; ++i) 581 + buf = (buf * 256) + stream.get(); 582 + return buf; 393 583 } 394 - } 395 - ASN1Tag.prototype.isUniversal = function () { 396 - return this.tagClass === 0x00; 397 - }; 398 - ASN1Tag.prototype.isEOC = function () { 399 - return this.tagClass === 0x00 && this.tagNumber === 0x00; 400 - }; 401 - ASN1.decode = function (stream) { 402 - if (!(stream instanceof Stream)) 403 - stream = new Stream(stream, 0); 404 - var streamStart = new Stream(stream), 405 - tag = new ASN1Tag(stream), 406 - len = ASN1.decodeLength(stream), 407 - start = stream.pos, 408 - header = start - streamStart.pos, 409 - sub = null, 410 - getSub = function () { 411 - sub = []; 412 - if (len !== null) { 413 - // definite length 414 - var end = start + len; 415 - if (end > stream.enc.length) 416 - throw 'Container at offset ' + start + ' has a length of ' + len + ', which is past the end of the stream'; 417 - while (stream.pos < end) 418 - sub[sub.length] = ASN1.decode(stream); 419 - if (stream.pos != end) 420 - throw 'Content size is not correct for container at offset ' + start; 421 - } else { 422 - // undefined length 423 - try { 424 - for (;;) { 425 - var s = ASN1.decode(stream); 426 - if (s.tag.isEOC()) 427 - break; 428 - sub[sub.length] = s; 584 + static decode(stream, offset, type = ASN1) { 585 + if (!(type == ASN1 || type.prototype instanceof ASN1)) 586 + throw new Error('Must pass a class that extends ASN1'); 587 + if (!(stream instanceof Stream)) 588 + stream = new Stream(stream, offset || 0); 589 + let streamStart = new Stream(stream), 590 + tag = new ASN1Tag(stream), 591 + tagLen = stream.pos - streamStart.pos, 592 + len = ASN1.decodeLength(stream), 593 + start = stream.pos, 594 + header = start - streamStart.pos, 595 + sub = null, 596 + getSub = function () { 597 + sub = []; 598 + if (len !== null) { 599 + // definite length 600 + let end = start + len; 601 + if (end > stream.enc.length) 602 + throw new Error('Container at offset ' + start + ' has a length of ' + len + ', which is past the end of the stream'); 603 + while (stream.pos < end) 604 + sub[sub.length] = type.decode(stream); 605 + if (stream.pos != end) 606 + throw new Error('Content size is not correct for container at offset ' + start); 607 + } else { 608 + // undefined length 609 + try { 610 + for (;;) { 611 + let s = type.decode(stream); 612 + if (s.tag.isEOC()) 613 + break; 614 + sub[sub.length] = s; 615 + } 616 + len = start - stream.pos; // undefined lengths are represented as negative values 617 + } catch (e) { 618 + throw new Error('Exception while decoding undefined length content at offset ' + start + ': ' + e); 429 619 } 430 - len = start - stream.pos; // undefined lengths are represented as negative values 431 - } catch (e) { 432 - throw 'Exception while decoding undefined length content at offset ' + start + ': ' + e; 433 620 } 621 + }; 622 + if (tag.tagConstructed) { 623 + // must have valid content 624 + getSub(); 625 + } else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { 626 + // sometimes BitString and OctetString are used to encapsulate ASN.1 627 + try { 628 + if (tag.tagNumber == 0x03) 629 + if (stream.get() != 0) 630 + throw new Error('BIT STRINGs with unused bits cannot encapsulate.'); 631 + getSub(); 632 + for (let s of sub) { 633 + if (s.tag.isEOC()) 634 + throw new Error('EOC is not supposed to be actual content.'); 635 + try { 636 + s.content(); 637 + } catch (e) { 638 + throw new Error('Unable to parse content: ' + e); 639 + } 640 + } 641 + } catch (e) { 642 + // but silently ignore when they don't 643 + sub = null; 644 + //DEBUG console.log('Could not decode structure at ' + start + ':', e); 434 645 } 435 - }; 436 - if (tag.tagConstructed) { 437 - // must have valid content 438 - getSub(); 439 - } else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { 440 - // sometimes BitString and OctetString are used to encapsulate ASN.1 441 - try { 442 - if (tag.tagNumber == 0x03) 443 - if (stream.get() != 0) 444 - throw "BIT STRINGs with unused bits cannot encapsulate."; 445 - getSub(); 446 - for (var i = 0; i < sub.length; ++i) 447 - if (sub[i].tag.isEOC()) 448 - throw 'EOC is not supposed to be actual content.'; 449 - } catch (e) { 450 - // but silently ignore when they don't 451 - sub = null; 452 - //DEBUG console.log('Could not decode structure at ' + start + ':', e); 646 + } 647 + if (sub === null) { 648 + if (len === null) 649 + throw new Error("We can't skip over an invalid tag with undefined length at offset " + start); 650 + stream.pos = start + Math.abs(len); 453 651 } 652 + return new type(streamStart, header, len, tag, tagLen, sub); 454 653 } 455 - if (sub === null) { 456 - if (len === null) 457 - throw "We can't skip over an invalid tag with undefined length at offset " + start; 458 - stream.pos = start + Math.abs(len); 459 - } 460 - return new ASN1(streamStart, header, len, tag, sub); 461 - }; 462 654 463 - // export globals 464 - if (typeof module !== 'undefined') { module.exports = ASN1; } else { window.ASN1 = ASN1; } 465 - })(); 655 + }
+82 -66
base64.js
··· 1 1 // Base64 JavaScript decoder 2 - // Copyright (c) 2008-2018 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 - (function (undefined) { 17 - "use strict"; 16 + const 17 + haveU8 = (typeof Uint8Array == 'function'); 18 + 19 + let decoder; // populated on first usage 18 20 19 - var Base64 = {}, 20 - decoder; 21 + export class Base64 { 21 22 22 - Base64.decode = function (a) { 23 - var i; 24 - if (decoder === undefined) { 25 - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", 26 - ignore = "= \f\n\r\t\u00A0\u2028\u2029"; 27 - decoder = []; 28 - for (i = 0; i < 64; ++i) 29 - decoder[b64.charAt(i)] = i; 30 - for (i = 0; i < ignore.length; ++i) 31 - decoder[ignore.charAt(i)] = -1; 32 - // RFC 3548 URL & file safe encoding 33 - decoder['-'] = decoder['+']; 34 - decoder['_'] = decoder['/']; 35 - } 36 - var out = []; 37 - var bits = 0, char_count = 0; 38 - for (i = 0; i < a.length; ++i) { 39 - var c = a.charAt(i); 40 - if (c == '=') 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); 41 65 break; 42 - c = decoder[c]; 43 - if (c == -1) 44 - continue; 45 - if (c === undefined) 46 - throw 'Illegal character at offset ' + i; 47 - bits |= c; 48 - if (++char_count >= 4) { 49 - out[out.length] = (bits >> 16); 50 - out[out.length] = (bits >> 8) & 0xFF; 51 - out[out.length] = bits & 0xFF; 52 - bits = 0; 53 - char_count = 0; 54 - } else { 55 - bits <<= 6; 66 + case 3: 67 + out[len++] = (bits >> 16); 68 + out[len++] = (bits >> 8) & 0xFF; 69 + break; 56 70 } 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; 57 74 } 58 - switch (char_count) { 59 - case 1: 60 - throw "Base64 encoding incomplete: at least 2 bits missing"; 61 - case 2: 62 - out[out.length] = (bits >> 10); 63 - break; 64 - case 3: 65 - out[out.length] = (bits >> 16); 66 - out[out.length] = (bits >> 8) & 0xFF; 67 - break; 75 + 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'); 68 85 } 69 - return out; 70 - }; 71 86 72 - Base64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/; 73 - Base64.unarmor = function (a) { 74 - var m = Base64.re.exec(a); 75 - if (m) { 76 - if (m[1]) 77 - a = m[1]; 78 - else if (m[2]) 79 - a = m[2]; 80 - else 81 - 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); 82 100 } 83 - return Base64.decode(a); 84 - }; 101 + 102 + } 85 103 86 - // export globals 87 - if (typeof module !== 'undefined') { module.exports = Base64; } else { window.Base64 = Base64; } 88 - })(); 104 + Base64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====|^([A-Za-z0-9+/=\s]+)$/;
+2 -2
check.sh
··· 1 1 #!/bin/sh 2 - sha256sum </dev/null >/dev/null 2>&1 && SHA256=sha256sum || SHA256=gsha256sum 3 - gpg -o - sha256sums.asc | $SHA256 -c --quiet 2 + type gsha256sum >/dev/null 2>/dev/null && SHA256=gsha256sum || SHA256=sha256sum 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 + };
+141
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 (e) { /*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) def.id = c.id; 39 + def.type = c.type.name ? c.type : c; 40 + break; 41 + } 42 + } 43 + } 44 + const id = def?.id; 45 + if (id) 46 + def = Object.assign({}, def, { id }); 47 + return def ?? { type: {} }; 48 + } 49 + 50 + function firstUpper(s) { 51 + return s[0].toUpperCase() + s.slice(1); 52 + } 53 + 54 + export class Defs { 55 + 56 + static moduleAndType(mod, name) { 57 + return Object.assign({ module: { oid: mod.oid, name: mod.name, source: mod.source } }, mod.types[name]); 58 + } 59 + 60 + static searchType(name) { 61 + for (const mod of Object.values(rfcdef)) 62 + if (name in mod.types) { 63 + // console.log(name + ' found in ' + r.name); 64 + // return r.types[name]; 65 + return Defs.moduleAndType(mod, name); 66 + } 67 + throw new Error('Type not found: ' + name); 68 + } 69 + 70 + static match(value, def, stats = { total: 0, recognized: 0, defs: {} }) { 71 + value.def = {}; 72 + let tn = value.typeName().replaceAll('_', ' '); 73 + def = translate(def, tn, stats); 74 + ++stats.total; 75 + if (def?.type) { 76 + // if (def.id || def.name) ++stats.recognized; 77 + if (tn == def.type.name || tn == def.name || def.name == 'ANY') 78 + ++stats.recognized; 79 + else if (def.name) 80 + def = Object.assign({ mismatch: 1 }, def); 81 + value.def = def; 82 + } 83 + if (value.sub !== null) { 84 + if (def?.type?.type) 85 + def = def.type; 86 + let j = def?.content ? 0 : -1; 87 + for (const subval of value.sub) { 88 + let type; 89 + if (j >= 0) { 90 + if (def.typeOf) 91 + type = def.content[0]; 92 + else { 93 + let tn = subval.typeName().replaceAll('_', ' '); 94 + for (;;) { 95 + type = def.content[j++]; 96 + if (!type || typeof type != 'object') break; 97 + if (type?.type?.type) 98 + type = type.type; 99 + if (type.type == 'defined') { 100 + let t2 = translate(type, tn); 101 + if (t2.type.name == tn) break; // exact match 102 + if (t2.type.name == 'ANY') break; // good enough 103 + } 104 + if (type.name == tn) break; // exact match 105 + if (type.name == 'ANY') break; // good enough 106 + if (!('optional' in type || 'default' in type)) break; 107 + } 108 + if (type?.type == 'builtin' || type?.type == 'defined') { 109 + let v = subval.content(); 110 + if (typeof v == 'string') 111 + v = v.split(/\n/); 112 + stats.defs[type.id] = v; 113 + } else if (type?.definedBy && stats.defs?.[type.definedBy]?.[1]) { // hope current OIDs contain the type name (will need to parse from RFC itself) 114 + try { 115 + type = Defs.searchType(firstUpper(stats.defs[type.definedBy][1])); 116 + } catch (e) { /*ignore*/ } 117 + } 118 + } 119 + } 120 + Defs.match(subval, type, stats); 121 + } 122 + } 123 + return stats; 124 + } 125 + 126 + } 127 + 128 + Defs.RFC = rfcdef; 129 + 130 + Defs.commonTypes = [ 131 + [ 'X.509 certificate', '1.3.6.1.5.5.7.0.18', 'Certificate' ], 132 + [ 'X.509 public key info', '1.3.6.1.5.5.7.0.18', 'SubjectPublicKeyInfo' ], 133 + [ 'X.509 certificate revocation list', '1.3.6.1.5.5.7.0.18', 'CertificateList' ], 134 + [ 'CMS / PKCS#7 envelope', '1.2.840.113549.1.9.16.0.14', 'ContentInfo' ], 135 + [ 'PKCS#1 RSA private key', '1.2.840.113549.1.1.0.1', 'RSAPrivateKey' ], 136 + [ 'PKCS#8 encrypted private key', '1.2.840.113549.1.8.1.1', 'EncryptedPrivateKeyInfo' ], 137 + [ 'PKCS#8 private key', '1.2.840.113549.1.8.1.1', 'PrivateKeyInfo' ], 138 + [ 'PKCS#10 certification request', '1.2.840.113549.1.10.1.1', 'CertificationRequest' ], 139 + [ 'CMP PKI Message', '1.3.6.1.5.5.7.0.16', 'PKIMessage' ], 140 + [ 'LDAP Message', '1.3.6.1.1.18', 'LDAPMessage' ], 141 + ].map(arr => ({ description: arr[0], ...Defs.moduleAndType(rfcdef[arr[1]], arr[2]) }));
+205 -162
dom.js
··· 1 1 // ASN.1 JavaScript decoder 2 - // Copyright (c) 2008-2018 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 - (function (undefined) { 17 - "use strict"; 16 + import { ASN1 } from './asn1.js'; 17 + import { oids } from './oids.js'; 18 + import { bindContextMenu } from './context.js'; 18 19 19 - var ASN1 = (typeof module !== 'undefined') ? require('./asn1.js') : window.ASN1, 20 - oids = (typeof module !== 'undefined') ? require('./oids.js') : window.oids, 20 + const 21 21 lineLength = 80, 22 22 contentLength = 8 * lineLength, 23 23 DOM = { 24 - ellipsis: "\u2026", 25 - tag: function (tagName, className) { 26 - var t = document.createElement(tagName); 27 - 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; 28 29 return t; 29 30 }, 30 31 text: function (str) { 31 32 return document.createTextNode(str); 32 33 }, 33 34 space: function () { 34 - var t = document.createElement('span'); 35 - t.className = 'spaces'; 36 - t.innerHTML = ' '; 37 - return t; 35 + return DOM.tag('span', 'spaces', ' '); 38 36 }, 39 37 breakLines: function (str, length) { 40 - var lines = str.split(/\r?\n/), 38 + let lines = str.split(/\r?\n/), 41 39 o = ''; 42 - for (var i = 0; i < lines.length; ++i) { 43 - var line = lines[i]; 44 - 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'; 45 43 while (line.length > length) { 46 44 o += line.substring(0, length); 47 - o += "\n"; 45 + o += '\n'; 48 46 line = line.substring(length); 49 47 } 50 48 o += line; 51 49 } 52 50 return o; 53 - } 51 + }, 54 52 }; 55 53 56 - ASN1.prototype.toDOM = function (spaces) { 57 - spaces = spaces || ''; 58 - var isOID = (typeof oids === 'object') && (this.tag.isUniversal() && (this.tag.tagNumber == 0x06)); 59 - var node = DOM.tag("div", "node"); 60 - node.asn1 = this; 61 - var head = DOM.tag("div", "head"); 62 - head.innerHTML = "<span class='spaces'>" + spaces + "</span>" + this.typeName().replace(/_/g, " "); 63 - var content = this.content(contentLength); 64 - if (content !== null) { 65 - var preview = DOM.tag("span", "preview"), 66 - shortContent; 67 - content = String(content); // it might be a number 68 - if (isOID) 69 - content = content.split('\n', 1)[0]; 70 - shortContent = (content.length > lineLength) ? content.substring(0, lineLength) + DOM.ellipsis : content; 71 - preview.appendChild(DOM.space()); 72 - preview.appendChild(DOM.text(shortContent)); 73 - if (isOID) { 74 - var oid = oids[content]; 75 - if (oid) { 76 - if (oid.d) { 77 - preview.appendChild(DOM.space()); 78 - var oidd = DOM.tag("span", "oid description"); 79 - oidd.appendChild(DOM.text(oid.d)); 80 - preview.appendChild(oidd); 81 - } 82 - if (oid.c) { 83 - preview.appendChild(DOM.space()); 84 - var oidc = DOM.tag("span", "oid comment"); 85 - oidc.appendChild(DOM.text("(" + oid.c + ")")); 86 - preview.appendChild(oidc); 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()); 75 + } 76 + } 77 + head.appendChild(DOM.text(typeName)); 78 + let content; 79 + try { 80 + content = this.content(contentLength); 81 + } catch (e) { 82 + content = 'Cannot decode: ' + e; 83 + } 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 + } 87 106 } 88 107 } 108 + head.appendChild(preview); 109 + content = DOM.breakLines(content, lineLength); 110 + content = content.replace(/</g, '&lt;'); 111 + content = content.replace(/\n/g, '<br>'); 89 112 } 90 - head.appendChild(preview); 91 - content = DOM.breakLines(content, lineLength); 92 - content = content.replace(/</g, "&lt;"); 93 - content = content.replace(/\n/g, "<br>"); 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 + } 151 + } 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)); 160 + } 161 + bindContextMenu(node); 162 + return node; 163 + } 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'); 94 173 } 95 - node.appendChild(head); 96 - this.node = node; 97 - this.head = head; 98 - var value = DOM.tag("div", "value"); 99 - var s = "Offset: " + this.stream.pos + "<br>"; 100 - s += "Length: " + this.header + "+"; 101 - if (this.length >= 0) 102 - s += this.length; 103 - else 104 - s += (-this.length) + " (undefined)"; 105 - if (this.tag.tagConstructed) 106 - s += "<br>(constructed)"; 107 - else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) 108 - s += "<br>(encapsulates)"; 109 - //TODO if (this.tag.isUniversal() && this.tag.tagNumber == 0x03) s += "Unused bits: " 110 - if (content !== null) { 111 - s += "<br>Value:<br><b>" + content + "</b>"; 112 - if (isOID && oid) { 113 - if (oid.d) s += "<br>" + oid.d; 114 - if (oid.c) s += "<br>" + oid.c; 115 - if (oid.w) s += "<br>(warning!)"; 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 + } 116 217 } 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; 117 243 } 118 - value.innerHTML = s; 119 - node.appendChild(value); 120 - var sub = DOM.tag("div", "sub"); 121 - if (this.sub !== null) { 122 - spaces += '\xA0 '; 123 - for (var i = 0, max = this.sub.length; i < max; ++i) 124 - sub.appendChild(this.sub[i].toDOM(spaces)); 244 + static decode(stream, offset) { 245 + return ASN1.decode(stream, offset, ASN1DOM); 125 246 } 126 - node.appendChild(sub); 127 - head.onclick = function () { 128 - node.className = (node.className == "node collapsed") ? "node" : "node collapsed"; 129 - }; 130 - return node; 131 - }; 132 - ASN1.prototype.fakeHover = function (current) { 133 - this.node.className += " hover"; 134 - if (current) 135 - this.head.className += " hover"; 136 - }; 137 - ASN1.prototype.fakeOut = function (current) { 138 - var re = / ?hover/; 139 - this.node.className = this.node.className.replace(re, ""); 140 - if (current) 141 - this.head.className = this.head.className.replace(re, ""); 142 - }; 143 - ASN1.prototype.toHexDOM_sub = function (node, className, stream, start, end) { 144 - if (start >= end) 145 - return; 146 - var sub = DOM.tag("span", className); 147 - sub.appendChild(DOM.text( 148 - stream.hexDump(start, end))); 149 - node.appendChild(sub); 150 - }; 151 - ASN1.prototype.toHexDOM = function (root) { 152 - var node = DOM.tag("span", "hex"); 153 - if (root === undefined) root = node; 154 - this.head.hexNode = node; 155 - this.head.onmouseover = function () { this.hexNode.className = "hexCurrent"; }; 156 - this.head.onmouseout = function () { this.hexNode.className = "hex"; }; 157 - node.asn1 = this; 158 - node.onmouseover = function () { 159 - var current = !root.selected; 160 - if (current) { 161 - root.selected = this.asn1; 162 - this.className = "hexCurrent"; 163 - } 164 - this.asn1.fakeHover(current); 165 - }; 166 - node.onmouseout = function () { 167 - var current = (root.selected == this.asn1); 168 - this.asn1.fakeOut(current); 169 - if (current) { 170 - root.selected = null; 171 - this.className = "hex"; 172 - } 173 - }; 174 - this.toHexDOM_sub(node, "tag", this.stream, this.posStart(), this.posStart() + 1); 175 - this.toHexDOM_sub(node, (this.length >= 0) ? "dlen" : "ulen", this.stream, this.posStart() + 1, this.posContent()); 176 - if (this.sub === null) { 177 - var start = this.posContent(); 178 - var end = this.posEnd(); 179 - if (end - start < 10 * 16) 180 - node.appendChild(DOM.text( 181 - this.stream.hexDump(start, end))); 182 - else { 183 - var end1 = start + 5 * 16 - (start & 0xF); 184 - var start2 = end - 16 - (end & 0xF); 185 - node.appendChild(DOM.text( 186 - this.stream.hexDump(start, end1))); 187 - var sub = DOM.tag("span", "skip"); 188 - sub.appendChild(DOM.text("\u2026 skipping " + (start2 - end1) + " bytes \u2026\n")); 189 - node.appendChild(sub); 190 - node.appendChild(DOM.text( 191 - this.stream.hexDump(start2, end))); 192 - } 193 - } else if (this.sub.length > 0) { 194 - var first = this.sub[0]; 195 - var last = this.sub[this.sub.length - 1]; 196 - this.toHexDOM_sub(node, "intro", this.stream, this.posContent(), first.posStart()); 197 - for (var i = 0, max = this.sub.length; i < max; ++i) 198 - node.appendChild(this.sub[i].toHexDOM(root)); 199 - this.toHexDOM_sub(node, "outro", this.stream, last.posEnd(), this.posEnd()); 200 - } else 201 - this.toHexDOM_sub(node, "outro", this.stream, this.posContent(), this.posEnd()); 202 - return node; 203 - }; 204 247 205 - })(); 248 + }
+83
dumpASN1.js
··· 1 + #!/usr/bin/env node 2 + 3 + // usage: 4 + // ./dumpASN1.js filename 5 + // ./dumpASN1.js data:base64,MDMCAQFjLgQACgEACgEAAgEAAgEAAQEAoA+jDQQFTnRWZXIEBAEAAAAwCgQITmV0bG9nb24=== 6 + 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'; 11 + 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]+)$/; 17 + 18 + function print(value, indent) { 19 + if (indent === undefined) indent = ''; 20 + const def = value.def; 21 + let name = ''; 22 + if (def?.type) { 23 + if (def.id) name += colBlue + def.id + colReset; 24 + if (typeof def.type == 'object' && def.name) name = (name ? name + ' ' : '') + def.name; 25 + if (def.mismatch) name = (name ? name + ' ' : '') + '[?]'; 26 + if (name) name += ' '; 27 + } 28 + let s = indent + name + colYellow + value.typeName() + colReset + ' @' + value.stream.pos; 29 + if (value.length >= 0) 30 + s += '+'; 31 + s += value.length; 32 + if (value.tag.tagConstructed) 33 + s += ' (constructed)'; 34 + else if ((value.tag.isUniversal() && ((value.tag.tagNumber == 0x03) || (value.tag.tagNumber == 0x04))) && (value.sub !== null)) 35 + s += ' (encapsulates)'; 36 + let content = value.content(); 37 + if (content) 38 + s += ': ' + content.replace(/\n/g, '|'); 39 + s += '\n'; 40 + if (value.sub !== null) { 41 + indent += ' '; 42 + for (const subval of value.sub) 43 + s += print(subval, indent); 44 + } 45 + return s; 46 + } 47 + 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); 53 + try { // try PEM first 54 + content = Base64.unarmor(content); 55 + } catch (e) { // try DER/BER then 56 + } 57 + let result = ASN1.decode(content); 58 + content = null; 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);
+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 + ====
+13
examples/ed25519.cer
··· 1 + X.509 certificate based on Daniel J. Bernsteinโ€™s Curve25519 (as per RFC 8410). 2 + $ openssl req -x509 -newkey ed25519 -keyout test.key -out test.cer -days 3652 -subj '/C=IT/L=Milano/CN=Test ed25519' 3 + -----BEGIN CERTIFICATE----- 4 + MIIBfzCCATGgAwIBAgIUfI5kSdcO2S0+LkpdL3b2VUJG10YwBQYDK2VwMDUxCzAJ 5 + BgNVBAYTAklUMQ8wDQYDVQQHDAZNaWxhbm8xFTATBgNVBAMMDFRlc3QgZWQyNTUx 6 + OTAeFw0yMDA5MDIxMzI1MjZaFw0zMDA5MDIxMzI1MjZaMDUxCzAJBgNVBAYTAklU 7 + MQ8wDQYDVQQHDAZNaWxhbm8xFTATBgNVBAMMDFRlc3QgZWQyNTUxOTAqMAUGAytl 8 + cAMhADupL/3LF2beQKKS95PeMPgKI6gxIV3QB9hjJC7/aCGFo1MwUTAdBgNVHQ4E 9 + FgQUa6W9z536I1l4EmQXrh5y2JqASugwHwYDVR0jBBgwFoAUa6W9z536I1l4EmQX 10 + rh5y2JqASugwDwYDVR0TAQH/BAUwAwEB/zAFBgMrZXADQQBvc3e+KJZaMzbX5TT9 11 + kPP9QH8fAvkAV/IWDxZrBL9lhLaY0tDSv0zWbw624uidBKPgmVD5wm3ec60dNVeF 12 + ZYYG 13 + -----END CERTIFICATE-----
+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 + ====
+29
examples/letsencrypt-x3.cer
··· 1 + This is a real-world X.509 certificate, specifically a root CA. 2 + https://letsencrypt.org/certificates/ 3 + -----BEGIN CERTIFICATE----- 4 + MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ 5 + MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT 6 + DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow 7 + SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT 8 + GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC 9 + AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF 10 + q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 11 + SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 12 + Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA 13 + a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj 14 + /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T 15 + AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG 16 + CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv 17 + bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k 18 + c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw 19 + VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC 20 + ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz 21 + MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu 22 + Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF 23 + AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo 24 + uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ 25 + wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu 26 + X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG 27 + PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 28 + KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== 29 + -----END CERTIFICATE-----
+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-----
+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-----
+233
examples/sig-p256-ber.p7m
··· 1 + This is a PKCS#7/CMS attached digital signature. 2 + It is signed using ecdsaWithSHA256 over NIST curve P-256. 3 + It contains 10034 bytes of data in a constructed BER OCTET STRING, in 1000 byte chunks. 4 + -----BEGIN PKCS7----- 5 + MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0B 6 + BwGggCSABIID6EluaXppbyBjb250ZW51dG8uCkFBQUFBQUFBQUFBQUFBQUFBQUFB 7 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 8 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 9 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 10 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 11 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 12 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 13 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 14 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 15 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 16 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 17 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 18 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 19 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 20 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 21 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 22 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 23 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 24 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 25 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 26 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 27 + QUEEggPoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 28 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 29 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 30 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 31 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 32 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 33 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 34 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 35 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 36 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 37 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 38 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 39 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 40 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 41 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 42 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 43 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 44 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 45 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 46 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 47 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQSC 48 + A+hBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 49 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 50 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 51 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 52 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 53 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 54 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 55 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 56 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 57 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 58 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 59 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 60 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 61 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 62 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 63 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 64 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 65 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 66 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 67 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 68 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBBIID6EFB 69 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 70 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 71 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 72 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 73 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 74 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 75 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 76 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 77 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 78 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 79 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 80 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 81 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 82 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 83 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 84 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 85 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 86 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 87 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 88 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 89 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEEggPoQUFBQUFB 90 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 91 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 92 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 93 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 94 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 95 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 96 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 97 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 98 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 99 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 100 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 101 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 102 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 103 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 104 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 105 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 106 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 107 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 108 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 109 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 110 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQSCA+hBQUFBQUFBQUFB 111 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 112 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 113 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 114 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 115 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 116 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 117 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 118 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 119 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 120 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 121 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 122 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 123 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 124 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 125 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 126 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 127 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 128 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 129 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 130 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 131 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBBIID6EFBQUFBQUFBQUFBQUFB 132 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 133 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 134 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 135 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 136 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 137 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 138 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 139 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 140 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 141 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 142 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 143 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 144 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 145 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 146 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 147 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 148 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 149 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 150 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 151 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 152 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEEggPoQUFBQUFBQUFBQUFBQUFBQUFB 153 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 154 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 155 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 156 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 157 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 158 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 159 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 160 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 161 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 162 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 163 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 164 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 165 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 166 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 167 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 168 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 169 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 170 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 171 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 172 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 173 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQQSCA+hBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 174 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 175 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 176 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 177 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 178 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 179 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 180 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 181 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 182 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 183 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 184 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 185 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 186 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 187 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 188 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 189 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 190 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 191 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 192 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 193 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 194 + QUFBQUFBQUFBQUFBQUFBQUFBBIID6EFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 195 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 196 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 197 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 198 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 199 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 200 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 201 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 202 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 203 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 204 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 205 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 206 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 207 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 208 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 209 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 210 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 211 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 212 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 213 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 214 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 215 + QUFBQUFBQUFBQUFBQUEEIkFBQUFBQUFBQUFBQUFBQUFBQQpGaW5lIGNvbnRlbnV0 216 + by4AAAAAAACggDCCAW4wggEUoAMCAQICEHOxx/3deIyIkyCp0XuJoeAwCgYIKoZI 217 + zj0EAwIwDzENMAsGA1UEAwwEVGVzdDAeFw0xODA3MTYxNTE3MDBaFw0xOTA3MTYx 218 + NTE3MDBaMA8xDTALBgNVBAMMBFRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC 219 + AATrbIaVzrUdDj6payN4bRMzfGAeUx2vbtdADsmVqB5UpZcE9+lk6mFONMMV8Mfd 220 + HMIrtU+kIeN3TKwYbvkKqFKFo1IwUDAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0OBBYE 221 + FGYNLdBLRe0zyKL5cUmFcsIIV7W+MB8GA1UdIwQYMBaAFGYNLdBLRe0zyKL5cUmF 222 + csIIV7W+MAoGCCqGSM49BAMCA0gAMEUCIQCtFrZzgrRCt4a+2k1d6koKNkBVMHNP 223 + QUvcH+W3VyGdJwIgI9eyft3ADE5ZUOYb1kCY76qlMy2dexTDe1ECpHf66X4AADGC 224 + AYowggGGAgEBMCMwDzENMAsGA1UEAwwEVGVzdAIQc7HH/d14jIiTIKnRe4mh4DAN 225 + BglghkgBZQMEAgEFAKCB9zAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqG 226 + SIb3DQEJBTEPFw0xODA3MTYxNTE3MDFaMCoGCSqGSIb3DQEJNDEdMBswDQYJYIZI 227 + AWUDBAIBBQChCgYIKoZIzj0EAwIwLwYJKoZIhvcNAQkEMSIEIHJMUbvnbaBa+yDL 228 + 6OsDfNrhr9cTEl0twT1VLan0QtJNMGAGCyqGSIb3DQEJEAIvMVEwTzBNMEsEIF5A 229 + LYEW0KWtjD68a+15KzrU4fL/PAv0FDQzhfnLy7yzMCcwE6QRMA8xDTALBgNVBAMM 230 + BFRlc3QCEHOxx/3deIyIkyCp0XuJoeAwCgYIKoZIzj0EAwIERzBFAiBU+itM+1PZ 231 + 77m5G8pCq4R7zQKe7OK/1vVjoTpf1mhg1wIhANyu8NdrnbnEID1copBIRB8tOm6H 232 + 5tIcUY4bEZXEeK9cAAAAAAAA 233 + -----END PKCS7-----
+232
examples/sig-p256-der.p7m
··· 1 + This is a PKCS#7/CMS attached digital signature. 2 + It is signed using ecdsaWithSHA256 over NIST curve P-256. 3 + It contains 10034 bytes of data in a single DER OCTET STRING. 4 + -----BEGIN PKCS7----- 5 + MIIqdAYJKoZIhvcNAQcCoIIqZTCCKmECAQExDzANBglghkgBZQMEAgEFADCCJ0UG 6 + CSqGSIb3DQEHAaCCJzYEgicySW5pemlvIGNvbnRlbnV0by4KQUFBQUFBQUFBQUFB 7 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 8 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 9 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 10 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 11 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 12 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 13 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 14 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 15 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 16 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 17 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 18 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 19 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 20 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 21 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 22 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 23 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 24 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 25 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 26 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 27 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 28 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 29 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 30 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 31 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 32 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 33 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 34 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 35 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 36 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 37 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 38 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 39 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 40 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 41 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 42 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 43 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 44 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 45 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 46 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 47 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 48 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 49 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 50 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 51 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 52 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 53 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 54 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 55 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 56 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 57 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 58 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 59 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 60 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 61 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 62 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 63 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 64 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 65 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 66 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 67 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 68 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 69 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 70 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 71 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 72 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 73 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 74 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 75 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 76 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 77 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 78 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 79 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 80 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 81 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 82 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 83 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 84 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 85 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 86 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 87 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 88 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 89 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 90 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 91 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 92 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 93 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 94 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 95 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 96 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 97 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 98 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 99 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 100 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 101 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 102 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 103 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 104 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 105 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 106 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 107 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 108 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 109 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 110 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 111 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 112 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 113 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 114 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 115 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 116 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 117 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 118 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 119 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 120 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 121 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 122 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 123 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 124 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 125 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 126 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 127 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 128 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 129 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 130 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 131 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 132 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 133 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 134 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 135 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 136 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 137 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 138 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 139 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 140 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 141 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 142 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 143 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 144 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 145 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 146 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 147 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 148 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 149 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 150 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 151 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 152 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 153 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 154 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 155 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 156 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 157 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 158 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 159 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 160 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 161 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 162 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 163 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 164 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 165 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 166 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 167 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 168 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 169 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 170 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 171 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 172 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 173 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 174 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 175 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 176 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 177 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 178 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 179 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 180 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 181 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 182 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 183 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 184 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 185 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 186 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 187 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 188 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 189 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 190 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 191 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 192 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 193 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 194 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 195 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 196 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 197 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 198 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 199 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 200 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 201 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 202 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 203 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 204 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 205 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 206 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 207 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 208 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 209 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 210 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 211 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 212 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 213 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 214 + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB 215 + QUFBQQpGaW5lIGNvbnRlbnV0by6gggFyMIIBbjCCARSgAwIBAgIQYFzS1SZ1s5Kl 216 + qpsCsmpVZjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARUZXN0MB4XDTE4MDcxNjE0 217 + NTYzNVoXDTE5MDcxNjE0NTYzNVowDzENMAsGA1UEAwwEVGVzdDBZMBMGByqGSM49 218 + AgEGCCqGSM49AwEHA0IABCRMtswcaSH/Sdi+Jj4LfNBaKGVahGyCXsrm7OaaaiHE 219 + 5PIgJMDp9OR0nJihrfJfkN5u+UgrZxiDpw60t6ufBkOjUjBQMA4GA1UdDwEB/wQE 220 + AwIE8DAdBgNVHQ4EFgQUw8CE33sEDbA4r1GM45f27CDWJuYwHwYDVR0jBBgwFoAU 221 + w8CE33sEDbA4r1GM45f27CDWJuYwCgYIKoZIzj0EAwIDSAAwRQIhAN5gHlc9r7Wb 222 + xVHVjj57ntoGEt0BEoBaIhe3NHWbiEQXAiBnw/3mB4DUHB16O5ApHz05xNwvIG3M 223 + ui+YLAa2fAmyMjGCAYowggGGAgEBMCMwDzENMAsGA1UEAwwEVGVzdAIQYFzS1SZ1 224 + s5KlqpsCsmpVZjANBglghkgBZQMEAgEFAKCB9zAYBgkqhkiG9w0BCQMxCwYJKoZI 225 + hvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODA3MTYxNDU2MzVaMCoGCSqGSIb3DQEJ 226 + NDEdMBswDQYJYIZIAWUDBAIBBQChCgYIKoZIzj0EAwIwLwYJKoZIhvcNAQkEMSIE 227 + IHJMUbvnbaBa+yDL6OsDfNrhr9cTEl0twT1VLan0QtJNMGAGCyqGSIb3DQEJEAIv 228 + MVEwTzBNMEsEILq8CENMWCZzAeAGhh0n7KElZw55J5ckjnalcXpb+ZPCMCcwE6QR 229 + MA8xDTALBgNVBAMMBFRlc3QCEGBc0tUmdbOSpaqbArJqVWYwCgYIKoZIzj0EAwIE 230 + RzBFAiEA8QQwLqu0KOzI5xzi449svthIqOmitdXaGZM+SFyDzHECIAy7QKC3ubLg 231 + SJIGIvsob9FGlfJM9lC9qkC4hfhMNLu5 232 + -----END PKCS7-----
+22
examples/sig-rsa1024-sha1.p7s
··· 1 + This is a PKCS#7/CMS detached digital signature. 2 + It is an old example generated in 2008 and as such uses obsolete cryptography: RSA1024 with SHA1. 3 + -----BEGIN PKCS7----- 4 + MIIDUAYJKoZIhvcNAQcCoIIDQTCCAz0CAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3 5 + DQEHAaCCAfMwggHvMIIBWKADAgECAhAvoXazbunwSfREtACZZhlFMA0GCSqGSIb3 6 + DQEBBQUAMAwxCjAIBgNVBAMMAWEwHhcNMDgxMDE1MTUwMzQxWhcNMDkxMDE1MTUw 7 + MzQxWjAMMQowCAYDVQQDDAFhMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ 8 + Uwlwhu5hR8X01f+vG0mKPRHsVRjpZNxSEmsmFPdDiD9kylE3ertTDf0gRkpIvWfN 9 + J+eymuxoXF0Qgl5gXAVuSrjupGD6J+VapixJiwLXJHokmDihLs3zfGARz08O3qnO 10 + 5ofBy0pRxq5isu/bAAcjoByZ1sI/g0iAuotC1UFObwIDAQABo1IwUDAOBgNVHQ8B 11 + Af8EBAMCBPAwHQYDVR0OBBYEFEIGXQB4h+04Z3y/n7Nv94+CqPitMB8GA1UdIwQY 12 + MBaAFEIGXQB4h+04Z3y/n7Nv94+CqPitMA0GCSqGSIb3DQEBBQUAA4GBAE0G7tAi 13 + aacJxvP3fhEj+yP9VDxL0omrRRAEaMXwWaBf/Ggk1T/u+8/CDAdjuGNCiF6ctooK 14 + c8u8KpnZJsGqnpGQ4n6L2KjTtRUDh+hija0eJRBFdirPQe2HAebQGFnmOk6Mn7Ki 15 + QfBIsOzXim/bFqaBSbf06bLTQNwFouSO+jwOMYIBJTCCASECAQEwIDAMMQowCAYD 16 + VQQDDAFhAhAvoXazbunwSfREtACZZhlFMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0B 17 + CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wODEwMTUxNTAzNDNaMCMG 18 + CSqGSIb3DQEJBDEWBBQAAAAAAAAAAAAAAAAAAAAAAAAAADANBgkqhkiG9w0BAQEF 19 + AASBgHQe0ocjBn+ZVXWbb8CpZ2CxzFKiVrgZxZO2kMBwJoNyZx+jnICHdhfsX4Or 20 + cF5vIYVAZIRz5RxqFmuZELTfZ/K89zaK873DP9V7/ftBGpezWEp9h29AtAzI9lzS 21 + GB9gugiyB5JstXoM1L87KJmT05MeZxg1pvvFhwo1m/QOpcqz 22 + -----END PKCS7-----
+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 -46
hex.js
··· 1 1 // Hex JavaScript decoder 2 - // Copyright (c) 2008-2018 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 - (function (undefined) { 17 - "use strict"; 16 + const 17 + haveU8 = (typeof Uint8Array == 'function'); 18 + 19 + let decoder; // populated on first usage 18 20 19 - var Hex = {}, 20 - decoder; 21 + export class Hex { 21 22 22 - Hex.decode = function(a) { 23 - var i; 24 - if (decoder === undefined) { 25 - var hex = "0123456789ABCDEF", 26 - ignore = " \f\n\r\t\u00A0\u2028\u2029"; 27 - decoder = []; 28 - for (i = 0; i < 16; ++i) 29 - decoder[hex.charAt(i)] = i; 30 - hex = hex.toLowerCase(); 31 - for (i = 10; i < 16; ++i) 32 - decoder[hex.charAt(i)] = i; 33 - for (i = 0; i < ignore.length; ++i) 34 - decoder[ignore.charAt(i)] = -1; 35 - } 36 - var out = [], 37 - bits = 0, 38 - char_count = 0; 39 - for (i = 0; i < a.length; ++i) { 40 - var c = a.charAt(i); 41 - if (c == '=') 42 - break; 43 - c = decoder[c]; 44 - if (c == -1) 45 - continue; 46 - if (c === undefined) 47 - throw 'Illegal character at offset ' + i; 48 - bits |= c; 49 - if (++char_count >= 2) { 50 - out[out.length] = bits; 51 - bits = 0; 52 - char_count = 0; 53 - } else { 54 - 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 + } 55 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; 56 67 } 57 - if (char_count) 58 - throw "Hex encoding incomplete: 4 bits missing"; 59 - return out; 60 - }; 61 68 62 - // export globals 63 - if (typeof module !== 'undefined') { module.exports = Hex; } else { window.Hex = Hex; } 64 - })(); 69 + }
+297 -32
index.css
··· 1 + html { 2 + --main-bg-color: #C0C0C0; 3 + --main-text-color: #000000; 4 + --id-text-color: #7d5900; 5 + --headline-text-color: #8be9fd; 6 + --button-border-color: #767676; 7 + --button-bg-color: #efefef; 8 + --button-bghover-color: #e5e5e5; 9 + --input-border-color: #767676; 10 + --input-bg-color: #ffffff; 11 + --link-color: darkblue; 12 + --link-hover-color: blue; 13 + --header-bg-color: #999999; 14 + --page-bg-color: #6e6e6e; 15 + --license-bg-color: #D0D0D0; 16 + --license-border-color: white; 17 + --sub-border-color: #E0E0E0; 18 + --preview-bg-color: #808080; 19 + --preview-border-color: #505050; 20 + --dump-bg-color: #C0C0C0; 21 + --dump-border-color: #E0E0E0; 22 + --dump-tag: blue; 23 + --dump-dlen: darkcyan; 24 + --dump-ulen: darkgreen; 25 + --dump-intro: blue; 26 + --dump-outro: darkgreen; 27 + --dump-skip: #666666; 28 + --dump-skip-bg: #C0C0C0; 29 + --dump-hex-current: #808080; 30 + --dump-hex-current-hex: #A0A0A0; 31 + --dump-hex-current-dlen: #004040; 32 + --hover-bg-color: #E0E0E0; 33 + --tree-zoom-fix: -1px; 34 + --tree-line: #999; 35 + } 36 + html[data-theme="dark"] { 37 + --main-bg-color: #0d1116; 38 + --main-text-color: #f8f8f2; 39 + --id-text-color: #9d7c2d; 40 + --headline-text-color: #8be9fd; 41 + --button-border-color: #505050; 42 + --button-bg-color: #303030; 43 + --button-bghover-color: #404040; 44 + --input-border-color: #505050; 45 + --input-bg-color: #0c0e11; 46 + --link-color: #58a6ff; 47 + --link-hover-color: #9b9bea; 48 + --header-bg-color: #161b22; 49 + --page-bg-color: #000000; 50 + --license-bg-color: #4b4a4a; 51 + --license-border-color: black; 52 + --sub-border-color: #383838; 53 + --preview-bg-color: #989797; 54 + --preview-border-color: #b5b3b3; 55 + --dump-bg-color: #0c0e11; 56 + --dump-border-color: #505050; 57 + --dump-tag: #58a6ff; 58 + --dump-dlen: darkcyan; 59 + --dump-ulen: #00b6b6; 60 + --dump-intro: #58a6ff; 61 + --dump-outro: #00b6b6; 62 + --dump-skip: #707070; 63 + --dump-skip-bg: #222222; 64 + --dump-hex-current: #727272; 65 + --dump-hex-current-hex: #474747; 66 + --dump-hex-current-dlen: #00b6b6; 67 + --hover-bg-color: #505050; 68 + --tree-line: #333; 69 + } 1 70 html, body { 2 - background-color: #C0C0C0; 71 + background-color: var(--page-bg-color); 72 + color: var(--main-text-color); 3 73 font-family: Arial, Helvetica, sans-serif; 4 74 text-align: justify; 75 + font-size: 10pt; 76 + margin: 0px; 77 + } 78 + header { 79 + display: flex; 80 + flex: nowrap; 81 + } 82 + header > .title { 83 + flex: auto; 84 + } 85 + header > .menu { 86 + display: flex; 87 + align-items: center; 88 + padding-right: 10px; 89 + } 90 + input, 91 + textarea { 92 + background-color: var(--input-bg-color); 93 + color: var(--main-text-color); 94 + border: 1px solid var(--input-border-color); 95 + } 96 + input[type="button"] { 97 + background-color: var(--button-bg-color); 98 + color: var(--main-text-color); 99 + border: 1px solid var(--button-border-color); 100 + } 101 + input[type="button"]:hover { 102 + background-color: var(--button-bghover-color); 103 + } 104 + ::file-selector-button, 105 + ::-webkit-file-upload-button { 106 + background-color: var(--button-bg-color); 107 + color: var(--main-text-color); 108 + border: 0px; 109 + border-right: 1px solid var(--button-border-color); 110 + } 111 + ::-webkit-file-upload-button:hover { 112 + background-color: var(--button-bghover-color); 113 + } 114 + ::file-selector-button:hover { 115 + background-color: var(--button-bghover-color); 116 + } 117 + select { 118 + background-color: var(--input-bg-color); 119 + color: var(--main-text-color); 120 + border: 1px solid var(--input-border-color); 121 + 122 + } 123 + a { 124 + color: var(--link-color); 125 + } 126 + header { 127 + background-color: var(--header-bg-color); 128 + padding: 8px; 129 + padding-left: 16px; 130 + } 131 + #main-page { 132 + background-color: var(--main-bg-color); 133 + border: 0px; 134 + padding: 5px; 135 + } 136 + #main-page > div { 137 + position: relative; 138 + padding-bottom: 1em; 139 + } 140 + #help { 141 + margin: 0px; 142 + padding: 4px; 143 + padding-left: 20px; 5 144 } 6 145 .tt { 7 146 font-family: monospace; 8 147 } 9 - .license .ref { 148 + .license { 10 149 position: relative; 11 150 } 12 151 .license .hidden { 13 152 visibility: hidden; 14 153 position: absolute; 15 - bottom: 0em; 16 - /*white-space: pre;*/ 17 - background-color: #D0D0D0; 18 - border: solid 1px white; 154 + top: 0px; 155 + background-color: #D0D0D0; /*minimal support for IE11*/ 156 + background-color: var(--license-bg-color); 157 + border: solid 1px var(--license-border-color); 19 158 padding: 2px; 20 159 margin-left: 15%; 21 160 margin-right: 15%; ··· 24 163 /*display: block;*/ 25 164 visibility: visible; 26 165 } 27 - .node { 28 - position: relative; 29 - } 30 - .sub { 31 - padding-left: 1.5em; 32 - border-left: solid 1px #E0E0E0; 33 - } 34 166 .head { 35 167 height: 1em; 36 168 white-space: nowrap; 37 169 } 38 170 .node:hover > .head, .node.hover > .head { 39 - color: darkblue; 40 - font-weight: bold; 171 + color: var(--link-color); 172 + background-color: var(--hover-bg-color); 41 173 } 42 174 .node:hover > .head:hover, .node.hover > .head.hover { 43 - color: blue; 175 + color: var(--link-hover-color); 44 176 } 45 177 .node.collapsed { 46 178 font-style: italic; ··· 51 183 .node.collapsed.hover > .sub { 52 184 display: block; 53 185 } 186 + .name { 187 + margin-right: 1em; 188 + color: var(--preview-border-color); 189 + } 190 + .name.id { 191 + color: var(--id-text-color); 192 + } 54 193 .value { 55 194 display: none; 56 195 position: absolute; 57 196 z-index: 2; 58 197 top: 1.2em; 59 - left: 0; 60 - background-color: #D0D0D0; 61 - border: solid 1px white; 198 + left: 30px; 199 + background-color: #efefef; /*minimal support for IE11*/ 200 + background-color: var(--button-bg-color); 201 + border: solid 1px var(--button-border-color); 62 202 padding: 2px; 63 203 } 64 204 .head:hover + .value, .head.hover + .value { ··· 66 206 } 67 207 .preview { 68 208 margin-left: 1em; 69 - color: #505050; 209 + color: var(--preview-border-color); 70 210 font-weight: normal; 71 211 } 72 212 .preview > .oid { 73 213 margin-left: 1em; 74 - color: #808080; 214 + color: var(--preview-bg-color); 75 215 font-weight: normal; 76 216 } 77 217 .spaces { ··· 80 220 #tree { 81 221 font-family: monospace; 82 222 } 223 + #tree > p { 224 + font-family: Arial, Helvetica, sans-serif; 225 + } 83 226 #dump { 227 + position: absolute; 228 + right: 0px; 84 229 z-index: 1; 85 - background-color: #C0C0C0; 86 - border: solid 1px #E0E0E0; 230 + background-color: var(--dump-bg-color); 231 + border: solid 1px var(--dump-border-color); 87 232 font-family: monospace; 88 233 white-space: pre; 89 - padding: 2px; 234 + padding: 5px; 90 235 } 91 - #dump .tag { color: blue; } 92 - #dump .dlen { color: darkcyan; } 93 - #dump .ulen { color: darkgreen; } 94 - #dump .intro { color: blue; } 95 - #dump .outro { color: darkgreen; } 96 - #dump .skip { color: #666666; } 97 - #dump .hexCurrent { background-color: #808080; } 98 - #dump .hexCurrent .hex { background-color: #A0A0A0; } 236 + #dump .tag { color: var(--dump-tag); } 237 + #dump .dlen { color: var(--dump-dlen); } 238 + #dump .ulen { color: var(--dump-ulen); } 239 + #dump .intro { color: var(--dump-intro); } 240 + #dump .outro { color: var(--dump-outro); } 241 + #dump .skip { color: var(--dump-skip); background-color: var(--dump-skip-bg); } 242 + #dump .hexCurrent { background-color: var(--dump-hex-current); } 243 + #dump .hexCurrent .hex { background-color: var(--dump-hex-current-hex); } 244 + #dump .hexCurrent .dlen { color: var(--dump-hex-current-dlen); } 99 245 #file { display: none; } 246 + #area { width: 100%; } 247 + #contextmenu { 248 + position: absolute; 249 + visibility: hidden; 250 + top: 0; 251 + left: 0; 252 + padding: 2px; 253 + background-color: var(--button-bg-color); 254 + border: 1px solid var(--button-bg-color); 255 + z-index: 2; 256 + } 257 + #contextmenu > button { 258 + display: block; 259 + width: 120px; 260 + background-color: var(--button-bg-color); 261 + color: var(--main-text-color); 262 + border: 1px solid var(--button-border-color); 263 + text-align: left; 264 + } 265 + #contextmenu > button:hover { 266 + background-color: var(--button-bghover-color); 267 + } 268 + 269 + .treecollapse { 270 + --spacing: 1.5rem; 271 + --radius: 7px; 272 + padding-inline-start: 0px; 273 + } 274 + .treecollapse li{ 275 + display: block; 276 + position: relative; 277 + padding-left: calc(2 * var(--spacing) - var(--radius) - 2px); 278 + } 279 + .treecollapse ul{ 280 + padding-left: 0; 281 + margin-left: calc(var(--radius) - var(--spacing)); 282 + } 283 + .treecollapse ul li{ 284 + border-left: 1px solid var(--tree-line); 285 + } 286 + .treecollapse ul li:last-child{ 287 + border-color: transparent; 288 + } 289 + .treecollapse ul li::before{ 290 + content: ''; 291 + display: block; 292 + position: absolute; 293 + top: calc(var(--spacing) / -1.6); 294 + left: var(--tree-zoom-fix); 295 + width: calc(var(--spacing) + 2px); 296 + height: calc(var(--spacing) + 1px); 297 + border: solid var(--tree-line); 298 + border-width: 0 0 1px 1px; 299 + } 300 + .treecollapse summary{ 301 + display : block; 302 + cursor : pointer; 303 + } 304 + .treecollapse summary::marker, 305 + .treecollapse summary::-webkit-details-marker{ 306 + display : none; 307 + } 308 + .treecollapse summary:focus{ 309 + outline : none; 310 + } 311 + .treecollapse summary:focus-visible{ 312 + outline : 1px dotted #000; 313 + } 314 + .treecollapse summary::before{ 315 + content: ''; 316 + display: block; 317 + position: absolute; 318 + top: calc(var(--spacing) / 2 - var(--radius)); 319 + left: calc(var(--spacing) - var(--radius) - 1px); 320 + width: calc(2 * var(--radius)); 321 + height: calc(2 * var(--radius)); 322 + } 323 + .treecollapse summary::before{ 324 + z-index: 1; 325 + top: 1px; 326 + background: url('tree-icon-light.svg'); 327 + } 328 + html[data-theme="dark"] .treecollapse summary::before{ 329 + background: url('tree-icon-dark.svg'); 330 + } 331 + .treecollapse details[open] > summary::before{ 332 + background-position : calc(-2 * var(--radius)) 0; 333 + } 334 + 335 + /* 336 + Zoom fix to have straight lines in treeview 337 + Zoom level and dpi resolution: 338 + - 175%: 336dpi 339 + - 150%: 288dpi 340 + - 110%: 212dpi 341 + - 100%: 192dpi 342 + - 90%: 173dpi 343 + - 80%: 154dpi 344 + */ 345 + @media (resolution <= 154dpi) { 346 + :root{ 347 + --tree-zoom-fix: -0.6px; 348 + } 349 + } 350 + @media (155dpi <= resolution < 192dpi) { 351 + :root{ 352 + --tree-zoom-fix: -0.7px; 353 + } 354 + } 355 + @media (192dpi <= resolution < 336dpi) { 356 + :root{ 357 + --tree-zoom-fix: -1px; 358 + } 359 + } 360 + @media (336dpi <= resolution) { 361 + :root{ 362 + --tree-zoom-fix: -0.9px; 363 + } 364 + }
+103 -71
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 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 - <h1>ASN.1 JavaScript decoder</h1> 11 - <div style="position: relative; padding-bottom: 1em;"> 12 - <div id="dump" style="position: absolute; right: 0px;"></div> 13 - <div id="tree"></div> 14 - </div> 15 - <form> 16 - <textarea id="area" style="width: 100%;" rows="8"> 17 - MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIAwggHvMIIB 18 - WKADAgECAhAvoXazbunwSfREtACZZhlFMA0GCSqGSIb3DQEBBQUAMAwxCjAIBgNVBAMMAWEwHhcN 19 - MDgxMDE1MTUwMzQxWhcNMDkxMDE1MTUwMzQxWjAMMQowCAYDVQQDDAFhMIGfMA0GCSqGSIb3DQEB 20 - AQUAA4GNADCBiQKBgQCJUwlwhu5hR8X01f+vG0mKPRHsVRjpZNxSEmsmFPdDiD9kylE3ertTDf0g 21 - RkpIvWfNJ+eymuxoXF0Qgl5gXAVuSrjupGD6J+VapixJiwLXJHokmDihLs3zfGARz08O3qnO5ofB 22 - y0pRxq5isu/bAAcjoByZ1sI/g0iAuotC1UFObwIDAQABo1IwUDAOBgNVHQ8BAf8EBAMCBPAwHQYD 23 - VR0OBBYEFEIGXQB4h+04Z3y/n7Nv94+CqPitMB8GA1UdIwQYMBaAFEIGXQB4h+04Z3y/n7Nv94+C 24 - qPitMA0GCSqGSIb3DQEBBQUAA4GBAE0G7tAiaacJxvP3fhEj+yP9VDxL0omrRRAEaMXwWaBf/Ggk 25 - 1T/u+8/CDAdjuGNCiF6ctooKc8u8KpnZJsGqnpGQ4n6L2KjTtRUDh+hija0eJRBFdirPQe2HAebQ 26 - GFnmOk6Mn7KiQfBIsOzXim/bFqaBSbf06bLTQNwFouSO+jwOAAAxggElMIIBIQIBATAgMAwxCjAI 27 - BgNVBAMMAWECEC+hdrNu6fBJ9ES0AJlmGUUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkq 28 - hkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA4MTAxNTE1MDM0M1owIwYJKoZIhvcNAQkEMRYEFAAA 29 - AAAAAAAAAAAAAAAAAAAAAAAAMA0GCSqGSIb3DQEBAQUABIGAdB7ShyMGf5lVdZtvwKlnYLHMUqJW 30 - uBnFk7aQwHAmg3JnH6OcgId2F+xfg6twXm8hhUBkhHPlHGoWa5kQtN9n8rz3NorzvcM/1Xv9+0Ea 31 - l7NYSn2Hb0C0DMj2XNIYH2C6CLIHkmy1egzUvzsomZPTkx5nGDWm+8WHCjWb9A6lyrMAAAAAAAA= 32 - </textarea> 33 - <br> 34 - <label title="can be slow with big files"><input type="checkbox" id="wantHex" checked="checked"> with hex dump</label> 35 - <input type="button" value="decode" onclick="decodeArea();"> 36 - <input type="button" value="clear" onclick="clearAll();"> 37 - <input type="file" id="file"> 38 - </form> 39 - <div id="help"> 40 - <h2>Instructions</h2> 41 - <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> 42 - <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> 43 - <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> 44 - 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> 45 - Clicking a node in the tree will hide its sub-nodes (collapsed nodes can be noticed because they will become <i>italic</i>).</p> 46 - <div class="license"> 47 - <h3>Copyright</h3> 48 - <div class="ref"><p class="hidden"> 49 - ASN.1 JavaScript decoder<br> 50 - Copyright &copy; 2008-2018 Lapo Luchini &lt;lapo@lapo.it&gt;<br> 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"> 21 + <h1>ASN.1 JavaScript decoder</h1> 22 + </div> 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> 32 + </div> 33 + </header> 34 + <div id="main-page"> 35 + <div> 36 + <div id="dump"></div> 37 + <div id="tree"></div> 38 + </div> 39 + <form> 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> 51 41 <br> 52 - Permission to use, copy, modify, and/or distribute this software for any 53 - purpose with or without fee is hereby granted, provided that the above 54 - copyright notice and this permission notice appear in all copies.<br> 55 42 <br> 56 - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 57 - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 58 - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 59 - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 60 - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 61 - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 62 - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 63 - </p></div> 64 - <p>ASN.1 JavaScript decoder Copyright &copy; 2008-2018 <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> 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> 46 + <input id="butDecode" type="button" value="decode"> 47 + <br><br> 48 + <table> 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 + </select> 65 + <input id="butExample" type="button" value="load"><br> 66 + </td></tr> 67 + <tr><td>Definitions:</td><td><select id="definitions"></select></td></tr> 68 + </table> 69 + </form> 70 + <br> 71 + </div> 72 + <div id="help"> 73 + <h2>Instructions</h2> 74 + <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> 75 + <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> 76 + <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> 77 + 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> 78 + Clicking a node in the tree will hide its sub-nodes (collapsed nodes can be noticed because they will become <i>italic</i>).</p> 79 + <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> 80 + 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> 81 + <div class="license"> 82 + <h3>Copyright</h3> 83 + <div><p class="hidden"> 84 + ASN.1 JavaScript decoder<br> 85 + Copyright &copy; 2008-2025 Lapo Luchini <a href="mailto:lapo@lapo.it?subject=ASN1js">&lt;lapo@lapo.it&gt;</a><br> 86 + <br> 87 + Permission to use, copy, modify, and/or distribute this software for any 88 + purpose with or without fee is hereby granted, provided that the above 89 + copyright notice and this permission notice appear in all copies.<br> 90 + <br> 91 + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 92 + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 93 + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 94 + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 95 + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 96 + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 97 + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 98 + </p></div> 99 + <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> 100 + </div> 101 + <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> 102 + <h3>Links</h3> 103 + <ul> 104 + <li><a href="https://asn1js.eu/">official website</a></li> 105 + <li><a href="https://lapo.it/asn1js/">alternate website</a></li> 106 + <li><a href="https://asn1js.eu/index-local.html">single-file version working locally</a> (just save this link)</li> 107 + <li>previous versions on githack: <select id="tags"><option>[select tag]</option></select></li> 108 + <li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a> (currently offline)</li> 109 + <li><a href="https://github.com/lapo-luchini/asn1js">github mirror</a></li> 110 + <li><a href="https://www.openhub.net/p/asn1js">OpenHub code stats</a></li> 111 + </ul> 65 112 </div> 66 - <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> 67 - <h3>Links</h3> 68 - <ul> 69 - <li><a href="http://lapo.it/asn1js/">official website</a></li> 70 - <li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a></li> 71 - <li><a href="https://github.com/lapo-luchini/asn1js">github mirror</a></li> 72 - <li><a href="https://www.ohloh.net/p/asn1js">Ohloh code stats</a></li> 73 - </ul> 74 - </div> 75 - <script type="text/javascript" src="hex.js"></script> 76 - <script type="text/javascript" src="base64.js"></script> 77 - <script type="text/javascript" src="oids.js"></script> 78 - <script type="text/javascript" src="int10.js"></script> 79 - <script type="text/javascript" src="asn1.js"></script> 80 - <script type="text/javascript" src="dom.js"></script> 81 - <script type="text/javascript" src="index.js"></script> 113 + <script type="module" src="index.js"></script> 82 114 </body> 83 115 </html>
+150 -53
index.js
··· 1 - ๏ปฟ/*global Hex, Base64, ASN1 */ 2 - "use strict"; 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'; 3 7 4 - var maxLength = 10240, 8 + const 9 + maxLength = 10240, 5 10 reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/, 6 11 tree = id('tree'), 7 12 dump = id('dump'), 8 - wantHex = id('wantHex'), 13 + wantHex = checkbox('wantHex'), 14 + trimHex = checkbox('trimHex'), 15 + wantDef = checkbox('wantDef'), 9 16 area = id('area'), 10 17 file = id('file'), 11 - hash = null; 18 + examples = id('examples'), 19 + selectDefs = id('definitions'), 20 + selectTag = id('tags'); 21 + 22 + let hash = null; 23 + 24 + if (!window.console || !window.console.log) // IE8 with closed developer tools 25 + window.console = { log: function () {} }; 12 26 function id(elem) { 13 27 return document.getElementById(elem); 14 28 } 15 29 function text(el, string) { 16 - if ('textContent' in el) 17 - el.textContent = string; 18 - else 19 - el.innerText = string; 30 + if ('textContent' in el) el.textContent = string; 31 + else el.innerText = string; 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; 20 40 } 21 - function decode(der) { 41 + function show(asn1) { 22 42 tree.innerHTML = ''; 23 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; 24 52 try { 25 - var asn1 = ASN1.decode(der); 26 - tree.appendChild(asn1.toDOM()); 27 - if (wantHex.checked) 28 - dump.appendChild(asn1.toHexDOM()); 29 - var hex = (der.length < maxLength) ? asn1.toHexString() : ''; 30 - if (area.value === '') 31 - area.value = hex; 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); 32 87 try { 33 - window.location.hash = hash = '#' + hex; 34 - } catch (e) { // fails with "Access Denied" on IE with URLs longer than ~2048 chars 88 + window.location.hash = hash = '#' + b64; 89 + } catch (e) { 90 + // fails with "Access Denied" on IE with URLs longer than ~2048 chars 35 91 window.location.hash = hash = '#'; 36 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 + } 37 105 } catch (e) { 38 106 text(tree, e); 39 107 } 40 108 } 41 - function decodeArea() { 109 + export function decodeText(val) { 42 110 try { 43 - var val = area.value, 44 - der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val); 111 + let der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val); 45 112 decode(der); 46 113 } catch (e) { 47 114 text(tree, e); 48 115 dump.innerHTML = ''; 49 116 } 50 117 } 51 - function decodeBinaryString(str) { 52 - var der; 118 + export function decodeBinaryString(str) { 119 + let der; 53 120 try { 54 - if (reHex.test(str)) 55 - der = Hex.decode(str); 56 - else if (Base64.re.test(str)) 57 - der = Base64.unarmor(str); 58 - else 59 - der = str; 121 + if (reHex.test(str)) der = Hex.decode(str); 122 + else if (Base64.re.test(str)) der = Base64.unarmor(str); 123 + else der = str; 60 124 decode(der); 61 125 } catch (e) { 62 126 text(tree, 'Cannot decode file.'); 63 127 dump.innerHTML = ''; 64 128 } 65 129 } 66 - function clearAll() { 67 - area.value = ''; 68 - tree.innerHTML = ''; 69 - dump.innerHTML = ''; 70 - hash = window.location.hash = ''; 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; 71 163 } 72 164 // this is only used if window.FileReader 73 165 function read(f) { 74 - area.value = ''; // clear text area, will get hex content 75 - var r = new FileReader(); 166 + area.value = ''; // clear text area, will get b64 content 167 + let r = new FileReader(); 76 168 r.onloadend = function () { 77 - if (r.error) 78 - alert("Your browser couldn't read the specified file (error code " + r.error.code + ")."); 79 - else 80 - 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); 81 171 }; 82 172 r.readAsBinaryString(f); 83 173 } 84 174 function load() { 85 - if (file.files.length === 0) 86 - alert("Select a file to load first."); 87 - else 88 - read(file.files[0]); 175 + if (file.files.length === 0) alert('Select a file to load first.'); 176 + else read(file.files[0]); 89 177 } 90 178 function loadFromHash() { 91 179 if (window.location.hash && window.location.hash != hash) { 92 180 hash = window.location.hash; 93 - // Firefox is not consistent with other browsers and return an 181 + // Firefox is not consistent with other browsers and returns an 94 182 // already-decoded hash string so we risk double-decoding here, 95 183 // but since % is not allowed in base64 nor hexadecimal, it's ok 96 - area.value = decodeURIComponent(hash.substr(1)); 97 - decodeArea(); 184 + let val = decodeURIComponent(hash.substr(1)); 185 + if (val.length) decodeText(val); 98 186 } 99 187 } 100 188 function stop(e) { ··· 103 191 } 104 192 function dragAccept(e) { 105 193 stop(e); 106 - if (e.dataTransfer.files.length > 0) 107 - read(e.dataTransfer.files[0]); 194 + if (e.dataTransfer.files.length > 0) read(e.dataTransfer.files[0]); 108 195 } 109 196 // main 110 - if ('onhashchange' in window) 111 - window.onhashchange = loadFromHash; 197 + if ('onhashchange' in window) window.onhashchange = loadFromHash; 112 198 loadFromHash(); 113 199 document.ondragover = stop; 114 200 document.ondragleave = stop; 115 - if ('FileReader' in window) { 201 + if ('FileReader' in window && 'readAsBinaryString' in new FileReader()) { 116 202 file.style.display = 'block'; 117 203 file.onchange = load; 118 204 document.ondrop = dragAccept; 119 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 + };
+89 -64
int10.js
··· 1 1 // Big integer base-10 printing library 2 - // Copyright (c) 2014-2018 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 - (function () { 17 - "use strict"; 16 + /** Biggest 10^n integer that can still fit 2^53 when multiplied by 256. */ 17 + const max = 10000000000000; 18 18 19 - var max = 10000000000000; // biggest 10^n integer that can still fit 2^53 when multiplied by 256 19 + export class Int10 { 20 + /** 21 + * Arbitrary length base-10 value. 22 + * @param {number} value - Optional initial value (will be 0 otherwise). 23 + */ 24 + constructor(value) { 25 + this.buf = [+value || 0]; 26 + } 20 27 21 - function Int10(value) { 22 - this.buf = [+value || 0]; 23 - } 28 + /** 29 + * Multiply value by m and add c. 30 + * @param {number} m - multiplier, must be 0<m<=256 31 + * @param {number} c - value to add, must be c>=0 32 + */ 33 + mulAdd(m, c) { 34 + // assert(m > 0) 35 + // assert(m <= 256) 36 + // assert(c >= 0) 37 + let b = this.buf, 38 + l = b.length, 39 + i, t; 40 + for (i = 0; i < l; ++i) { 41 + t = b[i] * m + c; 42 + if (t < max) 43 + c = 0; 44 + else { 45 + c = 0|(t / max); 46 + t -= c * max; 47 + } 48 + b[i] = t; 49 + } 50 + if (c > 0) 51 + b[i] = c; 52 + } 24 53 25 - Int10.prototype.mulAdd = function (m, c) { 26 - // assert(m <= 256) 27 - var b = this.buf, 28 - l = b.length, 29 - i, t; 30 - for (i = 0; i < l; ++i) { 31 - t = b[i] * m + c; 32 - if (t < max) 33 - c = 0; 34 - else { 35 - c = 0|(t / max); 36 - t -= c * max; 54 + /** 55 + * Subtract value. 56 + * @param {number} c - value to subtract 57 + */ 58 + sub(c) { 59 + let b = this.buf, 60 + l = b.length, 61 + i, t; 62 + for (i = 0; i < l; ++i) { 63 + t = b[i] - c; 64 + if (t < 0) { 65 + t += max; 66 + c = 1; 67 + } else 68 + c = 0; 69 + b[i] = t; 37 70 } 38 - b[i] = t; 71 + while (b[b.length - 1] === 0) 72 + b.pop(); 39 73 } 40 - if (c > 0) 41 - b[i] = c; 42 - }; 43 74 44 - Int10.prototype.sub = function (c) { 45 - // assert(m <= 256) 46 - var b = this.buf, 47 - l = b.length, 48 - i, t; 49 - for (i = 0; i < l; ++i) { 50 - t = b[i] - c; 51 - if (t < 0) { 52 - t += max; 53 - c = 1; 54 - } else 55 - c = 0; 56 - b[i] = t; 75 + /** 76 + * Convert to decimal string representation. 77 + * @param {number} [base=10] - optional value, only value accepted is 10 78 + * @returns {string} The decimal string representation. 79 + */ 80 + toString(base = 10) { 81 + if (base != 10) 82 + throw new Error('only base 10 is supported'); 83 + let b = this.buf, 84 + s = b[b.length - 1].toString(); 85 + for (let i = b.length - 2; i >= 0; --i) 86 + s += (max + b[i]).toString().substring(1); 87 + return s; 57 88 } 58 - while (b[b.length - 1] === 0) 59 - b.pop(); 60 - }; 61 89 62 - Int10.prototype.toString = function (base) { 63 - if ((base || 10) != 10) 64 - throw 'only base 10 is supported'; 65 - var b = this.buf, 66 - s = b[b.length - 1].toString(); 67 - for (var i = b.length - 2; i >= 0; --i) 68 - s += (max + b[i]).toString().substring(1); 69 - return s; 70 - }; 71 - 72 - Int10.prototype.valueOf = function () { 73 - var b = this.buf, 74 - v = 0; 75 - for (var i = b.length - 1; i >= 0; --i) 76 - v = v * max + b[i]; 77 - return v; 78 - }; 90 + /** 91 + * Convert to Number value representation. 92 + * Will probably overflow 2^53 and thus become approximate. 93 + * @returns {number} The numeric value. 94 + */ 95 + valueOf() { 96 + let b = this.buf, 97 + v = 0; 98 + for (let i = b.length - 1; i >= 0; --i) 99 + v = v * max + b[i]; 100 + return v; 101 + } 79 102 80 - Int10.prototype.simplify = function () { 81 - var b = this.buf; 82 - return (b.length == 1) ? b[0] : this; 83 - }; 103 + /** 104 + * Return value as a simple Number (if it is <= 10000000000000), or return this. 105 + * @returns {number | Int10} The simplified value. 106 + */ 107 + simplify() { 108 + let b = this.buf; 109 + return (b.length == 1) ? b[0] : this; 110 + } 84 111 85 - // export globals 86 - if (typeof module !== 'undefined') { module.exports = Int10; } else { window.Int10 = Int10; } 87 - })(); 112 + }
+9 -1
mirror_to_github.sh
··· 1 1 #!/bin/sh 2 2 cd `dirname "$0"` 3 + mtn sy 3 4 if [ ! -d .git ]; then 4 - git init 5 + git init # --initial-branch=trunk # not yet supported on WSL 6 + git checkout -b trunk 5 7 git remote add origin git@github.com:lapo-luchini/asn1js.git 6 8 rm git-marks1.txt git-marks2.txt 7 9 fi 8 10 touch git-marks1.txt git-marks2.txt 11 + [ -f git-authors.txt ] || echo 'lapo@lapo.it = Lapo Luchini <lapo@lapo.it>' > git-authors.txt 12 + mtn ls branches --ignore-suspend-certs | sort -V | awk ' 13 + NR == 1 { base = $0; len = length(base) } 14 + { d = length($0) - len; print $0 " = " (d > 0 ? substr($0, len+2) : "trunk") } 15 + ' > git-branches.txt 9 16 mtn --quiet --authors=git-authors.txt --branches-file=git-branches.txt --import-marks=git-marks1.txt --export-marks=git-marks1.txt git_export | \ 10 17 git fast-import --import-marks=git-marks2.txt --export-marks=git-marks2.txt 11 18 git push --mirror origin 19 + git reset # to update working copy state (doesn't change files)
+473 -70
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 - var oids = { 5 + export const oids = { 6 6 "0.2.262.1.10": { "d": "Telesec", "c": "Deutsche Telekom" }, 7 7 "0.2.262.1.10.0": { "d": "extension", "c": "Telesec" }, 8 8 "0.2.262.1.10.1": { "d": "mechanism", "c": "Telesec" }, ··· 290 290 "0.4.0.127.0.7.4.1.1.2": { "d": "bsiCertReqMsgswithOuterSignature", "c": "BSI TR-03109" }, 291 291 "0.4.0.127.0.7.4.1.1.3": { "d": "bsiAuthorizedCertReqMsgs", "c": "BSI TR-03109" }, 292 292 "0.4.0.127.0.7.4.1.2.2": { "d": "bsiSignedRevReqs", "c": "BSI TR-03109" }, 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" }, 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" }, 299 320 "0.9.2342.19200300.100.1.1": { "d": "userID", "c": "Some oddball X.500 attribute collection" }, 300 321 "0.9.2342.19200300.100.1.3": { "d": "rfc822Mailbox", "c": "Some oddball X.500 attribute collection" }, 301 322 "0.9.2342.19200300.100.1.25": { "d": "domainComponent", "c": "Men are from Mars, this OID is from Pluto" }, 302 323 "1.0.10118.3.0.49": { "d": "ripemd160", "c": "ISO 10118-3 hash function" }, 303 324 "1.0.10118.3.0.50": { "d": "ripemd128", "c": "ISO 10118-3 hash function" }, 304 325 "1.0.10118.3.0.55": { "d": "whirlpool", "c": "ISO 10118-3 hash function" }, 326 + "1.0.18033.2": { "d": "iso18033-2", "c": "ISO 18033-2" }, 327 + "1.0.18033.2.2": { "d": "kem", "c": "ISO 18033-2 algorithms" }, 328 + "1.0.18033.2.2.4": { "d": "kemRSA", "c": "ISO 18033-2 KEM algorithms" }, 305 329 "1.2.36.1.3.1.1.1": { "d": "qgpki", "c": "Queensland Government PKI" }, 306 330 "1.2.36.1.3.1.1.1.1": { "d": "qgpkiPolicies", "c": "QGPKI policies" }, 307 331 "1.2.36.1.3.1.1.1.1.1": { "d": "qgpkiMedIntermedCA", "c": "QGPKI policy" }, ··· 368 392 "1.2.36.68980861.1.1.11": { "d": "signetIntraNet", "c": "Signet CA" }, 369 393 "1.2.36.68980861.1.1.20": { "d": "signetPolicy", "c": "Signet CA" }, 370 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" }, 371 401 "1.2.156.10197.1": { "d": "gmtCryptographicAlgorithm", "c": "China GM Standards Committee" }, 372 402 "1.2.156.10197.1.100": { "d": "gmtBlockCipher", "c": "China GM Standards Committee" }, 373 403 "1.2.156.10197.1.102": { "d": "sm1Cipher", "c": "China GM Standards Committee" }, ··· 544 574 "1.2.643.7.1.1.3.3": { "d": "gost2012Signature512", "c": "GOST R 34.10-2012 512 bit signature" }, 545 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" }, 546 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" }, 547 583 "1.2.752.34.1": { "d": "seis-cp", "c": "SEIS Project" }, 548 584 "1.2.752.34.1.1": { "d": "SEIS high-assurance policyIdentifier", "c": "SEIS Project certificate policies" }, 549 585 "1.2.752.34.1.2": { "d": "SEIS GAK policyIdentifier", "c": "SEIS Project certificate policies" }, ··· 702 738 "1.2.840.113549.1.9.16.0.7": { "d": "id-mod-ets-eSigPolicy-88", "c": "S/MIME Modules" }, 703 739 "1.2.840.113549.1.9.16.0.8": { "d": "id-mod-ets-eSigPolicy-88", "c": "S/MIME Modules" }, 704 740 "1.2.840.113549.1.9.16.1": { "d": "contentType", "c": "S/MIME" }, 741 + "1.2.840.113549.1.9.16.1.0": { "d": "anyContentType", "c": "S/MIME Content Types" }, 705 742 "1.2.840.113549.1.9.16.1.1": { "d": "receipt", "c": "S/MIME Content Types" }, 706 743 "1.2.840.113549.1.9.16.1.2": { "d": "authData", "c": "S/MIME Content Types" }, 707 744 "1.2.840.113549.1.9.16.1.3": { "d": "publishCert", "c": "S/MIME Content Types" }, ··· 736 773 "1.2.840.113549.1.9.16.1.32": { "d": "asAdjacencyAttest", "c": "S/MIME Content Types", "w": true }, 737 774 "1.2.840.113549.1.9.16.1.33": { "d": "rpkiTrustAnchor", "c": "S/MIME Content Types" }, 738 775 "1.2.840.113549.1.9.16.1.34": { "d": "trustAnchorList", "c": "S/MIME Content Types" }, 776 + "1.2.840.113549.1.9.16.1.35": { "d": "rpkiGhostbusters", "c": "S/MIME Content Types" }, 777 + "1.2.840.113549.1.9.16.1.36": { "d": "resourceTaggedAttest", "c": "S/MIME Content Types" }, 778 + "1.2.840.113549.1.9.16.1.37": { "d": "utf8TextWithCRLF", "c": "S/MIME Content Types" }, 779 + "1.2.840.113549.1.9.16.1.38": { "d": "htmlWithCRLF", "c": "S/MIME Content Types" }, 780 + "1.2.840.113549.1.9.16.1.39": { "d": "epub", "c": "S/MIME Content Types" }, 781 + "1.2.840.113549.1.9.16.1.40": { "d": "animaJSONVoucher", "c": "S/MIME Content Types" }, 782 + "1.2.840.113549.1.9.16.1.41": { "d": "mudType", "c": "S/MIME Content Types" }, 783 + "1.2.840.113549.1.9.16.1.42": { "d": "sztpConveyedInfoXML", "c": "S/MIME Content Types" }, 784 + "1.2.840.113549.1.9.16.1.43": { "d": "sztpConveyedInfoJSON", "c": "S/MIME Content Types" }, 785 + "1.2.840.113549.1.9.16.1.44": { "d": "cbor", "c": "S/MIME Content Types" }, 786 + "1.2.840.113549.1.9.16.1.45": { "d": "cborSequence", "c": "S/MIME Content Types" }, 787 + "1.2.840.113549.1.9.16.1.46": { "d": "animaCBORVoucher", "c": "S/MIME Content Types", "w": true }, 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" }, 739 791 "1.2.840.113549.1.9.16.2": { "d": "authenticatedAttributes", "c": "S/MIME" }, 740 792 "1.2.840.113549.1.9.16.2.1": { "d": "receiptRequest", "c": "S/MIME Authenticated Attributes" }, 741 793 "1.2.840.113549.1.9.16.2.2": { "d": "securityLabel", "c": "S/MIME Authenticated Attributes" }, ··· 788 840 "1.2.840.113549.1.9.16.2.49": { "d": "erInternal", "c": "S/MIME Authenticated Attributes" }, 789 841 "1.2.840.113549.1.9.16.2.50": { "d": "erExternal", "c": "S/MIME Authenticated Attributes" }, 790 842 "1.2.840.113549.1.9.16.2.51": { "d": "multipleSignatures", "c": "S/MIME Authenticated Attributes" }, 843 + "1.2.840.113549.1.9.16.2.52": { "d": "cmsAlgorithmProtect", "c": "S/MIME Authenticated Attributes" }, 844 + "1.2.840.113549.1.9.16.2.53": { "d": "setKeyInformation", "c": "S/MIME Authenticated Attributes" }, 845 + "1.2.840.113549.1.9.16.2.54": { "d": "asymmDecryptKeyID", "c": "S/MIME Authenticated Attributes" }, 846 + "1.2.840.113549.1.9.16.2.55": { "d": "secureHeaderFieldsIdentifier", "c": "S/MIME Authenticated Attributes" }, 847 + "1.2.840.113549.1.9.16.2.56": { "d": "otpChallenge", "c": "S/MIME Authenticated Attributes" }, 848 + "1.2.840.113549.1.9.16.2.57": { "d": "revocationChallenge", "c": "S/MIME Authenticated Attributes" }, 849 + "1.2.840.113549.1.9.16.2.58": { "d": "estIdentityLinking", "c": "S/MIME Authenticated Attributes" }, 791 850 "1.2.840.113549.1.9.16.3.1": { "d": "esDHwith3DES", "c": "S/MIME Algorithms. Obsolete", "w": true }, 792 851 "1.2.840.113549.1.9.16.3.2": { "d": "esDHwithRC2", "c": "S/MIME Algorithms. Obsolete", "w": true }, 793 852 "1.2.840.113549.1.9.16.3.3": { "d": "3desWrap", "c": "S/MIME Algorithms. Obsolete", "w": true }, ··· 804 863 "1.2.840.113549.1.9.16.3.14": { "d": "rsaKEM", "c": "S/MIME Algorithms" }, 805 864 "1.2.840.113549.1.9.16.3.15": { "d": "authEnc128", "c": "S/MIME Algorithms" }, 806 865 "1.2.840.113549.1.9.16.3.16": { "d": "authEnc256", "c": "S/MIME Algorithms" }, 866 + "1.2.840.113549.1.9.16.3.17": { "d": "hssLmsHashSig", "c": "S/MIME Algorithms" }, 867 + "1.2.840.113549.1.9.16.3.18": { "d": "chaCha20Poly1305", "c": "S/MIME Algorithms" }, 807 868 "1.2.840.113549.1.9.16.3.19": { "d": "ecdhHKDF-SHA256", "c": "S/MIME Algorithms" }, 808 869 "1.2.840.113549.1.9.16.3.20": { "d": "ecdhHKDF-SHA384", "c": "S/MIME Algorithms" }, 809 870 "1.2.840.113549.1.9.16.3.21": { "d": "ecdhHKDF-SHA512", "c": "S/MIME Algorithms" }, 871 + "1.2.840.113549.1.9.16.3.22": { "d": "aesSIV-CMAC-256", "c": "S/MIME Algorithms" }, 872 + "1.2.840.113549.1.9.16.3.23": { "d": "aesSIV-CMAC-384", "c": "S/MIME Algorithms" }, 873 + "1.2.840.113549.1.9.16.3.24": { "d": "aesSIV-CMAC-512", "c": "S/MIME Algorithms" }, 874 + "1.2.840.113549.1.9.16.3.25": { "d": "aesSIV-CMAC-wrap256", "c": "S/MIME Algorithms" }, 875 + "1.2.840.113549.1.9.16.3.26": { "d": "aesSIV-CMAC-wrap384", "c": "S/MIME Algorithms" }, 876 + "1.2.840.113549.1.9.16.3.27": { "d": "aesSIV-CMAC-wrap512", "c": "S/MIME Algorithms" }, 877 + "1.2.840.113549.1.9.16.3.28": { "d": "hkdfWithSha256", "c": "S/MIME Algorithms" }, 878 + "1.2.840.113549.1.9.16.3.29": { "d": "hkdfWithSha384", "c": "S/MIME Algorithms" }, 879 + "1.2.840.113549.1.9.16.3.30": { "d": "hkdfWithSha512", "c": "S/MIME Algorithms" }, 810 880 "1.2.840.113549.1.9.16.4.1": { "d": "certDist-ldap", "c": "S/MIME Certificate Distribution" }, 811 881 "1.2.840.113549.1.9.16.5.1": { "d": "sigPolicyQualifier-spuri x", "c": "S/MIME Signature Policy Qualifiers" }, 812 882 "1.2.840.113549.1.9.16.5.2": { "d": "sigPolicyQualifier-spUserNotice", "c": "S/MIME Signature Policy Qualifiers" }, ··· 816 886 "1.2.840.113549.1.9.16.6.4": { "d": "proofOfSender", "c": "S/MIME Commitment Type Identifiers" }, 817 887 "1.2.840.113549.1.9.16.6.5": { "d": "proofOfApproval", "c": "S/MIME Commitment Type Identifiers" }, 818 888 "1.2.840.113549.1.9.16.6.6": { "d": "proofOfCreation", "c": "S/MIME Commitment Type Identifiers" }, 889 + "1.2.840.113549.1.9.16.7.1": { "d": "testAmoco", "c": "S/MIMETest Security Policies" }, 890 + "1.2.840.113549.1.9.16.7.2": { "d": "testCaterpillar", "c": "S/MIMETest Security Policies" }, 891 + "1.2.840.113549.1.9.16.7.3": { "d": "testWhirlpool", "c": "S/MIMETest Security Policies" }, 892 + "1.2.840.113549.1.9.16.7.4": { "d": "testWhirlpoolCategories", "c": "S/MIMETest Security Policies" }, 819 893 "1.2.840.113549.1.9.16.8.1": { "d": "glUseKEK", "c": "S/MIME Symmetric Key Distribution Attributes" }, 820 894 "1.2.840.113549.1.9.16.8.2": { "d": "glDelete", "c": "S/MIME Symmetric Key Distribution Attributes" }, 821 895 "1.2.840.113549.1.9.16.8.3": { "d": "glAddMember", "c": "S/MIME Symmetric Key Distribution Attributes" }, ··· 836 910 "1.2.840.113549.1.9.16.9.2": { "d": "domainSig", "c": "S/MIME Signature Type Identifier" }, 837 911 "1.2.840.113549.1.9.16.9.3": { "d": "additionalAttributesSig", "c": "S/MIME Signature Type Identifier" }, 838 912 "1.2.840.113549.1.9.16.9.4": { "d": "reviewSig", "c": "S/MIME Signature Type Identifier" }, 913 + "1.2.840.113549.1.9.16.10.1": { "d": "envelopedData", "c": "S/MIME X.400 Encoded Information Types" }, 914 + "1.2.840.113549.1.9.16.10.2": { "d": "signedData", "c": "S/MIME X.400 Encoded Information Types" }, 915 + "1.2.840.113549.1.9.16.10.3": { "d": "certsOnly", "c": "S/MIME X.400 Encoded Information Types" }, 916 + "1.2.840.113549.1.9.16.10.4": { "d": "signedReceipt", "c": "S/MIME X.400 Encoded Information Types" }, 917 + "1.2.840.113549.1.9.16.10.5": { "d": "envelopedX400", "c": "S/MIME X.400 Encoded Information Types" }, 918 + "1.2.840.113549.1.9.16.10.6": { "d": "signedX400", "c": "S/MIME X.400 Encoded Information Types" }, 919 + "1.2.840.113549.1.9.16.10.7": { "d": "compressedData", "c": "S/MIME X.400 Encoded Information Types" }, 839 920 "1.2.840.113549.1.9.16.11": { "d": "capabilities", "c": "S/MIME" }, 840 921 "1.2.840.113549.1.9.16.11.1": { "d": "preferBinaryInside", "c": "S/MIME Capability" }, 922 + "1.2.840.113549.1.9.16.12": { "d": "pskcAttributes", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 923 + "1.2.840.113549.1.9.16.12.1": { "d": "pskcManufacturer", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 924 + "1.2.840.113549.1.9.16.12.2": { "d": "pskcSerialNo", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 925 + "1.2.840.113549.1.9.16.12.3": { "d": "pskcModel", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 926 + "1.2.840.113549.1.9.16.12.4": { "d": "pskcIssueno", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 927 + "1.2.840.113549.1.9.16.12.5": { "d": "pskcDevicebinding", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 928 + "1.2.840.113549.1.9.16.12.6": { "d": "pskcDevicestartdate", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 929 + "1.2.840.113549.1.9.16.12.7": { "d": "pskcDeviceexpirydate", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 930 + "1.2.840.113549.1.9.16.12.8": { "d": "pskcModuleid", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 931 + "1.2.840.113549.1.9.16.12.9": { "d": "pskcKeyid", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 932 + "1.2.840.113549.1.9.16.12.10": { "d": "pskcAlgorithm", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 933 + "1.2.840.113549.1.9.16.12.11": { "d": "pskcIssuer", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 934 + "1.2.840.113549.1.9.16.12.12": { "d": "pskcKeyprofileid", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 935 + "1.2.840.113549.1.9.16.12.13": { "d": "pskcKeyreference", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 936 + "1.2.840.113549.1.9.16.12.14": { "d": "pskcFriendlyname", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 937 + "1.2.840.113549.1.9.16.12.15": { "d": "pskcAlgorithmparams", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 938 + "1.2.840.113549.1.9.16.12.16": { "d": "pskcCounter", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 939 + "1.2.840.113549.1.9.16.12.17": { "d": "pskcTime", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 940 + "1.2.840.113549.1.9.16.12.18": { "d": "pskcTimeinterval", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 941 + "1.2.840.113549.1.9.16.12.19": { "d": "pskcTimedrift", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 942 + "1.2.840.113549.1.9.16.12.20": { "d": "pskcValuemac", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 943 + "1.2.840.113549.1.9.16.12.21": { "d": "pskcKeystartdate", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 944 + "1.2.840.113549.1.9.16.12.22": { "d": "pskcKeyexpirydate", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 945 + "1.2.840.113549.1.9.16.12.23": { "d": "pskcNooftransactions", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 946 + "1.2.840.113549.1.9.16.12.24": { "d": "pskcKeyusages", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 947 + "1.2.840.113549.1.9.16.12.25": { "d": "pskcPinpolicy", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 948 + "1.2.840.113549.1.9.16.12.26": { "d": "pskcDeviceuserid", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 949 + "1.2.840.113549.1.9.16.12.27": { "d": "pskcKeyuserid", "c": "S/MIME Portable Symmetric Key Container Attributes" }, 950 + "1.2.840.113549.1.9.16.13": { "d": "otherRecipientInfoIds", "c": "S/MIME Other Recipient Info Identifiers" }, 951 + "1.2.840.113549.1.9.16.13.1": { "d": "keyTransPSK", "c": "S/MIME Other Recipient Info Identifiers" }, 952 + "1.2.840.113549.1.9.16.13.2": { "d": "keyAgreePSK", "c": "S/MIME Other Recipient Info Identifiers" }, 841 953 "1.2.840.113549.1.9.20": { "d": "friendlyName (for PKCS #12)", "c": "PKCS #9 via PKCS #12" }, 842 954 "1.2.840.113549.1.9.21": { "d": "localKeyID (for PKCS #12)", "c": "PKCS #9 via PKCS #12" }, 843 955 "1.2.840.113549.1.9.22": { "d": "certTypes (for PKCS #12)", "c": "PKCS #9 via PKCS #12" }, ··· 1039 1151 "1.2.840.113635.100.6.1.1": { "d": "appleCertificateExtensionAppleSigning", "c": "Apple certificate extension" }, 1040 1152 "1.2.840.113635.100.6.1.2": { "d": "appleCertificateExtensionADCDeveloperSigning", "c": "Apple certificate extension" }, 1041 1153 "1.2.840.113635.100.6.1.3": { "d": "appleCertificateExtensionADCAppleSigning", "c": "Apple certificate extension" }, 1154 + "1.2.840.113635.100.15.1": { "d": "appleCustomCertificateExtension1", "c": "Apple custom certificate extension" }, 1155 + "1.2.840.113635.100.15.2": { "d": "appleCustomCertificateExtension2", "c": "Apple custom certificate extension" }, 1156 + "1.2.840.113635.100.15.3": { "d": "appleCustomCertificateExtension3", "c": "Apple custom certificate extension" }, 1042 1157 "1.3.6.1.4.1.311.2.1.4": { "d": "spcIndirectDataContext", "c": "Microsoft code signing" }, 1043 - "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" }, 1044 1159 "1.3.6.1.4.1.311.2.1.11": { "d": "spcStatementType", "c": "Microsoft code signing" }, 1045 1160 "1.3.6.1.4.1.311.2.1.12": { "d": "spcSpOpusInfo", "c": "Microsoft code signing" }, 1046 1161 "1.3.6.1.4.1.311.2.1.14": { "d": "certReqExtensions", "c": "Microsoft" }, ··· 1050 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\"" }, 1051 1166 "1.3.6.1.4.1.311.2.1.21": { "d": "individualCodeSigning", "c": "Microsoft" }, 1052 1167 "1.3.6.1.4.1.311.2.1.22": { "d": "commercialCodeSigning", "c": "Microsoft" }, 1053 - "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\"" }, 1054 1169 "1.3.6.1.4.1.311.2.1.26": { "d": "spcMinimalCriteriaInfo", "c": "Microsoft code signing" }, 1055 1170 "1.3.6.1.4.1.311.2.1.27": { "d": "spcFinancialCriteriaInfo", "c": "Microsoft code signing" }, 1056 - "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\"" }, 1057 1172 "1.3.6.1.4.1.311.2.1.29": { "d": "spcHashInfoObjID", "c": "Microsoft code signing" }, 1058 1173 "1.3.6.1.4.1.311.2.1.30": { "d": "spcSipInfoObjID", "c": "Microsoft code signing" }, 1059 1174 "1.3.6.1.4.1.311.2.2": { "d": "ctl", "c": "Microsoft CTL" }, ··· 1064 1179 "1.3.6.1.4.1.311.10.1": { "d": "certTrustList", "c": "Microsoft contentType" }, 1065 1180 "1.3.6.1.4.1.311.10.1.1": { "d": "sortedCtl", "c": "Microsoft contentType" }, 1066 1181 "1.3.6.1.4.1.311.10.2": { "d": "nextUpdateLocation", "c": "Microsoft" }, 1067 - "1.3.6.1.4.1.311.10.3.1": { "d": "certTrustListSigning", "c": "Microsoft enhanced key usage" }, 1068 - "1.3.6.1.4.1.311.10.3.2": { "d": "timeStampSigning", "c": "Microsoft enhanced key usage" }, 1069 - "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" }, 1070 1185 "1.3.6.1.4.1.311.10.3.3.1": { "d": "serialized", "c": "Microsoft" }, 1071 - "1.3.6.1.4.1.311.10.3.4": { "d": "encryptedFileSystem", "c": "Microsoft enhanced key usage" }, 1072 - "1.3.6.1.4.1.311.10.3.5": { "d": "whqlCrypto", "c": "Microsoft enhanced key usage" }, 1073 - "1.3.6.1.4.1.311.10.3.6": { "d": "nt5Crypto", "c": "Microsoft enhanced key usage" }, 1074 - "1.3.6.1.4.1.311.10.3.7": { "d": "oemWHQLCrypto", "c": "Microsoft enhanced key usage" }, 1075 - "1.3.6.1.4.1.311.10.3.8": { "d": "embeddedNTCrypto", "c": "Microsoft enhanced key usage" }, 1076 - "1.3.6.1.4.1.311.10.3.9": { "d": "rootListSigner", "c": "Microsoft enhanced key usage" }, 1077 - "1.3.6.1.4.1.311.10.3.10": { "d": "qualifiedSubordination", "c": "Microsoft enhanced key usage" }, 1078 - "1.3.6.1.4.1.311.10.3.11": { "d": "keyRecovery", "c": "Microsoft enhanced key usage" }, 1079 - "1.3.6.1.4.1.311.10.3.12": { "d": "documentSigning", "c": "Microsoft enhanced key usage" }, 1080 - "1.3.6.1.4.1.311.10.3.13": { "d": "lifetimeSigning", "c": "Microsoft enhanced key usage" }, 1081 - "1.3.6.1.4.1.311.10.3.14": { "d": "mobileDeviceSoftware", "c": "Microsoft enhanced key usage" }, 1082 - "1.3.6.1.4.1.311.10.3.15": { "d": "smartDisplay", "c": "Microsoft enhanced key usage" }, 1083 - "1.3.6.1.4.1.311.10.3.16": { "d": "cspSignature", "c": "Microsoft enhanced key usage" }, 1084 - "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" }, 1085 1200 "1.3.6.1.4.1.311.10.4.1": { "d": "yesnoTrustAttr", "c": "Microsoft attribute" }, 1086 - "1.3.6.1.4.1.311.10.5.1": { "d": "drm", "c": "Microsoft enhanced key usage" }, 1087 - "1.3.6.1.4.1.311.10.5.2": { "d": "drmIndividualization", "c": "Microsoft enhanced key usage" }, 1088 - "1.3.6.1.4.1.311.10.6.1": { "d": "licenses", "c": "Microsoft enhanced key usage" }, 1089 - "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" }, 1090 1205 "1.3.6.1.4.1.311.10.7.1": { "d": "keyidRdn", "c": "Microsoft attribute" }, 1091 1206 "1.3.6.1.4.1.311.10.8.1": { "d": "removeCertificate", "c": "Microsoft attribute" }, 1092 1207 "1.3.6.1.4.1.311.10.9.1": { "d": "crossCertDistPoints", "c": "Microsoft attribute" }, ··· 1112 1227 "1.3.6.1.4.1.311.17.3": { "d": "pkcs12ExtendedAttributes", "c": "Microsoft attribute" }, 1113 1228 "1.3.6.1.4.1.311.20.1": { "d": "autoEnrollCtlUsage", "c": "Microsoft" }, 1114 1229 "1.3.6.1.4.1.311.20.2": { "d": "enrollCerttypeExtension", "c": "Microsoft CAPICOM certificate template, V1" }, 1115 - "1.3.6.1.4.1.311.20.2.1": { "d": "enrollmentAgent", "c": "Microsoft enhanced key usage" }, 1116 - "1.3.6.1.4.1.311.20.2.2": { "d": "smartcardLogon", "c": "Microsoft enhanced key usage" }, 1117 - "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" }, 1118 1233 "1.3.6.1.4.1.311.20.3": { "d": "certManifold", "c": "Microsoft" }, 1119 - "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" }, 1120 1235 "1.3.6.1.4.1.311.21.2": { "d": "certSrvPreviousCertHash", "c": "Microsoft" }, 1121 1236 "1.3.6.1.4.1.311.21.3": { "d": "crlVirtualBase", "c": "Microsoft" }, 1122 1237 "1.3.6.1.4.1.311.21.4": { "d": "crlNextPublish", "c": "Microsoft" }, ··· 1137 1252 "1.3.6.1.4.1.311.21.21": { "d": "encryptedKeyHash", "c": "Microsoft attribute" }, 1138 1253 "1.3.6.1.4.1.311.21.22": { "d": "certsrvCrossCaVersion", "c": "Microsoft" }, 1139 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" }, 1140 1257 "1.3.6.1.4.1.311.31.1": { "d": "productUpdate", "c": "Microsoft attribute" }, 1141 1258 "1.3.6.1.4.1.311.47.1.1": { "d": "systemHealth", "c": "Microsoft extended key usage" }, 1142 1259 "1.3.6.1.4.1.311.47.1.3": { "d": "systemHealthLoophole", "c": "Microsoft extended key usage" }, 1143 1260 "1.3.6.1.4.1.311.60.1.1": { "d": "rootProgramFlags", "c": "Microsoft policy attribute" }, 1144 - "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" }, 1145 1262 "1.3.6.1.4.1.311.60.2.1.1": { "d": "jurisdictionOfIncorporationL", "c": "Microsoft (???)" }, 1146 1263 "1.3.6.1.4.1.311.60.2.1.2": { "d": "jurisdictionOfIncorporationSP", "c": "Microsoft (???)" }, 1147 1264 "1.3.6.1.4.1.311.60.2.1.3": { "d": "jurisdictionOfIncorporationC", "c": "Microsoft (???)" }, 1265 + "1.3.6.1.4.1.311.76.509.1.1": { "d": "microsoftCPS", "c": "Microsoft PKI services" }, 1148 1266 "1.3.6.1.4.1.311.88": { "d": "capiCom", "c": "Microsoft attribute" }, 1149 1267 "1.3.6.1.4.1.311.88.1": { "d": "capiComVersion", "c": "Microsoft attribute" }, 1150 1268 "1.3.6.1.4.1.311.88.2": { "d": "capiComAttribute", "c": "Microsoft attribute" }, ··· 1157 1275 "1.3.6.1.4.1.188.7.1.1.2": { "d": "ideaCBC", "c": "Ascom Systech" }, 1158 1276 "1.3.6.1.4.1.188.7.1.1.3": { "d": "ideaCFB", "c": "Ascom Systech" }, 1159 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" }, 1160 1285 "1.3.6.1.4.1.2428.10.1.1": { "d": "UNINETT policyIdentifier", "c": "UNINETT PCA" }, 1161 1286 "1.3.6.1.4.1.2712.10": { "d": "ICE-TEL policyIdentifier", "c": "ICE-TEL CA" }, 1162 1287 "1.3.6.1.4.1.2786.1.1.1": { "d": "ICE-TEL Italian policyIdentifier", "c": "ICE-TEL CA policy" }, ··· 1222 1347 "1.3.6.1.4.1.8301.3.5.1": { "d": "validityModelChain", "c": "TU Darmstadt ValidityModel" }, 1223 1348 "1.3.6.1.4.1.8301.3.5.2": { "d": "validityModelShell", "c": "ValidityModel" }, 1224 1349 "1.3.6.1.4.1.8231.1": { "d": "rolUnicoNacional", "c": "Chilean Government national unique roll number" }, 1225 - "1.3.6.1.4.1.11591": { "d": "gnu", "c": "GNU Project (see http://www.gnupg.org/oids.html)" }, 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" }, 1354 + "1.3.6.1.4.1.11591": { "d": "gnu", "c": "GNU Project (see https://www.gnupg.org/oids.html)" }, 1226 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" }, 1227 1370 "1.3.6.1.4.1.11591.3": { "d": "gnuRadar", "c": "GNU Radar" }, 1371 + "1.3.6.1.4.1.11591.4.11": { "d": "scrypt", "c": "GNU Generic Security Service" }, 1228 1372 "1.3.6.1.4.1.11591.12": { "d": "gnuDigestAlgorithm", "c": "GNU digest algorithm" }, 1229 1373 "1.3.6.1.4.1.11591.12.2": { "d": "tiger", "c": "GNU digest algorithm" }, 1230 1374 "1.3.6.1.4.1.11591.13": { "d": "gnuEncryptionAlgorithm", "c": "GNU encryption algorithm" }, ··· 1254 1398 "1.3.6.1.4.1.23629.1.4.2.1.3": { "d": "safenetStartDate", "c": "SafeNet" }, 1255 1399 "1.3.6.1.4.1.23629.1.4.2.1.4": { "d": "safenetAdminCert", "c": "SafeNet" }, 1256 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" }, 1415 + "1.3.6.1.4.1.51483.2.1": { "d": "hashOfRootKey", "c": "CTIA" }, 1416 + "1.3.6.1.5.2.3.1": { "d": "authData", "c": "Kerberos" }, 1417 + "1.3.6.1.5.2.3.2": { "d": "dHKeyData", "c": "Kerberos" }, 1418 + "1.3.6.1.5.2.3.3": { "d": "rkeyData", "c": "Kerberos" }, 1419 + "1.3.6.1.5.2.3.4": { "d": "keyPurposeClientAuth", "c": "Kerberos" }, 1420 + "1.3.6.1.5.2.3.5": { "d": "keyPurposeKdc", "c": "Kerberos" }, 1421 + "1.3.6.1.5.2.3.6": { "d": "kdf", "c": "Kerberos" }, 1257 1422 "1.3.6.1.5.5.7": { "d": "pkix", "c": "" }, 1258 1423 "1.3.6.1.5.5.7.0.12": { "d": "attributeCert", "c": "PKIX" }, 1259 1424 "1.3.6.1.5.5.7.1": { "d": "privateExtension", "c": "PKIX" }, ··· 1270 1435 "1.3.6.1.5.5.7.1.11": { "d": "subjectInfoAccess", "c": "PKIX private extension" }, 1271 1436 "1.3.6.1.5.5.7.1.12": { "d": "logoType", "c": "PKIX private extension" }, 1272 1437 "1.3.6.1.5.5.7.1.13": { "d": "wlanSSID", "c": "PKIX private extension" }, 1438 + "1.3.6.1.5.5.7.1.14": { "d": "proxyCertInfo", "c": "PKIX private extension" }, 1439 + "1.3.6.1.5.5.7.1.15": { "d": "acPolicies", "c": "PKIX private extension" }, 1440 + "1.3.6.1.5.5.7.1.16": { "d": "certificateWarranty", "c": "PKIX private extension" }, 1441 + "1.3.6.1.5.5.7.1.18": { "d": "cmsContentConstraints", "c": "PKIX private extension" }, 1442 + "1.3.6.1.5.5.7.1.19": { "d": "otherCerts", "c": "PKIX private extension" }, 1443 + "1.3.6.1.5.5.7.1.20": { "d": "wrappedApexContinKey", "c": "PKIX private extension" }, 1444 + "1.3.6.1.5.5.7.1.21": { "d": "clearanceConstraints", "c": "PKIX private extension" }, 1445 + "1.3.6.1.5.5.7.1.22": { "d": "skiSemantics", "c": "PKIX private extension" }, 1446 + "1.3.6.1.5.5.7.1.23": { "d": "noSecrecyAfforded", "c": "PKIX private extension" }, 1447 + "1.3.6.1.5.5.7.1.24": { "d": "tlsFeature", "c": "PKIX private extension" }, 1448 + "1.3.6.1.5.5.7.1.25": { "d": "manufacturerUsageDescription", "c": "PKIX private extension" }, 1449 + "1.3.6.1.5.5.7.1.26": { "d": "tnAuthList", "c": "PKIX private extension" }, 1450 + "1.3.6.1.5.5.7.1.27": { "d": "jwtClaimConstraints", "c": "PKIX private extension" }, 1451 + "1.3.6.1.5.5.7.1.28": { "d": "ipAddrBlocksV2", "c": "PKIX private extension" }, 1452 + "1.3.6.1.5.5.7.1.29": { "d": "autonomousSysIdsV2", "c": "PKIX private extension" }, 1453 + "1.3.6.1.5.5.7.1.30": { "d": "manufacturerUsageDescriptionSigner", "c": "PKIX private extension" }, 1454 + "1.3.6.1.5.5.7.1.31": { "d": "acmeIdentifier", "c": "PKIX private extension" }, 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" }, 1273 1458 "1.3.6.1.5.5.7.2": { "d": "policyQualifierIds", "c": "PKIX" }, 1274 1459 "1.3.6.1.5.5.7.2.1": { "d": "cps", "c": "PKIX policy qualifier" }, 1275 1460 "1.3.6.1.5.5.7.2.2": { "d": "unotice", "c": "PKIX policy qualifier" }, 1276 1461 "1.3.6.1.5.5.7.2.3": { "d": "textNotice", "c": "PKIX policy qualifier" }, 1462 + "1.3.6.1.5.5.7.2.4": { "d": "acps", "c": "PKIX policy qualifier" }, 1463 + "1.3.6.1.5.5.7.2.5": { "d": "acunotice", "c": "PKIX policy qualifier" }, 1277 1464 "1.3.6.1.5.5.7.3": { "d": "keyPurpose", "c": "PKIX" }, 1278 1465 "1.3.6.1.5.5.7.3.1": { "d": "serverAuth", "c": "PKIX key purpose" }, 1279 1466 "1.3.6.1.5.5.7.3.2": { "d": "clientAuth", "c": "PKIX key purpose" }, 1280 1467 "1.3.6.1.5.5.7.3.3": { "d": "codeSigning", "c": "PKIX key purpose" }, 1281 1468 "1.3.6.1.5.5.7.3.4": { "d": "emailProtection", "c": "PKIX key purpose" }, 1282 - "1.3.6.1.5.5.7.3.5": { "d": "ipsecEndSystem", "c": "PKIX key purpose" }, 1283 - "1.3.6.1.5.5.7.3.6": { "d": "ipsecTunnel", "c": "PKIX key purpose" }, 1284 - "1.3.6.1.5.5.7.3.7": { "d": "ipsecUser", "c": "PKIX key purpose" }, 1469 + "1.3.6.1.5.5.7.3.5": { "d": "ipsecEndSystem", "c": "PKIX key purpose", "w": true }, 1470 + "1.3.6.1.5.5.7.3.6": { "d": "ipsecTunnel", "c": "PKIX key purpose", "w": true }, 1471 + "1.3.6.1.5.5.7.3.7": { "d": "ipsecUser", "c": "PKIX key purpose", "w": true }, 1285 1472 "1.3.6.1.5.5.7.3.8": { "d": "timeStamping", "c": "PKIX key purpose" }, 1286 1473 "1.3.6.1.5.5.7.3.9": { "d": "ocspSigning", "c": "PKIX key purpose" }, 1287 1474 "1.3.6.1.5.5.7.3.10": { "d": "dvcs", "c": "PKIX key purpose" }, 1288 - "1.3.6.1.5.5.7.3.11": { "d": "sbgpCertAAServerAuth", "c": "PKIX key purpose" }, 1475 + "1.3.6.1.5.5.7.3.11": { "d": "sbgpCertAAServerAuth", "c": "PKIX key purpose", "w": true }, 1476 + "1.3.6.1.5.5.7.3.12": { "d": "scvpResponder", "c": "PKIX key purpose", "w": true }, 1289 1477 "1.3.6.1.5.5.7.3.13": { "d": "eapOverPPP", "c": "PKIX key purpose" }, 1290 1478 "1.3.6.1.5.5.7.3.14": { "d": "eapOverLAN", "c": "PKIX key purpose" }, 1479 + "1.3.6.1.5.5.7.3.15": { "d": "scvpServer", "c": "PKIX key purpose" }, 1480 + "1.3.6.1.5.5.7.3.16": { "d": "scvpClient", "c": "PKIX key purpose" }, 1481 + "1.3.6.1.5.5.7.3.17": { "d": "ipsecIKE", "c": "PKIX key purpose" }, 1482 + "1.3.6.1.5.5.7.3.18": { "d": "capwapAC", "c": "PKIX key purpose" }, 1483 + "1.3.6.1.5.5.7.3.19": { "d": "capwapWTP", "c": "PKIX key purpose" }, 1484 + "1.3.6.1.5.5.7.3.20": { "d": "sipDomain", "c": "PKIX key purpose" }, 1485 + "1.3.6.1.5.5.7.3.21": { "d": "secureShellClient", "c": "PKIX key purpose" }, 1486 + "1.3.6.1.5.5.7.3.22": { "d": "secureShellServer", "c": "PKIX key purpose" }, 1487 + "1.3.6.1.5.5.7.3.23": { "d": "sendRouter", "c": "PKIX key purpose" }, 1488 + "1.3.6.1.5.5.7.3.24": { "d": "sendProxiedRouter", "c": "PKIX key purpose" }, 1489 + "1.3.6.1.5.5.7.3.25": { "d": "sendOwner", "c": "PKIX key purpose" }, 1490 + "1.3.6.1.5.5.7.3.26": { "d": "sendProxiedOwner", "c": "PKIX key purpose" }, 1491 + "1.3.6.1.5.5.7.3.27": { "d": "cmcCA", "c": "PKIX key purpose" }, 1492 + "1.3.6.1.5.5.7.3.28": { "d": "cmcRA", "c": "PKIX key purpose" }, 1493 + "1.3.6.1.5.5.7.3.29": { "d": "cmcArchive", "c": "PKIX key purpose" }, 1494 + "1.3.6.1.5.5.7.3.30": { "d": "bgpsecRouter", "c": "PKIX key purpose" }, 1495 + "1.3.6.1.5.5.7.3.31": { "d": "bimi", "c": "PKIX key purpose" }, 1496 + "1.3.6.1.5.5.7.3.32": { "d": "cmKGA", "c": "PKIX key purpose" }, 1497 + "1.3.6.1.5.5.7.3.33": { "d": "rpcTLSClient", "c": "PKIX key purpose" }, 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" }, 1291 1501 "1.3.6.1.5.5.7.4": { "d": "cmpInformationTypes", "c": "PKIX" }, 1292 1502 "1.3.6.1.5.5.7.4.1": { "d": "caProtEncCert", "c": "PKIX CMP information" }, 1293 1503 "1.3.6.1.5.5.7.4.2": { "d": "signKeyPairTypes", "c": "PKIX CMP information" }, ··· 1319 1529 "1.3.6.1.5.5.7.6": { "d": "algorithms", "c": "PKIX" }, 1320 1530 "1.3.6.1.5.5.7.6.1": { "d": "des40", "c": "PKIX algorithm" }, 1321 1531 "1.3.6.1.5.5.7.6.2": { "d": "noSignature", "c": "PKIX algorithm" }, 1322 - "1.3.6.1.5.5.7.6.3": { "d": "dh-sig-hmac-sha1", "c": "PKIX algorithm" }, 1323 - "1.3.6.1.5.5.7.6.4": { "d": "dh-pop", "c": "PKIX algorithm" }, 1532 + "1.3.6.1.5.5.7.6.3": { "d": "dhSigHmacSha1", "c": "PKIX algorithm" }, 1533 + "1.3.6.1.5.5.7.6.4": { "d": "dhPop", "c": "PKIX algorithm" }, 1534 + "1.3.6.1.5.5.7.6.5": { "d": "dhPopSha224", "c": "PKIX algorithm" }, 1535 + "1.3.6.1.5.5.7.6.6": { "d": "dhPopSha256", "c": "PKIX algorithm" }, 1536 + "1.3.6.1.5.5.7.6.7": { "d": "dhPopSha384", "c": "PKIX algorithm" }, 1537 + "1.3.6.1.5.5.7.6.8": { "d": "dhPopSha512", "c": "PKIX algorithm" }, 1538 + "1.3.6.1.5.5.7.6.15": { "d": "dhPopStaticSha224HmacSha224", "c": "PKIX algorithm" }, 1539 + "1.3.6.1.5.5.7.6.16": { "d": "dhPopStaticSha256HmacSha256", "c": "PKIX algorithm" }, 1540 + "1.3.6.1.5.5.7.6.17": { "d": "dhPopStaticSha384HmacSha384", "c": "PKIX algorithm" }, 1541 + "1.3.6.1.5.5.7.6.18": { "d": "dhPopStaticSha512HmacSha512", "c": "PKIX algorithm" }, 1542 + "1.3.6.1.5.5.7.6.25": { "d": "ecdhPopStaticSha224HmacSha224", "c": "PKIX algorithm" }, 1543 + "1.3.6.1.5.5.7.6.26": { "d": "ecdhPopStaticSha256HmacSha256", "c": "PKIX algorithm" }, 1544 + "1.3.6.1.5.5.7.6.27": { "d": "ecdhPopStaticSha384HmacSha384", "c": "PKIX algorithm" }, 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" }, 1324 1550 "1.3.6.1.5.5.7.7": { "d": "cmcControls", "c": "PKIX" }, 1325 1551 "1.3.6.1.5.5.7.8": { "d": "otherNames", "c": "PKIX" }, 1326 1552 "1.3.6.1.5.5.7.8.1": { "d": "personalData", "c": "PKIX other name" }, 1327 1553 "1.3.6.1.5.5.7.8.2": { "d": "userGroup", "c": "PKIX other name" }, 1554 + "1.3.6.1.5.5.7.8.3": { "d": "permanentIdentifier", "c": "PKIX other name" }, 1328 1555 "1.3.6.1.5.5.7.8.5": { "d": "xmppAddr", "c": "PKIX other name" }, 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" }, 1329 1562 "1.3.6.1.5.5.7.9": { "d": "personalData", "c": "PKIX qualified certificates" }, 1330 1563 "1.3.6.1.5.5.7.9.1": { "d": "dateOfBirth", "c": "PKIX personal data" }, 1331 1564 "1.3.6.1.5.5.7.9.2": { "d": "placeOfBirth", "c": "PKIX personal data" }, ··· 1341 1574 "1.3.6.1.5.5.7.10.6": { "d": "wlanSSID", "c": "PKIX attribute-certificate extension" }, 1342 1575 "1.3.6.1.5.5.7.11": { "d": "personalData", "c": "PKIX qualified certificates" }, 1343 1576 "1.3.6.1.5.5.7.11.1": { "d": "pkixQCSyntax-v1", "c": "PKIX qualified certificates" }, 1577 + "1.3.6.1.5.5.7.11.2": { "d": "pkixQCSyntax-v2", "c": "PKIX qualified certificates" }, 1578 + "1.3.6.1.5.5.7.12": { "d": "pkixCCT", "c": "PKIX CMC Content Types" }, 1579 + "1.3.6.1.5.5.7.12.2": { "d": "pkiData", "c": "PKIX CMC Content Types" }, 1580 + "1.3.6.1.5.5.7.12.3": { "d": "pkiResponse", "c": "PKIX CMC Content Types" }, 1344 1581 "1.3.6.1.5.5.7.14.2": { "d": "resourceCertificatePolicy", "c": "PKIX policies" }, 1345 - "1.3.6.1.5.5.7.20": { "d": "logo", "c": "PKIX qualified certificates" }, 1346 - "1.3.6.1.5.5.7.20.1": { "d": "logoLoyalty", "c": "PKIX" }, 1347 - "1.3.6.1.5.5.7.20.2": { "d": "logoBackground", "c": "PKIX" }, 1348 - "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" }, 1349 1625 "1.3.6.1.5.5.7.48.1.1": { "d": "ocspBasic", "c": "OCSP" }, 1350 1626 "1.3.6.1.5.5.7.48.1.2": { "d": "ocspNonce", "c": "OCSP" }, 1351 1627 "1.3.6.1.5.5.7.48.1.3": { "d": "ocspCRL", "c": "OCSP" }, ··· 1408 1684 "1.3.14.7.2.1.1": { "d": "ElGamal", "c": "Unsure about this OID" }, 1409 1685 "1.3.14.7.2.3.1": { "d": "md2WithRSA", "c": "Unsure about this OID" }, 1410 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" }, 1411 1715 "1.3.36.1": { "d": "document", "c": "Teletrust document" }, 1412 1716 "1.3.36.1.1": { "d": "finalVersion", "c": "Teletrust document" }, 1413 1717 "1.3.36.1.2": { "d": "draft", "c": "Teletrust document" }, ··· 1629 1933 "1.3.132.0.37": { "d": "sect409r1", "c": "SECG (Certicom) named elliptic curve" }, 1630 1934 "1.3.132.0.38": { "d": "sect571k1", "c": "SECG (Certicom) named elliptic curve" }, 1631 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" }, 1632 1937 "1.3.132.1.11.1": { "d": "ecdhX963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" }, 1633 1938 "1.3.132.1.11.2": { "d": "ecdhX963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" }, 1634 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" }, 1948 + "1.3.133.16.840.9.44": { "d": "x944", "c": "X9.44" }, 1949 + "1.3.133.16.840.9.44.1": { "d": "x944Components", "c": "X9.44" }, 1950 + "1.3.133.16.840.9.44.1.1": { "d": "x944Kdf2", "c": "X9.44" }, 1951 + "1.3.133.16.840.9.44.1.2": { "d": "x944Kdf3", "c": "X9.44" }, 1635 1952 "1.3.133.16.840.9.84": { "d": "x984", "c": "X9.84" }, 1636 1953 "1.3.133.16.840.9.84.0": { "d": "x984Module", "c": "X9.84" }, 1637 1954 "1.3.133.16.840.9.84.0.1": { "d": "x984Biometrics", "c": "X9.84 Module" }, ··· 1680 1997 "1.3.133.16.840.9.84.4.1.16": { "d": "ibiaOwnerA3Vision", "c": "X9.84 IBIA Format Owner" }, 1681 1998 "1.3.133.16.840.9.84.4.1.17": { "d": "ibiaOwnerNEC", "c": "X9.84 IBIA Format Owner" }, 1682 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" }, 1683 2001 "2.5.4.0": { "d": "objectClass", "c": "X.520 DN component" }, 1684 2002 "2.5.4.1": { "d": "aliasedEntryName", "c": "X.520 DN component" }, 1685 2003 "2.5.4.2": { "d": "knowledgeInformation", "c": "X.520 DN component" }, ··· 1771 2089 "2.5.4.74": { "d": "protPrivPolicy", "c": "X.520 DN component" }, 1772 2090 "2.5.4.75": { "d": "xMLPrivilegeInfo", "c": "X.520 DN component" }, 1773 2091 "2.5.4.76": { "d": "xmlPrivPolicy", "c": "X.520 DN component" }, 2092 + "2.5.4.77": { "d": "uuidpair", "c": "X.520 DN component" }, 2093 + "2.5.4.78": { "d": "tagOid", "c": "X.520 DN component" }, 2094 + "2.5.4.79": { "d": "uiiFormat", "c": "X.520 DN component" }, 2095 + "2.5.4.80": { "d": "uiiInUrh", "c": "X.520 DN component" }, 2096 + "2.5.4.81": { "d": "contentUrl", "c": "X.520 DN component" }, 1774 2097 "2.5.4.82": { "d": "permission", "c": "X.520 DN component" }, 2098 + "2.5.4.83": { "d": "uri", "c": "X.520 DN component" }, 2099 + "2.5.4.84": { "d": "pwdAttribute", "c": "X.520 DN component" }, 2100 + "2.5.4.85": { "d": "userPwd", "c": "X.520 DN component" }, 2101 + "2.5.4.86": { "d": "urn", "c": "X.520 DN component" }, 2102 + "2.5.4.87": { "d": "url", "c": "X.520 DN component" }, 2103 + "2.5.4.88": { "d": "utmCoordinates", "c": "X.520 DN component" }, 2104 + "2.5.4.89": { "d": "urnC", "c": "X.520 DN component" }, 2105 + "2.5.4.90": { "d": "uii", "c": "X.520 DN component" }, 2106 + "2.5.4.91": { "d": "epc", "c": "X.520 DN component" }, 2107 + "2.5.4.92": { "d": "tagAfi", "c": "X.520 DN component" }, 2108 + "2.5.4.93": { "d": "epcFormat", "c": "X.520 DN component" }, 2109 + "2.5.4.94": { "d": "epcInUrn", "c": "X.520 DN component" }, 2110 + "2.5.4.95": { "d": "ldapUrl", "c": "X.520 DN component" }, 2111 + "2.5.4.96": { "d": "tagLocation", "c": "X.520 DN component" }, 2112 + "2.5.4.97": { "d": "organizationIdentifier", "c": "X.520 DN component" }, 2113 + "2.5.4.98": { "d": "countryCode3c", "c": "X.520 DN component" }, 2114 + "2.5.4.99": { "d": "countryCode3n", "c": "X.520 DN component" }, 2115 + "2.5.4.100": { "d": "dnsName", "c": "X.520 DN component" }, 2116 + "2.5.4.101": { "d": "eepkCertificateRevocationList", "c": "X.520 DN component" }, 2117 + "2.5.4.102": { "d": "eeAttrCertificateRevocationList", "c": "X.520 DN component" }, 2118 + "2.5.4.103": { "d": "supportedPublicKeyAlgorithms", "c": "X.520 DN component" }, 2119 + "2.5.4.104": { "d": "intEmail", "c": "X.520 DN component" }, 2120 + "2.5.4.105": { "d": "jid", "c": "X.520 DN component" }, 2121 + "2.5.4.106": { "d": "objectIdentifier", "c": "X.520 DN component" }, 1775 2122 "2.5.6.0": { "d": "top", "c": "X.520 objectClass" }, 1776 2123 "2.5.6.1": { "d": "alias", "c": "X.520 objectClass" }, 1777 2124 "2.5.6.2": { "d": "country", "c": "X.520 objectClass" }, ··· 1864 2211 "2.5.29.67": { "d": "allowedAttAss", "c": "X.509 extension" }, 1865 2212 "2.5.29.68": { "d": "attributeMappings", "c": "X.509 extension" }, 1866 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" }, 1867 2220 "2.16.724.1.2.2.4.1": { "d": "personalDataInfo", "c": "Spanish Government PKI?" }, 1868 2221 "2.16.840.1.101.2.1.1.1": { "d": "sdnsSignatureAlgorithm", "c": "SDN.700 INFOSEC algorithms" }, 1869 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." }, ··· 1902 2255 "2.16.840.1.101.2.1.2.74": { "d": "forwardedCSPMsgBodyPart", "c": "SDN.700 INFOSEC format" }, 1903 2256 "2.16.840.1.101.2.1.2.75": { "d": "cspForwardedMessageParameters", "c": "SDN.700 INFOSEC format" }, 1904 2257 "2.16.840.1.101.2.1.2.76": { "d": "mspMMP2", "c": "SDN.700 INFOSEC format" }, 2258 + "2.16.840.1.101.2.1.2.78.2": { "d": "encryptedKeyPackage", "c": "SDN.700 INFOSEC format and RFC 6032" }, 2259 + "2.16.840.1.101.2.1.2.78.3": { "d": "keyPackageReceipt", "c": "SDN.700 INFOSEC format and RFC 7191" }, 2260 + "2.16.840.1.101.2.1.2.78.6": { "d": "keyPackageError", "c": "SDN.700 INFOSEC format and RFC 7191" }, 1905 2261 "2.16.840.1.101.2.1.3.1": { "d": "sdnsSecurityPolicy", "c": "SDN.700 INFOSEC policy" }, 1906 2262 "2.16.840.1.101.2.1.3.2": { "d": "sdnsPRBAC", "c": "SDN.700 INFOSEC policy" }, 1907 2263 "2.16.840.1.101.2.1.3.3": { "d": "mosaicPRBAC", "c": "SDN.700 INFOSEC policy" }, ··· 1978 2334 "2.16.840.1.101.2.1.5.58": { "d": "policyInformationFile", "c": "SDN.700 INFOSEC attributes (obsolete)", "w": true }, 1979 2335 "2.16.840.1.101.2.1.5.59": { "d": "secPolicyInformationFile", "c": "SDN.700 INFOSEC attributes" }, 1980 2336 "2.16.840.1.101.2.1.5.60": { "d": "cAClearanceConstraint", "c": "SDN.700 INFOSEC attributes" }, 2337 + "2.16.840.1.101.2.1.5.65": { "d": "keyPkgIdAndReceiptReq", "c": "SDN.700 INFOSEC attributes and RFC 7191" }, 2338 + "2.16.840.1.101.2.1.5.66": { "d": "contentDecryptKeyID", "c": "SDN.700 INFOSEC attributes and RFC 6032" }, 2339 + "2.16.840.1.101.2.1.5.70": { "d": "kpCrlPointers", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2340 + "2.16.840.1.101.2.1.5.71": { "d": "kpKeyProvinceV2", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2341 + "2.16.840.1.101.2.1.5.72": { "d": "kpManifest", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 1981 2342 "2.16.840.1.101.2.1.7.1": { "d": "cspExtns", "c": "SDN.700 INFOSEC extensions" }, 1982 2343 "2.16.840.1.101.2.1.7.1.0": { "d": "cspCsExtn", "c": "SDN.700 INFOSEC extensions" }, 1983 2344 "2.16.840.1.101.2.1.8.1": { "d": "mISSISecurityCategories", "c": "SDN.700 INFOSEC security category" }, 1984 2345 "2.16.840.1.101.2.1.8.2": { "d": "standardSecurityLabelPrivileges", "c": "SDN.700 INFOSEC security category" }, 2346 + "2.16.840.1.101.2.1.8.3.1": { "d": "enumeratedPermissiveAttrs", "c": "SDN.700 INFOSEC security category from RFC 7906" }, 2347 + "2.16.840.1.101.2.1.8.3.3": { "d": "informativeAttrs", "c": "SDN.700 INFOSEC security category from RFC 7906" }, 2348 + "2.16.840.1.101.2.1.8.3.4": { "d": "enumeratedRestrictiveAttrs", "c": "SDN.700 INFOSEC security category from RFC 7906" }, 1985 2349 "2.16.840.1.101.2.1.10.1": { "d": "sigPrivileges", "c": "SDN.700 INFOSEC privileges" }, 1986 2350 "2.16.840.1.101.2.1.10.2": { "d": "kmPrivileges", "c": "SDN.700 INFOSEC privileges" }, 1987 2351 "2.16.840.1.101.2.1.10.3": { "d": "namedTagSetPrivilege", "c": "SDN.700 INFOSEC privileges" }, ··· 2008 2372 "2.16.840.1.101.2.1.12.0.3.0.2": { "d": "kafkaTagSetName2", "c": "SDN.700 INFOSEC test objects" }, 2009 2373 "2.16.840.1.101.2.1.12.0.3.0.3": { "d": "kafkaTagSetName3", "c": "SDN.700 INFOSEC test objects" }, 2010 2374 "2.16.840.1.101.2.1.12.1.1": { "d": "tcp1", "c": "SDN.700 INFOSEC test objects" }, 2375 + "2.16.840.1.101.2.1.13.1": { "d": "kmaKeyAlgorithm", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2376 + "2.16.840.1.101.2.1.13.3": { "d": "kmaTSECNomenclature", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2377 + "2.16.840.1.101.2.1.13.5": { "d": "kmaKeyDistPeriod", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2378 + "2.16.840.1.101.2.1.13.6": { "d": "kmaKeyValidityPeriod", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2379 + "2.16.840.1.101.2.1.13.7": { "d": "kmaKeyDuration", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2380 + "2.16.840.1.101.2.1.13.11": { "d": "kmaSplitID", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2381 + "2.16.840.1.101.2.1.13.12": { "d": "kmaKeyPkgType", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2382 + "2.16.840.1.101.2.1.13.13": { "d": "kmaKeyPurpose", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2383 + "2.16.840.1.101.2.1.13.14": { "d": "kmaKeyUse", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2384 + "2.16.840.1.101.2.1.13.15": { "d": "kmaTransportKey", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2385 + "2.16.840.1.101.2.1.13.16": { "d": "kmaKeyPkgReceiversV2", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2386 + "2.16.840.1.101.2.1.13.19": { "d": "kmaOtherCertFormats", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2387 + "2.16.840.1.101.2.1.13.20": { "d": "kmaUsefulCerts", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2388 + "2.16.840.1.101.2.1.13.21": { "d": "kmaKeyWrapAlgorithm", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2389 + "2.16.840.1.101.2.1.13.22": { "d": "kmaSigUsageV3", "c": "SDN.700 INFOSEC attributes and RFC 7906" }, 2390 + "2.16.840.1.101.2.1.16.0": { "d": "dn", "c": "SDN.700 INFOSEC attributes and RFC 7191" }, 2391 + "2.16.840.1.101.2.1.22": { "d": "errorCodes", "c": "RFC 7906 key attribute error codes" }, 2392 + "2.16.840.1.101.2.1.22.1": { "d": "missingKeyType", "c": "RFC 7906 key attribute error codes" }, 2393 + "2.16.840.1.101.2.1.22.2": { "d": "privacyMarkTooLong", "c": "RFC 7906 key attribute error codes" }, 2394 + "2.16.840.1.101.2.1.22.3": { "d": "unrecognizedSecurityPolicy", "c": "RFC 7906 key attribute error codes" }, 2011 2395 "2.16.840.1.101.3.1": { "d": "slabel", "c": "CSOR GAK", "w": true }, 2012 2396 "2.16.840.1.101.3.2": { "d": "pki", "c": "NIST", "w": true }, 2013 2397 "2.16.840.1.101.3.2.1": { "d": "NIST policyIdentifier", "c": "NIST policies", "w": true }, ··· 2040 2424 "2.16.840.1.101.3.4.1.6": { "d": "aes128-GCM", "c": "NIST Algorithm" }, 2041 2425 "2.16.840.1.101.3.4.1.7": { "d": "aes128-CCM", "c": "NIST Algorithm" }, 2042 2426 "2.16.840.1.101.3.4.1.8": { "d": "aes128-wrap-pad", "c": "NIST Algorithm" }, 2427 + "2.16.840.1.101.3.4.1.9": { "d": "aes128-GMAC", "c": "NIST Algorithm" }, 2043 2428 "2.16.840.1.101.3.4.1.21": { "d": "aes192-ECB", "c": "NIST Algorithm" }, 2044 2429 "2.16.840.1.101.3.4.1.22": { "d": "aes192-CBC", "c": "NIST Algorithm" }, 2045 2430 "2.16.840.1.101.3.4.1.23": { "d": "aes192-OFB", "c": "NIST Algorithm" }, ··· 2048 2433 "2.16.840.1.101.3.4.1.26": { "d": "aes192-GCM", "c": "NIST Algorithm" }, 2049 2434 "2.16.840.1.101.3.4.1.27": { "d": "aes192-CCM", "c": "NIST Algorithm" }, 2050 2435 "2.16.840.1.101.3.4.1.28": { "d": "aes192-wrap-pad", "c": "NIST Algorithm" }, 2436 + "2.16.840.1.101.3.4.1.29": { "d": "aes192-GMAC", "c": "NIST Algorithm" }, 2051 2437 "2.16.840.1.101.3.4.1.41": { "d": "aes256-ECB", "c": "NIST Algorithm" }, 2052 2438 "2.16.840.1.101.3.4.1.42": { "d": "aes256-CBC", "c": "NIST Algorithm" }, 2053 2439 "2.16.840.1.101.3.4.1.43": { "d": "aes256-OFB", "c": "NIST Algorithm" }, ··· 2056 2442 "2.16.840.1.101.3.4.1.46": { "d": "aes256-GCM", "c": "NIST Algorithm" }, 2057 2443 "2.16.840.1.101.3.4.1.47": { "d": "aes256-CCM", "c": "NIST Algorithm" }, 2058 2444 "2.16.840.1.101.3.4.1.48": { "d": "aes256-wrap-pad", "c": "NIST Algorithm" }, 2445 + "2.16.840.1.101.3.4.1.49": { "d": "aes256-GMAC", "c": "NIST Algorithm" }, 2059 2446 "2.16.840.1.101.3.4.2": { "d": "hashAlgos", "c": "NIST Algorithm" }, 2060 2447 "2.16.840.1.101.3.4.2.1": { "d": "sha-256", "c": "NIST Algorithm" }, 2061 2448 "2.16.840.1.101.3.4.2.2": { "d": "sha-384", "c": "NIST Algorithm" }, 2062 2449 "2.16.840.1.101.3.4.2.3": { "d": "sha-512", "c": "NIST Algorithm" }, 2063 2450 "2.16.840.1.101.3.4.2.4": { "d": "sha-224", "c": "NIST Algorithm" }, 2451 + "2.16.840.1.101.3.4.2.7": { "d": "sha3-224", "c": "NIST Algorithm" }, 2452 + "2.16.840.1.101.3.4.2.8": { "d": "sha3-256", "c": "NIST Algorithm" }, 2453 + "2.16.840.1.101.3.4.2.9": { "d": "sha3-384", "c": "NIST Algorithm" }, 2454 + "2.16.840.1.101.3.4.2.10": { "d": "sha3-512", "c": "NIST Algorithm" }, 2455 + "2.16.840.1.101.3.4.2.11": { "d": "shake128", "c": "NIST Algorithm" }, 2456 + "2.16.840.1.101.3.4.2.12": { "d": "shake256", "c": "NIST Algorithm" }, 2457 + "2.16.840.1.101.3.4.2.17": { "d": "shake128len", "c": "NIST Algorithm" }, 2458 + "2.16.840.1.101.3.4.2.18": { "d": "shake256len", "c": "NIST Algorithm" }, 2459 + "2.16.840.1.101.3.4.2.19": { "d": "kmacShake128", "c": "NIST Algorithm" }, 2460 + "2.16.840.1.101.3.4.2.20": { "d": "kmacShake256", "c": "NIST Algorithm" }, 2064 2461 "2.16.840.1.101.3.4.3.1": { "d": "dsaWithSha224", "c": "NIST Algorithm" }, 2065 2462 "2.16.840.1.101.3.4.3.2": { "d": "dsaWithSha256", "c": "NIST Algorithm" }, 2066 2463 "2.16.840.1.113719.1.2.8": { "d": "novellAlgorithm", "c": "Novell" }, ··· 2116 2513 "2.16.840.1.113730.3.1.2": { "d": "departmentNumber", "c": "Netscape LDAP definitions" }, 2117 2514 "2.16.840.1.113730.3.1.3": { "d": "employeeNumber", "c": "Netscape LDAP definitions" }, 2118 2515 "2.16.840.1.113730.3.1.4": { "d": "employeeType", "c": "Netscape LDAP definitions" }, 2516 + "2.16.840.1.113730.3.1.216": { "d": "userPKCS12", "c": "Netscape LDAP definitions" }, 2119 2517 "2.16.840.1.113730.3.2.2": { "d": "inetOrgPerson", "c": "Netscape LDAP definitions" }, 2120 2518 "2.16.840.1.113730.4.1": { "d": "serverGatedCrypto", "c": "Netscape" }, 2121 2519 "2.16.840.1.113733.1.6.3": { "d": "verisignCZAG", "c": "Verisign extension" }, ··· 2254 2652 "2.23.43.1.4.6": { "d": "wTLS-ECC-curve6", "c": "WAP WTLS" }, 2255 2653 "2.23.43.1.4.8": { "d": "wTLS-ECC-curve8", "c": "WAP WTLS" }, 2256 2654 "2.23.43.1.4.9": { "d": "wTLS-ECC-curve9", "c": "WAP WTLS" }, 2257 - "2.23.133": { "d": "tCPA", "c": "TCPA" }, 2258 - "2.23.133.1": { "d": "tcpaSpecVersion", "c": "TCPA" }, 2259 - "2.23.133.2": { "d": "tcpaAttribute", "c": "TCPA" }, 2260 - "2.23.133.2.1": { "d": "tcpaTpmManufacturer", "c": "TCPA Attribute" }, 2261 - "2.23.133.2.2": { "d": "tcpaTpmModel", "c": "TCPA Attribute" }, 2262 - "2.23.133.2.3": { "d": "tcpaTpmVersion", "c": "TCPA Attribute" }, 2263 - "2.23.133.2.4": { "d": "tcpaPlatformManufacturer", "c": "TCPA Attribute" }, 2264 - "2.23.133.2.5": { "d": "tcpaPlatformModel", "c": "TCPA Attribute" }, 2265 - "2.23.133.2.6": { "d": "tcpaPlatformVersion", "c": "TCPA Attribute" }, 2266 - "2.23.133.2.7": { "d": "tcpaComponentManufacturer", "c": "TCPA Attribute" }, 2267 - "2.23.133.2.8": { "d": "tcpaComponentModel", "c": "TCPA Attribute" }, 2268 - "2.23.133.2.9": { "d": "tcpaComponentVersion", "c": "TCPA Attribute" }, 2269 - "2.23.133.2.10": { "d": "tcpaSecurityQualities", "c": "TCPA Attribute" }, 2270 - "2.23.133.2.11": { "d": "tcpaTpmProtectionProfile", "c": "TCPA Attribute" }, 2271 - "2.23.133.2.12": { "d": "tcpaTpmSecurityTarget", "c": "TCPA Attribute" }, 2272 - "2.23.133.2.13": { "d": "tcpaFoundationProtectionProfile", "c": "TCPA Attribute" }, 2273 - "2.23.133.2.14": { "d": "tcpaFoundationSecurityTarget", "c": "TCPA Attribute" }, 2274 - "2.23.133.2.15": { "d": "tcpaTpmIdLabel", "c": "TCPA Attribute" }, 2275 - "2.23.133.3": { "d": "tcpaProtocol", "c": "TCPA" }, 2276 - "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" }, 2277 2679 "2.23.134.1.4.2.1": { "d": "postSignumRootQCA", "c": "PostSignum CA" }, 2278 2680 "2.23.134.1.2.2.3": { "d": "postSignumPublicCA", "c": "PostSignum CA" }, 2279 2681 "2.23.134.1.2.1.8.210": { "d": "postSignumCommercialServerPolicy", "c": "PostSignum CA" }, 2280 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" }, 2281 2687 "2.54.1775.2": { "d": "hashedRootKey", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true }, 2282 2688 "2.54.1775.3": { "d": "certificateType", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true }, 2283 2689 "2.54.1775.4": { "d": "merchantData", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true }, ··· 2290 2696 "1.3.6.1.4.1.34697.2.2": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Networking" }, 2291 2697 "1.3.6.1.4.1.34697.2.3": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Premium" }, 2292 2698 "1.3.6.1.4.1.34697.2.4": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Premium ECC" }, 2293 - "2.16.578.1.26.1.3.3": { "d": "BuyPass EV policy", "c": "BuyPass Class 3 EV" }, 2294 2699 "1.3.6.1.4.1.17326.10.14.2.1.2": { "d": "Camerfirma EV policy", "c": "Camerfirma CA Root" }, 2295 2700 "1.3.6.1.4.1.17326.10.8.12.1.2": { "d": "Camerfirma EV policy", "c": "Camerfirma CA Root" }, 2296 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)" }, ··· 2317 2722 "1.3.6.1.4.1.40869.1.1.22.3": { "d": "TWCA EV policy", "c": "TWCA Root Certification Authority" }, 2318 2723 "2.16.840.1.113733.1.7.23.6": { "d": "VeriSign EV policy", "c": "VeriSign Class 3 Public Primary Certification Authority" }, 2319 2724 "2.16.840.1.114171.500.9": { "d": "Wells Fargo EV policy", "c": "Wells Fargo WellsSecure Public Root Certificate Authority" }, 2320 - "END": "" 2321 2725 }; 2322 - if (typeof module !== 'undefined') { module.exports = oids; }
+79 -5
package.json
··· 1 1 { 2 2 "name": "@lapo/asn1js", 3 - "version": "1.0.1", 3 + "version": "2.0.6", 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", ··· 12 13 "license": "ISC", 13 14 "bugs": { "url": "https://github.com/lapo-luchini/asn1js/issues" }, 14 15 "homepage": "https://lapo.it/asn1js/", 15 - "files": [ "asn1.js", "base64.js", "hex.js", "int10.js", "oids.js" ], 16 + "files": [ "asn1.js", "base64.js", "hex.js", "int10.js", "dom.js", "defs.js", "oids.js", "rfcdef.js", "dumpASN1.js" ], 17 + "scripts": { 18 + "lint": "npx eslint asn1.js base64.js hex.js int10.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", 19 + "lint-action": "npx @action-validator/cli .github/workflows/node.js.yml", 20 + "build": "vite build", 21 + "serve": "npx -p local-web-server ws", 22 + "test": "node test", 23 + "testdefs": "node testDefs" 24 + }, 25 + "bin": { 26 + "dumpASN1": "./dumpASN1.js" 27 + }, 28 + "engines": { 29 + "node": ">=12.20.0" 30 + }, 31 + "devDependencies": { 32 + "@rollup/wasm-node": "^4.25.0", 33 + "eslint": "^8.57.1", 34 + "htmlparser2": "^9.1.0", 35 + "vite": "^5.4.10", 36 + "vite-plugin-dom": "^1.0.4", 37 + "vite-plugin-singlefile": "^2.0.3" 38 + }, 39 + "overrides": { 40 + "rollup": "npm:@rollup/wasm-node" 41 + }, 42 + "pnpm": { 43 + "overrides": { 44 + "rollup": "npm:@rollup/wasm-node" 45 + } 46 + }, 16 47 "eslintConfig": { 17 48 "env": { 49 + "es6": true, 18 50 "browser": true, 19 51 "node": true 20 52 }, 53 + "parserOptions": { 54 + "ecmaVersion": 2015, 55 + "sourceType": "module" 56 + }, 21 57 "extends": [ "eslint:recommended" ], 58 + "globals": { 59 + "Uint8Array": "readonly" 60 + }, 22 61 "rules": { 23 62 "strict": [ "error", "function" ], 24 - "indent": [ "error", 4, { "outerIIFEBody": 0 } ], 63 + "indent": [ "error", 4 ], 64 + "no-trailing-spaces": [ "error" ], 25 65 "linebreak-style": [ "error", "unix" ], 66 + "eol-last": [ "error", "always" ], 26 67 "semi": [ "warn", "always" ], 27 - "comma-dangle": [ "error", "never" ] 68 + "quotes": [ "error", "single", { "avoidEscape": true } ], 69 + "no-var": [ "warn" ], 70 + "comma-dangle": [ "error", "always-multiline" ] 28 71 }, 29 72 "overrides": [ 30 73 { 31 - "files": [ "index.js", "test.js" ], 74 + "files": [ "defs.js" ], 75 + "parserOptions": { 76 + "ecmaVersion": 2020 77 + } 78 + }, { 79 + "files": [ "test.js", "parseRFC.js", "dumpASN1.js" ], 80 + "parserOptions": { 81 + "ecmaVersion": 2021 82 + }, 32 83 "rules": { 33 84 "strict": [ "error", "global" ] 85 + } 86 + }, { 87 + "files": [ "oids.js" ], 88 + "rules": { 89 + "indent": "off", 90 + "quotes": [ "warn", "double" ] 91 + } 92 + }, { 93 + "files": [ "tags.js", "rfcdef.js" ], 94 + "rules": { 95 + "indent": [ "error", 2, { "ignoredNodes": [ "Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement > ExpressionStatement[directive='use strict']:first-child" ] } ], 96 + "comma-dangle": "off", 97 + "quotes": [ "warn", "double" ] 98 + } 99 + }, { 100 + "files": [ "defs.js" ], 101 + "parserOptions": { 102 + "ecmaVersion": 2021 103 + } 104 + }, { 105 + "files": [ "testDefs.js" ], 106 + "parserOptions": { 107 + "ecmaVersion": 2022 34 108 } 35 109 } 36 110 ]
+588
parseRFC.js
··· 1 + #! /usr/bin/env node 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'; 19 + 20 + const 21 + patches = { // to fix some known RFCs' ASN.1 syntax errors 22 + 0: [ 23 + [ /\n\n[A-Z].*\n\f\n[A-Z].*\n\n/g, '' ], // page change 24 + ], 25 + 2459: [ // currently unsupported 26 + [ 'videotex (8) } (0..ub-integer-options)', 'videotex (8) }' ], 27 + [ /OBJECT IDENTIFIER \( id-qt-cps \| id-qt-unotice \)/g, 'OBJECT IDENTIFIER' ], 28 + [ /SIGNED \{ (SEQUENCE \{[^}]+\})\s*\}/g, 'SEQUENCE { toBeSigned $1, algorithm AlgorithmIdentifier, signature BIT STRING }' ], 29 + [ /EXTENSION\.&[^,]+/g, 'OBJECT IDENTIFIER'], 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 + ], 44 + 3161: [ // actual syntax errors 45 + [ /--.*}/g, '}' ], 46 + [ /^( +)--.*\n(?:\1 .*\n)+/mg, '' ], 47 + [ /addInfoNotAvailable \(17\)/g, '$&,' ], 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 + ], 56 + 5280: [ // currently unsupported 57 + [ 'videotex (8) } (0..ub-integer-options)', 'videotex (8) }' ], 58 + [ /OBJECT IDENTIFIER \( id-qt-cps \| id-qt-unotice \)/g, 'OBJECT IDENTIFIER' ], 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 + ], 93 + }; 94 + 95 + // const reWhitespace = /(?:\s|--(?:[}-]?[^\n}-])*(?:\n|--))*/y; 96 + const reWhitespace = /(?:\s|--(?:-?[^\n-])*(?:\n|--))*/my; 97 + const reIdentifier = /[a-zA-Z](?:[-]?[a-zA-Z0-9])*/y; 98 + const reNumber = /0|[1-9][0-9]*/y; 99 + const reToken = /[(){},[\];]|::=|OPTIONAL|DEFAULT|NULL|TRUE|FALSE|\.\.|OF|SIZE|MIN|MAX|DEFINED BY|DEFINITIONS|TAGS|BEGIN|EXPORTS|IMPORTS|FROM|END/y; 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; 101 + const reTagClass = /UNIVERSAL|APPLICATION|PRIVATE|/y; 102 + const reTagType = /IMPLICIT|EXPLICIT|/y; 103 + const reTagDefault = /(AUTOMATIC|IMPLICIT|EXPLICIT) TAGS|/y; 104 + 105 + let asn1; 106 + let currentMod; 107 + 108 + function searchImportedValue(id) { 109 + for (let imp of Object.values(currentMod.imports)) 110 + for (let name of imp.types) 111 + if (name == id) { 112 + if (!(imp.oid in asn1)) 113 + throw new Error('Cannot find module: ' + imp.oid + ' ' + id); 114 + if (id in asn1[imp.oid].values) 115 + return asn1[imp.oid].values[id]; 116 + throw new Error('Cannot find imported value: ' + imp.oid + ' ' + id); 117 + } 118 + throw new Error('Cannot find imported value in any module: ' + id); 119 + } 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) { 214 + let p = this.pos; 215 + let t; 216 + try { t = this.parseToken(); } catch (e) { /*ignore*/ } 217 + // console.log('[debug] tryToken(' + expect + ') = ' + t); 218 + if (t == expect) 219 + return true; 220 + else { 221 + this.pos = p; 222 + return false; 223 + } 224 + } 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 + "'"); 234 + } 235 + } 236 + parseNumberOrValue() { 237 + if (this.isDigit()) 238 + return +this.parseNumber(); 239 + return this.parseIdentifier(); 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 (e) { 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; 395 + this.pos = p; 396 + this.exception("Found '" + t + "', was expecting a boolean"); 397 + } 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; 426 + } 427 + parseValue() { 428 + let c = this.peekChar(); 429 + if (c == '{') 430 + return this.parseValueOID(); 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 (e) { 446 + this.pos = p; 447 + } 448 + p = this.pos; 449 + try { 450 + return this.parseIdentifier(); 451 + } catch (e) { 452 + this.pos = p; 453 + } 454 + this.exception('Unknown value type.'); 455 + } 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; 482 + } 483 + parseElementTypeList() { 484 + let v = []; 485 + this.expectToken('{'); 486 + do { 487 + v.push(this.parseElementType()); 488 + } while (this.tryToken(',')); 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) { 530 + let mod = this.parseModuleIdentifier(); 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; 547 + } 548 + } 549 + 550 + let s = fs.readFileSync(process.argv[2], 'utf8'); 551 + let num = /^Request for Comments: ([0-9]+)/m.exec(s)[1]; 552 + console.log('RFC:', num); 553 + for (let p of patches[0]) 554 + s = s.replace(p[0], p[1]); 555 + if (num in patches) 556 + for (let p of patches[num]) 557 + s = s.replace(p[0], p[1]); 558 + fs.writeFileSync(process.argv[2].replace(/[.]txt$/, '_patched.txt'), s, 'utf8'); 559 + // console.log(s); 560 + asn1 = JSON.parse(fs.readFileSync(process.argv[3], 'utf8')); 561 + const reModuleDefinition = /\s[A-Z](?:[-]?[a-zA-Z0-9])*\s*\{[^}]+\}\s*(^--.*|\n)*DEFINITIONS/gm; 562 + let m; 563 + while ((m = reModuleDefinition.exec(s))) { 564 + new Parser(s, m.index).parseModuleDefinition(process.argv[2]); 565 + console.log('Module:', currentMod.name); 566 + // fs.writeFileSync('rfc' + num + '.json', JSON.stringify(currentMod, null, 2) + '\n', 'utf8'); 567 + asn1[currentMod.oid] = currentMod; 568 + } 569 + /*asn1 = Object.keys(asn1).sort().reduce( 570 + (obj, key) => { 571 + obj[key] = asn1[key]; 572 + return obj; 573 + }, 574 + {} 575 + );*/ 576 + fs.writeFileSync(process.argv[3], JSON.stringify(asn1, null, 2) + '\n', 'utf8'); 577 + // console.log('Module:', mod); 578 + /*while ((idx = s.indexOf('::=', idx + 1)) >= 0) { 579 + let line = s.lastIndexOf('\n', idx) + 1; 580 + // console.log('[line] ' + s.slice(line, line+30)); 581 + try { 582 + let a = new DefStream(s, line).parseAssignment(); 583 + // console.log('[assignment]', util.inspect(a, {showHidden: false, depth: null, colors: true})); 584 + } catch (e) { 585 + console.log('Error:', e); 586 + } 587 + }*/ 588 + console.log('Done.');
+28 -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 4 + asn1.js oids.js defs.js base64.js hex.js int10.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 6 8 README.md LICENSE 7 - update.sh check.sh 9 + updateOID.sh check.sh 10 + examples 8 11 " 9 - sha256sum </dev/null >/dev/null 2>&1 && SHA256=sha256sum || SHA256=gsha256sum 10 - $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 11 34 7z a -tzip -mx=9 asn1js.zip $FILES sha256sums.asc 12 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 + ;
+18
tags.js
··· 1 + export const tags = { 2 + "2.0.5": "2025-04-12", 3 + "2.0.4": "2024-05-08", 4 + "2.0.3": "2024-05-06", 5 + "2.0.2": "2024-04-20", 6 + "2.0.1": "2024-03-28", 7 + "2.0.0": "2024-03-26", 8 + "1.3.0": "2024-03-26", 9 + "1.2.4": "2022-11-14", 10 + "1.2.3": "2021-10-21", 11 + "1.2.2": "2021-10-21", 12 + "1.2.1": "2020-09-06", 13 + "1.2.0": "2020-07-20", 14 + "1.1.0": "2019-07-13", 15 + "1.0.2": "2018-08-23", 16 + "1.0.1": "2018-08-14", 17 + "1.0.0": "2018-08-14", 18 + };
+195 -39
test.js
··· 1 1 #!/usr/bin/env node 2 - 'use strict'; 2 + 3 + import { ASN1, Stream } from './asn1.js'; 4 + import { Hex } from './hex.js'; 5 + import { Base64 } from './base64.js'; 6 + import { Int10 } from './int10.js'; 7 + 8 + const all = (process.argv[2] == 'all'); 9 + 10 + /** @type {Array<Tests>} */ 11 + const tests = []; 12 + 13 + const stats = { 14 + run: 0, 15 + error: 0, 16 + }; 17 + 18 + /** 19 + * A class for managing and executing tests. 20 + */ 21 + class Tests { 22 + /** 23 + * An array to store test data. 24 + * @type {Array<unknown>} 25 + */ 26 + data; 27 + 28 + /** 29 + * Checks a row of test data. 30 + * @param {Function} t - How to test a row of data. 31 + */ 32 + checkRow; 33 + 34 + /** 35 + * Constructs a new Tests instance. 36 + * @param {Function} checkRow - A function to check each row of data. 37 + * @param {Array<unknown>} data - The test data to be processed. 38 + */ 39 + constructor(checkRow, data) { 40 + this.checkRow = checkRow; 41 + this.data = data; 42 + } 43 + 44 + /** 45 + * Executes the tests and checks their results for all rows. 46 + */ 47 + checkAll() { 48 + for (const t of this.data) 49 + this.checkRow(t); 50 + } 3 51 4 - var Hex = require('./hex.js'), 5 - ASN1 = require('./asn1.js'), 6 - tests; 52 + /** 53 + * Prints the result of a test, indicating if it passed or failed. 54 + * @param {unknown} result The actual result of the test. 55 + * @param {unknown} expected The expected result of the test. 56 + * @param {string} comment A comment describing the test. 57 + */ 58 + checkResult(result, expected, comment) { 59 + ++stats.run; 60 + if (!result || result == expected) { 61 + if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment); 62 + } else { 63 + ++stats.error; 64 + console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment); 65 + console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n ')); 66 + console.log(' \x1B[1m\x1B[33mGOT\x1B[39m\x1B[22m ' + result.replace(/\n/g, '\n ')); 67 + } 68 + } 69 + } 7 70 8 - tests = [ 9 - // http://luca.ntop.org/Teaching/Appunti/asn1.html 10 - ['03 04 06 6e 5d c0', '(18 bit)\n011011100101110111', 'DER encoding'], 11 - ['03 04 06 6e 5d e0', '(18 bit)\n011011100101110111', 'padded with "100000"'], 12 - ['03 81 04 06 6e 5d c0', '(18 bit)\n011011100101110111', 'long form of length octets'], 13 - ['23 09 03 03 00 6e 5d 03 02 06 c0', '(18 bit)\n011011100101110111', 'constructed encoding: "0110111001011101" + "11"'], 71 + tests.push(new Tests(function (t) { 72 + const input = t[0], 73 + expected = t[1], 74 + comment = t[2]; 75 + let result; 76 + try { 77 + let node = ASN1.decode(Hex.decode(input)); 78 + if (typeof expected == 'function') 79 + result = expected(node); 80 + else 81 + result = node.content(); 82 + //TODO: check structure, not only first level content 83 + } catch (e) { 84 + result = 'Exception:\n' + e; 85 + } 86 + if (expected instanceof RegExp) 87 + result = expected.test(result) ? null : 'does not match'; 88 + this.checkResult(result, expected, comment); 89 + }, [ 90 + // RSA Laboratories technical notes from https://luca.ntop.org/Teaching/Appunti/asn1.html 91 + ['0304066E5DC0', '(18 bit)\n011011100101110111', 'ntop, bit string: DER encoding'], 92 + ['0304066E5DE0', '(18 bit)\n011011100101110111', 'ntop, bit string: padded with "100000"'], 93 + ['038104066E5DC0', '(18 bit)\n011011100101110111', 'ntop, bit string: long form of length octets'], 94 + ['23090303006E5D030206C0', '(18 bit)\n011011100101110111', 'ntop, bit string (constructed encoding): "0110111001011101" + "11"'], 95 + ['160D7465737431407273612E636F6D', 'test1@rsa.com', 'ntop, ia5string: DER encoding'], 96 + ['16810D7465737431407273612E636F6D', 'test1@rsa.com', 'ntop, ia5string: long form of length octets'], 97 + ['36131605746573743116014016077273612E636F6D', 'test1@rsa.com', 'ntop, ia5string: constructed encoding: "test1" + "@" + "rsa.com"'], 98 + ['020100', '0', 'ntop, integer: 0'], 99 + ['02017F', '127', 'ntop, integer: 127'], 100 + ['02020080', '128', 'ntop, integer: 128'], 101 + ['02020100', '256', 'ntop, integer: 256'], 102 + ['020180', '-128', 'ntop, integer: -128'], 103 + ['0202FF7F', '-129', 'ntop, integer: -129'], 104 + ['0500', null, 'ntop, null: DER'], 105 + ['058100', null, 'ntop, null: long form of length octets'], 106 + ['06062A864886F70D', '1.2.840.113549', 'ntop, object identifier'], 107 + ['04080123456789ABCDEF', '(8 byte)\n0123456789ABCDEF', 'ntop, octet string: DER encoding'], 108 + ['0481080123456789ABCDEF', '(8 byte)\n0123456789ABCDEF', 'ntop, octet string: long form of length octets'], 109 + ['240C040401234567040489ABCDEF', '(8 byte)\n0123456789ABCDEF', 'ntop, octet string (constructed encoding): 01โ€ฆ67 + 89โ€ฆef'], 110 + ['130B5465737420557365722031', 'Test User 1', 'ntop, printable string: DER encoding'], 111 + ['13810B5465737420557365722031', 'Test User 1', 'ntop, printable string: long form of length octets'], 112 + ['330F130554657374201306557365722031', 'Test User 1', 'ntop, printable string: constructed encoding: "Test " + "User 1"'], 113 + ['140F636CC26573207075626C6971756573', 'clรฉs publiques', 'ntop, t61string: DER encoding'], 114 + ['14810F636CC26573207075626C6971756573', 'clรฉs publiques', 'ntop, t61string: long form of length octets'], 115 + ['34151405636CC2657314012014097075626C6971756573', 'clรฉs publiques', 'ntop, t61string: constructed encoding: "clรฉs" + " " + "publiques"'], 116 + ['170D3931303530363233343534305A', '1991-05-06 23:45:40 UTC', 'ntop, utc time: UTC'], 117 + ['17113931303530363136343534302D30373030', '1991-05-06 16:45:40 UTC-07:00', 'ntop, utc time: PDT'], 118 + // inspired by http://luca.ntop.org/Teaching/Appunti/asn1.html 119 + ['0304086E5DC0', 'Exception:\nError: Invalid BitString with unusedBits=8', 'bit string: invalid unusedBits'], 14 120 // http://msdn.microsoft.com/en-us/library/windows/desktop/aa379076(v=vs.85).aspx 15 121 ['30820319308202820201003023310F300D0603550403130654657374434E3110300E060355040A1307546573744F726730819F300D06092A864886F70D010101050003818D00308189028181008FE2412A08E851A88CB3E853E7D54950B3278A2BCBEAB54273EA0257CC6533EE882061A11756C12418E3A808D3BED931F3370B94B8CC43080B7024F79CB18D5DD66D82D0540984F89F970175059C89D4D5C91EC913D72A6B309119D6D442E0C49D7C9271E1B22F5C8DEEF0F1171ED25F315BB19CBC2055BF3A37424575DC90650203010001A08201B4301A060A2B0601040182370D0203310C160A362E302E353336312E323042060A2B0601040182370D0201313430321E260043006500720074006900660069006300610074006500540065006D0070006C0061007400651E080055007300650072305706092B0601040182371514314A30480201090C237669636833642E6A646F6D6373632E6E74746573742E6D6963726F736F66742E636F6D0C154A444F4D4353435C61646D696E6973747261746F720C07636572747265713074060A2B0601040182370D0202316630640201011E5C004D006900630072006F0073006F0066007400200045006E00680061006E006300650064002000430072007900700074006F0067007200610070006800690063002000500072006F00760069006400650072002000760031002E003003010030818206092A864886F70D01090E31753073301706092B0601040182371402040A1E08005500730065007230290603551D2504223020060A2B0601040182370A030406082B0601050507030406082B06010505070302300E0603551D0F0101FF0404030205A0301D0603551D0E041604143C0F73DAF8EF41D83AEABE922A5D2C966A7B9454300D06092A864886F70D01010505000381810047EB995ADF9E700DFBA73132C15F5C24C2E0BFC624AF15660EB86A2EAB2BC4971FE3CBDC63A525ECC7B428616636A1311BBFDDD0FCBF1794901DE55EC7115EC9559FEBA33E14C799A6CBBAA1460F39D444C4C84B760E205D6DA9349ED4D58742EB2426511490B40F065E5288327A9520A0FDF7E57D60DD72689BF57B058F6D1E', 16 122 '(3 elem)', 'PKCS#10 request'], 17 123 // Int10 18 - ['060C69C7C79AB78084C289F9870D', '2.25.84478768945400492475277', 'Big OID arc'], 19 - ['06146982968D8D889BCCA8C7B3BDD4C080AAAED78A1B', '2.25.184830721219540099336690027854602552603', 'Bigger OID arc'], 20 - ['060488378952', '2.999.1234', 'OID arc > 2.47'], 21 - ['060A81FFFFFFFFFFFFFFFF7F', '2.18446744073709551535', 'OID root 64 bit - 1'], 22 - ['060A82808080808080808000', '2.18446744073709551536', 'OID root 64 bit'], 23 - ['060A82808080808080808001', '2.18446744073709551537', 'OID root 64 bit + 1'], 24 - ['0620FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F', '2.26959946667150639794667015087019630673637144422540572481103610249135', 'OID derLen20c'], 25 - ['0621818080808080808080808080808080808080808080808080808080808080808000', '2.26959946667150639794667015087019630673637144422540572481103610249136', 'OID derLen21c'], 26 - ['060782A384F3CAC00A', '2.9999999999930', 'OID with Int10 corner case (1)'], 27 - ['060881E3AFEAA69A800A', '2.999999999999930', 'OID with Int10 corner case (2)'], 28 - ['06092A864886F70D010105', '1.2.840.113549.1.1.5\nsha1WithRSAEncryption\nPKCS #1', 'known OID from Peter Gutmann list'], 29 124 ['02102FA176B36EE9F049F444B40099661945', '(126 bit)\n63312083136615639753586560173617846597', 'Big integer (126 bit)'], 30 125 ['028181008953097086EE6147C5F4D5FFAF1B498A3D11EC5518E964DC52126B2614F743883F64CA51377ABB530DFD20464A48BD67CD27E7B29AEC685C5D10825E605C056E4AB8EEA460FA27E55AA62C498B02D7247A249838A12ECDF37C6011CF4F0EDEA9CEE687C1CB4A51C6AE62B2EFDB000723A01C99D6C23F834880BA8B42D5414E6F', 31 126 '(1024 bit)\n96432446964907009840023644401994013457468837455140331578268642517697945390319089463541388080569398374873228752921897678940332050406994011437231634303608704223145390228074087922901239478374991949372306413157758278029522534299413919735715864599284769202556071242381348472464716517735026291259010477833523908207', ··· 42 137 ['0203800001', '-8388607', 'Negative 8388607'], 43 138 ['02020000', '0', 'Zero (2)'], 44 139 ['0204FFFFFFFF', '-1', 'Negative 1 (4)'], 45 - ['06092A864886F70D010105', '1.2.840.113549.1.1.5\nsha1WithRSAEncryption\nPKCS #1', 'OID decoding'] 46 - ]; 140 + // OID 141 + ['060C69C7C79AB78084C289F9870D', '2.25.84478768945400492475277', 'Big OID arc'], 142 + ['06146982968D8D889BCCA8C7B3BDD4C080AAAED78A1B', '2.25.184830721219540099336690027854602552603', 'Bigger OID arc'], 143 + ['060488378952', '2.999.1234', 'OID arc > 2.47'], 144 + ['060782A384F3CAC00A', '2.9999999999930', 'OID with Int10 corner case (1)'], 145 + ['060881E3AFEAA69A800A', '2.999999999999930', 'OID with Int10 corner case (2)'], 146 + ['06092A864886F70D010105', '1.2.840.113549.1.1.5\nsha1WithRSAEncryption\nPKCS #1', 'known OID from Peter Gutmann list'], 147 + // OID corner case from https://misc.daniel-marschall.de/asn.1/oid-sizecheck/oid_size_test.txt 148 + ['060A81FFFFFFFFFFFFFFFF7F', '2.18446744073709551535', 'OID root 64 bit - 1'], 149 + ['060A82808080808080808000', '2.18446744073709551536', 'OID root 64 bit'], 150 + ['060A82808080808080808001', '2.18446744073709551537', 'OID root 64 bit + 1'], 151 + ['0620FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F', '2.26959946667150639794667015087019630673637144422540572481103610249135', 'OID derLen20c'], 152 + ['0621818080808080808080808080808080808080808080808080808080808080808000', '2.26959946667150639794667015087019630673637144422540572481103610249136', 'OID derLen21c'], 153 + // relative OID 154 + ['0D0A0102030405060708090A','1.2.3.4.5.6.7.8.9.10', 'Relative OID from GitHub PR 56'], 155 + ['0D04C27B0302','8571.3.2', 'Relative OID from ISO/IEC 8825-1:2002 8.20.5'], 156 + // UTF-8 157 + ['0C0E4C61706FE280997320F09F9A972E', 'Lapoโ€™s ๐Ÿš—.', 'UTF-8 4-byte sequence'], 158 + // T-REC-X.690-201508 159 + ['0307040A3B5F291CD0', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (primitive encoding)'], 160 + ['23800303000A3B0305045F291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (constructed encoding)'], 161 + // avoid past bugs 162 + ['23800303000A3B230A0302005F030404291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Bit string (recursive constructed)'], 163 + ['0348003045022100DE601E573DAFB59BC551D58E3E7B9EDA0612DD0112805A2217B734759B884417022067C3FDE60780D41C1D7A3B90291F3D39C4DC2F206DCCBA2F982C06B67C09B232', '(568 bit)\n0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010', 'not constructed, but contains structures'], 164 + ['040731323334353637', '(7 byte)\n1234567', 'Octet string with ASCII content'], 165 + ['0407312E3233E282AC', '(7 byte)\n1.23โ‚ฌ', 'Octet string with UTF-8 content'], 166 + ['0420041EE4E3B7ED350CC24D034E436D9A1CB15BB1E328D37062FB82E84618AB0A3C', '(32 byte)\n041EE4E3B7ED350CC24D034E436D9A1CB15BB1E328D37062FB82E84618AB0A3C', 'Do not mix encapsulated and structured octet strings'], // GitHub issue #47 167 + ['181531393835313130363231303632372E332D31323334', '1985-11-06 21:06:27.3 UTC-12:34', 'UTC offsets with minutes'], // GitHub issue #54 168 + ['181331393835313130363231303632372E332B3134', '1985-11-06 21:06:27.3 UTC+14:00', 'UTC offset +13 and +14'], // GitHub issue #54 169 + ['032100171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', n => { if (n.sub != null) return 'Should not decode content: ' + n.sub[0].content(); }, 'Key that resembles an UTCTime'], // GitHub issue #79 170 + ['171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', /^Exception:\nError: Unrecognized time: /, 'Invalid UTCTime'], // GitHub issue #79 171 + ])); 172 + 173 + tests.push(new Tests(function (t) { 174 + let bin = Base64.decode(t); 175 + let url = new Stream(bin, 0).b64Dump(0, bin.length); 176 + // check base64url encoding 177 + this.checkResult(url, t.replace(/\n/g, '').replace(/=*$/g, ''), 'Base64url: ' + bin.length + ' bytes'); 178 + // check conversion from base64url to base64 179 + let pretty = Base64.pretty(url); 180 + this.checkResult(pretty, t, 'Base64pretty: ' + bin.length + ' bytes'); 181 + let std = new Stream(bin, 0).b64Dump(0, bin.length, 'std'); 182 + // check direct base64 encoding 183 + this.checkResult(std, t.replace(/\n/g, ''), 'Base64: ' + bin.length + ' bytes'); 184 + }, [ 185 + 'AA==', 186 + 'ABA=', 187 + 'ABCD', 188 + 'ABCDEA==', 189 + 'ABCDEFE=', 190 + 'ABCDEFGH', 191 + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQR\nSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456w==', 192 + ])); 47 193 48 - tests.forEach(function (t) { 49 - var input = t[0], 50 - expected = t[1], 51 - comment = t[2], 52 - result = null; 53 - try { 54 - result = ASN1.decode(Hex.decode(input)).content(); 55 - //TODO: check structure, not only first level content 56 - } catch (e) { 57 - result = 'Exception:\n' + e; 58 - } 59 - if (result == expected) 60 - console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment); 61 - else 62 - console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment + '\n' + result); 63 - }); 194 + tests.push(new Tests(function (t) { 195 + this.row = (0|this.row) + 1; 196 + this.num = this.num || new Int10(); 197 + this.num.mulAdd(t[0], t[1]); 198 + this.checkResult(this.num.toString(), t[2], 'Int10 row ' + this.row); 199 + }, [ 200 + [0, 1000000000, '1000000000'], 201 + [256, 23, '256000000023'], 202 + [256, 23, '65536000005911'], 203 + [256, 23, '16777216001513239'], 204 + [256, 23, '4294967296387389207'], 205 + [256, 23, '1099511627875171637015'], 206 + [256, 23, '281474976736043939075863'], 207 + [253, 1, '71213169114219116586193340'], 208 + [253, 1, '18016931785897436496306915021'], 209 + [253, 1, '4558283741832051433565649500314'], 210 + [253, 1, '1153245786683509012692109323579443'], 211 + [253, 1, '291771184030927780211103658865599080'], 212 + [1, 0, '291771184030927780211103658865599080'], 213 + ])); 214 + 215 + for (const t of tests) 216 + t.checkAll(); 217 + 218 + console.log(stats.run + ' tested, ' + stats.error + ' errors.'); 219 + 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 (e) { // 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>
-52
update.sh
··· 1 - #/bin/sh 2 - URL='https://www.cs.auckland.ac.nz/~pgut001/dumpasn1.cfg' 3 - if [ -x /usr/bin/fetch ]; then 4 - /usr/bin/fetch -m --no-verify-peer $URL 5 - elif [ -x /usr/bin/wget ]; then 6 - /usr/bin/wget -N --no-check-certificate $URL 7 - elif [ ! -r dumpasn1.cfg ]; then 8 - echo Please download $URL in this directory. 9 - exit 1 10 - fi 11 - cat dumpasn1.cfg | \ 12 - tr -d '\r' | \ 13 - awk -v url="$URL" ' 14 - function clean() { 15 - oid = ""; 16 - comment = ""; 17 - description = ""; 18 - warning = ""; 19 - } 20 - BEGIN { 21 - FS = "= *"; 22 - apos = sprintf("%c", 39); 23 - clean(); 24 - print "// Converted from: " url; 25 - print "// which is made by Peter Gutmann and whose license states:"; 26 - print "// You can use this code in whatever way you want,"; 27 - print "// as long as you don" apos "t try to claim you wrote it."; 28 - print "var oids = {"; 29 - } 30 - /^OID/ { oid = $2; } 31 - /^Comment/ { comment = $2; } 32 - /^Description/ { description = $2; } 33 - /^Warning/ { warning = ", \"w\": true"; } 34 - /^$/ { 35 - if (length(oid) > 0) { 36 - gsub(" ", ".", oid); 37 - gsub("\"", "\\\"", description); 38 - gsub("\"", "\\\"", comment); 39 - if (++seen[oid] > 1) 40 - print "Duplicate OID in line " NR ": " oid > "/dev/stderr"; 41 - else 42 - printf "\"%s\": { \"d\": \"%s\", \"c\": \"%s\"%s },\n", oid, description, comment, warning; 43 - clean(); 44 - } 45 - } 46 - END { 47 - print "\"END\": \"\"" 48 - print "};" 49 - print "if (typeof module !== " apos "undefined" apos ") { module.exports = oids; }" 50 - } 51 - ' >oids.js 52 - echo Conversion completed.
+49
updateOID.sh
··· 1 + #/bin/sh 2 + URL='https://www.cs.auckland.ac.nz/~pgut001/dumpasn1.cfg' 3 + if [ -x /usr/bin/fetch ]; then 4 + /usr/bin/fetch -m --no-verify-peer $URL 5 + elif [ -x /usr/bin/wget ]; then 6 + /usr/bin/wget -N --no-check-certificate $URL 7 + elif [ ! -r dumpasn1.cfg ]; then 8 + echo Please download $URL in this directory. 9 + exit 1 10 + fi 11 + cat dumpasn1.cfg | \ 12 + tr -d '\r' | \ 13 + awk -v apos="'" -v q='"' -v url="$URL" ' 14 + function clean() { 15 + oid = ""; 16 + comment = ""; 17 + description = ""; 18 + warning = ""; 19 + } 20 + BEGIN { 21 + FS = "= *"; 22 + clean(); 23 + print "// Converted from: " url; 24 + print "// which is made by Peter Gutmann and whose license states:"; 25 + print "// You can use this code in whatever way you want,"; 26 + print "// as long as you don" apos "t try to claim you wrote it."; 27 + print "export const oids = {"; 28 + } 29 + /^OID/ { oid = $2; } 30 + /^Comment/ { comment = $2; } 31 + /^Description/ { description = $2; } 32 + /^Warning/ { warning = ", \"w\": true"; } 33 + /^$/ { 34 + if (length(oid) > 0) { 35 + gsub(" ", ".", oid); 36 + gsub("\"", "\\\"", description); 37 + gsub("\"", "\\\"", comment); 38 + if (++seen[oid] > 1) 39 + print "Duplicate OID in line " NR ": " oid > "/dev/stderr"; 40 + else 41 + printf "\"%s\": { \"d\": \"%s\", \"c\": \"%s\"%s },\n", oid, description, comment, warning; 42 + clean(); 43 + } 44 + } 45 + END { 46 + print "};" 47 + } 48 + ' >oids.js 49 + echo Conversion completed.
+32
updateRFC.sh
··· 1 + #/bin/sh 2 + RFCs="5280 5208 3369 3161 2986 4211 4210 8017 4511" 3 + downloadRFC() { 4 + URL="https://www.ietf.org/rfc/rfc$1.txt" 5 + if [ -x /usr/bin/fetch ]; then 6 + /usr/bin/fetch -m --no-verify-peer $URL 7 + elif [ -x /usr/bin/wget ]; then 8 + /usr/bin/wget -N --no-check-certificate $URL 9 + elif [ ! -r dumpasn1.cfg ]; then 10 + echo Please download $URL in this directory. 11 + exit 1 12 + fi 13 + } 14 + echo '{}' > rfcdef.json # start from scratch 15 + mkdir -p rfc 16 + cd rfc 17 + for n in $RFCs; do 18 + downloadRFC $n 19 + ../parseRFC.js rfc$n.txt ../rfcdef.json 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 32 + echo Conversion completed.
+37
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 + export default defineConfig({ 20 + plugins: [ 21 + preventSVGEmit(), 22 + pluginDom({ 23 + applyOnMode: true, // all modes 24 + handler: node => { 25 + if (removeNodes.includes(node.attribs.id)) 26 + DomUtils.removeElement(node); 27 + else if (node.name == 'link' && node.attribs.rel == 'icon') 28 + node.attribs.href = 'data:image/svg+xml;base64,' + btoa(fs.readFileSync('favicon.svg', 'ascii').replace(/^([^<]+|<[^s]|<s[^v]|<sv[^g])+/, '').trim()); 29 + }, 30 + }), 31 + viteSingleFile(), 32 + ], 33 + build: { 34 + minify: false, 35 + cssMinify: false, 36 + }, 37 + });