@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,31 @@
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 function encodeIccid(iccid) {
8
+ // Pad to even length with 'F' if needed
9
+ const padded = iccid.length % 2 === 1 ? iccid + 'F' : iccid;
10
+ const bytes = new Uint8Array(padded.length / 2);
11
+ for (let i = 0; i < padded.length; i += 2) {
12
+ const hi = parseInt(padded[i], 16);
13
+ const lo = parseInt(padded[i + 1], 16);
14
+ // Swap nibbles: first digit goes in low nibble, second in high
15
+ bytes[i / 2] = (lo << 4) | hi;
16
+ }
17
+ return bytes;
18
+ }
19
+ export function decodeIccid(bytes) {
20
+ let result = '';
21
+ for (let i = 0; i < bytes.length; i++) {
22
+ const lo = bytes[i] & 0x0f;
23
+ const hi = (bytes[i] >> 4) & 0x0f;
24
+ result += lo.toString(16).toUpperCase();
25
+ if (hi !== 0x0f) {
26
+ result += hi.toString(16).toUpperCase();
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=iccid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iccid.js","sourceRoot":"","sources":["../../src/es10/iccid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,wCAAwC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvC,+DAA+D;QAC/D,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAClC,MAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { encodeGetEidRequest, decodeGetEidResponse, encodeGetProfilesInfoRequest, decodeGetProfilesInfoResponse, encodeEnableProfileRequest, decodeEnableProfileResponse, encodeDisableProfileRequest, decodeDisableProfileResponse, encodeDeleteProfileRequest, decodeDeleteProfileResponse, } from './es10c.js';
2
+ export { encodeGetEuiccChallengeRequest, decodeGetEuiccChallengeResponse, encodeGetEuiccInfo1Request, encodeAuthenticateServerRequest, decodeAuthenticateServerResponse, encodePrepareDownloadRequest, decodePrepareDownloadResponse, hashConfirmationCode, encodeCancelSessionRequest, } from './es10b.js';
3
+ export type { AuthenticateServerParams, PrepareDownloadParams, AuthenticateServerDecodedResponse, PrepareDownloadDecodedResponse, } from './es10b.js';
4
+ export { encodeListNotificationRequest, decodeListNotificationResponse, encodeRetrieveNotificationsListRequest, decodeRetrieveNotificationsListResponse, decodeRetrieveNotificationsListFull, decodeBppInstallationResult, encodeRemoveNotificationRequest, decodeRemoveNotificationResponse, } from './es10b-notifications.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/es10/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,4BAA4B,EAC5B,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,sCAAsC,EACtC,uCAAuC,EACvC,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { encodeGetEidRequest, decodeGetEidResponse, encodeGetProfilesInfoRequest, decodeGetProfilesInfoResponse, encodeEnableProfileRequest, decodeEnableProfileResponse, encodeDisableProfileRequest, decodeDisableProfileResponse, encodeDeleteProfileRequest, decodeDeleteProfileResponse, } from './es10c.js';
2
+ export { encodeGetEuiccChallengeRequest, decodeGetEuiccChallengeResponse, encodeGetEuiccInfo1Request, encodeAuthenticateServerRequest, decodeAuthenticateServerResponse, encodePrepareDownloadRequest, decodePrepareDownloadResponse, hashConfirmationCode, encodeCancelSessionRequest, } from './es10b.js';
3
+ export { encodeListNotificationRequest, decodeListNotificationResponse, encodeRetrieveNotificationsListRequest, decodeRetrieveNotificationsListResponse, decodeRetrieveNotificationsListFull, decodeBppInstallationResult, encodeRemoveNotificationRequest, decodeRemoveNotificationResponse, } from './es10b-notifications.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/es10/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,4BAA4B,EAC5B,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AASpB,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,sCAAsC,EACtC,uCAAuC,EACvC,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,55 @@
1
+ export declare const TAG_PROFILE_INFO_LIST_REQUEST = 48941;
2
+ export declare const TAG_PROFILE_INFO = 227;
3
+ export declare const TAG_ICCID = 90;
4
+ export declare const TAG_ISDP_AID = 79;
5
+ export declare const TAG_PROFILE_STATE = 40816;
6
+ export declare const TAG_PROFILE_NICKNAME = 144;
7
+ export declare const TAG_SERVICE_PROVIDER_NAME = 145;
8
+ export declare const TAG_PROFILE_NAME = 146;
9
+ export declare const TAG_PROFILE_CLASS = 149;
10
+ export declare const TAG_TAG_LIST = 92;
11
+ export declare const TAG_GET_EID_REQUEST = 48958;
12
+ export declare const TAG_EID = 90;
13
+ export declare const TAG_ENABLE_PROFILE_REQUEST = 48945;
14
+ export declare const TAG_DISABLE_PROFILE_REQUEST = 48946;
15
+ export declare const TAG_DELETE_PROFILE_REQUEST = 48947;
16
+ export declare const TAG_PROFILE_IDENTIFIER = 160;
17
+ export declare const TAG_REFRESH_FLAG = 129;
18
+ export declare const TAG_RESULT = 128;
19
+ export declare const TAG_GET_EUICC_CHALLENGE_REQUEST = 48942;
20
+ export declare const TAG_EUICC_CHALLENGE = 128;
21
+ export declare const TAG_GET_EUICC_INFO1_REQUEST = 48928;
22
+ export declare const TAG_AUTHENTICATE_SERVER_REQUEST = 48952;
23
+ export declare const TAG_CTX_PARAMS1 = 160;
24
+ export declare const TAG_MATCHING_ID = 128;
25
+ export declare const TAG_DEVICE_INFO = 161;
26
+ export declare const TAG_PREPARE_DOWNLOAD_REQUEST = 48929;
27
+ export declare const TAG_HASH_CC = 4;
28
+ export declare const TAG_EUICC_SIGNATURE1 = 24375;
29
+ export declare const TAG_CANCEL_SESSION_REQUEST = 48961;
30
+ export declare const TAG_CANCEL_SESSION_REASON = 128;
31
+ export declare const TAG_CANCEL_SESSION_TRANSACTION_ID = 128;
32
+ export declare const TAG_BOUND_PROFILE_PACKAGE = 48950;
33
+ export declare const TAG_LIST_NOTIFICATION_REQUEST = 48936;
34
+ export declare const TAG_NOTIFICATION_METADATA_LIST = 160;
35
+ export declare const TAG_NOTIFICATION_METADATA = 48943;
36
+ export declare const TAG_NOTIFICATION_SEQ_NUMBER = 128;
37
+ export declare const TAG_NOTIFICATION_OPERATION = 129;
38
+ export declare const TAG_NOTIFICATION_ADDRESS = 12;
39
+ export declare const TAG_NOTIFICATION_ICCID = 90;
40
+ export declare const TAG_RETRIEVE_NOTIFICATIONS_LIST_REQUEST = 48939;
41
+ export declare const TAG_NOTIFICATION_SEARCH_CRITERIA = 160;
42
+ export declare const TAG_REMOVE_NOTIFICATION_REQUEST = 48944;
43
+ export declare const TAG_DELETE_NOTIFICATION_STATUS = 128;
44
+ export declare const TAG_PROFILE_INSTALLATION_RESULT = 48951;
45
+ export declare const TAG_PROFILE_INSTALLATION_RESULT_DATA = 48935;
46
+ export declare const TAG_FINAL_RESULT = 162;
47
+ export declare const TAG_ERROR_RESULT = 161;
48
+ export declare const TAG_SUBJECT_CODE = 128;
49
+ export declare const TAG_REASON_CODE = 129;
50
+ export declare const TAG_OTHER_SIGNED_NOTIFICATION = 48;
51
+ export declare const TAG_AUTH_SERVER_RESPONSE_OK = 160;
52
+ export declare const TAG_AUTH_SERVER_RESPONSE_ERROR = 161;
53
+ export declare const TAG_PREPARE_DOWNLOAD_RESPONSE_OK = 160;
54
+ export declare const TAG_PREPARE_DOWNLOAD_RESPONSE_ERROR = 161;
55
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/es10/tags.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,SAAS,KAAO,CAAC;AAC9B,eAAO,MAAM,YAAY,KAAO,CAAC;AACjC,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,MAAO,CAAC;AACzC,eAAO,MAAM,yBAAyB,MAAO,CAAC;AAC9C,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,iBAAiB,MAAO,CAAC;AACtC,eAAO,MAAM,YAAY,KAAO,CAAC;AACjC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,OAAO,KAAO,CAAC;AAC5B,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,sBAAsB,MAAO,CAAC;AAC3C,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,UAAU,MAAO,CAAC;AAG/B,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,mBAAmB,MAAO,CAAC;AACxC,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,eAAe,MAAO,CAAC;AACpC,eAAO,MAAM,eAAe,MAAO,CAAC;AACpC,eAAO,MAAM,eAAe,MAAO,CAAC;AACpC,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,eAAO,MAAM,WAAW,IAAO,CAAC;AAChC,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,yBAAyB,MAAO,CAAC;AAC9C,eAAO,MAAM,iCAAiC,MAAO,CAAC;AAGtD,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAGhD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,8BAA8B,MAAO,CAAC;AACnD,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,2BAA2B,MAAO,CAAC;AAChD,eAAO,MAAM,0BAA0B,MAAO,CAAC;AAC/C,eAAO,MAAM,wBAAwB,KAAO,CAAC;AAC7C,eAAO,MAAM,sBAAsB,KAAO,CAAC;AAC3C,eAAO,MAAM,uCAAuC,QAAS,CAAC;AAC9D,eAAO,MAAM,gCAAgC,MAAO,CAAC;AACrD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,8BAA8B,MAAO,CAAC;AAGnD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAC3D,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,eAAe,MAAO,CAAC;AAGpC,eAAO,MAAM,6BAA6B,KAAO,CAAC;AAGlD,eAAO,MAAM,2BAA2B,MAAO,CAAC;AAChD,eAAO,MAAM,8BAA8B,MAAO,CAAC;AAGnD,eAAO,MAAM,gCAAgC,MAAO,CAAC;AACrD,eAAO,MAAM,mCAAmC,MAAO,CAAC"}
@@ -0,0 +1,63 @@
1
+ // ES10c - Profile Management
2
+ export const TAG_PROFILE_INFO_LIST_REQUEST = 0xbf2d;
3
+ export const TAG_PROFILE_INFO = 0xe3;
4
+ export const TAG_ICCID = 0x5a;
5
+ export const TAG_ISDP_AID = 0x4f;
6
+ export const TAG_PROFILE_STATE = 0x9f70;
7
+ export const TAG_PROFILE_NICKNAME = 0x90;
8
+ export const TAG_SERVICE_PROVIDER_NAME = 0x91;
9
+ export const TAG_PROFILE_NAME = 0x92;
10
+ export const TAG_PROFILE_CLASS = 0x95;
11
+ export const TAG_TAG_LIST = 0x5c;
12
+ export const TAG_GET_EID_REQUEST = 0xbf3e;
13
+ export const TAG_EID = 0x5a;
14
+ export const TAG_ENABLE_PROFILE_REQUEST = 0xbf31;
15
+ export const TAG_DISABLE_PROFILE_REQUEST = 0xbf32;
16
+ export const TAG_DELETE_PROFILE_REQUEST = 0xbf33;
17
+ export const TAG_PROFILE_IDENTIFIER = 0xa0;
18
+ export const TAG_REFRESH_FLAG = 0x81;
19
+ export const TAG_RESULT = 0x80;
20
+ // ES10b - Profile Download
21
+ export const TAG_GET_EUICC_CHALLENGE_REQUEST = 0xbf2e;
22
+ export const TAG_EUICC_CHALLENGE = 0x80;
23
+ export const TAG_GET_EUICC_INFO1_REQUEST = 0xbf20;
24
+ export const TAG_AUTHENTICATE_SERVER_REQUEST = 0xbf38;
25
+ export const TAG_CTX_PARAMS1 = 0xa0;
26
+ export const TAG_MATCHING_ID = 0x80;
27
+ export const TAG_DEVICE_INFO = 0xa1;
28
+ export const TAG_PREPARE_DOWNLOAD_REQUEST = 0xbf21;
29
+ export const TAG_HASH_CC = 0x04;
30
+ export const TAG_EUICC_SIGNATURE1 = 0x5f37;
31
+ export const TAG_CANCEL_SESSION_REQUEST = 0xbf41;
32
+ export const TAG_CANCEL_SESSION_REASON = 0x80;
33
+ export const TAG_CANCEL_SESSION_TRANSACTION_ID = 0x80;
34
+ // ES10b - BPP Loading
35
+ export const TAG_BOUND_PROFILE_PACKAGE = 0xbf36;
36
+ // ES10b - Notifications
37
+ export const TAG_LIST_NOTIFICATION_REQUEST = 0xbf28;
38
+ export const TAG_NOTIFICATION_METADATA_LIST = 0xa0;
39
+ export const TAG_NOTIFICATION_METADATA = 0xbf2f;
40
+ export const TAG_NOTIFICATION_SEQ_NUMBER = 0x80;
41
+ export const TAG_NOTIFICATION_OPERATION = 0x81;
42
+ export const TAG_NOTIFICATION_ADDRESS = 0x0c;
43
+ export const TAG_NOTIFICATION_ICCID = 0x5a;
44
+ export const TAG_RETRIEVE_NOTIFICATIONS_LIST_REQUEST = 0xbf2b;
45
+ export const TAG_NOTIFICATION_SEARCH_CRITERIA = 0xa0;
46
+ export const TAG_REMOVE_NOTIFICATION_REQUEST = 0xbf30;
47
+ export const TAG_DELETE_NOTIFICATION_STATUS = 0x80;
48
+ // ES10b - ProfileInstallationResult (in notifications and BPP response)
49
+ export const TAG_PROFILE_INSTALLATION_RESULT = 0xbf37;
50
+ export const TAG_PROFILE_INSTALLATION_RESULT_DATA = 0xbf27;
51
+ export const TAG_FINAL_RESULT = 0xa2; // success - contains ICCID
52
+ export const TAG_ERROR_RESULT = 0xa1; // failure - contains subjectCode + reasonCode
53
+ export const TAG_SUBJECT_CODE = 0x80;
54
+ export const TAG_REASON_CODE = 0x81;
55
+ // ES10b - OtherSignedNotification (SEQUENCE tag)
56
+ export const TAG_OTHER_SIGNED_NOTIFICATION = 0x30;
57
+ // ES10b - AuthenticateServer response
58
+ export const TAG_AUTH_SERVER_RESPONSE_OK = 0xa0;
59
+ export const TAG_AUTH_SERVER_RESPONSE_ERROR = 0xa1;
60
+ // ES10b - PrepareDownload response
61
+ export const TAG_PREPARE_DOWNLOAD_RESPONSE_OK = 0xa0;
62
+ export const TAG_PREPARE_DOWNLOAD_RESPONSE_ERROR = 0xa1;
63
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/es10/tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { ServerAdapter } from './types.js';
2
+ export interface InitiateAuthParams {
3
+ euiccChallenge: Uint8Array;
4
+ euiccInfo1: Uint8Array;
5
+ }
6
+ export interface InitiateAuthResponse {
7
+ transactionId: string;
8
+ serverSigned1: Uint8Array;
9
+ serverSignature1: Uint8Array;
10
+ euiccCiPKIdToBeUsed: Uint8Array;
11
+ serverCertificate: Uint8Array;
12
+ }
13
+ export interface AuthenticateClientParams {
14
+ transactionId: string;
15
+ authenticateServerResponse: Uint8Array;
16
+ }
17
+ export interface AuthenticateClientResponse {
18
+ transactionId: string;
19
+ smdpSigned2: Uint8Array;
20
+ smdpSignature2: Uint8Array;
21
+ smdpCertificate: Uint8Array;
22
+ profileMetadata?: ProfileMetadata;
23
+ }
24
+ export interface ProfileMetadata {
25
+ iccid?: string;
26
+ serviceProviderName?: string;
27
+ profileName?: string;
28
+ }
29
+ export interface GetBppParams {
30
+ transactionId: string;
31
+ prepareDownloadResponse: Uint8Array;
32
+ }
33
+ export interface GetBppResponse {
34
+ transactionId: string;
35
+ boundProfilePackage: Uint8Array;
36
+ }
37
+ export declare class Es9PlusClient {
38
+ private server;
39
+ constructor(server: ServerAdapter);
40
+ initiateAuthentication(smdpAddress: string, params: InitiateAuthParams): Promise<InitiateAuthResponse>;
41
+ authenticateClient(smdpAddress: string, params: AuthenticateClientParams): Promise<AuthenticateClientResponse>;
42
+ getBoundProfilePackage(smdpAddress: string, params: GetBppParams): Promise<GetBppResponse>;
43
+ handleNotification(notificationAddress: string, pendingNotification: Uint8Array): Promise<void>;
44
+ cancelSession(smdpAddress: string, transactionId: string, cancelSessionResponse: Uint8Array): Promise<void>;
45
+ private sendRequest;
46
+ private expectTag;
47
+ private getFirstChild;
48
+ private expectChildren;
49
+ private parseProfileMetadata;
50
+ private makeError;
51
+ }
52
+ //# sourceMappingURL=es9plus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es9plus.d.ts","sourceRoot":"","sources":["../src/es9plus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAgDhD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,UAAU,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,UAAU,CAAC;IAC1B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,mBAAmB,EAAE,UAAU,CAAC;IAChC,iBAAiB,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B,EAAE,UAAU,CAAC;CACxC;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,UAAU,CAAC;IAC3B,eAAe,EAAE,UAAU,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,UAAU,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,UAAU,CAAC;CACjC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAI3B,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA6BtG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA4C9G,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAyB1F,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/F,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAWnG,WAAW;IA6BzB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,SAAS;CAUlB"}
@@ -0,0 +1,227 @@
1
+ import { Es9PlusError } from './errors.js';
2
+ import { tlvEncode, tlvDecode, tlvConcat } from './tlv.js';
3
+ import { decodeIccid } from './es10/iccid.js';
4
+ // ES9+ operation tags (SGP.22 ASN.1)
5
+ const TAG_REMOTE_PROFILE_PROVISIONING = 0xa2; // [2] RemoteProfileProvisioningRequest/Response wrapper (SGP.22 6.6.1)
6
+ const TAG_INITIATE_AUTH = 0xbf39; // [57] InitiateAuthenticationRequest/Response
7
+ const TAG_GET_BPP = 0xbf3a; // [58] GetBoundProfilePackageRequest/Response
8
+ const TAG_AUTHENTICATE_CLIENT = 0xbf3b; // [59] AuthenticateClientRequest/Response
9
+ const TAG_HANDLE_NOTIFICATION = 0xbf3d; // [61] HandleNotification
10
+ const TAG_CANCEL_SESSION = 0xbf41; // [65] CancelSessionRequestEs9/Response
11
+ // Common ASN.1 tags
12
+ const TAG_OCTET_STRING = 0x04;
13
+ // ES9+ CHOICE response tags (AUTOMATIC TAGS → implicit context tags)
14
+ // Success variants are context [0], error INTEGER is context [1]
15
+ const TAG_RESPONSE_OK = 0xa0; // [0] IMPLICIT SEQUENCE (constructed)
16
+ const TAG_RESPONSE_ERROR = 0x81; // [1] IMPLICIT INTEGER (primitive)
17
+ // ES9+ error code names (SGP.22 Section 6.5.2)
18
+ const ES9PLUS_ERROR_NAMES = {
19
+ 1: 'eumCertificateInvalid',
20
+ 2: 'eumCertificateExpired',
21
+ 3: 'euiccCertificateInvalid',
22
+ 4: 'euiccCertificateExpired',
23
+ 5: 'euiccSignatureInvalid',
24
+ 6: 'matchingIdRefused',
25
+ 7: 'eidMismatch',
26
+ 8: 'noEligibleProfile',
27
+ 9: 'ciPKUnknown',
28
+ 10: 'invalidTransactionId',
29
+ 11: 'insufficientMemory',
30
+ 12: 'ciPKMismatch',
31
+ 127: 'undefinedError',
32
+ };
33
+ // Context tags for IMPLICIT fields in ES9+ SEQUENCE members
34
+ const TAG_TRANSACTION_ID = 0x80; // [0] TransactionId (OCTET STRING)
35
+ const TAG_EUICC_CHALLENGE = 0x81; // [1] Octet16
36
+ const TAG_SMDP_ADDRESS = 0x83; // [3] UTF8String
37
+ // Tags inside StoreMetadataRequest (profileMetadata)
38
+ const TAG_ICCID = 0x5a; // [APPLICATION 26] ICCID
39
+ const TAG_PROFILE_METADATA = 0xbf25; // [37] StoreMetadataRequest
40
+ const TAG_SERVICE_PROVIDER_NAME = 0x91; // [17] UTF8String
41
+ const TAG_PROFILE_NAME = 0x92; // [18] UTF8String
42
+ export class Es9PlusClient {
43
+ server;
44
+ constructor(server) {
45
+ this.server = server;
46
+ }
47
+ async initiateAuthentication(smdpAddress, params) {
48
+ const body = tlvConcat(tlvEncode(TAG_EUICC_CHALLENGE, params.euiccChallenge), tlvEncode(TAG_SMDP_ADDRESS, new TextEncoder().encode(smdpAddress)), params.euiccInfo1);
49
+ const requestData = tlvEncode(TAG_INITIATE_AUTH, body);
50
+ const responseData = await this.sendRequest(smdpAddress, 'initiateAuthentication', requestData);
51
+ const outer = tlvDecode(responseData);
52
+ this.expectTag(outer, TAG_INITIATE_AUTH, 'initiateAuthentication');
53
+ const inner = this.getFirstChild(outer, 'initiateAuthentication');
54
+ if (inner.tag === TAG_RESPONSE_ERROR) {
55
+ throw this.makeError('initiateAuthentication', inner.value);
56
+ }
57
+ // Success SEQUENCE: [0]txId, ServerSigned1, 5F37 sig, 04 ciPKId, Certificate
58
+ const children = this.expectChildren(inner, 5, 'initiateAuthentication');
59
+ return {
60
+ transactionId: bytesToHex(children[0].value),
61
+ serverSigned1: children[1].raw,
62
+ serverSignature1: children[2].raw,
63
+ euiccCiPKIdToBeUsed: children[3].raw,
64
+ serverCertificate: children[4].raw,
65
+ };
66
+ }
67
+ async authenticateClient(smdpAddress, params) {
68
+ const body = tlvConcat(tlvEncode(TAG_TRANSACTION_ID, hexToBytes(params.transactionId)), params.authenticateServerResponse);
69
+ const requestData = tlvEncode(TAG_AUTHENTICATE_CLIENT, body);
70
+ const responseData = await this.sendRequest(smdpAddress, 'authenticateClient', requestData);
71
+ const outer = tlvDecode(responseData);
72
+ this.expectTag(outer, TAG_AUTHENTICATE_CLIENT, 'authenticateClient');
73
+ const inner = this.getFirstChild(outer, 'authenticateClient');
74
+ if (inner.tag === TAG_RESPONSE_ERROR) {
75
+ throw this.makeError('authenticateClient', inner.value);
76
+ }
77
+ // Success SEQUENCE: [0]txId, [37]profileMetadata?, SmdpSigned2, 5F37 sig, Certificate
78
+ const children = inner.children;
79
+ if (!children || children.length < 4) {
80
+ throw new Es9PlusError({ statusCode: 200, message: 'Incomplete authenticateClient response' });
81
+ }
82
+ let idx = 0;
83
+ const txId = bytesToHex(children[idx++].value);
84
+ let profileMetadata;
85
+ if (idx < children.length && children[idx].tag === TAG_PROFILE_METADATA) {
86
+ profileMetadata = this.parseProfileMetadata(children[idx]);
87
+ idx++;
88
+ }
89
+ if (idx + 3 > children.length) {
90
+ throw new Es9PlusError({ statusCode: 200, message: 'Incomplete authenticateClient response' });
91
+ }
92
+ return {
93
+ transactionId: txId,
94
+ smdpSigned2: children[idx].raw,
95
+ smdpSignature2: children[idx + 1].raw,
96
+ smdpCertificate: children[idx + 2].raw,
97
+ profileMetadata,
98
+ };
99
+ }
100
+ async getBoundProfilePackage(smdpAddress, params) {
101
+ const body = tlvConcat(tlvEncode(TAG_TRANSACTION_ID, hexToBytes(params.transactionId)), params.prepareDownloadResponse);
102
+ const requestData = tlvEncode(TAG_GET_BPP, body);
103
+ const responseData = await this.sendRequest(smdpAddress, 'getBoundProfilePackage', requestData);
104
+ const outer = tlvDecode(responseData);
105
+ this.expectTag(outer, TAG_GET_BPP, 'getBoundProfilePackage');
106
+ const inner = this.getFirstChild(outer, 'getBoundProfilePackage');
107
+ if (inner.tag === TAG_RESPONSE_ERROR) {
108
+ throw this.makeError('getBoundProfilePackage', inner.value);
109
+ }
110
+ // Success SEQUENCE: [0]txId, BF36{bpp}
111
+ const children = this.expectChildren(inner, 2, 'getBoundProfilePackage');
112
+ return {
113
+ transactionId: bytesToHex(children[0].value),
114
+ boundProfilePackage: children[1].raw,
115
+ };
116
+ }
117
+ async handleNotification(notificationAddress, pendingNotification) {
118
+ // BF3D { pendingNotification }, wrapped in A2 per SGP.22 Section 6.6.1
119
+ const innerRequest = tlvEncode(TAG_HANDLE_NOTIFICATION, pendingNotification);
120
+ const requestData = tlvEncode(TAG_REMOTE_PROFILE_PROVISIONING, innerRequest);
121
+ const response = await this.server.sendRsp(notificationAddress, 'handleNotification', requestData);
122
+ if (response.statusCode === 204)
123
+ return;
124
+ if (response.statusCode !== 200) {
125
+ throw new Es9PlusError({
126
+ statusCode: response.statusCode,
127
+ message: `handleNotification failed: HTTP ${response.statusCode}`,
128
+ });
129
+ }
130
+ }
131
+ async cancelSession(smdpAddress, transactionId, cancelSessionResponse) {
132
+ // CancelSessionRequestEs9: transactionId has no context tag, uses native OCTET STRING
133
+ const body = tlvConcat(tlvEncode(TAG_OCTET_STRING, hexToBytes(transactionId)), cancelSessionResponse);
134
+ const requestData = tlvEncode(TAG_CANCEL_SESSION, body);
135
+ await this.sendRequest(smdpAddress, 'cancelSession', requestData);
136
+ }
137
+ async sendRequest(smdpAddress, endpoint, requestData) {
138
+ // Wrap request in RemoteProfileProvisioningRequest (A2) per SGP.22 Section 6.6.1
139
+ const wrappedRequest = tlvEncode(TAG_REMOTE_PROFILE_PROVISIONING, requestData);
140
+ const response = await this.server.sendRsp(smdpAddress, endpoint, wrappedRequest);
141
+ if (response.statusCode !== 200) {
142
+ throw new Es9PlusError({
143
+ statusCode: response.statusCode,
144
+ message: `${endpoint} failed: HTTP ${response.statusCode}`,
145
+ });
146
+ }
147
+ if (!response.responseData || response.responseData.length === 0) {
148
+ throw new Es9PlusError({
149
+ statusCode: response.statusCode,
150
+ message: `${endpoint} returned empty response`,
151
+ });
152
+ }
153
+ // Unwrap RemoteProfileProvisioningResponse (A2) wrapper per SGP.22 Section 6.6.1
154
+ const wrapper = tlvDecode(response.responseData);
155
+ this.expectTag(wrapper, TAG_REMOTE_PROFILE_PROVISIONING, endpoint);
156
+ // Return the raw bytes of the inner CHOICE element
157
+ const inner = this.getFirstChild(wrapper, endpoint);
158
+ return inner.raw;
159
+ }
160
+ expectTag(node, tag, operation) {
161
+ if (node.tag !== tag) {
162
+ throw new Es9PlusError({
163
+ statusCode: 200,
164
+ message: `${operation}: unexpected response tag 0x${node.tag.toString(16)}`,
165
+ });
166
+ }
167
+ }
168
+ getFirstChild(node, operation) {
169
+ const inner = node.children?.[0];
170
+ if (!inner) {
171
+ throw new Es9PlusError({ statusCode: 200, message: `${operation}: empty response` });
172
+ }
173
+ return inner;
174
+ }
175
+ expectChildren(node, minCount, operation) {
176
+ const children = node.children;
177
+ if (!children || children.length < minCount) {
178
+ throw new Es9PlusError({
179
+ statusCode: 200,
180
+ message: `${operation}: incomplete response (expected ${minCount} fields, got ${children?.length ?? 0})`,
181
+ });
182
+ }
183
+ return children;
184
+ }
185
+ parseProfileMetadata(node) {
186
+ const result = {};
187
+ if (!node.children)
188
+ return result;
189
+ for (const child of node.children) {
190
+ switch (child.tag) {
191
+ case TAG_ICCID:
192
+ result.iccid = decodeIccid(child.value);
193
+ break;
194
+ case TAG_SERVICE_PROVIDER_NAME:
195
+ result.serviceProviderName = new TextDecoder().decode(child.value);
196
+ break;
197
+ case TAG_PROFILE_NAME:
198
+ result.profileName = new TextDecoder().decode(child.value);
199
+ break;
200
+ }
201
+ }
202
+ return result;
203
+ }
204
+ makeError(operation, errorValue) {
205
+ const code = errorValue.length > 0 ? errorValue[0] : 0;
206
+ const name = ES9PLUS_ERROR_NAMES[code] ?? `code ${code}`;
207
+ return new Es9PlusError({
208
+ statusCode: 200,
209
+ serverStatus: 'Failed',
210
+ reasonCode: String(code),
211
+ message: `${operation} failed: ${name}`,
212
+ });
213
+ }
214
+ }
215
+ function hexToBytes(hex) {
216
+ const bytes = new Uint8Array(hex.length / 2);
217
+ for (let i = 0; i < hex.length; i += 2) {
218
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
219
+ }
220
+ return bytes;
221
+ }
222
+ function bytesToHex(bytes) {
223
+ return Array.from(bytes)
224
+ .map((b) => b.toString(16).padStart(2, '0'))
225
+ .join('');
226
+ }
227
+ //# sourceMappingURL=es9plus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es9plus.js","sourceRoot":"","sources":["../src/es9plus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GSMA RSP2 Root CI1 Certificate
3
+ *
4
+ * This is the root Certificate Issuer (CI) for the GSMA Remote SIM Provisioning
5
+ * (RSP) ecosystem. It is used to:
6
+ *
7
+ * 1. Sign TLS certificates for SM-DP+ servers (enabling secure HTTPS connections)
8
+ * 2. Sign the SGP.22 PKI chain (EUM certificates, eUICC certificates)
9
+ *
10
+ * Certificate Details:
11
+ * - Subject: O=GSM Association, CN=GSM Association - RSP2 Root CI1
12
+ * - Issuer: Self-signed (same as subject)
13
+ * - Validity: Feb 22, 2017 - Feb 21, 2052
14
+ * - Subject Key ID: 81:37:0F:51:25:D0:B1:D4:08:D4:C3:B2:32:E6:D2:5E:79:5B:EB:FB
15
+ * - Algorithm: ECDSA with SHA-256 (P-256 curve)
16
+ *
17
+ * This certificate is NOT included in standard OS/browser CA stores because it's
18
+ * a private PKI specific to the GSMA eSIM ecosystem. Embedding it here allows
19
+ * the proxy to securely connect to SM-DP+ servers without disabling TLS verification.
20
+ *
21
+ * Source: Extracted from SM-DP+ server certificate chain
22
+ * Verified against: SGP.22 v2.2.2 Annex A, GSMA CI documentation
23
+ *
24
+ * @see https://www.gsma.com/esim/
25
+ * @see SGP.22 Section 4.1.1 (Certificate Issuer)
26
+ */
27
+ export declare const GSMA_RSP2_ROOT_CI1_PEM = "-----BEGIN CERTIFICATE-----\nMIICSTCCAe+gAwIBAgIQbmhWeneg7nyF7hg5Y9+qejAKBggqhkjOPQQDAjBEMRgw\nFgYDVQQKEw9HU00gQXNzb2NpYXRpb24xKDAmBgNVBAMTH0dTTSBBc3NvY2lhdGlv\nbiAtIFJTUDIgUm9vdCBDSTEwIBcNMTcwMjIyMDAwMDAwWhgPMjA1MjAyMjEyMzU5\nNTlaMEQxGDAWBgNVBAoTD0dTTSBBc3NvY2lhdGlvbjEoMCYGA1UEAxMfR1NNIEFz\nc29jaWF0aW9uIC0gUlNQMiBSb290IENJMTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJ1qutL0HCMX52GJ6/jeibsAqZfULWj/X10p/Min6seZN+hf5llovbCNuB2n\nunLz+O8UD0SUCBUVo8e6n9X1TuajgcAwgb0wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud\nEwEB/wQFMAMBAf8wEwYDVR0RBAwwCogIKwYBBAGC6WAwFwYDVR0gAQH/BA0wCzAJ\nBgdngRIBAgEAME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9nc21hLWNybC5zeW1h\ndXRoLmNvbS9vZmZsaW5lY2EvZ3NtYS1yc3AyLXJvb3QtY2kxLmNybDAdBgNVHQ4E\nFgQUgTcPUSXQsdQI1MOyMubSXnlb6/swCgYIKoZIzj0EAwIDSAAwRQIgIJdYsOMF\nWziPK7l8nh5mu0qiRiVf25oa9ullG/OIASwCIQDqCmDrYf+GziHXBOiwJwnBaeBO\naFsiLzIEOaUuZwdNUw==\n-----END CERTIFICATE-----";
28
+ /**
29
+ * Subject Key Identifier for GSMA RSP2 Root CI1
30
+ * This can be used to verify that an eUICC trusts this CI
31
+ * (appears in euiccInfo1.euiccCiPKIdListForVerification)
32
+ */
33
+ export declare const GSMA_RSP2_ROOT_CI1_SKI = "81370F5125D0B1D408D4C3B232E6D25E795BEBFB";
34
+ /**
35
+ * Common Name of the GSMA RSP2 Root CI1
36
+ */
37
+ export declare const GSMA_RSP2_ROOT_CI1_CN = "GSM Association - RSP2 Root CI1";
38
+ //# sourceMappingURL=gsma-rsp2-root-ci1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsma-rsp2-root-ci1.d.ts","sourceRoot":"","sources":["../src/gsma-rsp2-root-ci1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,sBAAsB,y2BAcT,CAAC;AAE3B;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,6CAA6C,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,qBAAqB,oCAAoC,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * GSMA RSP2 Root CI1 Certificate
3
+ *
4
+ * This is the root Certificate Issuer (CI) for the GSMA Remote SIM Provisioning
5
+ * (RSP) ecosystem. It is used to:
6
+ *
7
+ * 1. Sign TLS certificates for SM-DP+ servers (enabling secure HTTPS connections)
8
+ * 2. Sign the SGP.22 PKI chain (EUM certificates, eUICC certificates)
9
+ *
10
+ * Certificate Details:
11
+ * - Subject: O=GSM Association, CN=GSM Association - RSP2 Root CI1
12
+ * - Issuer: Self-signed (same as subject)
13
+ * - Validity: Feb 22, 2017 - Feb 21, 2052
14
+ * - Subject Key ID: 81:37:0F:51:25:D0:B1:D4:08:D4:C3:B2:32:E6:D2:5E:79:5B:EB:FB
15
+ * - Algorithm: ECDSA with SHA-256 (P-256 curve)
16
+ *
17
+ * This certificate is NOT included in standard OS/browser CA stores because it's
18
+ * a private PKI specific to the GSMA eSIM ecosystem. Embedding it here allows
19
+ * the proxy to securely connect to SM-DP+ servers without disabling TLS verification.
20
+ *
21
+ * Source: Extracted from SM-DP+ server certificate chain
22
+ * Verified against: SGP.22 v2.2.2 Annex A, GSMA CI documentation
23
+ *
24
+ * @see https://www.gsma.com/esim/
25
+ * @see SGP.22 Section 4.1.1 (Certificate Issuer)
26
+ */
27
+ export const GSMA_RSP2_ROOT_CI1_PEM = `-----BEGIN CERTIFICATE-----
28
+ MIICSTCCAe+gAwIBAgIQbmhWeneg7nyF7hg5Y9+qejAKBggqhkjOPQQDAjBEMRgw
29
+ FgYDVQQKEw9HU00gQXNzb2NpYXRpb24xKDAmBgNVBAMTH0dTTSBBc3NvY2lhdGlv
30
+ biAtIFJTUDIgUm9vdCBDSTEwIBcNMTcwMjIyMDAwMDAwWhgPMjA1MjAyMjEyMzU5
31
+ NTlaMEQxGDAWBgNVBAoTD0dTTSBBc3NvY2lhdGlvbjEoMCYGA1UEAxMfR1NNIEFz
32
+ c29jaWF0aW9uIC0gUlNQMiBSb290IENJMTBZMBMGByqGSM49AgEGCCqGSM49AwEH
33
+ A0IABJ1qutL0HCMX52GJ6/jeibsAqZfULWj/X10p/Min6seZN+hf5llovbCNuB2n
34
+ unLz+O8UD0SUCBUVo8e6n9X1TuajgcAwgb0wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
35
+ EwEB/wQFMAMBAf8wEwYDVR0RBAwwCogIKwYBBAGC6WAwFwYDVR0gAQH/BA0wCzAJ
36
+ BgdngRIBAgEAME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9nc21hLWNybC5zeW1h
37
+ dXRoLmNvbS9vZmZsaW5lY2EvZ3NtYS1yc3AyLXJvb3QtY2kxLmNybDAdBgNVHQ4E
38
+ FgQUgTcPUSXQsdQI1MOyMubSXnlb6/swCgYIKoZIzj0EAwIDSAAwRQIgIJdYsOMF
39
+ WziPK7l8nh5mu0qiRiVf25oa9ullG/OIASwCIQDqCmDrYf+GziHXBOiwJwnBaeBO
40
+ aFsiLzIEOaUuZwdNUw==
41
+ -----END CERTIFICATE-----`;
42
+ /**
43
+ * Subject Key Identifier for GSMA RSP2 Root CI1
44
+ * This can be used to verify that an eUICC trusts this CI
45
+ * (appears in euiccInfo1.euiccCiPKIdListForVerification)
46
+ */
47
+ export const GSMA_RSP2_ROOT_CI1_SKI = '81370F5125D0B1D408D4C3B232E6D25E795BEBFB';
48
+ /**
49
+ * Common Name of the GSMA RSP2 Root CI1
50
+ */
51
+ export const GSMA_RSP2_ROOT_CI1_CN = 'GSM Association - RSP2 Root CI1';
52
+ //# sourceMappingURL=gsma-rsp2-root-ci1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsma-rsp2-root-ci1.js","sourceRoot":"","sources":["../src/gsma-rsp2-root-ci1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;0BAcZ,CAAC;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,0CAA0C,CAAC;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,iCAAiC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { EsimLpa } from './lpa.js';
2
+ export { ProfileState, ProfileClass, NotificationEvent, CancelSessionReason, EnableProfileResult, DisableProfileResult, DeleteProfileResult, BppInstallErrorCode, } from './types.js';
3
+ export type { DeviceAdapter, ServerAdapter, ServerResponse, Profile, Notification, NotificationMetadata, NotificationWithResult, SendResult, ProcessNotificationsOptions, ProcessNotificationsResult, ProfileInstallationResult, ActivationCode, DownloadStep, DownloadProgress, DownloadResult, InstallProfileOptions, EsimLpaOptions, } from './types.js';
4
+ export { EsimError, DeviceError, Es10Error, Es9PlusError, TlvError, ActivationCodeError, } from './errors.js';
5
+ export { parseActivationCode, isValidActivationCode, formatActivationCode } from './activation-code.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,OAAO,EACP,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EACzB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { EsimLpa } from './lpa.js';
2
+ export { ProfileState, ProfileClass, NotificationEvent, CancelSessionReason, EnableProfileResult, DisableProfileResult, DeleteProfileResult, BppInstallErrorCode, } from './types.js';
3
+ export { EsimError, DeviceError, Es10Error, Es9PlusError, TlvError, ActivationCodeError, } from './errors.js';
4
+ export { parseActivationCode, isValidActivationCode, formatActivationCode } from './activation-code.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAsBpB,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/lpa.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { type Profile, type ProcessNotificationsOptions, type ProcessNotificationsResult, type DownloadResult, type InstallProfileOptions, type EsimLpaOptions } from './types.js';
2
+ export declare class EsimLpa {
3
+ private apdu;
4
+ private es9plus;
5
+ constructor(options: EsimLpaOptions);
6
+ getEid(): Promise<string>;
7
+ listProfiles(): Promise<Profile[]>;
8
+ enableProfile(iccid: string, refreshFlag?: boolean): Promise<void>;
9
+ disableProfile(iccid: string, refreshFlag?: boolean): Promise<void>;
10
+ deleteProfile(iccid: string): Promise<void>;
11
+ installProfile(options: InstallProfileOptions): Promise<DownloadResult>;
12
+ processNotifications(options?: ProcessNotificationsOptions): Promise<ProcessNotificationsResult>;
13
+ private cancelSessionBestEffort;
14
+ }
15
+ //# sourceMappingURL=lpa.d.ts.map