-
Notifications
You must be signed in to change notification settings - Fork 2
/
ParcelDelivery.ts
38 lines (32 loc) · 1.29 KB
/
ParcelDelivery.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { OctetString, Primitive, verifySchema, VisibleString } from 'asn1js';
import { TextDecoder } from 'util';
import { makeHeterogeneousSequenceSchema, makeImplicitlyTaggedSequence } from '../../asn1';
import { InvalidMessageError } from '../../messages/InvalidMessageError';
export class ParcelDelivery {
public static deserialize(serialization: ArrayBuffer): ParcelDelivery {
const result = verifySchema(serialization, ParcelDelivery.SCHEMA);
if (!result.verified) {
throw new InvalidMessageError('Parcel delivery is malformed');
}
const textDecoder = new TextDecoder();
const deliveryASN1 = result.result.ParcelDelivery;
return new ParcelDelivery(
textDecoder.decode(deliveryASN1.deliveryId.valueBlock.valueHex),
deliveryASN1.parcelSerialized.valueBlock.valueHex,
);
}
private static readonly SCHEMA = makeHeterogeneousSequenceSchema('ParcelDelivery', [
new Primitive({ name: 'deliveryId' }),
new Primitive({ name: 'parcelSerialized' }),
]);
constructor(
public deliveryId: string,
public parcelSerialized: ArrayBuffer,
) {}
public serialize(): ArrayBuffer {
return makeImplicitlyTaggedSequence(
new VisibleString({ value: this.deliveryId }),
new OctetString({ valueHex: this.parcelSerialized }),
).toBER();
}
}