+10
.editorconfig
+10
.editorconfig
+12
-5
.github/workflows/node.js.yml
+12
-5
.github/workflows/node.js.yml
···
12
12
13
13
strategy:
14
14
matrix:
15
-
node-version: [16.x]
15
+
node-version: [ 14.6.0, latest ]
16
16
17
17
steps:
18
-
- uses: actions/checkout@v2
18
+
- uses: actions/checkout@v4
19
+
- name: Use pnpm
20
+
uses: pnpm/action-setup@v4
21
+
with:
22
+
run_install: false
19
23
- name: Use Node.js ${{ matrix.node-version }}
20
-
uses: actions/setup-node@v1
24
+
uses: actions/setup-node@v4
21
25
with:
22
26
node-version: ${{ matrix.node-version }}
23
-
- run: npm test all
24
-
- run: npm run lint
27
+
cache: pnpm
28
+
- run: pnpm install
29
+
- run: node test all
30
+
- run: pnpm run lint
31
+
if: matrix.node-version == 'latest'
+16
-5
.gitignore
+16
-5
.gitignore
···
1
-
.DS_Store
2
-
.vscode
1
+
_MTN/
2
+
.DS_Store/
3
+
.vscode/
4
+
node_modules/
5
+
dist/
6
+
package-lock.json
7
+
# Artifacts from release.sh
8
+
index-local.html
9
+
sha256sums.asc
10
+
asn1js.zip
11
+
# Artifacts from mirror_to_github.sh
3
12
git-*.txt
4
-
node_modules
5
-
package-lock.json
6
-
pnpm-lock.yaml
13
+
# Artifacts from updateOID.sh
14
+
dumpasn1.cfg
15
+
# Artifacts from parseRFC.js
16
+
rfc/
17
+
rfcdef.json
+16
-6
.mtn-ignore
+16
-6
.mtn-ignore
···
1
-
.DS_Store
2
-
.vscode
3
-
git-*.txt
4
-
node_modules
5
-
package-lock.json
6
-
pnpm-lock.yaml
1
+
[.]DS_Store$
2
+
[.]vscode$
3
+
node_modules$
4
+
dist$
5
+
package-lock[.]json
6
+
# Artifacts from release.sh
7
+
index-local.html
8
+
sha256sums[.]asc
9
+
asn1js[.]zip
10
+
# Artifacts from mirror_to_github.sh
11
+
git-[^.]*[.]txt
12
+
# Artifacts from updateOID.sh
13
+
dumpasn1[.]cfg
14
+
# Artifacts from parseRFC.js
15
+
rfc$
16
+
rfcdef[.]json
+99
.vscode/launch.json
+99
.vscode/launch.json
···
1
+
{
2
+
// Use IntelliSense to learn about possible attributes.
3
+
// Hover to view descriptions of existing attributes.
4
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+
"version": "0.2.0",
6
+
"configurations": [
7
+
{
8
+
"type": "node",
9
+
"request": "launch",
10
+
"name": "test",
11
+
"skipFiles": [
12
+
"<node_internals>/**"
13
+
],
14
+
"program": "${workspaceFolder}/test.js",
15
+
"args": []
16
+
},
17
+
{
18
+
"type": "node",
19
+
"request": "launch",
20
+
"name": "dumpASN1",
21
+
"skipFiles": [
22
+
"<node_internals>/**"
23
+
],
24
+
"program": "${workspaceFolder}/dumpASN1.js",
25
+
"args": [
26
+
"examples/ed25519.cer"
27
+
]
28
+
},
29
+
{
30
+
"type": "node",
31
+
"request": "launch",
32
+
"name": "parseRFC",
33
+
"skipFiles": [
34
+
"<node_internals>/**"
35
+
],
36
+
"program": "${workspaceFolder}/parseRFC.js",
37
+
"args": [
38
+
"rfc/rfc4511.txt",
39
+
"rfcdef.json"
40
+
]
41
+
},
42
+
{
43
+
"type": "node",
44
+
"request": "launch",
45
+
"name": "dumpASN1 X.509",
46
+
"skipFiles": [
47
+
"<node_internals>/**"
48
+
],
49
+
"program": "${workspaceFolder}/dumpASN1.js",
50
+
"args": [
51
+
"examples/ed25519.cer",
52
+
"1.3.6.1.5.5.7.0.18",
53
+
"Certificate"
54
+
]
55
+
},
56
+
{
57
+
"type": "node",
58
+
"request": "launch",
59
+
"name": "dumpASN1 CRL",
60
+
"skipFiles": [
61
+
"<node_internals>/**"
62
+
],
63
+
"program": "${workspaceFolder}/dumpASN1.js",
64
+
"args": [
65
+
"data:base64,MIG9AgEBMA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUUjM0IFNhbXBsZXMxGzAZBgNVBAMTElRSMzQgU2FtcGxlIENBIEtESBcNMTAxMTAyMTczMzMwWhcNMTAxMjAyMTczMzMwWjBIMBYCBTQAAAAIFw0xMDExMDIxNzI4MTNaMBYCBTQAAAAKFw0xMDExMDIxNzMxNDZaMBYCBTQAAAALFw0xMDExMDIxNzMzMjVa",
66
+
"1.3.6.1.5.5.7.0.18",
67
+
"TBSCertList"
68
+
]
69
+
},
70
+
{
71
+
"type": "node",
72
+
"request": "launch",
73
+
"name": "dumpASN1 CMS",
74
+
"skipFiles": [
75
+
"<node_internals>/**"
76
+
],
77
+
"program": "${workspaceFolder}/dumpASN1.js",
78
+
"args": [
79
+
"examples/cms-password.p7m",
80
+
"1.2.840.113549.1.9.16.0.14",
81
+
"ContentInfo"
82
+
]
83
+
},
84
+
{
85
+
"type": "node",
86
+
"request": "launch",
87
+
"name": "dumpASN1 LDAP",
88
+
"skipFiles": [
89
+
"<node_internals>/**"
90
+
],
91
+
"program": "${workspaceFolder}/dumpASN1.js",
92
+
"args": [
93
+
"data:base64,MDMCAQFjLgQACgEACgEAAgEAAgEAAQEAoA+jDQQFTnRWZXIEBAEAAAAwCgQITmV0bG9nb24===",
94
+
"1.3.6.1.1.18",
95
+
"LDAPMessage"
96
+
]
97
+
}
98
+
]
99
+
}
+9
.vscode/settings.json
+9
.vscode/settings.json
+27
CHANGELOG.md
+27
CHANGELOG.md
···
1
+
# ChangeLog
2
+
3
+
## 2.1.0 - 2025-08-03
4
+
5
+
### Changed
6
+
7
+
- when fields are CHOICEs now both the field name and the choice name are shown (fixes GitHub #102)
8
+
- upgrade minimum NodeJS version supported from 12.20.0 to 14.6.0 due to usage of ?. and ?? operators in defs.js (ECMAScript 2020); older code is still linted against ECMAScript 2015 for now
9
+
10
+
### Added
11
+
12
+
- add tests to check expected decoding
13
+
14
+
## 2.0.6 - 2025-07-29
15
+
16
+
### Added
17
+
18
+
- add proper support for standard Base64 (we previously only supported Base64url) (fixes GitHub #99)
19
+
- improve test harness
20
+
21
+
## 2.0.5 - 2025-04-12
22
+
23
+
### Added
24
+
25
+
- add `index-local.html` for local `file://` usage without needing a web server
26
+
- add definitions support for `LDAPMessage`
27
+
- #TODO continue producing old ChangeLog entries
+1
-1
LICENSE
+1
-1
LICENSE
+53
-22
README.md
+53
-22
README.md
···
3
3
4
4
asn1js is a JavaScript generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.
5
5
6
-
An example page that can decode Base64-encoded (raw base64, PEM armoring and `begin-base64` are recognized) or Hex-encoded (or local files with some browsers) is included and can be used both [online on the official website](https://lapo.it/asn1js/) or [offline (ZIP file)](https://lapo.it/asn1js/asn1js.zip).
6
+
An example page that can decode Base64-encoded (raw base64, PEM armoring and `begin-base64` are recognized) or Hex-encoded (or local files with some browsers) is included and can be used both [online on the official website](https://asn1js.eu/) or [offline (ZIP file)](https://lapo.it/asn1js/asn1js.zip) by opening `index-local.html`.
7
7
8
-
Usage with `npm` / `yarn`
9
-
-------------------------
8
+
Usage with `nodejs`
9
+
-------------------
10
10
11
11
This package can be installed with either npm or yarn via the following commands:
12
12
13
13
```sh
14
14
npm install @lapo/asn1js
15
-
# or with yarn
15
+
# or other tools
16
+
pnpm install @lapo/asn1js
16
17
yarn add @lapo/asn1js
17
18
```
18
19
19
-
Assuming a standard javascript bundler is setup you can import it like so:
20
+
You can import the classes like this:
20
21
21
22
```js
22
-
const ASN1 = require('@lapo/asn1js');
23
-
// or with ES modules
24
-
import ASN1 from '@lapo/asn1js';
23
+
import { ASN1 } from '@lapo/asn1js';
25
24
```
26
25
27
26
A submodule of this package can also be imported:
28
27
29
28
```js
30
-
const Hex = require('@lapo/asn1js/hex');
31
-
// or with ES modules
32
-
import Hex from '@lapo/asn1js/hex';
29
+
import { Hex } from '@lapo/asn1js/hex.js';
30
+
```
31
+
32
+
If your code is still not using ES6 Modules (and is using CommonJS) you can `require` it normally [since NodeJS 22](https://joyeecheung.github.io/blog/2024/03/18/require-esm-in-node-js/) (with parameter `--experimental-require-module`):
33
+
34
+
```js
35
+
const
36
+
{ ASN1 } = require('@lapo/asn1js'),
37
+
{ Hex } = require('@lapo/asn1js/hex.js');
38
+
console.log(ASN1.decode(Hex.decode('06032B6570')).content());
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();
33
51
```
34
52
35
-
Usage with RequireJS
53
+
Usage on the web
36
54
--------------------
37
55
38
-
Can be [tested on JSFiddle](https://jsfiddle.net/lapo/tmdq35ug/).
56
+
Can be [tested on JSFiddle](https://jsfiddle.net/lapo/y6t2wo7q/).
39
57
40
58
```html
41
-
<script type="text/javascript" src="https://unpkg.com/requirejs/require.js"></script>
42
59
<script>
43
-
require([
44
-
'https://unpkg.com/@lapo/asn1js/asn1.js',
45
-
'https://unpkg.com/@lapo/asn1js/hex.js'
46
-
], function(ASN1, Hex) {
47
-
document.body.innerText = ASN1.decode(Hex.decode('06032B6570')).content();
48
-
});
60
+
import { ASN1 } from 'https://unpkg.com/@lapo/asn1js@2.0.0/asn1.js';
61
+
import { Hex } from 'https://unpkg.com/@lapo/asn1js@2.0.0/hex.js';
62
+
63
+
document.body.innerText = ASN1.decode(Hex.decode('06032B6570')).content();
49
64
</script>
50
65
```
51
66
67
+
Local usage
68
+
--------------------
69
+
70
+
Since unfortunately ESM modules are not working on `file:` protocol due to [CORS issues](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#other_differences_between_modules_and_standard_scripts), there is a bundled [single-file version working locally](https://asn1js.eu/index-local.html). It doesn't work online (due to [CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) restrictions about inline content) but can be saved locally and opened in a browser.
71
+
72
+
Usage from CLI
73
+
--------------------
74
+
75
+
You can dump an ASN.1 structure from the command line using the following command (no need to even install it):
76
+
77
+
```sh
78
+
npx @lapo/asn1js ed25519.cer
79
+
```
80
+
52
81
ISC license
53
82
-----------
54
83
55
-
ASN.1 JavaScript decoder Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it>
84
+
ASN.1 JavaScript decoder Copyright (c) 2008-2025 Lapo Luchini <lapo@lapo.it>
56
85
57
86
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
58
87
···
66
95
- extended tag support added by [Pรฉter Budai](https://www.peterbudai.eu/)
67
96
- patches by [Gergely Nagy](https://github.com/ngg)
68
97
- Relative OID support added by [Mistial Developer](https://github.com/mistial-dev)
69
-
- dark mode support added by [Oliver Burgmaier](https://github.com/olibu/)
98
+
- dark mode and other UI improvements by [Oliver Burgmaier](https://github.com/olibu/)
99
+
- patches by [Nicolai Sรธborg](https://github.com/NicolaiSoeborg)
70
100
71
101
links
72
102
-----
···
75
105
- [dedicated domain](https://asn1js.eu/)
76
106
- [InDefero tracker](http://idf.lapo.it/p/asn1js/)
77
107
- [GitHub mirror](https://github.com/lapo-luchini/asn1js)
108
+
- [ChangeLog on GitHub](https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md)
78
109
- [Ohloh code stats](https://www.openhub.net/p/asn1js)
+586
-526
asn1.js
+586
-526
asn1.js
···
1
1
// ASN.1 JavaScript decoder
2
-
// Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it>
2
+
// Copyright (c) 2008 Lapo Luchini <lapo@lapo.it>
3
3
4
4
// Permission to use, copy, modify, and/or distribute this software for any
5
5
// purpose with or without fee is hereby granted, provided that the above
6
6
// copyright notice and this permission notice appear in all copies.
7
-
//
7
+
//
8
8
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
9
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
10
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
···
13
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
15
16
-
(typeof define != 'undefined' ? define : function (factory) { 'use strict';
17
-
if (typeof module == 'object') module.exports = factory(function (name) { return require(name); });
18
-
else window.asn1 = factory(function (name) { return window[name.substring(2)]; });
19
-
})(function (require) {
20
-
"use strict";
16
+
import { Int10 } from './int10.js';
17
+
import { oids } from './oids.js';
21
18
22
-
var Int10 = require('./int10'),
23
-
oids = require('./oids'),
24
-
ellipsis = "\u2026",
19
+
const
20
+
ellipsis = '\u2026',
25
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)?)?$/,
26
-
reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|(-(?:0\d|1[0-2])|[+](?:0\d|1[0-4]))([0-5]\d)?)?$/;
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
+
];
27
44
28
45
function stringCut(str, len) {
29
46
if (str.length > len)
···
31
48
return str;
32
49
}
33
50
34
-
function Stream(enc, pos) {
35
-
if (enc instanceof Stream) {
36
-
this.enc = enc.enc;
37
-
this.pos = enc.pos;
38
-
} else {
39
-
// enc should be an array or a binary string
40
-
this.enc = enc;
41
-
this.pos = pos;
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) + ')');
42
57
}
43
58
}
44
-
Stream.prototype.get = function (pos) {
45
-
if (pos === undefined)
46
-
pos = this.pos++;
47
-
if (pos >= this.enc.length)
48
-
throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length;
49
-
return (typeof this.enc == "string") ? this.enc.charCodeAt(pos) : this.enc[pos];
50
-
};
51
-
Stream.prototype.hexDigits = "0123456789ABCDEF";
52
-
Stream.prototype.hexByte = function (b) {
53
-
return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);
54
-
};
55
-
Stream.prototype.hexDump = function (start, end, raw) {
56
-
var s = "";
57
-
for (var i = start; i < end; ++i) {
58
-
s += this.hexByte(this.get(i));
59
-
if (raw !== true)
60
-
switch (i & 0xF) {
61
-
case 0x7: s += " "; break;
62
-
case 0xF: s += "\n"; break;
63
-
default: s += " ";
64
-
}
65
-
}
66
-
return s;
67
-
};
68
-
var b64Safe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
69
-
Stream.prototype.b64Dump = function (start, end) {
70
-
var extra = (end - start) % 3,
71
-
s = '',
72
-
i, c;
73
-
for (i = start; i + 2 < end; i += 3) {
74
-
c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2);
75
-
s += b64Safe.charAt(c >> 18 & 0x3F);
76
-
s += b64Safe.charAt(c >> 12 & 0x3F);
77
-
s += b64Safe.charAt(c >> 6 & 0x3F);
78
-
s += b64Safe.charAt(c & 0x3F);
79
-
}
80
-
if (extra > 0) {
81
-
c = this.get(i) << 16;
82
-
if (extra > 1) c |= this.get(i + 1) << 8;
83
-
s += b64Safe.charAt(c >> 18 & 0x3F);
84
-
s += b64Safe.charAt(c >> 12 & 0x3F);
85
-
if (extra == 2) s += b64Safe.charAt(c >> 6 & 0x3F);
86
-
}
87
-
return s;
88
-
};
89
-
Stream.prototype.isASCII = function (start, end) {
90
-
for (var i = start; i < end; ++i) {
91
-
var c = this.get(i);
92
-
if (c < 32 || c > 176)
93
-
return false;
94
-
}
95
-
return true;
96
-
};
97
-
Stream.prototype.parseStringISO = function (start, end, maxLength) {
98
-
var s = "";
99
-
for (var i = start; i < end; ++i)
100
-
s += String.fromCharCode(this.get(i));
101
-
return { size: s.length, str: stringCut(s, maxLength) };
102
-
};
103
-
var tableT61 = [
104
-
['', ''],
105
-
['AEIOUaeiou', 'รรรรรร รจรฌรฒรน'], // Grave
106
-
['ACEILNORSUYZacegilnorsuyz', 'รฤรรฤนลรลลรรลนรกฤรฉฤฃรญฤบลรณลลรบรฝลบ'], // Acute
107
-
['ACEGHIJOSUWYaceghijosuwy', 'รฤรฤฤครฤดรลรลดลถรขฤรชฤฤฅรฎฤตรดลรปลตลท'], // Circumflex
108
-
['AINOUainou', 'รฤจรรลจรฃฤฉรฑรตลฉ'], // Tilde
109
-
['AEIOUaeiou', 'ฤฤฤชลลชฤฤฤซลลซ'], // Macron
110
-
['AGUagu', 'ฤฤลฌฤฤลญ'], // Breve
111
-
['CEGIZcegz', 'ฤฤฤ ฤฐลปฤฤฤกลผ'], // Dot
112
-
['AEIOUYaeiouy', 'รรรรรลธรครซรฏรถรผรฟ'], // Umlaut or diรฆresis
113
-
['', ''],
114
-
['AUau', 'ร
ลฎรฅลฏ'], // Ring
115
-
['CGKLNRSTcklnrst', 'รฤขฤถฤปล
ลลลขรงฤทฤผลลลลฃ'], // Cedilla
116
-
['', ''],
117
-
['OUou', 'ลลฐลลฑ'], // Double Acute
118
-
['AEIUaeiu', 'ฤฤฤฎลฒฤ
ฤฤฏลณ'], // Ogonek
119
-
['CDELNRSTZcdelnrstz', 'ฤฤฤฤฝลลล ลคลฝฤฤฤฤพลลลกลฅลพ'] // Caron
120
-
];
121
-
Stream.prototype.parseStringT61 = function (start, end, maxLength) {
122
-
// warning: this code is not very well tested so far
123
-
function merge(c, d) {
124
-
var t = tableT61[c - 0xC0];
125
-
var i = t[0].indexOf(String.fromCharCode(d));
126
-
return (i < 0) ? '\0' : t[1].charAt(i);
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');
127
84
}
128
-
var s = "", c;
129
-
for (var i = start; i < end; ++i) {
130
-
c = this.get(i);
131
-
if (c >= 0xA4 && c <= 0xBF)
132
-
s += '$ยฅ#ยงยค\0\0ยซ\0\0\0\0ยฐยฑยฒยณรยตยถยทรท\0\0ยปยผยฝยพยฟ'.charAt(c - 0xA4);
133
-
else if (c >= 0xE0 && c <= 0xFF)
134
-
s += 'โฆรรยชฤฆ\0ฤฒฤฟลรลยบรลฆลลฤธรฆฤรฐฤงฤฑฤณลลรธลรรพลงล\0'.charAt(c - 0xE0);
135
-
else if (c >= 0xC0 && c <= 0xCF)
136
-
s += merge(c, this.get(++i));
137
-
else // using ISO 8859-1 for characters undefined (or equal) in T.61
138
-
s += String.fromCharCode(c);
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);
139
93
}
140
-
return { size: s.length, str: stringCut(s, maxLength) };
141
-
};
142
-
Stream.prototype.parseStringUTF = function (start, end, maxLength) {
143
-
function ex(c) { // must be 10xxxxxx
144
-
if ((c < 0x80) || (c >= 0xC0))
145
-
throw new Error('Invalid UTF-8 continuation byte: ' + c);
146
-
return (c & 0x3F);
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);
147
98
}
148
-
function surrogate(cp) {
149
-
if (cp < 0x10000)
150
-
throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp);
151
-
// we could use String.fromCodePoint(cp) but let's be nice to older browsers and use surrogate pairs
152
-
cp -= 0x10000;
153
-
return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);
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;
154
117
}
155
-
var s = "";
156
-
for (var i = start; i < end; ) {
157
-
var c = this.get(i++);
158
-
if (c < 0x80) // 0xxxxxxx (7 bit)
159
-
s += String.fromCharCode(c);
160
-
else if (c < 0xC0)
161
-
throw new Error('Invalid UTF-8 starting byte: ' + c);
162
-
else if (c < 0xE0) // 110xxxxx 10xxxxxx (11 bit)
163
-
s += String.fromCharCode(((c & 0x1F) << 6) | ex(this.get(i++)));
164
-
else if (c < 0xF0) // 1110xxxx 10xxxxxx 10xxxxxx (16 bit)
165
-
s += String.fromCharCode(((c & 0x0F) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++)));
166
-
else if (c < 0xF8) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (21 bit)
167
-
s += surrogate(((c & 0x07) << 18) | (ex(this.get(i++)) << 12) | (ex(this.get(i++)) << 6) | ex(this.get(i++)));
168
-
else
169
-
throw new Error('Invalid UTF-8 starting byte (since 2003 it is restricted to 4 bytes): ' + c);
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;
170
143
}
171
-
return { size: s.length, str: stringCut(s, maxLength) };
172
-
};
173
-
Stream.prototype.parseStringBMP = function (start, end, maxLength) {
174
-
var s = "", hi, lo;
175
-
for (var i = start; i < end; ) {
176
-
hi = this.get(i++);
177
-
lo = this.get(i++);
178
-
s += String.fromCharCode((hi << 8) | lo);
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;
179
151
}
180
-
return { size: s.length, str: stringCut(s, maxLength) };
181
-
};
182
-
Stream.prototype.parseTime = function (start, end, shortYear) {
183
-
var s = this.parseStringISO(start, end).str,
184
-
m = (shortYear ? reTimeS : reTimeL).exec(s);
185
-
if (!m)
186
-
return "Unrecognized time: " + s;
187
-
if (shortYear) {
188
-
// to avoid querying the timer, use the fixed range [1970, 2069]
189
-
// it will conform with ITU X.400 [-10, +40] sliding window until 2030
190
-
m[1] = +m[1];
191
-
m[1] += (m[1] < 70) ? 2000 : 1900;
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) };
192
157
}
193
-
s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4];
194
-
if (m[5]) {
195
-
s += ":" + m[5];
196
-
if (m[6]) {
197
-
s += ":" + m[6];
198
-
if (m[7])
199
-
s += "." + m[7];
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);
200
176
}
177
+
return { size: s.length, str: stringCut(s, maxLength) };
201
178
}
202
-
if (m[8]) {
203
-
s += " UTC";
204
-
if (m[9])
205
-
s += m[9] + ":" + (m[10] || "00");
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) };
206
209
}
207
-
return s;
208
-
};
209
-
Stream.prototype.parseInteger = function (start, end) {
210
-
var v = this.get(start),
211
-
neg = (v > 127),
212
-
pad = neg ? 255 : 0,
213
-
len,
214
-
s = '';
215
-
// skip unuseful bits (not allowed in DER)
216
-
while (v == pad && ++start < end)
217
-
v = this.get(start);
218
-
len = end - start;
219
-
if (len === 0)
220
-
return neg ? '-1' : '0';
221
-
// show bit length of huge integers
222
-
if (len > 4) {
223
-
s = v;
224
-
len <<= 3;
225
-
while (((s ^ pad) & 0x80) == 0) {
226
-
s <<= 1;
227
-
--len;
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);
228
216
}
229
-
s = "(" + len + " bit)\n";
217
+
return { size: s.length, str: stringCut(s, maxLength) };
230
218
}
231
-
// decode the integer
232
-
if (neg) v = v - 256;
233
-
var n = new Int10(v);
234
-
for (var i = start + 1; i < end; ++i)
235
-
n.mulAdd(256, this.get(i));
236
-
return s + n.toString();
237
-
};
238
-
Stream.prototype.parseBitString = function (start, end, maxLength) {
239
-
var unusedBits = this.get(start);
240
-
if (unusedBits > 7)
241
-
throw 'Invalid BitString with unusedBits=' + unusedBits;
242
-
var lenBit = ((end - start - 1) << 3) - unusedBits,
243
-
s = "";
244
-
for (var i = start + 1; i < end; ++i) {
245
-
var b = this.get(i),
246
-
skip = (i == end - 1) ? unusedBits : 0;
247
-
for (var j = 7; j >= skip; --j)
248
-
s += (b >> j) & 1 ? "1" : "0";
249
-
if (s.length > maxLength)
250
-
s = stringCut(s, maxLength);
251
-
}
252
-
return { size: lenBit, str: s };
253
-
};
254
-
function checkPrintable(s) {
255
-
var i, v;
256
-
for (i = 0; i < s.length; ++i) {
257
-
v = s.charCodeAt(i);
258
-
if (v < 32 && v != 9 && v != 10 && v != 13) // [\t\r\n] are (kinda) printable
259
-
throw new Error('Unprintable character at index ' + i + ' (code ' + s.str.charCodeAt(i) + ")");
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';
241
+
if (m[9])
242
+
s += m[9] + ':' + (m[10] || '00');
243
+
}
244
+
return s;
260
245
}
261
-
}
262
-
Stream.prototype.parseOctetString = function (start, end, maxLength) {
263
-
var len = end - start,
264
-
s;
265
-
try {
266
-
s = this.parseStringUTF(start, end, maxLength);
267
-
checkPrintable(s.str);
268
-
return { size: end - start, str: s.str };
269
-
} catch (e) {
270
-
// ignore
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';
267
+
}
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();
271
274
}
272
-
maxLength /= 2; // we work in bytes
273
-
if (len > maxLength)
274
-
end = start + maxLength;
275
-
s = '';
276
-
for (var i = start; i < end; ++i)
277
-
s += this.hexByte(this.get(i));
278
-
if (len > maxLength)
279
-
s += ellipsis;
280
-
return { size: len, str: s };
281
-
};
282
-
Stream.prototype.parseOID = function (start, end, maxLength, isRelative) {
283
-
var s = '',
284
-
n = new Int10(),
285
-
bits = 0;
286
-
for (var i = start; i < end; ++i) {
287
-
var v = this.get(i);
288
-
n.mulAdd(128, v & 0x7F);
289
-
bits += 7;
290
-
if (!(v & 0x80)) { // finished
291
-
if (s === '') {
292
-
n = n.simplify();
293
-
if (isRelative) {
294
-
s = (n instanceof Int10) ? n.toString() : "" + n;
295
-
} else if (n instanceof Int10) {
296
-
n.sub(80);
297
-
s = "2." + n.toString();
298
-
} else {
299
-
var m = n < 80 ? n < 40 ? 0 : 1 : 2;
300
-
s = m + "." + (n - m * 40);
301
-
}
302
-
} else
303
-
s += "." + n.toString();
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';
304
286
if (s.length > maxLength)
305
-
return stringCut(s, maxLength);
306
-
n = new Int10();
307
-
bits = 0;
287
+
s = stringCut(s, maxLength);
308
288
}
289
+
return { size: lenBit, str: s };
309
290
}
310
-
if (bits > 0)
311
-
s += ".incomplete";
312
-
if (typeof oids === 'object' && !isRelative) {
313
-
var oid = oids[s];
314
-
if (oid) {
315
-
if (oid.d) s += "\n" + oid.d;
316
-
if (oid.c) s += "\n" + oid.c;
317
-
if (oid.w) s += "\n(warning!)";
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 (ignore) {
299
+
// ignore
318
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 };
319
310
}
320
-
return s;
321
-
};
322
-
Stream.prototype.parseRelativeOID = function (start, end, maxLength) {
323
-
return this.parseOID(start, end, maxLength, true);
324
-
};
325
-
326
-
function ASN1(stream, header, length, tag, tagLen, sub) {
327
-
if (!(tag instanceof ASN1Tag)) throw 'Invalid tag value.';
328
-
this.stream = stream;
329
-
this.header = header;
330
-
this.length = length;
331
-
this.tag = tag;
332
-
this.tagLen = tagLen;
333
-
this.sub = sub;
334
-
}
335
-
ASN1.prototype.typeName = function () {
336
-
switch (this.tag.tagClass) {
337
-
case 0: // universal
338
-
switch (this.tag.tagNumber) {
339
-
case 0x00: return "EOC";
340
-
case 0x01: return "BOOLEAN";
341
-
case 0x02: return "INTEGER";
342
-
case 0x03: return "BIT_STRING";
343
-
case 0x04: return "OCTET_STRING";
344
-
case 0x05: return "NULL";
345
-
case 0x06: return "OBJECT_IDENTIFIER";
346
-
case 0x07: return "ObjectDescriptor";
347
-
case 0x08: return "EXTERNAL";
348
-
case 0x09: return "REAL";
349
-
case 0x0A: return "ENUMERATED";
350
-
case 0x0B: return "EMBEDDED_PDV";
351
-
case 0x0C: return "UTF8String";
352
-
case 0x0D: return "RELATIVE_OID";
353
-
case 0x10: return "SEQUENCE";
354
-
case 0x11: return "SET";
355
-
case 0x12: return "NumericString";
356
-
case 0x13: return "PrintableString"; // ASCII subset
357
-
case 0x14: return "TeletexString"; // aka T61String
358
-
case 0x15: return "VideotexString";
359
-
case 0x16: return "IA5String"; // ASCII
360
-
case 0x17: return "UTCTime";
361
-
case 0x18: return "GeneralizedTime";
362
-
case 0x19: return "GraphicString";
363
-
case 0x1A: return "VisibleString"; // ASCII subset
364
-
case 0x1B: return "GeneralString";
365
-
case 0x1C: return "UniversalString";
366
-
case 0x1E: return "BMPString";
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
+
}
367
348
}
368
-
return "Universal_" + this.tag.tagNumber.toString();
369
-
case 1: return "Application_" + this.tag.tagNumber.toString();
370
-
case 2: return "[" + this.tag.tagNumber.toString() + "]"; // Context
371
-
case 3: return "Private_" + this.tag.tagNumber.toString();
349
+
return s;
372
350
}
373
-
};
351
+
parseRelativeOID(start, end, maxLength) {
352
+
return this.parseOID(start, end, maxLength, true);
353
+
}
354
+
}
355
+
374
356
function recurse(el, parser, maxLength) {
375
-
var avoidRecurse = true;
357
+
let avoidRecurse = true;
376
358
if (el.tag.tagConstructed && el.sub) {
377
359
avoidRecurse = false;
378
360
el.sub.forEach(function (e1) {
···
382
364
}
383
365
if (avoidRecurse)
384
366
return el.stream[parser](el.posContent(), el.posContent() + Math.abs(el.length), maxLength);
385
-
var d = { size: 0, str: '' };
367
+
let d = { size: 0, str: '' };
386
368
el.sub.forEach(function (el) {
387
-
var d1 = recurse(el, parser, maxLength - d.str.length);
369
+
let d1 = recurse(el, parser, maxLength - d.str.length);
388
370
d.size += d1.size;
389
371
d.str += d1.str;
390
372
});
391
373
return d;
392
374
}
393
-
/** A string preview of the content (intended for humans). */
394
-
ASN1.prototype.content = function (maxLength) {
395
-
if (this.tag === undefined)
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
+
}
462
+
switch (this.tag.tagNumber) {
463
+
case 0x01: // BOOLEAN
464
+
if (len === 0) return 'invalid length 0';
465
+
return (this.stream.get(content) === 0) ? 'false' : 'true';
466
+
case 0x02: // INTEGER
467
+
if (len === 0) return 'invalid length 0';
468
+
return this.stream.parseInteger(content, content + len);
469
+
case 0x03: { // BIT_STRING
470
+
let d = recurse(this, 'parseBitString', maxLength);
471
+
return '(' + d.size + ' bit)\n' + d.str;
472
+
}
473
+
case 0x04: { // OCTET_STRING
474
+
if (len === 0) return 'invalid length 0';
475
+
let d = recurse(this, 'parseOctetString', maxLength);
476
+
return '(' + d.size + ' byte)\n' + d.str;
477
+
}
478
+
//case 0x05: // NULL
479
+
case 0x06: // OBJECT_IDENTIFIER
480
+
return this.stream.parseOID(content, content + len, maxLength);
481
+
//case 0x07: // ObjectDescriptor
482
+
//case 0x08: // EXTERNAL
483
+
//case 0x09: // REAL
484
+
case 0x0A: // ENUMERATED
485
+
return this.stream.parseInteger(content, content + len);
486
+
//case 0x0B: // EMBEDDED_PDV
487
+
case 0x0D: // RELATIVE-OID
488
+
return this.stream.parseRelativeOID(content, content + len, maxLength);
489
+
case 0x10: // SEQUENCE
490
+
case 0x11: // SET
491
+
if (this.sub !== null)
492
+
return '(' + this.sub.length + ' elem)';
493
+
else
494
+
return '(no elem)';
495
+
case 0x0C: // UTF8String
496
+
return recurse(this, 'parseStringUTF', maxLength).str;
497
+
case 0x14: // TeletexString
498
+
return recurse(this, 'parseStringT61', maxLength).str;
499
+
case 0x12: // NumericString
500
+
case 0x13: // PrintableString
501
+
case 0x15: // VideotexString
502
+
case 0x16: // IA5String
503
+
case 0x1A: // VisibleString
504
+
case 0x1B: // GeneralString
505
+
//case 0x19: // GraphicString
506
+
//case 0x1C: // UniversalString
507
+
return recurse(this, 'parseStringISO', maxLength).str;
508
+
case 0x1E: // BMPString
509
+
return recurse(this, 'parseStringBMP', maxLength).str;
510
+
case 0x17: // UTCTime
511
+
case 0x18: // GeneralizedTime
512
+
return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));
513
+
}
396
514
return null;
397
-
if (maxLength === undefined)
398
-
maxLength = Infinity;
399
-
var content = this.posContent(),
400
-
len = Math.abs(this.length);
401
-
if (!this.tag.isUniversal()) {
402
-
if (this.sub !== null)
403
-
return "(" + this.sub.length + " elem)";
404
-
var d1 = this.stream.parseOctetString(content, content + len, maxLength);
405
-
return "(" + d1.size + " byte)\n" + d1.str;
406
515
}
407
-
switch (this.tag.tagNumber) {
408
-
case 0x01: // BOOLEAN
409
-
return (this.stream.get(content) === 0) ? "false" : "true";
410
-
case 0x02: // INTEGER
411
-
return this.stream.parseInteger(content, content + len);
412
-
case 0x03: // BIT_STRING
413
-
var d = recurse(this, 'parseBitString', maxLength);
414
-
return "(" + d.size + " bit)\n" + d.str;
415
-
case 0x04: // OCTET_STRING
416
-
d = recurse(this, 'parseOctetString', maxLength);
417
-
return "(" + d.size + " byte)\n" + d.str;
418
-
//case 0x05: // NULL
419
-
case 0x06: // OBJECT_IDENTIFIER
420
-
return this.stream.parseOID(content, content + len, maxLength);
421
-
//case 0x07: // ObjectDescriptor
422
-
//case 0x08: // EXTERNAL
423
-
//case 0x09: // REAL
424
-
case 0x0A: // ENUMERATED
425
-
return this.stream.parseInteger(content, content + len);
426
-
//case 0x0B: // EMBEDDED_PDV
427
-
case 0x0D: // RELATIVE-OID
428
-
return this.stream.parseRelativeOID(content, content + len, maxLength);
429
-
case 0x10: // SEQUENCE
430
-
case 0x11: // SET
431
-
if (this.sub !== null)
432
-
return "(" + this.sub.length + " elem)";
433
-
else
434
-
return "(no elem)";
435
-
case 0x0C: // UTF8String
436
-
return recurse(this, 'parseStringUTF', maxLength).str;
437
-
case 0x14: // TeletexString
438
-
return recurse(this, 'parseStringT61', maxLength).str;
439
-
case 0x12: // NumericString
440
-
case 0x13: // PrintableString
441
-
case 0x15: // VideotexString
442
-
case 0x16: // IA5String
443
-
case 0x1A: // VisibleString
444
-
case 0x1B: // GeneralString
445
-
//case 0x19: // GraphicString
446
-
//case 0x1C: // UniversalString
447
-
return recurse(this, 'parseStringISO', maxLength).str;
448
-
case 0x1E: // BMPString
449
-
return recurse(this, 'parseStringBMP', maxLength).str;
450
-
case 0x17: // UTCTime
451
-
case 0x18: // GeneralizedTime
452
-
return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));
516
+
toString() {
517
+
return this.typeName() + '@' + this.stream.pos + '[header:' + this.header + ',length:' + this.length + ',sub:' + ((this.sub === null) ? 'null' : this.sub.length) + ']';
453
518
}
454
-
return null;
455
-
};
456
-
ASN1.prototype.toString = function () {
457
-
return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? 'null' : this.sub.length) + "]";
458
-
};
459
-
ASN1.prototype.toPrettyString = function (indent) {
460
-
if (indent === undefined) indent = '';
461
-
var s = indent + this.typeName() + " @" + this.stream.pos;
462
-
if (this.length >= 0)
463
-
s += "+";
464
-
s += this.length;
465
-
if (this.tag.tagConstructed)
466
-
s += " (constructed)";
467
-
else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null))
468
-
s += " (encapsulates)";
469
-
var content = this.content();
470
-
if (content)
471
-
s += ": " + content.replace(/\n/g, '|');
472
-
s += "\n";
473
-
if (this.sub !== null) {
474
-
indent += ' ';
475
-
for (var i = 0, max = this.sub.length; i < max; ++i)
476
-
s += this.sub[i].toPrettyString(indent);
519
+
toPrettyString(indent) {
520
+
if (indent === undefined) indent = '';
521
+
let s = indent;
522
+
if (this.def) {
523
+
if (this.def.id)
524
+
s += this.def.id + ' ';
525
+
if (this.def.name && this.def.name != this.typeName().replace(/_/g, ' '))
526
+
s+= this.def.name + ' ';
527
+
if (this.def.mismatch)
528
+
s += '[?] ';
529
+
}
530
+
s += this.typeName() + ' @' + this.stream.pos;
531
+
if (this.length >= 0)
532
+
s += '+';
533
+
s += this.length;
534
+
if (this.tag.tagConstructed)
535
+
s += ' (constructed)';
536
+
else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null))
537
+
s += ' (encapsulates)';
538
+
let content = this.content();
539
+
if (content)
540
+
s += ': ' + content.replace(/\n/g, '|');
541
+
s += '\n';
542
+
if (this.sub !== null) {
543
+
indent += ' ';
544
+
for (let i = 0, max = this.sub.length; i < max; ++i)
545
+
s += this.sub[i].toPrettyString(indent);
546
+
}
547
+
return s;
477
548
}
478
-
return s;
479
-
};
480
-
ASN1.prototype.posStart = function () {
481
-
return this.stream.pos;
482
-
};
483
-
ASN1.prototype.posContent = function () {
484
-
return this.stream.pos + this.header;
485
-
};
486
-
ASN1.prototype.posEnd = function () {
487
-
return this.stream.pos + this.header + Math.abs(this.length);
488
-
};
489
-
/** Position of the length. */
490
-
ASN1.prototype.posLen = function() {
491
-
return this.stream.pos + this.tagLen;
492
-
};
493
-
ASN1.prototype.toHexString = function () {
494
-
return this.stream.hexDump(this.posStart(), this.posEnd(), true);
495
-
};
496
-
ASN1.prototype.toB64String = function () {
497
-
return this.stream.b64Dump(this.posStart(), this.posEnd());
498
-
};
499
-
ASN1.decodeLength = function (stream) {
500
-
var buf = stream.get(),
501
-
len = buf & 0x7F;
502
-
if (len == buf) // first bit was 0, short form
503
-
return len;
504
-
if (len === 0) // long form with length 0 is a special case
505
-
return null; // undefined length
506
-
if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways
507
-
throw "Length over 48 bits not supported at position " + (stream.pos - 1);
508
-
buf = 0;
509
-
for (var i = 0; i < len; ++i)
510
-
buf = (buf * 256) + stream.get();
511
-
return buf;
512
-
};
513
-
function ASN1Tag(stream) {
514
-
var buf = stream.get();
515
-
this.tagClass = buf >> 6;
516
-
this.tagConstructed = ((buf & 0x20) !== 0);
517
-
this.tagNumber = buf & 0x1F;
518
-
if (this.tagNumber == 0x1F) { // long tag
519
-
var n = new Int10();
520
-
do {
521
-
buf = stream.get();
522
-
n.mulAdd(128, buf & 0x7F);
523
-
} while (buf & 0x80);
524
-
this.tagNumber = n.simplify();
549
+
posStart() {
550
+
return this.stream.pos;
525
551
}
526
-
}
527
-
ASN1Tag.prototype.isUniversal = function () {
528
-
return this.tagClass === 0x00;
529
-
};
530
-
ASN1Tag.prototype.isEOC = function () {
531
-
return this.tagClass === 0x00 && this.tagNumber === 0x00;
532
-
};
533
-
ASN1.decode = function (stream, offset) {
534
-
if (!(stream instanceof Stream))
535
-
stream = new Stream(stream, offset || 0);
536
-
var streamStart = new Stream(stream),
537
-
tag = new ASN1Tag(stream),
538
-
tagLen = stream.pos - streamStart.pos,
539
-
len = ASN1.decodeLength(stream),
540
-
start = stream.pos,
541
-
header = start - streamStart.pos,
542
-
sub = null,
543
-
getSub = function () {
544
-
sub = [];
545
-
if (len !== null) {
546
-
// definite length
547
-
var end = start + len;
548
-
if (end > stream.enc.length)
549
-
throw 'Container at offset ' + start + ' has a length of ' + len + ', which is past the end of the stream';
550
-
while (stream.pos < end)
551
-
sub[sub.length] = ASN1.decode(stream);
552
-
if (stream.pos != end)
553
-
throw 'Content size is not correct for container at offset ' + start;
554
-
} else {
555
-
// undefined length
556
-
try {
557
-
for (;;) {
558
-
var s = ASN1.decode(stream);
559
-
if (s.tag.isEOC())
560
-
break;
561
-
sub[sub.length] = s;
552
+
posContent() {
553
+
return this.stream.pos + this.header;
554
+
}
555
+
posEnd() {
556
+
return this.stream.pos + this.header + Math.abs(this.length);
557
+
}
558
+
/** Position of the length. */
559
+
posLen() {
560
+
return this.stream.pos + this.tagLen;
561
+
}
562
+
/** Hexadecimal dump of the node.
563
+
* @param type 'raw', 'byte' or 'dump' */
564
+
toHexString(type = 'raw') {
565
+
return this.stream.hexDump(this.posStart(), this.posEnd(), type);
566
+
}
567
+
/** Base64url dump of the node (according to RFC 4648 section 5).
568
+
* @param {string} type 'url' (default, section 5 without padding) or 'std' (section 4 with padding)
569
+
*/
570
+
toB64String(type = 'url') {
571
+
return this.stream.b64Dump(this.posStart(), this.posEnd(), type);
572
+
}
573
+
static decodeLength(stream) {
574
+
let buf = stream.get(),
575
+
len = buf & 0x7F;
576
+
if (len == buf) // first bit was 0, short form
577
+
return len;
578
+
if (len === 0) // long form with length 0 is a special case
579
+
return null; // undefined length
580
+
if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways
581
+
throw new Error('Length over 48 bits not supported at position ' + (stream.pos - 1));
582
+
buf = 0;
583
+
for (let i = 0; i < len; ++i)
584
+
buf = (buf * 256) + stream.get();
585
+
return buf;
586
+
}
587
+
static decode(stream, offset, type = ASN1) {
588
+
if (!(type == ASN1 || type.prototype instanceof ASN1))
589
+
throw new Error('Must pass a class that extends ASN1');
590
+
if (!(stream instanceof Stream))
591
+
stream = new Stream(stream, offset || 0);
592
+
let streamStart = new Stream(stream),
593
+
tag = new ASN1Tag(stream),
594
+
tagLen = stream.pos - streamStart.pos,
595
+
len = ASN1.decodeLength(stream),
596
+
start = stream.pos,
597
+
header = start - streamStart.pos,
598
+
sub = null,
599
+
getSub = function () {
600
+
sub = [];
601
+
if (len !== null) {
602
+
// definite length
603
+
let end = start + len;
604
+
if (end > stream.enc.length)
605
+
throw new Error('Container at offset ' + start + ' has a length of ' + len + ', which is past the end of the stream');
606
+
while (stream.pos < end)
607
+
sub[sub.length] = type.decode(stream);
608
+
if (stream.pos != end)
609
+
throw new Error('Content size is not correct for container at offset ' + start);
610
+
} else {
611
+
// undefined length
612
+
try {
613
+
for (;;) {
614
+
let s = type.decode(stream);
615
+
if (s.tag.isEOC())
616
+
break;
617
+
sub[sub.length] = s;
618
+
}
619
+
len = start - stream.pos; // undefined lengths are represented as negative values
620
+
} catch (e) {
621
+
throw new Error('Exception while decoding undefined length content at offset ' + start + ': ' + e);
622
+
}
623
+
}
624
+
};
625
+
if (tag.tagConstructed) {
626
+
// must have valid content
627
+
getSub();
628
+
} else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {
629
+
// sometimes BitString and OctetString are used to encapsulate ASN.1
630
+
try {
631
+
if (tag.tagNumber == 0x03)
632
+
if (stream.get() != 0)
633
+
throw new Error('BIT STRINGs with unused bits cannot encapsulate.');
634
+
getSub();
635
+
for (let s of sub) {
636
+
if (s.tag.isEOC())
637
+
throw new Error('EOC is not supposed to be actual content.');
638
+
try {
639
+
s.content();
640
+
} catch (e) {
641
+
throw new Error('Unable to parse content: ' + e);
562
642
}
563
-
len = start - stream.pos; // undefined lengths are represented as negative values
564
-
} catch (e) {
565
-
throw 'Exception while decoding undefined length content at offset ' + start + ': ' + e;
566
643
}
644
+
} catch (ignore) {
645
+
// but silently ignore when they don't
646
+
sub = null;
647
+
//DEBUG console.log('Could not decode structure at ' + start + ':', e);
567
648
}
568
-
};
569
-
if (tag.tagConstructed) {
570
-
// must have valid content
571
-
getSub();
572
-
} else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {
573
-
// sometimes BitString and OctetString are used to encapsulate ASN.1
574
-
try {
575
-
if (tag.tagNumber == 0x03)
576
-
if (stream.get() != 0)
577
-
throw "BIT STRINGs with unused bits cannot encapsulate.";
578
-
getSub();
579
-
for (var i = 0; i < sub.length; ++i)
580
-
if (sub[i].tag.isEOC())
581
-
throw 'EOC is not supposed to be actual content.';
582
-
} catch (e) {
583
-
// but silently ignore when they don't
584
-
sub = null;
585
-
//DEBUG console.log('Could not decode structure at ' + start + ':', e);
649
+
}
650
+
if (sub === null) {
651
+
if (len === null)
652
+
throw new Error("We can't skip over an invalid tag with undefined length at offset " + start);
653
+
stream.pos = start + Math.abs(len);
586
654
}
655
+
return new type(streamStart, header, len, tag, tagLen, sub);
587
656
}
588
-
if (sub === null) {
589
-
if (len === null)
590
-
throw "We can't skip over an invalid tag with undefined length at offset " + start;
591
-
stream.pos = start + Math.abs(len);
592
-
}
593
-
return new ASN1(streamStart, header, len, tag, tagLen, sub);
594
-
};
595
657
596
-
return ASN1;
597
-
598
-
});
658
+
}
+79
-82
base64.js
+79
-82
base64.js
···
1
1
// Base64 JavaScript decoder
2
-
// Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it>
2
+
// Copyright (c) 2008 Lapo Luchini <lapo@lapo.it>
3
3
4
4
// Permission to use, copy, modify, and/or distribute this software for any
5
5
// purpose with or without fee is hereby granted, provided that the above
6
6
// copyright notice and this permission notice appear in all copies.
7
-
//
7
+
//
8
8
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
9
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
10
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
···
13
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
15
16
-
(typeof define != 'undefined' ? define : function (factory) { 'use strict';
17
-
if (typeof module == 'object') module.exports = factory();
18
-
else window.base64 = factory();
19
-
})(function () {
20
-
"use strict";
16
+
const
17
+
haveU8 = (typeof Uint8Array == 'function');
18
+
19
+
let decoder; // populated on first usage
21
20
22
-
var Base64 = {},
23
-
decoder, // populated on first usage
24
-
haveU8 = (typeof Uint8Array == 'function');
21
+
export class Base64 {
25
22
26
-
Base64.decode = function (a) {
27
-
var isString = (typeof a == 'string');
28
-
var i;
29
-
if (decoder === undefined) {
30
-
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
31
-
ignore = "= \f\n\r\t\u00A0\u2028\u2029";
32
-
decoder = [];
33
-
for (i = 0; i < 64; ++i)
34
-
decoder[b64.charCodeAt(i)] = i;
35
-
for (i = 0; i < ignore.length; ++i)
36
-
decoder[ignore.charCodeAt(i)] = -1;
37
-
// RFC 3548 URL & file safe encoding
38
-
decoder['-'.charCodeAt(0)] = decoder['+'.charCodeAt(0)];
39
-
decoder['_'.charCodeAt(0)] = decoder['/'.charCodeAt(0)];
40
-
}
41
-
var out = haveU8 ? new Uint8Array(a.length * 3 >> 2) : [];
42
-
var bits = 0, char_count = 0, len = 0;
43
-
for (i = 0; i < a.length; ++i) {
44
-
var c = isString ? a.charCodeAt(i) : a[i];
45
-
if (c == 61) // '='.charCodeAt(0)
23
+
static decode(a) {
24
+
let isString = (typeof a == 'string');
25
+
let i;
26
+
if (decoder === undefined) {
27
+
let b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
28
+
ignore = '= \f\n\r\t\u00A0\u2028\u2029';
29
+
decoder = [];
30
+
for (i = 0; i < 64; ++i)
31
+
decoder[b64.charCodeAt(i)] = i;
32
+
for (i = 0; i < ignore.length; ++i)
33
+
decoder[ignore.charCodeAt(i)] = -1;
34
+
// also support decoding Base64url (RFC 4648 section 5)
35
+
decoder['-'.charCodeAt(0)] = decoder['+'.charCodeAt(0)];
36
+
decoder['_'.charCodeAt(0)] = decoder['/'.charCodeAt(0)];
37
+
}
38
+
let out = haveU8 ? new Uint8Array(a.length * 3 >> 2) : [];
39
+
let bits = 0, char_count = 0, len = 0;
40
+
for (i = 0; i < a.length; ++i) {
41
+
let c = isString ? a.charCodeAt(i) : a[i];
42
+
if (c == 61) // '='.charCodeAt(0)
43
+
break;
44
+
c = decoder[c];
45
+
if (c == -1)
46
+
continue;
47
+
if (c === undefined)
48
+
throw 'Illegal character at offset ' + i;
49
+
bits |= c;
50
+
if (++char_count >= 4) {
51
+
out[len++] = (bits >> 16);
52
+
out[len++] = (bits >> 8) & 0xFF;
53
+
out[len++] = bits & 0xFF;
54
+
bits = 0;
55
+
char_count = 0;
56
+
} else {
57
+
bits <<= 6;
58
+
}
59
+
}
60
+
switch (char_count) {
61
+
case 1:
62
+
throw 'Base64 encoding incomplete: at least 2 bits missing';
63
+
case 2:
64
+
out[len++] = (bits >> 10);
46
65
break;
47
-
c = decoder[c];
48
-
if (c == -1)
49
-
continue;
50
-
if (c === undefined)
51
-
throw 'Illegal character at offset ' + i;
52
-
bits |= c;
53
-
if (++char_count >= 4) {
66
+
case 3:
54
67
out[len++] = (bits >> 16);
55
68
out[len++] = (bits >> 8) & 0xFF;
56
-
out[len++] = bits & 0xFF;
57
-
bits = 0;
58
-
char_count = 0;
59
-
} else {
60
-
bits <<= 6;
69
+
break;
61
70
}
62
-
}
63
-
switch (char_count) {
64
-
case 1:
65
-
throw "Base64 encoding incomplete: at least 2 bits missing";
66
-
case 2:
67
-
out[len++] = (bits >> 10);
68
-
break;
69
-
case 3:
70
-
out[len++] = (bits >> 16);
71
-
out[len++] = (bits >> 8) & 0xFF;
72
-
break;
71
+
if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters
72
+
out = out.subarray(0, len);
73
+
return out;
73
74
}
74
-
if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters
75
-
out = out.subarray(0, len);
76
-
return out;
77
-
};
78
75
79
-
Base64.pretty = function (str) {
80
-
// fix padding
81
-
if (str.length % 4 > 0)
82
-
str = (str + '===').slice(0, str.length + str.length % 4);
83
-
// convert RFC 3548 to standard Base64
84
-
str = str.replace(/-/g, '+').replace(/_/g, '/');
85
-
// 80 column width
86
-
return str.replace(/(.{80})/g, '$1\n');
87
-
};
76
+
static pretty(str) {
77
+
// fix padding
78
+
let pad = 4 - str.length % 4;
79
+
if (pad < 4)
80
+
str += '==='.slice(0, pad);
81
+
// convert Base64url (RFC 4648 section 5) to standard Base64 (RFC 4648 section 4)
82
+
str = str.replace(/-/g, '+').replace(/_/g, '/');
83
+
// 80 column width
84
+
return str.replace(/.{80}/g, '$&\n');
85
+
}
88
86
89
-
Base64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====|^([A-Za-z0-9+/=\s]+)$/;
90
-
Base64.unarmor = function (a) {
91
-
var m = Base64.re.exec(a);
92
-
if (m) {
93
-
if (m[1])
94
-
a = m[1];
95
-
else if (m[2])
96
-
a = m[2];
97
-
else if (m[3])
98
-
a = m[3];
99
-
else
100
-
throw "RegExp out of sync";
87
+
static unarmor(a) {
88
+
let m = Base64.re.exec(a);
89
+
if (m) {
90
+
if (m[1])
91
+
a = m[1];
92
+
else if (m[2])
93
+
a = m[2];
94
+
else if (m[3])
95
+
a = m[3];
96
+
else
97
+
throw 'RegExp out of sync';
98
+
}
99
+
return Base64.decode(a);
101
100
}
102
-
return Base64.decode(a);
103
-
};
104
101
105
-
return Base64;
102
+
}
106
103
107
-
});
104
+
Base64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====|^([A-Za-z0-9+/=\s]+)$/;
+1
-1
check.sh
+1
-1
check.sh
+53
context.js
+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
+
};
+143
defs.js
+143
defs.js
···
1
+
// ASN.1 RFC definitions matcher
2
+
// Copyright (c) 2023 Lapo Luchini <lapo@lapo.it>
3
+
4
+
// Permission to use, copy, modify, and/or distribute this software for any
5
+
// purpose with or without fee is hereby granted, provided that the above
6
+
// copyright notice and this permission notice appear in all copies.
7
+
//
8
+
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
+
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
+
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11
+
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
+
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13
+
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
+
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
+
16
+
import { rfcdef } from './rfcdef.js';
17
+
18
+
function translate(def, tn, stats) {
19
+
if (def?.type == 'tag' && !def.explicit)
20
+
// def.type = def.content[0].type;
21
+
def = def.content[0].type;
22
+
if (def?.definedBy)
23
+
try {
24
+
// hope current OIDs contain the type name (will need to parse from RFC itself)
25
+
def = Defs.searchType(firstUpper(stats.defs[def.definedBy][1]));
26
+
} catch (ignore) { /*ignore*/ }
27
+
while (def?.type == 'defined' || def?.type?.type == 'defined') {
28
+
const name = def?.type?.type ? def.type.name : def.name;
29
+
def = Object.assign({}, def);
30
+
def.type = Defs.searchType(name).type;
31
+
}
32
+
if (def?.name == 'CHOICE' || def?.type?.name == 'CHOICE') {
33
+
for (let c of def.content ?? def.type.content) {
34
+
if (tn != c.type.name && tn != c.name)
35
+
c = translate(c);
36
+
if (tn == c.type.name || tn == c.name) {
37
+
def = Object.assign({}, def);
38
+
if (c.id) // show the CHOICE id, but add it to existing one if present
39
+
def.id = def.id ? def.id + ' ' + c.id : c.id;
40
+
def.type = c.type.name ? c.type : c;
41
+
break;
42
+
}
43
+
}
44
+
}
45
+
const id = def?.id;
46
+
if (id)
47
+
def = Object.assign({}, def, { id });
48
+
return def ?? { type: {} };
49
+
}
50
+
51
+
function firstUpper(s) {
52
+
return s[0].toUpperCase() + s.slice(1);
53
+
}
54
+
55
+
export class Defs {
56
+
57
+
static moduleAndType(mod, name) {
58
+
return Object.assign({ module: { oid: mod.oid, name: mod.name, source: mod.source } }, mod.types[name]);
59
+
}
60
+
61
+
static searchType(name) {
62
+
for (const mod of Object.values(rfcdef))
63
+
if (name in mod.types) {
64
+
// console.log(name + ' found in ' + r.name);
65
+
// return r.types[name];
66
+
return Defs.moduleAndType(mod, name);
67
+
}
68
+
throw new Error('Type not found: ' + name);
69
+
}
70
+
71
+
static match(value, def, stats = { total: 0, recognized: 0, defs: {} }) {
72
+
value.def = {};
73
+
let tn = value.typeName().replace(/_/g, ' ');
74
+
def = translate(def, tn, stats);
75
+
++stats.total;
76
+
if (def?.type) {
77
+
// if (def.id || def.name) ++stats.recognized;
78
+
if (tn == def.type.name || tn == def.name || def.name == 'ANY')
79
+
++stats.recognized;
80
+
else if (def.name)
81
+
def = Object.assign({ mismatch: 1 }, def);
82
+
value.def = def;
83
+
}
84
+
if (value.sub !== null) {
85
+
if (def?.type?.type)
86
+
def = def.type;
87
+
let j = def?.content ? 0 : -1;
88
+
for (const subval of value.sub) {
89
+
let type;
90
+
if (j >= 0) {
91
+
if (def.typeOf)
92
+
type = def.content[0];
93
+
else {
94
+
let tn = subval.typeName().replace(/_/g, ' ');
95
+
for (;;) {
96
+
type = def.content[j++];
97
+
if (!type || typeof type != 'object') break;
98
+
if (type?.type?.type)
99
+
// type = type.type;
100
+
type = Object.assign({}, type.type, {id: type.id});
101
+
if (type.type == 'defined') {
102
+
let t2 = translate(type, tn);
103
+
if (t2.type.name == tn) break; // exact match
104
+
if (t2.type.name == 'ANY') break; // good enough
105
+
}
106
+
if (type.name == tn) break; // exact match
107
+
if (type.name == 'ANY') break; // good enough
108
+
if (!('optional' in type || 'default' in type)) break;
109
+
}
110
+
if (type?.type == 'builtin' || type?.type == 'defined') {
111
+
let v = subval.content();
112
+
if (typeof v == 'string')
113
+
v = v.split(/\n/);
114
+
stats.defs[type.id] = v;
115
+
} else if (type?.definedBy && stats.defs?.[type.definedBy]?.[1]) { // hope current OIDs contain the type name (will need to parse from RFC itself)
116
+
try {
117
+
type = Defs.searchType(firstUpper(stats.defs[type.definedBy][1]));
118
+
} catch (ignore) { /*ignore*/ }
119
+
}
120
+
}
121
+
}
122
+
Defs.match(subval, type, stats);
123
+
}
124
+
}
125
+
return stats;
126
+
}
127
+
128
+
}
129
+
130
+
Defs.RFC = rfcdef;
131
+
132
+
Defs.commonTypes = [
133
+
[ 'X.509 certificate', '1.3.6.1.5.5.7.0.18', 'Certificate' ],
134
+
[ 'X.509 public key info', '1.3.6.1.5.5.7.0.18', 'SubjectPublicKeyInfo' ],
135
+
[ 'X.509 certificate revocation list', '1.3.6.1.5.5.7.0.18', 'CertificateList' ],
136
+
[ 'CMS / PKCS#7 envelope', '1.2.840.113549.1.9.16.0.14', 'ContentInfo' ],
137
+
[ 'PKCS#1 RSA private key', '1.2.840.113549.1.1.0.1', 'RSAPrivateKey' ],
138
+
[ 'PKCS#8 encrypted private key', '1.2.840.113549.1.8.1.1', 'EncryptedPrivateKeyInfo' ],
139
+
[ 'PKCS#8 private key', '1.2.840.113549.1.8.1.1', 'PrivateKeyInfo' ],
140
+
[ 'PKCS#10 certification request', '1.2.840.113549.1.10.1.1', 'CertificationRequest' ],
141
+
[ 'CMP PKI Message', '1.3.6.1.5.5.7.0.16', 'PKIMessage' ],
142
+
[ 'LDAP Message', '1.3.6.1.1.18', 'LDAPMessage' ],
143
+
].map(arr => ({ description: arr[0], ...Defs.moduleAndType(rfcdef[arr[1]], arr[2]) }));
+204
-176
dom.js
+204
-176
dom.js
···
1
1
// ASN.1 JavaScript decoder
2
-
// Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it>
2
+
// Copyright (c) 2008 Lapo Luchini <lapo@lapo.it>
3
3
4
4
// Permission to use, copy, modify, and/or distribute this software for any
5
5
// purpose with or without fee is hereby granted, provided that the above
6
6
// copyright notice and this permission notice appear in all copies.
7
-
//
7
+
//
8
8
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
9
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
10
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
···
13
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
15
16
-
(typeof define != 'undefined' ? define : function (factory) { 'use strict';
17
-
if (typeof module == 'object') factory(function (name) { return require(name); });
18
-
else factory(function (name) { return window[name.substring(2)]; });
19
-
})(function (require) {
20
-
"use strict";
16
+
import { ASN1 } from './asn1.js';
17
+
import { oids } from './oids.js';
18
+
import { bindContextMenu } from './context.js';
21
19
22
-
var ASN1 = require('./asn1'),
23
-
oids = require('./oids'),
20
+
const
24
21
lineLength = 80,
25
22
contentLength = 8 * lineLength,
26
23
DOM = {
27
-
ellipsis: "\u2026",
28
-
tag: function (tagName, className) {
29
-
var t = document.createElement(tagName);
30
-
t.className = className;
24
+
ellipsis: '\u2026',
25
+
tag: function (tagName, className, text) {
26
+
let t = document.createElement(tagName);
27
+
if (className) t.className = className;
28
+
if (text) t.innerText = text;
31
29
return t;
32
30
},
33
31
text: function (str) {
34
32
return document.createTextNode(str);
35
33
},
36
34
space: function () {
37
-
var t = document.createElement('span');
38
-
t.className = 'spaces';
39
-
t.innerHTML = ' ';
40
-
return t;
35
+
return DOM.tag('span', 'spaces', ' ');
41
36
},
42
37
breakLines: function (str, length) {
43
-
var lines = str.split(/\r?\n/),
38
+
let lines = str.split(/\r?\n/),
44
39
o = '';
45
-
for (var i = 0; i < lines.length; ++i) {
46
-
var line = lines[i];
47
-
if (i > 0) o += "\n";
40
+
for (let i = 0; i < lines.length; ++i) {
41
+
let line = lines[i];
42
+
if (i > 0) o += '\n';
48
43
while (line.length > length) {
49
44
o += line.substring(0, length);
50
-
o += "\n";
45
+
o += '\n';
51
46
line = line.substring(length);
52
47
}
53
48
o += line;
54
49
}
55
50
return o;
56
-
}
51
+
},
57
52
};
58
53
59
-
ASN1.prototype.toDOM = function (spaces) {
60
-
spaces = spaces || '';
61
-
var isOID = (typeof oids === 'object') && (this.tag.isUniversal() && (this.tag.tagNumber == 0x06) || (this.tag.tagNumber == 0x0D));
62
-
var node = DOM.tag("div", "node");
63
-
node.asn1 = this;
64
-
var head = DOM.tag("div", "head");
65
-
head.innerHTML = "<span class='spaces'>" + spaces + "</span>" + this.typeName().replace(/_/g, " ");
66
-
var content = this.content(contentLength);
67
-
if (content !== null) {
68
-
var preview = DOM.tag("span", "preview"),
69
-
shortContent;
70
-
if (isOID)
71
-
content = content.split('\n', 1)[0];
72
-
shortContent = (content.length > lineLength) ? content.substring(0, lineLength) + DOM.ellipsis : content;
73
-
preview.appendChild(DOM.space());
74
-
preview.appendChild(DOM.text(shortContent));
75
-
if (isOID) {
76
-
var oid = oids[content];
77
-
if (oid) {
78
-
if (oid.d) {
79
-
preview.appendChild(DOM.space());
80
-
var oidd = DOM.tag("span", "oid description");
81
-
oidd.appendChild(DOM.text(oid.d));
82
-
preview.appendChild(oidd);
83
-
}
84
-
if (oid.c) {
85
-
preview.appendChild(DOM.space());
86
-
var oidc = DOM.tag("span", "oid comment");
87
-
oidc.appendChild(DOM.text("(" + oid.c + ")"));
88
-
preview.appendChild(oidc);
89
-
}
54
+
export class ASN1DOM extends ASN1 {
55
+
56
+
toDOM(spaces) {
57
+
spaces = spaces || '';
58
+
let isOID = (typeof oids === 'object') && (this.tag.isUniversal() && (this.tag.tagNumber == 0x06) || (this.tag.tagNumber == 0x0D));
59
+
let node = DOM.tag('li');
60
+
node.asn1 = this;
61
+
let head = DOM.tag('span', 'head');
62
+
const typeName = this.typeName().replace(/_/g, ' ');
63
+
if (this.def) {
64
+
if (this.def.id) {
65
+
head.appendChild(DOM.tag('span', 'name id', this.def.id));
66
+
head.appendChild(DOM.space());
67
+
}
68
+
if (this.def.name && this.def.name != typeName) {
69
+
head.appendChild(DOM.tag('span', 'name type', this.def.name));
70
+
head.appendChild(DOM.space());
71
+
}
72
+
if (this.def.mismatch) {
73
+
head.appendChild(DOM.tag('span', 'name type', '[?]'));
74
+
head.appendChild(DOM.space());
90
75
}
91
76
}
92
-
head.appendChild(preview);
93
-
content = DOM.breakLines(content, lineLength);
94
-
content = content.replace(/</g, "<");
95
-
content = content.replace(/\n/g, "<br>");
96
-
}
97
-
node.appendChild(head);
98
-
this.node = node;
99
-
this.head = head;
100
-
var value = DOM.tag("div", "value");
101
-
var s = "Offset: " + this.stream.pos + "<br>";
102
-
s += "Length: " + this.header + "+";
103
-
if (this.length >= 0)
104
-
s += this.length;
105
-
else
106
-
s += (-this.length) + " (undefined)";
107
-
if (this.tag.tagConstructed)
108
-
s += "<br>(constructed)";
109
-
else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null))
110
-
s += "<br>(encapsulates)";
111
-
//TODO if (this.tag.isUniversal() && this.tag.tagNumber == 0x03) s += "Unused bits: "
112
-
if (content !== null) {
113
-
s += "<br>Value:<br><b>" + content + "</b>";
114
-
if (isOID && oid) {
115
-
if (oid.d) s += "<br>" + oid.d;
116
-
if (oid.c) s += "<br>" + oid.c;
117
-
if (oid.w) s += "<br>(warning!)";
77
+
head.appendChild(DOM.text(typeName));
78
+
let content;
79
+
try {
80
+
content = this.content(contentLength);
81
+
} catch (e) {
82
+
content = 'Cannot decode: ' + e;
118
83
}
119
-
}
120
-
value.innerHTML = s;
121
-
node.appendChild(value);
122
-
var sub = DOM.tag("div", "sub");
123
-
if (this.sub !== null) {
124
-
spaces += '\xA0 ';
125
-
for (var i = 0, max = this.sub.length; i < max; ++i)
126
-
sub.appendChild(this.sub[i].toDOM(spaces));
127
-
}
128
-
node.appendChild(sub);
129
-
head.onclick = function () {
130
-
node.className = (node.className == "node collapsed") ? "node" : "node collapsed";
131
-
};
132
-
return node;
133
-
};
134
-
ASN1.prototype.fakeHover = function (current) {
135
-
this.node.className += " hover";
136
-
if (current)
137
-
this.head.className += " hover";
138
-
};
139
-
ASN1.prototype.fakeOut = function (current) {
140
-
var re = / ?hover/;
141
-
this.node.className = this.node.className.replace(re, "");
142
-
if (current)
143
-
this.head.className = this.head.className.replace(re, "");
144
-
};
145
-
ASN1.prototype.toHexDOM_sub = function (node, className, stream, start, end) {
146
-
if (start >= end)
147
-
return;
148
-
var sub = DOM.tag("span", className);
149
-
sub.appendChild(DOM.text(
150
-
stream.hexDump(start, end)));
151
-
node.appendChild(sub);
152
-
};
153
-
ASN1.prototype.toHexDOM = function (root) {
154
-
var node = DOM.tag("span", "hex");
155
-
if (root === undefined) root = node;
156
-
this.head.hexNode = node;
157
-
this.head.onmouseover = function () { this.hexNode.className = "hexCurrent"; };
158
-
this.head.onmouseout = function () { this.hexNode.className = "hex"; };
159
-
node.asn1 = this;
160
-
node.onmouseover = function () {
161
-
var current = !root.selected;
162
-
if (current) {
163
-
root.selected = this.asn1;
164
-
this.className = "hexCurrent";
84
+
let oid;
85
+
if (content !== null) {
86
+
let preview = DOM.tag('span', 'preview'),
87
+
shortContent;
88
+
if (isOID)
89
+
content = content.split('\n', 1)[0];
90
+
shortContent = (content.length > lineLength) ? content.substring(0, lineLength) + DOM.ellipsis : content;
91
+
preview.appendChild(DOM.space());
92
+
preview.appendChild(DOM.text(shortContent));
93
+
if (isOID) {
94
+
oid = oids[content];
95
+
if (oid) {
96
+
if (oid.d) {
97
+
preview.appendChild(DOM.space());
98
+
let oidd = DOM.tag('span', 'oid description', oid.d);
99
+
preview.appendChild(oidd);
100
+
}
101
+
if (oid.c) {
102
+
preview.appendChild(DOM.space());
103
+
let oidc = DOM.tag('span', 'oid comment', '(' + oid.c + ')');
104
+
preview.appendChild(oidc);
105
+
}
106
+
}
107
+
}
108
+
head.appendChild(preview);
109
+
content = DOM.breakLines(content, lineLength);
110
+
content = content.replace(/</g, '<');
111
+
content = content.replace(/\n/g, '<br>');
165
112
}
166
-
this.asn1.fakeHover(current);
167
-
};
168
-
node.onmouseout = function () {
169
-
var current = (root.selected == this.asn1);
170
-
this.asn1.fakeOut(current);
171
-
if (current) {
172
-
root.selected = null;
173
-
this.className = "hex";
113
+
// add the li and details section for this node
114
+
let contentNode;
115
+
let childNode;
116
+
if (this.sub !== null) {
117
+
let details = DOM.tag('details');
118
+
details.setAttribute('open', '');
119
+
node.appendChild(details);
120
+
let summary = DOM.tag('summary', 'node');
121
+
details.appendChild(summary);
122
+
summary.appendChild(head);
123
+
contentNode = summary;
124
+
childNode = details;
125
+
} else {
126
+
contentNode = node;
127
+
contentNode.classList.add('node');
128
+
contentNode.appendChild(head);
129
+
}
130
+
this.node = contentNode;
131
+
this.head = head;
132
+
let value = DOM.tag('div', 'value');
133
+
let s = 'Offset: ' + this.stream.pos + '<br>';
134
+
s += 'Length: ' + this.header + '+';
135
+
if (this.length >= 0)
136
+
s += this.length;
137
+
else
138
+
s += (-this.length) + ' (undefined)';
139
+
if (this.tag.tagConstructed)
140
+
s += '<br>(constructed)';
141
+
else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null))
142
+
s += '<br>(encapsulates)';
143
+
//TODO if (this.tag.isUniversal() && this.tag.tagNumber == 0x03) s += "Unused bits: "
144
+
if (content !== null) {
145
+
s += '<br>Value:<br><b>' + content + '</b>';
146
+
if (isOID && oid) {
147
+
if (oid.d) s += '<br>' + oid.d;
148
+
if (oid.c) s += '<br>' + oid.c;
149
+
if (oid.w) s += '<br>(warning!)';
150
+
}
174
151
}
175
-
};
176
-
if (root == node) {
177
-
var lineStart = this.posStart() & 0xF;
178
-
if (lineStart != 0) {
179
-
var skip = DOM.tag("span", "skip");
180
-
var skipStr = '';
181
-
for (var j = lineStart; j > 0; --j)
182
-
skipStr += ' ';
183
-
if (lineStart >= 8)
184
-
skipStr += ' ';
185
-
skip.innerText = skipStr;
186
-
node.appendChild(skip);
152
+
value.innerHTML = s;
153
+
contentNode.appendChild(value);
154
+
if (this.sub !== null) {
155
+
let sub = DOM.tag('ul');
156
+
childNode.appendChild(sub);
157
+
spaces += '\xA0 ';
158
+
for (let i = 0, max = this.sub.length; i < max; ++i)
159
+
sub.appendChild(this.sub[i].toDOM(spaces));
187
160
}
161
+
bindContextMenu(node);
162
+
return node;
188
163
}
189
-
this.toHexDOM_sub(node, "tag", this.stream, this.posStart(), this.posLen());
190
-
this.toHexDOM_sub(node, (this.length >= 0) ? "dlen" : "ulen", this.stream, this.posLen(), this.posContent());
191
-
if (this.sub === null) {
192
-
var start = this.posContent();
193
-
var end = this.posEnd();
194
-
if (end - start < 10 * 16)
195
-
node.appendChild(DOM.text(
196
-
this.stream.hexDump(start, end)));
197
-
else {
198
-
var end1 = start + 5 * 16 - (start & 0xF);
199
-
var start2 = end - 16 - (end & 0xF);
200
-
node.appendChild(DOM.text(
201
-
this.stream.hexDump(start, end1)));
202
-
var sub = DOM.tag("span", "skip");
203
-
sub.appendChild(DOM.text("\u2026 skipping " + (start2 - end1) + " bytes \u2026\n"));
204
-
node.appendChild(sub);
205
-
node.appendChild(DOM.text(
206
-
this.stream.hexDump(start2, end)));
164
+
fakeHover(current) {
165
+
this.node.classList.add('hover');
166
+
if (current)
167
+
this.head.classList.add('hover');
168
+
}
169
+
fakeOut(current) {
170
+
this.node.classList.remove('hover');
171
+
if (current)
172
+
this.head.classList.remove('hover');
173
+
}
174
+
toHexDOM_sub(node, className, stream, start, end) {
175
+
if (start >= end)
176
+
return;
177
+
let sub = DOM.tag('span', className, stream.hexDump(start, end));
178
+
node.appendChild(sub);
179
+
}
180
+
toHexDOM(root, trim=true) {
181
+
let node = DOM.tag('span', 'hex');
182
+
if (root === undefined) root = node;
183
+
this.head.hexNode = node;
184
+
this.head.onmouseover = function () { this.hexNode.className = 'hexCurrent'; };
185
+
this.head.onmouseout = function () { this.hexNode.className = 'hex'; };
186
+
node.asn1 = this;
187
+
node.onmouseover = function (event) {
188
+
let current = !root.selected;
189
+
if (current) {
190
+
root.selected = this.asn1;
191
+
this.className = 'hexCurrent';
192
+
}
193
+
this.asn1.fakeHover(current);
194
+
event.stopPropagation();
195
+
};
196
+
node.onmouseout = function () {
197
+
let current = (root.selected == this.asn1);
198
+
this.asn1.fakeOut(current);
199
+
if (current) {
200
+
root.selected = null;
201
+
this.className = 'hex';
202
+
}
203
+
};
204
+
bindContextMenu(node);
205
+
if (root == node) {
206
+
let lineStart = this.posStart() & 0xF;
207
+
if (lineStart != 0) {
208
+
let skip = DOM.tag('span', 'skip');
209
+
let skipStr = '';
210
+
for (let j = lineStart; j > 0; --j)
211
+
skipStr += ' ';
212
+
if (lineStart >= 8)
213
+
skipStr += ' ';
214
+
skip.innerText = skipStr;
215
+
node.appendChild(skip);
216
+
}
207
217
}
208
-
} else if (this.sub.length > 0) {
209
-
var first = this.sub[0];
210
-
var last = this.sub[this.sub.length - 1];
211
-
this.toHexDOM_sub(node, "intro", this.stream, this.posContent(), first.posStart());
212
-
for (var i = 0, max = this.sub.length; i < max; ++i)
213
-
node.appendChild(this.sub[i].toHexDOM(root));
214
-
this.toHexDOM_sub(node, "outro", this.stream, last.posEnd(), this.posEnd());
215
-
} else
216
-
this.toHexDOM_sub(node, "outro", this.stream, this.posContent(), this.posEnd());
217
-
return node;
218
-
};
218
+
this.toHexDOM_sub(node, 'tag', this.stream, this.posStart(), this.posLen());
219
+
this.toHexDOM_sub(node, (this.length >= 0) ? 'dlen' : 'ulen', this.stream, this.posLen(), this.posContent());
220
+
if (this.sub === null) {
221
+
let start = this.posContent();
222
+
let end = this.posEnd();
223
+
if (!trim || end - start < 10 * 16)
224
+
node.appendChild(DOM.text(
225
+
this.stream.hexDump(start, end)));
226
+
else {
227
+
let end1 = start + 5 * 16 - (start & 0xF);
228
+
let start2 = end - 16 - (end & 0xF);
229
+
node.appendChild(DOM.text(this.stream.hexDump(start, end1)));
230
+
node.appendChild(DOM.tag('span', 'skip', '\u2026 skipping ' + (start2 - end1) + ' bytes \u2026\n'));
231
+
node.appendChild(DOM.text(this.stream.hexDump(start2, end)));
232
+
}
233
+
} else if (this.sub.length > 0) {
234
+
let first = this.sub[0];
235
+
let last = this.sub[this.sub.length - 1];
236
+
this.toHexDOM_sub(node, 'intro', this.stream, this.posContent(), first.posStart());
237
+
for (let i = 0, max = this.sub.length; i < max; ++i)
238
+
node.appendChild(this.sub[i].toHexDOM(root, trim));
239
+
this.toHexDOM_sub(node, 'outro', this.stream, last.posEnd(), this.posEnd());
240
+
} else
241
+
this.toHexDOM_sub(node, 'outro', this.stream, this.posContent(), this.posEnd());
242
+
return node;
243
+
}
244
+
static decode(stream, offset) {
245
+
return ASN1.decode(stream, offset, ASN1DOM);
246
+
}
219
247
220
-
});
248
+
}
+54
-91
dumpASN1.js
+54
-91
dumpASN1.js
···
1
1
#!/usr/bin/env node
2
-
'use strict';
3
2
4
-
const
5
-
fs = require('fs'),
6
-
Base64 = require('./base64.js'),
7
-
ASN1 = require('./asn1.js'),
8
-
rfc = require('./rfcasn1.json'),
9
-
colYellow = "\x1b[33m",
10
-
colBlue = "\x1b[34m",
11
-
colReset = "\x1b[0m";
3
+
// usage:
4
+
// ./dumpASN1.js filename
5
+
// ./dumpASN1.js data:base64,MDMCAQFjLgQACgEACgEAAgEAAgEAAQEAoA+jDQQFTnRWZXIEBAEAAAAwCgQITmV0bG9nb24===
12
6
13
-
function searchType(name) {
14
-
for (const r of Object.values(rfc))
15
-
if (name in r.types) {
16
-
// console.log(name + ' found in ' + r.name);
17
-
return r.types[name];
18
-
}
19
-
throw 'Type not found: ' + name;
20
-
}
7
+
import * as fs from 'node:fs';
8
+
import { Base64 } from './base64.js';
9
+
import { ASN1 } from './asn1.js';
10
+
import { Defs } from './defs.js';
21
11
22
-
function translate(def, tn) {
23
-
const id = def?.id;
24
-
if (def?.type == 'tag' && !def.explicit)
25
-
// def.type = def.content[0].type;
26
-
def = def.content[0].type;
27
-
while (def?.type == 'defined' || def?.type?.type == 'defined') {
28
-
const name = def?.type?.type ? def.type.name : def.name;
29
-
def = Object.assign({}, def);
30
-
def.type = searchType(name).type;
31
-
}
32
-
if (def?.type?.name == 'CHOICE') {
33
-
for (let c of def.type.content) {
34
-
c = translate(c);
35
-
if (tn == c.type.name || tn == c.name) {
36
-
def = Object.assign({}, def);
37
-
def.type = c.type.name ? c.type : c;
38
-
break;
39
-
}
40
-
}
41
-
}
42
-
if (id)
43
-
def = Object.assign({}, def, { id });
44
-
return def ?? { type: {} };
45
-
}
12
+
const
13
+
colYellow = '\x1b[33m',
14
+
colBlue = '\x1b[34m',
15
+
colReset = '\x1b[0m',
16
+
reDataURI = /^data:(?:[a-z-]+[/][a-z.+-]+;)?base64,([A-Za-z0-9+/=\s]+)$/;
46
17
47
-
function firstUpper(s) {
48
-
return s[0].toUpperCase() + s.slice(1);
49
-
}
50
-
51
-
function print(value, def, stats, indent) {
18
+
function print(value, indent) {
52
19
if (indent === undefined) indent = '';
53
-
stats ??= {};
54
-
stats.total ??= 0;
55
-
stats.recognized ??= 0;
56
-
stats.defs ??= {};
57
-
let tn = value.typeName();
58
-
def = translate(def, tn);
59
-
tn = tn.replaceAll('_', ' ');
60
-
if (stats) ++stats.total;
20
+
const def = value.def;
61
21
let name = '';
62
22
if (def?.type) {
63
23
if (def.id) name += colBlue + def.id + colReset;
64
24
if (typeof def.type == 'object' && def.name) name = (name ? name + ' ' : '') + def.name;
65
-
if (stats && name != '') ++stats.recognized;
25
+
if (def.mismatch) name = (name ? name + ' ' : '') + '[?]';
66
26
if (name) name += ' ';
67
27
}
68
-
let s = indent + name + colYellow + value.typeName() + colReset + " @" + value.stream.pos;
28
+
let s = indent + name + colYellow + value.typeName() + colReset + ' @' + value.stream.pos;
69
29
if (value.length >= 0)
70
-
s += "+";
30
+
s += '+';
71
31
s += value.length;
72
32
if (value.tag.tagConstructed)
73
-
s += " (constructed)";
33
+
s += ' (constructed)';
74
34
else if ((value.tag.isUniversal() && ((value.tag.tagNumber == 0x03) || (value.tag.tagNumber == 0x04))) && (value.sub !== null))
75
-
s += " (encapsulates)";
35
+
s += ' (encapsulates)';
76
36
let content = value.content();
77
37
if (content)
78
-
s += ": " + content.replace(/\n/g, '|');
79
-
s += "\n";
38
+
s += ': ' + content.replace(/\n/g, '|');
39
+
s += '\n';
80
40
if (value.sub !== null) {
81
41
indent += ' ';
82
-
if (def?.type?.type)
83
-
def = def.type;
84
-
let j = def?.content ? 0 : -1;
85
-
for (const subval of value.sub) {
86
-
let type;
87
-
if (j >= 0) {
88
-
if (def.typeOf)
89
-
type = def.content[0];
90
-
else {
91
-
let tn = subval.typeName(); //.replaceAll('_', ' ');
92
-
do {
93
-
type = def.content[j++];
94
-
// type = translate(type, tn);
95
-
if (type?.type?.type)
96
-
type = type.type;
97
-
} while (type && ('optional' in type || 'default' in type) && type.name != 'ANY' && type.name != tn);
98
-
if (type?.type == 'defined')
99
-
stats.defs[type.id] = subval.content().split(/\n/);
100
-
else if (type?.definedBy && stats.defs?.[type.definedBy]?.[1]) // hope current OIDs contain the type name (will need to parse from RFC itself)
101
-
type = searchType(firstUpper(stats.defs[type.definedBy][1]));
102
-
}
103
-
}
104
-
s += print(subval, type, stats, indent);
105
-
}
42
+
for (const subval of value.sub)
43
+
s += print(subval, indent);
106
44
}
107
45
return s;
108
46
}
109
47
110
-
let content = fs.readFileSync(process.argv[3]);
48
+
const filename = process.argv[2];
49
+
const match = reDataURI.exec(filename);
50
+
let content = match
51
+
? Buffer.from(match[1])
52
+
: fs.readFileSync(filename);
111
53
try { // try PEM first
112
54
content = Base64.unarmor(content);
113
-
} catch (e) { // try DER/BER then
55
+
} catch (ignore) { // try DER/BER then
114
56
}
115
57
let result = ASN1.decode(content);
116
58
content = null;
117
-
let stats = {};
118
-
console.log(print(result, searchType(process.argv[2]), stats));
119
-
console.log('Stats:', (stats.recognized * 100 / stats.total).toFixed(2) + '%');
120
-
// console.log('Defs:', stats.defs);
59
+
const t0 = performance.now();
60
+
if (process.argv.length == 5) {
61
+
Defs.match(result, Defs.moduleAndType(Defs.RFC[process.argv[3]], process.argv[4]));
62
+
} else {
63
+
const types = Defs.commonTypes
64
+
.map(type => {
65
+
const stats = Defs.match(result, type);
66
+
return { type, match: stats.recognized / stats.total };
67
+
})
68
+
.sort((a, b) => b.match - a.match);
69
+
const t1 = performance.now();
70
+
console.log('Parsed in ' + (t1 - t0).toFixed(2) + ' ms; possible types:');
71
+
for (const t of types)
72
+
console.log((t.match * 100).toFixed(2).padStart(6) + '% ' + t.type.description);
73
+
Defs.match(result, types[0].type);
74
+
// const stats = Defs.match(result, types[0].type);
75
+
// console.log('Stats:', stats);
76
+
console.log('Parsed as:', result.def);
77
+
// const type = searchType(process.argv[2]);
78
+
// const stats = applyDef(result, type);
79
+
}
80
+
console.log(print(result));
81
+
// console.log('Stats:', (stats.recognized * 100 / stats.total).toFixed(2) + '%');
82
+
// // print(result, searchType(process.argv[2]), stats);
83
+
// // console.log('Defs:', stats.defs);
+69
eslint.config.js
+69
eslint.config.js
···
1
+
import globals from 'globals';
2
+
import js from '@eslint/js';
3
+
4
+
export default [
5
+
js.configs.recommended,
6
+
{
7
+
languageOptions: {
8
+
globals: {
9
+
...globals.browser,
10
+
...globals.node,
11
+
Uint8Array: 'readonly',
12
+
},
13
+
ecmaVersion: 2015,
14
+
},
15
+
rules: {
16
+
indent: ['error', 4],
17
+
'no-trailing-spaces': ['error'],
18
+
'linebreak-style': ['error', 'unix'],
19
+
'eol-last': ['error', 'always'],
20
+
semi: ['warn', 'always'],
21
+
quotes: [ 'error', 'single', {
22
+
avoidEscape: true,
23
+
}],
24
+
'no-var': ['warn'],
25
+
'comma-dangle': ['error', 'always-multiline'],
26
+
'no-unused-vars': ['error', {
27
+
caughtErrorsIgnorePattern: 'ignore',
28
+
}],
29
+
},
30
+
},
31
+
{
32
+
files: ['defs.js'],
33
+
languageOptions: {
34
+
ecmaVersion: 2020, // by use of optional chaining operator (?.) and null coalesching operator (??)
35
+
},
36
+
},
37
+
{
38
+
files: ['oids.js'],
39
+
rules: {
40
+
indent: 'off',
41
+
quotes: ['warn', 'double'],
42
+
},
43
+
},
44
+
{
45
+
files: ['tags.js', 'rfcdef.js'],
46
+
rules: {
47
+
indent: [
48
+
'error',
49
+
2,
50
+
{
51
+
ignoredNodes: [
52
+
"Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement > ExpressionStatement[directive='use strict']:first-child",
53
+
],
54
+
},
55
+
],
56
+
'comma-dangle': 'off',
57
+
quotes: ['warn', 'double'],
58
+
},
59
+
},
60
+
{
61
+
files: ['test.js', 'parseRFC.js', 'dumpASN1.js', 'testDefs.js', 'eslint.config.js'],
62
+
languageOptions: {
63
+
ecmaVersion: 'latest',
64
+
},
65
+
rules: {
66
+
strict: ['error', 'global'],
67
+
},
68
+
},
69
+
];
+21
examples/cmpv2.b64
+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
+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
+12
examples/crl-rfc5280.b64
···
1
+
CRL example from RFC5280 as found here:
2
+
https://csrc.nist.gov/projects/pki-testing/sample-certificates-and-crls
3
+
4
+
begin-base64 644 crl-rfc5280.der
5
+
MIIBYDCBygIBATANBgkqhkiG9w0BAQUFADBDMRMwEQYKCZImiZPyLGQBGRYDY29tMRcwFQYKCZIm
6
+
iZPyLGQBGRYHZXhhbXBsZTETMBEGA1UEAxMKRXhhbXBsZSBDQRcNMDUwMjA1MTIwMDAwWhcNMDUw
7
+
MjA2MTIwMDAwWjAiMCACARIXDTA0MTExOTE1NTcwM1owDDAKBgNVHRUEAwoBAaAvMC0wHwYDVR0j
8
+
BBgwFoAUCGivhTPIOUp6+IKTjnBqSiCELDIwCgYDVR0UBAMCAQwwDQYJKoZIhvcNAQEFBQADgYEA
9
+
ItwYffcIzsx10NBqm60Q9HYjtIFutW2+DvsVFGzIF20f7pAXom9g5L2qjFXejoRvkvifEBInr0rU
10
+
L4XiNkR9qqNMJTgV/wD9Pn7uPSYS69jnK2LiK8NGgO94gtEVxtCccmrLznrtZ5mLbnCBfUNCdMGm
11
+
r8FVF6IzTNYGmCuk/C4=
12
+
====
+45
examples/crl-rfc5280.b64.dump
+45
examples/crl-rfc5280.b64.dump
···
1
+
CertificateList SEQUENCE @0+352 (constructed): (3 elem)
2
+
tbsCertList TBSCertList SEQUENCE @4+202 (constructed): (7 elem)
3
+
version Version INTEGER @7+1: 1
4
+
signature AlgorithmIdentifier SEQUENCE @10+13 (constructed): (2 elem)
5
+
algorithm OBJECT_IDENTIFIER @12+9: 1.2.840.113549.1.1.5|sha1WithRSAEncryption|PKCS #1
6
+
parameters ANY NULL @23+0
7
+
issuer rdnSequence Name SEQUENCE @25+67 (constructed): (3 elem)
8
+
RelativeDistinguishedName SET @27+19 (constructed): (1 elem)
9
+
AttributeTypeAndValue SEQUENCE @29+17 (constructed): (2 elem)
10
+
type AttributeType OBJECT_IDENTIFIER @31+10: 0.9.2342.19200300.100.1.25|domainComponent|Men are from Mars, this OID is from Pluto
11
+
value AttributeValue [?] IA5String @43+3: com
12
+
RelativeDistinguishedName SET @48+23 (constructed): (1 elem)
13
+
AttributeTypeAndValue SEQUENCE @50+21 (constructed): (2 elem)
14
+
type AttributeType OBJECT_IDENTIFIER @52+10: 0.9.2342.19200300.100.1.25|domainComponent|Men are from Mars, this OID is from Pluto
15
+
value AttributeValue [?] IA5String @64+7: example
16
+
RelativeDistinguishedName SET @73+19 (constructed): (1 elem)
17
+
AttributeTypeAndValue SEQUENCE @75+17 (constructed): (2 elem)
18
+
type AttributeType OBJECT_IDENTIFIER @77+3: 2.5.4.3|commonName|X.520 DN component
19
+
value AttributeValue [?] PrintableString @82+10: Example CA
20
+
thisUpdate utcTime Time UTCTime @94+13: 2005-02-05 12:00:00 UTC
21
+
nextUpdate utcTime Time UTCTime @109+13: 2005-02-06 12:00:00 UTC
22
+
revokedCertificates SEQUENCE @124+34 (constructed): (1 elem)
23
+
SEQUENCE @126+32 (constructed): (3 elem)
24
+
userCertificate CertificateSerialNumber INTEGER @128+1: 18
25
+
revocationDate utcTime Time UTCTime @131+13: 2004-11-19 15:57:03 UTC
26
+
crlEntryExtensions Extensions SEQUENCE @146+12 (constructed): (1 elem)
27
+
Extension SEQUENCE @148+10 (constructed): (2 elem)
28
+
extnID OBJECT_IDENTIFIER @150+3: 2.5.29.21|cRLReason|X.509 extension
29
+
extnValue OCTET_STRING @155+3 (encapsulates): (3 byte)|0A0101
30
+
ENUMERATED @157+1: 1
31
+
crlExtensions [0] @160+47 (constructed): (1 elem)
32
+
Extensions SEQUENCE @162+45 (constructed): (2 elem)
33
+
Extension SEQUENCE @164+31 (constructed): (2 elem)
34
+
extnID OBJECT_IDENTIFIER @166+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension
35
+
extnValue OCTET_STRING @171+24 (encapsulates): (24 byte)|301680140868AF8533C8394A7AF882938E706A4A20842C32
36
+
SEQUENCE @173+22 (constructed): (1 elem)
37
+
[0] @175+20: (20 byte)|0868AF8533C8394A7AF882938E706A4A20842C32
38
+
Extension SEQUENCE @197+10 (constructed): (2 elem)
39
+
extnID OBJECT_IDENTIFIER @199+3: 2.5.29.20|cRLNumber|X.509 extension
40
+
extnValue OCTET_STRING @204+3 (encapsulates): (3 byte)|02010C
41
+
INTEGER @206+1: 12
42
+
signatureAlgorithm AlgorithmIdentifier SEQUENCE @209+13 (constructed): (2 elem)
43
+
algorithm OBJECT_IDENTIFIER @211+9: 1.2.840.113549.1.1.5|sha1WithRSAEncryption|PKCS #1
44
+
parameters ANY NULL @222+0
45
+
signature BIT_STRING @224+129: (1024 bit)|0010001011011100000110000111110111110111000010001100111011001100011101011101000011010000011010101001101110101101000100001111010001110110001000111011010010000001011011101011010101101101101111100000111011111011000101010001010001101100110010000001011101101101000111111110111010010000000101111010001001101111011000001110010010111101101010101000110001010101110111101000111010000100011011111001001011111000100111110001000000010010001001111010111101001010110101000010111110000101111000100011011001000100011111011010101010100011010011000010010100111000000101011111111100000000111111010011111001111110111011100011110100100110000100101110101111011000111001110010101101100010111000100010101111000011010001101000000011101111011110001000001011010001000101011100011011010000100111000111001001101010110010111100111001111010111011010110011110011001100010110110111001110000100000010111110101000011010000100111010011000001101001101010111111000001010101010001011110100010001100110100110011010110000001101001100000101011101001001111110000101110
+60
examples/ed25519.cer.dump
+60
examples/ed25519.cer.dump
···
1
+
Certificate SEQUENCE @0+383 (constructed): (3 elem)
2
+
tbsCertificate TBSCertificate SEQUENCE @4+305 (constructed): (8 elem)
3
+
version [0] @8+3 (constructed): (1 elem)
4
+
Version INTEGER @10+1: 2
5
+
serialNumber CertificateSerialNumber INTEGER @13+20: (159 bit)|711090297755414526861352146244170174161660335942
6
+
signature AlgorithmIdentifier SEQUENCE @35+5 (constructed): (1 elem)
7
+
algorithm OBJECT_IDENTIFIER @37+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm
8
+
issuer rdnSequence Name SEQUENCE @42+53 (constructed): (3 elem)
9
+
RelativeDistinguishedName SET @44+11 (constructed): (1 elem)
10
+
AttributeTypeAndValue SEQUENCE @46+9 (constructed): (2 elem)
11
+
type AttributeType OBJECT_IDENTIFIER @48+3: 2.5.4.6|countryName|X.520 DN component
12
+
value AttributeValue [?] PrintableString @53+2: IT
13
+
RelativeDistinguishedName SET @57+15 (constructed): (1 elem)
14
+
AttributeTypeAndValue SEQUENCE @59+13 (constructed): (2 elem)
15
+
type AttributeType OBJECT_IDENTIFIER @61+3: 2.5.4.7|localityName|X.520 DN component
16
+
value AttributeValue [?] UTF8String @66+6: Milano
17
+
RelativeDistinguishedName SET @74+21 (constructed): (1 elem)
18
+
AttributeTypeAndValue SEQUENCE @76+19 (constructed): (2 elem)
19
+
type AttributeType OBJECT_IDENTIFIER @78+3: 2.5.4.3|commonName|X.520 DN component
20
+
value AttributeValue [?] UTF8String @83+12: Test ed25519
21
+
validity Validity SEQUENCE @97+30 (constructed): (2 elem)
22
+
notBefore utcTime Time UTCTime @99+13: 2020-09-02 13:25:26 UTC
23
+
notAfter utcTime Time UTCTime @114+13: 2030-09-02 13:25:26 UTC
24
+
subject rdnSequence Name SEQUENCE @129+53 (constructed): (3 elem)
25
+
RelativeDistinguishedName SET @131+11 (constructed): (1 elem)
26
+
AttributeTypeAndValue SEQUENCE @133+9 (constructed): (2 elem)
27
+
type AttributeType OBJECT_IDENTIFIER @135+3: 2.5.4.6|countryName|X.520 DN component
28
+
value AttributeValue [?] PrintableString @140+2: IT
29
+
RelativeDistinguishedName SET @144+15 (constructed): (1 elem)
30
+
AttributeTypeAndValue SEQUENCE @146+13 (constructed): (2 elem)
31
+
type AttributeType OBJECT_IDENTIFIER @148+3: 2.5.4.7|localityName|X.520 DN component
32
+
value AttributeValue [?] UTF8String @153+6: Milano
33
+
RelativeDistinguishedName SET @161+21 (constructed): (1 elem)
34
+
AttributeTypeAndValue SEQUENCE @163+19 (constructed): (2 elem)
35
+
type AttributeType OBJECT_IDENTIFIER @165+3: 2.5.4.3|commonName|X.520 DN component
36
+
value AttributeValue [?] UTF8String @170+12: Test ed25519
37
+
subjectPublicKeyInfo SubjectPublicKeyInfo SEQUENCE @184+42 (constructed): (2 elem)
38
+
algorithm AlgorithmIdentifier SEQUENCE @186+5 (constructed): (1 elem)
39
+
algorithm OBJECT_IDENTIFIER @188+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm
40
+
subjectPublicKey BIT_STRING @193+33: (256 bit)|0011101110101001001011111111110111001011000101110110011011011110010000001010001010010010111101111001001111011110001100001111100000001010001000111010100000110001001000010101110111010000000001111101100001100011001001000010111011111111011010000010000110000101
41
+
extensions [3] @228+83 (constructed): (1 elem)
42
+
Extensions SEQUENCE @230+81 (constructed): (3 elem)
43
+
Extension SEQUENCE @232+29 (constructed): (2 elem)
44
+
extnID OBJECT_IDENTIFIER @234+3: 2.5.29.14|subjectKeyIdentifier|X.509 extension
45
+
extnValue OCTET_STRING @239+22 (encapsulates): (22 byte)|04146BA5BDCF9DFA235978126417AE1E72D89A804AE8
46
+
OCTET_STRING @241+20: (20 byte)|6BA5BDCF9DFA235978126417AE1E72D89A804AE8
47
+
Extension SEQUENCE @263+31 (constructed): (2 elem)
48
+
extnID OBJECT_IDENTIFIER @265+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension
49
+
extnValue OCTET_STRING @270+24 (encapsulates): (24 byte)|301680146BA5BDCF9DFA235978126417AE1E72D89A804AE8
50
+
SEQUENCE @272+22 (constructed): (1 elem)
51
+
[0] @274+20: (20 byte)|6BA5BDCF9DFA235978126417AE1E72D89A804AE8
52
+
Extension SEQUENCE @296+15 (constructed): (3 elem)
53
+
extnID OBJECT_IDENTIFIER @298+3: 2.5.29.19|basicConstraints|X.509 extension
54
+
critical BOOLEAN @303+1: true
55
+
extnValue OCTET_STRING @306+5 (encapsulates): (5 byte)|30030101FF
56
+
SEQUENCE @308+3 (constructed): (1 elem)
57
+
BOOLEAN @310+1: true
58
+
signatureAlgorithm AlgorithmIdentifier SEQUENCE @313+5 (constructed): (1 elem)
59
+
algorithm OBJECT_IDENTIFIER @315+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm
60
+
signature BIT_STRING @320+65: (512 bit)|01101111011100110111011110111110001010001001011001011010001100110011011011010111111001010011010011111101100100001111001111111101010000000111111100011111000000101111100100000000010101111111001000010110000011110001011001101011000001001011111101100101100001001011011010011000110100101101000011010010101111110100110011010110011011110000111010110110111000101110100010011101000001001010001111100000100110010101000011111001110000100110110111011110011100111010110100011101001101010101011110000101011001011000011000000110
+8
examples/ldapmessage.b64
+8
examples/ldapmessage.b64
+7
examples/ldapmessage.b64.dump
+7
examples/ldapmessage.b64.dump
···
1
+
LDAPMessage SEQUENCE @0+53 (constructed): (3 elem)
2
+
messageID MessageID INTEGER @2+1: 5
3
+
protocolOp delRequest CHOICE Application_10 @5+17: (17 byte)|dc=example,dc=com
4
+
Controls [?] [0] @24+29 (constructed): (1 elem)
5
+
AttributeTypeAndValue SEQUENCE @26+27 (constructed): (2 elem)
6
+
type AttributeType [?] OCTET_STRING @28+22: (22 byte)|1.2.840.113556.1.4.805
7
+
value AttributeValue [?] BOOLEAN @52+1: true
+18
examples/pkcs1.pem
+18
examples/pkcs1.pem
···
1
+
PKCS#1 RSA key
2
+
$ openssl genrsa -out examples/pkcs8-rsa.pem 1024
3
+
$ openssl rsa -in examples/pkcs8-rsa.pem -out examples/pkcs1.pem -traditional
4
+
-----BEGIN RSA PRIVATE KEY-----
5
+
MIICXQIBAAKBgQCmy23ifN9pi5LO4MR3LUhU0v+LZmv78H+jd+R6kFcWZf1qW4yf
6
+
KTDkryjjLlIhYqxmzXCqGyaIjj7uJoorWf7KfkxpOuJrh4swJ/WGhCn9i+voW/7T
7
+
sOXfDp1yqrEhaQKwdPot1ZAB78TNsecwX/SODTEMCk95jvx1j5cDxPlskwIDAQAB
8
+
AoGBAINn4bp+BsVwYMj768y4sDOjyBBbMNfcMbLn0el9rh7HW09fsPnzycFg/iV9
9
+
aNdEle6oDAr4OPN8nbeiRVjCHijEnVdHCwAtkKODyuu1ghpZWD0VUC8AEskjX4Bs
10
+
Ysl/HjyvvHIRj89gdDFoElgB4GzHKTzeZNJBM5qtUW57zBCBAkEA0A6N5l98MglL
11
+
cypWKM7+3DXteWt86mKXYUVF33HY28Z+oUVlU0v8m8XxpoAjkicYnC1JOSSlvWRk
12
+
EWlTMgHW5QJBAM06yIHMR6p3apgpwOUp49DbtaQ8NmhCV4NBoFHa+vT2Fk8twOcq
13
+
O9OzP4svhKbPNfB4HnxGbmd/+OVT3lySxhcCQHRPPpqD1K0wLwKxrzrfBPDcIOaY
14
+
5VsuRIw3KqmQPngWTiIf5lYbi5sVnFLFHZ2Nx58/XcjZKOJopdxp8f1ps9UCQQC3
15
+
rOqSsF9bg3DVKllHQAxyepDAolsXSHjGMk/nspJz9mLVDl/dBAFzYLN4QFj6ae0e
16
+
gILYOrjIzNHXfQ4/z+SVAkBPebkAzpGFgzVzu6VOGx0Vft/ow3/DKNJSDM58yASp
17
+
ootY2TdibrrV/ellNLvuTiku6AEM/8jbHlRsmfxRe0xn
18
+
-----END RSA PRIVATE KEY-----
+10
examples/pkcs1.pem.dump
+10
examples/pkcs1.pem.dump
···
1
+
RSAPrivateKey SEQUENCE @0+605 (constructed): (9 elem)
2
+
version Version INTEGER @4+1: 0
3
+
modulus INTEGER @7+129: (1024 bit)|117127183230921204401013393277767517103803021018182691416238029726599496957198017684901559383009459523071384847726671610377559004781710040051270748910270447756432733966622455162759462672603884318432883204215291756888413811504344870556870978773843838353155520698675084344179957236491745093327422201227604749459
4
+
publicExponent INTEGER @139+3: 65537
5
+
privateExponent INTEGER @144+129: (1024 bit)|92276282475226568589241550905865273709561889943250510752753436239739158443231274686159532997597455087892667385718350070754140814118578097684166368734227728473322161416664690885212698653195373932779792506838124961141214987311742627151011567342689730655630521241854903774681567286735997541758916977964830429313
6
+
prime1 INTEGER @276+65: (512 bit)|10896821561662485361386011233938116142526936125648167362054539174681694465821232677159478832161550957167298418313068706031799276527005193877616679381489381
7
+
prime2 INTEGER @343+65: (512 bit)|10748747473575365133625210720374663113238804836624829882840358384492696273600075746246298849279878235356215808273663889910189484797595139778277124898735639
8
+
exponent1 INTEGER @410+64: (511 bit)|6091625365131581796315047890165719534213640521161662994088715561328917102465668272778610952193459304175325574129665657306361751287362700277617869028176853
9
+
exponent2 INTEGER @476+65: (512 bit)|9619864112105977791898517014707043200694399482542575521432448550956476604540013165392532656448448632323473488540572223305800601817570919153380021725291669
10
+
coefficient INTEGER @543+64: (511 bit)|4162468593383244686217782691133418477400302049612992866028022118893358867845916127581019785866484075341057799618361552573853678007698434146811407259880551
+9
examples/pkcs10.pem
+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
+18
examples/pkcs8-rsa.pem
···
1
+
PKCS#8 RSA key
2
+
$ openssl genrsa -out examples/pkcs8-rsa.pem 1024
3
+
-----BEGIN PRIVATE KEY-----
4
+
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKbLbeJ832mLks7g
5
+
xHctSFTS/4tma/vwf6N35HqQVxZl/WpbjJ8pMOSvKOMuUiFirGbNcKobJoiOPu4m
6
+
iitZ/sp+TGk64muHizAn9YaEKf2L6+hb/tOw5d8OnXKqsSFpArB0+i3VkAHvxM2x
7
+
5zBf9I4NMQwKT3mO/HWPlwPE+WyTAgMBAAECgYEAg2fhun4GxXBgyPvrzLiwM6PI
8
+
EFsw19wxsufR6X2uHsdbT1+w+fPJwWD+JX1o10SV7qgMCvg483ydt6JFWMIeKMSd
9
+
V0cLAC2Qo4PK67WCGllYPRVQLwASySNfgGxiyX8ePK+8chGPz2B0MWgSWAHgbMcp
10
+
PN5k0kEzmq1RbnvMEIECQQDQDo3mX3wyCUtzKlYozv7cNe15a3zqYpdhRUXfcdjb
11
+
xn6hRWVTS/ybxfGmgCOSJxicLUk5JKW9ZGQRaVMyAdblAkEAzTrIgcxHqndqmCnA
12
+
5Snj0Nu1pDw2aEJXg0GgUdr69PYWTy3A5yo707M/iy+Eps818HgefEZuZ3/45VPe
13
+
XJLGFwJAdE8+moPUrTAvArGvOt8E8Nwg5pjlWy5EjDcqqZA+eBZOIh/mVhuLmxWc
14
+
UsUdnY3Hnz9dyNko4mil3Gnx/Wmz1QJBALes6pKwX1uDcNUqWUdADHJ6kMCiWxdI
15
+
eMYyT+eyknP2YtUOX90EAXNgs3hAWPpp7R6Agtg6uMjM0dd9Dj/P5JUCQE95uQDO
16
+
kYWDNXO7pU4bHRV+3+jDf8Mo0lIMznzIBKmii1jZN2JuutX96WU0u+5OKS7oAQz/
17
+
yNseVGyZ/FF7TGc=
18
+
-----END PRIVATE KEY-----
+16
examples/pkcs8-rsa.pem.dump
+16
examples/pkcs8-rsa.pem.dump
···
1
+
PrivateKeyInfo SEQUENCE @0+631 (constructed): (3 elem)
2
+
version Version INTEGER @4+1: 0
3
+
privateKeyAlgorithm AlgorithmIdentifier SEQUENCE @7+13 (constructed): (2 elem)
4
+
algorithm OBJECT_IDENTIFIER @9+9: 1.2.840.113549.1.1.1|rsaEncryption|PKCS #1
5
+
parameters ANY NULL @20+0
6
+
privateKey PrivateKey OCTET_STRING @22+609 (encapsulates): (609 byte)|3082025D02010002818100A6CB6DE27CDF698B92CEE0C4772D4854D2FF8B666BFBF07FA377E47A90571665FD6A5B8C9F2930E4AF28E32E522162AC66CD70AA1B26888E3EEE268A2B59FECA7E4C693AE26B878B3027F5868429FD8BEBE85BFED3B0E5DF0E9D72AAB1216902B074FA2DD59001EFC4CDB1E7305FF48E0D310C0A4F798EFC758F9703C4F96C930203010001028181008367E1BA7E06C57060C8FBEBCCB8B033A3C8105B30D7DC31B2E7D1E97DAE1EC75B4F5FB0F9F3C9C160FE257D68D74495EEA80C0AF838F37C9DB7A24558C21E28C49D57470B002D90A383CAEBB5821A59583D15502F0012C9235F806C62C97F1E3CAFBC72118FCF60743168125801E06CC7293CDE64D241339AAD516E7BCC1081024100D00E8DE65F7C32094B732A5628CEFEDC35ED796B7CEA6297614545DF71D8DBC67EA14565534BFC9BC5F1A680239227189C2D493924A5BD64641169533201D6E5024100CD3AC881CC47AA776A9829C0E529E3D0DBB5A43C366842578341A051DAFAF4F6164F2DC0E72A3BD3B33F8B2F84A6CF35F0781E7C466E677FF8E553DE5C92C6170240744F3E9A83D4AD302F02B1AF3ADF04F0DC20E698E55B2E448C372AA9903E78164E221FE6561B8B9B159C52C51D9D8DC79F3F5DC8D928E268A5DC69F1FD69B3D5024100B7ACEA92B05F5B8370D52A5947400C727A90C0A25B174878C6324FE7B29273F662D50E5FDD04017360B3784058FA69ED1E8082D83AB8C8CCD1D77D0E3FCFE49502404F79B900CE9185833573BBA54E1B1D157EDFE8C37FC328D2520CCE7CC804A9A28B58D937626EBAD5FDE96534BBEE4E292EE8010CFFC8DB1E546C99FC517B4C67
7
+
SEQUENCE @26+605 (constructed): (9 elem)
8
+
INTEGER @30+1: 0
9
+
INTEGER @33+129: (1024 bit)|117127183230921204401013393277767517103803021018182691416238029726599496957198017684901559383009459523071384847726671610377559004781710040051270748910270447756432733966622455162759462672603884318432883204215291756888413811504344870556870978773843838353155520698675084344179957236491745093327422201227604749459
10
+
INTEGER @165+3: 65537
11
+
INTEGER @170+129: (1024 bit)|92276282475226568589241550905865273709561889943250510752753436239739158443231274686159532997597455087892667385718350070754140814118578097684166368734227728473322161416664690885212698653195373932779792506838124961141214987311742627151011567342689730655630521241854903774681567286735997541758916977964830429313
12
+
INTEGER @302+65: (512 bit)|10896821561662485361386011233938116142526936125648167362054539174681694465821232677159478832161550957167298418313068706031799276527005193877616679381489381
13
+
INTEGER @369+65: (512 bit)|10748747473575365133625210720374663113238804836624829882840358384492696273600075746246298849279878235356215808273663889910189484797595139778277124898735639
14
+
INTEGER @436+64: (511 bit)|6091625365131581796315047890165719534213640521161662994088715561328917102465668272778610952193459304175325574129665657306361751287362700277617869028176853
15
+
INTEGER @502+65: (512 bit)|9619864112105977791898517014707043200694399482542575521432448550956476604540013165392532656448448632323473488540572223305800601817570919153380021725291669
16
+
INTEGER @569+64: (511 bit)|4162468593383244686217782691133418477400302049612992866028022118893358867845916127581019785866484075341057799618361552573853678007698434146811407259880551
+118
examples/sig-p256-der.p7m.dump
+118
examples/sig-p256-der.p7m.dump
···
1
+
ContentInfo SEQUENCE @0+10868 (constructed): (2 elem)
2
+
contentType ContentType OBJECT_IDENTIFIER @4+9: 1.2.840.113549.1.7.2|signedData|PKCS #7
3
+
content [0] @15+10853 (constructed): (1 elem)
4
+
SignedData SEQUENCE @19+10849 (constructed): (5 elem)
5
+
version CMSVersion INTEGER @23+1: 1
6
+
digestAlgorithms DigestAlgorithmIdentifiers SET @26+15 (constructed): (1 elem)
7
+
DigestAlgorithmIdentifier SEQUENCE @28+13 (constructed): (2 elem)
8
+
algorithm OBJECT_IDENTIFIER @30+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm
9
+
parameters ANY NULL @41+0
10
+
encapContentInfo EncapsulatedContentInfo SEQUENCE @43+10053 (constructed): (2 elem)
11
+
eContentType ContentType OBJECT_IDENTIFIER @47+9: 1.2.840.113549.1.7.1|data|PKCS #7
12
+
eContent [0] @58+10038 (constructed): (1 elem)
13
+
OCTET_STRING @62+10034: (10034 byte)|Inizio contenuto.|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|Fine contenuto.
14
+
CertificateSet [?] [0] @10100+370 (constructed): (1 elem)
15
+
certificate CertificateChoices SEQUENCE @10104+366 (constructed): (3 elem)
16
+
tbsCertificate TBSCertificate SEQUENCE @10108+276 (constructed): (8 elem)
17
+
version [0] @10112+3 (constructed): (1 elem)
18
+
Version INTEGER @10114+1: 2
19
+
serialNumber CertificateSerialNumber INTEGER @10117+16: (127 bit)|128087855099855233032551836648087377254
20
+
signature AlgorithmIdentifier SEQUENCE @10135+10 (constructed): (1 elem)
21
+
algorithm OBJECT_IDENTIFIER @10137+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256
22
+
issuer rdnSequence Name SEQUENCE @10147+15 (constructed): (1 elem)
23
+
RelativeDistinguishedName SET @10149+13 (constructed): (1 elem)
24
+
AttributeTypeAndValue SEQUENCE @10151+11 (constructed): (2 elem)
25
+
type AttributeType OBJECT_IDENTIFIER @10153+3: 2.5.4.3|commonName|X.520 DN component
26
+
value AttributeValue [?] UTF8String @10158+4: Test
27
+
validity Validity SEQUENCE @10164+30 (constructed): (2 elem)
28
+
notBefore utcTime Time UTCTime @10166+13: 2018-07-16 14:56:35 UTC
29
+
notAfter utcTime Time UTCTime @10181+13: 2019-07-16 14:56:35 UTC
30
+
subject rdnSequence Name SEQUENCE @10196+15 (constructed): (1 elem)
31
+
RelativeDistinguishedName SET @10198+13 (constructed): (1 elem)
32
+
AttributeTypeAndValue SEQUENCE @10200+11 (constructed): (2 elem)
33
+
type AttributeType OBJECT_IDENTIFIER @10202+3: 2.5.4.3|commonName|X.520 DN component
34
+
value AttributeValue [?] UTF8String @10207+4: Test
35
+
subjectPublicKeyInfo SubjectPublicKeyInfo SEQUENCE @10213+89 (constructed): (2 elem)
36
+
algorithm AlgorithmIdentifier SEQUENCE @10215+19 (constructed): (2 elem)
37
+
algorithm OBJECT_IDENTIFIER @10217+7: 1.2.840.10045.2.1|ecPublicKey|ANSI X9.62 public key type
38
+
parameters ANY OBJECT_IDENTIFIER @10226+8: 1.2.840.10045.3.1.7|prime256v1|ANSI X9.62 named elliptic curve
39
+
subjectPublicKey BIT_STRING @10236+66: (520 bit)|0000010000100100010011001011011011001100000111000110100100100001111111110100100111011000101111100010011000111110000010110111110011010000010110100010100001100101010110101000010001101100100000100101111011001010111001101110110011100110100110100110101000100001110001001110010011110010001000000010010011000000111010011111010011100100011101001001110010011000101000011010110111110010010111111001000011011110011011101111100101001000001010110110011100011000100000111010011100001110101101001011011110101011100111110000011001000011
40
+
extensions [3] @10304+82 (constructed): (1 elem)
41
+
Extensions SEQUENCE @10306+80 (constructed): (3 elem)
42
+
Extension SEQUENCE @10308+14 (constructed): (3 elem)
43
+
extnID OBJECT_IDENTIFIER @10310+3: 2.5.29.15|keyUsage|X.509 extension
44
+
critical BOOLEAN @10315+1: true
45
+
extnValue OCTET_STRING @10318+4 (encapsulates): (4 byte)|030204F0
46
+
BIT_STRING @10320+2: (4 bit)|1111
47
+
Extension SEQUENCE @10324+29 (constructed): (2 elem)
48
+
extnID OBJECT_IDENTIFIER @10326+3: 2.5.29.14|subjectKeyIdentifier|X.509 extension
49
+
extnValue OCTET_STRING @10331+22 (encapsulates): (22 byte)|0414C3C084DF7B040DB038AF518CE397F6EC20D626E6
50
+
OCTET_STRING @10333+20: (20 byte)|C3C084DF7B040DB038AF518CE397F6EC20D626E6
51
+
Extension SEQUENCE @10355+31 (constructed): (2 elem)
52
+
extnID OBJECT_IDENTIFIER @10357+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension
53
+
extnValue OCTET_STRING @10362+24 (encapsulates): (24 byte)|30168014C3C084DF7B040DB038AF518CE397F6EC20D626E6
54
+
SEQUENCE @10364+22 (constructed): (1 elem)
55
+
[0] @10366+20: (20 byte)|C3C084DF7B040DB038AF518CE397F6EC20D626E6
56
+
signatureAlgorithm AlgorithmIdentifier SEQUENCE @10388+10 (constructed): (1 elem)
57
+
algorithm OBJECT_IDENTIFIER @10390+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256
58
+
signature BIT_STRING @10400+72 (encapsulates): (568 bit)|0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010
59
+
SEQUENCE @10403+69 (constructed): (2 elem)
60
+
INTEGER @10405+33: (256 bit)|100583279108105959323277080420227859612360091217401498640290749528265835693079
61
+
INTEGER @10440+32: (255 bit)|46934510925111877438867701170553238261516280994969183555881415710868278719026
62
+
signerInfos SignerInfos SET @10474+394 (constructed): (1 elem)
63
+
SignerInfo SEQUENCE @10478+390 (constructed): (6 elem)
64
+
version CMSVersion INTEGER @10482+1: 1
65
+
sid issuerAndSerialNumber SignerIdentifier SEQUENCE @10485+35 (constructed): (2 elem)
66
+
issuer rdnSequence Name SEQUENCE @10487+15 (constructed): (1 elem)
67
+
RelativeDistinguishedName SET @10489+13 (constructed): (1 elem)
68
+
AttributeTypeAndValue SEQUENCE @10491+11 (constructed): (2 elem)
69
+
type AttributeType OBJECT_IDENTIFIER @10493+3: 2.5.4.3|commonName|X.520 DN component
70
+
value AttributeValue [?] UTF8String @10498+4: Test
71
+
serialNumber CertificateSerialNumber INTEGER @10504+16: (127 bit)|128087855099855233032551836648087377254
72
+
digestAlgorithm DigestAlgorithmIdentifier SEQUENCE @10522+13 (constructed): (2 elem)
73
+
algorithm OBJECT_IDENTIFIER @10524+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm
74
+
parameters ANY NULL @10535+0
75
+
SignedAttributes [?] [0] @10537+247 (constructed): (5 elem)
76
+
Attribute SEQUENCE @10540+24 (constructed): (2 elem)
77
+
type AttributeType OBJECT_IDENTIFIER @10542+9: 1.2.840.113549.1.9.3|contentType|PKCS #9
78
+
values SET @10553+11 (constructed): (1 elem)
79
+
AttributeValue [?] OBJECT_IDENTIFIER @10555+9: 1.2.840.113549.1.7.1|data|PKCS #7
80
+
Attribute SEQUENCE @10566+28 (constructed): (2 elem)
81
+
type AttributeType OBJECT_IDENTIFIER @10568+9: 1.2.840.113549.1.9.5|signingTime|PKCS #9
82
+
values SET @10579+15 (constructed): (1 elem)
83
+
AttributeValue [?] UTCTime @10581+13: 2018-07-16 14:56:35 UTC
84
+
Attribute SEQUENCE @10596+42 (constructed): (2 elem)
85
+
type AttributeType OBJECT_IDENTIFIER @10598+9: 1.2.840.113549.1.9.52|cmsAlgorithmProtection|RFC 6211
86
+
values SET @10609+29 (constructed): (1 elem)
87
+
AttributeValue [?] SEQUENCE @10611+27 (constructed): (2 elem)
88
+
SEQUENCE @10613+13 (constructed): (2 elem)
89
+
OBJECT_IDENTIFIER @10615+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm
90
+
NULL @10626+0
91
+
[1] @10628+10 (constructed): (1 elem)
92
+
OBJECT_IDENTIFIER @10630+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256
93
+
Attribute SEQUENCE @10640+47 (constructed): (2 elem)
94
+
type AttributeType OBJECT_IDENTIFIER @10642+9: 1.2.840.113549.1.9.4|messageDigest|PKCS #9
95
+
values SET @10653+34 (constructed): (1 elem)
96
+
AttributeValue [?] OCTET_STRING @10655+32: (32 byte)|724C51BBE76DA05AFB20CBE8EB037CDAE1AFD713125D2DC13D552DA9F442D24D
97
+
Attribute SEQUENCE @10689+96 (constructed): (2 elem)
98
+
type AttributeType OBJECT_IDENTIFIER @10691+11: 1.2.840.113549.1.9.16.2.47|signingCertificateV2|S/MIME Authenticated Attributes
99
+
values SET @10704+81 (constructed): (1 elem)
100
+
AttributeValue [?] SEQUENCE @10706+79 (constructed): (1 elem)
101
+
SEQUENCE @10708+77 (constructed): (1 elem)
102
+
SEQUENCE @10710+75 (constructed): (2 elem)
103
+
OCTET_STRING @10712+32: (32 byte)|BABC08434C58267301E006861D27ECA125670E792797248E76A5717A5BF993C2
104
+
SEQUENCE @10746+39 (constructed): (2 elem)
105
+
SEQUENCE @10748+19 (constructed): (1 elem)
106
+
[4] @10750+17 (constructed): (1 elem)
107
+
SEQUENCE @10752+15 (constructed): (1 elem)
108
+
SET @10754+13 (constructed): (1 elem)
109
+
SEQUENCE @10756+11 (constructed): (2 elem)
110
+
OBJECT_IDENTIFIER @10758+3: 2.5.4.3|commonName|X.520 DN component
111
+
UTF8String @10763+4: Test
112
+
INTEGER @10769+16: (127 bit)|128087855099855233032551836648087377254
113
+
signatureAlgorithm SignatureAlgorithmIdentifier SEQUENCE @10787+10 (constructed): (1 elem)
114
+
algorithm OBJECT_IDENTIFIER @10789+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256
115
+
signature SignatureValue OCTET_STRING @10799+71 (encapsulates): (71 byte)|3045022100F104302EABB428ECC8E71CE2E38F6CBED848A8E9A2B5D5DA19933E485C83CC7102200CBB40A0B7B9B2E048920622FB286FD14695F24CF650BDAA40B885F84C34BBB9
116
+
SEQUENCE @10801+69 (constructed): (2 elem)
117
+
INTEGER @10803+33: (256 bit)|109014796438891021115527318269695135443977065935278579101750090430030910049393
118
+
INTEGER @10838+32: (252 bit)|5758600628818957274240888478952309319266088628943097300803726649607194983353
+99
favicon-src.svg
+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
favicon.svg
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" viewBox="0 0 50.8 50.8"><path d="M0 0h50.8v50.8H0z"/><path fill="#58a6ff" d="M18.028 20.078H9.733l-1.31 3.749H3.092l7.62-20.574h6.325l7.62 20.574h-5.332zm-6.972-3.817h5.636L13.88 8.076zm33.292-12.36v4.354q-1.695-.758-3.308-1.144t-3.045-.386q-1.902 0-2.811.524t-.91 1.626q0 .827.607 1.295.62.455 2.232.786l2.26.454q3.432.69 4.879 2.095t1.446 3.996q0 3.404-2.025 5.072-2.012 1.653-6.16 1.653-1.957 0-3.927-.372t-3.942-1.102v-4.479q1.971 1.047 3.804 1.585 1.846.523 3.555.523 1.737 0 2.66-.578t.923-1.654q0-.965-.634-1.488-.62-.524-2.494-.937l-2.053-.455q-3.087-.661-4.52-2.108-1.42-1.447-1.42-3.9 0-3.073 1.985-4.727 1.984-1.654 5.705-1.654 1.695 0 3.486.262 1.792.248 3.707.758z" aria-label="AS"/><g aria-label="N1" style="white-space:pre"><path fill="#58a6ff" d="M4.716 27.345h5.925l7.483 14.111v-14.11h5.03v20.573h-5.926L9.745 33.81v14.11h-5.03z"/><path fill="#fffe58" d="M31.696 44.254h4.686V30.955l-4.81.993v-3.61l4.782-.993h5.044v16.908h4.685v3.666H31.696z"/></g></svg>
+51
-56
hex.js
+51
-56
hex.js
···
1
1
// Hex JavaScript decoder
2
-
// Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it>
2
+
// Copyright (c) 2008 Lapo Luchini <lapo@lapo.it>
3
3
4
4
// Permission to use, copy, modify, and/or distribute this software for any
5
5
// purpose with or without fee is hereby granted, provided that the above
6
6
// copyright notice and this permission notice appear in all copies.
7
-
//
7
+
//
8
8
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
9
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
10
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
···
13
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
15
16
-
(typeof define != 'undefined' ? define : function (factory) { 'use strict';
17
-
if (typeof module == 'object') module.exports = factory();
18
-
else window.hex = factory();
19
-
})(function () {
20
-
"use strict";
16
+
const
17
+
haveU8 = (typeof Uint8Array == 'function');
18
+
19
+
let decoder; // populated on first usage
21
20
22
-
var Hex = {},
23
-
decoder, // populated on first usage
24
-
haveU8 = (typeof Uint8Array == 'function');
21
+
export class Hex {
25
22
26
-
/**
27
-
* Decodes an hexadecimal value.
28
-
* @param {string|Array|Uint8Array} a - a string representing hexadecimal data, or an array representation of its charcodes
29
-
*/
30
-
Hex.decode = function(a) {
31
-
var isString = (typeof a == 'string');
32
-
var i;
33
-
if (decoder === undefined) {
34
-
var hex = "0123456789ABCDEF",
35
-
ignore = " \f\n\r\t\u00A0\u2028\u2029";
36
-
decoder = [];
37
-
for (i = 0; i < 16; ++i)
38
-
decoder[hex.charCodeAt(i)] = i;
39
-
hex = hex.toLowerCase();
40
-
for (i = 10; i < 16; ++i)
41
-
decoder[hex.charCodeAt(i)] = i;
42
-
for (i = 0; i < ignore.length; ++i)
43
-
decoder[ignore.charCodeAt(i)] = -1;
44
-
}
45
-
var out = haveU8 ? new Uint8Array(a.length >> 1) : [],
46
-
bits = 0,
47
-
char_count = 0,
48
-
len = 0;
49
-
for (i = 0; i < a.length; ++i) {
50
-
var c = isString ? a.charCodeAt(i) : a[i];
51
-
c = decoder[c];
52
-
if (c == -1)
53
-
continue;
54
-
if (c === undefined)
55
-
throw 'Illegal character at offset ' + i;
56
-
bits |= c;
57
-
if (++char_count >= 2) {
58
-
out[len++] = bits;
59
-
bits = 0;
60
-
char_count = 0;
61
-
} else {
62
-
bits <<= 4;
23
+
/**
24
+
* Decodes an hexadecimal value.
25
+
* @param {string|Array|Uint8Array} a - a string representing hexadecimal data, or an array representation of its charcodes
26
+
*/
27
+
static decode(a) {
28
+
let isString = (typeof a == 'string');
29
+
let i;
30
+
if (decoder === undefined) {
31
+
let hex = '0123456789ABCDEF',
32
+
ignore = ' \f\n\r\t\u00A0\u2028\u2029';
33
+
decoder = [];
34
+
for (i = 0; i < 16; ++i)
35
+
decoder[hex.charCodeAt(i)] = i;
36
+
hex = hex.toLowerCase();
37
+
for (i = 10; i < 16; ++i)
38
+
decoder[hex.charCodeAt(i)] = i;
39
+
for (i = 0; i < ignore.length; ++i)
40
+
decoder[ignore.charCodeAt(i)] = -1;
41
+
}
42
+
let out = haveU8 ? new Uint8Array(a.length >> 1) : [],
43
+
bits = 0,
44
+
char_count = 0,
45
+
len = 0;
46
+
for (i = 0; i < a.length; ++i) {
47
+
let c = isString ? a.charCodeAt(i) : a[i];
48
+
c = decoder[c];
49
+
if (c == -1)
50
+
continue;
51
+
if (c === undefined)
52
+
throw 'Illegal character at offset ' + i;
53
+
bits |= c;
54
+
if (++char_count >= 2) {
55
+
out[len++] = bits;
56
+
bits = 0;
57
+
char_count = 0;
58
+
} else {
59
+
bits <<= 4;
60
+
}
63
61
}
62
+
if (char_count)
63
+
throw 'Hex encoding incomplete: 4 bits missing';
64
+
if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters
65
+
out = out.subarray(0, len);
66
+
return out;
64
67
}
65
-
if (char_count)
66
-
throw "Hex encoding incomplete: 4 bits missing";
67
-
if (haveU8 && out.length > len) // in case it was originally longer because of ignored characters
68
-
out = out.subarray(0, len);
69
-
return out;
70
-
};
71
68
72
-
return Hex;
73
-
74
-
});
69
+
}
-182
index-dark.css
-182
index-dark.css
···
1
-
:root {
2
-
--main-bg-color: #0d1116;
3
-
--main-text-color: #f8f8f2;
4
-
--headline-text-color: #8be9fd;
5
-
--button-border-color: #505050;
6
-
--button-bg-color: #303030;
7
-
--button-bghover-color: #404040;
8
-
--input-border-color: #505050;
9
-
--input-bg-color: #0c0e11;
10
-
--link-color: #58a6ff;
11
-
--link-hover-color: #9b9bea;
12
-
--header-bg-color: #161b22;
13
-
--page-bg-color: #000000;
14
-
--license-bg-color: #4b4a4a;
15
-
--license-border-color: black;
16
-
--sub-border-color: #383838;
17
-
--preview-bg-color: #989797;
18
-
--preview-border-color: #b5b3b3;
19
-
--dump-bg-color: #0c0e11;
20
-
--dump-border-color: #505050;
21
-
}
22
-
html, body {
23
-
background-color: var(--page-bg-color);
24
-
color: var(--main-text-color);
25
-
font-family: Arial, Helvetica, sans-serif;
26
-
text-align: justify;
27
-
font-size: 10pt;
28
-
margin: 0px;
29
-
}
30
-
h1 {
31
-
font-weight: 200;
32
-
}
33
-
input,
34
-
textarea {
35
-
background-color: var(--input-bg-color);
36
-
color: var(--main-text-color);
37
-
border: 1px solid var(--input-border-color);
38
-
}
39
-
input[type="button"] {
40
-
background-color: var(--button-bg-color);
41
-
color: var(--main-text-color);
42
-
border: 1px solid var(--button-border-color);
43
-
}
44
-
input[type="button"]:hover {
45
-
background-color: var(--button-bghover-color);
46
-
}
47
-
::file-selector-button,
48
-
::-webkit-file-upload-button {
49
-
background-color: var(--button-bg-color);
50
-
color: var(--main-text-color);
51
-
border: 0px;
52
-
border-right: 1px solid var(--button-border-color);
53
-
}
54
-
::-webkit-file-upload-button:hover {
55
-
background-color: var(--button-bghover-color);
56
-
}
57
-
::file-selector-button:hover {
58
-
background-color: var(--button-bghover-color);
59
-
}
60
-
select {
61
-
background-color: var(--input-bg-color);
62
-
color: var(--main-text-color);
63
-
border: 1px solid var(--input-border-color);
64
-
65
-
}
66
-
a {
67
-
color: var(--link-color);
68
-
}
69
-
header {
70
-
background-color: var(--header-bg-color);
71
-
padding: 8px;
72
-
padding-left: 16px;
73
-
}
74
-
#main-page {
75
-
background-color: var(--main-bg-color);
76
-
border: 0px;
77
-
padding: 15px;
78
-
}
79
-
#help {
80
-
margin: 0px;
81
-
padding: 4px;
82
-
padding-left: 20px;
83
-
}
84
-
.tt {
85
-
font-family: monospace;
86
-
}
87
-
.license .ref {
88
-
position: relative;
89
-
}
90
-
.license .hidden {
91
-
visibility: hidden;
92
-
position: absolute;
93
-
bottom: 0em;
94
-
/*white-space: pre;*/
95
-
background-color: var(--license-bg-color);
96
-
border: solid 1px var(--license-border-color);
97
-
padding: 2px;
98
-
margin-left: 15%;
99
-
margin-right: 15%;
100
-
}
101
-
.license:hover .hidden {
102
-
/*display: block;*/
103
-
visibility: visible;
104
-
}
105
-
.node {
106
-
position: relative;
107
-
}
108
-
.sub {
109
-
padding-left: 1.5em;
110
-
border-left: solid 1px var(--sub-border-color);
111
-
}
112
-
.head {
113
-
height: 1em;
114
-
white-space: nowrap;
115
-
}
116
-
.node:hover > .head, .node.hover > .head {
117
-
color: var(--link-color);
118
-
font-weight: bold;
119
-
}
120
-
.node:hover > .head:hover, .node.hover > .head.hover {
121
-
color: var(--link-hover-color);
122
-
}
123
-
.node.collapsed {
124
-
font-style: italic;
125
-
}
126
-
.node.collapsed > .sub {
127
-
display: none;
128
-
}
129
-
.node.collapsed.hover > .sub {
130
-
display: block;
131
-
}
132
-
.value {
133
-
display: none;
134
-
position: absolute;
135
-
z-index: 2;
136
-
top: 1.2em;
137
-
left: 0;
138
-
background-color: var(--button-bg-color);
139
-
border: solid 1px var(--button-border-color);
140
-
padding: 2px;
141
-
}
142
-
.head:hover + .value, .head.hover + .value {
143
-
display: block;
144
-
}
145
-
.preview {
146
-
margin-left: 1em;
147
-
color: var(--preview-border-color);
148
-
font-weight: normal;
149
-
}
150
-
.preview > .oid {
151
-
margin-left: 1em;
152
-
color: var(--preview-bg-color);
153
-
font-weight: normal;
154
-
}
155
-
.spaces {
156
-
font-size: 0px;
157
-
}
158
-
#tree {
159
-
font-family: monospace;
160
-
}
161
-
#tree > p {
162
-
font-family: Arial, Helvetica, sans-serif;
163
-
}
164
-
#dump {
165
-
z-index: 1;
166
-
background-color: var(--dump-bg-color);
167
-
border: solid 1px var(--dump-border-color);
168
-
font-family: monospace;
169
-
white-space: pre;
170
-
padding: 5px;
171
-
}
172
-
#dump .tag { color: #58a6ff; }
173
-
#dump .dlen { color: darkcyan; }
174
-
#dump .ulen { color: #00b6b6; }
175
-
#dump .intro { color: #58a6ff; }
176
-
#dump .outro { color: #00b6b6; }
177
-
#dump .skip { color: #707070; background-color: #222222; }
178
-
#dump .hexCurrent { background-color: #727272; }
179
-
#dump .hexCurrent .hex { background-color: #474747; }
180
-
#dump .hexCurrent .tag { color: #6db0fc; }
181
-
#dump .hexCurrent .dlen { color: #00b6b6; }
182
-
#file { display: none; }
+207
-23
index.css
+207
-23
index.css
···
1
-
:root {
1
+
html {
2
2
--main-bg-color: #C0C0C0;
3
3
--main-text-color: #000000;
4
4
--headline-text-color: #8be9fd;
···
18
18
--preview-border-color: #505050;
19
19
--dump-bg-color: #C0C0C0;
20
20
--dump-border-color: #E0E0E0;
21
+
--dump-tag: blue;
22
+
--dump-dlen: darkcyan;
23
+
--dump-ulen: darkgreen;
24
+
--dump-intro: blue;
25
+
--dump-outro: darkgreen;
26
+
--dump-skip: #666666;
27
+
--dump-skip-bg: #C0C0C0;
28
+
--dump-hex-current: #808080;
29
+
--dump-hex-current-hex: #A0A0A0;
30
+
--dump-hex-current-dlen: #004040;
31
+
--hover-bg-color: #E0E0E0;
32
+
--tree-zoom-fix: -1px;
33
+
--tree-line: #999;
34
+
}
35
+
html[data-theme="dark"] {
36
+
--main-bg-color: #0d1116;
37
+
--main-text-color: #f8f8f2;
38
+
--headline-text-color: #8be9fd;
39
+
--button-border-color: #505050;
40
+
--button-bg-color: #303030;
41
+
--button-bghover-color: #404040;
42
+
--input-border-color: #505050;
43
+
--input-bg-color: #0c0e11;
44
+
--link-color: #58a6ff;
45
+
--link-hover-color: #9b9bea;
46
+
--header-bg-color: #161b22;
47
+
--page-bg-color: #000000;
48
+
--license-bg-color: #4b4a4a;
49
+
--license-border-color: black;
50
+
--sub-border-color: #383838;
51
+
--preview-bg-color: #989797;
52
+
--preview-border-color: #b5b3b3;
53
+
--dump-bg-color: #0c0e11;
54
+
--dump-border-color: #505050;
55
+
--dump-tag: #58a6ff;
56
+
--dump-dlen: darkcyan;
57
+
--dump-ulen: #00b6b6;
58
+
--dump-intro: #58a6ff;
59
+
--dump-outro: #00b6b6;
60
+
--dump-skip: #707070;
61
+
--dump-skip-bg: #222222;
62
+
--dump-hex-current: #727272;
63
+
--dump-hex-current-hex: #474747;
64
+
--dump-hex-current-dlen: #00b6b6;
65
+
--hover-bg-color: #505050;
66
+
--tree-line: #333;
21
67
}
22
68
html, body {
23
69
background-color: var(--page-bg-color);
···
27
73
font-size: 10pt;
28
74
margin: 0px;
29
75
}
76
+
header {
77
+
display: flex;
78
+
flex: nowrap;
79
+
}
80
+
header > .title {
81
+
flex: auto;
82
+
}
83
+
header > .menu {
84
+
display: flex;
85
+
align-items: center;
86
+
padding-right: 10px;
87
+
}
30
88
input,
31
89
textarea {
32
90
background-color: var(--input-bg-color);
···
71
129
#main-page {
72
130
background-color: var(--main-bg-color);
73
131
border: 0px;
74
-
padding: 15px;
132
+
padding: 5px;
133
+
}
134
+
#main-page > div {
135
+
position: relative;
136
+
padding-bottom: 1em;
75
137
}
76
138
#help {
77
139
margin: 0px;
···
81
143
.tt {
82
144
font-family: monospace;
83
145
}
84
-
.license .ref {
146
+
.license {
85
147
position: relative;
86
148
}
87
149
.license .hidden {
88
150
visibility: hidden;
89
151
position: absolute;
90
-
bottom: 0em;
91
-
/*white-space: pre;*/
152
+
top: 0px;
153
+
background-color: #D0D0D0; /*minimal support for IE11*/
92
154
background-color: var(--license-bg-color);
93
155
border: solid 1px var(--license-border-color);
94
156
padding: 2px;
···
99
161
/*display: block;*/
100
162
visibility: visible;
101
163
}
102
-
.node {
103
-
position: relative;
104
-
}
105
-
.sub {
106
-
padding-left: 1.5em;
107
-
border-left: solid 1px var(--sub-border-color);
108
-
}
109
164
.head {
110
165
height: 1em;
111
166
white-space: nowrap;
112
167
}
113
168
.node:hover > .head, .node.hover > .head {
114
169
color: var(--link-color);
115
-
font-weight: bold;
170
+
background-color: var(--hover-bg-color);
116
171
}
117
172
.node:hover > .head:hover, .node.hover > .head.hover {
118
173
color: var(--link-hover-color);
···
126
181
.node.collapsed.hover > .sub {
127
182
display: block;
128
183
}
184
+
.name {
185
+
margin-right: 1em;
186
+
color: var(--preview-border-color);
187
+
}
188
+
.name.id {
189
+
color: var(--main-text-color);
190
+
}
129
191
.value {
130
192
display: none;
131
193
position: absolute;
132
194
z-index: 2;
133
195
top: 1.2em;
134
-
left: 0;
196
+
left: 30px;
197
+
background-color: #efefef; /*minimal support for IE11*/
135
198
background-color: var(--button-bg-color);
136
199
border: solid 1px var(--button-border-color);
137
200
padding: 2px;
···
159
222
font-family: Arial, Helvetica, sans-serif;
160
223
}
161
224
#dump {
225
+
position: absolute;
226
+
right: 0px;
162
227
z-index: 1;
163
228
background-color: var(--dump-bg-color);
164
229
border: solid 1px var(--dump-border-color);
···
166
231
white-space: pre;
167
232
padding: 5px;
168
233
}
169
-
#dump .tag { color: blue; }
170
-
#dump .dlen { color: darkcyan; }
171
-
#dump .ulen { color: darkgreen; }
172
-
#dump .intro { color: blue; }
173
-
#dump .outro { color: darkgreen; }
174
-
#dump .skip { color: #666666; background-color: #C0C0C0; }
175
-
#dump .hexCurrent { background-color: #808080; }
176
-
#dump .hexCurrent .hex { background-color: #A0A0A0; }
177
-
#dump .hexCurrent .dlen { color: #004040; }
234
+
#dump .tag { color: var(--dump-tag); }
235
+
#dump .dlen { color: var(--dump-dlen); }
236
+
#dump .ulen { color: var(--dump-ulen); }
237
+
#dump .intro { color: var(--dump-intro); }
238
+
#dump .outro { color: var(--dump-outro); }
239
+
#dump .skip { color: var(--dump-skip); background-color: var(--dump-skip-bg); }
240
+
#dump .hexCurrent { background-color: var(--dump-hex-current); }
241
+
#dump .hexCurrent .hex { background-color: var(--dump-hex-current-hex); }
242
+
#dump .hexCurrent .dlen { color: var(--dump-hex-current-dlen); }
178
243
#file { display: none; }
244
+
#area { width: 100%; }
245
+
#contextmenu {
246
+
position: absolute;
247
+
visibility: hidden;
248
+
top: 0;
249
+
left: 0;
250
+
padding: 2px;
251
+
background-color: var(--button-bg-color);
252
+
border: 1px solid var(--button-bg-color);
253
+
z-index: 2;
254
+
}
255
+
#contextmenu > button {
256
+
display: block;
257
+
width: 120px;
258
+
background-color: var(--button-bg-color);
259
+
color: var(--main-text-color);
260
+
border: 1px solid var(--button-border-color);
261
+
text-align: left;
262
+
}
263
+
#contextmenu > button:hover {
264
+
background-color: var(--button-bghover-color);
265
+
}
266
+
267
+
.treecollapse {
268
+
--spacing: 1.5rem;
269
+
--radius: 7px;
270
+
padding-inline-start: 0px;
271
+
}
272
+
.treecollapse li{
273
+
display: block;
274
+
position: relative;
275
+
padding-left: calc(2 * var(--spacing) - var(--radius) - 2px);
276
+
}
277
+
.treecollapse ul{
278
+
padding-left: 0;
279
+
margin-left: calc(var(--radius) - var(--spacing));
280
+
}
281
+
.treecollapse ul li{
282
+
border-left: 1px solid var(--tree-line);
283
+
}
284
+
.treecollapse ul li:last-child{
285
+
border-color: transparent;
286
+
}
287
+
.treecollapse ul li::before{
288
+
content: '';
289
+
display: block;
290
+
position: absolute;
291
+
top: calc(var(--spacing) / -1.6);
292
+
left: var(--tree-zoom-fix);
293
+
width: calc(var(--spacing) + 2px);
294
+
height: calc(var(--spacing) + 1px);
295
+
border: solid var(--tree-line);
296
+
border-width: 0 0 1px 1px;
297
+
}
298
+
.treecollapse summary{
299
+
display : block;
300
+
cursor : pointer;
301
+
}
302
+
.treecollapse summary::marker,
303
+
.treecollapse summary::-webkit-details-marker{
304
+
display : none;
305
+
}
306
+
.treecollapse summary:focus{
307
+
outline : none;
308
+
}
309
+
.treecollapse summary:focus-visible{
310
+
outline : 1px dotted #000;
311
+
}
312
+
.treecollapse summary::before{
313
+
content: '';
314
+
display: block;
315
+
position: absolute;
316
+
top: calc(var(--spacing) / 2 - var(--radius));
317
+
left: calc(var(--spacing) - var(--radius) - 1px);
318
+
width: calc(2 * var(--radius));
319
+
height: calc(2 * var(--radius));
320
+
}
321
+
.treecollapse summary::before{
322
+
z-index: 1;
323
+
top: 1px;
324
+
background: url('tree-icon-light.svg');
325
+
}
326
+
html[data-theme="dark"] .treecollapse summary::before{
327
+
background: url('tree-icon-dark.svg');
328
+
}
329
+
.treecollapse details[open] > summary::before{
330
+
background-position : calc(-2 * var(--radius)) 0;
331
+
}
332
+
333
+
/*
334
+
Zoom fix to have straight lines in treeview
335
+
Zoom level and dpi resolution:
336
+
- 175%: 336dpi
337
+
- 150%: 288dpi
338
+
- 110%: 212dpi
339
+
- 100%: 192dpi
340
+
- 90%: 173dpi
341
+
- 80%: 154dpi
342
+
*/
343
+
@media (resolution <= 154dpi) {
344
+
:root{
345
+
--tree-zoom-fix: -0.6px;
346
+
}
347
+
}
348
+
@media (155dpi <= resolution < 192dpi) {
349
+
:root{
350
+
--tree-zoom-fix: -0.7px;
351
+
}
352
+
}
353
+
@media (192dpi <= resolution < 336dpi) {
354
+
:root{
355
+
--tree-zoom-fix: -1px;
356
+
}
357
+
}
358
+
@media (336dpi <= resolution) {
359
+
:root{
360
+
--tree-zoom-fix: -0.9px;
361
+
}
362
+
}
+62
-53
index.html
+62
-53
index.html
···
1
1
<!DOCTYPE html>
2
-
<html>
2
+
<html data-theme="dark">
3
3
<head>
4
-
<meta charset="US-ASCII">
4
+
<meta charset="UTF-8">
5
5
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6
+
<meta name="theme-color" content="#0d1116" media="(prefers-color-scheme: dark)">
7
+
<meta name="theme-color" content="#C0C0C0" media="(prefers-color-scheme: light)">
6
8
<title>ASN.1 JavaScript decoder</title>
7
-
<link rel="stylesheet" href="index.css" type="text/css" id="theme-link">
9
+
<link rel="stylesheet" href="index.css" type="text/css">
10
+
<link rel="icon" type="image/svg+xml" sizes="192x192" href="favicon.svg">
8
11
</head>
9
12
<body>
10
-
<header style="display:flex; flex: nowrap">
11
-
<div style="flex: auto">
13
+
<div id="contextmenu">
14
+
<button id="btnCopyHex">Copy hex dump</button>
15
+
<button id="btnCopyB64">Copy Base64</button>
16
+
<button id="btnCopyTree">Copy subtree</button>
17
+
<button id="btnCopyValue">Copy value</button>
18
+
</div>
19
+
<header>
20
+
<div class="title">
12
21
<h1>ASN.1 JavaScript decoder</h1>
13
22
</div>
14
-
<div style="display: flex; align-items: center; padding-right: 10px;">
15
-
<select id="theme-select">
16
-
<option value="os">OS Theme</option>
17
-
<option value="dark">Dark Theme</option>
18
-
<option value="light">Light Theme</option>
19
-
</select>
23
+
<div class="menu">
24
+
<form>
25
+
<input id="butClear" type="button" value="clear">
26
+
<select id="theme-select">
27
+
<option value="os">OS Theme</option>
28
+
<option value="dark">Dark Theme</option>
29
+
<option value="light">Light Theme</option>
30
+
</select>
31
+
</form>
20
32
</div>
21
-
22
33
</header>
23
34
<div id="main-page">
24
-
<div style="position: relative; padding-bottom: 1em;">
25
-
<div id="dump" style="position: absolute; right: 0px;"></div>
35
+
<div>
36
+
<div id="dump"></div>
26
37
<div id="tree"></div>
27
38
</div>
28
-
<br>
29
39
<form>
30
-
<textarea id="area" style="width: 100%;" rows="8"></textarea>
40
+
<textarea id="area" rows="8" placeholder="Paste hex or base64 or PEM encoded ASN.1 BER or DER structures here, or load a file."></textarea>
31
41
<br>
32
42
<br>
33
43
<label title="can be slow with big files"><input type="checkbox" id="wantHex" checked="checked"> with hex dump</label>
44
+
<label title="can be slow with big files"><input type="checkbox" id="trimHex" checked="checked"> trim big chunks</label>
45
+
<label title="can be slow with big files"><input type="checkbox" id="wantDef" checked="checked"> with definitions</label>
34
46
<input id="butDecode" type="button" value="decode">
35
-
<input id="butClear" type="button" value="clear">
36
47
<br><br>
37
48
<table>
38
-
<tr>
39
-
<td>
40
-
<input type="file" id="file">
41
-
</td>
42
-
<td> </td>
43
-
<td>
44
-
<div>Examples:
45
-
<select id="examples">
46
-
<option value="sig-p256-der.p7m">PKCS#7/CMS attached signature (DER)</option>
47
-
<option value="sig-p256-ber.p7m">PKCS#7/CMS attached signature (BER)</option>
48
-
<option value="sig-rsa1024-sha1.p7s">PKCS#7/CMS detached signature (old)</option>
49
-
<option value="letsencrypt-x3.cer">X.509 certificate: Let's Encrypt X3</option>
50
-
<option value="ed25519.cer">X.509 certificate: ed25519 (RFC 8410)</option>
51
-
</select>
52
-
<input id="butExample" type="button" value="load example">
53
-
</div>
54
-
</td>
55
-
</tr>
49
+
<tr><td>Drag or load file:</td><td><input type="file" id="file"></td></tr>
50
+
<tr id="rowExamples"><td>Load examples:</td><td>
51
+
<select id="examples">
52
+
<option value="sig-p256-der.p7m">PKCS#7/CMS attached signature (DER)</option>
53
+
<option value="sig-p256-ber.p7m">PKCS#7/CMS attached signature (BER)</option>
54
+
<option value="sig-rsa1024-sha1.p7s">PKCS#7/CMS detached signature (old)</option>
55
+
<option value="cms-password.p7m">PKCS#7/CMS encrypted with password</option>
56
+
<option value="letsencrypt-x3.cer">X.509 certificate: Let's Encrypt X3</option>
57
+
<option value="ed25519.cer">X.509 certificate: ed25519 (RFC 8410)</option>
58
+
<option value="pkcs1.pem">PKCS#1 RSA key (RFC 8017)</option>
59
+
<option value="pkcs8-rsa.pem">PKCS#8 RSA key (RFC 5208)</option>
60
+
<option value="pkcs10.pem">PKCS#10 certification request (RFC 2986)</option>
61
+
<option value="crl-rfc5280.b64">CRL example (RFC 5280)</option>
62
+
<option value="cmpv2.b64">CMP PKI message (RFC 4210)</option>
63
+
<option value="ldapmessage.b64">LDAP message (RFC 4511)</option>
64
+
</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>
56
68
</table>
57
-
<br>
58
69
</form>
59
70
<br>
60
71
</div>
61
72
<div id="help">
62
73
<h2>Instructions</h2>
63
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>
64
-
<p>This tool can be used online at the address <a href="http://lapo.it/asn1js/"><span class="tt">http://lapo.it/asn1js/</span></a> or offline, unpacking <a href="http://lapo.it/asn1js/asn1js.zip">the ZIP file</a> in a directory and opening <span class="tt">index.html</span> in a browser</p>
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>
65
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>
66
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>
67
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>
68
81
<div class="license">
69
82
<h3>Copyright</h3>
70
-
<div class="ref"><p class="hidden">
83
+
<div><p class="hidden">
71
84
ASN.1 JavaScript decoder<br>
72
-
Copyright © 2008-2022 Lapo Luchini <lapo@lapo.it><br>
85
+
Copyright © 2008-2025 Lapo Luchini <a href="mailto:lapo@lapo.it?subject=ASN1js"><lapo@lapo.it></a><br>
73
86
<br>
74
87
Permission to use, copy, modify, and/or distribute this software for any
75
88
purpose with or without fee is hereby granted, provided that the above
···
83
96
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
84
97
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
85
98
</p></div>
86
-
<p>ASN.1 JavaScript decoder Copyright © 2008-2023 <a href="http://lapo.it/">Lapo Luchini</a>; released as <a href="http://opensource.org/licenses/isc-license.txt">opensource</a> under the <a href="http://en.wikipedia.org/wiki/ISC_licence">ISC license</a>.</p>
99
+
<p>ASN.1 JavaScript decoder Copyright © 2008-2025 <a href="https://lapo.it/">Lapo Luchini</a>; released as <a href="https://opensource.org/licenses/isc-license.txt">opensource</a> under the <a href="https://en.wikipedia.org/wiki/ISC_licence">ISC license</a>.</p>
87
100
</div>
88
-
<p><span class="tt">OBJECT 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>
101
+
<p><span class="tt">OBJECT IDENTIFIER</span> values are recognized using data taken from Peter Gutmann's <a href="https://www.cs.auckland.ac.nz/~pgut001/#standards">dumpasn1</a> program.</p>
89
102
<h3>Links</h3>
90
103
<ul>
91
-
<li><a href="http://lapo.it/asn1js/">official website</a></li>
92
-
<li><a href="http://asn1js.eu/">dedicated domain</a></li>
93
-
<li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a></li>
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>
94
109
<li><a href="https://github.com/lapo-luchini/asn1js">github mirror</a></li>
95
-
<li><a href="https://www.ohloh.net/p/asn1js">Ohloh code stats</a></li>
110
+
<li><a href="https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md">ChangeLog on GitHub</a></li>
111
+
<li><a href="https://www.openhub.net/p/asn1js">OpenHub code stats</a></li>
96
112
</ul>
97
113
</div>
98
-
99
-
<script type="text/javascript" src="hex.js"></script>
100
-
<script type="text/javascript" src="base64.js"></script>
101
-
<script type="text/javascript" src="oids.js"></script>
102
-
<script type="text/javascript" src="int10.js"></script>
103
-
<script type="text/javascript" src="asn1.js"></script>
104
-
<script type="text/javascript" src="dom.js"></script>
105
-
<script type="text/javascript" src="index.js"></script>
114
+
<script type="module" src="index.js"></script>
106
115
</body>
107
116
</html>
+178
-157
index.js
+178
-157
index.js
···
1
-
(typeof define != 'undefined'
2
-
? define
3
-
: function (factory) {
4
-
'use strict';
5
-
if (typeof module == 'object')
6
-
factory(function (name) {
7
-
return require(name);
8
-
});
9
-
else
10
-
factory(function (name) {
11
-
return window[name.substring(2)];
12
-
});
13
-
})(function (require) {
14
-
'use strict';
15
-
16
-
// set dark theme depending on os settings
17
-
const themeSelect = document.querySelector('#theme-select');
18
-
function setTheme() {
19
-
const storedTheme = localStorage.getItem('theme');
20
-
let theme = 'os';
21
-
if (storedTheme) {
22
-
theme = storedTheme;
23
-
}
24
-
25
-
themeSelect.value = theme;
26
-
27
-
if (theme == 'os') {
28
-
const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
29
-
if (prefersDarkScheme.matches) {
30
-
theme = 'dark';
31
-
} else {
32
-
theme = 'light';
33
-
}
34
-
}
35
-
36
-
const themeLink = document.querySelector('#theme-link');
37
-
if (theme == 'dark') {
38
-
themeLink.href = 'index-dark.css';
39
-
} else {
40
-
themeLink.href = 'index.css';
41
-
}
42
-
}
43
-
setTheme();
44
-
themeSelect.addEventListener('change', function () {
45
-
const selectedTheme = themeSelect.value;
46
-
localStorage.setItem('theme', selectedTheme);
47
-
setTheme();
48
-
});
1
+
import './theme.js';
2
+
import { ASN1DOM } from './dom.js';
3
+
import { Base64 } from './base64.js';
4
+
import { Hex } from './hex.js';
5
+
import { Defs } from './defs.js';
6
+
import { tags } from './tags.js';
49
7
50
-
var ASN1 = require('./asn1'),
51
-
Base64 = require('./base64'),
52
-
Hex = require('./hex'),
8
+
const
53
9
maxLength = 10240,
54
10
reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/,
55
11
tree = id('tree'),
56
12
dump = id('dump'),
57
-
wantHex = id('wantHex'),
13
+
wantHex = checkbox('wantHex'),
14
+
trimHex = checkbox('trimHex'),
15
+
wantDef = checkbox('wantDef'),
58
16
area = id('area'),
59
17
file = id('file'),
60
18
examples = id('examples'),
61
-
hash = null;
19
+
selectDefs = id('definitions'),
20
+
selectTag = id('tags');
62
21
63
-
require('./dom'); // side effect: augment ASN1
64
-
if (!window.console || !window.console.log)
65
-
// IE8 with closed developer tools
22
+
let hash = null;
23
+
24
+
if (!window.console || !window.console.log) // IE8 with closed developer tools
66
25
window.console = { log: function () {} };
67
-
function id(elem) {
26
+
function id(elem) {
68
27
return document.getElementById(elem);
69
-
}
70
-
function text(el, string) {
28
+
}
29
+
function text(el, string) {
71
30
if ('textContent' in el) el.textContent = string;
72
31
else el.innerText = string;
73
-
}
74
-
function decode(der, offset) {
75
-
offset = offset || 0;
32
+
}
33
+
function checkbox(name) {
34
+
const el = id(name);
35
+
const cfg = localStorage.getItem(name);
36
+
if (cfg === 'false')
37
+
el.checked = false;
38
+
el.onchange = () => localStorage.setItem(name, el.checked);
39
+
return el;
40
+
}
41
+
function show(asn1) {
76
42
tree.innerHTML = '';
77
43
dump.innerHTML = '';
44
+
let ul = document.createElement('ul');
45
+
ul.className = 'treecollapse';
46
+
tree.appendChild(ul);
47
+
ul.appendChild(asn1.toDOM());
48
+
if (wantHex.checked) dump.appendChild(asn1.toHexDOM(undefined, trimHex.checked));
49
+
}
50
+
export function decode(der, offset) {
51
+
offset = offset || 0;
78
52
try {
79
-
var asn1 = ASN1.decode(der, offset);
80
-
tree.appendChild(asn1.toDOM());
81
-
if (wantHex.checked) dump.appendChild(asn1.toHexDOM());
82
-
var b64 = der.length < maxLength ? asn1.toB64String() : '';
83
-
if (area.value === '') area.value = Base64.pretty(b64);
84
-
try {
85
-
window.location.hash = hash = '#' + b64;
86
-
} catch (e) {
87
-
// fails with "Access Denied" on IE with URLs longer than ~2048 chars
88
-
window.location.hash = hash = '#';
89
-
}
90
-
var endOffset = asn1.posEnd();
91
-
if (endOffset < der.length) {
92
-
var p = document.createElement('p');
93
-
p.innerText = 'Input contains ' + (der.length - endOffset) + ' more bytes to decode.';
94
-
var button = document.createElement('button');
95
-
button.innerText = 'try to decode';
96
-
button.onclick = function () {
97
-
decode(der, endOffset);
98
-
};
99
-
p.appendChild(button);
100
-
tree.insertBefore(p, tree.firstChild);
101
-
}
53
+
const asn1 = ASN1DOM.decode(der, offset);
54
+
if (wantDef.checked) {
55
+
selectDefs.innerHTML = '';
56
+
const types = Defs.commonTypes
57
+
.map(type => {
58
+
const stats = Defs.match(asn1, type);
59
+
return { type, match: stats.recognized / stats.total };
60
+
})
61
+
.sort((a, b) => b.match - a.match);
62
+
for (const t of types) {
63
+
t.element = document.createElement('option');
64
+
t.element.innerText = (t.match * 100).toFixed(1) + '% ' + t.type.description;
65
+
selectDefs.appendChild(t.element);
66
+
}
67
+
let not = document.createElement('option');
68
+
not.innerText = 'no definition';
69
+
selectDefs.appendChild(not);
70
+
Defs.match(asn1, types[0].type);
71
+
selectDefs.onchange = () => {
72
+
for (const t of types) {
73
+
if (t.element == selectDefs.selectedOptions[0]) {
74
+
Defs.match(asn1, t.type);
75
+
show(asn1);
76
+
return;
77
+
}
78
+
}
79
+
Defs.match(asn1, null);
80
+
show(asn1);
81
+
};
82
+
} else
83
+
selectDefs.innerHTML = '<option>no definition</option>';
84
+
show(asn1);
85
+
let b64 = der.length < maxLength ? asn1.toB64String() : '';
86
+
if (area.value === '') area.value = Base64.pretty(b64);
87
+
try {
88
+
window.location.hash = hash = '#' + b64;
89
+
} catch (ignore) {
90
+
// fails with "Access Denied" on IE with URLs longer than ~2048 chars
91
+
window.location.hash = hash = '#';
92
+
}
93
+
let endOffset = asn1.posEnd();
94
+
if (endOffset < der.length) {
95
+
let p = document.createElement('p');
96
+
p.innerText = 'Input contains ' + (der.length - endOffset) + ' more bytes to decode.';
97
+
let button = document.createElement('button');
98
+
button.innerText = 'try to decode';
99
+
button.onclick = function () {
100
+
decode(der, endOffset);
101
+
};
102
+
p.appendChild(button);
103
+
tree.insertBefore(p, tree.firstChild);
104
+
}
102
105
} catch (e) {
103
-
text(tree, e);
106
+
text(tree, e);
104
107
}
105
-
}
106
-
function decodeText(val) {
108
+
}
109
+
export function decodeText(val) {
107
110
try {
108
-
var der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val);
109
-
decode(der);
111
+
let der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val);
112
+
decode(der);
110
113
} catch (e) {
111
-
text(tree, e);
112
-
dump.innerHTML = '';
114
+
text(tree, e);
115
+
dump.innerHTML = '';
113
116
}
114
-
}
115
-
function decodeBinaryString(str) {
116
-
var der;
117
+
}
118
+
export function decodeBinaryString(str) {
119
+
let der;
117
120
try {
118
-
if (reHex.test(str)) der = Hex.decode(str);
119
-
else if (Base64.re.test(str)) der = Base64.unarmor(str);
120
-
else der = str;
121
-
decode(der);
122
-
} catch (e) {
123
-
text(tree, 'Cannot decode file.');
124
-
dump.innerHTML = '';
121
+
if (reHex.test(str)) der = Hex.decode(str);
122
+
else if (Base64.re.test(str)) der = Base64.unarmor(str);
123
+
else der = str;
124
+
decode(der);
125
+
} catch (ignore) {
126
+
text(tree, 'Cannot decode file.');
127
+
dump.innerHTML = '';
125
128
}
126
-
}
127
-
// set up buttons
128
-
id('butDecode').onclick = function () {
129
-
decodeText(area.value);
130
-
};
131
-
id('butClear').onclick = function () {
132
-
area.value = '';
133
-
file.value = '';
134
-
tree.innerHTML = '';
135
-
dump.innerHTML = '';
136
-
hash = window.location.hash = '';
137
-
};
138
-
id('butExample').onclick = function () {
139
-
console.log('Loading example:', examples.value);
140
-
var request = new XMLHttpRequest();
141
-
request.open('GET', 'examples/' + examples.value, true);
142
-
request.onreadystatechange = function () {
143
-
if (this.readyState !== 4) return;
144
-
if (this.status >= 200 && this.status < 400) {
145
-
area.value = this.responseText;
146
-
decodeText(this.responseText);
147
-
} else {
148
-
console.log('Error loading example.');
149
-
}
150
-
};
151
-
request.send();
152
-
};
153
-
// this is only used if window.FileReader
154
-
function read(f) {
129
+
}
130
+
// set up buttons
131
+
const butClickHandlers = {
132
+
butDecode: () => {
133
+
decodeText(area.value);
134
+
},
135
+
butClear: () => {
136
+
area.value = '';
137
+
file.value = '';
138
+
tree.innerHTML = '';
139
+
dump.innerHTML = '';
140
+
selectDefs.innerHTML = '';
141
+
hash = window.location.hash = '';
142
+
},
143
+
butExample: () => {
144
+
console.log('Loading example:', examples.value);
145
+
let request = new XMLHttpRequest();
146
+
request.open('GET', 'examples/' + examples.value, true);
147
+
request.onreadystatechange = function () {
148
+
if (this.readyState !== 4) return;
149
+
if (this.status >= 200 && this.status < 400) {
150
+
area.value = this.responseText;
151
+
decodeText(this.responseText);
152
+
} else {
153
+
console.log('Error loading example.');
154
+
}
155
+
};
156
+
request.send();
157
+
},
158
+
};
159
+
for (const [name, onClick] of Object.entries(butClickHandlers)) {
160
+
let elem = id(name);
161
+
if (elem)
162
+
elem.onclick = onClick;
163
+
}
164
+
// this is only used if window.FileReader
165
+
function read(f) {
155
166
area.value = ''; // clear text area, will get b64 content
156
-
var r = new FileReader();
167
+
let r = new FileReader();
157
168
r.onloadend = function () {
158
-
if (r.error) alert("Your browser couldn't read the specified file (error code " + r.error.code + ').');
159
-
else decodeBinaryString(r.result);
169
+
if (r.error) alert("Your browser couldn't read the specified file (error code " + r.error.code + ').');
170
+
else decodeBinaryString(r.result);
160
171
};
161
172
r.readAsBinaryString(f);
162
-
}
163
-
function load() {
173
+
}
174
+
function load() {
164
175
if (file.files.length === 0) alert('Select a file to load first.');
165
176
else read(file.files[0]);
166
-
}
167
-
function loadFromHash() {
177
+
}
178
+
function loadFromHash() {
168
179
if (window.location.hash && window.location.hash != hash) {
169
-
hash = window.location.hash;
170
-
// Firefox is not consistent with other browsers and returns an
171
-
// already-decoded hash string so we risk double-decoding here,
172
-
// but since % is not allowed in base64 nor hexadecimal, it's ok
173
-
var val = decodeURIComponent(hash.substr(1));
174
-
if (val.length) decodeText(val);
180
+
hash = window.location.hash;
181
+
// Firefox is not consistent with other browsers and returns an
182
+
// already-decoded hash string so we risk double-decoding here,
183
+
// but since % is not allowed in base64 nor hexadecimal, it's ok
184
+
let val = decodeURIComponent(hash.substr(1));
185
+
if (val.length) decodeText(val);
175
186
}
176
-
}
177
-
function stop(e) {
187
+
}
188
+
function stop(e) {
178
189
e.stopPropagation();
179
190
e.preventDefault();
180
-
}
181
-
function dragAccept(e) {
191
+
}
192
+
function dragAccept(e) {
182
193
stop(e);
183
194
if (e.dataTransfer.files.length > 0) read(e.dataTransfer.files[0]);
184
-
}
185
-
// main
186
-
if ('onhashchange' in window) window.onhashchange = loadFromHash;
187
-
loadFromHash();
188
-
document.ondragover = stop;
189
-
document.ondragleave = stop;
190
-
if ('FileReader' in window && 'readAsBinaryString' in new FileReader()) {
195
+
}
196
+
// main
197
+
if ('onhashchange' in window) window.onhashchange = loadFromHash;
198
+
loadFromHash();
199
+
document.ondragover = stop;
200
+
document.ondragleave = stop;
201
+
if ('FileReader' in window && 'readAsBinaryString' in new FileReader()) {
191
202
file.style.display = 'block';
192
203
file.onchange = load;
193
204
document.ondrop = dragAccept;
194
-
}
195
-
});
205
+
}
206
+
for (let tag in tags) {
207
+
let date = tags[tag];
208
+
let el = document.createElement('option');
209
+
el.value = tag;
210
+
el.innerText = date + ' ' + tag;
211
+
selectTag.appendChild(el);
212
+
}
213
+
selectTag.onchange = function (ev) {
214
+
let tag = ev.target.selectedOptions[0].value;
215
+
window.location.href = 'https://rawcdn.githack.com/lapo-luchini/asn1js/' + tag + '/index.html';
216
+
};
+89
-90
int10.js
+89
-90
int10.js
···
1
1
// Big integer base-10 printing library
2
-
// Copyright (c) 2008-2022 Lapo Luchini <lapo@lapo.it>
2
+
// Copyright (c) 2008 Lapo Luchini <lapo@lapo.it>
3
3
4
4
// Permission to use, copy, modify, and/or distribute this software for any
5
5
// purpose with or without fee is hereby granted, provided that the above
6
6
// copyright notice and this permission notice appear in all copies.
7
-
//
7
+
//
8
8
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
9
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
10
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
···
13
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
15
16
-
(typeof define != 'undefined' ? define : function (factory) { 'use strict';
17
-
if (typeof module == 'object') module.exports = factory();
18
-
else window.int10 = factory();
19
-
})(function () {
20
-
"use strict";
16
+
/** Biggest 10^n integer that can still fit 2^53 when multiplied by 256. */
17
+
const max = 10000000000000;
21
18
22
-
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
+
}
23
27
24
-
/**
25
-
* Arbitrary length base-10 value.
26
-
* @param {number} value - Optional initial value (will be 0 otherwise).
27
-
*/
28
-
function Int10(value) {
29
-
this.buf = [+value || 0];
30
-
}
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
+
}
31
53
32
-
/**
33
-
* Multiply value by m and add c.
34
-
* @param {number} m - multiplier, must be < =256
35
-
* @param {number} c - value to add
36
-
*/
37
-
Int10.prototype.mulAdd = function (m, c) {
38
-
// assert(m <= 256)
39
-
var b = this.buf,
40
-
l = b.length,
41
-
i, t;
42
-
for (i = 0; i < l; ++i) {
43
-
t = b[i] * m + c;
44
-
if (t < max)
45
-
c = 0;
46
-
else {
47
-
c = 0|(t / max);
48
-
t -= c * max;
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;
49
70
}
50
-
b[i] = t;
71
+
while (b[b.length - 1] === 0)
72
+
b.pop();
51
73
}
52
-
if (c > 0)
53
-
b[i] = c;
54
-
};
55
74
56
-
/**
57
-
* Subtract value.
58
-
* @param {number} c - value to subtract
59
-
*/
60
-
Int10.prototype.sub = function (c) {
61
-
var b = this.buf,
62
-
l = b.length,
63
-
i, t;
64
-
for (i = 0; i < l; ++i) {
65
-
t = b[i] - c;
66
-
if (t < 0) {
67
-
t += max;
68
-
c = 1;
69
-
} else
70
-
c = 0;
71
-
b[i] = t;
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;
72
88
}
73
-
while (b[b.length - 1] === 0)
74
-
b.pop();
75
-
};
76
89
77
-
/**
78
-
* Convert to decimal string representation.
79
-
* @param {*} base - optional value, only value accepted is 10
80
-
*/
81
-
Int10.prototype.toString = function (base) {
82
-
if ((base || 10) != 10)
83
-
throw 'only base 10 is supported';
84
-
var b = this.buf,
85
-
s = b[b.length - 1].toString();
86
-
for (var i = b.length - 2; i >= 0; --i)
87
-
s += (max + b[i]).toString().substring(1);
88
-
return s;
89
-
};
90
+
/**
91
+
* 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
+
}
90
102
91
-
/**
92
-
* Convert to Number value representation.
93
-
* Will probably overflow 2^53 and thus become approximate.
94
-
*/
95
-
Int10.prototype.valueOf = function () {
96
-
var b = this.buf,
97
-
v = 0;
98
-
for (var i = b.length - 1; i >= 0; --i)
99
-
v = v * max + b[i];
100
-
return v;
101
-
};
102
-
103
-
/**
104
-
* Return value as a simple Number (if it is <= 10000000000000), or return this.
105
-
*/
106
-
Int10.prototype.simplify = function () {
107
-
var b = this.buf;
108
-
return (b.length == 1) ? b[0] : this;
109
-
};
110
-
111
-
return Int10;
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
+
}
112
111
113
-
});
112
+
}
+241
-68
oids.js
+241
-68
oids.js
···
2
2
// which is made by Peter Gutmann and whose license states:
3
3
// You can use this code in whatever way you want,
4
4
// as long as you don't try to claim you wrote it.
5
-
(typeof define != 'undefined' ? define : function (factory) { 'use strict';
6
-
if (typeof module == 'object') module.exports = factory();
7
-
else window.oids = factory();
8
-
})(function () {
9
-
'use strict';
10
-
return {
5
+
export const oids = {
11
6
"0.2.262.1.10": { "d": "Telesec", "c": "Deutsche Telekom" },
12
7
"0.2.262.1.10.0": { "d": "extension", "c": "Telesec" },
13
8
"0.2.262.1.10.1": { "d": "mechanism", "c": "Telesec" },
···
295
290
"0.4.0.127.0.7.4.1.1.2": { "d": "bsiCertReqMsgswithOuterSignature", "c": "BSI TR-03109" },
296
291
"0.4.0.127.0.7.4.1.1.3": { "d": "bsiAuthorizedCertReqMsgs", "c": "BSI TR-03109" },
297
292
"0.4.0.127.0.7.4.1.2.2": { "d": "bsiSignedRevReqs", "c": "BSI TR-03109" },
298
-
"0.4.0.1862": { "d": "etsiQcsProfile", "c": "ETSI TS 101 862 qualified certificates" },
299
-
"0.4.0.1862.1": { "d": "etsiQcs", "c": "ETSI TS 101 862 qualified certificates" },
300
-
"0.4.0.1862.1.1": { "d": "etsiQcsCompliance", "c": "ETSI TS 101 862 qualified certificates" },
301
-
"0.4.0.1862.1.2": { "d": "etsiQcsLimitValue", "c": "ETSI TS 101 862 qualified certificates" },
302
-
"0.4.0.1862.1.3": { "d": "etsiQcsRetentionPeriod", "c": "ETSI TS 101 862 qualified certificates" },
303
-
"0.4.0.1862.1.4": { "d": "etsiQcsQcSSCD", "c": "ETSI TS 101 862 qualified certificates" },
293
+
"0.4.0.1862": { "d": "etsiQcsProfile", "c": "ETSI TS 101 862 Qualified Certificates" },
294
+
"0.4.0.1862.1": { "d": "etsiQcs", "c": "ETSI TS 101 862 Qualified Certificates" },
295
+
"0.4.0.1862.1.1": { "d": "etsiQcsCompliance", "c": "ETSI TS 101 862 Qualified Certificates" },
296
+
"0.4.0.1862.1.2": { "d": "etsiQcsLimitValue", "c": "ETSI TS 101 862 Qualified Certificates" },
297
+
"0.4.0.1862.1.3": { "d": "etsiQcsRetentionPeriod", "c": "ETSI TS 101 862 Qualified Certificates" },
298
+
"0.4.0.1862.1.4": { "d": "etsiQcsQcSSCD", "c": "ETSI TS 101 862 Qualified Certificates" },
299
+
"0.4.0.1862.1.5": { "d": "etsiQcsQcPDS", "c": "ETSI TS 101 862 Qualified Certificates" },
300
+
"0.4.0.1862.1.6": { "d": "etsiQcsQcType", "c": "ETSI TS 101 862 Qualified Certificates" },
301
+
"0.4.0.1862.1.6.1": { "d": "etsiQcsQctEsign", "c": "ETSI TS 101 862 Qualified Certificates" },
302
+
"0.4.0.1862.1.6.2": { "d": "etsiQcsQctEseal", "c": "ETSI TS 101 862 Qualified Certificates" },
303
+
"0.4.0.1862.1.6.3": { "d": "etsiQcsQctWeb", "c": "ETSI TS 101 862 Qualified Certificates" },
304
+
"0.4.0.2042.1.1": { "d": "normalisedCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" },
305
+
"0.4.0.2042.1.2": { "d": "normalisedCertificatePolicyPlus", "c": "ETSI TS 102 042 Certificate Policies" },
306
+
"0.4.0.2042.1.3": { "d": "lightweightCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" },
307
+
"0.4.0.2042.1.4": { "d": "evCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" },
308
+
"0.4.0.2042.1.5": { "d": "evCertificatePolicyPlus", "c": "ETSI TS 102 042 Certificate Policies" },
309
+
"0.4.0.2042.1.6": { "d": "dvCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" },
310
+
"0.4.0.2042.1.7": { "d": "ovCertificatePolicy", "c": "ETSI TS 102 042 Certificate Policies" },
311
+
"0.4.0.194112.1.0": { "d": "qcpNatural", "c": "EU Qualified Certificate Policy" },
312
+
"0.4.0.194112.1.1": { "d": "qcpLegal", "c": "EU Qualified Certificate Policy" },
313
+
"0.4.0.194112.1.2": { "d": "qcpNaturalQscd", "c": "EU Qualified Certificate Policy" },
314
+
"0.4.0.194112.1.3": { "d": "qcpLegalQscd", "c": "EU Qualified Certificate Policy" },
315
+
"0.4.0.194112.1.4": { "d": "qcpWeb", "c": "EU Qualified Certificate Policy" },
316
+
"0.4.0.194121.1.1": { "d": "qcsSemanticsIdNatural", "c": "EU Qualified Certificate Identifier" },
317
+
"0.4.0.194121.1.2": { "d": "qcsSemanticsIdLegal", "c": "EU Qualified Certificate Identifier" },
318
+
"0.4.0.194121.1.3": { "d": "qcsSemanticsIdeIDASNatural", "c": "EU Qualified Certificate Identifier" },
319
+
"0.4.0.194121.1.4": { "d": "qcsSemanticsIdeIDASLegal", "c": "EU Qualified Certificate Identifier" },
304
320
"0.9.2342.19200300.100.1.1": { "d": "userID", "c": "Some oddball X.500 attribute collection" },
305
321
"0.9.2342.19200300.100.1.3": { "d": "rfc822Mailbox", "c": "Some oddball X.500 attribute collection" },
306
322
"0.9.2342.19200300.100.1.25": { "d": "domainComponent", "c": "Men are from Mars, this OID is from Pluto" },
···
376
392
"1.2.36.68980861.1.1.11": { "d": "signetIntraNet", "c": "Signet CA" },
377
393
"1.2.36.68980861.1.1.20": { "d": "signetPolicy", "c": "Signet CA" },
378
394
"1.2.36.75878867.1.100.1.1": { "d": "certificatesAustraliaPolicy", "c": "Certificates Australia CA" },
395
+
"1.2.112.0.2.0.34.101.45.2.1": { "d": "bignPubkey", "c": "Belarus STB 34.101.45" },
396
+
"1.2.112.0.2.0.34.101.45.3.1": { "d": "bignParamB1", "c": "Belarus STB 34.101.45" },
397
+
"1.2.112.0.2.0.34.101.45.3.2": { "d": "bignParamB2", "c": "Belarus STB 34.101.45" },
398
+
"1.2.112.0.2.0.34.101.45.3.3": { "d": "bignParamB3", "c": "Belarus STB 34.101.45" },
399
+
"1.2.112.0.2.0.34.101.45.11": { "d": "bignWithHSpec", "c": "Belarus STB 34.101.45" },
400
+
"1.2.112.0.2.0.34.101.45.12": { "d": "bignWithHBelt", "c": "Belarus STB 34.101.45" },
379
401
"1.2.156.10197.1": { "d": "gmtCryptographicAlgorithm", "c": "China GM Standards Committee" },
380
402
"1.2.156.10197.1.100": { "d": "gmtBlockCipher", "c": "China GM Standards Committee" },
381
403
"1.2.156.10197.1.102": { "d": "sm1Cipher", "c": "China GM Standards Committee" },
···
552
574
"1.2.643.7.1.1.3.3": { "d": "gost2012Signature512", "c": "GOST R 34.10-2012 512 bit signature" },
553
575
"1.2.643.7.1.1.6.1": { "d": "cryptoProECDH256", "c": "CryptoPro ECC DH algorithm for GOST R 34.10-2012 256 bit key" },
554
576
"1.2.643.7.1.1.6.2": { "d": "cryptoProECDH512", "c": "CryptoPro ECC DH algorithm for GOST R 34.10-2012 512 bit key" },
577
+
"1.2.643.100.113.1": { "d": "cryptoProClassSignToolKC1", "c": "CryptoPro GOST" },
578
+
"1.2.643.100.113.2": { "d": "cryptoProClassSignToolKC2", "c": "CryptoPro GOST" },
579
+
"1.2.643.100.113.3": { "d": "cryptoProClassSignToolKC3", "c": "CryptoPro GOST" },
580
+
"1.2.643.100.113.4": { "d": "cryptoProClassSignToolKB1", "c": "CryptoPro GOST" },
581
+
"1.2.643.100.113.5": { "d": "cryptoProClassSignToolKB2", "c": "CryptoPro GOST" },
582
+
"1.2.643.100.113.6": { "d": "cryptoProClassSignToolKA1", "c": "CryptoPro GOST" },
555
583
"1.2.752.34.1": { "d": "seis-cp", "c": "SEIS Project" },
556
584
"1.2.752.34.1.1": { "d": "SEIS high-assurance policyIdentifier", "c": "SEIS Project certificate policies" },
557
585
"1.2.752.34.1.2": { "d": "SEIS GAK policyIdentifier", "c": "SEIS Project certificate policies" },
···
758
786
"1.2.840.113549.1.9.16.1.45": { "d": "cborSequence", "c": "S/MIME Content Types" },
759
787
"1.2.840.113549.1.9.16.1.46": { "d": "animaCBORVoucher", "c": "S/MIME Content Types", "w": true },
760
788
"1.2.840.113549.1.9.16.1.47": { "d": "geofeedCSVwithCRLF", "c": "S/MIME Content Types" },
789
+
"1.2.840.113549.1.9.16.1.48": { "d": "rpkiSignedChecklist", "c": "S/MIME Content Types" },
790
+
"1.2.840.113549.1.9.16.1.49": { "d": "rpkiASPA", "c": "S/MIME Content Types" },
761
791
"1.2.840.113549.1.9.16.2": { "d": "authenticatedAttributes", "c": "S/MIME" },
762
792
"1.2.840.113549.1.9.16.2.1": { "d": "receiptRequest", "c": "S/MIME Authenticated Attributes" },
763
793
"1.2.840.113549.1.9.16.2.2": { "d": "securityLabel", "c": "S/MIME Authenticated Attributes" },
···
1125
1155
"1.2.840.113635.100.15.2": { "d": "appleCustomCertificateExtension2", "c": "Apple custom certificate extension" },
1126
1156
"1.2.840.113635.100.15.3": { "d": "appleCustomCertificateExtension3", "c": "Apple custom certificate extension" },
1127
1157
"1.3.6.1.4.1.311.2.1.4": { "d": "spcIndirectDataContext", "c": "Microsoft code signing" },
1128
-
"1.3.6.1.4.1.311.2.1.10": { "d": "spcAgencyInfo", "c": "Microsoft code signing. Also known as policyLink" },
1158
+
"1.3.6.1.4.1.311.2.1.10": { "d": "spcAgencyInfo", "c": "Microsoft code signing. Also assigned as policyLink" },
1129
1159
"1.3.6.1.4.1.311.2.1.11": { "d": "spcStatementType", "c": "Microsoft code signing" },
1130
1160
"1.3.6.1.4.1.311.2.1.12": { "d": "spcSpOpusInfo", "c": "Microsoft code signing" },
1131
1161
"1.3.6.1.4.1.311.2.1.14": { "d": "certReqExtensions", "c": "Microsoft" },
···
1135
1165
"1.3.6.1.4.1.311.2.1.20": { "d": "spcJavaClassData (type 1)", "c": "Microsoft code signing. Formerly \"link extension\" aka \"glue extension\"" },
1136
1166
"1.3.6.1.4.1.311.2.1.21": { "d": "individualCodeSigning", "c": "Microsoft" },
1137
1167
"1.3.6.1.4.1.311.2.1.22": { "d": "commercialCodeSigning", "c": "Microsoft" },
1138
-
"1.3.6.1.4.1.311.2.1.25": { "d": "spcLink (type 2)", "c": "Microsoft code signing. Also known as \"glue extension\"" },
1168
+
"1.3.6.1.4.1.311.2.1.25": { "d": "spcLink (type 2)", "c": "Microsoft code signing. Also assigned as \"glue extension\"" },
1139
1169
"1.3.6.1.4.1.311.2.1.26": { "d": "spcMinimalCriteriaInfo", "c": "Microsoft code signing" },
1140
1170
"1.3.6.1.4.1.311.2.1.27": { "d": "spcFinancialCriteriaInfo", "c": "Microsoft code signing" },
1141
-
"1.3.6.1.4.1.311.2.1.28": { "d": "spcLink (type 3)", "c": "Microsoft code signing. Also known as \"glue extension\"" },
1171
+
"1.3.6.1.4.1.311.2.1.28": { "d": "spcLink (type 3)", "c": "Microsoft code signing. Also assigned as \"glue extension\"" },
1142
1172
"1.3.6.1.4.1.311.2.1.29": { "d": "spcHashInfoObjID", "c": "Microsoft code signing" },
1143
1173
"1.3.6.1.4.1.311.2.1.30": { "d": "spcSipInfoObjID", "c": "Microsoft code signing" },
1144
1174
"1.3.6.1.4.1.311.2.2": { "d": "ctl", "c": "Microsoft CTL" },
···
1149
1179
"1.3.6.1.4.1.311.10.1": { "d": "certTrustList", "c": "Microsoft contentType" },
1150
1180
"1.3.6.1.4.1.311.10.1.1": { "d": "sortedCtl", "c": "Microsoft contentType" },
1151
1181
"1.3.6.1.4.1.311.10.2": { "d": "nextUpdateLocation", "c": "Microsoft" },
1152
-
"1.3.6.1.4.1.311.10.3.1": { "d": "certTrustListSigning", "c": "Microsoft enhanced key usage" },
1153
-
"1.3.6.1.4.1.311.10.3.2": { "d": "timeStampSigning", "c": "Microsoft enhanced key usage" },
1154
-
"1.3.6.1.4.1.311.10.3.3": { "d": "serverGatedCrypto", "c": "Microsoft enhanced key usage" },
1182
+
"1.3.6.1.4.1.311.10.3.1": { "d": "certTrustListSigning", "c": "Microsoft extended key usage" },
1183
+
"1.3.6.1.4.1.311.10.3.2": { "d": "timeStampSigning", "c": "Microsoft extended key usage" },
1184
+
"1.3.6.1.4.1.311.10.3.3": { "d": "serverGatedCrypto", "c": "Microsoft extended key usage" },
1155
1185
"1.3.6.1.4.1.311.10.3.3.1": { "d": "serialized", "c": "Microsoft" },
1156
-
"1.3.6.1.4.1.311.10.3.4": { "d": "encryptedFileSystem", "c": "Microsoft enhanced key usage" },
1157
-
"1.3.6.1.4.1.311.10.3.5": { "d": "whqlCrypto", "c": "Microsoft enhanced key usage" },
1158
-
"1.3.6.1.4.1.311.10.3.6": { "d": "nt5Crypto", "c": "Microsoft enhanced key usage" },
1159
-
"1.3.6.1.4.1.311.10.3.7": { "d": "oemWHQLCrypto", "c": "Microsoft enhanced key usage" },
1160
-
"1.3.6.1.4.1.311.10.3.8": { "d": "embeddedNTCrypto", "c": "Microsoft enhanced key usage" },
1161
-
"1.3.6.1.4.1.311.10.3.9": { "d": "rootListSigner", "c": "Microsoft enhanced key usage" },
1162
-
"1.3.6.1.4.1.311.10.3.10": { "d": "qualifiedSubordination", "c": "Microsoft enhanced key usage" },
1163
-
"1.3.6.1.4.1.311.10.3.11": { "d": "keyRecovery", "c": "Microsoft enhanced key usage" },
1164
-
"1.3.6.1.4.1.311.10.3.12": { "d": "documentSigning", "c": "Microsoft enhanced key usage" },
1165
-
"1.3.6.1.4.1.311.10.3.13": { "d": "lifetimeSigning", "c": "Microsoft enhanced key usage" },
1166
-
"1.3.6.1.4.1.311.10.3.14": { "d": "mobileDeviceSoftware", "c": "Microsoft enhanced key usage" },
1167
-
"1.3.6.1.4.1.311.10.3.15": { "d": "smartDisplay", "c": "Microsoft enhanced key usage" },
1168
-
"1.3.6.1.4.1.311.10.3.16": { "d": "cspSignature", "c": "Microsoft enhanced key usage" },
1169
-
"1.3.6.1.4.1.311.10.3.4.1": { "d": "efsRecovery", "c": "Microsoft enhanced key usage" },
1186
+
"1.3.6.1.4.1.311.10.3.4": { "d": "encryptedFileSystem", "c": "Microsoft extended key usage" },
1187
+
"1.3.6.1.4.1.311.10.3.5": { "d": "whqlCrypto", "c": "Microsoft extended key usage" },
1188
+
"1.3.6.1.4.1.311.10.3.6": { "d": "nt5Crypto", "c": "Microsoft extended key usage" },
1189
+
"1.3.6.1.4.1.311.10.3.7": { "d": "oemWHQLCrypto", "c": "Microsoft extended key usage" },
1190
+
"1.3.6.1.4.1.311.10.3.8": { "d": "embeddedNTCrypto", "c": "Microsoft extended key usage" },
1191
+
"1.3.6.1.4.1.311.10.3.9": { "d": "rootListSigner", "c": "Microsoft extended key usage" },
1192
+
"1.3.6.1.4.1.311.10.3.10": { "d": "qualifiedSubordination", "c": "Microsoft extended 3key usage" },
1193
+
"1.3.6.1.4.1.311.10.3.11": { "d": "keyRecovery", "c": "Microsoft extended key usage" },
1194
+
"1.3.6.1.4.1.311.10.3.12": { "d": "documentSigning", "c": "Microsoft extended key usage" },
1195
+
"1.3.6.1.4.1.311.10.3.13": { "d": "lifetimeSigning", "c": "Microsoft extended key usage" },
1196
+
"1.3.6.1.4.1.311.10.3.14": { "d": "mobileDeviceSoftware", "c": "Microsoft extended key usage" },
1197
+
"1.3.6.1.4.1.311.10.3.15": { "d": "smartDisplay", "c": "Microsoft extended key usage" },
1198
+
"1.3.6.1.4.1.311.10.3.16": { "d": "cspSignature", "c": "Microsoft extended key usage" },
1199
+
"1.3.6.1.4.1.311.10.3.4.1": { "d": "efsRecovery", "c": "Microsoft extended key usage" },
1170
1200
"1.3.6.1.4.1.311.10.4.1": { "d": "yesnoTrustAttr", "c": "Microsoft attribute" },
1171
-
"1.3.6.1.4.1.311.10.5.1": { "d": "drm", "c": "Microsoft enhanced key usage" },
1172
-
"1.3.6.1.4.1.311.10.5.2": { "d": "drmIndividualization", "c": "Microsoft enhanced key usage" },
1173
-
"1.3.6.1.4.1.311.10.6.1": { "d": "licenses", "c": "Microsoft enhanced key usage" },
1174
-
"1.3.6.1.4.1.311.10.6.2": { "d": "licenseServer", "c": "Microsoft enhanced key usage" },
1201
+
"1.3.6.1.4.1.311.10.5.1": { "d": "drm", "c": "Microsoft extended key usage" },
1202
+
"1.3.6.1.4.1.311.10.5.2": { "d": "drmIndividualization", "c": "Microsoft extended key usage" },
1203
+
"1.3.6.1.4.1.311.10.6.1": { "d": "licenses", "c": "Microsoft extended key usage" },
1204
+
"1.3.6.1.4.1.311.10.6.2": { "d": "licenseServer", "c": "Microsoft extended key usage" },
1175
1205
"1.3.6.1.4.1.311.10.7.1": { "d": "keyidRdn", "c": "Microsoft attribute" },
1176
1206
"1.3.6.1.4.1.311.10.8.1": { "d": "removeCertificate", "c": "Microsoft attribute" },
1177
1207
"1.3.6.1.4.1.311.10.9.1": { "d": "crossCertDistPoints", "c": "Microsoft attribute" },
···
1197
1227
"1.3.6.1.4.1.311.17.3": { "d": "pkcs12ExtendedAttributes", "c": "Microsoft attribute" },
1198
1228
"1.3.6.1.4.1.311.20.1": { "d": "autoEnrollCtlUsage", "c": "Microsoft" },
1199
1229
"1.3.6.1.4.1.311.20.2": { "d": "enrollCerttypeExtension", "c": "Microsoft CAPICOM certificate template, V1" },
1200
-
"1.3.6.1.4.1.311.20.2.1": { "d": "enrollmentAgent", "c": "Microsoft enhanced key usage" },
1201
-
"1.3.6.1.4.1.311.20.2.2": { "d": "smartcardLogon", "c": "Microsoft enhanced key usage" },
1202
-
"1.3.6.1.4.1.311.20.2.3": { "d": "universalPrincipalName", "c": "Microsoft UPN" },
1230
+
"1.3.6.1.4.1.311.20.2.1": { "d": "enrollmentAgent", "c": "Microsoft extended key usage" },
1231
+
"1.3.6.1.4.1.311.20.2.2": { "d": "smartcardLogon", "c": "Microsoft extended key usage" },
1232
+
"1.3.6.1.4.1.311.20.2.3": { "d": "userPrincipalName", "c": "Microsoft UPN" },
1203
1233
"1.3.6.1.4.1.311.20.3": { "d": "certManifold", "c": "Microsoft" },
1204
-
"1.3.6.1.4.1.311.21.1": { "d": "cAKeyCertIndexPair", "c": "Microsoft attribute. Also known as certsrvCaVersion" },
1234
+
"1.3.6.1.4.1.311.21.1": { "d": "cAKeyCertIndexPair", "c": "Microsoft attribute. Also assigned as certsrvCaVersion" },
1205
1235
"1.3.6.1.4.1.311.21.2": { "d": "certSrvPreviousCertHash", "c": "Microsoft" },
1206
1236
"1.3.6.1.4.1.311.21.3": { "d": "crlVirtualBase", "c": "Microsoft" },
1207
1237
"1.3.6.1.4.1.311.21.4": { "d": "crlNextPublish", "c": "Microsoft" },
···
1222
1252
"1.3.6.1.4.1.311.21.21": { "d": "encryptedKeyHash", "c": "Microsoft attribute" },
1223
1253
"1.3.6.1.4.1.311.21.22": { "d": "certsrvCrossCaVersion", "c": "Microsoft" },
1224
1254
"1.3.6.1.4.1.311.25.1": { "d": "ntdsReplication", "c": "Microsoft" },
1255
+
"1.3.6.1.4.1.311.25.2": { "d": "ntdsCASecurityExt", "c": "Microsoft" },
1256
+
"1.3.6.1.4.1.311.25.2.1": { "d": "ntdsObjectSID", "c": "Microsoft" },
1225
1257
"1.3.6.1.4.1.311.31.1": { "d": "productUpdate", "c": "Microsoft attribute" },
1226
1258
"1.3.6.1.4.1.311.47.1.1": { "d": "systemHealth", "c": "Microsoft extended key usage" },
1227
1259
"1.3.6.1.4.1.311.47.1.3": { "d": "systemHealthLoophole", "c": "Microsoft extended key usage" },
1228
1260
"1.3.6.1.4.1.311.60.1.1": { "d": "rootProgramFlags", "c": "Microsoft policy attribute" },
1229
-
"1.3.6.1.4.1.311.61.1.1": { "d": "kernelModeCodeSigning", "c": "Microsoft enhanced key usage" },
1261
+
"1.3.6.1.4.1.311.61.1.1": { "d": "kernelModeCodeSigning", "c": "Microsoft extended key usage" },
1230
1262
"1.3.6.1.4.1.311.60.2.1.1": { "d": "jurisdictionOfIncorporationL", "c": "Microsoft (???)" },
1231
1263
"1.3.6.1.4.1.311.60.2.1.2": { "d": "jurisdictionOfIncorporationSP", "c": "Microsoft (???)" },
1232
1264
"1.3.6.1.4.1.311.60.2.1.3": { "d": "jurisdictionOfIncorporationC", "c": "Microsoft (???)" },
···
1243
1275
"1.3.6.1.4.1.188.7.1.1.2": { "d": "ideaCBC", "c": "Ascom Systech" },
1244
1276
"1.3.6.1.4.1.188.7.1.1.3": { "d": "ideaCFB", "c": "Ascom Systech" },
1245
1277
"1.3.6.1.4.1.188.7.1.1.4": { "d": "ideaOFB", "c": "Ascom Systech" },
1278
+
"1.3.6.1.4.1.2363.3.2": { "d": "euroControlUntrustedEA", "c": "Eurocontrol certificate policy" },
1279
+
"1.3.6.1.4.1.2363.4.3": { "d": "euroControlEARootCA", "c": "Eurocontrol certificate policy" },
1280
+
"1.3.6.1.4.1.2363.4.3.1": { "d": "euroControlEABridgeCA", "c": "Eurocontrol certificate policy" },
1281
+
"1.3.6.1.4.1.2363.4.3.1.1": { "d": "euroControlEAIssuingCA", "c": "Eurocontrol certificate policy" },
1282
+
"1.3.6.1.4.1.2363.4.3.1.1.1": { "d": "euroControlEAClientCertificate", "c": "Eurocontrol certificate policy" },
1283
+
"1.3.6.1.4.1.2363.4.3.1.1.2": { "d": "euroControlEAServerCertificate", "c": "Eurocontrol certificate policy" },
1284
+
"1.3.6.1.4.1.2363.4.3.1.1.3": { "d": "euroControlEASWIMSigningCertificate", "c": "Eurocontrol certificate policy" },
1246
1285
"1.3.6.1.4.1.2428.10.1.1": { "d": "UNINETT policyIdentifier", "c": "UNINETT PCA" },
1247
1286
"1.3.6.1.4.1.2712.10": { "d": "ICE-TEL policyIdentifier", "c": "ICE-TEL CA" },
1248
1287
"1.3.6.1.4.1.2786.1.1.1": { "d": "ICE-TEL Italian policyIdentifier", "c": "ICE-TEL CA policy" },
···
1308
1347
"1.3.6.1.4.1.8301.3.5.1": { "d": "validityModelChain", "c": "TU Darmstadt ValidityModel" },
1309
1348
"1.3.6.1.4.1.8301.3.5.2": { "d": "validityModelShell", "c": "ValidityModel" },
1310
1349
"1.3.6.1.4.1.8231.1": { "d": "rolUnicoNacional", "c": "Chilean Government national unique roll number" },
1350
+
"1.3.6.1.4.1.11129.2.4.2": { "d": "googleSignedCertificateTimestamp", "c": "Google Certificate Transparency" },
1351
+
"1.3.6.1.4.1.11129.2.4.3": { "d": "googlePrecertificatePoison", "c": "Google Certificate Transparency" },
1352
+
"1.3.6.1.4.1.11129.2.4.4": { "d": "googlePrecertificateCA", "c": "Google Certificate Transparency" },
1353
+
"1.3.6.1.4.1.11129.2.4.5": { "d": "googleOcspSignedCertificateTimestamp", "c": "Google Certificate Transparency" },
1311
1354
"1.3.6.1.4.1.11591": { "d": "gnu", "c": "GNU Project (see https://www.gnupg.org/oids.html)" },
1312
1355
"1.3.6.1.4.1.11591.1": { "d": "gnuRadius", "c": "GNU Radius" },
1356
+
"1.3.6.1.4.1.11591.2.2.1": { "d": "gpgX509StandaloneCert", "c": "Cert is intentionally self-signed." },
1357
+
"1.3.6.1.4.1.11591.2.2.2": { "d": "gpgX509WellKnownPrivateKey", "c": "Mark cert as having a well known key" },
1358
+
"1.3.6.1.4.1.11591.2.2.10": { "d": "gpgX509PgpKdfKekParm", "c": "Description of ECC params" },
1359
+
"1.3.6.1.4.1.11591.2.3.1": { "d": "gpgCtPgpKeyblock", "c": "CMS ct for a binary PGP keyblock" },
1360
+
"1.3.6.1.4.1.11591.2.4.1.1": { "d": "gpgFingerprint", "c": "LDAP keyserver attribute" },
1361
+
"1.3.6.1.4.1.11591.2.4.1.2": { "d": "gpgSubFingerprint", "c": "LDAP keyserver attribute" },
1362
+
"1.3.6.1.4.1.11591.2.4.1.3": { "d": "gpgMailbox", "c": "LDAP keyserver attribute" },
1363
+
"1.3.6.1.4.1.11591.2.4.1.4": { "d": "gpgSubCertID", "c": "LDAP keyserver attribute" },
1364
+
"1.3.6.1.4.1.11591.2.5.1": { "d": "gpgNtds", "c": "LDAP URL ext, auth with current AD user" },
1365
+
"1.3.6.1.4.1.11591.2.6.1": { "d": "gpgX509PgpUseCert", "c": "X.509 encoded OpenPGP key usage" },
1366
+
"1.3.6.1.4.1.11591.2.6.2": { "d": "gpgX509PgpUseSign", "c": "X.509 encoded PGP key usage" },
1367
+
"1.3.6.1.4.1.11591.2.6.3": { "d": "gpgX509PgpUseEncr", "c": "X.509 encoded PGP key usage" },
1368
+
"1.3.6.1.4.1.11591.2.6.4": { "d": "gpgX509PgpUseAuth", "c": "X.509 encoded PGP key usage" },
1369
+
"1.3.6.1.4.1.11591.2.12242973": { "d": "gpgInvalidOid", "c": "0xBAD01D to indicate an invalid encoded OID" },
1313
1370
"1.3.6.1.4.1.11591.3": { "d": "gnuRadar", "c": "GNU Radar" },
1314
1371
"1.3.6.1.4.1.11591.4.11": { "d": "scrypt", "c": "GNU Generic Security Service" },
1315
1372
"1.3.6.1.4.1.11591.12": { "d": "gnuDigestAlgorithm", "c": "GNU digest algorithm" },
···
1341
1398
"1.3.6.1.4.1.23629.1.4.2.1.3": { "d": "safenetStartDate", "c": "SafeNet" },
1342
1399
"1.3.6.1.4.1.23629.1.4.2.1.4": { "d": "safenetAdminCert", "c": "SafeNet" },
1343
1400
"1.3.6.1.4.1.23629.1.4.2.2.1": { "d": "safenetKeyDigest", "c": "SafeNet" },
1401
+
"1.3.6.1.4.1.25054.3": { "d": "carillonSecurity", "c": "Carillon security" },
1402
+
"1.3.6.1.4.1.25054.3.1": { "d": "carillonCommercialPKI", "c": "Carillon security" },
1403
+
"1.3.6.1.4.1.25054.3.2": { "d": "carillonCommercialTSA", "c": "Carillon security" },
1404
+
"1.3.6.1.4.1.25054.3.3": { "d": "carillonCommercialSCVP", "c": "Carillon security" },
1405
+
"1.3.6.1.4.1.25054.3.3.1": { "d": "carillonSCVPExtendedStatusInfo", "c": "Carillon security" },
1406
+
"1.3.6.1.4.1.25054.3.4": { "d": "carillonCommercialCMS", "c": "Carillon security" },
1407
+
"1.3.6.1.4.1.25054.3.4.1": { "d": "carillonExtKeyUsageCIVCardAuth", "c": "Carillon security" },
1408
+
"1.3.6.1.4.1.25054.3.4.2": { "d": "carillonExtKeyUsageCIVContentSigning", "c": "Carillon security" },
1409
+
"1.3.6.1.4.1.25054.3.5": { "d": "carillonCommercialLSAP", "c": "Carillon security" },
1410
+
"1.3.6.1.4.1.25054.3.5.1": { "d": "carillonExtKeyUsageLSAPCodeSigning", "c": "Carillon security" },
1411
+
"1.3.6.1.4.1.25054.3.6": { "d": "carillonCommercialCE", "c": "Carillon security" },
1412
+
"1.3.6.1.4.1.25054.3.7": { "d": "carillonCommercialLicense", "c": "Carillon security" },
1413
+
"1.3.6.1.4.1.25054.3.7.1": { "d": "carillonExtKeyUsageLicenseSigning", "c": "Carillon security" },
1414
+
"1.3.6.1.4.1.25054.3.8": { "d": "carillonCommercialSecret", "c": "Carillon security" },
1344
1415
"1.3.6.1.4.1.51483.2.1": { "d": "hashOfRootKey", "c": "CTIA" },
1345
1416
"1.3.6.1.5.2.3.1": { "d": "authData", "c": "Kerberos" },
1346
1417
"1.3.6.1.5.2.3.2": { "d": "dHKeyData", "c": "Kerberos" },
···
1382
1453
"1.3.6.1.5.5.7.1.30": { "d": "manufacturerUsageDescriptionSigner", "c": "PKIX private extension" },
1383
1454
"1.3.6.1.5.5.7.1.31": { "d": "acmeIdentifier", "c": "PKIX private extension" },
1384
1455
"1.3.6.1.5.5.7.1.32": { "d": "masaURL", "c": "PKIX private extension" },
1456
+
"1.3.6.1.5.5.7.1.33": { "d": "enhancedJWTClaimConstraints", "c": "PKIX private extension" },
1457
+
"1.3.6.1.5.5.7.1.34": { "d": "nfTypes", "c": "PKIX private extension" },
1385
1458
"1.3.6.1.5.5.7.2": { "d": "policyQualifierIds", "c": "PKIX" },
1386
1459
"1.3.6.1.5.5.7.2.1": { "d": "cps", "c": "PKIX policy qualifier" },
1387
1460
"1.3.6.1.5.5.7.2.2": { "d": "unotice", "c": "PKIX policy qualifier" },
···
1423
1496
"1.3.6.1.5.5.7.3.32": { "d": "cmKGA", "c": "PKIX key purpose" },
1424
1497
"1.3.6.1.5.5.7.3.33": { "d": "rpcTLSClient", "c": "PKIX key purpose" },
1425
1498
"1.3.6.1.5.5.7.3.34": { "d": "rpcTLSServer", "c": "PKIX key purpose" },
1499
+
"1.3.6.1.5.5.7.3.35": { "d": "bundleSecurity", "c": "PKIX key purpose" },
1500
+
"1.3.6.1.5.5.7.3.36": { "d": "documentSigning", "c": "PKIX key purpose" },
1426
1501
"1.3.6.1.5.5.7.4": { "d": "cmpInformationTypes", "c": "PKIX" },
1427
1502
"1.3.6.1.5.5.7.4.1": { "d": "caProtEncCert", "c": "PKIX CMP information" },
1428
1503
"1.3.6.1.5.5.7.4.2": { "d": "signKeyPairTypes", "c": "PKIX CMP information" },
···
1468
1543
"1.3.6.1.5.5.7.6.26": { "d": "ecdhPopStaticSha256HmacSha256", "c": "PKIX algorithm" },
1469
1544
"1.3.6.1.5.5.7.6.27": { "d": "ecdhPopStaticSha384HmacSha384", "c": "PKIX algorithm" },
1470
1545
"1.3.6.1.5.5.7.6.28": { "d": "ecdhPopStaticSha512HmacSha512", "c": "PKIX algorithm" },
1546
+
"1.3.6.1.5.5.7.6.30": { "d": "rsaPssShake128", "c": "PKIX algorithm" },
1547
+
"1.3.6.1.5.5.7.6.31": { "d": "rsaPssShake256", "c": "PKIX algorithm" },
1548
+
"1.3.6.1.5.5.7.6.32": { "d": "ecdsaShake128", "c": "PKIX algorithm" },
1549
+
"1.3.6.1.5.5.7.6.33": { "d": "ecdsaShake256", "c": "PKIX algorithm" },
1471
1550
"1.3.6.1.5.5.7.7": { "d": "cmcControls", "c": "PKIX" },
1472
1551
"1.3.6.1.5.5.7.8": { "d": "otherNames", "c": "PKIX" },
1473
1552
"1.3.6.1.5.5.7.8.1": { "d": "personalData", "c": "PKIX other name" },
···
1475
1554
"1.3.6.1.5.5.7.8.3": { "d": "permanentIdentifier", "c": "PKIX other name" },
1476
1555
"1.3.6.1.5.5.7.8.5": { "d": "xmppAddr", "c": "PKIX other name" },
1477
1556
"1.3.6.1.5.5.7.8.6": { "d": "SIM", "c": "PKIX other name" },
1557
+
"1.3.6.1.5.5.7.8.7": { "d": "dnsSRV", "c": "PKIX other name" },
1558
+
"1.3.6.1.5.5.7.8.8": { "d": "naiRealm", "c": "PKIX other name" },
1559
+
"1.3.6.1.5.5.7.8.9": { "d": "smtpUTF8Mailbox", "c": "PKIX other name" },
1560
+
"1.3.6.1.5.5.7.8.10": { "d": "acpNodeName", "c": "PKIX other name" },
1561
+
"1.3.6.1.5.5.7.8.11": { "d": "bundleEID", "c": "PKIX other name" },
1478
1562
"1.3.6.1.5.5.7.9": { "d": "personalData", "c": "PKIX qualified certificates" },
1479
1563
"1.3.6.1.5.5.7.9.1": { "d": "dateOfBirth", "c": "PKIX personal data" },
1480
1564
"1.3.6.1.5.5.7.9.2": { "d": "placeOfBirth", "c": "PKIX personal data" },
···
1495
1579
"1.3.6.1.5.5.7.12.2": { "d": "pkiData", "c": "PKIX CMC Content Types" },
1496
1580
"1.3.6.1.5.5.7.12.3": { "d": "pkiResponse", "c": "PKIX CMC Content Types" },
1497
1581
"1.3.6.1.5.5.7.14.2": { "d": "resourceCertificatePolicy", "c": "PKIX policies" },
1498
-
"1.3.6.1.5.5.7.20": { "d": "logo", "c": "PKIX qualified certificates" },
1499
-
"1.3.6.1.5.5.7.20.1": { "d": "logoLoyalty", "c": "PKIX" },
1500
-
"1.3.6.1.5.5.7.20.2": { "d": "logoBackground", "c": "PKIX" },
1501
-
"1.3.6.1.5.5.7.48.1": { "d": "ocsp", "c": "PKIX" },
1582
+
"1.3.6.1.5.5.7.17": { "d": "scvpCheck", "c": "PKIX SCVP check" },
1583
+
"1.3.6.1.5.5.7.17.1": { "d": "scvpCheckBuildPath", "c": "SCVP" },
1584
+
"1.3.6.1.5.5.7.17.2": { "d": "scvpCheckBuildValidPath", "c": "SCVP" },
1585
+
"1.3.6.1.5.5.7.17.3": { "d": "scvpCheckBuildStatusCheckedPath", "c": "SCVP" },
1586
+
"1.3.6.1.5.5.7.17.4": { "d": "scvpCheckBuildAaPath", "c": "SCVP" },
1587
+
"1.3.6.1.5.5.7.17.5": { "d": "scvpCheckBuildValidAaPath", "c": "SCVP" },
1588
+
"1.3.6.1.5.5.7.17.6": { "d": "scvpCheckBuildStatusCheckedAaPath", "c": "SCVP" },
1589
+
"1.3.6.1.5.5.7.17.7": { "d": "scvpCheckStatusCheckAcAndBuildStatusCheckedAaPath", "c": "SCVP" },
1590
+
"1.3.6.1.5.5.7.18": { "d": "scvpWantBack", "c": "PKIX SCVP wantback" },
1591
+
"1.3.6.1.5.5.7.18.1": { "d": "scvpWantbackBestCertPath", "c": "SCVP wantback" },
1592
+
"1.3.6.1.5.5.7.18.2": { "d": "scvpWantbackRevocationInfo", "c": "SCVP wantback" },
1593
+
"1.3.6.1.5.5.7.18.4": { "d": "scvpWantbackPublicKeyInfo", "c": "SCVP wantback" },
1594
+
"1.3.6.1.5.5.7.18.5": { "d": "scvpWantbackAaCertPath", "c": "SCVP wantback" },
1595
+
"1.3.6.1.5.5.7.18.6": { "d": "scvpWantbackAaRevocationInfo", "c": "SCVP wantback" },
1596
+
"1.3.6.1.5.5.7.18.7": { "d": "scvpWantbackAcRevocationInfo", "c": "SCVP wantback" },
1597
+
"1.3.6.1.5.5.7.18.9": { "d": "scvpWantbackRelayedResponses", "c": "SCVP wantback" },
1598
+
"1.3.6.1.5.5.7.18.10": { "d": "scvpWantbackCert", "c": "SCVP wantback" },
1599
+
"1.3.6.1.5.5.7.18.11": { "d": "scvpWantbackAcCert", "c": "SCVP wantback" },
1600
+
"1.3.6.1.5.5.7.18.12": { "d": "scvpWantbackAllCertPaths", "c": "SCVP wantback" },
1601
+
"1.3.6.1.5.5.7.18.13": { "d": "scvpWantbackEeRevocationInfo", "c": "SCVP wantback" },
1602
+
"1.3.6.1.5.5.7.18.14": { "d": "scvpWantbackCAsRevocationInfo", "c": "SCVP wantback" },
1603
+
"1.3.6.1.5.5.7.19": { "d": "scvpValPolicy", "c": "SCVP validation policy" },
1604
+
"1.3.6.1.5.5.7.19.1": { "d": "scvpDefaultValPolicy", "c": "SCVP validation policy" },
1605
+
"1.3.6.1.5.5.7.19.2": { "d": "scvpNameValAlg", "c": "SCVP validation policy" },
1606
+
"1.3.6.1.5.5.7.19.2.1": { "d": "scvpNameErrorNameMismatch", "c": "SCVP validation policy" },
1607
+
"1.3.6.1.5.5.7.19.2.2": { "d": "scvpNameErrorNoName", "c": "SCVP validation policy" },
1608
+
"1.3.6.1.5.5.7.19.2.3": { "d": "scvpNameErrorUnknownAlg", "c": "SCVP validation policy" },
1609
+
"1.3.6.1.5.5.7.19.2.4": { "d": "scvpNameErrorBadName", "c": "SCVP validation policy" },
1610
+
"1.3.6.1.5.5.7.19.2.5": { "d": "scvpNameErrorBadNameType", "c": "SCVP validation policy" },
1611
+
"1.3.6.1.5.5.7.19.2.6": { "d": "scvpNameErrorMixedNames", "c": "SCVP validation policy" },
1612
+
"1.3.6.1.5.5.7.19.3": { "d": "scvpBasicValAlg", "c": "SCVP validation policy" },
1613
+
"1.3.6.1.5.5.7.19.3.1": { "d": "scvpValErrorExpired", "c": "SCVP validation policy error" },
1614
+
"1.3.6.1.5.5.7.19.3.2": { "d": "scvpValErrorNotYetValid", "c": "SCVP validation policy error" },
1615
+
"1.3.6.1.5.5.7.19.3.3": { "d": "scvpValErrorWrongTrustAnchor", "c": "SCVP validation policy error" },
1616
+
"1.3.6.1.5.5.7.19.3.4": { "d": "scvpValErrorNoValidCertPath", "c": "SCVP validation policy error" },
1617
+
"1.3.6.1.5.5.7.19.3.5": { "d": "scvpValErrorRevoked", "c": "SCVP validation policy error" },
1618
+
"1.3.6.1.5.5.7.19.3.9": { "d": "scvpValErrorInvalidKeyPurpose", "c": "SCVP validation policy error" },
1619
+
"1.3.6.1.5.5.7.19.3.10": { "d": "scvpValErrorInvalidKeyUsage", "c": "SCVP validation policy error" },
1620
+
"1.3.6.1.5.5.7.19.3.11": { "d": "scvpValErrorInvalidCertPolicy", "c": "SCVP validation policy error" },
1621
+
"1.3.6.1.5.5.7.20": { "d": "logo", "c": "Qualified Certificate" },
1622
+
"1.3.6.1.5.5.7.20.1": { "d": "logoLoyalty", "c": "Qualified Certificate" },
1623
+
"1.3.6.1.5.5.7.20.2": { "d": "logoBackground", "c": "Qualified Certificate" },
1624
+
"1.3.6.1.5.5.7.48.1": { "d": "ocsp", "c": "PKIX OCSP" },
1502
1625
"1.3.6.1.5.5.7.48.1.1": { "d": "ocspBasic", "c": "OCSP" },
1503
1626
"1.3.6.1.5.5.7.48.1.2": { "d": "ocspNonce", "c": "OCSP" },
1504
1627
"1.3.6.1.5.5.7.48.1.3": { "d": "ocspCRL", "c": "OCSP" },
···
1561
1684
"1.3.14.7.2.1.1": { "d": "ElGamal", "c": "Unsure about this OID" },
1562
1685
"1.3.14.7.2.3.1": { "d": "md2WithRSA", "c": "Unsure about this OID" },
1563
1686
"1.3.14.7.2.3.2": { "d": "md2WithElGamal", "c": "Unsure about this OID" },
1687
+
"1.3.18.0.2.18.1": { "d": "hostIDMapping", "c": "IBM RACF ID mapping" },
1688
+
"1.3.27.16": { "d": "icaoSecurity", "c": "ICAO security" },
1689
+
"1.3.27.16.0": { "d": "icaoSecurity", "c": "ICAO security test?" },
1690
+
"1.3.27.16.0.1.1.1.1.1.1.0": { "d": "icaoTestValidationPolicy", "c": "ICAO security test?" },
1691
+
"1.3.27.16.1": { "d": "icaoCertPolicy", "c": "ICAO certificate policies" },
1692
+
"1.3.27.16.1.2": { "d": "icaoIATFRootCA", "c": "ICAO certificate policies" },
1693
+
"1.3.27.16.1.2.0.1": { "d": "icaoIdentityAssurance", "c": "ICAO certificate policies" },
1694
+
"1.3.27.16.1.2.0.1.1": { "d": "icaoIdentityAssuranceLow", "c": "ICAO certificate policies" },
1695
+
"1.3.27.16.1.2.0.1.2": { "d": "icaoIdentityAssuranceLowDevice", "c": "ICAO certificate policies" },
1696
+
"1.3.27.16.1.2.0.1.3": { "d": "icaoIdentityAssuranceLowTSPMediated", "c": "ICAO certificate policies" },
1697
+
"1.3.27.16.1.2.0.1.4": { "d": "icaoIdentityAssuranceMedium", "c": "ICAO certificate policies" },
1698
+
"1.3.27.16.1.2.0.1.5": { "d": "icaoIdentityAssuranceMediumDevice", "c": "ICAO certificate policies" },
1699
+
"1.3.27.16.1.2.0.1.6": { "d": "icaoIdentityAssuranceMediumTSPMediated", "c": "ICAO certificate policies" },
1700
+
"1.3.27.16.1.2.0.1.7": { "d": "icaoIdentityAssuranceMediumHardware", "c": "ICAO certificate policies" },
1701
+
"1.3.27.16.1.2.0.1.8": { "d": "icaoIdentityAssuranceMediumDeviceHardware", "c": "ICAO certificate policies" },
1702
+
"1.3.27.16.1.2.0.1.9": { "d": "icaoIdentityAssuranceHigh", "c": "ICAO certificate policies" },
1703
+
"1.3.27.16.1.2.0.1.10": { "d": "icaoIdentityAssuranceHighCardAuth", "c": "ICAO certificate policies" },
1704
+
"1.3.27.16.1.2.0.1.11": { "d": "icaoIdentityAssuranceHighContentSigning", "c": "ICAO certificate policies" },
1705
+
"1.3.27.16.1.2.1": { "d": "icaoIATFBridgeCA", "c": "ICAO certificate policies" },
1706
+
"1.3.27.16.1.2.1.0": { "d": "icaoCAODRootCA", "c": "ICAO certificate policies" },
1707
+
"1.3.27.16.1.2.1.1": { "d": "icaoCAODBridgeCA", "c": "ICAO certificate policies" },
1708
+
"1.3.27.16.1.2.1.1.1": { "d": "icaoUSBridgeCA", "c": "ICAO certificate policies" },
1709
+
"1.3.27.16.1.2.1.1.1.1": { "d": "icaoFAARootCA", "c": "ICAO certificate policies" },
1710
+
"1.3.27.16.1.2.1.1.1.1.1": { "d": "icaoFAAIssuingCA", "c": "ICAO certificate policies" },
1711
+
"1.3.27.16.1.2.1.1.1.1.1.1": { "d": "icaoFAAClientCertificate", "c": "ICAO certificate policies" },
1712
+
"1.3.27.16.1.2.1.1.1.1.1.2": { "d": "icaoFAAServerCertificate", "c": "ICAO certificate policies" },
1713
+
"1.3.27.16.1.2.1.1.1.1.1.3": { "d": "icaoFAASWIMSigningCertificate", "c": "ICAO certificate policies" },
1714
+
"1.3.27.16.1.4.1.1": { "d": "icaoSWIMSigning", "c": "ICAO extended key usage" },
1564
1715
"1.3.36.1": { "d": "document", "c": "Teletrust document" },
1565
1716
"1.3.36.1.1": { "d": "finalVersion", "c": "Teletrust document" },
1566
1717
"1.3.36.1.2": { "d": "draft", "c": "Teletrust document" },
···
1782
1933
"1.3.132.0.37": { "d": "sect409r1", "c": "SECG (Certicom) named elliptic curve" },
1783
1934
"1.3.132.0.38": { "d": "sect571k1", "c": "SECG (Certicom) named elliptic curve" },
1784
1935
"1.3.132.0.39": { "d": "sect571r1", "c": "SECG (Certicom) named elliptic curve" },
1936
+
"1.3.132.1.11.0": { "d": "ecdhX963KDF-SHA224", "c": "SECG (Certicom) elliptic curve key agreement" },
1785
1937
"1.3.132.1.11.1": { "d": "ecdhX963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" },
1786
1938
"1.3.132.1.11.2": { "d": "ecdhX963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" },
1787
1939
"1.3.132.1.11.3": { "d": "ecdhX963KDF-SHA512", "c": "SECG (Certicom) elliptic curve key agreement" },
1940
+
"1.3.132.1.14.0": { "d": "eccofactordhX963KDF-SHA224", "c": "SECG (Certicom) elliptic curve key agreement" },
1941
+
"1.3.132.1.14.1": { "d": "eccofactordhX963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" },
1942
+
"1.3.132.1.14.2": { "d": "eccofactordhX963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" },
1943
+
"1.3.132.1.14.3": { "d": "eccofactordhX963KDF-SHA512", "c": "SECG (Certicom) elliptic curve key agreement" },
1944
+
"1.3.132.1.15.0": { "d": "ecmqv-X963KDF-SHA224", "c": "SECG (Certicom) elliptic curve key agreement" },
1945
+
"1.3.132.1.15.1": { "d": "ecmqv-X963KDF-SHA256", "c": "SECG (Certicom) elliptic curve key agreement" },
1946
+
"1.3.132.1.15.2": { "d": "ecmqv-X963KDF-SHA384", "c": "SECG (Certicom) elliptic curve key agreement" },
1947
+
"1.3.132.1.15.3": { "d": "ecmqv-X963KDF-SHA512", "c": "SECG (Certicom) elliptic curve key agreement" },
1788
1948
"1.3.133.16.840.9.44": { "d": "x944", "c": "X9.44" },
1789
1949
"1.3.133.16.840.9.44.1": { "d": "x944Components", "c": "X9.44" },
1790
1950
"1.3.133.16.840.9.44.1.1": { "d": "x944Kdf2", "c": "X9.44" },
···
1837
1997
"1.3.133.16.840.9.84.4.1.16": { "d": "ibiaOwnerA3Vision", "c": "X9.84 IBIA Format Owner" },
1838
1998
"1.3.133.16.840.9.84.4.1.17": { "d": "ibiaOwnerNEC", "c": "X9.84 IBIA Format Owner" },
1839
1999
"1.3.133.16.840.9.84.4.1.18": { "d": "ibiaOwnerSTMicroelectronics", "c": "X9.84 IBIA Format Owner" },
2000
+
"1.3.158.36061701.0.0.0.1.2.2": { "d": "qcpSK", "c": "Slovakia Qualified Electronic Signature policies" },
1840
2001
"2.5.4.0": { "d": "objectClass", "c": "X.520 DN component" },
1841
2002
"2.5.4.1": { "d": "aliasedEntryName", "c": "X.520 DN component" },
1842
2003
"2.5.4.2": { "d": "knowledgeInformation", "c": "X.520 DN component" },
···
2050
2211
"2.5.29.67": { "d": "allowedAttAss", "c": "X.509 extension" },
2051
2212
"2.5.29.68": { "d": "attributeMappings", "c": "X.509 extension" },
2052
2213
"2.5.29.69": { "d": "holderNameConstraints", "c": "X.509 extension" },
2214
+
"2.16.578.1.26.1.3.1": { "d": "privateKeySmartCard", "c": "Norway Buypass CA policy" },
2215
+
"2.16.578.1.26.1.3.2": { "d": "privateKeySoftToken", "c": "Norway Buypass CA policy" },
2216
+
"2.16.578.1.26.1.3.3": { "d": "sslEvident. Also assigned as BuyPass EV policy", "c": "Norway Buypass CA policy" },
2217
+
"2.16.578.1.26.1.3.4": { "d": "sslBusinessPlus", "c": "Norway Buypass CA policy" },
2218
+
"2.16.578.1.26.1.3.5": { "d": "privateKeyHardToken", "c": "Norway Buypass CA policy" },
2219
+
"2.16.578.1.26.1.3.6": { "d": "privateKeyHSM", "c": "Norway Buypass CA policy" },
2053
2220
"2.16.724.1.2.2.4.1": { "d": "personalDataInfo", "c": "Spanish Government PKI?" },
2054
2221
"2.16.840.1.101.2.1.1.1": { "d": "sdnsSignatureAlgorithm", "c": "SDN.700 INFOSEC algorithms" },
2055
2222
"2.16.840.1.101.2.1.1.2": { "d": "fortezzaSignatureAlgorithm", "c": "SDN.700 INFOSEC algorithms. Formerly known as mosaicSignatureAlgorithm, this OID is better known as dsaWithSHA-1." },
···
2485
2652
"2.23.43.1.4.6": { "d": "wTLS-ECC-curve6", "c": "WAP WTLS" },
2486
2653
"2.23.43.1.4.8": { "d": "wTLS-ECC-curve8", "c": "WAP WTLS" },
2487
2654
"2.23.43.1.4.9": { "d": "wTLS-ECC-curve9", "c": "WAP WTLS" },
2488
-
"2.23.133": { "d": "tCPA", "c": "TCPA" },
2489
-
"2.23.133.1": { "d": "tcpaSpecVersion", "c": "TCPA" },
2490
-
"2.23.133.2": { "d": "tcpaAttribute", "c": "TCPA" },
2491
-
"2.23.133.2.1": { "d": "tcpaTpmManufacturer", "c": "TCPA Attribute" },
2492
-
"2.23.133.2.2": { "d": "tcpaTpmModel", "c": "TCPA Attribute" },
2493
-
"2.23.133.2.3": { "d": "tcpaTpmVersion", "c": "TCPA Attribute" },
2494
-
"2.23.133.2.4": { "d": "tcpaPlatformManufacturer", "c": "TCPA Attribute" },
2495
-
"2.23.133.2.5": { "d": "tcpaPlatformModel", "c": "TCPA Attribute" },
2496
-
"2.23.133.2.6": { "d": "tcpaPlatformVersion", "c": "TCPA Attribute" },
2497
-
"2.23.133.2.7": { "d": "tcpaComponentManufacturer", "c": "TCPA Attribute" },
2498
-
"2.23.133.2.8": { "d": "tcpaComponentModel", "c": "TCPA Attribute" },
2499
-
"2.23.133.2.9": { "d": "tcpaComponentVersion", "c": "TCPA Attribute" },
2500
-
"2.23.133.2.10": { "d": "tcpaSecurityQualities", "c": "TCPA Attribute" },
2501
-
"2.23.133.2.11": { "d": "tcpaTpmProtectionProfile", "c": "TCPA Attribute" },
2502
-
"2.23.133.2.12": { "d": "tcpaTpmSecurityTarget", "c": "TCPA Attribute" },
2503
-
"2.23.133.2.13": { "d": "tcpaFoundationProtectionProfile", "c": "TCPA Attribute" },
2504
-
"2.23.133.2.14": { "d": "tcpaFoundationSecurityTarget", "c": "TCPA Attribute" },
2505
-
"2.23.133.2.15": { "d": "tcpaTpmIdLabel", "c": "TCPA Attribute" },
2506
-
"2.23.133.3": { "d": "tcpaProtocol", "c": "TCPA" },
2507
-
"2.23.133.3.1": { "d": "tcpaPrttTpmIdProtocol", "c": "TCPA Protocol" },
2655
+
"2.23.133": { "d": "tCPA", "c": "TCPA/TCG" },
2656
+
"2.23.133.1": { "d": "tcgSpecVersion", "c": "TCPA/TCG" },
2657
+
"2.23.133.2": { "d": "tcgAttribute", "c": "TCPA/TCG" },
2658
+
"2.23.133.2.1": { "d": "tcgTpmManufacturer", "c": "TCPA/TCG Attribute" },
2659
+
"2.23.133.2.2": { "d": "tcgTpmModel", "c": "TCPA/TCG Attribute" },
2660
+
"2.23.133.2.3": { "d": "tcgTpmVersion", "c": "TCPA/TCG Attribute" },
2661
+
"2.23.133.2.4": { "d": "tcgPlatformManufacturer", "c": "TCPA/TCG Attribute" },
2662
+
"2.23.133.2.5": { "d": "tcgPlatformModel", "c": "TCPA/TCG Attribute" },
2663
+
"2.23.133.2.6": { "d": "tcgPlatformVersion", "c": "TCPA/TCG Attribute" },
2664
+
"2.23.133.2.7": { "d": "tcgComponentManufacturer", "c": "TCPA/TCG Attribute" },
2665
+
"2.23.133.2.8": { "d": "tcgComponentModel", "c": "TCPA/TCG Attribute" },
2666
+
"2.23.133.2.9": { "d": "tcgComponentVersion", "c": "TCPA/TCG Attribute" },
2667
+
"2.23.133.2.10": { "d": "tcgSecurityQualities", "c": "TCPA/TCG Attribute" },
2668
+
"2.23.133.2.11": { "d": "tcgTpmProtectionProfile", "c": "TCPA/TCG Attribute" },
2669
+
"2.23.133.2.12": { "d": "tcgTpmSecurityTarget", "c": "TCPA/TCG Attribute" },
2670
+
"2.23.133.2.13": { "d": "tcgFoundationProtectionProfile", "c": "TCPA/TCG Attribute" },
2671
+
"2.23.133.2.14": { "d": "tcgFoundationSecurityTarget", "c": "TCPA/TCG Attribute" },
2672
+
"2.23.133.2.15": { "d": "tcgTpmIdLabel", "c": "TCPA/TCG Attribute" },
2673
+
"2.23.133.2.16": { "d": "tcgTpmSpecification", "c": "TCPA/TCG Attribute" },
2674
+
"2.23.133.2.18": { "d": "tcgTpmSecurityAssertions", "c": "TCPA/TCG Attribute" },
2675
+
"2.23.133.3": { "d": "tcgProtocol", "c": "TCPA/TCG" },
2676
+
"2.23.133.3.1": { "d": "tcgPrttTpmIdProtocol", "c": "TCPA/TCG Protocol" },
2677
+
"2.23.133.8.1": { "d": "tcgEKCertificate", "c": "TCPA/TCG Key Usage" },
2678
+
"2.23.133.10.1.1.1": { "d": "tcgObject", "c": "TCPA/TCG Object" },
2508
2679
"2.23.134.1.4.2.1": { "d": "postSignumRootQCA", "c": "PostSignum CA" },
2509
2680
"2.23.134.1.2.2.3": { "d": "postSignumPublicCA", "c": "PostSignum CA" },
2510
2681
"2.23.134.1.2.1.8.210": { "d": "postSignumCommercialServerPolicy", "c": "PostSignum CA" },
2511
2682
"2.23.136.1.1.1": { "d": "mRTDSignatureData", "c": "ICAO MRTD" },
2683
+
"2.23.140.1.1": { "d": "evGuidelines", "c": "CAB Certificate Policies" },
2684
+
"2.23.140.1.2.1": { "d": "domainValidated", "c": "CAB Certificate Policies" },
2685
+
"2.23.140.1.2.2": { "d": "subjectIdentityValidated", "c": "CAB Certificate Policies" },
2686
+
"2.23.140.1.4.1": { "d": "codeSigningRequirements", "c": "CAB Certificate Policies" },
2512
2687
"2.54.1775.2": { "d": "hashedRootKey", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true },
2513
2688
"2.54.1775.3": { "d": "certificateType", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true },
2514
2689
"2.54.1775.4": { "d": "merchantData", "c": "SET. Deprecated, use (2 23 42 7 0) instead", "w": true },
···
2521
2696
"1.3.6.1.4.1.34697.2.2": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Networking" },
2522
2697
"1.3.6.1.4.1.34697.2.3": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Premium" },
2523
2698
"1.3.6.1.4.1.34697.2.4": { "d": "AffirmTrust EV policy", "c": "AffirmTrust Premium ECC" },
2524
-
"2.16.578.1.26.1.3.3": { "d": "BuyPass EV policy", "c": "BuyPass Class 3 EV" },
2525
2699
"1.3.6.1.4.1.17326.10.14.2.1.2": { "d": "Camerfirma EV policy", "c": "Camerfirma CA Root" },
2526
2700
"1.3.6.1.4.1.17326.10.8.12.1.2": { "d": "Camerfirma EV policy", "c": "Camerfirma CA Root" },
2527
2701
"1.3.6.1.4.1.22234.2.5.2.3.1": { "d": "CertPlus EV policy", "c": "CertPlus Class 2 Primary CA (formerly Keynectis)" },
···
2548
2722
"1.3.6.1.4.1.40869.1.1.22.3": { "d": "TWCA EV policy", "c": "TWCA Root Certification Authority" },
2549
2723
"2.16.840.1.113733.1.7.23.6": { "d": "VeriSign EV policy", "c": "VeriSign Class 3 Public Primary Certification Authority" },
2550
2724
"2.16.840.1.114171.500.9": { "d": "Wells Fargo EV policy", "c": "Wells Fargo WellsSecure Public Root Certificate Authority" },
2551
-
"END": ""
2552
-
};});
2725
+
};
+55
-41
package.json
+55
-41
package.json
···
1
1
{
2
2
"name": "@lapo/asn1js",
3
-
"version": "1.2.4",
3
+
"version": "2.1.0",
4
4
"description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.",
5
+
"type": "module",
5
6
"main": "asn1.js",
6
7
"repository": {
7
8
"type": "git",
8
9
"url": "git+https://github.com/lapo-luchini/asn1js.git"
9
10
},
10
-
"keywords": [ "asn1", "ber", "der", "pem" ],
11
+
"keywords": [
12
+
"asn1",
13
+
"ber",
14
+
"der",
15
+
"pem"
16
+
],
11
17
"author": "Lapo Luchini <lapo@lapo.it>",
12
18
"license": "ISC",
13
-
"bugs": { "url": "https://github.com/lapo-luchini/asn1js/issues" },
19
+
"bugs": {
20
+
"url": "https://github.com/lapo-luchini/asn1js/issues"
21
+
},
14
22
"homepage": "https://lapo.it/asn1js/",
15
-
"files": [ "asn1.js", "base64.js", "hex.js", "int10.js", "oids.js" ],
16
-
"scripts" : {
17
-
"lint" : "npx eslint asn1.js base64.js hex.js int10.js oids.js parseRFC.js dumpASN1.js",
18
-
"test" : "node test"
23
+
"files": [
24
+
"asn1.js",
25
+
"base64.js",
26
+
"hex.js",
27
+
"int10.js",
28
+
"dom.js",
29
+
"defs.js",
30
+
"oids.js",
31
+
"rfcdef.js",
32
+
"dumpASN1.js"
33
+
],
34
+
"scripts": {
35
+
"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",
36
+
"lint-action": "npx @action-validator/cli .github/workflows/node.js.yml",
37
+
"build": "vite build",
38
+
"serve": "npx -p local-web-server ws",
39
+
"test": "node test",
40
+
"testdefs": "node testDefs"
19
41
},
20
-
"eslintConfig": {
21
-
"env": {
22
-
"amd": true,
23
-
"browser": true,
24
-
"node": true
25
-
},
26
-
"extends": [ "eslint:recommended" ],
27
-
"globals": {
28
-
"Uint8Array": "readonly"
29
-
},
30
-
"rules": {
31
-
"strict": [ "error", "function" ],
32
-
"indent": [ "error", 4, { "ignoredNodes": [ "Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement > ExpressionStatement[directive='use strict']:first-child" ] } ],
33
-
"linebreak-style": [ "error", "unix" ],
34
-
"semi": [ "warn", "always" ],
35
-
"comma-dangle": [ "error", "never" ]
36
-
},
37
-
"overrides": [
38
-
{
39
-
"files": [ "test.js", "parseRFC.js", "dumpASN1.js" ],
40
-
"parserOptions": {
41
-
"ecmaVersion": 2021
42
-
},
43
-
"rules": {
44
-
"strict": [ "error", "global" ],
45
-
"comma-dangle": [ "error", "always-multiline" ]
46
-
}
47
-
}, {
48
-
"files": [ "oids.js" ],
49
-
"rules": {
50
-
"indent": "off"
51
-
}
52
-
}
53
-
]
42
+
"bin": {
43
+
"dumpASN1": "./dumpASN1.js"
44
+
},
45
+
"engines": {
46
+
"node": ">=14.6.0"
47
+
},
48
+
"packageManager": "pnpm@7.33.7",
49
+
"devDependencies": {
50
+
"@eslint/eslintrc": "^3.3.1",
51
+
"@eslint/js": "^9.32.0",
52
+
"@rollup/wasm-node": "^4.46.2",
53
+
"diff": "^8.0.2",
54
+
"eslint": "^9.32.0",
55
+
"globals": "^16.3.0",
56
+
"htmlparser2": "^9.1.0",
57
+
"vite": "^5.4.19",
58
+
"vite-plugin-dom": "^1.0.4",
59
+
"vite-plugin-singlefile": "^2.3.0"
60
+
},
61
+
"overrides": {
62
+
"rollup": "npm:@rollup/wasm-node"
63
+
},
64
+
"pnpm": {
65
+
"overrides": {
66
+
"rollup": "npm:@rollup/wasm-node"
67
+
}
54
68
}
55
69
}
+491
-389
parseRFC.js
+491
-389
parseRFC.js
···
1
1
#! /usr/bin/env node
2
-
'use strict';
2
+
3
+
// RFC ASN.1 definition parser
4
+
// Copyright (c) 2021 Lapo Luchini <lapo@lapo.it>
5
+
6
+
// Permission to use, copy, modify, and/or distribute this software for any
7
+
// purpose with or without fee is hereby granted, provided that the above
8
+
// copyright notice and this permission notice appear in all copies.
9
+
//
10
+
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
+
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
+
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
+
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
+
18
+
import * as fs from 'node:fs';
3
19
4
20
const
5
-
fs = require('fs'),
6
21
patches = { // to fix some known RFCs' ASN.1 syntax errors
7
22
0: [
8
23
[ /\n\n[A-Z].*\n\f\n[A-Z].*\n\n/g, '' ], // page change
···
13
28
[ /SIGNED \{ (SEQUENCE \{[^}]+\})\s*\}/g, 'SEQUENCE { toBeSigned $1, algorithm AlgorithmIdentifier, signature BIT STRING }' ],
14
29
[ /EXTENSION\.&[^,]+/g, 'OBJECT IDENTIFIER'],
15
30
],
31
+
2986: [ // currently unsupported
32
+
[ /FROM (InformationFramework|AuthenticationFramework) [a-zA-Z]+/g, 'FROM $1 {joint-iso-itu-t(2) ds(5) module(1) usefulDefinitions(0) 3}' ],
33
+
[ /[(]v1,[^)]+[)]/g, '' ],
34
+
[ /[{][{][^}]+[}][}]/g, '' ],
35
+
[ 'SubjectPublicKeyInfo {ALGORITHM: IOSet}', 'SubjectPublicKeyInfo' ],
36
+
[ /PKInfoAlgorithms ALGORITHM ::=[^}]+[}]/g, '' ],
37
+
[ /(Attributes?) [{] ATTRIBUTE:IOSet [}]/g, '$1' ],
38
+
[ /CRIAttributes +ATTRIBUTE +::=[^}]+[}]/g, '' ],
39
+
[ /[A-Z]+[.]&id[(][{]IOSet[}][)]/g, 'OBJECT IDENTIFIER' ],
40
+
[ /[A-Z]+[.]&Type[(][{]IOSet[}][{]@[a-z]+[}][)]/g, 'ANY' ],
41
+
[ /(AlgorithmIdentifier) [{]ALGORITHM:IOSet [}]/g, '$1' ],
42
+
[ /SignatureAlgorithms ALGORITHM ::=[^}]+[}]/g, '' ],
43
+
],
16
44
3161: [ // actual syntax errors
17
45
[ /--.*}/g, '}' ],
18
46
[ /^( +)--.*\n(?:\1 .*\n)+/mg, '' ],
19
47
[ /addInfoNotAvailable \(17\)/g, '$&,' ],
20
48
],
49
+
5208: [ // currently unsupported
50
+
[ 'FROM InformationFramework informationFramework', 'FROM InformationFramework {joint-iso-itu-t(2) ds(5) module(1) usefulDefinitions(0) 3}' ],
51
+
[ ' {{PrivateKeyAlgorithms}}', '' ],
52
+
[ 'Version ::= INTEGER {v1(0)} (v1,...)', 'Version ::= INTEGER {v1(0)}' ],
53
+
[ ' {{KeyEncryptionAlgorithms}}', '' ],
54
+
[ /\.\.\. -- For local profiles/g, '' ],
55
+
],
21
56
5280: [ // currently unsupported
22
57
[ 'videotex (8) } (0..ub-integer-options)', 'videotex (8) }' ],
23
58
[ /OBJECT IDENTIFIER \( id-qt-cps \| id-qt-unotice \)/g, 'OBJECT IDENTIFIER' ],
24
59
],
60
+
4210: [
61
+
[ /^\s+-- .*\r?\n/mg, '' ], // comments
62
+
],
63
+
8017: [ // this RFC uses a lot of currently unsupported syntax
64
+
[ /ALGORITHM-IDENTIFIER ::= CLASS[^-]+--/, '--' ],
65
+
[ /\n +\S+ +ALGORITHM-IDENTIFIER[^\n]+(\n {6}[^\n]+)+\n {3}[}]/g, '' ],
66
+
[ /AlgorithmIdentifier [{] ALGORITHM-IDENTIFIER:InfoObjectSet [}] ::=(\n {6}[^\n]+)+\n {3}[}]/, 'AlgorithmIdentifier ::= ANY'],
67
+
[ /algorithm +id-[^,\n]+,/g, 'algorithm ANY,' ],
68
+
[ / (sha1 {4}HashAlgorithm|mgf1SHA1 {4}MaskGenAlgorithm|pSpecifiedEmpty {4}PSourceAlgorithm|rSAES-OAEP-Default-Identifier {4}RSAES-AlgorithmIdentifier|rSASSA-PSS-Default-Identifier {4}RSASSA-AlgorithmIdentifier) ::= [{](\n( {6}[^\n]+)?)+\n {3}[}]/g, '' ],
69
+
[ / ::= AlgorithmIdentifier [{]\s+[{][^}]+[}]\s+[}]/g, ' ::= AlgorithmIdentifier' ],
70
+
[ /OCTET STRING[(]SIZE[(]0..MAX[)][)]/g, 'OCTET STRING' ],
71
+
[ /emptyString {4}EncodingParameters ::= ''H/g, '' ],
72
+
[ /[(]CONSTRAINED BY[^)]+[)]/g, '' ],
73
+
],
74
+
4511: [
75
+
[ /^\s+-- .*\r?\n/mg, '' ], // comments
76
+
[ 'EXTENSIBILITY IMPLIED', '' ],
77
+
[ /\.\.\.(,| {2})/g, '' ],
78
+
[ /value AttributeValue/g, 'AttributeValue' ],
79
+
[ /control Control/g, 'Control' ],
80
+
[ /Attribute ::= PartialAttribute\(WITH COMPONENTS \{[^}]+\}\)/g, 'PartialAttribute ::= SEQUENCE { type AttributeDescription, vals SET SIZE (1..MAX) OF AttributeValue }' ],
81
+
[ /,\s+\}/g, '}' ],
82
+
[ /SaslCredentials,/g, 'SaslCredentials' ],
83
+
[ /(BindResponse|ExtendedResponse) ::= \[APPLICATION [0-9]+\] SEQUENCE \{[^}]+\}/g, '$1 ::= ANY' ],
84
+
[ /selector LDAPString/g, 'LDAPString' ],
85
+
[ /filter Filter/g, 'Filter' ],
86
+
[ /MatchingRuleAssertion,/g, 'MatchingRuleAssertion' ],
87
+
[ /OF substring CHOICE/g, 'OF CHOICE' ],
88
+
[ /partialAttribute PartialAttribute/g, 'PartialAttribute' ],
89
+
[ /uri URI/g, 'URI' ],
90
+
[ /OF change SEQUENCE/g, 'OF SEQUENCE' ],
91
+
[ /attribute Attribute/g, 'Attribute' ],
92
+
],
25
93
};
26
94
27
-
let asn1;
28
-
let currentMod;
29
-
30
-
function Parser(enc, pos) {
31
-
this.enc = enc;
32
-
this.pos = pos;
33
-
this.start = pos;
34
-
}
35
-
Parser.prototype.getChar = function (pos) {
36
-
if (pos === undefined)
37
-
pos = this.pos++;
38
-
if (pos >= this.enc.length)
39
-
throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length;
40
-
return this.enc.charAt(pos);
41
-
};
42
-
Parser.prototype.exception = function (s, pos) {
43
-
if (pos == undefined) pos = this.pos;
44
-
let from = Math.max(pos - 30, this.start);
45
-
let to = Math.min(pos + 30, this.enc.length);
46
-
let ctx = '';
47
-
let arrow = '';
48
-
let i = from;
49
-
for (; i < pos; ++i) {
50
-
ctx += this.getChar(i);
51
-
arrow += ' ';
52
-
}
53
-
ctx += this.getChar(i++);
54
-
arrow += '^';
55
-
for (; i < to; ++i)
56
-
ctx += this.getChar(i);
57
-
throw new Error('[position ' + pos + '] ' + s + '\n' + ctx.replace(/\s/g, ' ') + '\n' + arrow);
58
-
};
59
-
Parser.prototype.peek = function () {
60
-
return (typeof this.enc == "string") ? this.enc.charCodeAt(this.pos) : this.enc[this.pos];
61
-
};
62
-
Parser.prototype.peekChar = function () {
63
-
return (typeof this.enc == "string") ? this.enc.charAt(this.pos) : String.fromCharCode(this.enc[this.pos]);
64
-
};
65
-
Parser.prototype.isWhitespace = function () {
66
-
let c = this.peekChar();
67
-
return c == ' ' || c == '\n';
68
-
};
69
-
Parser.prototype.isDigit = function () {
70
-
let c = this.peekChar();
71
-
return c >= '0' && c <= '9';
72
-
};
73
95
// const reWhitespace = /(?:\s|--(?:[}-]?[^\n}-])*(?:\n|--))*/y;
74
96
const reWhitespace = /(?:\s|--(?:-?[^\n-])*(?:\n|--))*/my;
75
-
Parser.prototype.skipWhitespace = function () {
76
-
reWhitespace.lastIndex = this.pos;
77
-
let s = reWhitespace.exec(this.enc);
78
-
if (s)
79
-
this.pos = reWhitespace.lastIndex;
80
-
};
81
-
// DefStream.prototype.eat = function (str) {
82
-
// for (let i = 0; i < str.length; ++i) {
83
-
// let c = this.getChar();
84
-
// if (c != str.charAt(i))
85
-
// throw new Error("Found '" + c + "', was expecting '" + str.charAt(i) + "'");
86
-
// }
87
-
// };
88
-
Parser.prototype.getRegEx = function (type, re) {
89
-
this.skipWhitespace();
90
-
re.lastIndex = this.pos;
91
-
let s = re.exec(this.enc); //TODO: does not work with typed arrays
92
-
if (!s)
93
-
this.exception("Found '" + this.peekChar() + "', was expecting a " + type);
94
-
s = s[0];
95
-
// console.log('[debug] getRexEx@' + this.pos + ' = ' + s);
96
-
this.pos = re.lastIndex;
97
-
this.skipWhitespace();
98
-
return s;
99
-
};
100
97
const reIdentifier = /[a-zA-Z](?:[-]?[a-zA-Z0-9])*/y;
101
-
Parser.prototype.parseIdentifier = function () {
102
-
let id = this.getRegEx('identifier', reIdentifier);
103
-
// console.log('[debug] parseIdentifier = ' + id);
104
-
return id;
105
-
};
106
98
const reNumber = /0|[1-9][0-9]*/y;
107
-
Parser.prototype.parseNumber = function () {
108
-
let id = this.getRegEx('number', reNumber);
109
-
// console.log('[debug] parseNumber = ' + id);
110
-
return id;
111
-
};
112
99
const reToken = /[(){},[\];]|::=|OPTIONAL|DEFAULT|NULL|TRUE|FALSE|\.\.|OF|SIZE|MIN|MAX|DEFINED BY|DEFINITIONS|TAGS|BEGIN|EXPORTS|IMPORTS|FROM|END/y;
113
-
Parser.prototype.parseToken = function () {
114
-
let tok = this.getRegEx('token', reToken);
115
-
return tok;
116
-
};
117
-
Parser.prototype.tryToken = function (expect) {
118
-
let p = this.pos;
119
-
let t;
120
-
try { t = this.parseToken(); } catch (e) { /*ignore*/ }
121
-
// console.log('[debug] tryToken(' + expect + ') = ' + t);
122
-
if (t == expect)
123
-
return true;
124
-
else {
125
-
this.pos = p;
126
-
return false;
127
-
}
128
-
};
129
-
Parser.prototype.expectToken = function (expect) {
130
-
let p = this.pos;
131
-
let t;
132
-
try { t = this.parseToken(); }
133
-
catch (e) { console.log('[debug] expectToken', e); }
134
-
// console.log('[debug] expectToken(' + expect + ') = ' + t);
135
-
if (t != expect) {
136
-
this.pos = p;
137
-
this.exception("Found '" + t + "', was expecting '" + expect + "'");
138
-
}
139
-
};
140
-
Parser.prototype.parseNumberOrValue = function () {
141
-
if (this.isDigit())
142
-
return +this.parseNumber();
143
-
return this.parseIdentifier();
144
-
};
145
-
Parser.prototype.parseRange = function () {
146
-
let min = this.tryToken('MIN') ? 'MIN' : this.parseNumberOrValue();
147
-
if (this.tryToken('..')) {
148
-
let max = this.tryToken('MAX') ? 'MAX' : this.parseNumberOrValue();
149
-
return [min, max];
150
-
}
151
-
return min;
152
-
};
153
-
const reType = /ANY|BOOLEAN|INTEGER|(?:BIT|OCTET)\s+STRING|OBJECT\s+IDENTIFIER|SEQUENCE|SET|CHOICE|ENUMERATED|(?:Generalized|UTC)Time|(?:BMP|General|Graphic|IA5|ISO64|Numeric|Printable|Teletex|T61|Universal|UTF8|Videotex|Visible)String/y;
154
-
Parser.prototype.parseBuiltinType = function () {
155
-
let x = {
156
-
name: this.getRegEx('type', reType),
157
-
type: 'builtin',
158
-
};
159
-
// console.log('[debug] parseType = ' + x.name);
160
-
try {
161
-
switch (x.name) {
162
-
case 'ANY':
163
-
if (this.tryToken('DEFINED BY'))
164
-
x.definedBy = this.parseIdentifier();
165
-
break;
166
-
case 'BOOLEAN':
167
-
case 'OCTET STRING':
168
-
case 'OBJECT IDENTIFIER':
169
-
break;
170
-
case 'CHOICE':
171
-
x.content = this.parseElementTypeList();
172
-
break;
173
-
case 'SEQUENCE':
174
-
case 'SET':
175
-
if (this.peekChar() == '{') {
176
-
x.content = this.parseElementTypeList();
177
-
} else {
178
-
x.typeOf = 1;
179
-
if (this.tryToken('SIZE')) {
180
-
this.expectToken('(');
181
-
x.size = this.parseRange();
182
-
this.expectToken(')');
183
-
}
184
-
this.expectToken('OF');
185
-
x.content = [this.parseType()];
186
-
}
187
-
break;
188
-
case 'INTEGER':
189
-
if (this.tryToken('(')) {
190
-
x.range = this.parseRange();
191
-
this.expectToken(')');
192
-
}
193
-
// falls through
194
-
case 'ENUMERATED':
195
-
case 'BIT STRING':
196
-
if (this.tryToken('{')) {
197
-
x.content = {};
198
-
do {
199
-
let id = this.parseIdentifier();
200
-
this.expectToken('(');
201
-
let val = this.parseNumber(); //TODO: signed
202
-
this.expectToken(')');
203
-
x.content[id] = +val;
204
-
} while (this.tryToken(','));
205
-
this.expectToken('}');
206
-
}
207
-
break;
208
-
case 'BMPString':
209
-
case 'GeneralString':
210
-
case 'GraphicString':
211
-
case 'IA5String':
212
-
case 'ISO646String':
213
-
case 'NumericString':
214
-
case 'PrintableString':
215
-
case 'TeletexString':
216
-
case 'T61String':
217
-
case 'UniversalString':
218
-
case 'UTF8String':
219
-
case 'VideotexString':
220
-
case 'VisibleString':
221
-
if (this.tryToken('(')) {
222
-
if (this.tryToken('SIZE')) {
223
-
this.expectToken('(');
224
-
x.size = this.parseRange();
225
-
this.expectToken(')');
226
-
}
227
-
this.expectToken(')');
228
-
}
229
-
break;
230
-
default:
231
-
x.content = 'TODO:unknown';
232
-
}
233
-
} catch (e) {
234
-
console.log('[debug] parseBuiltinType content', e);
235
-
x.content = 'TODO:exception';
236
-
}
237
-
return x;
238
-
};
100
+
const reType = /ANY|NULL|BOOLEAN|INTEGER|(?:BIT|OCTET)\s+STRING|OBJECT\s+IDENTIFIER|SEQUENCE|SET|CHOICE|ENUMERATED|(?:Generalized|UTC)Time|(?:BMP|General|Graphic|IA5|ISO64|Numeric|Printable|Teletex|T61|Universal|UTF8|Videotex|Visible)String/y;
239
101
const reTagClass = /UNIVERSAL|APPLICATION|PRIVATE|/y;
240
102
const reTagType = /IMPLICIT|EXPLICIT|/y;
241
-
Parser.prototype.parseTaggedType = function () {
242
-
this.expectToken('[');
243
-
let tagClass = this.getRegEx('class', reTagClass) || 'CONTEXT'; //TODO: use module defaults
244
-
let t = this.parseNumber();
245
-
this.expectToken(']');
246
-
let plicit = this.getRegEx('explicit/implicit', reTagType);
247
-
if (plicit == '') plicit = currentMod.tagDefault;
248
-
let x = this.parseType();
249
-
return {
250
-
name: '[' + t + ']',
251
-
type: 'tag',
252
-
"class": tagClass,
253
-
explicit: (plicit == 'EXPLICIT'),
254
-
content: [{ name: '', type: x }],
255
-
};
256
-
};
257
-
Parser.prototype.parseType = function () {
258
-
if (this.peekChar() == '[')
259
-
return this.parseTaggedType();
260
-
let p = this.pos;
261
-
try {
262
-
return this.parseBuiltinType();
263
-
} catch (e) {
264
-
// console.log('[debug] parseAssignment failed on parseType', e);
265
-
this.pos = p;
266
-
let x = {
267
-
name: this.parseIdentifier(),
268
-
type: 'defined',
269
-
};
270
-
// let from = searchImportedType(x.name);
271
-
// if (from)
272
-
// x.module = from;
273
-
return x;
274
-
//TODO "restricted string type"
275
-
}
276
-
};
277
-
Parser.prototype.parseValueBoolean = function () {
278
-
let p = this.pos;
279
-
let t = this.parseToken();
280
-
if (t == 'TRUE')
281
-
return true;
282
-
if (t == 'FALSE')
283
-
return false;
284
-
this.pos = p;
285
-
this.exception("Found '" + t + "', was expecting a boolean");
286
-
};
103
+
const reTagDefault = /(AUTOMATIC|IMPLICIT|EXPLICIT) TAGS|/y;
104
+
105
+
let asn1;
106
+
let currentMod;
107
+
287
108
function searchImportedValue(id) {
288
109
for (let imp of Object.values(currentMod.imports))
289
110
for (let name of imp.types)
···
296
117
}
297
118
throw new Error('Cannot find imported value in any module: ' + id);
298
119
}
299
-
Parser.prototype.parseValueOID = function () {
300
-
this.expectToken('{');
301
-
let v = '';
302
-
while (!this.tryToken('}')) {
120
+
121
+
class Parser {
122
+
constructor(enc, pos) {
123
+
this.enc = enc;
124
+
this.pos = pos;
125
+
this.start = pos;
126
+
}
127
+
getChar(pos) {
128
+
if (pos === undefined)
129
+
pos = this.pos++;
130
+
if (pos >= this.enc.length)
131
+
throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length;
132
+
return this.enc.charAt(pos);
133
+
}
134
+
exception(s) {
135
+
const pos = this.pos;
136
+
let from = Math.max(pos - 30, this.start);
137
+
let to = Math.min(pos + 30, this.enc.length);
138
+
let ctx = '';
139
+
let arrow = '';
140
+
let i = from;
141
+
for (; i < pos; ++i) {
142
+
ctx += this.getChar(i);
143
+
arrow += ' ';
144
+
}
145
+
ctx += this.getChar(i++);
146
+
arrow += '^';
147
+
for (; i < to; ++i)
148
+
ctx += this.getChar(i);
149
+
// calculate line/column
150
+
let line = 1;
151
+
let lastLF = 0;
152
+
for (let i = 0; i < pos; ++i)
153
+
if (this.enc.charAt(i) == '\n') {
154
+
++line;
155
+
lastLF = i;
156
+
}
157
+
let column = pos - lastLF;
158
+
throw new Error('[position ' + pos + ', line ' + line + ':' + column + '] ' + s + '\n' + ctx.replace(/\s/g, ' ') + '\n' + arrow);
159
+
}
160
+
peek() {
161
+
return this.enc.charCodeAt(this.pos);
162
+
}
163
+
peekChar() {
164
+
return this.enc.charAt(this.pos);
165
+
}
166
+
isWhitespace() {
167
+
let c = this.peekChar();
168
+
return c == ' ' || c == '\n';
169
+
}
170
+
isDigit() {
171
+
let c = this.peekChar();
172
+
return c >= '0' && c <= '9';
173
+
}
174
+
skipWhitespace() {
175
+
reWhitespace.lastIndex = this.pos;
176
+
let s = reWhitespace.exec(this.enc);
177
+
if (s)
178
+
this.pos = reWhitespace.lastIndex;
179
+
}
180
+
// DefStream.prototype.eat = function (str) {
181
+
// for (let i = 0; i < str.length; ++i) {
182
+
// let c = this.getChar();
183
+
// if (c != str.charAt(i))
184
+
// throw new Error("Found '" + c + "', was expecting '" + str.charAt(i) + "'");
185
+
// }
186
+
// };
187
+
getRegEx(type, re) {
188
+
this.skipWhitespace();
189
+
re.lastIndex = this.pos;
190
+
let s = re.exec(this.enc); //TODO: does not work with typed arrays
191
+
if (!s)
192
+
this.exception("Found '" + this.peekChar() + "', was expecting a " + type);
193
+
s = s[0];
194
+
// console.log('[debug] getRexEx@' + this.pos + ' = ' + s);
195
+
this.pos = re.lastIndex;
196
+
this.skipWhitespace();
197
+
return s;
198
+
}
199
+
parseIdentifier() {
200
+
let id = this.getRegEx('identifier', reIdentifier);
201
+
// console.log('[debug] parseIdentifier = ' + id);
202
+
return id;
203
+
}
204
+
parseNumber() {
205
+
let id = this.getRegEx('number', reNumber);
206
+
// console.log('[debug] parseNumber = ' + id);
207
+
return id;
208
+
}
209
+
parseToken() {
210
+
let tok = this.getRegEx('token', reToken);
211
+
return tok;
212
+
}
213
+
tryToken(expect) {
303
214
let p = this.pos;
304
-
let val;
305
-
if (this.isDigit())
306
-
val = this.parseNumber();
215
+
let t;
216
+
try { t = this.parseToken(); } catch (ignore) { /*ignore*/ }
217
+
// console.log('[debug] tryToken(' + expect + ') = ' + t);
218
+
if (t == expect)
219
+
return true;
307
220
else {
308
221
this.pos = p;
309
-
let id = this.parseIdentifier();
310
-
if (this.tryToken('(')) {
311
-
val = this.parseNumber();
312
-
this.expectToken(')');
313
-
} else {
314
-
if (id in currentMod.values) // defined in local module
315
-
val = currentMod.values[id].value;
316
-
else
317
-
val = searchImportedValue(id);
318
-
}
222
+
return false;
319
223
}
320
-
if (v.length) v += '.';
321
-
v += val;
322
224
}
323
-
return v;
324
-
};
325
-
Parser.prototype.parseValue = function () {
326
-
let c = this.peekChar();
327
-
if (c == '{')
328
-
return this.parseValueOID();
329
-
if (c >= '0' && c <= '9')
330
-
return +this.parseNumber();
331
-
if (c == '-')
332
-
return -this.parseNumber();
333
-
let p = this.pos;
334
-
try {
335
-
switch (this.parseToken()) {
336
-
case 'TRUE':
337
-
return true;
338
-
case 'FALSE':
339
-
return false;
340
-
case 'NULL':
341
-
return null;
225
+
expectToken(expect) {
226
+
let p = this.pos;
227
+
let t;
228
+
try { t = this.parseToken(); }
229
+
catch (e) { console.log('[debug] expectToken', e); }
230
+
// console.log('[debug] expectToken(' + expect + ') = ' + t);
231
+
if (t != expect) {
232
+
this.pos = p;
233
+
this.exception("Found '" + t + "', was expecting '" + expect + "'");
342
234
}
343
-
} catch (e) {
344
-
this.pos = p;
345
235
}
346
-
p = this.pos;
347
-
try {
236
+
parseNumberOrValue() {
237
+
if (this.isDigit())
238
+
return +this.parseNumber();
348
239
return this.parseIdentifier();
349
-
} catch (e) {
240
+
}
241
+
parseRange() {
242
+
let min = this.tryToken('MIN') ? 'MIN' : this.parseNumberOrValue();
243
+
if (this.tryToken('..')) {
244
+
let max = this.tryToken('MAX') ? 'MAX' : this.parseNumberOrValue();
245
+
return [min, max];
246
+
}
247
+
return min;
248
+
}
249
+
parseBuiltinType() {
250
+
let x = {
251
+
name: this.getRegEx('type', reType),
252
+
type: 'builtin',
253
+
};
254
+
// console.log('[debug] parseType = ' + x.name);
255
+
try {
256
+
switch (x.name) {
257
+
case 'ANY':
258
+
if (this.tryToken('DEFINED BY'))
259
+
x.definedBy = this.parseIdentifier();
260
+
break;
261
+
case 'NULL':
262
+
case 'BOOLEAN':
263
+
case 'OCTET STRING':
264
+
case 'OBJECT IDENTIFIER':
265
+
break;
266
+
case 'CHOICE':
267
+
x.content = this.parseElementTypeList();
268
+
break;
269
+
case 'SEQUENCE':
270
+
case 'SET':
271
+
if (this.peekChar() == '{') {
272
+
x.content = this.parseElementTypeList();
273
+
} else {
274
+
x.typeOf = 1;
275
+
if (this.tryToken('SIZE')) {
276
+
this.expectToken('(');
277
+
x.size = this.parseRange();
278
+
this.expectToken(')');
279
+
}
280
+
this.expectToken('OF');
281
+
x.content = [this.parseType()];
282
+
}
283
+
break;
284
+
case 'INTEGER':
285
+
if (this.tryToken('(')) {
286
+
x.range = this.parseRange();
287
+
this.expectToken(')');
288
+
}
289
+
// falls through
290
+
case 'ENUMERATED':
291
+
case 'BIT STRING':
292
+
if (this.tryToken('{')) {
293
+
x.content = {};
294
+
do {
295
+
let id = this.parseIdentifier();
296
+
this.expectToken('(');
297
+
let val = this.parseNumber(); //TODO: signed
298
+
this.expectToken(')');
299
+
x.content[id] = +val;
300
+
} while (this.tryToken(','));
301
+
this.expectToken('}');
302
+
}
303
+
break;
304
+
case 'BMPString':
305
+
case 'GeneralString':
306
+
case 'GraphicString':
307
+
case 'IA5String':
308
+
case 'ISO646String':
309
+
case 'NumericString':
310
+
case 'PrintableString':
311
+
case 'TeletexString':
312
+
case 'T61String':
313
+
case 'UniversalString':
314
+
case 'UTF8String':
315
+
case 'VideotexString':
316
+
case 'VisibleString':
317
+
if (this.tryToken('(')) {
318
+
if (this.tryToken('SIZE')) {
319
+
this.expectToken('(');
320
+
x.size = this.parseRange();
321
+
this.expectToken(')');
322
+
}
323
+
this.expectToken(')');
324
+
}
325
+
break;
326
+
case 'UTCTime':
327
+
case 'GeneralizedTime':
328
+
break;
329
+
default:
330
+
x.warning = 'type unknown';
331
+
}
332
+
} catch (e) {
333
+
console.log('[debug] parseBuiltinType content', e);
334
+
x.warning = 'type exception';
335
+
}
336
+
return x;
337
+
}
338
+
parseTaggedType() {
339
+
this.expectToken('[');
340
+
let tagClass = this.getRegEx('class', reTagClass) || 'CONTEXT'; //TODO: use module defaults
341
+
let t = this.parseNumber();
342
+
this.expectToken(']');
343
+
let plicit = this.getRegEx('explicit/implicit', reTagType);
344
+
if (plicit == '') plicit = currentMod.tagDefault;
345
+
let x = this.parseType();
346
+
let name;
347
+
switch (tagClass) { // keep in sync with ASN1.typeName
348
+
case 'APPLICATION':
349
+
name = 'Application ' + t;
350
+
break;
351
+
case 'PRIVATE':
352
+
name = 'Private ' + t;
353
+
break;
354
+
case 'CONTEXT':
355
+
// fall through
356
+
default:
357
+
name = '[' + t + ']';
358
+
break;
359
+
}
360
+
return {
361
+
name,
362
+
type: 'tag',
363
+
'class': tagClass,
364
+
explicit: (plicit == 'EXPLICIT'),
365
+
content: [{ name: '', type: x }],
366
+
};
367
+
}
368
+
parseType() {
369
+
if (this.peekChar() == '[')
370
+
return this.parseTaggedType();
371
+
let p = this.pos;
372
+
try {
373
+
return this.parseBuiltinType();
374
+
} catch (ignore) {
375
+
// console.log('[debug] parseAssignment failed on parseType', e);
376
+
this.pos = p;
377
+
let x = {
378
+
name: this.parseIdentifier(),
379
+
type: 'defined',
380
+
};
381
+
// let from = searchImportedType(x.name);
382
+
// if (from)
383
+
// x.module = from;
384
+
return x;
385
+
//TODO "restricted string type"
386
+
}
387
+
}
388
+
parseValueBoolean() {
389
+
let p = this.pos;
390
+
let t = this.parseToken();
391
+
if (t == 'TRUE')
392
+
return true;
393
+
if (t == 'FALSE')
394
+
return false;
350
395
this.pos = p;
396
+
this.exception("Found '" + t + "', was expecting a boolean");
351
397
}
352
-
this.exception('Unknown value type.');
353
-
};
354
-
/*DefStream.prototype.parseValue = function (type) {
355
-
console.log('[debug] parseValue type:', type);
356
-
if (type.type == 'defined') {
357
-
if (!(type.name in types))
358
-
this.exception("Missing type: " + type.name);
359
-
type = types[type.name];
398
+
parseValueOID() {
399
+
this.expectToken('{');
400
+
let v = '';
401
+
while (!this.tryToken('}')) {
402
+
let p = this.pos;
403
+
let val;
404
+
if (this.isDigit())
405
+
val = this.parseNumber();
406
+
else {
407
+
this.pos = p;
408
+
let id = this.parseIdentifier();
409
+
if (this.tryToken('(')) {
410
+
val = this.parseNumber();
411
+
this.expectToken(')');
412
+
} else {
413
+
if (id in currentMod.values) // defined in local module
414
+
val = currentMod.values[id].value;
415
+
else try {
416
+
val = searchImportedValue(id);
417
+
} catch (e) {
418
+
this.exception(e.message);
419
+
}
420
+
}
421
+
}
422
+
if (v.length) v += '.';
423
+
v += val;
424
+
}
425
+
return v;
360
426
}
361
-
switch (type.name) {
362
-
case 'BOOLEAN':
363
-
return this.parseValueBoolean();
364
-
case 'OBJECT IDENTIFIER':
427
+
parseValue() {
428
+
let c = this.peekChar();
429
+
if (c == '{')
365
430
return this.parseValueOID();
366
-
default:
367
-
console.log('[debug] parseValue unknown:', type);
368
-
return 'TODO:value';
431
+
if (c >= '0' && c <= '9')
432
+
return +this.parseNumber();
433
+
if (c == '-')
434
+
return -this.parseNumber();
435
+
let p = this.pos;
436
+
try {
437
+
switch (this.parseToken()) {
438
+
case 'TRUE':
439
+
return true;
440
+
case 'FALSE':
441
+
return false;
442
+
case 'NULL':
443
+
return null;
444
+
}
445
+
} catch (ignore) {
446
+
this.pos = p;
447
+
}
448
+
p = this.pos;
449
+
try {
450
+
return this.parseIdentifier();
451
+
} catch (ignore) {
452
+
this.pos = p;
453
+
}
454
+
this.exception('Unknown value type.');
369
455
}
370
-
};*/
371
-
Parser.prototype.parseElementType = function () {
372
-
let x = Object.assign({ id: this.parseIdentifier() }, this.parseType());
373
-
// console.log('[debug] parseElementType 1:', x);
374
-
if (this.tryToken('OPTIONAL'))
375
-
x.optional = true;
376
-
if (this.tryToken('DEFAULT'))
377
-
x.default = this.parseValue(x.type);
378
-
// console.log('[debug] parseElementType 2:', x);
379
-
return x;
380
-
};
381
-
Parser.prototype.parseElementTypeList = function () {
382
-
let v = [];
383
-
this.expectToken('{');
384
-
do {
385
-
v.push(this.parseElementType());
386
-
} while (this.tryToken(','));
387
-
this.expectToken('}');
388
-
return v;
389
-
};
390
-
Parser.prototype.parseAssignment = function () {
391
-
let name = this.parseIdentifier();
392
-
if (this.tryToken('::=')) { // type assignment
393
-
// console.log('type name', name);
394
-
let type = this.parseType();
395
-
currentMod.types[name] = { name, type };
396
-
return currentMod.types[name];
397
-
} else { // value assignment
398
-
// console.log('value name', name);
399
-
let type = this.parseType();
400
-
// console.log('[debug] parseAssignment type:', type);
401
-
this.expectToken('::=');
402
-
let value = this.parseValue(type);
403
-
currentMod.values[name] = { name, type, value };
404
-
return currentMod.values[name];
456
+
/*DefStream.prototype.parseValue = function (type) {
457
+
console.log('[debug] parseValue type:', type);
458
+
if (type.type == 'defined') {
459
+
if (!(type.name in types))
460
+
this.exception("Missing type: " + type.name);
461
+
type = types[type.name];
462
+
}
463
+
switch (type.name) {
464
+
case 'BOOLEAN':
465
+
return this.parseValueBoolean();
466
+
case 'OBJECT IDENTIFIER':
467
+
return this.parseValueOID();
468
+
default:
469
+
console.log('[debug] parseValue unknown:', type);
470
+
return 'TODO:value';
471
+
}
472
+
}*/
473
+
parseElementType() {
474
+
let x = Object.assign({ id: this.parseIdentifier() }, this.parseType());
475
+
// console.log('[debug] parseElementType 1:', x);
476
+
if (this.tryToken('OPTIONAL'))
477
+
x.optional = true;
478
+
if (this.tryToken('DEFAULT'))
479
+
x.default = this.parseValue(x.type);
480
+
// console.log('[debug] parseElementType 2:', x);
481
+
return x;
405
482
}
406
-
};
407
-
Parser.prototype.parseModuleIdentifier = function () {
408
-
return {
409
-
name: this.parseIdentifier(),
410
-
oid: this.parseValueOID(),
411
-
};
412
-
};
413
-
Parser.prototype.parseSymbolsImported = function () {
414
-
let imports = {};
415
-
do {
416
-
let l = [];
483
+
parseElementTypeList() {
484
+
let v = [];
485
+
this.expectToken('{');
417
486
do {
418
-
l.push(this.parseIdentifier());
487
+
v.push(this.parseElementType());
419
488
} while (this.tryToken(','));
420
-
this.expectToken('FROM');
489
+
this.expectToken('}');
490
+
return v;
491
+
}
492
+
parseAssignment() {
493
+
let name = this.parseIdentifier();
494
+
if (this.tryToken('::=')) { // type assignment
495
+
// console.log('type name', name);
496
+
let type = this.parseType();
497
+
currentMod.types[name] = { name, type };
498
+
return currentMod.types[name];
499
+
} else { // value assignment
500
+
// console.log('value name', name);
501
+
let type = this.parseType();
502
+
// console.log('[debug] parseAssignment type:', type);
503
+
this.expectToken('::=');
504
+
let value = this.parseValue(type);
505
+
currentMod.values[name] = { name, type, value };
506
+
return currentMod.values[name];
507
+
}
508
+
}
509
+
parseModuleIdentifier() {
510
+
return {
511
+
name: this.parseIdentifier(),
512
+
oid: this.parseValueOID(),
513
+
};
514
+
}
515
+
parseSymbolsImported() {
516
+
let imports = {};
517
+
do {
518
+
let l = [];
519
+
do {
520
+
l.push(this.parseIdentifier());
521
+
} while (this.tryToken(','));
522
+
this.expectToken('FROM');
523
+
let mod = this.parseModuleIdentifier();
524
+
mod.types = l;
525
+
imports[mod.oid] = mod;
526
+
} while (this.peekChar() != ';');
527
+
return imports;
528
+
}
529
+
parseModuleDefinition(file) {
421
530
let mod = this.parseModuleIdentifier();
422
-
mod.types = l;
423
-
imports[mod.oid] = mod;
424
-
} while (this.peekChar() != ';');
425
-
return imports;
426
-
};
427
-
const reTagDefault = /(AUTOMATIC|IMPLICIT|EXPLICIT) TAGS|/y;
428
-
Parser.prototype.parseModuleDefinition = function (file) {
429
-
let mod = this.parseModuleIdentifier();
430
-
currentMod = mod; // for deeply nested parsers
431
-
mod.source = file;
432
-
this.expectToken('DEFINITIONS');
433
-
mod.tagDefault = this.getRegEx('tag default', reTagDefault).split(' ')[0];
434
-
this.expectToken('::=');
435
-
this.expectToken('BEGIN');
436
-
//TODO this.tryToken('EXPORTS')
437
-
if (this.tryToken('IMPORTS')) {
438
-
mod.imports = this.parseSymbolsImported();
439
-
this.expectToken(';');
531
+
currentMod = mod; // for deeply nested parsers
532
+
mod.source = file;
533
+
this.expectToken('DEFINITIONS');
534
+
mod.tagDefault = this.getRegEx('tag default', reTagDefault).split(' ')[0];
535
+
this.expectToken('::=');
536
+
this.expectToken('BEGIN');
537
+
//TODO this.tryToken('EXPORTS')
538
+
if (this.tryToken('IMPORTS')) {
539
+
mod.imports = this.parseSymbolsImported();
540
+
this.expectToken(';');
541
+
}
542
+
mod.values = {};
543
+
mod.types = {};
544
+
while (!this.tryToken('END'))
545
+
this.parseAssignment();
546
+
return mod;
440
547
}
441
-
mod.values = {};
442
-
mod.types = {};
443
-
while (!this.tryToken('END'))
444
-
this.parseAssignment();
445
-
return mod;
446
-
};
548
+
}
447
549
448
550
let s = fs.readFileSync(process.argv[2], 'utf8');
449
551
let num = /^Request for Comments: ([0-9]+)/m.exec(s)[1];
···
453
555
if (num in patches)
454
556
for (let p of patches[num])
455
557
s = s.replace(p[0], p[1]);
456
-
// fs.writeFileSync('rfc3161_patched.txt', s, 'utf8');
558
+
fs.writeFileSync(process.argv[2].replace(/[.]txt$/, '_patched.txt'), s, 'utf8');
457
559
// console.log(s);
458
560
asn1 = JSON.parse(fs.readFileSync(process.argv[3], 'utf8'));
459
-
const reModuleDefinition = /\s[A-Z](?:[-]?[a-zA-Z0-9])*\s*\{[^}]+\}\s*DEFINITIONS/gm;
561
+
const reModuleDefinition = /\s[A-Z](?:[-]?[a-zA-Z0-9])*\s*\{[^}]+\}\s*(^--.*|\n)*DEFINITIONS/gm;
460
562
let m;
461
563
while ((m = reModuleDefinition.exec(s))) {
462
564
new Parser(s, m.index).parseModuleDefinition(process.argv[2]);
···
465
567
asn1[currentMod.oid] = currentMod;
466
568
}
467
569
/*asn1 = Object.keys(asn1).sort().reduce(
468
-
(obj, key) => {
570
+
(obj, key) => {
469
571
obj[key] = asn1[key];
470
572
return obj;
471
-
},
573
+
},
472
574
{}
473
575
);*/
474
576
fs.writeFileSync(process.argv[3], JSON.stringify(asn1, null, 2) + '\n', 'utf8');
+1348
pnpm-lock.yaml
+1348
pnpm-lock.yaml
···
1
+
lockfileVersion: '9.0'
2
+
3
+
settings:
4
+
autoInstallPeers: true
5
+
excludeLinksFromLockfile: false
6
+
7
+
overrides:
8
+
rollup: npm:@rollup/wasm-node
9
+
10
+
importers:
11
+
12
+
.:
13
+
devDependencies:
14
+
'@eslint/eslintrc':
15
+
specifier: ^3.3.1
16
+
version: 3.3.1
17
+
'@eslint/js':
18
+
specifier: ^9.32.0
19
+
version: 9.32.0
20
+
'@rollup/wasm-node':
21
+
specifier: ^4.46.2
22
+
version: 4.46.2
23
+
diff:
24
+
specifier: ^8.0.2
25
+
version: 8.0.2
26
+
eslint:
27
+
specifier: ^9.32.0
28
+
version: 9.32.0
29
+
globals:
30
+
specifier: ^16.3.0
31
+
version: 16.3.0
32
+
htmlparser2:
33
+
specifier: ^9.1.0
34
+
version: 9.1.0
35
+
vite:
36
+
specifier: ^5.4.19
37
+
version: 5.4.19
38
+
vite-plugin-dom:
39
+
specifier: ^1.0.4
40
+
version: 1.0.4(vite@5.4.19)
41
+
vite-plugin-singlefile:
42
+
specifier: ^2.3.0
43
+
version: 2.3.0(rollup@4.46.2)(vite@5.4.19)
44
+
45
+
packages:
46
+
47
+
'@esbuild/aix-ppc64@0.21.5':
48
+
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
49
+
engines: {node: '>=12'}
50
+
cpu: [ppc64]
51
+
os: [aix]
52
+
53
+
'@esbuild/android-arm64@0.21.5':
54
+
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
55
+
engines: {node: '>=12'}
56
+
cpu: [arm64]
57
+
os: [android]
58
+
59
+
'@esbuild/android-arm@0.21.5':
60
+
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
61
+
engines: {node: '>=12'}
62
+
cpu: [arm]
63
+
os: [android]
64
+
65
+
'@esbuild/android-x64@0.21.5':
66
+
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
67
+
engines: {node: '>=12'}
68
+
cpu: [x64]
69
+
os: [android]
70
+
71
+
'@esbuild/darwin-arm64@0.21.5':
72
+
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
73
+
engines: {node: '>=12'}
74
+
cpu: [arm64]
75
+
os: [darwin]
76
+
77
+
'@esbuild/darwin-x64@0.21.5':
78
+
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
79
+
engines: {node: '>=12'}
80
+
cpu: [x64]
81
+
os: [darwin]
82
+
83
+
'@esbuild/freebsd-arm64@0.21.5':
84
+
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
85
+
engines: {node: '>=12'}
86
+
cpu: [arm64]
87
+
os: [freebsd]
88
+
89
+
'@esbuild/freebsd-x64@0.21.5':
90
+
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
91
+
engines: {node: '>=12'}
92
+
cpu: [x64]
93
+
os: [freebsd]
94
+
95
+
'@esbuild/linux-arm64@0.21.5':
96
+
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
97
+
engines: {node: '>=12'}
98
+
cpu: [arm64]
99
+
os: [linux]
100
+
101
+
'@esbuild/linux-arm@0.21.5':
102
+
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
103
+
engines: {node: '>=12'}
104
+
cpu: [arm]
105
+
os: [linux]
106
+
107
+
'@esbuild/linux-ia32@0.21.5':
108
+
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
109
+
engines: {node: '>=12'}
110
+
cpu: [ia32]
111
+
os: [linux]
112
+
113
+
'@esbuild/linux-loong64@0.21.5':
114
+
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
115
+
engines: {node: '>=12'}
116
+
cpu: [loong64]
117
+
os: [linux]
118
+
119
+
'@esbuild/linux-mips64el@0.21.5':
120
+
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
121
+
engines: {node: '>=12'}
122
+
cpu: [mips64el]
123
+
os: [linux]
124
+
125
+
'@esbuild/linux-ppc64@0.21.5':
126
+
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
127
+
engines: {node: '>=12'}
128
+
cpu: [ppc64]
129
+
os: [linux]
130
+
131
+
'@esbuild/linux-riscv64@0.21.5':
132
+
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
133
+
engines: {node: '>=12'}
134
+
cpu: [riscv64]
135
+
os: [linux]
136
+
137
+
'@esbuild/linux-s390x@0.21.5':
138
+
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
139
+
engines: {node: '>=12'}
140
+
cpu: [s390x]
141
+
os: [linux]
142
+
143
+
'@esbuild/linux-x64@0.21.5':
144
+
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
145
+
engines: {node: '>=12'}
146
+
cpu: [x64]
147
+
os: [linux]
148
+
149
+
'@esbuild/netbsd-x64@0.21.5':
150
+
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
151
+
engines: {node: '>=12'}
152
+
cpu: [x64]
153
+
os: [netbsd]
154
+
155
+
'@esbuild/openbsd-x64@0.21.5':
156
+
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
157
+
engines: {node: '>=12'}
158
+
cpu: [x64]
159
+
os: [openbsd]
160
+
161
+
'@esbuild/sunos-x64@0.21.5':
162
+
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
163
+
engines: {node: '>=12'}
164
+
cpu: [x64]
165
+
os: [sunos]
166
+
167
+
'@esbuild/win32-arm64@0.21.5':
168
+
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
169
+
engines: {node: '>=12'}
170
+
cpu: [arm64]
171
+
os: [win32]
172
+
173
+
'@esbuild/win32-ia32@0.21.5':
174
+
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
175
+
engines: {node: '>=12'}
176
+
cpu: [ia32]
177
+
os: [win32]
178
+
179
+
'@esbuild/win32-x64@0.21.5':
180
+
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
181
+
engines: {node: '>=12'}
182
+
cpu: [x64]
183
+
os: [win32]
184
+
185
+
'@eslint-community/eslint-utils@4.7.0':
186
+
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
187
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
188
+
peerDependencies:
189
+
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
190
+
191
+
'@eslint-community/regexpp@4.12.1':
192
+
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
193
+
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
194
+
195
+
'@eslint/config-array@0.21.0':
196
+
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
197
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
198
+
199
+
'@eslint/config-helpers@0.3.0':
200
+
resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
201
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
202
+
203
+
'@eslint/core@0.15.1':
204
+
resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
205
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
206
+
207
+
'@eslint/eslintrc@3.3.1':
208
+
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
209
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
210
+
211
+
'@eslint/js@9.32.0':
212
+
resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==}
213
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
214
+
215
+
'@eslint/object-schema@2.1.6':
216
+
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
217
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
218
+
219
+
'@eslint/plugin-kit@0.3.4':
220
+
resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==}
221
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
222
+
223
+
'@humanfs/core@0.19.1':
224
+
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
225
+
engines: {node: '>=18.18.0'}
226
+
227
+
'@humanfs/node@0.16.6':
228
+
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
229
+
engines: {node: '>=18.18.0'}
230
+
231
+
'@humanwhocodes/module-importer@1.0.1':
232
+
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
233
+
engines: {node: '>=12.22'}
234
+
235
+
'@humanwhocodes/retry@0.3.1':
236
+
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
237
+
engines: {node: '>=18.18'}
238
+
239
+
'@humanwhocodes/retry@0.4.3':
240
+
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
241
+
engines: {node: '>=18.18'}
242
+
243
+
'@rollup/rollup-android-arm-eabi@4.46.2':
244
+
resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
245
+
cpu: [arm]
246
+
os: [android]
247
+
248
+
'@rollup/rollup-android-arm64@4.46.2':
249
+
resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==}
250
+
cpu: [arm64]
251
+
os: [android]
252
+
253
+
'@rollup/rollup-darwin-arm64@4.46.2':
254
+
resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==}
255
+
cpu: [arm64]
256
+
os: [darwin]
257
+
258
+
'@rollup/rollup-darwin-x64@4.46.2':
259
+
resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
260
+
cpu: [x64]
261
+
os: [darwin]
262
+
263
+
'@rollup/rollup-freebsd-arm64@4.46.2':
264
+
resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==}
265
+
cpu: [arm64]
266
+
os: [freebsd]
267
+
268
+
'@rollup/rollup-freebsd-x64@4.46.2':
269
+
resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==}
270
+
cpu: [x64]
271
+
os: [freebsd]
272
+
273
+
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
274
+
resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==}
275
+
cpu: [arm]
276
+
os: [linux]
277
+
278
+
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
279
+
resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==}
280
+
cpu: [arm]
281
+
os: [linux]
282
+
283
+
'@rollup/rollup-linux-arm64-gnu@4.46.2':
284
+
resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==}
285
+
cpu: [arm64]
286
+
os: [linux]
287
+
288
+
'@rollup/rollup-linux-arm64-musl@4.46.2':
289
+
resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==}
290
+
cpu: [arm64]
291
+
os: [linux]
292
+
293
+
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
294
+
resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==}
295
+
cpu: [loong64]
296
+
os: [linux]
297
+
298
+
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
299
+
resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==}
300
+
cpu: [ppc64]
301
+
os: [linux]
302
+
303
+
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
304
+
resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==}
305
+
cpu: [riscv64]
306
+
os: [linux]
307
+
308
+
'@rollup/rollup-linux-riscv64-musl@4.46.2':
309
+
resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==}
310
+
cpu: [riscv64]
311
+
os: [linux]
312
+
313
+
'@rollup/rollup-linux-s390x-gnu@4.46.2':
314
+
resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==}
315
+
cpu: [s390x]
316
+
os: [linux]
317
+
318
+
'@rollup/rollup-linux-x64-gnu@4.46.2':
319
+
resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==}
320
+
cpu: [x64]
321
+
os: [linux]
322
+
323
+
'@rollup/rollup-linux-x64-musl@4.46.2':
324
+
resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==}
325
+
cpu: [x64]
326
+
os: [linux]
327
+
328
+
'@rollup/rollup-win32-arm64-msvc@4.46.2':
329
+
resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==}
330
+
cpu: [arm64]
331
+
os: [win32]
332
+
333
+
'@rollup/rollup-win32-ia32-msvc@4.46.2':
334
+
resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==}
335
+
cpu: [ia32]
336
+
os: [win32]
337
+
338
+
'@rollup/rollup-win32-x64-msvc@4.46.2':
339
+
resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==}
340
+
cpu: [x64]
341
+
os: [win32]
342
+
343
+
'@rollup/wasm-node@4.46.2':
344
+
resolution: {integrity: sha512-lZRiZl+B1R3VhqZgORtuUpc2YYbgIv+X6g3LgQHS5sjlf1ENiK1HZ6N5e8pEZ04nAWiwYM0JX7rP0eyxflkJRg==}
345
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
346
+
hasBin: true
347
+
348
+
'@types/estree@1.0.8':
349
+
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
350
+
351
+
'@types/json-schema@7.0.15':
352
+
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
353
+
354
+
acorn-jsx@5.3.2:
355
+
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
356
+
peerDependencies:
357
+
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
358
+
359
+
acorn@8.15.0:
360
+
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
361
+
engines: {node: '>=0.4.0'}
362
+
hasBin: true
363
+
364
+
ajv@6.12.6:
365
+
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
366
+
367
+
ansi-styles@4.3.0:
368
+
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
369
+
engines: {node: '>=8'}
370
+
371
+
argparse@2.0.1:
372
+
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
373
+
374
+
balanced-match@1.0.2:
375
+
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
376
+
377
+
brace-expansion@1.1.12:
378
+
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
379
+
380
+
braces@3.0.3:
381
+
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
382
+
engines: {node: '>=8'}
383
+
384
+
callsites@3.1.0:
385
+
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
386
+
engines: {node: '>=6'}
387
+
388
+
chalk@4.1.2:
389
+
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
390
+
engines: {node: '>=10'}
391
+
392
+
color-convert@2.0.1:
393
+
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
394
+
engines: {node: '>=7.0.0'}
395
+
396
+
color-name@1.1.4:
397
+
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
398
+
399
+
concat-map@0.0.1:
400
+
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
401
+
402
+
cross-spawn@7.0.6:
403
+
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
404
+
engines: {node: '>= 8'}
405
+
406
+
debug@4.4.1:
407
+
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
408
+
engines: {node: '>=6.0'}
409
+
peerDependencies:
410
+
supports-color: '*'
411
+
peerDependenciesMeta:
412
+
supports-color:
413
+
optional: true
414
+
415
+
deep-is@0.1.4:
416
+
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
417
+
418
+
diff@8.0.2:
419
+
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
420
+
engines: {node: '>=0.3.1'}
421
+
422
+
dom-serializer@2.0.0:
423
+
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
424
+
425
+
domelementtype@2.3.0:
426
+
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
427
+
428
+
domhandler@5.0.3:
429
+
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
430
+
engines: {node: '>= 4'}
431
+
432
+
domutils@3.2.2:
433
+
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
434
+
435
+
entities@4.5.0:
436
+
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
437
+
engines: {node: '>=0.12'}
438
+
439
+
esbuild@0.21.5:
440
+
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
441
+
engines: {node: '>=12'}
442
+
hasBin: true
443
+
444
+
escape-string-regexp@4.0.0:
445
+
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
446
+
engines: {node: '>=10'}
447
+
448
+
eslint-scope@8.4.0:
449
+
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
450
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
451
+
452
+
eslint-visitor-keys@3.4.3:
453
+
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
454
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
455
+
456
+
eslint-visitor-keys@4.2.1:
457
+
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
458
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
459
+
460
+
eslint@9.32.0:
461
+
resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==}
462
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
463
+
hasBin: true
464
+
peerDependencies:
465
+
jiti: '*'
466
+
peerDependenciesMeta:
467
+
jiti:
468
+
optional: true
469
+
470
+
espree@10.4.0:
471
+
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
472
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
473
+
474
+
esquery@1.6.0:
475
+
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
476
+
engines: {node: '>=0.10'}
477
+
478
+
esrecurse@4.3.0:
479
+
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
480
+
engines: {node: '>=4.0'}
481
+
482
+
estraverse@5.3.0:
483
+
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
484
+
engines: {node: '>=4.0'}
485
+
486
+
esutils@2.0.3:
487
+
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
488
+
engines: {node: '>=0.10.0'}
489
+
490
+
fast-deep-equal@3.1.3:
491
+
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
492
+
493
+
fast-json-stable-stringify@2.1.0:
494
+
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
495
+
496
+
fast-levenshtein@2.0.6:
497
+
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
498
+
499
+
file-entry-cache@8.0.0:
500
+
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
501
+
engines: {node: '>=16.0.0'}
502
+
503
+
fill-range@7.1.1:
504
+
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
505
+
engines: {node: '>=8'}
506
+
507
+
find-up@5.0.0:
508
+
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
509
+
engines: {node: '>=10'}
510
+
511
+
flat-cache@4.0.1:
512
+
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
513
+
engines: {node: '>=16'}
514
+
515
+
flatted@3.3.3:
516
+
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
517
+
518
+
fsevents@2.3.3:
519
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
520
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
521
+
os: [darwin]
522
+
523
+
glob-parent@6.0.2:
524
+
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
525
+
engines: {node: '>=10.13.0'}
526
+
527
+
globals@14.0.0:
528
+
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
529
+
engines: {node: '>=18'}
530
+
531
+
globals@16.3.0:
532
+
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
533
+
engines: {node: '>=18'}
534
+
535
+
has-flag@4.0.0:
536
+
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
537
+
engines: {node: '>=8'}
538
+
539
+
htmlparser2@9.1.0:
540
+
resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
541
+
542
+
ignore@5.3.2:
543
+
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
544
+
engines: {node: '>= 4'}
545
+
546
+
import-fresh@3.3.1:
547
+
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
548
+
engines: {node: '>=6'}
549
+
550
+
imurmurhash@0.1.4:
551
+
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
552
+
engines: {node: '>=0.8.19'}
553
+
554
+
is-extglob@2.1.1:
555
+
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
556
+
engines: {node: '>=0.10.0'}
557
+
558
+
is-glob@4.0.3:
559
+
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
560
+
engines: {node: '>=0.10.0'}
561
+
562
+
is-number@7.0.0:
563
+
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
564
+
engines: {node: '>=0.12.0'}
565
+
566
+
isexe@2.0.0:
567
+
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
568
+
569
+
js-yaml@4.1.0:
570
+
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
571
+
hasBin: true
572
+
573
+
json-buffer@3.0.1:
574
+
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
575
+
576
+
json-schema-traverse@0.4.1:
577
+
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
578
+
579
+
json-stable-stringify-without-jsonify@1.0.1:
580
+
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
581
+
582
+
keyv@4.5.4:
583
+
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
584
+
585
+
levn@0.4.1:
586
+
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
587
+
engines: {node: '>= 0.8.0'}
588
+
589
+
locate-path@6.0.0:
590
+
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
591
+
engines: {node: '>=10'}
592
+
593
+
lodash.merge@4.6.2:
594
+
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
595
+
596
+
micromatch@4.0.8:
597
+
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
598
+
engines: {node: '>=8.6'}
599
+
600
+
minimatch@3.1.2:
601
+
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
602
+
603
+
ms@2.1.3:
604
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
605
+
606
+
nanoid@3.3.11:
607
+
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
608
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
609
+
hasBin: true
610
+
611
+
natural-compare@1.4.0:
612
+
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
613
+
614
+
optionator@0.9.4:
615
+
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
616
+
engines: {node: '>= 0.8.0'}
617
+
618
+
p-limit@3.1.0:
619
+
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
620
+
engines: {node: '>=10'}
621
+
622
+
p-locate@5.0.0:
623
+
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
624
+
engines: {node: '>=10'}
625
+
626
+
parent-module@1.0.1:
627
+
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
628
+
engines: {node: '>=6'}
629
+
630
+
path-exists@4.0.0:
631
+
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
632
+
engines: {node: '>=8'}
633
+
634
+
path-key@3.1.1:
635
+
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
636
+
engines: {node: '>=8'}
637
+
638
+
picocolors@1.1.1:
639
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
640
+
641
+
picomatch@2.3.1:
642
+
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
643
+
engines: {node: '>=8.6'}
644
+
645
+
postcss@8.5.6:
646
+
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
647
+
engines: {node: ^10 || ^12 || >=14}
648
+
649
+
prelude-ls@1.2.1:
650
+
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
651
+
engines: {node: '>= 0.8.0'}
652
+
653
+
punycode@2.3.1:
654
+
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
655
+
engines: {node: '>=6'}
656
+
657
+
resolve-from@4.0.0:
658
+
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
659
+
engines: {node: '>=4'}
660
+
661
+
rollup@4.46.2:
662
+
resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==}
663
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
664
+
hasBin: true
665
+
666
+
shebang-command@2.0.0:
667
+
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
668
+
engines: {node: '>=8'}
669
+
670
+
shebang-regex@3.0.0:
671
+
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
672
+
engines: {node: '>=8'}
673
+
674
+
source-map-js@1.2.1:
675
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
676
+
engines: {node: '>=0.10.0'}
677
+
678
+
strip-json-comments@3.1.1:
679
+
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
680
+
engines: {node: '>=8'}
681
+
682
+
supports-color@7.2.0:
683
+
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
684
+
engines: {node: '>=8'}
685
+
686
+
to-regex-range@5.0.1:
687
+
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
688
+
engines: {node: '>=8.0'}
689
+
690
+
type-check@0.4.0:
691
+
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
692
+
engines: {node: '>= 0.8.0'}
693
+
694
+
uri-js@4.4.1:
695
+
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
696
+
697
+
vite-plugin-dom@1.0.4:
698
+
resolution: {integrity: sha512-GkmDAsVDo0Aabb7RmGTGWZNDowV5K+IkrhmJfrgMpgjHdE7F8H1OsTk48DQmnQ/2llM5UvP4z5h0icdsnL/C/g==}
699
+
peerDependencies:
700
+
vite: '>=4.0.0'
701
+
702
+
vite-plugin-singlefile@2.3.0:
703
+
resolution: {integrity: sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==}
704
+
engines: {node: '>18.0.0'}
705
+
peerDependencies:
706
+
rollup: ^4.44.1
707
+
vite: ^5.4.11 || ^6.0.0 || ^7.0.0
708
+
709
+
vite@5.4.19:
710
+
resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
711
+
engines: {node: ^18.0.0 || >=20.0.0}
712
+
hasBin: true
713
+
peerDependencies:
714
+
'@types/node': ^18.0.0 || >=20.0.0
715
+
less: '*'
716
+
lightningcss: ^1.21.0
717
+
sass: '*'
718
+
sass-embedded: '*'
719
+
stylus: '*'
720
+
sugarss: '*'
721
+
terser: ^5.4.0
722
+
peerDependenciesMeta:
723
+
'@types/node':
724
+
optional: true
725
+
less:
726
+
optional: true
727
+
lightningcss:
728
+
optional: true
729
+
sass:
730
+
optional: true
731
+
sass-embedded:
732
+
optional: true
733
+
stylus:
734
+
optional: true
735
+
sugarss:
736
+
optional: true
737
+
terser:
738
+
optional: true
739
+
740
+
which@2.0.2:
741
+
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
742
+
engines: {node: '>= 8'}
743
+
hasBin: true
744
+
745
+
word-wrap@1.2.5:
746
+
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
747
+
engines: {node: '>=0.10.0'}
748
+
749
+
yocto-queue@0.1.0:
750
+
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
751
+
engines: {node: '>=10'}
752
+
753
+
snapshots:
754
+
755
+
'@esbuild/aix-ppc64@0.21.5':
756
+
optional: true
757
+
758
+
'@esbuild/android-arm64@0.21.5':
759
+
optional: true
760
+
761
+
'@esbuild/android-arm@0.21.5':
762
+
optional: true
763
+
764
+
'@esbuild/android-x64@0.21.5':
765
+
optional: true
766
+
767
+
'@esbuild/darwin-arm64@0.21.5':
768
+
optional: true
769
+
770
+
'@esbuild/darwin-x64@0.21.5':
771
+
optional: true
772
+
773
+
'@esbuild/freebsd-arm64@0.21.5':
774
+
optional: true
775
+
776
+
'@esbuild/freebsd-x64@0.21.5':
777
+
optional: true
778
+
779
+
'@esbuild/linux-arm64@0.21.5':
780
+
optional: true
781
+
782
+
'@esbuild/linux-arm@0.21.5':
783
+
optional: true
784
+
785
+
'@esbuild/linux-ia32@0.21.5':
786
+
optional: true
787
+
788
+
'@esbuild/linux-loong64@0.21.5':
789
+
optional: true
790
+
791
+
'@esbuild/linux-mips64el@0.21.5':
792
+
optional: true
793
+
794
+
'@esbuild/linux-ppc64@0.21.5':
795
+
optional: true
796
+
797
+
'@esbuild/linux-riscv64@0.21.5':
798
+
optional: true
799
+
800
+
'@esbuild/linux-s390x@0.21.5':
801
+
optional: true
802
+
803
+
'@esbuild/linux-x64@0.21.5':
804
+
optional: true
805
+
806
+
'@esbuild/netbsd-x64@0.21.5':
807
+
optional: true
808
+
809
+
'@esbuild/openbsd-x64@0.21.5':
810
+
optional: true
811
+
812
+
'@esbuild/sunos-x64@0.21.5':
813
+
optional: true
814
+
815
+
'@esbuild/win32-arm64@0.21.5':
816
+
optional: true
817
+
818
+
'@esbuild/win32-ia32@0.21.5':
819
+
optional: true
820
+
821
+
'@esbuild/win32-x64@0.21.5':
822
+
optional: true
823
+
824
+
'@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)':
825
+
dependencies:
826
+
eslint: 9.32.0
827
+
eslint-visitor-keys: 3.4.3
828
+
829
+
'@eslint-community/regexpp@4.12.1': {}
830
+
831
+
'@eslint/config-array@0.21.0':
832
+
dependencies:
833
+
'@eslint/object-schema': 2.1.6
834
+
debug: 4.4.1
835
+
minimatch: 3.1.2
836
+
transitivePeerDependencies:
837
+
- supports-color
838
+
839
+
'@eslint/config-helpers@0.3.0': {}
840
+
841
+
'@eslint/core@0.15.1':
842
+
dependencies:
843
+
'@types/json-schema': 7.0.15
844
+
845
+
'@eslint/eslintrc@3.3.1':
846
+
dependencies:
847
+
ajv: 6.12.6
848
+
debug: 4.4.1
849
+
espree: 10.4.0
850
+
globals: 14.0.0
851
+
ignore: 5.3.2
852
+
import-fresh: 3.3.1
853
+
js-yaml: 4.1.0
854
+
minimatch: 3.1.2
855
+
strip-json-comments: 3.1.1
856
+
transitivePeerDependencies:
857
+
- supports-color
858
+
859
+
'@eslint/js@9.32.0': {}
860
+
861
+
'@eslint/object-schema@2.1.6': {}
862
+
863
+
'@eslint/plugin-kit@0.3.4':
864
+
dependencies:
865
+
'@eslint/core': 0.15.1
866
+
levn: 0.4.1
867
+
868
+
'@humanfs/core@0.19.1': {}
869
+
870
+
'@humanfs/node@0.16.6':
871
+
dependencies:
872
+
'@humanfs/core': 0.19.1
873
+
'@humanwhocodes/retry': 0.3.1
874
+
875
+
'@humanwhocodes/module-importer@1.0.1': {}
876
+
877
+
'@humanwhocodes/retry@0.3.1': {}
878
+
879
+
'@humanwhocodes/retry@0.4.3': {}
880
+
881
+
'@rollup/rollup-android-arm-eabi@4.46.2':
882
+
optional: true
883
+
884
+
'@rollup/rollup-android-arm64@4.46.2':
885
+
optional: true
886
+
887
+
'@rollup/rollup-darwin-arm64@4.46.2':
888
+
optional: true
889
+
890
+
'@rollup/rollup-darwin-x64@4.46.2':
891
+
optional: true
892
+
893
+
'@rollup/rollup-freebsd-arm64@4.46.2':
894
+
optional: true
895
+
896
+
'@rollup/rollup-freebsd-x64@4.46.2':
897
+
optional: true
898
+
899
+
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
900
+
optional: true
901
+
902
+
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
903
+
optional: true
904
+
905
+
'@rollup/rollup-linux-arm64-gnu@4.46.2':
906
+
optional: true
907
+
908
+
'@rollup/rollup-linux-arm64-musl@4.46.2':
909
+
optional: true
910
+
911
+
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
912
+
optional: true
913
+
914
+
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
915
+
optional: true
916
+
917
+
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
918
+
optional: true
919
+
920
+
'@rollup/rollup-linux-riscv64-musl@4.46.2':
921
+
optional: true
922
+
923
+
'@rollup/rollup-linux-s390x-gnu@4.46.2':
924
+
optional: true
925
+
926
+
'@rollup/rollup-linux-x64-gnu@4.46.2':
927
+
optional: true
928
+
929
+
'@rollup/rollup-linux-x64-musl@4.46.2':
930
+
optional: true
931
+
932
+
'@rollup/rollup-win32-arm64-msvc@4.46.2':
933
+
optional: true
934
+
935
+
'@rollup/rollup-win32-ia32-msvc@4.46.2':
936
+
optional: true
937
+
938
+
'@rollup/rollup-win32-x64-msvc@4.46.2':
939
+
optional: true
940
+
941
+
'@rollup/wasm-node@4.46.2':
942
+
dependencies:
943
+
'@types/estree': 1.0.8
944
+
optionalDependencies:
945
+
fsevents: 2.3.3
946
+
947
+
'@types/estree@1.0.8': {}
948
+
949
+
'@types/json-schema@7.0.15': {}
950
+
951
+
acorn-jsx@5.3.2(acorn@8.15.0):
952
+
dependencies:
953
+
acorn: 8.15.0
954
+
955
+
acorn@8.15.0: {}
956
+
957
+
ajv@6.12.6:
958
+
dependencies:
959
+
fast-deep-equal: 3.1.3
960
+
fast-json-stable-stringify: 2.1.0
961
+
json-schema-traverse: 0.4.1
962
+
uri-js: 4.4.1
963
+
964
+
ansi-styles@4.3.0:
965
+
dependencies:
966
+
color-convert: 2.0.1
967
+
968
+
argparse@2.0.1: {}
969
+
970
+
balanced-match@1.0.2: {}
971
+
972
+
brace-expansion@1.1.12:
973
+
dependencies:
974
+
balanced-match: 1.0.2
975
+
concat-map: 0.0.1
976
+
977
+
braces@3.0.3:
978
+
dependencies:
979
+
fill-range: 7.1.1
980
+
981
+
callsites@3.1.0: {}
982
+
983
+
chalk@4.1.2:
984
+
dependencies:
985
+
ansi-styles: 4.3.0
986
+
supports-color: 7.2.0
987
+
988
+
color-convert@2.0.1:
989
+
dependencies:
990
+
color-name: 1.1.4
991
+
992
+
color-name@1.1.4: {}
993
+
994
+
concat-map@0.0.1: {}
995
+
996
+
cross-spawn@7.0.6:
997
+
dependencies:
998
+
path-key: 3.1.1
999
+
shebang-command: 2.0.0
1000
+
which: 2.0.2
1001
+
1002
+
debug@4.4.1:
1003
+
dependencies:
1004
+
ms: 2.1.3
1005
+
1006
+
deep-is@0.1.4: {}
1007
+
1008
+
diff@8.0.2: {}
1009
+
1010
+
dom-serializer@2.0.0:
1011
+
dependencies:
1012
+
domelementtype: 2.3.0
1013
+
domhandler: 5.0.3
1014
+
entities: 4.5.0
1015
+
1016
+
domelementtype@2.3.0: {}
1017
+
1018
+
domhandler@5.0.3:
1019
+
dependencies:
1020
+
domelementtype: 2.3.0
1021
+
1022
+
domutils@3.2.2:
1023
+
dependencies:
1024
+
dom-serializer: 2.0.0
1025
+
domelementtype: 2.3.0
1026
+
domhandler: 5.0.3
1027
+
1028
+
entities@4.5.0: {}
1029
+
1030
+
esbuild@0.21.5:
1031
+
optionalDependencies:
1032
+
'@esbuild/aix-ppc64': 0.21.5
1033
+
'@esbuild/android-arm': 0.21.5
1034
+
'@esbuild/android-arm64': 0.21.5
1035
+
'@esbuild/android-x64': 0.21.5
1036
+
'@esbuild/darwin-arm64': 0.21.5
1037
+
'@esbuild/darwin-x64': 0.21.5
1038
+
'@esbuild/freebsd-arm64': 0.21.5
1039
+
'@esbuild/freebsd-x64': 0.21.5
1040
+
'@esbuild/linux-arm': 0.21.5
1041
+
'@esbuild/linux-arm64': 0.21.5
1042
+
'@esbuild/linux-ia32': 0.21.5
1043
+
'@esbuild/linux-loong64': 0.21.5
1044
+
'@esbuild/linux-mips64el': 0.21.5
1045
+
'@esbuild/linux-ppc64': 0.21.5
1046
+
'@esbuild/linux-riscv64': 0.21.5
1047
+
'@esbuild/linux-s390x': 0.21.5
1048
+
'@esbuild/linux-x64': 0.21.5
1049
+
'@esbuild/netbsd-x64': 0.21.5
1050
+
'@esbuild/openbsd-x64': 0.21.5
1051
+
'@esbuild/sunos-x64': 0.21.5
1052
+
'@esbuild/win32-arm64': 0.21.5
1053
+
'@esbuild/win32-ia32': 0.21.5
1054
+
'@esbuild/win32-x64': 0.21.5
1055
+
1056
+
escape-string-regexp@4.0.0: {}
1057
+
1058
+
eslint-scope@8.4.0:
1059
+
dependencies:
1060
+
esrecurse: 4.3.0
1061
+
estraverse: 5.3.0
1062
+
1063
+
eslint-visitor-keys@3.4.3: {}
1064
+
1065
+
eslint-visitor-keys@4.2.1: {}
1066
+
1067
+
eslint@9.32.0:
1068
+
dependencies:
1069
+
'@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0)
1070
+
'@eslint-community/regexpp': 4.12.1
1071
+
'@eslint/config-array': 0.21.0
1072
+
'@eslint/config-helpers': 0.3.0
1073
+
'@eslint/core': 0.15.1
1074
+
'@eslint/eslintrc': 3.3.1
1075
+
'@eslint/js': 9.32.0
1076
+
'@eslint/plugin-kit': 0.3.4
1077
+
'@humanfs/node': 0.16.6
1078
+
'@humanwhocodes/module-importer': 1.0.1
1079
+
'@humanwhocodes/retry': 0.4.3
1080
+
'@types/estree': 1.0.8
1081
+
'@types/json-schema': 7.0.15
1082
+
ajv: 6.12.6
1083
+
chalk: 4.1.2
1084
+
cross-spawn: 7.0.6
1085
+
debug: 4.4.1
1086
+
escape-string-regexp: 4.0.0
1087
+
eslint-scope: 8.4.0
1088
+
eslint-visitor-keys: 4.2.1
1089
+
espree: 10.4.0
1090
+
esquery: 1.6.0
1091
+
esutils: 2.0.3
1092
+
fast-deep-equal: 3.1.3
1093
+
file-entry-cache: 8.0.0
1094
+
find-up: 5.0.0
1095
+
glob-parent: 6.0.2
1096
+
ignore: 5.3.2
1097
+
imurmurhash: 0.1.4
1098
+
is-glob: 4.0.3
1099
+
json-stable-stringify-without-jsonify: 1.0.1
1100
+
lodash.merge: 4.6.2
1101
+
minimatch: 3.1.2
1102
+
natural-compare: 1.4.0
1103
+
optionator: 0.9.4
1104
+
transitivePeerDependencies:
1105
+
- supports-color
1106
+
1107
+
espree@10.4.0:
1108
+
dependencies:
1109
+
acorn: 8.15.0
1110
+
acorn-jsx: 5.3.2(acorn@8.15.0)
1111
+
eslint-visitor-keys: 4.2.1
1112
+
1113
+
esquery@1.6.0:
1114
+
dependencies:
1115
+
estraverse: 5.3.0
1116
+
1117
+
esrecurse@4.3.0:
1118
+
dependencies:
1119
+
estraverse: 5.3.0
1120
+
1121
+
estraverse@5.3.0: {}
1122
+
1123
+
esutils@2.0.3: {}
1124
+
1125
+
fast-deep-equal@3.1.3: {}
1126
+
1127
+
fast-json-stable-stringify@2.1.0: {}
1128
+
1129
+
fast-levenshtein@2.0.6: {}
1130
+
1131
+
file-entry-cache@8.0.0:
1132
+
dependencies:
1133
+
flat-cache: 4.0.1
1134
+
1135
+
fill-range@7.1.1:
1136
+
dependencies:
1137
+
to-regex-range: 5.0.1
1138
+
1139
+
find-up@5.0.0:
1140
+
dependencies:
1141
+
locate-path: 6.0.0
1142
+
path-exists: 4.0.0
1143
+
1144
+
flat-cache@4.0.1:
1145
+
dependencies:
1146
+
flatted: 3.3.3
1147
+
keyv: 4.5.4
1148
+
1149
+
flatted@3.3.3: {}
1150
+
1151
+
fsevents@2.3.3:
1152
+
optional: true
1153
+
1154
+
glob-parent@6.0.2:
1155
+
dependencies:
1156
+
is-glob: 4.0.3
1157
+
1158
+
globals@14.0.0: {}
1159
+
1160
+
globals@16.3.0: {}
1161
+
1162
+
has-flag@4.0.0: {}
1163
+
1164
+
htmlparser2@9.1.0:
1165
+
dependencies:
1166
+
domelementtype: 2.3.0
1167
+
domhandler: 5.0.3
1168
+
domutils: 3.2.2
1169
+
entities: 4.5.0
1170
+
1171
+
ignore@5.3.2: {}
1172
+
1173
+
import-fresh@3.3.1:
1174
+
dependencies:
1175
+
parent-module: 1.0.1
1176
+
resolve-from: 4.0.0
1177
+
1178
+
imurmurhash@0.1.4: {}
1179
+
1180
+
is-extglob@2.1.1: {}
1181
+
1182
+
is-glob@4.0.3:
1183
+
dependencies:
1184
+
is-extglob: 2.1.1
1185
+
1186
+
is-number@7.0.0: {}
1187
+
1188
+
isexe@2.0.0: {}
1189
+
1190
+
js-yaml@4.1.0:
1191
+
dependencies:
1192
+
argparse: 2.0.1
1193
+
1194
+
json-buffer@3.0.1: {}
1195
+
1196
+
json-schema-traverse@0.4.1: {}
1197
+
1198
+
json-stable-stringify-without-jsonify@1.0.1: {}
1199
+
1200
+
keyv@4.5.4:
1201
+
dependencies:
1202
+
json-buffer: 3.0.1
1203
+
1204
+
levn@0.4.1:
1205
+
dependencies:
1206
+
prelude-ls: 1.2.1
1207
+
type-check: 0.4.0
1208
+
1209
+
locate-path@6.0.0:
1210
+
dependencies:
1211
+
p-locate: 5.0.0
1212
+
1213
+
lodash.merge@4.6.2: {}
1214
+
1215
+
micromatch@4.0.8:
1216
+
dependencies:
1217
+
braces: 3.0.3
1218
+
picomatch: 2.3.1
1219
+
1220
+
minimatch@3.1.2:
1221
+
dependencies:
1222
+
brace-expansion: 1.1.12
1223
+
1224
+
ms@2.1.3: {}
1225
+
1226
+
nanoid@3.3.11: {}
1227
+
1228
+
natural-compare@1.4.0: {}
1229
+
1230
+
optionator@0.9.4:
1231
+
dependencies:
1232
+
deep-is: 0.1.4
1233
+
fast-levenshtein: 2.0.6
1234
+
levn: 0.4.1
1235
+
prelude-ls: 1.2.1
1236
+
type-check: 0.4.0
1237
+
word-wrap: 1.2.5
1238
+
1239
+
p-limit@3.1.0:
1240
+
dependencies:
1241
+
yocto-queue: 0.1.0
1242
+
1243
+
p-locate@5.0.0:
1244
+
dependencies:
1245
+
p-limit: 3.1.0
1246
+
1247
+
parent-module@1.0.1:
1248
+
dependencies:
1249
+
callsites: 3.1.0
1250
+
1251
+
path-exists@4.0.0: {}
1252
+
1253
+
path-key@3.1.1: {}
1254
+
1255
+
picocolors@1.1.1: {}
1256
+
1257
+
picomatch@2.3.1: {}
1258
+
1259
+
postcss@8.5.6:
1260
+
dependencies:
1261
+
nanoid: 3.3.11
1262
+
picocolors: 1.1.1
1263
+
source-map-js: 1.2.1
1264
+
1265
+
prelude-ls@1.2.1: {}
1266
+
1267
+
punycode@2.3.1: {}
1268
+
1269
+
resolve-from@4.0.0: {}
1270
+
1271
+
rollup@4.46.2:
1272
+
dependencies:
1273
+
'@types/estree': 1.0.8
1274
+
optionalDependencies:
1275
+
'@rollup/rollup-android-arm-eabi': 4.46.2
1276
+
'@rollup/rollup-android-arm64': 4.46.2
1277
+
'@rollup/rollup-darwin-arm64': 4.46.2
1278
+
'@rollup/rollup-darwin-x64': 4.46.2
1279
+
'@rollup/rollup-freebsd-arm64': 4.46.2
1280
+
'@rollup/rollup-freebsd-x64': 4.46.2
1281
+
'@rollup/rollup-linux-arm-gnueabihf': 4.46.2
1282
+
'@rollup/rollup-linux-arm-musleabihf': 4.46.2
1283
+
'@rollup/rollup-linux-arm64-gnu': 4.46.2
1284
+
'@rollup/rollup-linux-arm64-musl': 4.46.2
1285
+
'@rollup/rollup-linux-loongarch64-gnu': 4.46.2
1286
+
'@rollup/rollup-linux-ppc64-gnu': 4.46.2
1287
+
'@rollup/rollup-linux-riscv64-gnu': 4.46.2
1288
+
'@rollup/rollup-linux-riscv64-musl': 4.46.2
1289
+
'@rollup/rollup-linux-s390x-gnu': 4.46.2
1290
+
'@rollup/rollup-linux-x64-gnu': 4.46.2
1291
+
'@rollup/rollup-linux-x64-musl': 4.46.2
1292
+
'@rollup/rollup-win32-arm64-msvc': 4.46.2
1293
+
'@rollup/rollup-win32-ia32-msvc': 4.46.2
1294
+
'@rollup/rollup-win32-x64-msvc': 4.46.2
1295
+
fsevents: 2.3.3
1296
+
1297
+
shebang-command@2.0.0:
1298
+
dependencies:
1299
+
shebang-regex: 3.0.0
1300
+
1301
+
shebang-regex@3.0.0: {}
1302
+
1303
+
source-map-js@1.2.1: {}
1304
+
1305
+
strip-json-comments@3.1.1: {}
1306
+
1307
+
supports-color@7.2.0:
1308
+
dependencies:
1309
+
has-flag: 4.0.0
1310
+
1311
+
to-regex-range@5.0.1:
1312
+
dependencies:
1313
+
is-number: 7.0.0
1314
+
1315
+
type-check@0.4.0:
1316
+
dependencies:
1317
+
prelude-ls: 1.2.1
1318
+
1319
+
uri-js@4.4.1:
1320
+
dependencies:
1321
+
punycode: 2.3.1
1322
+
1323
+
vite-plugin-dom@1.0.4(vite@5.4.19):
1324
+
dependencies:
1325
+
htmlparser2: 9.1.0
1326
+
vite: 5.4.19
1327
+
1328
+
vite-plugin-singlefile@2.3.0(rollup@4.46.2)(vite@5.4.19):
1329
+
dependencies:
1330
+
micromatch: 4.0.8
1331
+
rollup: 4.46.2
1332
+
vite: 5.4.19
1333
+
1334
+
vite@5.4.19:
1335
+
dependencies:
1336
+
esbuild: 0.21.5
1337
+
postcss: 8.5.6
1338
+
rollup: '@rollup/wasm-node@4.46.2'
1339
+
optionalDependencies:
1340
+
fsevents: 2.3.3
1341
+
1342
+
which@2.0.2:
1343
+
dependencies:
1344
+
isexe: 2.0.0
1345
+
1346
+
word-wrap@1.2.5: {}
1347
+
1348
+
yocto-queue@0.1.0: {}
+27
-5
release.sh
+27
-5
release.sh
···
1
1
#!/bin/sh
2
2
set -e
3
3
FILES="
4
-
asn1.js oids.js base64.js hex.js int10.js dom.js test.js
5
-
index.css index.js index.html
6
-
README.md LICENSE
4
+
asn1.js oids.js defs.js base64.js hex.js 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
8
+
README.md LICENSE CHANGELOG.md
7
9
updateOID.sh check.sh
8
10
examples
9
11
"
10
-
type gsha256sum >/dev/null && SHA256=gsha256sum || SHA256=sha256sum
11
-
$SHA256 -t $FILES | gpg --clearsign > sha256sums.asc
12
+
mtn automate tags 'it.lapo.asn1js{,.*}' | \
13
+
awk '/^revision/ { print substr($2, 2, length($2) - 2)}' | \
14
+
while read rev; do
15
+
mtn automate certs $rev | awk -v q='"' '
16
+
$2 == q "date" q { rdate=NR+1 }
17
+
$2 == q "tag" q { rtag=NR+1 }
18
+
NR == rdate { date=substr($2, 2, 10) }
19
+
NR == rtag { tag=substr($2, 2, length($2)-2) }
20
+
END { print date " " tag }
21
+
'
22
+
done | sort -r | awk -v q='"' '
23
+
BEGIN {
24
+
print "export const tags = {"
25
+
}
26
+
{ print " " q $2 q ": " q $1 q "," }
27
+
END { print "};" }
28
+
' > tags.js
29
+
chmod 644 examples/*
30
+
type gsha256sum >/dev/null 2>/dev/null && SHA256=gsha256sum || SHA256=sha256sum
31
+
pnpm build
32
+
cp dist/index.html index-local.html
33
+
$SHA256 -t $FILES examples/* | gpg --clearsign > sha256sums.asc
12
34
7z a -tzip -mx=9 asn1js.zip $FILES sha256sums.asc
13
35
rsync -Pvrtz asn1js.zip $FILES lapo.it:www/asn1js/
+11877
rfcdef.js
+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
+
;
+183
-36
test.js
+183
-36
test.js
···
1
1
#!/usr/bin/env node
2
-
'use strict';
2
+
3
+
import * as fs from 'fs'; // 'node:fs' doesn't work on NodeJS 14.5.0
4
+
import { ASN1, Stream } from './asn1.js';
5
+
import { Defs } from './defs.js';
6
+
import { Hex } from './hex.js';
7
+
import { Base64 } from './base64.js';
8
+
import { Int10 } from './int10.js';
9
+
import { createPatch } from 'diff';
10
+
11
+
const all = (process.argv[2] == 'all');
12
+
13
+
/** @type {Array<Tests>} */
14
+
const tests = [];
15
+
16
+
const stats = {
17
+
run: 0,
18
+
error: 0,
19
+
};
20
+
21
+
function diff(str1, str2) {
22
+
let s = createPatch('test', str1, str2, null, null, { context: 2 });
23
+
s = s.slice(s.indexOf('@@'), -1);
24
+
s = s.replace(/^@@.*/mg, '\x1B[34m$&\x1B[39m');
25
+
s = s.replace(/^-.*/mg, '\x1B[31m$&\x1B[39m');
26
+
s = s.replace(/^\+.*/mg, '\x1B[32m$&\x1B[39m');
27
+
return s;
28
+
}
29
+
30
+
/**
31
+
* A class for managing and executing tests.
32
+
*/
33
+
class Tests {
34
+
/**
35
+
* The title of the test suite.
36
+
* @type {string}
37
+
*/
38
+
title;
39
+
40
+
/**
41
+
* An array to store test data.
42
+
* @type {Array<unknown>}
43
+
*/
44
+
data;
3
45
4
-
const
5
-
Hex = require('./hex.js'),
6
-
ASN1 = require('./asn1.js'),
7
-
all = (process.argv[2] == 'all');
46
+
/**
47
+
* Checks a row of test data.
48
+
* @param {Function} t - How to test a row of data.
49
+
*/
50
+
checkRow;
8
51
9
-
const tests = [
52
+
/**
53
+
* Constructs a new Tests instance.
54
+
* @param {string} title - The title of the test suite.
55
+
* @param {Function} checkRow - A function to check each row of data.
56
+
* @param {Array<unknown>} data - The test data to be processed.
57
+
*/
58
+
constructor(title, checkRow, data) {
59
+
this.title = title;
60
+
this.checkRow = checkRow;
61
+
this.data = data;
62
+
}
63
+
64
+
/**
65
+
* Executes the tests and checks their results for all rows.
66
+
*/
67
+
checkAll() {
68
+
if (all) console.log('\x1B[1m\x1B[34m' + this.title + '\x1B[39m\x1B[22m');
69
+
for (const t of this.data)
70
+
this.checkRow(t);
71
+
}
72
+
73
+
/**
74
+
* Prints the result of a test, indicating if it passed or failed.
75
+
* @param {unknown} result The actual result of the test.
76
+
* @param {unknown} expected The expected result of the test.
77
+
* @param {string} comment A comment describing the test.
78
+
*/
79
+
checkResult(result, expected, comment) {
80
+
++stats.run;
81
+
if (!result || result == expected) {
82
+
if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment);
83
+
} else {
84
+
++stats.error;
85
+
console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment);
86
+
if (result.length > 100) {
87
+
console.log(' \x1B[1m\x1B[34mDIF\x1B[39m\x1B[22m ' + diff(result, expected.toString()).replace(/\n/g, '\n '));
88
+
} else {
89
+
console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n '));
90
+
console.log(' \x1B[1m\x1B[33mGOT\x1B[39m\x1B[22m ' + result.replace(/\n/g, '\n '));
91
+
}
92
+
}
93
+
}
94
+
}
95
+
96
+
tests.push(new Tests('ASN.1', function (t) {
97
+
const input = t[0],
98
+
expected = t[1],
99
+
comment = t[2];
100
+
let result;
101
+
try {
102
+
let node = ASN1.decode(Hex.decode(input));
103
+
if (typeof expected == 'function')
104
+
result = expected(node);
105
+
else
106
+
result = node.content();
107
+
//TODO: check structure, not only first level content
108
+
} catch (e) {
109
+
result = 'Exception:\n' + e;
110
+
}
111
+
if (expected instanceof RegExp)
112
+
result = expected.test(result) ? null : 'does not match';
113
+
this.checkResult(result, expected, comment);
114
+
}, [
10
115
// RSA Laboratories technical notes from https://luca.ntop.org/Teaching/Appunti/asn1.html
11
116
['0304066E5DC0', '(18 bit)\n011011100101110111', 'ntop, bit string: DER encoding'],
12
117
['0304066E5DE0', '(18 bit)\n011011100101110111', 'ntop, bit string: padded with "100000"'],
···
36
141
['170D3931303530363233343534305A', '1991-05-06 23:45:40 UTC', 'ntop, utc time: UTC'],
37
142
['17113931303530363136343534302D30373030', '1991-05-06 16:45:40 UTC-07:00', 'ntop, utc time: PDT'],
38
143
// inspired by http://luca.ntop.org/Teaching/Appunti/asn1.html
39
-
['0304086E5DC0', 'Exception:\nInvalid BitString with unusedBits=8', 'bit string: invalid unusedBits'],
144
+
['0304086E5DC0', 'Exception:\nError: Invalid BitString with unusedBits=8', 'bit string: invalid unusedBits'],
40
145
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa379076(v=vs.85).aspx
41
146
['30820319308202820201003023310F300D0603550403130654657374434E3110300E060355040A1307546573744F726730819F300D06092A864886F70D010101050003818D00308189028181008FE2412A08E851A88CB3E853E7D54950B3278A2BCBEAB54273EA0257CC6533EE882061A11756C12418E3A808D3BED931F3370B94B8CC43080B7024F79CB18D5DD66D82D0540984F89F970175059C89D4D5C91EC913D72A6B309119D6D442E0C49D7C9271E1B22F5C8DEEF0F1171ED25F315BB19CBC2055BF3A37424575DC90650203010001A08201B4301A060A2B0601040182370D0203310C160A362E302E353336312E323042060A2B0601040182370D0201313430321E260043006500720074006900660069006300610074006500540065006D0070006C0061007400651E080055007300650072305706092B0601040182371514314A30480201090C237669636833642E6A646F6D6373632E6E74746573742E6D6963726F736F66742E636F6D0C154A444F4D4353435C61646D696E6973747261746F720C07636572747265713074060A2B0601040182370D0202316630640201011E5C004D006900630072006F0073006F0066007400200045006E00680061006E006300650064002000430072007900700074006F0067007200610070006800690063002000500072006F00760069006400650072002000760031002E003003010030818206092A864886F70D01090E31753073301706092B0601040182371402040A1E08005500730065007230290603551D2504223020060A2B0601040182370A030406082B0601050507030406082B06010505070302300E0603551D0F0101FF0404030205A0301D0603551D0E041604143C0F73DAF8EF41D83AEABE922A5D2C966A7B9454300D06092A864886F70D01010505000381810047EB995ADF9E700DFBA73132C15F5C24C2E0BFC624AF15660EB86A2EAB2BC4971FE3CBDC63A525ECC7B428616636A1311BBFDDD0FCBF1794901DE55EC7115EC9559FEBA33E14C799A6CBBAA1460F39D444C4C84B760E205D6DA9349ED4D58742EB2426511490B40F065E5288327A9520A0FDF7E57D60DD72689BF57B058F6D1E',
42
147
'(3 elem)', 'PKCS#10 request'],
···
86
191
['0420041EE4E3B7ED350CC24D034E436D9A1CB15BB1E328D37062FB82E84618AB0A3C', '(32 byte)\n041EE4E3B7ED350CC24D034E436D9A1CB15BB1E328D37062FB82E84618AB0A3C', 'Do not mix encapsulated and structured octet strings'], // GitHub issue #47
87
192
['181531393835313130363231303632372E332D31323334', '1985-11-06 21:06:27.3 UTC-12:34', 'UTC offsets with minutes'], // GitHub issue #54
88
193
['181331393835313130363231303632372E332B3134', '1985-11-06 21:06:27.3 UTC+14:00', 'UTC offset +13 and +14'], // GitHub issue #54
89
-
];
194
+
['032100171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', n => { if (n.sub != null) return 'Should not decode content: ' + n.sub[0].content(); }, 'Key that resembles an UTCTime'], // GitHub issue #79
195
+
['171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', /^Exception:\nError: Unrecognized time: /, 'Invalid UTCTime'], // GitHub issue #79
196
+
]));
90
197
91
-
let
92
-
run = 0,
93
-
expErr = 0,
94
-
error = 0;
95
-
tests.forEach(function (t) {
96
-
const input = t[0],
97
-
expected = t[1],
98
-
comment = t[2],
99
-
errorReason = t[3];
100
-
let result;
101
-
try {
102
-
result = ASN1.decode(Hex.decode(input)).content();
103
-
//TODO: check structure, not only first level content
104
-
} catch (e) {
105
-
result = 'Exception:\n' + e;
198
+
tests.push(new Tests('Dump of examples', function () {
199
+
const examples = fs.readdirSync('examples/').filter(f => f.endsWith('.dump'));
200
+
for (const example of examples) {
201
+
const filename = example.slice(0, -5); // Remove '.dump' suffix
202
+
const expected = fs.readFileSync('examples/' + example, 'utf8');
203
+
let data = fs.readFileSync('examples/' + filename);
204
+
data = Base64.unarmor(data);
205
+
let node = ASN1.decode(data);
206
+
const types = Defs.commonTypes
207
+
.map(type => {
208
+
const stats = Defs.match(node, type);
209
+
return { type, match: stats.recognized / stats.total };
210
+
})
211
+
.sort((a, b) => b.match - a.match);
212
+
Defs.match(node, types[0].type);
213
+
let result = node.toPrettyString();
214
+
this.checkResult(result, expected, 'Dump of examples/' + filename);
106
215
}
107
-
++run;
108
-
if (result == expected) {
109
-
if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment);
110
-
} else if (errorReason) {
111
-
++expErr;
112
-
console.log('\x1B[1m\x1B[33mEXP\x1B[39m\x1B[22m ' + comment + ' (' + errorReason + ')' + '\n' + result);
113
-
} else {
114
-
++error;
115
-
console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment + '\n' + result);
116
-
}
117
-
});
118
-
console.log(run + ' tested, ' + expErr + ' expected, ' + error + ' errors.');
119
-
process.exit(error ? 1 : 0);
216
+
}, [
217
+
[0],
218
+
]));
219
+
220
+
tests.push(new Tests('Base64', function (t) {
221
+
let bin = Base64.decode(t);
222
+
let url = new Stream(bin, 0).b64Dump(0, bin.length);
223
+
// check base64url encoding
224
+
this.checkResult(url, t.replace(/\n/g, '').replace(/=*$/g, ''), 'Base64url: ' + bin.length + ' bytes');
225
+
// check conversion from base64url to base64
226
+
let pretty = Base64.pretty(url);
227
+
this.checkResult(pretty, t, 'Base64pretty: ' + bin.length + ' bytes');
228
+
let std = new Stream(bin, 0).b64Dump(0, bin.length, 'std');
229
+
// check direct base64 encoding
230
+
this.checkResult(std, t.replace(/\n/g, ''), 'Base64: ' + bin.length + ' bytes');
231
+
}, [
232
+
'AA==',
233
+
'ABA=',
234
+
'ABCD',
235
+
'ABCDEA==',
236
+
'ABCDEFE=',
237
+
'ABCDEFGH',
238
+
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQR\nSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456w==',
239
+
]));
240
+
241
+
tests.push(new Tests('Int10', function (t) {
242
+
this.row = (0|this.row) + 1;
243
+
this.num = this.num || new Int10();
244
+
this.num.mulAdd(t[0], t[1]);
245
+
this.checkResult(this.num.toString(), t[2], 'Int10 row ' + this.row);
246
+
}, [
247
+
[0, 1000000000, '1000000000'],
248
+
[256, 23, '256000000023'],
249
+
[256, 23, '65536000005911'],
250
+
[256, 23, '16777216001513239'],
251
+
[256, 23, '4294967296387389207'],
252
+
[256, 23, '1099511627875171637015'],
253
+
[256, 23, '281474976736043939075863'],
254
+
[253, 1, '71213169114219116586193340'],
255
+
[253, 1, '18016931785897436496306915021'],
256
+
[253, 1, '4558283741832051433565649500314'],
257
+
[253, 1, '1153245786683509012692109323579443'],
258
+
[253, 1, '291771184030927780211103658865599080'],
259
+
[1, 0, '291771184030927780211103658865599080'],
260
+
]));
261
+
262
+
for (const t of tests)
263
+
t.checkAll();
264
+
265
+
console.log(stats.run + ' tested, ' + stats.error + ' errors.');
266
+
process.exit(stats.error ? 1 : 0);
+32
testDefs.js
+32
testDefs.js
···
1
+
#!/usr/bin/env node
2
+
3
+
import { promises as fs } from 'node:fs';
4
+
import { ASN1 } from './asn1.js';
5
+
import { Base64 } from './base64.js';
6
+
import { Defs } from './defs.js';
7
+
8
+
const tot = [];
9
+
for await (const file of await fs.opendir('examples')) {
10
+
let content = await fs.readFile('examples/' + file.name);
11
+
try {
12
+
try { // try PEM first
13
+
content = Base64.unarmor(content);
14
+
} catch (ignore) { // try DER/BER then
15
+
}
16
+
let result = ASN1.decode(content);
17
+
content = null;
18
+
const types = Defs.commonTypes
19
+
.map(type => {
20
+
const stats = Defs.match(result, type);
21
+
return { type, match: stats.recognized / stats.total };
22
+
})
23
+
.sort((a, b) => b.match - a.match);
24
+
tot.push([ types[0].match, file.name, types[0].type.description ]);
25
+
} catch (e) {
26
+
tot.push([ 0, file.name, e.message ]);
27
+
}
28
+
}
29
+
for (const f of tot)
30
+
console.log(f[0].toFixed(3) + '\t' + f[1] + '\t' + f[2]);
31
+
const avg = tot.map(f => f[0]).reduce((sum, val) => sum + val) / tot.length;
32
+
console.log('\x1B[1m\x1B[32m' + (avg * 100).toFixed(3) + '\x1B[39m\x1B[22m%\tAVERAGE');
+37
theme.js
+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
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
tree-icon-light.svg
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="14"><circle cx="6.936" cy="7.247" r="5.165" style="fill:silver;fill-opacity:1;stroke:#999;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><circle cx="21.166" cy="7.174" r="5.165" style="fill:silver;fill-opacity:1;stroke:#999;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><path d="M17.94 7.216h6.784" style="fill:none;fill-opacity:1;stroke:#999;stroke-width:1.03676;stroke-dasharray:none;stroke-opacity:1"/><g style="fill:none;fill-opacity:1;stroke:#999;stroke-width:.518375;stroke-dasharray:none;stroke-opacity:1"><path d="M5.231 9.992h9.466" style="opacity:.992268;fill:none;fill-opacity:1;stroke:#999;stroke-width:1.44663;stroke-dasharray:none;stroke-opacity:1" transform="translate(-.256 .062)scale(.71667)"/><path d="M10.006 5.242v9.465" style="opacity:1;fill:none;fill-opacity:1;stroke:#999;stroke-width:1.44663;stroke-dasharray:none;stroke-opacity:1" transform="translate(-.256 .062)scale(.71667)"/></g></svg>
+3
-10
updateOID.sh
+3
-10
updateOID.sh
···
10
10
fi
11
11
cat dumpasn1.cfg | \
12
12
tr -d '\r' | \
13
-
awk -v url="$URL" '
13
+
awk -v apos="'" -v q='"' -v url="$URL" '
14
14
function clean() {
15
15
oid = "";
16
16
comment = "";
···
19
19
}
20
20
BEGIN {
21
21
FS = "= *";
22
-
apos = sprintf("%c", 39);
23
22
clean();
24
23
print "// Converted from: " url;
25
24
print "// which is made by Peter Gutmann and whose license states:";
26
25
print "// You can use this code in whatever way you want,";
27
26
print "// as long as you don" apos "t try to claim you wrote it.";
28
-
print "(typeof define != " apos "undefined" apos " ? define : function (factory) { " apos "use strict" apos ";";
29
-
print " if (typeof module == " apos "object" apos ") module.exports = factory();";
30
-
print " else window.oids = factory();";
31
-
print "})(function () {";
32
-
print apos "use strict" apos ";";
33
-
print "return {";
27
+
print "export const oids = {";
34
28
}
35
29
/^OID/ { oid = $2; }
36
30
/^Comment/ { comment = $2; }
···
49
43
}
50
44
}
51
45
END {
52
-
print "\"END\": \"\""
53
-
print "};});"
46
+
print "};"
54
47
}
55
48
' >oids.js
56
49
echo Conversion completed.
+15
-3
updateRFC.sh
+15
-3
updateRFC.sh
···
1
1
#/bin/sh
2
+
RFCs="5280 5208 3369 3161 2986 4211 4210 8017 4511"
2
3
downloadRFC() {
3
4
URL="https://www.ietf.org/rfc/rfc$1.txt"
4
5
if [ -x /usr/bin/fetch ]; then
···
10
11
exit 1
11
12
fi
12
13
}
13
-
echo '{}' > rfcasn1.json # start from scratch
14
+
echo '{}' > rfcdef.json # start from scratch
14
15
mkdir -p rfc
15
16
cd rfc
16
-
for n in 5280 3369 3161; do
17
+
for n in $RFCs; do
17
18
downloadRFC $n
18
-
../parseRFC.js rfc$n.txt ../rfcasn1.json
19
+
../parseRFC.js rfc$n.txt ../rfcdef.json
19
20
done
21
+
cd ..
22
+
{
23
+
echo "// content parsed from ASN.1 definitions as found in the following RFCs: $RFCs"
24
+
echo "// Copyright (C) The IETF Trust (2008)"
25
+
echo "// as far as I can tell this file is allowed under the following clause:"
26
+
echo "// It is acceptable under the current IETF rules (RFC 5378) to modify extracted code if necessary."
27
+
echo "// https://trustee.ietf.org/about/faq/#reproducing-rfcs"
28
+
echo -n "export const rfcdef = "
29
+
cat rfcdef.json
30
+
echo ";"
31
+
} > rfcdef.js
20
32
echo Conversion completed.
+37
vite.config.js
+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
+
});