ASN.1/DER, PEM for Node.js
npm install @fidm/asn1[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Downloads][downloads-image]][downloads-url]
```
npm i --save @fidm/asn1
https://fidm.github.io/asn1/
js
const fs = require('fs')
const { PEM, ASN1, Class, Tag } = require('@fidm/asn1')// ASN.1 Template https://tools.ietf.org/html/rfc5208
const privateKeyValidator = {
name: 'PrivateKeyInfo',
class: Class.UNIVERSAL,
tag: Tag.SEQUENCE,
capture: 'privateKeyInfo',
value: [{
name: 'PrivateKeyInfo.Version',
class: Class.UNIVERSAL,
tag: Tag.INTEGER,
capture: 'privateKeyVersion'
}, {
name: 'PrivateKeyInfo.AlgorithmIdentifier',
class: Class.UNIVERSAL,
tag: Tag.SEQUENCE,
value: [{
name: 'PrivateKeyAlgorithmIdentifier.algorithm',
class: Class.UNIVERSAL,
tag: Tag.OID,
capture: 'privateKeyOID'
}]
}, {
name: 'PrivateKeyInfo.PrivateKey',
class: Class.UNIVERSAL,
tag: Tag.OCTETSTRING,
capture: 'privateKey'
}]
}
const rootkey = PEM.parse(fs.readFileSync('./test/cert/rootkey.pem'))[0]
const captures = ASN1.parseDERWithTemplate(rootkey.body, privateKeyValidator)
console.log(captures)
// { privateKeyInfo:
// // tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'INTEGER', value: 0 },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '1.2.840.113549.1.1.1' },
// { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] }>,
// privateKeyVersion: ,
// privateKeyOID:
// ,
// privateKey:
// // tag: 'OCTETSTRING',
// value:
// }> }
`$3
`js
const { ASN1, Class, Tag } = require('@fidm/asn1')const rsaPrivateKeyASN1 = getSomeRSAPrivateKeyASN1()
const privateKeyASN1 = ASN1.Seq([
// Version (INTEGER)
rsaPrivateKeyASN1.value[0],
// AlgorithmIdentifier
ASN1.Seq([
// algorithm
ASN1.OID('1.2.840.113549.1.1.1'),
// optional parameters
ASN1.Null(),
]),
// PrivateKey
new ASN1(Class.UNIVERSAL, Tag.OCTETSTRING, rsaPrivateKeyASN1.DER),
])
`$3
`js
const fs = require('fs')
const { PEM, ASN1 } = require('@fidm/asn1')const pems = PEM.parse(fs.readFileSync('./test/cert/github.crt'))
const asn1 = ASN1.fromDER(pems[0].body)
console.log(asn1)
// // tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'CONTEXT_SPECIFIC',
// tag: 0,
// value: [ { class: 'UNIVERSAL', tag: 'INTEGER', value: 2 } ] },
// { class: 'UNIVERSAL',
// tag: 'INTEGER',
// value: '0a0630427f5bbced6957396593b6451f' },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'OID',
// value: '1.2.840.113549.1.1.11' },
// { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.6' },
// { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'US' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.10' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'DigiCert Inc' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.11' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'www.digicert.com' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.3' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'DigiCert SHA2 Extended Validation Server CA' } ] } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'UTCTIME',
// value: 2018-05-08T00:00:00.000Z },
// { class: 'UNIVERSAL',
// tag: 'UTCTIME',
// value: 2020-06-03T12:00:00.000Z } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.15' },
// { class: 'UNIVERSAL',
// tag: 'UTF8',
// value: 'Private Organization' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'OID',
// value: '1.3.6.1.4.1.311.60.2.1.3' },
// { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'US' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'OID',
// value: '1.3.6.1.4.1.311.60.2.1.2' },
// { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'Delaware' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.5' },
// { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: '5157550' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.6' },
// { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'US' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.8' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'California' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.7' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'San Francisco' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.10' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'GitHub, Inc.' } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SET',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.3' },
// { class: 'UNIVERSAL',
// tag: 'PRINTABLESTRING',
// value: 'github.com' } ] } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '1.2.840.113549.1.1.1' },
// { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
// { class: 'UNIVERSAL',
// tag: 'BITSTRING',
// value:
// BitString {
// buf:
// ,
// bitLen: 2160 } } ] },
// { class: 'CONTEXT_SPECIFIC',
// tag: 3,
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.35' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.14' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.17' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.15' },
// { class: 'UNIVERSAL', tag: 'BOOLEAN', value: true },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value: } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.37' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.31' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.32' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '1.3.6.1.5.5.7.1.1' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.19' },
// { class: 'UNIVERSAL', tag: 'BOOLEAN', value: true },
// { class: 'UNIVERSAL', tag: 'OCTETSTRING', value: } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'OID',
// value: '1.3.6.1.4.1.11129.2.4.2' },
// { class: 'UNIVERSAL',
// tag: 'OCTETSTRING',
// value:
// } ] } ] } ] } ] },
// { class: 'UNIVERSAL',
// tag: 'SEQUENCE',
// value:
// [ { class: 'UNIVERSAL',
// tag: 'OID',
// value: '1.2.840.113549.1.1.11' },
// { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
// { class: 'UNIVERSAL',
// tag: 'BITSTRING',
// value:
// BitString {
// buf:
// ,
// bitLen: 2048 } } ] }>
``[npm-url]: https://www.npmjs.com/package/@fidm/asn1
[npm-image]: https://img.shields.io/npm/v/@fidm/asn1.svg
[travis-url]: https://travis-ci.org/fidm/asn1
[travis-image]: http://img.shields.io/travis/fidm/asn1.svg
[downloads-url]: https://npmjs.org/package/@fidm/asn1
[downloads-image]: https://img.shields.io/npm/dm/@fidm/asn1.svg?style=flat-square