@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,294 @@
1
+ import { Es10Error } from '../errors.js';
2
+ import { tlvEncode, tlvDecode, tlvFind, tlvFindAll } from '../tlv.js';
3
+ import { decodeIccid } from './iccid.js';
4
+ import { NotificationEvent } from '../types.js';
5
+ import * as Tags from './tags.js';
6
+ export function encodeListNotificationRequest() {
7
+ return tlvEncode(Tags.TAG_LIST_NOTIFICATION_REQUEST, new Uint8Array(0));
8
+ }
9
+ export function decodeListNotificationResponse(data) {
10
+ const root = tlvDecode(data);
11
+ if (root.tag !== Tags.TAG_LIST_NOTIFICATION_REQUEST) {
12
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
13
+ }
14
+ // Check for empty list or error
15
+ const metadataList = tlvFind(root, Tags.TAG_NOTIFICATION_METADATA_LIST);
16
+ if (!metadataList) {
17
+ // Could be an error response or empty
18
+ return [];
19
+ }
20
+ const result = [];
21
+ const items = tlvFindAll(metadataList, Tags.TAG_NOTIFICATION_METADATA);
22
+ for (const item of items) {
23
+ const metadata = decodeNotificationMetadata(item);
24
+ if (metadata)
25
+ result.push(metadata);
26
+ }
27
+ return result;
28
+ }
29
+ function decodeNotificationMetadata(node) {
30
+ const seqNode = tlvFind(node, Tags.TAG_NOTIFICATION_SEQ_NUMBER);
31
+ const opNode = tlvFind(node, Tags.TAG_NOTIFICATION_OPERATION);
32
+ const addrNode = tlvFind(node, Tags.TAG_NOTIFICATION_ADDRESS);
33
+ if (!seqNode || !opNode || !addrNode)
34
+ return null;
35
+ const seqNumber = decodeUnsignedInteger(seqNode.value);
36
+ const operation = decodeNotificationEvent(opNode.value);
37
+ const notificationAddress = new TextDecoder('utf-8').decode(addrNode.value);
38
+ const iccidNode = tlvFind(node, Tags.TAG_NOTIFICATION_ICCID);
39
+ const iccid = iccidNode ? decodeIccid(iccidNode.value) : undefined;
40
+ return { seqNumber, operation, notificationAddress, iccid };
41
+ }
42
+ export function encodeRetrieveNotificationsListRequest(seqNumber) {
43
+ if (seqNumber === undefined) {
44
+ // No filter - retrieve all notifications
45
+ return tlvEncode(Tags.TAG_RETRIEVE_NOTIFICATIONS_LIST_REQUEST, new Uint8Array(0));
46
+ }
47
+ const seqTlv = tlvEncode(Tags.TAG_NOTIFICATION_SEQ_NUMBER, encodeUnsignedInteger(seqNumber));
48
+ const criteria = tlvEncode(Tags.TAG_NOTIFICATION_SEARCH_CRITERIA, seqTlv);
49
+ return tlvEncode(Tags.TAG_RETRIEVE_NOTIFICATIONS_LIST_REQUEST, criteria);
50
+ }
51
+ /**
52
+ * Decode RetrieveNotificationsList response returning raw bytes for a single notification.
53
+ * Used by processNotifications to forward to SM-DP+.
54
+ */
55
+ export function decodeRetrieveNotificationsListResponse(data) {
56
+ const root = tlvDecode(data);
57
+ if (root.tag !== Tags.TAG_RETRIEVE_NOTIFICATIONS_LIST_REQUEST) {
58
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
59
+ }
60
+ // Check for error response: BF2B { 02 <error-code> }
61
+ // notificationsListResultError is an INTEGER (tag 0x02)
62
+ const errorNode = tlvFind(root, 0x02);
63
+ if (errorNode) {
64
+ const errorCode = errorNode.value[0] ?? 127;
65
+ throw new Es10Error(errorCode, `RetrieveNotificationsList failed: error=${errorCode}`);
66
+ }
67
+ // Response structure: BF2B { A0 { BF37 or 30 } }
68
+ // The A0 is the notificationList wrapper (CHOICE alternative [0])
69
+ const notificationList = tlvFind(root, 0xa0);
70
+ const searchNode = notificationList ?? root;
71
+ // The pending notification is the raw value to forward to SM-DP+
72
+ // Could be BF37 (ProfileInstallationResult) or 30 (OtherSignedNotification)
73
+ const installResult = tlvFind(searchNode, Tags.TAG_PROFILE_INSTALLATION_RESULT);
74
+ if (installResult) {
75
+ return installResult.raw ?? installResult.value;
76
+ }
77
+ const otherNotif = tlvFind(searchNode, Tags.TAG_OTHER_SIGNED_NOTIFICATION);
78
+ if (otherNotif) {
79
+ return otherNotif.raw ?? otherNotif.value;
80
+ }
81
+ throw new Es10Error(-1, 'PendingNotification not found in response');
82
+ }
83
+ /**
84
+ * Decode RetrieveNotificationsList response returning full Notification objects
85
+ * with raw bytes for sending to SM-DP+.
86
+ */
87
+ export function decodeRetrieveNotificationsListFull(data) {
88
+ const root = tlvDecode(data);
89
+ if (root.tag !== Tags.TAG_RETRIEVE_NOTIFICATIONS_LIST_REQUEST) {
90
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
91
+ }
92
+ // Check for error response: BF2B { 02 <error-code> }
93
+ // notificationsListResultError is an INTEGER (tag 0x02)
94
+ const errorNode = tlvFind(root, 0x02);
95
+ if (errorNode) {
96
+ const errorCode = errorNode.value[0] ?? 127;
97
+ throw new Es10Error(errorCode, `RetrieveNotificationsList failed: error=${errorCode}`);
98
+ }
99
+ const result = [];
100
+ // Response structure: BF2B { A0 { BF37... 30... } }
101
+ // The A0 is the notificationList wrapper (CHOICE alternative [0])
102
+ const notificationList = tlvFind(root, 0xa0);
103
+ const searchNode = notificationList ?? root;
104
+ // Find all ProfileInstallationResult (BF37) nodes - install notifications
105
+ const installResults = tlvFindAll(searchNode, Tags.TAG_PROFILE_INSTALLATION_RESULT);
106
+ for (const node of installResults) {
107
+ const notif = decodeProfileInstallationResult(node);
108
+ if (notif) {
109
+ // Raw bytes are the entire PendingNotification (BF37 node)
110
+ const raw = node.raw ?? new Uint8Array(0);
111
+ result.push({ ...notif, raw });
112
+ }
113
+ }
114
+ // Find all OtherSignedNotification (30) nodes - enable/disable/delete notifications
115
+ const otherNotifs = tlvFindAll(searchNode, Tags.TAG_OTHER_SIGNED_NOTIFICATION);
116
+ for (const node of otherNotifs) {
117
+ const notif = decodeOtherSignedNotification(node);
118
+ if (notif) {
119
+ // Raw bytes are the entire PendingNotification (30 node)
120
+ const raw = node.raw ?? new Uint8Array(0);
121
+ result.push({ ...notif, raw });
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+ /**
127
+ * Decode ProfileInstallationResult (BF37) to extract metadata and success/failure.
128
+ */
129
+ function decodeProfileInstallationResult(node) {
130
+ // ProfileInstallationResult contains ProfileInstallationResultData (BF27)
131
+ const resultData = tlvFind(node, Tags.TAG_PROFILE_INSTALLATION_RESULT_DATA);
132
+ if (!resultData)
133
+ return null;
134
+ // Extract NotificationMetadata (BF2F) from within
135
+ const metadataNode = tlvFind(resultData, Tags.TAG_NOTIFICATION_METADATA);
136
+ if (!metadataNode)
137
+ return null;
138
+ const metadata = decodeNotificationMetadata(metadataNode);
139
+ if (!metadata)
140
+ return null;
141
+ // The result structure can be:
142
+ // 1. A2 (finalResult wrapper) containing either:
143
+ // - A0 (successResult) with ICCID
144
+ // - A1 (errorResult) with error codes
145
+ // 2. A1 (errorResult) directly in BF27 (without A2 wrapper)
146
+ //
147
+ // Check for A2 first, then look inside it for A0 or A1
148
+ const finalResult = tlvFind(resultData, Tags.TAG_FINAL_RESULT);
149
+ if (finalResult) {
150
+ // Check if A2 contains A1 (error) - this takes precedence
151
+ const errorInFinal = tlvFind(finalResult, Tags.TAG_ERROR_RESULT);
152
+ if (errorInFinal) {
153
+ const subjectNode = tlvFind(errorInFinal, Tags.TAG_SUBJECT_CODE);
154
+ const reasonNode = tlvFind(errorInFinal, Tags.TAG_REASON_CODE);
155
+ return {
156
+ ...metadata,
157
+ success: false,
158
+ errorSubjectCode: subjectNode ? decodeUnsignedInteger(subjectNode.value) : undefined,
159
+ errorReasonCode: reasonNode ? decodeUnsignedInteger(reasonNode.value) : undefined,
160
+ };
161
+ }
162
+ // A2 without A1 inside = success, extract ICCID
163
+ const iccidNode = tlvFind(finalResult, Tags.TAG_NOTIFICATION_ICCID);
164
+ const iccid = iccidNode ? decodeIccid(iccidNode.value) : metadata.iccid;
165
+ return { ...metadata, iccid, success: true };
166
+ }
167
+ // Check for A1 directly in BF27 (without A2 wrapper)
168
+ const errorResult = tlvFind(resultData, Tags.TAG_ERROR_RESULT);
169
+ if (errorResult) {
170
+ const subjectNode = tlvFind(errorResult, Tags.TAG_SUBJECT_CODE);
171
+ const reasonNode = tlvFind(errorResult, Tags.TAG_REASON_CODE);
172
+ return {
173
+ ...metadata,
174
+ success: false,
175
+ errorSubjectCode: subjectNode ? decodeUnsignedInteger(subjectNode.value) : undefined,
176
+ errorReasonCode: reasonNode ? decodeUnsignedInteger(reasonNode.value) : undefined,
177
+ };
178
+ }
179
+ // No result info - assume success (shouldn't happen per spec)
180
+ return { ...metadata, success: true };
181
+ }
182
+ /**
183
+ * Decode OtherSignedNotification (SEQUENCE tag 30) for enable/disable/delete.
184
+ * These always represent completed operations (success=true).
185
+ */
186
+ function decodeOtherSignedNotification(node) {
187
+ // OtherSignedNotification contains tbsOtherNotification which is NotificationMetadata
188
+ const metadataNode = tlvFind(node, Tags.TAG_NOTIFICATION_METADATA);
189
+ if (!metadataNode)
190
+ return null;
191
+ const metadata = decodeNotificationMetadata(metadataNode);
192
+ if (!metadata)
193
+ return null;
194
+ // Enable/disable/delete notifications are always for completed operations
195
+ return { ...metadata, success: true };
196
+ }
197
+ /**
198
+ * Decode ProfileInstallationResult (BF37) from BPP loading response.
199
+ * Returns success/failure status and ICCID or error codes.
200
+ */
201
+ export function decodeBppInstallationResult(data) {
202
+ const root = tlvDecode(data);
203
+ if (root.tag !== Tags.TAG_PROFILE_INSTALLATION_RESULT) {
204
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}, expected BF37`);
205
+ }
206
+ // ProfileInstallationResult contains ProfileInstallationResultData (BF27)
207
+ const resultData = tlvFind(root, Tags.TAG_PROFILE_INSTALLATION_RESULT_DATA);
208
+ if (!resultData) {
209
+ throw new Es10Error(-1, 'ProfileInstallationResultData (BF27) not found');
210
+ }
211
+ // The result structure can be:
212
+ // 1. A2 (finalResult wrapper) containing either:
213
+ // - A1 (errorResult) with error codes
214
+ // - 5A (ICCID) indicating success
215
+ // 2. A1 (errorResult) directly in BF27
216
+ //
217
+ // Check for A2 first, then look inside it for A1 or ICCID
218
+ const finalResult = tlvFind(resultData, Tags.TAG_FINAL_RESULT);
219
+ if (finalResult) {
220
+ // Check if A2 contains A1 (error) - this takes precedence
221
+ const errorInFinal = tlvFind(finalResult, Tags.TAG_ERROR_RESULT);
222
+ if (errorInFinal) {
223
+ const subjectNode = tlvFind(errorInFinal, Tags.TAG_SUBJECT_CODE);
224
+ const reasonNode = tlvFind(errorInFinal, Tags.TAG_REASON_CODE);
225
+ return {
226
+ success: false,
227
+ errorSubjectCode: subjectNode ? decodeUnsignedInteger(subjectNode.value) : undefined,
228
+ errorReasonCode: reasonNode ? decodeUnsignedInteger(reasonNode.value) : undefined,
229
+ };
230
+ }
231
+ // A2 without A1 inside = success, extract ICCID
232
+ const iccidNode = tlvFind(finalResult, Tags.TAG_NOTIFICATION_ICCID);
233
+ const iccid = iccidNode ? decodeIccid(iccidNode.value) : undefined;
234
+ return { success: true, iccid };
235
+ }
236
+ // Check for A1 directly in BF27 (without A2 wrapper)
237
+ const errorResult = tlvFind(resultData, Tags.TAG_ERROR_RESULT);
238
+ if (errorResult) {
239
+ const subjectNode = tlvFind(errorResult, Tags.TAG_SUBJECT_CODE);
240
+ const reasonNode = tlvFind(errorResult, Tags.TAG_REASON_CODE);
241
+ return {
242
+ success: false,
243
+ errorSubjectCode: subjectNode ? decodeUnsignedInteger(subjectNode.value) : undefined,
244
+ errorReasonCode: reasonNode ? decodeUnsignedInteger(reasonNode.value) : undefined,
245
+ };
246
+ }
247
+ // No explicit result - shouldn't happen per spec
248
+ return { success: true };
249
+ }
250
+ export function encodeRemoveNotificationRequest(seqNumber) {
251
+ const seqTlv = tlvEncode(Tags.TAG_NOTIFICATION_SEQ_NUMBER, encodeUnsignedInteger(seqNumber));
252
+ return tlvEncode(Tags.TAG_REMOVE_NOTIFICATION_REQUEST, seqTlv);
253
+ }
254
+ export function decodeRemoveNotificationResponse(data) {
255
+ const root = tlvDecode(data);
256
+ if (root.tag !== Tags.TAG_REMOVE_NOTIFICATION_REQUEST) {
257
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
258
+ }
259
+ const status = tlvFind(root, Tags.TAG_DELETE_NOTIFICATION_STATUS);
260
+ if (!status) {
261
+ throw new Es10Error(-1, 'DeleteNotificationStatus not found in response');
262
+ }
263
+ return status.value[0];
264
+ }
265
+ function decodeNotificationEvent(value) {
266
+ // NotificationEvent is a BIT STRING — first byte is number of unused bits, rest is the bitmap
267
+ if (value.length < 2)
268
+ return NotificationEvent.Install;
269
+ return value[1];
270
+ }
271
+ function encodeUnsignedInteger(value) {
272
+ if (value < 0x80)
273
+ return new Uint8Array([value]);
274
+ if (value < 0x100)
275
+ return new Uint8Array([0x00, value]);
276
+ if (value < 0x8000)
277
+ return new Uint8Array([(value >> 8) & 0xff, value & 0xff]);
278
+ if (value < 0x10000)
279
+ return new Uint8Array([0x00, (value >> 8) & 0xff, value & 0xff]);
280
+ return new Uint8Array([
281
+ 0x00,
282
+ (value >> 16) & 0xff,
283
+ (value >> 8) & 0xff,
284
+ value & 0xff,
285
+ ]);
286
+ }
287
+ function decodeUnsignedInteger(value) {
288
+ let result = 0;
289
+ for (let i = 0; i < value.length; i++) {
290
+ result = (result << 8) | value[i];
291
+ }
292
+ return result;
293
+ }
294
+ //# sourceMappingURL=es10b-notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es10b-notifications.js","sourceRoot":"","sources":["../../src/es10/es10b-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAa,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAA0G,MAAM,aAAa,CAAC;AACxJ,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAYlC,MAAM,UAAU,6BAA6B;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAAgB;IAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACxE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,sCAAsC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAa;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAElD,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,mBAAmB,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,SAAkB;IACvE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,yCAAyC;QACzC,OAAO,SAAS,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,2BAA2B,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC,IAAI,CAAC,uCAAuC,EAAE,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uCAAuC,CAAC,IAAgB;IACtE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,uCAAuC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,qDAAqD;IACrD,wDAAwD;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC5C,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,2CAA2C,SAAS,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,iDAAiD;IACjD,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,gBAAgB,IAAI,IAAI,CAAC;IAE5C,iEAAiE;IACjE,4EAA4E;IAC5E,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAChF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC;IAClD,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC3E,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mCAAmC,CAAC,IAAgB;IAClE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,uCAAuC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,qDAAqD;IACrD,wDAAwD;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC5C,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,2CAA2C,SAAS,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,oDAAoD;IACpD,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,gBAAgB,IAAI,IAAI,CAAC;IAE5C,0EAA0E;IAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACpF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,2DAA2D;YAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC/E,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,yDAAyD;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,+BAA+B,CAAC,IAAa;IACpD,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,kDAAkD;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzE,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,+BAA+B;IAC/B,iDAAiD;IACjD,qCAAqC;IACrC,yCAAyC;IACzC,4DAA4D;IAC5D,EAAE;IACF,uDAAuD;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,IAAI,WAAW,EAAE,CAAC;QAChB,0DAA0D;QAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC/D,OAAO;gBACL,GAAG,QAAQ;gBACX,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBACpF,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;aAClF,CAAC;QACJ,CAAC;QACD,gDAAgD;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,OAAO;YACL,GAAG,QAAQ;YACX,OAAO,EAAE,KAAK;YACd,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACpF,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SAClF,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,6BAA6B,CAAC,IAAa;IAClD,sFAAsF;IACtF,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACnE,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,0EAA0E;IAC1E,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAgB;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAChG,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,gDAAgD,CAAC,CAAC;IAC5E,CAAC;IAED,+BAA+B;IAC/B,iDAAiD;IACjD,yCAAyC;IACzC,qCAAqC;IACrC,uCAAuC;IACvC,EAAE;IACF,0DAA0D;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,IAAI,WAAW,EAAE,CAAC;QAChB,0DAA0D;QAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC/D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBACpF,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;aAClF,CAAC;QACJ,CAAC;QACD,gDAAgD;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACpF,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SAClF,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,SAAiB;IAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,2BAA2B,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7F,OAAO,SAAS,CAAC,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,IAAgB;IAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,gDAAgD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAA6B,CAAC;AACrD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAiB;IAChD,8FAA8F;IAC9F,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC,OAAO,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAsB,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,IAAI,KAAK,GAAG,MAAM;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACtF,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI;QACJ,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI;QACpB,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;QACnB,KAAK,GAAG,IAAI;KACb,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAiB;IAC9C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { CancelSessionReason } from '../types.js';
2
+ export interface AuthenticateServerParams {
3
+ serverSigned1: Uint8Array;
4
+ serverSignature1: Uint8Array;
5
+ euiccCiPKIdToBeUsed: Uint8Array;
6
+ serverCertificate: Uint8Array;
7
+ matchingId?: string;
8
+ }
9
+ export interface PrepareDownloadParams {
10
+ smdpSigned2: Uint8Array;
11
+ smdpSignature2: Uint8Array;
12
+ smdpCertificate: Uint8Array;
13
+ hashCc?: Uint8Array;
14
+ }
15
+ export interface AuthenticateServerDecodedResponse {
16
+ raw: Uint8Array;
17
+ }
18
+ export interface PrepareDownloadDecodedResponse {
19
+ raw: Uint8Array;
20
+ }
21
+ export declare function encodeGetEuiccChallengeRequest(): Uint8Array;
22
+ export declare function decodeGetEuiccChallengeResponse(data: Uint8Array): Uint8Array;
23
+ export declare function encodeGetEuiccInfo1Request(): Uint8Array;
24
+ export declare function encodeAuthenticateServerRequest(params: AuthenticateServerParams): Uint8Array;
25
+ export declare function decodeAuthenticateServerResponse(data: Uint8Array): AuthenticateServerDecodedResponse;
26
+ export declare function encodePrepareDownloadRequest(params: PrepareDownloadParams): Uint8Array;
27
+ export declare function decodePrepareDownloadResponse(data: Uint8Array): PrepareDownloadDecodedResponse;
28
+ /**
29
+ * Hash a confirmation code per SGP.22 Section 3.1.3:
30
+ * hashCc = SHA-256(SHA-256(confirmationCodeUtf8) || transactionIdHexBytes)
31
+ */
32
+ export declare function hashConfirmationCode(code: string, transactionId: string): Promise<Uint8Array>;
33
+ export declare function encodeCancelSessionRequest(transactionId: Uint8Array, reason: CancelSessionReason): Uint8Array;
34
+ //# sourceMappingURL=es10b.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es10b.d.ts","sourceRoot":"","sources":["../../src/es10/es10b.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,UAAU,CAAC;IAC1B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,mBAAmB,EAAE,UAAU,CAAC;IAChC,iBAAiB,EAAE,UAAU,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,UAAU,CAAC;IAC3B,eAAe,EAAE,UAAU,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,wBAAgB,8BAA8B,IAAI,UAAU,CAE3D;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAU5E;AAED,wBAAgB,0BAA0B,IAAI,UAAU,CAEvD;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,wBAAwB,GAAG,UAAU,CA6B5F;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,UAAU,GAAG,iCAAiC,CAmBpG;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU,CActF;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,8BAA8B,CAiB9F;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CASnG;AAED,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,GAAG,UAAU,CAI7G"}
@@ -0,0 +1,108 @@
1
+ import { Es10Error } from '../errors.js';
2
+ import { tlvEncode, tlvDecode, tlvFind, tlvConcat } from '../tlv.js';
3
+ import * as Tags from './tags.js';
4
+ export function encodeGetEuiccChallengeRequest() {
5
+ return tlvEncode(Tags.TAG_GET_EUICC_CHALLENGE_REQUEST, new Uint8Array(0));
6
+ }
7
+ export function decodeGetEuiccChallengeResponse(data) {
8
+ const root = tlvDecode(data);
9
+ if (root.tag !== Tags.TAG_GET_EUICC_CHALLENGE_REQUEST) {
10
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
11
+ }
12
+ const challenge = tlvFind(root, Tags.TAG_EUICC_CHALLENGE);
13
+ if (!challenge) {
14
+ throw new Es10Error(-1, 'EuiccChallenge not found in response');
15
+ }
16
+ return challenge.value;
17
+ }
18
+ export function encodeGetEuiccInfo1Request() {
19
+ return tlvEncode(Tags.TAG_GET_EUICC_INFO1_REQUEST, new Uint8Array(0));
20
+ }
21
+ export function encodeAuthenticateServerRequest(params) {
22
+ // Build ctxParams1 with matchingId and deviceInfo
23
+ const ctxParts = [];
24
+ if (params.matchingId) {
25
+ ctxParts.push(tlvEncode(Tags.TAG_MATCHING_ID, new TextEncoder().encode(params.matchingId)));
26
+ }
27
+ // DeviceInfo with dummy TAC 0x88888888 and empty deviceCapabilities
28
+ // Per SGP.22, DeviceInfo ::= SEQUENCE { tac [0], deviceCapabilities [1] }
29
+ // Both fields are MANDATORY. deviceCapabilities can be empty but must be present.
30
+ const tac = tlvEncode(0x80, new Uint8Array([0x88, 0x88, 0x88, 0x88])); // [0] tac
31
+ const deviceCapabilities = tlvEncode(0xa1, new Uint8Array(0)); // [1] deviceCapabilities (empty SEQUENCE)
32
+ const deviceInfo = tlvEncode(Tags.TAG_DEVICE_INFO, tlvConcat(tac, deviceCapabilities));
33
+ ctxParts.push(deviceInfo);
34
+ const ctxParams1 = tlvEncode(Tags.TAG_CTX_PARAMS1, tlvConcat(...ctxParts));
35
+ // The request wraps: serverSigned1, serverSignature1, euiccCiPKIdToBeUsed, serverCertificate, ctxParams1
36
+ // serverSigned1, serverSignature1, euiccCiPKIdToBeUsed, serverCertificate are raw DER passed through
37
+ const content = tlvConcat(params.serverSigned1, params.serverSignature1, params.euiccCiPKIdToBeUsed, params.serverCertificate, ctxParams1);
38
+ return tlvEncode(Tags.TAG_AUTHENTICATE_SERVER_REQUEST, content);
39
+ }
40
+ export function decodeAuthenticateServerResponse(data) {
41
+ const root = tlvDecode(data);
42
+ if (root.tag !== Tags.TAG_AUTHENTICATE_SERVER_REQUEST) {
43
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
44
+ }
45
+ // Check for error (A1 tag)
46
+ const errorNode = tlvFind(root, Tags.TAG_AUTH_SERVER_RESPONSE_ERROR);
47
+ if (errorNode) {
48
+ throw new Es10Error(-1, 'AuthenticateServer failed on eUICC');
49
+ }
50
+ // Success (A0 tag) — preserve raw bytes for passthrough to SM-DP+
51
+ const okNode = tlvFind(root, Tags.TAG_AUTH_SERVER_RESPONSE_OK);
52
+ if (!okNode) {
53
+ throw new Es10Error(-1, 'Unexpected AuthenticateServer response format');
54
+ }
55
+ return { raw: root.raw ?? data };
56
+ }
57
+ export function encodePrepareDownloadRequest(params) {
58
+ // Field order per SGP.22: smdpSigned2 → smdpSignature2 → hashCc (optional) → smdpCertificate
59
+ const parts = [
60
+ params.smdpSigned2,
61
+ params.smdpSignature2,
62
+ ];
63
+ if (params.hashCc) {
64
+ parts.push(tlvEncode(Tags.TAG_HASH_CC, params.hashCc));
65
+ }
66
+ parts.push(params.smdpCertificate);
67
+ return tlvEncode(Tags.TAG_PREPARE_DOWNLOAD_REQUEST, tlvConcat(...parts));
68
+ }
69
+ export function decodePrepareDownloadResponse(data) {
70
+ const root = tlvDecode(data);
71
+ if (root.tag !== Tags.TAG_PREPARE_DOWNLOAD_REQUEST) {
72
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
73
+ }
74
+ const errorNode = tlvFind(root, Tags.TAG_PREPARE_DOWNLOAD_RESPONSE_ERROR);
75
+ if (errorNode) {
76
+ throw new Es10Error(-1, 'PrepareDownload failed on eUICC');
77
+ }
78
+ const okNode = tlvFind(root, Tags.TAG_PREPARE_DOWNLOAD_RESPONSE_OK);
79
+ if (!okNode) {
80
+ throw new Es10Error(-1, 'Unexpected PrepareDownload response format');
81
+ }
82
+ return { raw: root.raw ?? data };
83
+ }
84
+ /**
85
+ * Hash a confirmation code per SGP.22 Section 3.1.3:
86
+ * hashCc = SHA-256(SHA-256(confirmationCodeUtf8) || transactionIdHexBytes)
87
+ */
88
+ export async function hashConfirmationCode(code, transactionId) {
89
+ const codeBytes = new TextEncoder().encode(code);
90
+ const firstHash = new Uint8Array(await crypto.subtle.digest('SHA-256', codeBytes.buffer));
91
+ // transactionId is a hex string — decode to bytes
92
+ const txIdBytes = hexToBytes(transactionId);
93
+ const combined = tlvConcat(firstHash, txIdBytes);
94
+ return new Uint8Array(await crypto.subtle.digest('SHA-256', combined.buffer));
95
+ }
96
+ export function encodeCancelSessionRequest(transactionId, reason) {
97
+ const txIdTlv = tlvEncode(Tags.TAG_CANCEL_SESSION_TRANSACTION_ID, transactionId);
98
+ const reasonTlv = tlvEncode(Tags.TAG_CANCEL_SESSION_REASON, new Uint8Array([reason]));
99
+ return tlvEncode(Tags.TAG_CANCEL_SESSION_REQUEST, tlvConcat(txIdTlv, reasonTlv));
100
+ }
101
+ function hexToBytes(hex) {
102
+ const bytes = new Uint8Array(hex.length / 2);
103
+ for (let i = 0; i < hex.length; i += 2) {
104
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
105
+ }
106
+ return bytes;
107
+ }
108
+ //# sourceMappingURL=es10b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es10b.js","sourceRoot":"","sources":["../../src/es10/es10b.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type Profile, type EnableProfileResult, type DisableProfileResult, type DeleteProfileResult } from '../types.js';
2
+ export declare function encodeGetEidRequest(): Uint8Array;
3
+ export declare function decodeGetEidResponse(data: Uint8Array): string;
4
+ export declare function encodeGetProfilesInfoRequest(): Uint8Array;
5
+ export declare function decodeGetProfilesInfoResponse(data: Uint8Array): Profile[];
6
+ export declare function encodeEnableProfileRequest(iccid: string, refreshFlag?: boolean): Uint8Array;
7
+ export declare function decodeEnableProfileResponse(data: Uint8Array): EnableProfileResult;
8
+ export declare function encodeDisableProfileRequest(iccid: string, refreshFlag?: boolean): Uint8Array;
9
+ export declare function decodeDisableProfileResponse(data: Uint8Array): DisableProfileResult;
10
+ export declare function encodeDeleteProfileRequest(iccid: string): Uint8Array;
11
+ export declare function decodeDeleteProfileResponse(data: Uint8Array): DeleteProfileResult;
12
+ //# sourceMappingURL=es10c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es10c.d.ts","sourceRoot":"","sources":["../../src/es10/es10c.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAGrB,wBAAgB,mBAAmB,IAAI,UAAU,CAIhD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAa7D;AAED,wBAAgB,4BAA4B,IAAI,UAAU,CAazD;AASD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE,CA6BzE;AA0BD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,UAAU,CAKzF;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAEjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,UAAU,CAK1F;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB,CAEnF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKpE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAEjF"}
@@ -0,0 +1,133 @@
1
+ import { Es10Error } from '../errors.js';
2
+ import { tlvEncode, tlvDecode, tlvFind, tlvFindAll, tlvConcat } from '../tlv.js';
3
+ import { decodeIccid, encodeIccid } from './iccid.js';
4
+ import { ProfileState, } from '../types.js';
5
+ import * as Tags from './tags.js';
6
+ export function encodeGetEidRequest() {
7
+ // GetEuiccDataRequest (BF3E) with tag list requesting EID (5A)
8
+ const tagList = tlvEncode(Tags.TAG_TAG_LIST, new Uint8Array([Tags.TAG_EID]));
9
+ return tlvEncode(Tags.TAG_GET_EID_REQUEST, tagList);
10
+ }
11
+ export function decodeGetEidResponse(data) {
12
+ const root = tlvDecode(data);
13
+ if (root.tag !== Tags.TAG_GET_EID_REQUEST) {
14
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
15
+ }
16
+ const eid = tlvFind(root, Tags.TAG_EID);
17
+ if (!eid) {
18
+ throw new Es10Error(-1, 'EID not found in response');
19
+ }
20
+ // EID is hex-encoded bytes
21
+ return Array.from(eid.value)
22
+ .map((b) => b.toString(16).padStart(2, '0').toUpperCase())
23
+ .join('');
24
+ }
25
+ export function encodeGetProfilesInfoRequest() {
26
+ // GetProfilesInfo (BF2D) with tag list for the fields we want
27
+ const tagListValue = tlvConcat(new Uint8Array([Tags.TAG_ICCID]), new Uint8Array([Tags.TAG_ISDP_AID]), encodeTagBytes(Tags.TAG_PROFILE_STATE), new Uint8Array([Tags.TAG_PROFILE_NICKNAME]), new Uint8Array([Tags.TAG_SERVICE_PROVIDER_NAME]), new Uint8Array([Tags.TAG_PROFILE_NAME]), new Uint8Array([Tags.TAG_PROFILE_CLASS]));
28
+ const tagList = tlvEncode(Tags.TAG_TAG_LIST, tagListValue);
29
+ return tlvEncode(Tags.TAG_PROFILE_INFO_LIST_REQUEST, tagList);
30
+ }
31
+ /** Encode a multi-byte tag as raw bytes for inclusion in a tag list */
32
+ function encodeTagBytes(tag) {
33
+ if (tag <= 0xff)
34
+ return new Uint8Array([tag]);
35
+ if (tag <= 0xffff)
36
+ return new Uint8Array([(tag >> 8) & 0xff, tag & 0xff]);
37
+ return new Uint8Array([(tag >> 16) & 0xff, (tag >> 8) & 0xff, tag & 0xff]);
38
+ }
39
+ export function decodeGetProfilesInfoResponse(data) {
40
+ const root = tlvDecode(data);
41
+ if (root.tag !== Tags.TAG_PROFILE_INFO_LIST_REQUEST) {
42
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
43
+ }
44
+ // ProfileInfoListResponse is a CHOICE:
45
+ // - profileInfoListOk: SEQUENCE containing [0] profileInfoList (A0 with E3 entries)
46
+ // - profileInfoListError: INTEGER (tag 02) with error code
47
+ // Check for error response
48
+ const errorNode = tlvFind(root, 0x02);
49
+ if (errorNode) {
50
+ const errorCode = errorNode.value[0] ?? 127;
51
+ throw new Es10Error(errorCode, `GetProfilesInfo failed: error=${errorCode}`);
52
+ }
53
+ // Look for A0 wrapper (profileInfoList) first, then search directly
54
+ // Some eUICCs may return profiles directly in BF2D without A0 wrapper
55
+ const profileListNode = tlvFind(root, 0xa0);
56
+ const searchNode = profileListNode ?? root;
57
+ const profiles = [];
58
+ const profileNodes = tlvFindAll(searchNode, Tags.TAG_PROFILE_INFO);
59
+ for (const node of profileNodes) {
60
+ const profile = decodeProfileInfo(node);
61
+ if (profile)
62
+ profiles.push(profile);
63
+ }
64
+ return profiles;
65
+ }
66
+ function decodeProfileInfo(node) {
67
+ const iccidNode = tlvFind(node, Tags.TAG_ICCID);
68
+ if (!iccidNode)
69
+ return null;
70
+ const iccid = decodeIccid(iccidNode.value);
71
+ const aidNode = tlvFind(node, Tags.TAG_ISDP_AID);
72
+ const stateNode = tlvFind(node, Tags.TAG_PROFILE_STATE);
73
+ const nicknameNode = tlvFind(node, Tags.TAG_PROFILE_NICKNAME);
74
+ const spNameNode = tlvFind(node, Tags.TAG_SERVICE_PROVIDER_NAME);
75
+ const profileNameNode = tlvFind(node, Tags.TAG_PROFILE_NAME);
76
+ const classNode = tlvFind(node, Tags.TAG_PROFILE_CLASS);
77
+ return {
78
+ iccid,
79
+ isdpAid: aidNode ? toHex(aidNode.value) : undefined,
80
+ state: stateNode ? stateNode.value[0] : ProfileState.Disabled,
81
+ nickname: nicknameNode ? textDecode(nicknameNode.value) : undefined,
82
+ serviceProviderName: spNameNode ? textDecode(spNameNode.value) : undefined,
83
+ profileName: profileNameNode ? textDecode(profileNameNode.value) : undefined,
84
+ profileClass: classNode ? classNode.value[0] : undefined,
85
+ };
86
+ }
87
+ export function encodeEnableProfileRequest(iccid, refreshFlag = false) {
88
+ const iccidTlv = tlvEncode(Tags.TAG_ICCID, encodeIccid(iccid));
89
+ const identifier = tlvEncode(Tags.TAG_PROFILE_IDENTIFIER, iccidTlv);
90
+ const refresh = tlvEncode(Tags.TAG_REFRESH_FLAG, new Uint8Array([refreshFlag ? 0x01 : 0x00]));
91
+ return tlvEncode(Tags.TAG_ENABLE_PROFILE_REQUEST, tlvConcat(identifier, refresh));
92
+ }
93
+ export function decodeEnableProfileResponse(data) {
94
+ return decodeResultResponse(data, Tags.TAG_ENABLE_PROFILE_REQUEST);
95
+ }
96
+ export function encodeDisableProfileRequest(iccid, refreshFlag = false) {
97
+ const iccidTlv = tlvEncode(Tags.TAG_ICCID, encodeIccid(iccid));
98
+ const identifier = tlvEncode(Tags.TAG_PROFILE_IDENTIFIER, iccidTlv);
99
+ const refresh = tlvEncode(Tags.TAG_REFRESH_FLAG, new Uint8Array([refreshFlag ? 0x01 : 0x00]));
100
+ return tlvEncode(Tags.TAG_DISABLE_PROFILE_REQUEST, tlvConcat(identifier, refresh));
101
+ }
102
+ export function decodeDisableProfileResponse(data) {
103
+ return decodeResultResponse(data, Tags.TAG_DISABLE_PROFILE_REQUEST);
104
+ }
105
+ export function encodeDeleteProfileRequest(iccid) {
106
+ // Note: DeleteProfile does NOT use the A0 wrapper (unlike Enable/Disable)
107
+ // Per SGP.22, ICCID (5A) goes directly inside BF33
108
+ const iccidTlv = tlvEncode(Tags.TAG_ICCID, encodeIccid(iccid));
109
+ return tlvEncode(Tags.TAG_DELETE_PROFILE_REQUEST, iccidTlv);
110
+ }
111
+ export function decodeDeleteProfileResponse(data) {
112
+ return decodeResultResponse(data, Tags.TAG_DELETE_PROFILE_REQUEST);
113
+ }
114
+ function decodeResultResponse(data, expectedTag) {
115
+ const root = tlvDecode(data);
116
+ if (root.tag !== expectedTag) {
117
+ throw new Es10Error(-1, `Unexpected response tag: 0x${root.tag.toString(16)}`);
118
+ }
119
+ const result = tlvFind(root, Tags.TAG_RESULT);
120
+ if (!result) {
121
+ throw new Es10Error(-1, 'Result code not found in response');
122
+ }
123
+ return result.value[0];
124
+ }
125
+ function toHex(bytes) {
126
+ return Array.from(bytes)
127
+ .map((b) => b.toString(16).padStart(2, '0').toUpperCase())
128
+ .join('');
129
+ }
130
+ function textDecode(bytes) {
131
+ return new TextDecoder('utf-8').decode(bytes);
132
+ }
133
+ //# sourceMappingURL=es10c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es10c.js","sourceRoot":"","sources":["../../src/es10/es10c.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAEL,YAAY,GAKb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,mBAAmB;IACjC,+DAA+D;IAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACvD,CAAC;IACD,2BAA2B;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,8DAA8D;IAC9D,MAAM,YAAY,GAAG,SAAS,CAC5B,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAChC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EACnC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACtC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAC3C,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAChD,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EACvC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CACzC,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC3D,OAAO,SAAS,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,uEAAuE;AACvE,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,GAAG,IAAI,MAAM;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAgB;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,uCAAuC;IACvC,oFAAoF;IACpF,2DAA2D;IAE3D,2BAA2B;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC5C,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,iCAAiC,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,oEAAoE;IACpE,sEAAsE;IACtE,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC;IAE3C,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa;IACtC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACnD,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ;QAC/E,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1E,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5E,YAAY,EAAE,SAAS,CAAC,CAAC,CAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC,CAAC,CAAC,SAAS;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,WAAW,GAAG,KAAK;IAC3E,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAgB;IAC1D,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAwB,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,WAAW,GAAG,KAAK;IAC5E,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,SAAS,CAAC,IAAI,CAAC,2BAA2B,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAgB;IAC3D,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAyB,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,0EAA0E;IAC1E,mDAAmD;IACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAgB;IAC1D,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAwB,CAAC;AAC5F,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAgB,EAAE,WAAmB;IACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,8BAA8B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,KAAK,CAAC,KAAiB;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACnC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * BCD nibble-swapped encoding/decoding for SIM ICCIDs.
3
+ *
4
+ * ICCID is stored as BCD with each pair of digits having their nibbles swapped.
5
+ * "89" becomes byte 0x98, "01" becomes byte 0x10, etc.
6
+ */
7
+ export declare function encodeIccid(iccid: string): Uint8Array;
8
+ export declare function decodeIccid(bytes: Uint8Array): string;
9
+ //# sourceMappingURL=iccid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iccid.d.ts","sourceRoot":"","sources":["../../src/es10/iccid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAWrD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAWrD"}