@particle/esim-tooling 1.0.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.
Files changed (77) hide show
  1. package/README.md +187 -0
  2. package/dist/activation-code.d.ts +11 -0
  3. package/dist/activation-code.d.ts.map +1 -0
  4. package/dist/activation-code.js +56 -0
  5. package/dist/activation-code.js.map +1 -0
  6. package/dist/apdu.d.ts +73 -0
  7. package/dist/apdu.d.ts.map +1 -0
  8. package/dist/apdu.js +357 -0
  9. package/dist/apdu.js.map +1 -0
  10. package/dist/errors.d.ts +32 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +52 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/es10/es10b-notifications.d.ts +30 -0
  15. package/dist/es10/es10b-notifications.d.ts.map +1 -0
  16. package/dist/es10/es10b-notifications.js +294 -0
  17. package/dist/es10/es10b-notifications.js.map +1 -0
  18. package/dist/es10/es10b.d.ts +34 -0
  19. package/dist/es10/es10b.d.ts.map +1 -0
  20. package/dist/es10/es10b.js +108 -0
  21. package/dist/es10/es10b.js.map +1 -0
  22. package/dist/es10/es10c.d.ts +12 -0
  23. package/dist/es10/es10c.d.ts.map +1 -0
  24. package/dist/es10/es10c.js +133 -0
  25. package/dist/es10/es10c.js.map +1 -0
  26. package/dist/es10/iccid.d.ts +9 -0
  27. package/dist/es10/iccid.d.ts.map +1 -0
  28. package/dist/es10/iccid.js +31 -0
  29. package/dist/es10/iccid.js.map +1 -0
  30. package/dist/es10/index.d.ts +5 -0
  31. package/dist/es10/index.d.ts.map +1 -0
  32. package/dist/es10/index.js +4 -0
  33. package/dist/es10/index.js.map +1 -0
  34. package/dist/es10/tags.d.ts +55 -0
  35. package/dist/es10/tags.d.ts.map +1 -0
  36. package/dist/es10/tags.js +63 -0
  37. package/dist/es10/tags.js.map +1 -0
  38. package/dist/es9plus.d.ts +52 -0
  39. package/dist/es9plus.d.ts.map +1 -0
  40. package/dist/es9plus.js +227 -0
  41. package/dist/es9plus.js.map +1 -0
  42. package/dist/gsma-rsp2-root-ci1.d.ts +38 -0
  43. package/dist/gsma-rsp2-root-ci1.d.ts.map +1 -0
  44. package/dist/gsma-rsp2-root-ci1.js +52 -0
  45. package/dist/gsma-rsp2-root-ci1.js.map +1 -0
  46. package/dist/index.d.ts +6 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +5 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/lpa.d.ts +15 -0
  51. package/dist/lpa.d.ts.map +1 -0
  52. package/dist/lpa.js +283 -0
  53. package/dist/lpa.js.map +1 -0
  54. package/dist/tlv.d.ts +14 -0
  55. package/dist/tlv.d.ts.map +1 -0
  56. package/dist/tlv.js +132 -0
  57. package/dist/tlv.js.map +1 -0
  58. package/dist/types.d.ts +230 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +108 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +50 -0
  63. package/src/activation-code.ts +64 -0
  64. package/src/apdu.ts +419 -0
  65. package/src/errors.ts +69 -0
  66. package/src/es10/es10b-notifications.ts +331 -0
  67. package/src/es10/es10b.ts +163 -0
  68. package/src/es10/es10c.ts +168 -0
  69. package/src/es10/iccid.ts +32 -0
  70. package/src/es10/index.ts +42 -0
  71. package/src/es10/tags.ts +69 -0
  72. package/src/es9plus.ts +331 -0
  73. package/src/gsma-rsp2-root-ci1.ts +53 -0
  74. package/src/index.ts +43 -0
  75. package/src/lpa.ts +346 -0
  76. package/src/tlv.ts +137 -0
  77. package/src/types.ts +264 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lpa.d.ts","sourceRoot":"","sources":["../src/lpa.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,OAAO,EAIZ,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAkCpB,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,cAAc;IAK7B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAUzB,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAUlC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAahE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgIvE,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,0BAA0B,CAAC;YA8ExF,uBAAuB;CAWtC"}
package/dist/lpa.js ADDED
@@ -0,0 +1,283 @@
1
+ import { Es10Error } from './errors.js';
2
+ import { EnableProfileResult, DisableProfileResult, DeleteProfileResult, CancelSessionReason, BppInstallErrorCode, } from './types.js';
3
+ import { ApduTransport } from './apdu.js';
4
+ import { encodeGetEidRequest, decodeGetEidResponse, encodeGetProfilesInfoRequest, decodeGetProfilesInfoResponse, encodeEnableProfileRequest, decodeEnableProfileResponse, encodeDisableProfileRequest, decodeDisableProfileResponse, encodeDeleteProfileRequest, decodeDeleteProfileResponse, } from './es10/es10c.js';
5
+ import { encodeGetEuiccChallengeRequest, decodeGetEuiccChallengeResponse, encodeGetEuiccInfo1Request, encodeAuthenticateServerRequest, decodeAuthenticateServerResponse, encodePrepareDownloadRequest, decodePrepareDownloadResponse, hashConfirmationCode, encodeCancelSessionRequest, } from './es10/es10b.js';
6
+ import { encodeRetrieveNotificationsListRequest, decodeRetrieveNotificationsListFull, decodeBppInstallationResult, encodeRemoveNotificationRequest, } from './es10/es10b-notifications.js';
7
+ import { parseActivationCode } from './activation-code.js';
8
+ import { Es9PlusClient } from './es9plus.js';
9
+ export class EsimLpa {
10
+ apdu;
11
+ es9plus;
12
+ constructor(options) {
13
+ this.apdu = new ApduTransport(options.device);
14
+ this.es9plus = new Es9PlusClient(options.server);
15
+ }
16
+ async getEid() {
17
+ try {
18
+ const request = encodeGetEidRequest();
19
+ const response = await this.apdu.sendCommand(request);
20
+ return decodeGetEidResponse(response);
21
+ }
22
+ finally {
23
+ await this.apdu.close();
24
+ }
25
+ }
26
+ async listProfiles() {
27
+ try {
28
+ const request = encodeGetProfilesInfoRequest();
29
+ const response = await this.apdu.sendCommand(request);
30
+ return decodeGetProfilesInfoResponse(response);
31
+ }
32
+ finally {
33
+ await this.apdu.close();
34
+ }
35
+ }
36
+ async enableProfile(iccid, refreshFlag = false) {
37
+ try {
38
+ const request = encodeEnableProfileRequest(iccid, refreshFlag);
39
+ const response = await this.apdu.sendCommand(request);
40
+ const result = decodeEnableProfileResponse(response);
41
+ if (result !== EnableProfileResult.Ok) {
42
+ throw new Es10Error(result, `enableProfile failed: ${EnableProfileResult[result] ?? result}`);
43
+ }
44
+ }
45
+ finally {
46
+ await this.apdu.close();
47
+ }
48
+ }
49
+ async disableProfile(iccid, refreshFlag = false) {
50
+ try {
51
+ const request = encodeDisableProfileRequest(iccid, refreshFlag);
52
+ const response = await this.apdu.sendCommand(request);
53
+ const result = decodeDisableProfileResponse(response);
54
+ if (result !== DisableProfileResult.Ok) {
55
+ throw new Es10Error(result, `disableProfile failed: ${DisableProfileResult[result] ?? result}`);
56
+ }
57
+ }
58
+ finally {
59
+ await this.apdu.close();
60
+ }
61
+ }
62
+ async deleteProfile(iccid) {
63
+ try {
64
+ const request = encodeDeleteProfileRequest(iccid);
65
+ const response = await this.apdu.sendCommand(request);
66
+ const result = decodeDeleteProfileResponse(response);
67
+ if (result !== DeleteProfileResult.Ok) {
68
+ throw new Es10Error(result, `deleteProfile failed: ${DeleteProfileResult[result] ?? result}`);
69
+ }
70
+ }
71
+ finally {
72
+ await this.apdu.close();
73
+ }
74
+ }
75
+ async installProfile(options) {
76
+ const progress = (step, detail) => {
77
+ options.onProgress?.({ step, detail });
78
+ };
79
+ let transactionId;
80
+ let smdpAddress;
81
+ try {
82
+ // Step 1: Parse activation code
83
+ progress('parseActivationCode');
84
+ const ac = parseActivationCode(options.activationCode);
85
+ smdpAddress = ac.smdpAddress;
86
+ // Step 2: Get eUICC challenge
87
+ progress('getEuiccChallenge');
88
+ const challengeReq = encodeGetEuiccChallengeRequest();
89
+ const challengeResp = await this.apdu.sendCommand(challengeReq);
90
+ const euiccChallenge = decodeGetEuiccChallengeResponse(challengeResp);
91
+ // Step 3: Get eUICC info
92
+ progress('getEuiccInfo');
93
+ const info1Req = encodeGetEuiccInfo1Request();
94
+ const euiccInfo1 = await this.apdu.sendCommand(info1Req);
95
+ // Step 4: Initiate authentication with SM-DP+
96
+ progress('initiateAuth');
97
+ const initAuthResp = await this.es9plus.initiateAuthentication(smdpAddress, {
98
+ euiccChallenge,
99
+ euiccInfo1,
100
+ });
101
+ transactionId = initAuthResp.transactionId;
102
+ // Step 5: Authenticate server on eUICC
103
+ progress('authenticateServer');
104
+ const authServerReq = encodeAuthenticateServerRequest({
105
+ serverSigned1: initAuthResp.serverSigned1,
106
+ serverSignature1: initAuthResp.serverSignature1,
107
+ euiccCiPKIdToBeUsed: initAuthResp.euiccCiPKIdToBeUsed,
108
+ serverCertificate: initAuthResp.serverCertificate,
109
+ matchingId: ac.matchingId || undefined,
110
+ });
111
+ const authServerResp = await this.apdu.sendCommand(authServerReq);
112
+ const authServerDecoded = decodeAuthenticateServerResponse(authServerResp);
113
+ // Step 6: Authenticate client on SM-DP+
114
+ progress('authenticateClient');
115
+ const authClientResp = await this.es9plus.authenticateClient(smdpAddress, {
116
+ transactionId,
117
+ authenticateServerResponse: authServerDecoded.raw,
118
+ });
119
+ // Step 7: Prepare download on eUICC
120
+ progress('prepareDownload');
121
+ let hashCc;
122
+ if (options.confirmationCode) {
123
+ hashCc = await hashConfirmationCode(options.confirmationCode, transactionId);
124
+ }
125
+ const prepDlReq = encodePrepareDownloadRequest({
126
+ smdpSigned2: authClientResp.smdpSigned2,
127
+ smdpSignature2: authClientResp.smdpSignature2,
128
+ smdpCertificate: authClientResp.smdpCertificate,
129
+ hashCc,
130
+ });
131
+ const prepDlResp = await this.apdu.sendCommand(prepDlReq);
132
+ const prepDlDecoded = decodePrepareDownloadResponse(prepDlResp);
133
+ // Step 8: Get bound profile package from SM-DP+
134
+ progress('getBoundProfilePackage');
135
+ const bppResp = await this.es9plus.getBoundProfilePackage(smdpAddress, {
136
+ transactionId,
137
+ prepareDownloadResponse: prepDlDecoded.raw,
138
+ });
139
+ // Step 9: Load bound profile package on eUICC
140
+ progress('loadProfile');
141
+ const bppResultRaw = await this.apdu.loadBoundProfilePackage(bppResp.boundProfilePackage);
142
+ // Parse ProfileInstallationResult from eUICC (if returned)
143
+ let installResult;
144
+ if (bppResultRaw && bppResultRaw.length > 0) {
145
+ try {
146
+ installResult = decodeBppInstallationResult(bppResultRaw);
147
+ if (!installResult.success) {
148
+ // Return structured failure instead of throwing
149
+ const errorName = BppInstallErrorCode[installResult.errorReasonCode ?? -1] ?? 'Unknown';
150
+ return {
151
+ success: false,
152
+ error: `Profile installation failed: ${errorName}`,
153
+ errorSubjectCode: installResult.errorSubjectCode,
154
+ errorReasonCode: installResult.errorReasonCode,
155
+ };
156
+ }
157
+ }
158
+ catch {
159
+ // If parsing fails but no error was thrown during BPP loading, continue
160
+ // The eUICC may not return a result in all cases
161
+ }
162
+ }
163
+ // Step 10: Complete
164
+ progress('complete');
165
+ // Prefer ICCID from eUICC result (confirms actual installation), fallback to ES9+ metadata
166
+ const iccid = installResult?.iccid ?? authClientResp.profileMetadata?.iccid;
167
+ return {
168
+ success: true,
169
+ iccid,
170
+ profileMetadata: authClientResp.profileMetadata
171
+ ? {
172
+ serviceProviderName: authClientResp.profileMetadata.serviceProviderName,
173
+ profileName: authClientResp.profileMetadata.profileName,
174
+ }
175
+ : undefined,
176
+ };
177
+ }
178
+ catch (error) {
179
+ // Attempt cancel session on failure (best-effort)
180
+ if (transactionId && smdpAddress) {
181
+ await this.cancelSessionBestEffort(smdpAddress, transactionId, error);
182
+ }
183
+ return {
184
+ success: false,
185
+ error: error instanceof Error ? error.message : String(error),
186
+ };
187
+ }
188
+ finally {
189
+ await this.apdu.close();
190
+ }
191
+ }
192
+ async processNotifications(options) {
193
+ const listOnly = options?.listOnly ?? false;
194
+ const forceRemove = options?.forceRemove ?? false;
195
+ try {
196
+ // Single eUICC call: retrieve all notifications with metadata and raw bytes
197
+ const request = encodeRetrieveNotificationsListRequest();
198
+ const response = await this.apdu.sendCommand(request);
199
+ const notifications = decodeRetrieveNotificationsListFull(response);
200
+ // Sort by seqNumber (eUICC may return in arbitrary order)
201
+ notifications.sort((a, b) => a.seqNumber - b.seqNumber);
202
+ // If listOnly, just return notifications with sendResult: null
203
+ if (listOnly) {
204
+ const results = notifications.map((n) => ({
205
+ seqNumber: n.seqNumber,
206
+ operation: n.operation,
207
+ notificationAddress: n.notificationAddress,
208
+ iccid: n.iccid,
209
+ success: n.success,
210
+ errorSubjectCode: n.errorSubjectCode,
211
+ errorReasonCode: n.errorReasonCode,
212
+ sendResult: null,
213
+ }));
214
+ return { notifications: results };
215
+ }
216
+ const results = [];
217
+ let sent = 0;
218
+ let failed = 0;
219
+ // Process each notification - raw bytes already available from initial call
220
+ for (const notification of notifications) {
221
+ const sendResult = {
222
+ sent: false,
223
+ removed: false,
224
+ };
225
+ try {
226
+ // Send raw PendingNotification bytes to SM-DP+
227
+ await this.es9plus.handleNotification(notification.notificationAddress, notification.raw);
228
+ sendResult.sent = true;
229
+ sent++;
230
+ }
231
+ catch (error) {
232
+ sendResult.error = error instanceof Error ? error.message : String(error);
233
+ failed++;
234
+ }
235
+ // Remove from eUICC if successfully sent, or if forceRemove is enabled
236
+ if (sendResult.sent || forceRemove) {
237
+ try {
238
+ const removeReq = encodeRemoveNotificationRequest(notification.seqNumber);
239
+ await this.apdu.sendCommand(removeReq);
240
+ sendResult.removed = true;
241
+ }
242
+ catch {
243
+ // Best-effort removal
244
+ }
245
+ }
246
+ results.push({
247
+ seqNumber: notification.seqNumber,
248
+ operation: notification.operation,
249
+ notificationAddress: notification.notificationAddress,
250
+ iccid: notification.iccid,
251
+ success: notification.success,
252
+ errorSubjectCode: notification.errorSubjectCode,
253
+ errorReasonCode: notification.errorReasonCode,
254
+ sendResult,
255
+ });
256
+ }
257
+ return { notifications: results, sent, failed };
258
+ }
259
+ finally {
260
+ await this.apdu.close();
261
+ }
262
+ }
263
+ async cancelSessionBestEffort(smdpAddress, transactionId, _error) {
264
+ try {
265
+ const reason = CancelSessionReason.LoadBppExecutionError;
266
+ const txIdBytes = hexToBytes(transactionId);
267
+ const cancelReq = encodeCancelSessionRequest(txIdBytes, reason);
268
+ const cancelResp = await this.apdu.sendCommand(cancelReq);
269
+ await this.es9plus.cancelSession(smdpAddress, transactionId, cancelResp);
270
+ }
271
+ catch {
272
+ // Best-effort — ignore cancel failures
273
+ }
274
+ }
275
+ }
276
+ function hexToBytes(hex) {
277
+ const bytes = new Uint8Array(hex.length / 2);
278
+ for (let i = 0; i < hex.length; i += 2) {
279
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
280
+ }
281
+ return bytes;
282
+ }
283
+ //# sourceMappingURL=lpa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lpa.js","sourceRoot":"","sources":["../src/lpa.ts"],"names":[],"mappings":"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"}
package/dist/tlv.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export interface TlvNode {
2
+ tag: number;
3
+ value: Uint8Array;
4
+ children?: TlvNode[];
5
+ raw?: Uint8Array;
6
+ }
7
+ export declare function tlvEncode(tag: number, value: Uint8Array): Uint8Array;
8
+ export declare function tlvDecode(data: Uint8Array, offset?: number): TlvNode;
9
+ export declare function tlvDecodeAll(data: Uint8Array): TlvNode[];
10
+ export declare function tlvFind(node: TlvNode, tag: number): TlvNode | undefined;
11
+ export declare function tlvFindAll(node: TlvNode, tag: number): TlvNode[];
12
+ export declare function tlvConcat(...parts: Uint8Array[]): Uint8Array;
13
+ export declare function tlvBuildTagList(tags: number[]): Uint8Array;
14
+ //# sourceMappingURL=tlv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tlv.d.ts","sourceRoot":"","sources":["../src/tlv.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AA8DD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAIpE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,OAAO,CAuB/D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE,CASxD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAGvE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAGhE;AAED,wBAAgB,SAAS,CAAC,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAS5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAI1D"}
package/dist/tlv.js ADDED
@@ -0,0 +1,132 @@
1
+ import { TlvError } from './errors.js';
2
+ // Tags known to be constructed (have children)
3
+ const CONSTRUCTED_TAGS = new Set([
4
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xe3,
5
+ 0xbf20, 0xbf21, 0xbf22, 0xbf28, 0xbf29, 0xbf2b, 0xbf2d, 0xbf2e, 0xbf2f,
6
+ 0xbf30, 0xbf31, 0xbf32, 0xbf33, 0xbf34, 0xbf36, 0xbf38, 0xbf3e, 0xbf41, 0xbf43,
7
+ ]);
8
+ function isConstructed(tag) {
9
+ if (CONSTRUCTED_TAGS.has(tag))
10
+ return true;
11
+ // Check constructed bit (bit 5 of the first byte)
12
+ const firstByte = tag > 0xff ? (tag >> 8) & 0xff : tag;
13
+ return (firstByte & 0x20) !== 0;
14
+ }
15
+ function readTag(data, offset) {
16
+ if (offset >= data.length)
17
+ throw new TlvError('Unexpected end of data reading tag');
18
+ let tag = data[offset++];
19
+ if ((tag & 0x1f) === 0x1f) {
20
+ // Multi-byte tag
21
+ if (offset >= data.length)
22
+ throw new TlvError('Unexpected end of data reading multi-byte tag');
23
+ let next = data[offset++];
24
+ tag = (tag << 8) | next;
25
+ if (next & 0x80) {
26
+ // Three-byte tag
27
+ if (offset >= data.length)
28
+ throw new TlvError('Unexpected end of data reading 3-byte tag');
29
+ next = data[offset++];
30
+ tag = (tag << 8) | next;
31
+ }
32
+ }
33
+ return [tag, offset];
34
+ }
35
+ function readLength(data, offset) {
36
+ if (offset >= data.length)
37
+ throw new TlvError('Unexpected end of data reading length');
38
+ const first = data[offset++];
39
+ if (first < 0x80)
40
+ return [first, offset];
41
+ const numBytes = first & 0x7f;
42
+ if (numBytes === 0)
43
+ throw new TlvError('Indefinite length not supported');
44
+ if (numBytes > 3)
45
+ throw new TlvError(`Length field too large: ${numBytes} bytes`);
46
+ if (offset + numBytes > data.length)
47
+ throw new TlvError('Unexpected end of data reading length');
48
+ let length = 0;
49
+ for (let i = 0; i < numBytes; i++) {
50
+ length = (length << 8) | data[offset++];
51
+ }
52
+ return [length, offset];
53
+ }
54
+ function encodeTag(tag) {
55
+ if (tag <= 0xff)
56
+ return new Uint8Array([tag]);
57
+ if (tag <= 0xffff)
58
+ return new Uint8Array([(tag >> 8) & 0xff, tag & 0xff]);
59
+ return new Uint8Array([(tag >> 16) & 0xff, (tag >> 8) & 0xff, tag & 0xff]);
60
+ }
61
+ function encodeLength(length) {
62
+ if (length < 0x80)
63
+ return new Uint8Array([length]);
64
+ if (length <= 0xff)
65
+ return new Uint8Array([0x81, length]);
66
+ if (length <= 0xffff)
67
+ return new Uint8Array([0x82, (length >> 8) & 0xff, length & 0xff]);
68
+ return new Uint8Array([0x83, (length >> 16) & 0xff, (length >> 8) & 0xff, length & 0xff]);
69
+ }
70
+ export function tlvEncode(tag, value) {
71
+ const tagBytes = encodeTag(tag);
72
+ const lengthBytes = encodeLength(value.length);
73
+ return tlvConcat(tagBytes, lengthBytes, value);
74
+ }
75
+ export function tlvDecode(data, offset = 0) {
76
+ const rawStart = offset;
77
+ const [tag, afterTag] = readTag(data, offset);
78
+ const [length, afterLength] = readLength(data, afterTag);
79
+ if (afterLength + length > data.length) {
80
+ throw new TlvError(`TLV length ${length} exceeds available data (${data.length - afterLength} bytes)`);
81
+ }
82
+ const value = data.slice(afterLength, afterLength + length);
83
+ const raw = data.slice(rawStart, afterLength + length);
84
+ let children;
85
+ if (isConstructed(tag) && length > 0) {
86
+ children = [];
87
+ let childOffset = 0;
88
+ while (childOffset < value.length) {
89
+ const child = tlvDecode(value, childOffset);
90
+ children.push(child);
91
+ const childRawLen = child.raw.length;
92
+ childOffset += childRawLen;
93
+ }
94
+ }
95
+ return { tag, value, children, raw };
96
+ }
97
+ export function tlvDecodeAll(data) {
98
+ const nodes = [];
99
+ let offset = 0;
100
+ while (offset < data.length) {
101
+ const node = tlvDecode(data, offset);
102
+ nodes.push(node);
103
+ offset += node.raw.length;
104
+ }
105
+ return nodes;
106
+ }
107
+ export function tlvFind(node, tag) {
108
+ if (!node.children)
109
+ return undefined;
110
+ return node.children.find((c) => c.tag === tag);
111
+ }
112
+ export function tlvFindAll(node, tag) {
113
+ if (!node.children)
114
+ return [];
115
+ return node.children.filter((c) => c.tag === tag);
116
+ }
117
+ export function tlvConcat(...parts) {
118
+ const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
119
+ const result = new Uint8Array(totalLength);
120
+ let offset = 0;
121
+ for (const part of parts) {
122
+ result.set(part, offset);
123
+ offset += part.length;
124
+ }
125
+ return result;
126
+ }
127
+ export function tlvBuildTagList(tags) {
128
+ const tagBytes = tags.map(encodeTag);
129
+ const value = tlvConcat(...tagBytes);
130
+ return tlvEncode(0x5c, value);
131
+ }
132
+ //# sourceMappingURL=tlv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tlv.js","sourceRoot":"","sources":["../src/tlv.ts"],"names":[],"mappings":"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"}