dosipas-ts 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![npm version](https://img.shields.io/npm/v/dosipas-ts)](https://www.npmjs.com/package/dosipas-ts)
2
+
1
3
  # dosipas-ts
2
4
 
3
5
  > **[Try the online playground](https://sysdevrun.github.io/dosipas-ts/)** — decode, encode, sign, verify, and control UIC barcode tickets in your browser.
@@ -86,48 +88,57 @@ l2.decoded // UicDynamicContentData (FDC1) or IntercodeDynamicData (Intercod
86
88
 
87
89
  ## Encoding
88
90
 
91
+ `encodeTicket` accepts the same `UicBarcodeTicket` type returned by `decodeTicket`, so round-tripping works directly:
92
+
89
93
  ```ts
90
- import { encodeTicket, encodeTicketToBytes } from 'dosipas-ts';
91
-
92
- const hex = encodeTicket({
93
- headerVersion: 2,
94
- fcbVersion: 2,
95
- securityProviderNum: 3703,
96
- keyId: 1,
97
- level1KeyAlg: '1.2.840.10045.3.1.7',
98
- level2KeyAlg: '1.2.840.10045.3.1.7',
99
- level1SigningAlg: '1.2.840.10045.4.3.2',
100
- level2SigningAlg: '1.2.840.10045.4.3.2',
101
- level2PublicKey: publicKeyBytes,
102
- level1Signature: level1SigBytes,
103
- level2Signature: level2SigBytes,
104
- railTicket: {
105
- issuingDetail: {
94
+ import { decodeTicket, encodeTicket, encodeTicketToBytes } from 'dosipas-ts';
95
+ import type { UicBarcodeTicket } from 'dosipas-ts';
96
+
97
+ // Round-trip: decode → encode
98
+ const hex = encodeTicket(decodeTicket(originalHex));
99
+
100
+ // Build a ticket from scratch
101
+ const ticket: UicBarcodeTicket = {
102
+ format: 'U2',
103
+ level2SignedData: {
104
+ level1Data: {
106
105
  securityProviderNum: 3703,
107
- issuerNum: 3703,
108
- issuingYear: 2025,
109
- issuingDay: 44,
110
- activated: true,
111
- currency: 'EUR',
112
- currencyFract: 2,
113
- intercodeIssuing: {
114
- networkId: new Uint8Array([0x11, 0x87]),
115
- productRetailer: { retailChannel: 'mobileApplication' },
116
- },
106
+ keyId: 1,
107
+ level1KeyAlg: '1.2.840.10045.3.1.7',
108
+ level1SigningAlg: '1.2.840.10045.4.3.2',
109
+ level2KeyAlg: '1.2.840.10045.3.1.7',
110
+ level2SigningAlg: '1.2.840.10045.4.3.2',
111
+ level2PublicKey: publicKeyBytes,
112
+ dataSequence: [{
113
+ dataFormat: 'FCB3',
114
+ decoded: {
115
+ issuingDetail: {
116
+ issuerNum: 3703,
117
+ issuingYear: 2025,
118
+ issuingDay: 44,
119
+ activated: true,
120
+ specimen: false,
121
+ securePaperTicket: false,
122
+ },
123
+ transportDocument: [
124
+ { ticket: { key: 'openTicket', value: { returnIncluded: false } } },
125
+ ],
126
+ },
127
+ }],
128
+ },
129
+ level1Signature: level1SigBytes,
130
+ level2Data: {
131
+ dataFormat: 'FDC1',
132
+ decoded: { dynamicContentDay: 0, dynamicContentTime: 720 },
117
133
  },
118
- transportDocument: [
119
- { ticketType: 'openTicket', ticket: { /* ... */ } },
120
- ],
121
- },
122
- dynamicData: {
123
- rics: 3703,
124
- dynamicContentDay: 0,
125
- dynamicContentTime: 720,
126
134
  },
127
- });
135
+ level2Signature: level2SigBytes,
136
+ };
137
+
138
+ const encoded = encodeTicket(ticket);
128
139
 
129
140
  // Or get bytes directly
130
- const bytes = encodeTicketToBytes({ /* same input */ });
141
+ const bytes = encodeTicketToBytes(ticket);
131
142
  ```
132
143
 
133
144
  ## Signing
@@ -136,28 +147,39 @@ Sign tickets with ECDSA using the two-pass signing flow (Level 1, then Level 2):
136
147
 
137
148
  ```ts
138
149
  import { signAndEncodeTicket, generateKeyPair } from 'dosipas-ts';
150
+ import type { UicBarcodeTicket } from 'dosipas-ts';
139
151
 
140
152
  const level1Key = generateKeyPair('P-256');
141
153
  const level2Key = generateKeyPair('P-256');
142
154
 
143
- const ticketBytes = signAndEncodeTicket(
144
- {
145
- headerVersion: 2,
146
- fcbVersion: 2,
147
- securityProviderNum: 3703,
148
- keyId: 1,
149
- railTicket: {
150
- issuingDetail: {
151
- issuerNum: 3703,
152
- issuingYear: 2025,
153
- issuingDay: 44,
154
- activated: true,
155
- },
156
- transportDocument: [
157
- { ticketType: 'openTicket', ticket: { /* ... */ } },
158
- ],
155
+ const ticket: UicBarcodeTicket = {
156
+ format: 'U2',
157
+ level2SignedData: {
158
+ level1Data: {
159
+ securityProviderNum: 3703,
160
+ keyId: 1,
161
+ dataSequence: [{
162
+ dataFormat: 'FCB3',
163
+ decoded: {
164
+ issuingDetail: {
165
+ issuerNum: 3703,
166
+ issuingYear: 2025,
167
+ issuingDay: 44,
168
+ activated: true,
169
+ specimen: false,
170
+ securePaperTicket: false,
171
+ },
172
+ transportDocument: [
173
+ { ticket: { key: 'openTicket', value: { returnIncluded: false } } },
174
+ ],
175
+ },
176
+ }],
159
177
  },
160
178
  },
179
+ };
180
+
181
+ const ticketBytes = signAndEncodeTicket(
182
+ ticket,
161
183
  level1Key,
162
184
  level2Key, // omit for static barcodes (Level 1 only)
163
185
  );
@@ -168,9 +190,9 @@ For finer control, sign each level independently:
168
190
  ```ts
169
191
  import { signLevel1, signLevel2 } from 'dosipas-ts';
170
192
 
171
- const level1Sig = signLevel1(input, privateKey, 'P-256');
193
+ const level1Sig = signLevel1(ticket, privateKey, 'P-256');
172
194
  const level2Sig = signLevel2(
173
- { ...input, level1Signature: level1Sig },
195
+ { ...ticket, level2SignedData: { ...ticket.level2SignedData, level1Signature: level1Sig } },
174
196
  level2PrivateKey,
175
197
  'P-256',
176
198
  );
package/dist/encoder.d.ts CHANGED
@@ -1,16 +1,68 @@
1
- import type { UicBarcodeTicketInput } from './types';
1
+ import type { RawBytes } from 'asn1-per-ts';
2
+ import type { UicBarcodeTicket, Level1Data, Level2Data } from './types';
2
3
  /**
3
4
  * Encode a UIC barcode ticket to a hex string.
4
5
  *
5
- * @param input - The ticket data to encode.
6
+ * @param ticket - The decoded ticket structure to encode.
6
7
  * @returns Hex string of the encoded barcode payload.
7
8
  */
8
- export declare function encodeTicket(input: UicBarcodeTicketInput): string;
9
+ export declare function encodeTicket(ticket: UicBarcodeTicket): string;
9
10
  /**
10
11
  * Encode a UIC barcode ticket to bytes.
11
12
  *
12
- * @param input - The ticket data to encode.
13
+ * @param ticket - The decoded ticket structure to encode.
13
14
  * @returns Uint8Array of the encoded barcode payload.
14
15
  */
15
- export declare function encodeTicketToBytes(input: UicBarcodeTicketInput): Uint8Array;
16
+ export declare function encodeTicketToBytes(ticket: UicBarcodeTicket): Uint8Array;
17
+ /**
18
+ * Encode a Level 2 data block from a {@link Level2Data} structure.
19
+ *
20
+ * If the `data` field is present, it is used as-is. Otherwise the `decoded`
21
+ * field is PER-encoded based on the `dataFormat`.
22
+ *
23
+ * @param l2Data - Level 2 data with either raw `data` or `decoded` content.
24
+ * @returns Object with `dataFormat` string and encoded `data` bytes.
25
+ */
26
+ export declare function encodeLevel2Data(l2Data: Level2Data): {
27
+ dataFormat: string;
28
+ data: Uint8Array;
29
+ };
30
+ /**
31
+ * Encode the `level1Data` SEQUENCE in isolation.
32
+ *
33
+ * Returns a {@link RawBytes} with the exact PER-encoded bits. The `.data`
34
+ * property gives the `Uint8Array` suitable for signing; the `RawBytes` itself
35
+ * is passed to {@link encodeLevel2SignedData} for bit-precise embedding.
36
+ *
37
+ * @param level1Data - The Level 1 data to encode.
38
+ * @param format - Header format string (e.g. "U1" or "U2").
39
+ */
40
+ export declare function encodeLevel1Data(level1Data: Level1Data, format: string): RawBytes;
41
+ /**
42
+ * Encode the `level2SignedData` SEQUENCE.
43
+ *
44
+ * Embeds pre-encoded `level1Data` bytes verbatim via {@link RawBytes}
45
+ * passthrough. Returns a `RawBytes` for signing and embedding into
46
+ * {@link encodeUicBarcode}.
47
+ */
48
+ export declare function encodeLevel2SignedData(input: {
49
+ headerVersion?: number;
50
+ level1Data: RawBytes;
51
+ level1Signature: Uint8Array;
52
+ level2Data?: {
53
+ dataFormat: string;
54
+ data: Uint8Array;
55
+ };
56
+ }): RawBytes;
57
+ /**
58
+ * Encode the outermost `UicBarcodeHeader` SEQUENCE.
59
+ *
60
+ * Embeds pre-encoded `level2SignedData` bytes verbatim via {@link RawBytes}
61
+ * passthrough. Returns the final barcode payload bytes.
62
+ */
63
+ export declare function encodeUicBarcode(input: {
64
+ format: string;
65
+ level2SignedData: RawBytes;
66
+ level2Signature?: Uint8Array;
67
+ }): Uint8Array;
16
68
  //# sourceMappingURL=encoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,qBAAqB,EAKtB,MAAM,SAAS,CAAC;AA2DjB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAyDjE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU,CAG5E"}
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EAIX,MAAM,SAAS,CAAC;AA6FjB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAwD7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAGxE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,GACjB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAO1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAgCjF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,QAAQ,CAAC;IACrB,eAAe,EAAE,UAAU,CAAC;IAC5B,UAAU,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;CACvD,GAAG,QAAQ,CAWX;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B,GAAG,UAAU,CAWb"}
package/dist/encoder.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Encoder for UIC barcode tickets with Intercode 6 extensions.
3
3
  *
4
- * Encodes a {@link UicBarcodeTicketInput} object into a hex string suitable
4
+ * Encodes a {@link UicBarcodeTicket} object into a hex string suitable
5
5
  * for embedding in an Aztec barcode.
6
6
  */
7
7
  import { SchemaCodec, SchemaBuilder, BitBuffer, } from 'asn1-per-ts';
@@ -10,6 +10,8 @@ import { HEADER_SCHEMAS, RAIL_TICKET_SCHEMAS, INTERCODE_SCHEMAS, DYNAMIC_CONTENT
10
10
  // Codec caches (separate from decoder to avoid coupling)
11
11
  // ---------------------------------------------------------------------------
12
12
  const headerCodecCache = new Map();
13
+ const level1DataCodecCache = new Map();
14
+ const level2DataCodecCache = new Map();
13
15
  const ticketCodecCache = new Map();
14
16
  let intercodeIssuingCodec;
15
17
  let intercodeDynamicCodec;
@@ -25,6 +27,28 @@ function getHeaderCodec(version) {
25
27
  headerCodecCache.set(version, codec);
26
28
  return codec;
27
29
  }
30
+ function getLevel1DataCodec(version) {
31
+ let codec = level1DataCodecCache.get(version);
32
+ if (codec)
33
+ return codec;
34
+ const schemas = HEADER_SCHEMAS[version];
35
+ if (!schemas)
36
+ throw new Error(`No schema for header v${version}`);
37
+ codec = new SchemaCodec(schemas.Level1DataType);
38
+ level1DataCodecCache.set(version, codec);
39
+ return codec;
40
+ }
41
+ function getLevel2DataCodec(version) {
42
+ let codec = level2DataCodecCache.get(version);
43
+ if (codec)
44
+ return codec;
45
+ const schemas = HEADER_SCHEMAS[version];
46
+ if (!schemas)
47
+ throw new Error(`No schema for header v${version}`);
48
+ codec = new SchemaCodec(schemas.Level2DataType);
49
+ level2DataCodecCache.set(version, codec);
50
+ return codec;
51
+ }
28
52
  function getTicketCodecs(version) {
29
53
  let codecs = ticketCodecCache.get(version);
30
54
  if (codecs)
@@ -55,8 +79,20 @@ function getFdc1Codec() {
55
79
  fdc1Codec = new SchemaCodec(DYNAMIC_CONTENT_SCHEMAS.UicDynamicContentData);
56
80
  return fdc1Codec;
57
81
  }
58
- function toHex(bytes) {
59
- return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
82
+ // ---------------------------------------------------------------------------
83
+ // Internal helpers
84
+ // ---------------------------------------------------------------------------
85
+ function parseHeaderVersion(format) {
86
+ const match = format.match(/^U(\d+)$/);
87
+ if (!match)
88
+ throw new Error(`Invalid format "${format}", expected "U1" or "U2"`);
89
+ return parseInt(match[1], 10);
90
+ }
91
+ function parseFcbVersion(dataFormat) {
92
+ const match = dataFormat.match(/^FCB(\d+)$/);
93
+ if (!match)
94
+ throw new Error(`Unsupported dataFormat "${dataFormat}"`);
95
+ return parseInt(match[1], 10);
60
96
  }
61
97
  // ---------------------------------------------------------------------------
62
98
  // Public API
@@ -64,116 +100,221 @@ function toHex(bytes) {
64
100
  /**
65
101
  * Encode a UIC barcode ticket to a hex string.
66
102
  *
67
- * @param input - The ticket data to encode.
103
+ * @param ticket - The decoded ticket structure to encode.
68
104
  * @returns Hex string of the encoded barcode payload.
69
105
  */
70
- export function encodeTicket(input) {
71
- const headerVersion = input.headerVersion ?? 2;
72
- const fcbVersion = input.fcbVersion ?? 2;
73
- // Step 1: Encode the rail ticket data
74
- const railTicketBytes = encodeRailTicket(fcbVersion, input);
75
- // Step 2: Build the data sequence
76
- const dataSequence = [
77
- { dataFormat: `FCB${fcbVersion}`, data: railTicketBytes },
78
- ];
79
- // Step 3: Build Level 2 data (Intercode dynamic or FDC1)
80
- let level2Data;
81
- if (input.dynamicContentData) {
82
- const fdc1Bytes = getFdc1Codec().encode(input.dynamicContentData);
83
- level2Data = { dataFormat: 'FDC1', data: fdc1Bytes };
84
- }
85
- else if (input.dynamicData) {
86
- const dynamicBytes = getIntercodeDynamicCodec().encode({
87
- dynamicContentDay: input.dynamicData.dynamicContentDay ?? 0,
88
- dynamicContentTime: input.dynamicData.dynamicContentTime,
89
- dynamicContentUTCOffset: input.dynamicData.dynamicContentUTCOffset,
90
- dynamicContentDuration: input.dynamicData.dynamicContentDuration,
91
- });
92
- level2Data = {
93
- dataFormat: `_${input.dynamicData.rics}.ID1`,
94
- data: dynamicBytes,
106
+ export function encodeTicket(ticket) {
107
+ const headerVersion = parseHeaderVersion(ticket.format);
108
+ const l1 = ticket.level2SignedData.level1Data;
109
+ // Encode each data sequence entry
110
+ const dataSequence = l1.dataSequence.map(entry => {
111
+ if (entry.data)
112
+ return { dataFormat: entry.dataFormat, data: entry.data };
113
+ if (!entry.decoded)
114
+ throw new Error('DataSequenceEntry must have data or decoded');
115
+ const fcbVersion = parseFcbVersion(entry.dataFormat);
116
+ return {
117
+ dataFormat: entry.dataFormat,
118
+ data: encodeRailTicket(fcbVersion, entry.decoded, l1.securityProviderNum),
95
119
  };
120
+ });
121
+ // Encode level2Data if present
122
+ let level2Data;
123
+ const l2 = ticket.level2SignedData.level2Data;
124
+ if (l2) {
125
+ if (l2.data) {
126
+ level2Data = { dataFormat: l2.dataFormat, data: l2.data };
127
+ }
128
+ else if (l2.decoded) {
129
+ level2Data = {
130
+ dataFormat: l2.dataFormat,
131
+ data: encodeLevel2DataDecoded(l2.dataFormat, l2.decoded),
132
+ };
133
+ }
96
134
  }
97
- // Step 4: Build the full header structure
135
+ // Build the full header structure
98
136
  const headerData = {
99
- format: `U${headerVersion}`,
137
+ format: ticket.format,
100
138
  level2SignedData: {
101
139
  level1Data: {
102
- securityProviderNum: input.securityProviderNum,
103
- keyId: input.keyId,
140
+ securityProviderNum: l1.securityProviderNum,
141
+ securityProviderIA5: l1.securityProviderIA5,
142
+ keyId: l1.keyId,
104
143
  dataSequence,
105
- level1KeyAlg: input.level1KeyAlg,
106
- level2KeyAlg: input.level2KeyAlg,
107
- level1SigningAlg: input.level1SigningAlg,
108
- level2SigningAlg: input.level2SigningAlg,
109
- level2PublicKey: input.level2PublicKey,
110
- endOfValidityYear: input.endOfValidityYear,
111
- endOfValidityDay: input.endOfValidityDay,
112
- endOfValidityTime: input.endOfValidityTime,
113
- validityDuration: input.validityDuration,
144
+ level1KeyAlg: l1.level1KeyAlg,
145
+ level2KeyAlg: l1.level2KeyAlg,
146
+ level1SigningAlg: l1.level1SigningAlg,
147
+ level2SigningAlg: l1.level2SigningAlg,
148
+ level2PublicKey: l1.level2PublicKey,
149
+ endOfValidityYear: l1.endOfValidityYear,
150
+ endOfValidityDay: l1.endOfValidityDay,
151
+ endOfValidityTime: l1.endOfValidityTime,
152
+ validityDuration: l1.validityDuration,
114
153
  },
115
- level1Signature: input.level1Signature,
154
+ level1Signature: ticket.level2SignedData.level1Signature,
116
155
  level2Data,
117
156
  },
118
- level2Signature: input.level2Signature,
157
+ level2Signature: ticket.level2Signature,
119
158
  };
120
- // Step 5: Encode the header
121
159
  const codec = getHeaderCodec(headerVersion);
122
160
  return codec.encodeToHex(headerData);
123
161
  }
124
162
  /**
125
163
  * Encode a UIC barcode ticket to bytes.
126
164
  *
127
- * @param input - The ticket data to encode.
165
+ * @param ticket - The decoded ticket structure to encode.
128
166
  * @returns Uint8Array of the encoded barcode payload.
129
167
  */
130
- export function encodeTicketToBytes(input) {
131
- const hex = encodeTicket(input);
168
+ export function encodeTicketToBytes(ticket) {
169
+ const hex = encodeTicket(ticket);
132
170
  return new Uint8Array(hex.match(/.{1,2}/g).map(b => parseInt(b, 16)));
133
171
  }
134
172
  // ---------------------------------------------------------------------------
135
- // Internal encoding helpers
173
+ // Composable encoding primitives
136
174
  // ---------------------------------------------------------------------------
137
- function encodeRailTicket(fcbVersion, input) {
138
- const iss = input.railTicket.issuingDetail;
139
- // Build extension if intercode issuing data present
140
- let extension;
141
- if (iss.intercodeIssuing) {
142
- const rics = iss.securityProviderNum ?? input.securityProviderNum ?? 0;
143
- const issuingBytes = getIntercodeIssuingCodec().encode({
144
- intercodeVersion: iss.intercodeIssuing.intercodeVersion ?? 1,
145
- intercodeInstanciation: iss.intercodeIssuing.intercodeInstanciation ?? 1,
146
- networkId: iss.intercodeIssuing.networkId,
147
- productRetailer: iss.intercodeIssuing.productRetailer,
148
- });
149
- extension = {
150
- extensionId: iss.intercodeIssuing.extensionId ?? `_${rics}II1`,
151
- extensionData: issuingBytes,
175
+ /**
176
+ * Encode a Level 2 data block from a {@link Level2Data} structure.
177
+ *
178
+ * If the `data` field is present, it is used as-is. Otherwise the `decoded`
179
+ * field is PER-encoded based on the `dataFormat`.
180
+ *
181
+ * @param l2Data - Level 2 data with either raw `data` or `decoded` content.
182
+ * @returns Object with `dataFormat` string and encoded `data` bytes.
183
+ */
184
+ export function encodeLevel2Data(l2Data) {
185
+ if (l2Data.data)
186
+ return { dataFormat: l2Data.dataFormat, data: l2Data.data };
187
+ if (!l2Data.decoded)
188
+ throw new Error('Level2Data must have data or decoded');
189
+ return {
190
+ dataFormat: l2Data.dataFormat,
191
+ data: encodeLevel2DataDecoded(l2Data.dataFormat, l2Data.decoded),
192
+ };
193
+ }
194
+ /**
195
+ * Encode the `level1Data` SEQUENCE in isolation.
196
+ *
197
+ * Returns a {@link RawBytes} with the exact PER-encoded bits. The `.data`
198
+ * property gives the `Uint8Array` suitable for signing; the `RawBytes` itself
199
+ * is passed to {@link encodeLevel2SignedData} for bit-precise embedding.
200
+ *
201
+ * @param level1Data - The Level 1 data to encode.
202
+ * @param format - Header format string (e.g. "U1" or "U2").
203
+ */
204
+ export function encodeLevel1Data(level1Data, format) {
205
+ const headerVersion = parseHeaderVersion(format);
206
+ // Encode each data sequence entry
207
+ const dataSequence = level1Data.dataSequence.map(entry => {
208
+ if (entry.data)
209
+ return { dataFormat: entry.dataFormat, data: entry.data };
210
+ if (!entry.decoded)
211
+ throw new Error('DataSequenceEntry must have data or decoded');
212
+ const fcbVersion = parseFcbVersion(entry.dataFormat);
213
+ return {
214
+ dataFormat: entry.dataFormat,
215
+ data: encodeRailTicket(fcbVersion, entry.decoded, level1Data.securityProviderNum),
152
216
  };
153
- }
154
- // Build the issuing detail
155
- const issuingDetail = {
156
- securityProviderNum: iss.securityProviderNum,
157
- issuerNum: iss.issuerNum,
158
- issuingYear: iss.issuingYear,
159
- issuingDay: iss.issuingDay,
160
- issuingTime: iss.issuingTime,
161
- issuerName: iss.issuerName,
162
- specimen: iss.specimen ?? false,
163
- securePaperTicket: iss.securePaperTicket ?? false,
164
- activated: iss.activated ?? true,
165
- currency: iss.currency,
166
- currencyFract: iss.currencyFract,
167
- issuerPNR: iss.issuerPNR,
168
- extension,
217
+ });
218
+ const l1Data = {
219
+ securityProviderNum: level1Data.securityProviderNum,
220
+ securityProviderIA5: level1Data.securityProviderIA5,
221
+ keyId: level1Data.keyId,
222
+ dataSequence,
223
+ level1KeyAlg: level1Data.level1KeyAlg,
224
+ level2KeyAlg: level1Data.level2KeyAlg,
225
+ level1SigningAlg: level1Data.level1SigningAlg,
226
+ level2SigningAlg: level1Data.level2SigningAlg,
227
+ level2PublicKey: level1Data.level2PublicKey,
228
+ endOfValidityYear: level1Data.endOfValidityYear,
229
+ endOfValidityDay: level1Data.endOfValidityDay,
230
+ endOfValidityTime: level1Data.endOfValidityTime,
231
+ validityDuration: level1Data.validityDuration,
232
+ };
233
+ const codec = getLevel1DataCodec(headerVersion);
234
+ return codec.encodeToRawBytes(l1Data);
235
+ }
236
+ /**
237
+ * Encode the `level2SignedData` SEQUENCE.
238
+ *
239
+ * Embeds pre-encoded `level1Data` bytes verbatim via {@link RawBytes}
240
+ * passthrough. Returns a `RawBytes` for signing and embedding into
241
+ * {@link encodeUicBarcode}.
242
+ */
243
+ export function encodeLevel2SignedData(input) {
244
+ const headerVersion = input.headerVersion ?? 2;
245
+ const level2SignedData = {
246
+ level1Data: input.level1Data,
247
+ level1Signature: input.level1Signature,
248
+ level2Data: input.level2Data,
249
+ };
250
+ const codec = getLevel2DataCodec(headerVersion);
251
+ return codec.encodeToRawBytes(level2SignedData);
252
+ }
253
+ /**
254
+ * Encode the outermost `UicBarcodeHeader` SEQUENCE.
255
+ *
256
+ * Embeds pre-encoded `level2SignedData` bytes verbatim via {@link RawBytes}
257
+ * passthrough. Returns the final barcode payload bytes.
258
+ */
259
+ export function encodeUicBarcode(input) {
260
+ const headerVersion = parseHeaderVersion(input.format);
261
+ const headerData = {
262
+ format: input.format,
263
+ level2SignedData: input.level2SignedData,
264
+ level2Signature: input.level2Signature,
169
265
  };
170
- // Build transport documents
171
- const transportDocument = input.railTicket.transportDocument?.map((doc) => ({
172
- ticket: { key: doc.ticketType, value: doc.ticket },
173
- }));
266
+ const codec = getHeaderCodec(headerVersion);
267
+ return codec.encode(headerData);
268
+ }
269
+ // ---------------------------------------------------------------------------
270
+ // Internal encoding helpers
271
+ // ---------------------------------------------------------------------------
272
+ /**
273
+ * Encode the decoded content of a Level 2 data block.
274
+ */
275
+ function encodeLevel2DataDecoded(dataFormat, decoded) {
276
+ if (dataFormat === 'FDC1') {
277
+ return getFdc1Codec().encode(decoded);
278
+ }
279
+ else {
280
+ // Intercode dynamic data
281
+ return getIntercodeDynamicCodec().encode(decoded);
282
+ }
283
+ }
284
+ /**
285
+ * Encode rail ticket data (UicRailTicketData) to PER bytes.
286
+ */
287
+ function encodeRailTicket(fcbVersion, railTicket, securityProviderNum) {
288
+ const iss = railTicket.issuingDetail;
289
+ let issuingDetail;
290
+ if (iss) {
291
+ // Handle extension: re-encode intercode if present, otherwise pass through raw
292
+ const { intercodeIssuing, extension: rawExtension, ...issuingRest } = iss;
293
+ let extension;
294
+ if (intercodeIssuing) {
295
+ const issuingBytes = getIntercodeIssuingCodec().encode({
296
+ intercodeVersion: intercodeIssuing.intercodeVersion ?? 1,
297
+ intercodeInstanciation: intercodeIssuing.intercodeInstanciation ?? 1,
298
+ networkId: intercodeIssuing.networkId,
299
+ productRetailer: intercodeIssuing.productRetailer,
300
+ });
301
+ extension = {
302
+ extensionId: intercodeIssuing.extensionId ?? `_${iss.securityProviderNum ?? securityProviderNum ?? 0}II1`,
303
+ extensionData: issuingBytes,
304
+ };
305
+ }
306
+ else {
307
+ extension = rawExtension;
308
+ }
309
+ issuingDetail = { ...issuingRest, extension };
310
+ // FCB3 requires issuingTime as mandatory — default to 0 if not provided
311
+ if (fcbVersion >= 3 && issuingDetail.issuingTime == null) {
312
+ issuingDetail.issuingTime = 0;
313
+ }
314
+ }
174
315
  // Validate traveler birth-day fields match the target FCB version
175
- if (input.railTicket.travelerDetail?.traveler) {
176
- for (const t of input.railTicket.travelerDetail.traveler) {
316
+ if (railTicket.travelerDetail?.traveler) {
317
+ for (const t of railTicket.travelerDetail.traveler) {
177
318
  if (fcbVersion >= 2 && t.dayOfBirth !== undefined) {
178
319
  throw new Error(`Traveler field "dayOfBirth" is not valid for FCB v${fcbVersion}. Use "dayOfBirthInMonth" instead.`);
179
320
  }
@@ -182,12 +323,12 @@ function encodeRailTicket(fcbVersion, input) {
182
323
  }
183
324
  }
184
325
  }
185
- // Build the full rail ticket data
326
+ // Transport documents pass through directly (already { ticket: { key, value } } format)
186
327
  const ticketData = {
187
328
  issuingDetail,
188
- travelerDetail: input.railTicket.travelerDetail,
189
- transportDocument,
190
- controlDetail: input.railTicket.controlDetail,
329
+ travelerDetail: railTicket.travelerDetail,
330
+ transportDocument: railTicket.transportDocument,
331
+ controlDetail: railTicket.controlDetail,
191
332
  };
192
333
  const codecs = getTicketCodecs(fcbVersion);
193
334
  const buf = BitBuffer.alloc();
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,15 @@
1
1
  export { decodeTicket, decodeTicketFromBytes } from './decoder';
2
- export { encodeTicket, encodeTicketToBytes } from './encoder';
2
+ export { encodeTicket, encodeTicketToBytes, encodeLevel2Data, encodeLevel1Data, encodeLevel2SignedData, encodeUicBarcode } from './encoder';
3
3
  export { verifySignatures, verifyLevel1Signature, verifyLevel2Signature, findKeyInXml, parseKeysXml } from './verifier';
4
4
  export { controlTicket } from './control';
5
5
  export { getIssuingTime, getEndOfValidityTime, getDynamicContentTime } from './time-helpers';
6
6
  export { extractSignedData } from './signed-data';
7
- export { signLevel1, signLevel2, signAndEncodeTicket, generateKeyPair, getPublicKey, CURVES } from './signer';
7
+ export { signLevel1, signLevel2, signAndEncodeTicket, signPayload, generateKeyPair, getPublicKey, CURVES } from './signer';
8
8
  export { SAMPLE_TICKET_HEX, SNCF_TER_TICKET_HEX, SOLEA_TICKET_HEX, BUS_ARDECHE_TICKET_HEX, BUS_AIN_TICKET_HEX, DROME_BUS_TICKET_HEX, CTS_TICKET_HEX, GRAND_EST_U1_FCB3_HEX } from './fixtures';
9
9
  export { SNCF_TER_SIGNATURES, SOLEA_SIGNATURES, CTS_SIGNATURES } from './signature-fixtures';
10
- export type { UicBarcodeTicket, Level2SignedData, Level1Data, DataSequenceEntry, Level2Data, UicRailTicketData, IssuingDetail, GeoCoordinate, ExtensionData, TransportDocumentData, IntercodeIssuingData, IntercodeDynamicData, UicDynamicContentData, TimeStampData, DynamicContentGeoCoordinate, DynamicContentExtensionData, RetailChannel, ProductRetailerData, TravelerDetail, TravelerInfo, CustomerStatus, ControlDetail, CardReference, TicketLink, UicBarcodeTicketInput, RailTicketInput, IssuingDetailInput, IntercodeIssuingDataInput, IntercodeDynamicDataInput, UicDynamicContentDataInput, TravelerDetailInput, TransportDocumentInput, SignatureVerificationResult, SignatureLevelResult, VerifyOptions, Level1KeyProvider, ControlOptions, ControlResult, CheckResult, } from './types';
10
+ export type { UicBarcodeTicket, Level2SignedData, Level1Data, DataSequenceEntry, Level2Data, UicRailTicketData, IssuingDetail, GeoCoordinate, ExtensionData, TransportDocumentData, IntercodeIssuingData, IntercodeDynamicData, UicDynamicContentData, TimeStampData, DynamicContentGeoCoordinate, DynamicContentExtensionData, RetailChannel, ProductRetailerData, TravelerDetail, TravelerInfo, CustomerStatus, ControlDetail, CardReference, TicketLink, SignatureVerificationResult, SignatureLevelResult, VerifyOptions, Level1KeyProvider, ControlOptions, ControlResult, CheckResult, } from './types';
11
11
  export type { UicPublicKeyEntry } from './verifier';
12
12
  export type { ExtractedSignedData } from './signed-data';
13
13
  export type { CurveName, CurveConfig, SigningKeyPair } from './signer';
14
+ export { RawBytes } from 'asn1-per-ts';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/L,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE7F,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,2BAA2B,EAC3B,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3H,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/L,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE7F,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,2BAA2B,EAC3B,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  export { decodeTicket, decodeTicketFromBytes } from './decoder';
2
- export { encodeTicket, encodeTicketToBytes } from './encoder';
2
+ export { encodeTicket, encodeTicketToBytes, encodeLevel2Data, encodeLevel1Data, encodeLevel2SignedData, encodeUicBarcode } from './encoder';
3
3
  export { verifySignatures, verifyLevel1Signature, verifyLevel2Signature, findKeyInXml, parseKeysXml } from './verifier';
4
4
  export { controlTicket } from './control';
5
5
  export { getIssuingTime, getEndOfValidityTime, getDynamicContentTime } from './time-helpers';
6
6
  export { extractSignedData } from './signed-data';
7
- export { signLevel1, signLevel2, signAndEncodeTicket, generateKeyPair, getPublicKey, CURVES } from './signer';
7
+ export { signLevel1, signLevel2, signAndEncodeTicket, signPayload, generateKeyPair, getPublicKey, CURVES } from './signer';
8
8
  export { SAMPLE_TICKET_HEX, SNCF_TER_TICKET_HEX, SOLEA_TICKET_HEX, BUS_ARDECHE_TICKET_HEX, BUS_AIN_TICKET_HEX, DROME_BUS_TICKET_HEX, CTS_TICKET_HEX, GRAND_EST_U1_FCB3_HEX } from './fixtures';
9
9
  export { SNCF_TER_SIGNATURES, SOLEA_SIGNATURES, CTS_SIGNATURES } from './signature-fixtures';
10
+ export { RawBytes } from 'asn1-per-ts';
10
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/L,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3H,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/L,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAwC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
package/dist/signer.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { UicBarcodeTicketInput } from './types';
1
+ import type { UicBarcodeTicket } from './types';
2
2
  /** Supported ECDSA curve names. */
3
3
  export type CurveName = 'P-256' | 'P-384' | 'P-521';
4
4
  /** Curve configuration with OIDs for encoding into ticket headers. */
@@ -17,6 +17,19 @@ export interface SigningKeyPair {
17
17
  }
18
18
  /** Curve configurations indexed by curve name. */
19
19
  export declare const CURVES: Record<CurveName, CurveConfig>;
20
+ /**
21
+ * Sign arbitrary data with ECDSA and return a DER-encoded signature.
22
+ *
23
+ * This is the low-level signing primitive used by the composable encoding flow.
24
+ * It hashes the data with the curve's associated hash (SHA-256 for P-256, etc.)
25
+ * and returns a DER-encoded ECDSA signature.
26
+ *
27
+ * @param data - The bytes to sign (will be hashed internally).
28
+ * @param privateKey - The ECDSA private key bytes.
29
+ * @param curve - The ECDSA curve to use.
30
+ * @returns DER-encoded signature bytes.
31
+ */
32
+ export declare function signPayload(data: Uint8Array, privateKey: Uint8Array, curve: CurveName): Uint8Array;
20
33
  /**
21
34
  * Generate a new random ECDSA key pair.
22
35
  *
@@ -38,12 +51,12 @@ export declare function getPublicKey(privateKey: Uint8Array, curve: CurveName):
38
51
  * Encodes the ticket with a zero-filled Level 1 signature placeholder,
39
52
  * extracts the Level 1 signed data, and produces the DER signature.
40
53
  *
41
- * @param input - Ticket input **without** `level1Signature` set (it will be overwritten).
54
+ * @param ticket - Ticket (level1Signature will be overwritten with a zero placeholder).
42
55
  * @param privateKey - Level 1 private key bytes.
43
56
  * @param curve - The ECDSA curve.
44
57
  * @returns DER-encoded Level 1 signature bytes.
45
58
  */
46
- export declare function signLevel1(input: UicBarcodeTicketInput, privateKey: Uint8Array, curve: CurveName): Uint8Array;
59
+ export declare function signLevel1(ticket: UicBarcodeTicket, privateKey: Uint8Array, curve: CurveName): Uint8Array;
47
60
  /**
48
61
  * Sign Level 2 data of a ticket.
49
62
  *
@@ -51,26 +64,26 @@ export declare function signLevel1(input: UicBarcodeTicketInput, privateKey: Uin
51
64
  * Level 2 placeholder, extracts the Level 2 signed data, and produces the
52
65
  * DER signature.
53
66
  *
54
- * @param input - Ticket input with `level1Signature` already set.
67
+ * @param ticket - Ticket with `level2SignedData.level1Signature` already set.
55
68
  * @param privateKey - Level 2 private key bytes.
56
69
  * @param curve - The ECDSA curve.
57
70
  * @returns DER-encoded Level 2 signature bytes.
58
71
  */
59
- export declare function signLevel2(input: UicBarcodeTicketInput, privateKey: Uint8Array, curve: CurveName): Uint8Array;
72
+ export declare function signLevel2(ticket: UicBarcodeTicket, privateKey: Uint8Array, curve: CurveName): Uint8Array;
60
73
  /**
61
74
  * Sign and encode a complete ticket with both Level 1 and Level 2 signatures.
62
75
  *
63
- * Performs the full two-pass signing flow:
64
- * 1. Encode with zero signatures → sign Level 1
65
- * 2. Encode with real Level 1 + zero Level 2 → sign Level 2
66
- * 3. Encode final ticket with both real signatures
76
+ * Uses the composable encoding primitives:
77
+ * 1. Encode level1Data → sign level1Signature
78
+ * 2. Encode level2SignedData (with level1Data + signature) → sign level2Signature
79
+ * 3. Encode final UicBarcodeHeader
67
80
  *
68
81
  * When `level2Key` is omitted, only Level 1 signing is performed (static barcode mode).
69
82
  *
70
- * @param input - Ticket data to encode (signature fields are overwritten).
83
+ * @param ticket - Ticket data to encode (signature fields are overwritten).
71
84
  * @param level1Key - Level 1 signing key pair.
72
85
  * @param level2Key - Optional Level 2 signing key pair.
73
86
  * @returns Encoded ticket bytes with valid signatures.
74
87
  */
75
- export declare function signAndEncodeTicket(input: UicBarcodeTicketInput, level1Key: SigningKeyPair, level2Key?: SigningKeyPair): Uint8Array;
88
+ export declare function signAndEncodeTicket(ticket: UicBarcodeTicket, level1Key: SigningKeyPair, level2Key?: SigningKeyPair): Uint8Array;
76
89
  //# sourceMappingURL=signer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAMrD,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;CAClB;AAMD,kDAAkD;AAClD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAgBjD,CAAC;AA8CF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,cAAc,CAKhE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAGjF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,qBAAqB,EAC5B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,GACf,UAAU,CAiBZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,qBAAqB,EAC5B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,GACf,UAAU,CAkBZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,cAAc,EACzB,SAAS,CAAC,EAAE,cAAc,GACzB,UAAU,CAyCZ"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,SAAS,CAAC;AAM5D,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;CAClB;AAMD,kDAAkD;AAClD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAgBjD,CAAC;AA8CF;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,GACf,UAAU,CAEZ;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,cAAc,CAKhE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CAGjF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,GACf,UAAU,CAsBZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,GACf,UAAU,CAyBZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,cAAc,EACzB,SAAS,CAAC,EAAE,cAAc,GACzB,UAAU,CAiDZ"}
package/dist/signer.js CHANGED
@@ -11,7 +11,7 @@
11
11
  * 5. Final encode with both real signatures
12
12
  */
13
13
  import { p256, p384, p521 } from '@noble/curves/nist.js';
14
- import { encodeTicketToBytes } from './encoder';
14
+ import { encodeLevel1Data, encodeLevel2Data, encodeLevel2SignedData, encodeUicBarcode, encodeTicketToBytes } from './encoder';
15
15
  import { extractSignedData } from './signed-data';
16
16
  import { rawToDer } from './signature-utils';
17
17
  // ---------------------------------------------------------------------------
@@ -70,6 +70,24 @@ function ecSign(data, privateKey, curve) {
70
70
  return rawToDer(compactSig, componentLength(curve));
71
71
  }
72
72
  // ---------------------------------------------------------------------------
73
+ // Public signing primitive
74
+ // ---------------------------------------------------------------------------
75
+ /**
76
+ * Sign arbitrary data with ECDSA and return a DER-encoded signature.
77
+ *
78
+ * This is the low-level signing primitive used by the composable encoding flow.
79
+ * It hashes the data with the curve's associated hash (SHA-256 for P-256, etc.)
80
+ * and returns a DER-encoded ECDSA signature.
81
+ *
82
+ * @param data - The bytes to sign (will be hashed internally).
83
+ * @param privateKey - The ECDSA private key bytes.
84
+ * @param curve - The ECDSA curve to use.
85
+ * @returns DER-encoded signature bytes.
86
+ */
87
+ export function signPayload(data, privateKey, curve) {
88
+ return ecSign(data, privateKey, curve);
89
+ }
90
+ // ---------------------------------------------------------------------------
73
91
  // Key generation helper
74
92
  // ---------------------------------------------------------------------------
75
93
  /**
@@ -104,22 +122,27 @@ export function getPublicKey(privateKey, curve) {
104
122
  * Encodes the ticket with a zero-filled Level 1 signature placeholder,
105
123
  * extracts the Level 1 signed data, and produces the DER signature.
106
124
  *
107
- * @param input - Ticket input **without** `level1Signature` set (it will be overwritten).
125
+ * @param ticket - Ticket (level1Signature will be overwritten with a zero placeholder).
108
126
  * @param privateKey - Level 1 private key bytes.
109
127
  * @param curve - The ECDSA curve.
110
128
  * @returns DER-encoded Level 1 signature bytes.
111
129
  */
112
- export function signLevel1(input, privateKey, curve) {
130
+ export function signLevel1(ticket, privateKey, curve) {
113
131
  const curveConfig = CURVES[curve];
114
132
  const zeroSig = new Uint8Array(maxDerSigSize(curve));
115
- // Prepare input with algorithm OIDs and zero placeholder
133
+ const l1 = ticket.level2SignedData.level1Data;
116
134
  const prepared = {
117
- ...input,
118
- level1KeyAlg: input.level1KeyAlg ?? curveConfig.keyAlgOid,
119
- level1SigningAlg: input.level1SigningAlg ?? curveConfig.sigAlgOid,
120
- level1Signature: zeroSig,
121
- // Keep existing L2 signature or use zero
122
- level2Signature: input.level2Signature ?? new Uint8Array(0),
135
+ ...ticket,
136
+ level2SignedData: {
137
+ ...ticket.level2SignedData,
138
+ level1Data: {
139
+ ...l1,
140
+ level1KeyAlg: l1.level1KeyAlg ?? curveConfig.keyAlgOid,
141
+ level1SigningAlg: l1.level1SigningAlg ?? curveConfig.sigAlgOid,
142
+ },
143
+ level1Signature: zeroSig,
144
+ },
145
+ level2Signature: ticket.level2Signature ?? new Uint8Array(0),
123
146
  };
124
147
  const bytes = encodeTicketToBytes(prepared);
125
148
  const extracted = extractSignedData(bytes);
@@ -132,21 +155,28 @@ export function signLevel1(input, privateKey, curve) {
132
155
  * Level 2 placeholder, extracts the Level 2 signed data, and produces the
133
156
  * DER signature.
134
157
  *
135
- * @param input - Ticket input with `level1Signature` already set.
158
+ * @param ticket - Ticket with `level2SignedData.level1Signature` already set.
136
159
  * @param privateKey - Level 2 private key bytes.
137
160
  * @param curve - The ECDSA curve.
138
161
  * @returns DER-encoded Level 2 signature bytes.
139
162
  */
140
- export function signLevel2(input, privateKey, curve) {
141
- if (!input.level1Signature) {
163
+ export function signLevel2(ticket, privateKey, curve) {
164
+ if (!ticket.level2SignedData.level1Signature) {
142
165
  throw new Error('Level 1 signature must be set before signing Level 2');
143
166
  }
144
167
  const curveConfig = CURVES[curve];
145
168
  const zeroSig = new Uint8Array(maxDerSigSize(curve));
169
+ const l1 = ticket.level2SignedData.level1Data;
146
170
  const prepared = {
147
- ...input,
148
- level2KeyAlg: input.level2KeyAlg ?? curveConfig.keyAlgOid,
149
- level2SigningAlg: input.level2SigningAlg ?? curveConfig.sigAlgOid,
171
+ ...ticket,
172
+ level2SignedData: {
173
+ ...ticket.level2SignedData,
174
+ level1Data: {
175
+ ...l1,
176
+ level2KeyAlg: l1.level2KeyAlg ?? curveConfig.keyAlgOid,
177
+ level2SigningAlg: l1.level2SigningAlg ?? curveConfig.sigAlgOid,
178
+ },
179
+ },
150
180
  level2Signature: zeroSig,
151
181
  };
152
182
  const bytes = encodeTicketToBytes(prepared);
@@ -156,51 +186,58 @@ export function signLevel2(input, privateKey, curve) {
156
186
  /**
157
187
  * Sign and encode a complete ticket with both Level 1 and Level 2 signatures.
158
188
  *
159
- * Performs the full two-pass signing flow:
160
- * 1. Encode with zero signatures → sign Level 1
161
- * 2. Encode with real Level 1 + zero Level 2 → sign Level 2
162
- * 3. Encode final ticket with both real signatures
189
+ * Uses the composable encoding primitives:
190
+ * 1. Encode level1Data → sign level1Signature
191
+ * 2. Encode level2SignedData (with level1Data + signature) → sign level2Signature
192
+ * 3. Encode final UicBarcodeHeader
163
193
  *
164
194
  * When `level2Key` is omitted, only Level 1 signing is performed (static barcode mode).
165
195
  *
166
- * @param input - Ticket data to encode (signature fields are overwritten).
196
+ * @param ticket - Ticket data to encode (signature fields are overwritten).
167
197
  * @param level1Key - Level 1 signing key pair.
168
198
  * @param level2Key - Optional Level 2 signing key pair.
169
199
  * @returns Encoded ticket bytes with valid signatures.
170
200
  */
171
- export function signAndEncodeTicket(input, level1Key, level2Key) {
201
+ export function signAndEncodeTicket(ticket, level1Key, level2Key) {
172
202
  const l1Curve = CURVES[level1Key.curve];
173
- const baseInput = {
174
- ...input,
203
+ const l1 = ticket.level2SignedData.level1Data;
204
+ // Build level1Data with algorithm OIDs and L2 public key.
205
+ // Always set OIDs from the key pair (overriding any existing values from a decoded ticket).
206
+ const level1Data = {
207
+ ...l1,
175
208
  level1KeyAlg: l1Curve.keyAlgOid,
209
+ level2KeyAlg: level2Key ? CURVES[level2Key.curve].keyAlgOid : l1.level2KeyAlg,
176
210
  level1SigningAlg: l1Curve.sigAlgOid,
211
+ level2SigningAlg: level2Key ? CURVES[level2Key.curve].sigAlgOid : l1.level2SigningAlg,
212
+ level2PublicKey: level2Key ? level2Key.publicKey : l1.level2PublicKey,
177
213
  };
178
- if (level2Key) {
179
- const l2Curve = CURVES[level2Key.curve];
180
- baseInput.level2KeyAlg = l2Curve.keyAlgOid;
181
- baseInput.level2SigningAlg = l2Curve.sigAlgOid;
182
- baseInput.level2PublicKey = level2Key.publicKey;
183
- }
184
- // Pass 1: sign Level 1
185
- const level1Sig = signLevel1(baseInput, level1Key.privateKey, level1Key.curve);
186
- if (!level2Key) {
187
- // Static barcode: only L1 signed, L2 signature is empty
188
- return encodeTicketToBytes({
189
- ...baseInput,
190
- level1Signature: level1Sig,
191
- level2Signature: new Uint8Array(0),
192
- });
214
+ // Step 1: Encode level1Data
215
+ const level1Raw = encodeLevel1Data(level1Data, ticket.format);
216
+ // Step 2: Sign level1Data
217
+ const level1Sig = signPayload(level1Raw.data, level1Key.privateKey, level1Key.curve);
218
+ // Step 3: Build level2Data if present
219
+ let level2DataEncoded;
220
+ const l2 = ticket.level2SignedData.level2Data;
221
+ if (l2) {
222
+ level2DataEncoded = encodeLevel2Data(l2);
193
223
  }
194
- // Pass 2: sign Level 2
195
- const inputWithL1 = {
196
- ...baseInput,
197
- level1Signature: level1Sig,
198
- };
199
- const level2Sig = signLevel2(inputWithL1, level2Key.privateKey, level2Key.curve);
200
- // Final encode with both real signatures
201
- return encodeTicketToBytes({
202
- ...baseInput,
224
+ // Step 4: Encode level2SignedData
225
+ const headerVersion = parseInt(ticket.format.replace('U', ''), 10);
226
+ const level2Raw = encodeLevel2SignedData({
227
+ headerVersion,
228
+ level1Data: level1Raw,
203
229
  level1Signature: level1Sig,
230
+ level2Data: level2DataEncoded,
231
+ });
232
+ // Step 5: Sign level2SignedData (if level2Key provided)
233
+ let level2Sig;
234
+ if (level2Key) {
235
+ level2Sig = signPayload(level2Raw.data, level2Key.privateKey, level2Key.curve);
236
+ }
237
+ // Step 6: Encode final barcode
238
+ return encodeUicBarcode({
239
+ format: ticket.format,
240
+ level2SignedData: level2Raw,
204
241
  level2Signature: level2Sig,
205
242
  });
206
243
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -43,8 +43,8 @@ export interface Level1Data {
43
43
  export interface DataSequenceEntry {
44
44
  /** Data format identifier (e.g. "FCB1", "FCB2", "FCB3"). */
45
45
  dataFormat: string;
46
- /** Raw PER-encoded data bytes. */
47
- data: Uint8Array;
46
+ /** Raw PER-encoded data bytes (produced by the encoder when absent). */
47
+ data?: Uint8Array;
48
48
  /** Decoded UicRailTicketData (when dataFormat is FCBn). */
49
49
  decoded?: UicRailTicketData;
50
50
  }
@@ -52,8 +52,8 @@ export interface DataSequenceEntry {
52
52
  export interface Level2Data {
53
53
  /** Data format identifier (e.g. "FDC1", "_3703.ID1"). */
54
54
  dataFormat: string;
55
- /** Raw PER-encoded data bytes. */
56
- data: Uint8Array;
55
+ /** Raw PER-encoded data bytes (produced by the encoder when absent). */
56
+ data?: Uint8Array;
57
57
  /** Decoded dynamic content data (UicDynamicContentData for FDC1, IntercodeDynamicData for _RICS.ID1). */
58
58
  decoded?: UicDynamicContentData | IntercodeDynamicData;
59
59
  }
@@ -229,100 +229,6 @@ export interface UicDynamicContentData {
229
229
  dynamicContentResponseToChallenge?: DynamicContentExtensionData[];
230
230
  dynamicContentExtension?: DynamicContentExtensionData;
231
231
  }
232
- /** Input for encoding a UIC barcode ticket. */
233
- export interface UicBarcodeTicketInput {
234
- /** Header version (1 or 2). Default: 2. */
235
- headerVersion?: number;
236
- /** RICS code of the security provider. */
237
- securityProviderNum?: number;
238
- /** Key ID for signature verification. */
239
- keyId?: number;
240
- /** Level 1 key algorithm OID. */
241
- level1KeyAlg?: string;
242
- /** Level 2 key algorithm OID. */
243
- level2KeyAlg?: string;
244
- /** Level 1 signing algorithm OID. */
245
- level1SigningAlg?: string;
246
- /** Level 2 signing algorithm OID. */
247
- level2SigningAlg?: string;
248
- /** Level 2 public key bytes. */
249
- level2PublicKey?: Uint8Array;
250
- /** Level 1 signature bytes (placeholder). */
251
- level1Signature?: Uint8Array;
252
- /** Level 2 signature bytes (placeholder). */
253
- level2Signature?: Uint8Array;
254
- /** End of validity year (2016-2269, v2 header only). */
255
- endOfValidityYear?: number;
256
- /** End of validity day (1-366). */
257
- endOfValidityDay?: number;
258
- /** End of validity time in minutes (0-1439). */
259
- endOfValidityTime?: number;
260
- /** Validity duration in seconds (1-3600). */
261
- validityDuration?: number;
262
- /** FCB version (1, 2 or 3). Default: 2. */
263
- fcbVersion?: number;
264
- /** The rail ticket data to encode. */
265
- railTicket: RailTicketInput;
266
- /** Intercode 6 dynamic data for Level 2 (encoded as _RICS.ID1). */
267
- dynamicData?: IntercodeDynamicDataInput;
268
- /** UIC Dynamic Content Data for Level 2 (encoded as FDC1). */
269
- dynamicContentData?: UicDynamicContentDataInput;
270
- }
271
- export interface RailTicketInput {
272
- issuingDetail: IssuingDetailInput;
273
- travelerDetail?: TravelerDetailInput;
274
- transportDocument?: TransportDocumentInput[];
275
- controlDetail?: Record<string, unknown>;
276
- }
277
- export interface IssuingDetailInput {
278
- securityProviderNum?: number;
279
- issuerNum?: number;
280
- issuingYear: number;
281
- issuingDay: number;
282
- issuingTime?: number;
283
- issuerName?: string;
284
- specimen?: boolean;
285
- securePaperTicket?: boolean;
286
- activated?: boolean;
287
- currency?: string;
288
- currencyFract?: number;
289
- issuerPNR?: string;
290
- /** Intercode 6 issuing extension data. */
291
- intercodeIssuing?: IntercodeIssuingDataInput;
292
- }
293
- export interface IntercodeIssuingDataInput {
294
- /** Override the generated extension ID (e.g. "+FRII1"). When omitted, defaults to `_<RICS>II1`. */
295
- extensionId?: string;
296
- intercodeVersion?: number;
297
- intercodeInstanciation?: number;
298
- networkId: Uint8Array;
299
- productRetailer?: ProductRetailerData;
300
- }
301
- export interface IntercodeDynamicDataInput {
302
- /** RICS code for the dataFormat field (e.g. 3703 -> "_3703.ID1"). */
303
- rics: number;
304
- dynamicContentDay?: number;
305
- dynamicContentTime?: number;
306
- dynamicContentUTCOffset?: number;
307
- dynamicContentDuration?: number;
308
- }
309
- /** Input for encoding UIC Dynamic Content Data (FDC1 format). */
310
- export interface UicDynamicContentDataInput {
311
- dynamicContentMobileAppId?: string;
312
- dynamicContentTimeStamp?: TimeStampData;
313
- dynamicContentGeoCoordinate?: DynamicContentGeoCoordinate;
314
- dynamicContentResponseToChallenge?: DynamicContentExtensionData[];
315
- dynamicContentExtension?: DynamicContentExtensionData;
316
- }
317
- export interface TravelerDetailInput {
318
- traveler?: Partial<TravelerInfo>[];
319
- preferredLanguage?: string;
320
- groupName?: string;
321
- }
322
- export interface TransportDocumentInput {
323
- ticketType: string;
324
- ticket: Record<string, unknown>;
325
- }
326
232
  /** Options for ticket control / validation. */
327
233
  export interface ControlOptions {
328
234
  /** Reference date/time for temporal checks. Defaults to `new Date()`. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mDAAmD;IACnD,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,UAAU,EAAE,UAAU,CAAC;IACvB,uCAAuC;IACvC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yGAAyG;IACzG,OAAO,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CAAC;CACxD;AAMD,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC5C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAMD,MAAM,WAAW,aAAa;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,yDAAyD;IACzD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,UAAU,CAAC;CAC3B;AAMD,sFAAsF;AACtF,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kFAAkF;IAClF,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CACzD;AAMD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD,MAAM,WAAW,aAAa;IAC5B,6BAA6B,CAAC,EAAE,aAAa,EAAE,CAAC;IAChD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,mBAAmB,GACnB,SAAS,GACT,cAAc,GACd,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAMD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,UAAU,CAAC;CAC3B;AAED,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,aAAa,CAAC;IACxC,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,iCAAiC,CAAC,EAAE,2BAA2B,EAAE,CAAC;IAClE,uBAAuB,CAAC,EAAE,2BAA2B,CAAC;CACvD;AAMD,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3C;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,yDAAyD;IACzD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAMD,qEAAqE;AACrE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,YAAY,CACV,gBAAgB,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAChD,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dosipas-ts",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "UIC barcode ticket encoder/decoder/verifier with Intercode 6 extensions",
5
5
  "type": "module",
6
6
  "exports": {
@@ -44,7 +44,7 @@
44
44
  "dependencies": {
45
45
  "@noble/curves": "^2.0.1",
46
46
  "@noble/hashes": "^2.0.1",
47
- "asn1-per-ts": "^1.0.0"
47
+ "asn1-per-ts": "^1.4.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/node": "^25.2.3",