JavaScript generic ASN.1 parser (mirror)

Compare changes

Choose any two refs to compare.

+10
.editorconfig
···
··· 1 + root = true 2 + end_of_line = lf 3 + max_line_length = 120 4 + 5 + [*.{js,css}] 6 + charset = utf-8 7 + indent_size = 4 8 + indent_style = space 9 + insert_final_newline = true 10 + trim_trailing_whitespace = true
+9 -5
.github/workflows/node.js.yml
··· 12 13 strategy: 14 matrix: 15 - node-version: [ 12.20.0, latest ] 16 17 steps: 18 - uses: actions/checkout@v4 19 - name: Use Node.js ${{ matrix.node-version }} 20 uses: actions/setup-node@v4 21 with: 22 node-version: ${{ matrix.node-version }} 23 - - run: npm test all 24 - - run: npm install 25 - if: matrix.node-version == 'latest' 26 - - run: npm run lint 27 if: matrix.node-version == 'latest'
··· 12 13 strategy: 14 matrix: 15 + node-version: [ 14.6.0, latest ] 16 17 steps: 18 - uses: actions/checkout@v4 19 + - name: Use pnpm 20 + uses: pnpm/action-setup@v4 21 + with: 22 + run_install: false 23 - name: Use Node.js ${{ matrix.node-version }} 24 uses: actions/setup-node@v4 25 with: 26 node-version: ${{ matrix.node-version }} 27 + cache: pnpm 28 + - run: pnpm install 29 + - run: node test all 30 + - run: pnpm run lint 31 if: matrix.node-version == 'latest'
-1
.gitignore
··· 4 node_modules/ 5 dist/ 6 package-lock.json 7 - pnpm-lock.yaml 8 # Artifacts from release.sh 9 index-local.html 10 sha256sums.asc
··· 4 node_modules/ 5 dist/ 6 package-lock.json 7 # Artifacts from release.sh 8 index-local.html 9 sha256sums.asc
-1
.mtn-ignore
··· 3 node_modules$ 4 dist$ 5 package-lock[.]json 6 - pnpm-lock[.]yaml 7 # Artifacts from release.sh 8 index-local.html 9 sha256sums[.]asc
··· 3 node_modules$ 4 dist$ 5 package-lock[.]json 6 # Artifacts from release.sh 7 index-local.html 8 sha256sums[.]asc
+25 -1
.vscode/launch.json
··· 7 { 8 "type": "node", 9 "request": "launch", 10 "name": "dumpASN1", 11 "skipFiles": [ 12 "<node_internals>/**" ··· 32 { 33 "type": "node", 34 "request": "launch", 35 - "name": "dumpASN1 cert", 36 "skipFiles": [ 37 "<node_internals>/**" 38 ],
··· 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>/**" ··· 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 ],
+2 -2
.vscode/settings.json
··· 1 { 2 "editor.insertSpaces": true, 3 "editor.tabSize": 8, 4 - "editor.indentSize": 2, 5 "editor.stickyScroll.enabled": true, 6 "explorer.excludeGitIgnore": true, 7 "files.eol": "\n", 8 "git.openRepositoryInParentFolders": "never" 9 - }
··· 1 { 2 "editor.insertSpaces": true, 3 "editor.tabSize": 8, 4 + "editor.indentSize": 4, 5 "editor.stickyScroll.enabled": true, 6 "explorer.excludeGitIgnore": true, 7 "files.eol": "\n", 8 "git.openRepositoryInParentFolders": "never" 9 + }
+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
README.md
··· 105 - [dedicated domain](https://asn1js.eu/) 106 - [InDefero tracker](http://idf.lapo.it/p/asn1js/) 107 - [GitHub mirror](https://github.com/lapo-luchini/asn1js) 108 - [Ohloh code stats](https://www.openhub.net/p/asn1js)
··· 105 - [dedicated domain](https://asn1js.eu/) 106 - [InDefero tracker](http://idf.lapo.it/p/asn1js/) 107 - [GitHub mirror](https://github.com/lapo-luchini/asn1js) 108 + - [ChangeLog on GitHub](https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md) 109 - [Ohloh code stats](https://www.openhub.net/p/asn1js)
+5 -2
asn1.js
··· 295 s = this.parseStringUTF(start, end, maxLength); 296 checkPrintable(s.str); 297 return { size: end - start, str: s.str }; 298 - } catch (e) { 299 // ignore 300 } 301 maxLength /= 2; // we work in bytes ··· 461 } 462 switch (this.tag.tagNumber) { 463 case 0x01: // BOOLEAN 464 return (this.stream.get(content) === 0) ? 'false' : 'true'; 465 case 0x02: // INTEGER 466 return this.stream.parseInteger(content, content + len); 467 case 0x03: { // BIT_STRING 468 let d = recurse(this, 'parseBitString', maxLength); 469 return '(' + d.size + ' bit)\n' + d.str; 470 } 471 case 0x04: { // OCTET_STRING 472 let d = recurse(this, 'parseOctetString', maxLength); 473 return '(' + d.size + ' byte)\n' + d.str; 474 } ··· 638 throw new Error('Unable to parse content: ' + e); 639 } 640 } 641 - } catch (e) { 642 // but silently ignore when they don't 643 sub = null; 644 //DEBUG console.log('Could not decode structure at ' + start + ':', e);
··· 295 s = this.parseStringUTF(start, end, maxLength); 296 checkPrintable(s.str); 297 return { size: end - start, str: s.str }; 298 + } catch (ignore) { 299 // ignore 300 } 301 maxLength /= 2; // we work in bytes ··· 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 } ··· 641 throw new Error('Unable to parse content: ' + e); 642 } 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);
+8 -6
defs.js
··· 23 try { 24 // hope current OIDs contain the type name (will need to parse from RFC itself) 25 def = Defs.searchType(firstUpper(stats.defs[def.definedBy][1])); 26 - } catch (e) { /*ignore*/ } 27 while (def?.type == 'defined' || def?.type?.type == 'defined') { 28 const name = def?.type?.type ? def.type.name : def.name; 29 def = Object.assign({}, def); ··· 35 c = translate(c); 36 if (tn == c.type.name || tn == c.name) { 37 def = Object.assign({}, def); 38 - if (c.id) def.id = c.id; 39 def.type = c.type.name ? c.type : c; 40 break; 41 } ··· 69 70 static match(value, def, stats = { total: 0, recognized: 0, defs: {} }) { 71 value.def = {}; 72 - let tn = value.typeName().replaceAll('_', ' '); 73 def = translate(def, tn, stats); 74 ++stats.total; 75 if (def?.type) { ··· 90 if (def.typeOf) 91 type = def.content[0]; 92 else { 93 - let tn = subval.typeName().replaceAll('_', ' '); 94 for (;;) { 95 type = def.content[j++]; 96 if (!type || typeof type != 'object') break; 97 if (type?.type?.type) 98 - type = type.type; 99 if (type.type == 'defined') { 100 let t2 = translate(type, tn); 101 if (t2.type.name == tn) break; // exact match ··· 113 } else if (type?.definedBy && stats.defs?.[type.definedBy]?.[1]) { // hope current OIDs contain the type name (will need to parse from RFC itself) 114 try { 115 type = Defs.searchType(firstUpper(stats.defs[type.definedBy][1])); 116 - } catch (e) { /*ignore*/ } 117 } 118 } 119 }
··· 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); ··· 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 } ··· 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) { ··· 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 ··· 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 }
+1 -1
dumpASN1.js
··· 52 : fs.readFileSync(filename); 53 try { // try PEM first 54 content = Base64.unarmor(content); 55 - } catch (e) { // try DER/BER then 56 } 57 let result = ASN1.decode(content); 58 content = null;
··· 52 : fs.readFileSync(filename); 53 try { // try PEM first 54 content = Base64.unarmor(content); 55 + } catch (ignore) { // try DER/BER then 56 } 57 let result = ASN1.decode(content); 58 content = null;
+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 + ];
+45
examples/crl-rfc5280.b64.dump
···
··· 1 + CertificateList SEQUENCE @0+352 (constructed): (3 elem) 2 + tbsCertList TBSCertList SEQUENCE @4+202 (constructed): (7 elem) 3 + version Version INTEGER @7+1: 1 4 + signature AlgorithmIdentifier SEQUENCE @10+13 (constructed): (2 elem) 5 + algorithm OBJECT_IDENTIFIER @12+9: 1.2.840.113549.1.1.5|sha1WithRSAEncryption|PKCS #1 6 + parameters ANY NULL @23+0 7 + issuer rdnSequence Name SEQUENCE @25+67 (constructed): (3 elem) 8 + RelativeDistinguishedName SET @27+19 (constructed): (1 elem) 9 + AttributeTypeAndValue SEQUENCE @29+17 (constructed): (2 elem) 10 + type AttributeType OBJECT_IDENTIFIER @31+10: 0.9.2342.19200300.100.1.25|domainComponent|Men are from Mars, this OID is from Pluto 11 + value AttributeValue [?] IA5String @43+3: com 12 + RelativeDistinguishedName SET @48+23 (constructed): (1 elem) 13 + AttributeTypeAndValue SEQUENCE @50+21 (constructed): (2 elem) 14 + type AttributeType OBJECT_IDENTIFIER @52+10: 0.9.2342.19200300.100.1.25|domainComponent|Men are from Mars, this OID is from Pluto 15 + value AttributeValue [?] IA5String @64+7: example 16 + RelativeDistinguishedName SET @73+19 (constructed): (1 elem) 17 + AttributeTypeAndValue SEQUENCE @75+17 (constructed): (2 elem) 18 + type AttributeType OBJECT_IDENTIFIER @77+3: 2.5.4.3|commonName|X.520 DN component 19 + value AttributeValue [?] PrintableString @82+10: Example CA 20 + thisUpdate utcTime Time UTCTime @94+13: 2005-02-05 12:00:00 UTC 21 + nextUpdate utcTime Time UTCTime @109+13: 2005-02-06 12:00:00 UTC 22 + revokedCertificates SEQUENCE @124+34 (constructed): (1 elem) 23 + SEQUENCE @126+32 (constructed): (3 elem) 24 + userCertificate CertificateSerialNumber INTEGER @128+1: 18 25 + revocationDate utcTime Time UTCTime @131+13: 2004-11-19 15:57:03 UTC 26 + crlEntryExtensions Extensions SEQUENCE @146+12 (constructed): (1 elem) 27 + Extension SEQUENCE @148+10 (constructed): (2 elem) 28 + extnID OBJECT_IDENTIFIER @150+3: 2.5.29.21|cRLReason|X.509 extension 29 + extnValue OCTET_STRING @155+3 (encapsulates): (3 byte)|0A0101 30 + ENUMERATED @157+1: 1 31 + crlExtensions [0] @160+47 (constructed): (1 elem) 32 + Extensions SEQUENCE @162+45 (constructed): (2 elem) 33 + Extension SEQUENCE @164+31 (constructed): (2 elem) 34 + extnID OBJECT_IDENTIFIER @166+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension 35 + extnValue OCTET_STRING @171+24 (encapsulates): (24 byte)|301680140868AF8533C8394A7AF882938E706A4A20842C32 36 + SEQUENCE @173+22 (constructed): (1 elem) 37 + [0] @175+20: (20 byte)|0868AF8533C8394A7AF882938E706A4A20842C32 38 + Extension SEQUENCE @197+10 (constructed): (2 elem) 39 + extnID OBJECT_IDENTIFIER @199+3: 2.5.29.20|cRLNumber|X.509 extension 40 + extnValue OCTET_STRING @204+3 (encapsulates): (3 byte)|02010C 41 + INTEGER @206+1: 12 42 + signatureAlgorithm AlgorithmIdentifier SEQUENCE @209+13 (constructed): (2 elem) 43 + algorithm OBJECT_IDENTIFIER @211+9: 1.2.840.113549.1.1.5|sha1WithRSAEncryption|PKCS #1 44 + parameters ANY NULL @222+0 45 + signature BIT_STRING @224+129: (1024 bit)|0010001011011100000110000111110111110111000010001100111011001100011101011101000011010000011010101001101110101101000100001111010001110110001000111011010010000001011011101011010101101101101111100000111011111011000101010001010001101100110010000001011101101101000111111110111010010000000101111010001001101111011000001110010010111101101010101000110001010101110111101000111010000100011011111001001011111000100111110001000000010010001001111010111101001010110101000010111110000101111000100011011001000100011111011010101010100011010011000010010100111000000101011111111100000000111111010011111001111110111011100011110100100110000100101110101111011000111001110010101101100010111000100010101111000011010001101000000011101111011110001000001011010001000101011100011011010000100111000111001001101010110010111100111001111010111011010110011110011001100010110110111001110000100000010111110101000011010000100111010011000001101001101010111111000001010101010001011110100010001100110100110011010110000001101001100000101011101001001111110000101110
+60
examples/ed25519.cer.dump
···
··· 1 + Certificate SEQUENCE @0+383 (constructed): (3 elem) 2 + tbsCertificate TBSCertificate SEQUENCE @4+305 (constructed): (8 elem) 3 + version [0] @8+3 (constructed): (1 elem) 4 + Version INTEGER @10+1: 2 5 + serialNumber CertificateSerialNumber INTEGER @13+20: (159 bit)|711090297755414526861352146244170174161660335942 6 + signature AlgorithmIdentifier SEQUENCE @35+5 (constructed): (1 elem) 7 + algorithm OBJECT_IDENTIFIER @37+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm 8 + issuer rdnSequence Name SEQUENCE @42+53 (constructed): (3 elem) 9 + RelativeDistinguishedName SET @44+11 (constructed): (1 elem) 10 + AttributeTypeAndValue SEQUENCE @46+9 (constructed): (2 elem) 11 + type AttributeType OBJECT_IDENTIFIER @48+3: 2.5.4.6|countryName|X.520 DN component 12 + value AttributeValue [?] PrintableString @53+2: IT 13 + RelativeDistinguishedName SET @57+15 (constructed): (1 elem) 14 + AttributeTypeAndValue SEQUENCE @59+13 (constructed): (2 elem) 15 + type AttributeType OBJECT_IDENTIFIER @61+3: 2.5.4.7|localityName|X.520 DN component 16 + value AttributeValue [?] UTF8String @66+6: Milano 17 + RelativeDistinguishedName SET @74+21 (constructed): (1 elem) 18 + AttributeTypeAndValue SEQUENCE @76+19 (constructed): (2 elem) 19 + type AttributeType OBJECT_IDENTIFIER @78+3: 2.5.4.3|commonName|X.520 DN component 20 + value AttributeValue [?] UTF8String @83+12: Test ed25519 21 + validity Validity SEQUENCE @97+30 (constructed): (2 elem) 22 + notBefore utcTime Time UTCTime @99+13: 2020-09-02 13:25:26 UTC 23 + notAfter utcTime Time UTCTime @114+13: 2030-09-02 13:25:26 UTC 24 + subject rdnSequence Name SEQUENCE @129+53 (constructed): (3 elem) 25 + RelativeDistinguishedName SET @131+11 (constructed): (1 elem) 26 + AttributeTypeAndValue SEQUENCE @133+9 (constructed): (2 elem) 27 + type AttributeType OBJECT_IDENTIFIER @135+3: 2.5.4.6|countryName|X.520 DN component 28 + value AttributeValue [?] PrintableString @140+2: IT 29 + RelativeDistinguishedName SET @144+15 (constructed): (1 elem) 30 + AttributeTypeAndValue SEQUENCE @146+13 (constructed): (2 elem) 31 + type AttributeType OBJECT_IDENTIFIER @148+3: 2.5.4.7|localityName|X.520 DN component 32 + value AttributeValue [?] UTF8String @153+6: Milano 33 + RelativeDistinguishedName SET @161+21 (constructed): (1 elem) 34 + AttributeTypeAndValue SEQUENCE @163+19 (constructed): (2 elem) 35 + type AttributeType OBJECT_IDENTIFIER @165+3: 2.5.4.3|commonName|X.520 DN component 36 + value AttributeValue [?] UTF8String @170+12: Test ed25519 37 + subjectPublicKeyInfo SubjectPublicKeyInfo SEQUENCE @184+42 (constructed): (2 elem) 38 + algorithm AlgorithmIdentifier SEQUENCE @186+5 (constructed): (1 elem) 39 + algorithm OBJECT_IDENTIFIER @188+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm 40 + subjectPublicKey BIT_STRING @193+33: (256 bit)|0011101110101001001011111111110111001011000101110110011011011110010000001010001010010010111101111001001111011110001100001111100000001010001000111010100000110001001000010101110111010000000001111101100001100011001001000010111011111111011010000010000110000101 41 + extensions [3] @228+83 (constructed): (1 elem) 42 + Extensions SEQUENCE @230+81 (constructed): (3 elem) 43 + Extension SEQUENCE @232+29 (constructed): (2 elem) 44 + extnID OBJECT_IDENTIFIER @234+3: 2.5.29.14|subjectKeyIdentifier|X.509 extension 45 + extnValue OCTET_STRING @239+22 (encapsulates): (22 byte)|04146BA5BDCF9DFA235978126417AE1E72D89A804AE8 46 + OCTET_STRING @241+20: (20 byte)|6BA5BDCF9DFA235978126417AE1E72D89A804AE8 47 + Extension SEQUENCE @263+31 (constructed): (2 elem) 48 + extnID OBJECT_IDENTIFIER @265+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension 49 + extnValue OCTET_STRING @270+24 (encapsulates): (24 byte)|301680146BA5BDCF9DFA235978126417AE1E72D89A804AE8 50 + SEQUENCE @272+22 (constructed): (1 elem) 51 + [0] @274+20: (20 byte)|6BA5BDCF9DFA235978126417AE1E72D89A804AE8 52 + Extension SEQUENCE @296+15 (constructed): (3 elem) 53 + extnID OBJECT_IDENTIFIER @298+3: 2.5.29.19|basicConstraints|X.509 extension 54 + critical BOOLEAN @303+1: true 55 + extnValue OCTET_STRING @306+5 (encapsulates): (5 byte)|30030101FF 56 + SEQUENCE @308+3 (constructed): (1 elem) 57 + BOOLEAN @310+1: true 58 + signatureAlgorithm AlgorithmIdentifier SEQUENCE @313+5 (constructed): (1 elem) 59 + algorithm OBJECT_IDENTIFIER @315+3: 1.3.101.112|curveEd25519|EdDSA 25519 signature algorithm 60 + signature BIT_STRING @320+65: (512 bit)|01101111011100110111011110111110001010001001011001011010001100110011011011010111111001010011010011111101100100001111001111111101010000000111111100011111000000101111100100000000010101111111001000010110000011110001011001101011000001001011111101100101100001001011011010011000110100101101000011010010101111110100110011010110011011110000111010110110111000101110100010011101000001001010001111100000100110010101000011111001110000100110110111011110011100111010110100011101001101010101011110000101011001011000011000000110
+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
+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
+16
examples/pkcs8-rsa.pem.dump
···
··· 1 + PrivateKeyInfo SEQUENCE @0+631 (constructed): (3 elem) 2 + version Version INTEGER @4+1: 0 3 + privateKeyAlgorithm AlgorithmIdentifier SEQUENCE @7+13 (constructed): (2 elem) 4 + algorithm OBJECT_IDENTIFIER @9+9: 1.2.840.113549.1.1.1|rsaEncryption|PKCS #1 5 + parameters ANY NULL @20+0 6 + privateKey PrivateKey OCTET_STRING @22+609 (encapsulates): (609 byte)|3082025D02010002818100A6CB6DE27CDF698B92CEE0C4772D4854D2FF8B666BFBF07FA377E47A90571665FD6A5B8C9F2930E4AF28E32E522162AC66CD70AA1B26888E3EEE268A2B59FECA7E4C693AE26B878B3027F5868429FD8BEBE85BFED3B0E5DF0E9D72AAB1216902B074FA2DD59001EFC4CDB1E7305FF48E0D310C0A4F798EFC758F9703C4F96C930203010001028181008367E1BA7E06C57060C8FBEBCCB8B033A3C8105B30D7DC31B2E7D1E97DAE1EC75B4F5FB0F9F3C9C160FE257D68D74495EEA80C0AF838F37C9DB7A24558C21E28C49D57470B002D90A383CAEBB5821A59583D15502F0012C9235F806C62C97F1E3CAFBC72118FCF60743168125801E06CC7293CDE64D241339AAD516E7BCC1081024100D00E8DE65F7C32094B732A5628CEFEDC35ED796B7CEA6297614545DF71D8DBC67EA14565534BFC9BC5F1A680239227189C2D493924A5BD64641169533201D6E5024100CD3AC881CC47AA776A9829C0E529E3D0DBB5A43C366842578341A051DAFAF4F6164F2DC0E72A3BD3B33F8B2F84A6CF35F0781E7C466E677FF8E553DE5C92C6170240744F3E9A83D4AD302F02B1AF3ADF04F0DC20E698E55B2E448C372AA9903E78164E221FE6561B8B9B159C52C51D9D8DC79F3F5DC8D928E268A5DC69F1FD69B3D5024100B7ACEA92B05F5B8370D52A5947400C727A90C0A25B174878C6324FE7B29273F662D50E5FDD04017360B3784058FA69ED1E8082D83AB8C8CCD1D77D0E3FCFE49502404F79B900CE9185833573BBA54E1B1D157EDFE8C37FC328D2520CCE7CC804A9A28B58D937626EBAD5FDE96534BBEE4E292EE8010CFFC8DB1E546C99FC517B4C67 7 + SEQUENCE @26+605 (constructed): (9 elem) 8 + INTEGER @30+1: 0 9 + INTEGER @33+129: (1024 bit)|117127183230921204401013393277767517103803021018182691416238029726599496957198017684901559383009459523071384847726671610377559004781710040051270748910270447756432733966622455162759462672603884318432883204215291756888413811504344870556870978773843838353155520698675084344179957236491745093327422201227604749459 10 + INTEGER @165+3: 65537 11 + INTEGER @170+129: (1024 bit)|92276282475226568589241550905865273709561889943250510752753436239739158443231274686159532997597455087892667385718350070754140814118578097684166368734227728473322161416664690885212698653195373932779792506838124961141214987311742627151011567342689730655630521241854903774681567286735997541758916977964830429313 12 + INTEGER @302+65: (512 bit)|10896821561662485361386011233938116142526936125648167362054539174681694465821232677159478832161550957167298418313068706031799276527005193877616679381489381 13 + INTEGER @369+65: (512 bit)|10748747473575365133625210720374663113238804836624829882840358384492696273600075746246298849279878235356215808273663889910189484797595139778277124898735639 14 + INTEGER @436+64: (511 bit)|6091625365131581796315047890165719534213640521161662994088715561328917102465668272778610952193459304175325574129665657306361751287362700277617869028176853 15 + INTEGER @502+65: (512 bit)|9619864112105977791898517014707043200694399482542575521432448550956476604540013165392532656448448632323473488540572223305800601817570919153380021725291669 16 + INTEGER @569+64: (511 bit)|4162468593383244686217782691133418477400302049612992866028022118893358867845916127581019785866484075341057799618361552573853678007698434146811407259880551
+118
examples/sig-p256-der.p7m.dump
···
··· 1 + ContentInfo SEQUENCE @0+10868 (constructed): (2 elem) 2 + contentType ContentType OBJECT_IDENTIFIER @4+9: 1.2.840.113549.1.7.2|signedData|PKCS #7 3 + content [0] @15+10853 (constructed): (1 elem) 4 + SignedData SEQUENCE @19+10849 (constructed): (5 elem) 5 + version CMSVersion INTEGER @23+1: 1 6 + digestAlgorithms DigestAlgorithmIdentifiers SET @26+15 (constructed): (1 elem) 7 + DigestAlgorithmIdentifier SEQUENCE @28+13 (constructed): (2 elem) 8 + algorithm OBJECT_IDENTIFIER @30+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm 9 + parameters ANY NULL @41+0 10 + encapContentInfo EncapsulatedContentInfo SEQUENCE @43+10053 (constructed): (2 elem) 11 + eContentType ContentType OBJECT_IDENTIFIER @47+9: 1.2.840.113549.1.7.1|data|PKCS #7 12 + eContent [0] @58+10038 (constructed): (1 elem) 13 + OCTET_STRING @62+10034: (10034 byte)|Inizio contenuto.|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|Fine contenuto. 14 + CertificateSet [?] [0] @10100+370 (constructed): (1 elem) 15 + certificate CertificateChoices SEQUENCE @10104+366 (constructed): (3 elem) 16 + tbsCertificate TBSCertificate SEQUENCE @10108+276 (constructed): (8 elem) 17 + version [0] @10112+3 (constructed): (1 elem) 18 + Version INTEGER @10114+1: 2 19 + serialNumber CertificateSerialNumber INTEGER @10117+16: (127 bit)|128087855099855233032551836648087377254 20 + signature AlgorithmIdentifier SEQUENCE @10135+10 (constructed): (1 elem) 21 + algorithm OBJECT_IDENTIFIER @10137+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 22 + issuer rdnSequence Name SEQUENCE @10147+15 (constructed): (1 elem) 23 + RelativeDistinguishedName SET @10149+13 (constructed): (1 elem) 24 + AttributeTypeAndValue SEQUENCE @10151+11 (constructed): (2 elem) 25 + type AttributeType OBJECT_IDENTIFIER @10153+3: 2.5.4.3|commonName|X.520 DN component 26 + value AttributeValue [?] UTF8String @10158+4: Test 27 + validity Validity SEQUENCE @10164+30 (constructed): (2 elem) 28 + notBefore utcTime Time UTCTime @10166+13: 2018-07-16 14:56:35 UTC 29 + notAfter utcTime Time UTCTime @10181+13: 2019-07-16 14:56:35 UTC 30 + subject rdnSequence Name SEQUENCE @10196+15 (constructed): (1 elem) 31 + RelativeDistinguishedName SET @10198+13 (constructed): (1 elem) 32 + AttributeTypeAndValue SEQUENCE @10200+11 (constructed): (2 elem) 33 + type AttributeType OBJECT_IDENTIFIER @10202+3: 2.5.4.3|commonName|X.520 DN component 34 + value AttributeValue [?] UTF8String @10207+4: Test 35 + subjectPublicKeyInfo SubjectPublicKeyInfo SEQUENCE @10213+89 (constructed): (2 elem) 36 + algorithm AlgorithmIdentifier SEQUENCE @10215+19 (constructed): (2 elem) 37 + algorithm OBJECT_IDENTIFIER @10217+7: 1.2.840.10045.2.1|ecPublicKey|ANSI X9.62 public key type 38 + parameters ANY OBJECT_IDENTIFIER @10226+8: 1.2.840.10045.3.1.7|prime256v1|ANSI X9.62 named elliptic curve 39 + subjectPublicKey BIT_STRING @10236+66: (520 bit)|0000010000100100010011001011011011001100000111000110100100100001111111110100100111011000101111100010011000111110000010110111110011010000010110100010100001100101010110101000010001101100100000100101111011001010111001101110110011100110100110100110101000100001110001001110010011110010001000000010010011000000111010011111010011100100011101001001110010011000101000011010110111110010010111111001000011011110011011101111100101001000001010110110011100011000100000111010011100001110101101001011011110101011100111110000011001000011 40 + extensions [3] @10304+82 (constructed): (1 elem) 41 + Extensions SEQUENCE @10306+80 (constructed): (3 elem) 42 + Extension SEQUENCE @10308+14 (constructed): (3 elem) 43 + extnID OBJECT_IDENTIFIER @10310+3: 2.5.29.15|keyUsage|X.509 extension 44 + critical BOOLEAN @10315+1: true 45 + extnValue OCTET_STRING @10318+4 (encapsulates): (4 byte)|030204F0 46 + BIT_STRING @10320+2: (4 bit)|1111 47 + Extension SEQUENCE @10324+29 (constructed): (2 elem) 48 + extnID OBJECT_IDENTIFIER @10326+3: 2.5.29.14|subjectKeyIdentifier|X.509 extension 49 + extnValue OCTET_STRING @10331+22 (encapsulates): (22 byte)|0414C3C084DF7B040DB038AF518CE397F6EC20D626E6 50 + OCTET_STRING @10333+20: (20 byte)|C3C084DF7B040DB038AF518CE397F6EC20D626E6 51 + Extension SEQUENCE @10355+31 (constructed): (2 elem) 52 + extnID OBJECT_IDENTIFIER @10357+3: 2.5.29.35|authorityKeyIdentifier|X.509 extension 53 + extnValue OCTET_STRING @10362+24 (encapsulates): (24 byte)|30168014C3C084DF7B040DB038AF518CE397F6EC20D626E6 54 + SEQUENCE @10364+22 (constructed): (1 elem) 55 + [0] @10366+20: (20 byte)|C3C084DF7B040DB038AF518CE397F6EC20D626E6 56 + signatureAlgorithm AlgorithmIdentifier SEQUENCE @10388+10 (constructed): (1 elem) 57 + algorithm OBJECT_IDENTIFIER @10390+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 58 + signature BIT_STRING @10400+72 (encapsulates): (568 bit)|0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010 59 + SEQUENCE @10403+69 (constructed): (2 elem) 60 + INTEGER @10405+33: (256 bit)|100583279108105959323277080420227859612360091217401498640290749528265835693079 61 + INTEGER @10440+32: (255 bit)|46934510925111877438867701170553238261516280994969183555881415710868278719026 62 + signerInfos SignerInfos SET @10474+394 (constructed): (1 elem) 63 + SignerInfo SEQUENCE @10478+390 (constructed): (6 elem) 64 + version CMSVersion INTEGER @10482+1: 1 65 + sid issuerAndSerialNumber SignerIdentifier SEQUENCE @10485+35 (constructed): (2 elem) 66 + issuer rdnSequence Name SEQUENCE @10487+15 (constructed): (1 elem) 67 + RelativeDistinguishedName SET @10489+13 (constructed): (1 elem) 68 + AttributeTypeAndValue SEQUENCE @10491+11 (constructed): (2 elem) 69 + type AttributeType OBJECT_IDENTIFIER @10493+3: 2.5.4.3|commonName|X.520 DN component 70 + value AttributeValue [?] UTF8String @10498+4: Test 71 + serialNumber CertificateSerialNumber INTEGER @10504+16: (127 bit)|128087855099855233032551836648087377254 72 + digestAlgorithm DigestAlgorithmIdentifier SEQUENCE @10522+13 (constructed): (2 elem) 73 + algorithm OBJECT_IDENTIFIER @10524+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm 74 + parameters ANY NULL @10535+0 75 + SignedAttributes [?] [0] @10537+247 (constructed): (5 elem) 76 + Attribute SEQUENCE @10540+24 (constructed): (2 elem) 77 + type AttributeType OBJECT_IDENTIFIER @10542+9: 1.2.840.113549.1.9.3|contentType|PKCS #9 78 + values SET @10553+11 (constructed): (1 elem) 79 + AttributeValue [?] OBJECT_IDENTIFIER @10555+9: 1.2.840.113549.1.7.1|data|PKCS #7 80 + Attribute SEQUENCE @10566+28 (constructed): (2 elem) 81 + type AttributeType OBJECT_IDENTIFIER @10568+9: 1.2.840.113549.1.9.5|signingTime|PKCS #9 82 + values SET @10579+15 (constructed): (1 elem) 83 + AttributeValue [?] UTCTime @10581+13: 2018-07-16 14:56:35 UTC 84 + Attribute SEQUENCE @10596+42 (constructed): (2 elem) 85 + type AttributeType OBJECT_IDENTIFIER @10598+9: 1.2.840.113549.1.9.52|cmsAlgorithmProtection|RFC 6211 86 + values SET @10609+29 (constructed): (1 elem) 87 + AttributeValue [?] SEQUENCE @10611+27 (constructed): (2 elem) 88 + SEQUENCE @10613+13 (constructed): (2 elem) 89 + OBJECT_IDENTIFIER @10615+9: 2.16.840.1.101.3.4.2.1|sha-256|NIST Algorithm 90 + NULL @10626+0 91 + [1] @10628+10 (constructed): (1 elem) 92 + OBJECT_IDENTIFIER @10630+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 93 + Attribute SEQUENCE @10640+47 (constructed): (2 elem) 94 + type AttributeType OBJECT_IDENTIFIER @10642+9: 1.2.840.113549.1.9.4|messageDigest|PKCS #9 95 + values SET @10653+34 (constructed): (1 elem) 96 + AttributeValue [?] OCTET_STRING @10655+32: (32 byte)|724C51BBE76DA05AFB20CBE8EB037CDAE1AFD713125D2DC13D552DA9F442D24D 97 + Attribute SEQUENCE @10689+96 (constructed): (2 elem) 98 + type AttributeType OBJECT_IDENTIFIER @10691+11: 1.2.840.113549.1.9.16.2.47|signingCertificateV2|S/MIME Authenticated Attributes 99 + values SET @10704+81 (constructed): (1 elem) 100 + AttributeValue [?] SEQUENCE @10706+79 (constructed): (1 elem) 101 + SEQUENCE @10708+77 (constructed): (1 elem) 102 + SEQUENCE @10710+75 (constructed): (2 elem) 103 + OCTET_STRING @10712+32: (32 byte)|BABC08434C58267301E006861D27ECA125670E792797248E76A5717A5BF993C2 104 + SEQUENCE @10746+39 (constructed): (2 elem) 105 + SEQUENCE @10748+19 (constructed): (1 elem) 106 + [4] @10750+17 (constructed): (1 elem) 107 + SEQUENCE @10752+15 (constructed): (1 elem) 108 + SET @10754+13 (constructed): (1 elem) 109 + SEQUENCE @10756+11 (constructed): (2 elem) 110 + OBJECT_IDENTIFIER @10758+3: 2.5.4.3|commonName|X.520 DN component 111 + UTF8String @10763+4: Test 112 + INTEGER @10769+16: (127 bit)|128087855099855233032551836648087377254 113 + signatureAlgorithm SignatureAlgorithmIdentifier SEQUENCE @10787+10 (constructed): (1 elem) 114 + algorithm OBJECT_IDENTIFIER @10789+8: 1.2.840.10045.4.3.2|ecdsaWithSHA256|ANSI X9.62 ECDSA algorithm with SHA256 115 + signature SignatureValue OCTET_STRING @10799+71 (encapsulates): (71 byte)|3045022100F104302EABB428ECC8E71CE2E38F6CBED848A8E9A2B5D5DA19933E485C83CC7102200CBB40A0B7B9B2E048920622FB286FD14695F24CF650BDAA40B885F84C34BBB9 116 + SEQUENCE @10801+69 (constructed): (2 elem) 117 + INTEGER @10803+33: (256 bit)|109014796438891021115527318269695135443977065935278579101750090430030910049393 118 + INTEGER @10838+32: (252 bit)|5758600628818957274240888478952309319266088628943097300803726649607194983353
+1 -3
index.css
··· 1 html { 2 --main-bg-color: #C0C0C0; 3 --main-text-color: #000000; 4 - --id-text-color: #7d5900; 5 --headline-text-color: #8be9fd; 6 --button-border-color: #767676; 7 --button-bg-color: #efefef; ··· 36 html[data-theme="dark"] { 37 --main-bg-color: #0d1116; 38 --main-text-color: #f8f8f2; 39 - --id-text-color: #9d7c2d; 40 --headline-text-color: #8be9fd; 41 --button-border-color: #505050; 42 --button-bg-color: #303030; ··· 188 color: var(--preview-border-color); 189 } 190 .name.id { 191 - color: var(--id-text-color); 192 } 193 .value { 194 display: none;
··· 1 html { 2 --main-bg-color: #C0C0C0; 3 --main-text-color: #000000; 4 --headline-text-color: #8be9fd; 5 --button-border-color: #767676; 6 --button-bg-color: #efefef; ··· 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; ··· 186 color: var(--preview-border-color); 187 } 188 .name.id { 189 + color: var(--main-text-color); 190 } 191 .value { 192 display: none;
+1
index.html
··· 107 <li>previous versions on githack: <select id="tags"><option>[select tag]</option></select></li> 108 <li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a> (currently offline)</li> 109 <li><a href="https://github.com/lapo-luchini/asn1js">github mirror</a></li> 110 <li><a href="https://www.openhub.net/p/asn1js">OpenHub code stats</a></li> 111 </ul> 112 </div>
··· 107 <li>previous versions on githack: <select id="tags"><option>[select tag]</option></select></li> 108 <li><a href="http://idf.lapo.it/p/asn1js/">InDefero tracker</a> (currently offline)</li> 109 <li><a href="https://github.com/lapo-luchini/asn1js">github mirror</a></li> 110 + <li><a href="https://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> 112 </ul> 113 </div>
+2 -2
index.js
··· 86 if (area.value === '') area.value = Base64.pretty(b64); 87 try { 88 window.location.hash = hash = '#' + b64; 89 - } catch (e) { 90 // fails with "Access Denied" on IE with URLs longer than ~2048 chars 91 window.location.hash = hash = '#'; 92 } ··· 122 else if (Base64.re.test(str)) der = Base64.unarmor(str); 123 else der = str; 124 decode(der); 125 - } catch (e) { 126 text(tree, 'Cannot decode file.'); 127 dump.innerHTML = ''; 128 }
··· 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 } ··· 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 = ''; 128 }
+31 -74
package.json
··· 1 { 2 "name": "@lapo/asn1js", 3 - "version": "2.0.6", 4 "description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.", 5 "type": "module", 6 "main": "asn1.js", ··· 8 "type": "git", 9 "url": "git+https://github.com/lapo-luchini/asn1js.git" 10 }, 11 - "keywords": [ "asn1", "ber", "der", "pem" ], 12 "author": "Lapo Luchini <lapo@lapo.it>", 13 "license": "ISC", 14 - "bugs": { "url": "https://github.com/lapo-luchini/asn1js/issues" }, 15 "homepage": "https://lapo.it/asn1js/", 16 - "files": [ "asn1.js", "base64.js", "hex.js", "int10.js", "dom.js", "defs.js", "oids.js", "rfcdef.js", "dumpASN1.js" ], 17 "scripts": { 18 "lint": "npx eslint asn1.js base64.js hex.js int10.js dom.js defs.js oids.js rfcdef.js tags.js context.js index.js parseRFC.js dumpASN1.js test.js testDefs.js vite.config.js theme.js", 19 "lint-action": "npx @action-validator/cli .github/workflows/node.js.yml", ··· 26 "dumpASN1": "./dumpASN1.js" 27 }, 28 "engines": { 29 - "node": ">=12.20.0" 30 }, 31 "devDependencies": { 32 - "@rollup/wasm-node": "^4.25.0", 33 - "eslint": "^8.57.1", 34 "htmlparser2": "^9.1.0", 35 - "vite": "^5.4.10", 36 "vite-plugin-dom": "^1.0.4", 37 - "vite-plugin-singlefile": "^2.0.3" 38 }, 39 "overrides": { 40 "rollup": "npm:@rollup/wasm-node" ··· 43 "overrides": { 44 "rollup": "npm:@rollup/wasm-node" 45 } 46 - }, 47 - "eslintConfig": { 48 - "env": { 49 - "es6": true, 50 - "browser": true, 51 - "node": true 52 - }, 53 - "parserOptions": { 54 - "ecmaVersion": 2015, 55 - "sourceType": "module" 56 - }, 57 - "extends": [ "eslint:recommended" ], 58 - "globals": { 59 - "Uint8Array": "readonly" 60 - }, 61 - "rules": { 62 - "strict": [ "error", "function" ], 63 - "indent": [ "error", 4 ], 64 - "no-trailing-spaces": [ "error" ], 65 - "linebreak-style": [ "error", "unix" ], 66 - "eol-last": [ "error", "always" ], 67 - "semi": [ "warn", "always" ], 68 - "quotes": [ "error", "single", { "avoidEscape": true } ], 69 - "no-var": [ "warn" ], 70 - "comma-dangle": [ "error", "always-multiline" ] 71 - }, 72 - "overrides": [ 73 - { 74 - "files": [ "defs.js" ], 75 - "parserOptions": { 76 - "ecmaVersion": 2020 77 - } 78 - }, { 79 - "files": [ "test.js", "parseRFC.js", "dumpASN1.js" ], 80 - "parserOptions": { 81 - "ecmaVersion": 2021 82 - }, 83 - "rules": { 84 - "strict": [ "error", "global" ] 85 - } 86 - }, { 87 - "files": [ "oids.js" ], 88 - "rules": { 89 - "indent": "off", 90 - "quotes": [ "warn", "double" ] 91 - } 92 - }, { 93 - "files": [ "tags.js", "rfcdef.js" ], 94 - "rules": { 95 - "indent": [ "error", 2, { "ignoredNodes": [ "Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement > ExpressionStatement[directive='use strict']:first-child" ] } ], 96 - "comma-dangle": "off", 97 - "quotes": [ "warn", "double" ] 98 - } 99 - }, { 100 - "files": [ "defs.js" ], 101 - "parserOptions": { 102 - "ecmaVersion": 2021 103 - } 104 - }, { 105 - "files": [ "testDefs.js" ], 106 - "parserOptions": { 107 - "ecmaVersion": 2022 108 - } 109 - } 110 - ] 111 } 112 }
··· 1 { 2 "name": "@lapo/asn1js", 3 + "version": "2.1.0", 4 "description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.", 5 "type": "module", 6 "main": "asn1.js", ··· 8 "type": "git", 9 "url": "git+https://github.com/lapo-luchini/asn1js.git" 10 }, 11 + "keywords": [ 12 + "asn1", 13 + "ber", 14 + "der", 15 + "pem" 16 + ], 17 "author": "Lapo Luchini <lapo@lapo.it>", 18 "license": "ISC", 19 + "bugs": { 20 + "url": "https://github.com/lapo-luchini/asn1js/issues" 21 + }, 22 "homepage": "https://lapo.it/asn1js/", 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", ··· 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" ··· 65 "overrides": { 66 "rollup": "npm:@rollup/wasm-node" 67 } 68 } 69 }
+4 -4
parseRFC.js
··· 213 tryToken(expect) { 214 let p = this.pos; 215 let t; 216 - try { t = this.parseToken(); } catch (e) { /*ignore*/ } 217 // console.log('[debug] tryToken(' + expect + ') = ' + t); 218 if (t == expect) 219 return true; ··· 371 let p = this.pos; 372 try { 373 return this.parseBuiltinType(); 374 - } catch (e) { 375 // console.log('[debug] parseAssignment failed on parseType', e); 376 this.pos = p; 377 let x = { ··· 442 case 'NULL': 443 return null; 444 } 445 - } catch (e) { 446 this.pos = p; 447 } 448 p = this.pos; 449 try { 450 return this.parseIdentifier(); 451 - } catch (e) { 452 this.pos = p; 453 } 454 this.exception('Unknown value type.');
··· 213 tryToken(expect) { 214 let p = this.pos; 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; ··· 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 = { ··· 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.');
+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: {}
+1 -1
release.sh
··· 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 9 updateOID.sh check.sh 10 examples 11 "
··· 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 9 updateOID.sh check.sh 10 examples 11 "
+2
tags.js
··· 1 export const tags = { 2 "2.0.5": "2025-04-12", 3 "2.0.4": "2024-05-08", 4 "2.0.3": "2024-05-06",
··· 1 export const tags = { 2 + "2.1.0": "2025-08-03", 3 + "2.0.6": "2025-07-28", 4 "2.0.5": "2025-04-12", 5 "2.0.4": "2024-05-08", 6 "2.0.3": "2024-05-06",
+53 -6
test.js
··· 1 #!/usr/bin/env node 2 3 import { ASN1, Stream } from './asn1.js'; 4 import { Hex } from './hex.js'; 5 import { Base64 } from './base64.js'; 6 import { Int10 } from './int10.js'; 7 8 const all = (process.argv[2] == 'all'); 9 ··· 15 error: 0, 16 }; 17 18 /** 19 * A class for managing and executing tests. 20 */ 21 class Tests { 22 /** 23 * An array to store test data. 24 * @type {Array<unknown>} 25 */ ··· 33 34 /** 35 * Constructs a new Tests instance. 36 * @param {Function} checkRow - A function to check each row of data. 37 * @param {Array<unknown>} data - The test data to be processed. 38 */ 39 - constructor(checkRow, data) { 40 this.checkRow = checkRow; 41 this.data = data; 42 } ··· 45 * Executes the tests and checks their results for all rows. 46 */ 47 checkAll() { 48 for (const t of this.data) 49 this.checkRow(t); 50 } ··· 62 } else { 63 ++stats.error; 64 console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment); 65 - console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n ')); 66 - console.log(' \x1B[1m\x1B[33mGOT\x1B[39m\x1B[22m ' + result.replace(/\n/g, '\n ')); 67 } 68 } 69 } 70 71 - tests.push(new Tests(function (t) { 72 const input = t[0], 73 expected = t[1], 74 comment = t[2]; ··· 170 ['171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', /^Exception:\nError: Unrecognized time: /, 'Invalid UTCTime'], // GitHub issue #79 171 ])); 172 173 - tests.push(new Tests(function (t) { 174 let bin = Base64.decode(t); 175 let url = new Stream(bin, 0).b64Dump(0, bin.length); 176 // check base64url encoding ··· 191 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQR\nSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456w==', 192 ])); 193 194 - tests.push(new Tests(function (t) { 195 this.row = (0|this.row) + 1; 196 this.num = this.num || new Int10(); 197 this.num.mulAdd(t[0], t[1]);
··· 1 #!/usr/bin/env node 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 ··· 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 */ ··· 51 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 } ··· 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 } ··· 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]; ··· 195 ['171E83C1B251803F86DD01E9CFA886BE89A7316D8372649AC2231EC669F81A84', /^Exception:\nError: Unrecognized time: /, 'Invalid UTCTime'], // GitHub issue #79 196 ])); 197 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); 215 + } 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 ··· 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]);
+1 -1
testDefs.js
··· 11 try { 12 try { // try PEM first 13 content = Base64.unarmor(content); 14 - } catch (e) { // try DER/BER then 15 } 16 let result = ASN1.decode(content); 17 content = null;
··· 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;