Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to load ASN.1 description in json structure #76

Open
pedefe opened this issue Jun 17, 2022 · 2 comments
Open

How to load ASN.1 description in json structure #76

pedefe opened this issue Jun 17, 2022 · 2 comments
Assignees
Labels

Comments

@pedefe
Copy link

pedefe commented Jun 17, 2022

Hello,
Do you have a function (or a link on a library in js) to load an ASN.1 description and convert it in json structure ?
For exemple :

ASN.1 Description :
 
DENM ::= SEQUENCE { 
  header ItsPduHeader, 
  denm DecentralizedEnvironmentalNotificationMessage 
} 
 
DecentralizedEnvironmentalNotificationMessage ::= SEQUENCE { 
  management ManagementContainer, 
  situation SituationContainer OPTIONAL, 
  location LocationContainer OPTIONAL, 
  alacarte AlacarteContainer OPTIONAL 
} 

converted in something like...

{
	DENM: {
		_type: "SEQUENCE",
		_content: {
			header: "ItsPduHeader",
			denm: "DecentralizedEnvironmentalNotificationMessage"
			}
		},
	ItsPduHeader: {
		_type: "SEQUENCE",
		_sequence: {
			protocolVersion: {
				_type: "INTEGER",
				_range: [0,255]
				},
			messageID: {
				_type: "INTEGER",
				_choice: {
					1: "denm",
					2: "cam",
					3: "poi"
					}
				}
			stationID: {
				_type: "StationID"
				}
			},
		DecentralizedEnvironmentalNotificationMessage: {
			...
			}
		},
	...
}

Best regards.

@microshine microshine self-assigned this Jun 17, 2022
@microshine
Copy link
Contributor

Have you seen @peculiar/asn1-schema? It uses asn1js and allows describing ASN.1 schemas via property and class decorators.

https://github.com/PeculiarVentures/asn1-schema/tree/master/packages/schema#typescript-examples

Here is X509 certificate in JS structure after AsnCovert.parse

Certificate {
  tbsCertificate: TBSCertificate {
    version: 2,
    serialNumber: ArrayBuffer {
      [Uint8Contents]: <48 44 dc c6 d4 70 0f fa b3 7f 41 63 56 f1>,
      byteLength: 14
    },
    signature: AlgorithmIdentifier {
      algorithm: '1.2.840.113549.1.1.11',
      parameters: null
    },
    issuer: Name(4) [
      [RelativeDistinguishedName],
      [RelativeDistinguishedName],
      [RelativeDistinguishedName],
      [RelativeDistinguishedName]
    ],
    validity: Validity { notBefore: [Time], notAfter: [Time] },
    subject: Name(4) [
      [RelativeDistinguishedName],
      [RelativeDistinguishedName],
      [RelativeDistinguishedName],
      [RelativeDistinguishedName]
    ],
    subjectPublicKeyInfo: SubjectPublicKeyInfo {
      algorithm: [AlgorithmIdentifier],
      subjectPublicKey: [ArrayBuffer]
    },
    extensions: Extensions(3) [ [Extension], [Extension], [Extension] ]
  },
  signatureAlgorithm: AlgorithmIdentifier {
    algorithm: '1.2.840.113549.1.1.11',
    parameters: null
  },
  signatureValue: ArrayBuffer {
    [Uint8Contents]: <00 40 8a 2a 92 f4 03 62 3e 86 c6 3c f3 5b 48 cf b5 aa 90 b0 ee 2e 1f c8 4b 34 55 76 c0 0b 60 0c 4b 85 50 d4 1c f7 24 87 95 f2 55 19 29 6d 39 a2 ae 7f 9b e4 ca 6e c0 02 36 47 c0 3b 2d de 9a 59 68 a2 6d ce f3 18 46 4d bc 42 ac 50 46 28 26 86 11 d1 fb 90 b3 67 05 ed e8 22 62 38 45 c0 53 17 ef 9c 3e 92 ... 156 more bytes>,
    byteLength: 256
  }
}

@YuryStrozhevsky
Copy link
Contributor

@pedefe Each ASN1.js object (except internal-specific objects like "Any" and "Repeated") has toJSON function, which allows you to convert any ASN.1 schemas to JSON right ater making them:

import * as pkijs from "pkijs";
import * as asn1js from "asn1js";
import * as pvutils from "pvutils";

const b64 = "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";

const asn1 = asn1js.fromBER(pvutils.stringToArrayBuffer(pvutils.fromBase64(b64)));

const json = JSON.stringify(asn1.result);

This code would work on version before TypeScript versions current team just made.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants