import { AsnParser, AsnSerializer, OctetString } from '@peculiar/asn1-schema'; import { DataType } from './headers/data-type'; import { Level1DataType } from './headers/level1-data-type'; import { Level2DataType } from './headers/level2-data-type'; import { UicBarcodeHeader } from './headers/uic-barcode-header'; import { UicRailTicketData } from './uic-rail-ticket-data'; describe('UicBarcodeHeader', () => { const uicBarCodeHex = '307b1602233130753073302e1604464342313026162461353037663562642d326637332d343239642d383966642d63633936346464373763656302010716056d7962757302012a06082a8648ce3d03010706082a8648ce3d03010706082a8648ce3d0403020609608648016503040302040b686f6c61207365c3b16f72'; const uicRailTicketData = new UicRailTicketData({ id: 'a507f5bd-2f73-429d-89fd-cc964dd77cec', }); const dataType = new DataType({ dataFormat: 'FCB1', data: uicRailTicketData, }); const lvl2PublicKey = new OctetString(11); lvl2PublicKey.buffer = new Uint8Array(Buffer.from('hola seƱor')).buffer; const level1Data = new Level1DataType({ securityProviderNum: 7, securityProviderIA5: 'mybus', keyId: 42, level1KeyAlg: '1.2.840.10045.3.1.7', // ECC P-256 level1SigningAlg: '1.2.840.10045.4.3.2', // ECDSA-256, level2KeyAlg: '1.2.840.10045.3.1.7', // ECC P-256 level2SigningAlg: '2.16.840.1.101.3.4.3.2', // DSA SHA256, level2PublicKey: lvl2PublicKey, dataSequence: dataType, }); const level2SignedData = new Level2DataType({ level1Data: level1Data, }); const uicBarCodeHeader = new UicBarcodeHeader({ format: '#1', level2SignedData: level2SignedData, }); it('Serialize', () => { const uicBarCodeHeaderAsn = AsnSerializer.serialize(uicBarCodeHeader); const hexAsn = Buffer.from(uicBarCodeHeaderAsn).toString('hex'); expect(hexAsn).toBe(uicBarCodeHex); }); it('Parse', () => { const parsedBarCode = AsnParser.parse(Buffer.from(uicBarCodeHex, 'hex'), UicBarcodeHeader); expect(parsedBarCode).toMatchObject(uicBarCodeHeader); }); });