@metamask/profile-sync-controller 28.3.0 → 30.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 (231) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/LICENSE +1 -0
  3. package/dist/controllers/authentication/AuthenticationController-method-action-types.cjs.map +1 -1
  4. package/dist/controllers/authentication/AuthenticationController-method-action-types.d.cts.map +1 -1
  5. package/dist/controllers/authentication/AuthenticationController-method-action-types.d.mts.map +1 -1
  6. package/dist/controllers/authentication/AuthenticationController-method-action-types.mjs.map +1 -1
  7. package/dist/controllers/authentication/AuthenticationController.cjs +236 -75
  8. package/dist/controllers/authentication/AuthenticationController.cjs.map +1 -1
  9. package/dist/controllers/authentication/AuthenticationController.d.cts +22 -3
  10. package/dist/controllers/authentication/AuthenticationController.d.cts.map +1 -1
  11. package/dist/controllers/authentication/AuthenticationController.d.mts +22 -3
  12. package/dist/controllers/authentication/AuthenticationController.d.mts.map +1 -1
  13. package/dist/controllers/authentication/AuthenticationController.mjs +231 -70
  14. package/dist/controllers/authentication/AuthenticationController.mjs.map +1 -1
  15. package/dist/controllers/authentication/index.cjs +3 -3
  16. package/dist/controllers/authentication/index.cjs.map +1 -1
  17. package/dist/controllers/authentication/index.d.cts.map +1 -1
  18. package/dist/controllers/authentication/index.d.mts.map +1 -1
  19. package/dist/controllers/authentication/index.mjs.map +1 -1
  20. package/dist/controllers/authentication/mocks/index.cjs.map +1 -1
  21. package/dist/controllers/authentication/mocks/index.d.cts.map +1 -1
  22. package/dist/controllers/authentication/mocks/index.d.mts.map +1 -1
  23. package/dist/controllers/authentication/mocks/index.mjs.map +1 -1
  24. package/dist/controllers/authentication/mocks/mockResponses.cjs +26 -15
  25. package/dist/controllers/authentication/mocks/mockResponses.cjs.map +1 -1
  26. package/dist/controllers/authentication/mocks/mockResponses.d.cts +11 -0
  27. package/dist/controllers/authentication/mocks/mockResponses.d.cts.map +1 -1
  28. package/dist/controllers/authentication/mocks/mockResponses.d.mts +11 -0
  29. package/dist/controllers/authentication/mocks/mockResponses.d.mts.map +1 -1
  30. package/dist/controllers/authentication/mocks/mockResponses.mjs +13 -3
  31. package/dist/controllers/authentication/mocks/mockResponses.mjs.map +1 -1
  32. package/dist/controllers/index.cjs.map +1 -1
  33. package/dist/controllers/index.d.cts.map +1 -1
  34. package/dist/controllers/index.d.mts.map +1 -1
  35. package/dist/controllers/index.mjs.map +1 -1
  36. package/dist/controllers/user-storage/UserStorageController-method-action-types.cjs.map +1 -1
  37. package/dist/controllers/user-storage/UserStorageController-method-action-types.d.cts.map +1 -1
  38. package/dist/controllers/user-storage/UserStorageController-method-action-types.d.mts.map +1 -1
  39. package/dist/controllers/user-storage/UserStorageController-method-action-types.mjs.map +1 -1
  40. package/dist/controllers/user-storage/UserStorageController.cjs +35 -36
  41. package/dist/controllers/user-storage/UserStorageController.cjs.map +1 -1
  42. package/dist/controllers/user-storage/UserStorageController.d.cts +2 -3
  43. package/dist/controllers/user-storage/UserStorageController.d.cts.map +1 -1
  44. package/dist/controllers/user-storage/UserStorageController.d.mts +2 -3
  45. package/dist/controllers/user-storage/UserStorageController.d.mts.map +1 -1
  46. package/dist/controllers/user-storage/UserStorageController.mjs +22 -23
  47. package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -1
  48. package/dist/controllers/user-storage/contact-syncing/controller-integration.cjs +23 -23
  49. package/dist/controllers/user-storage/contact-syncing/controller-integration.cjs.map +1 -1
  50. package/dist/controllers/user-storage/contact-syncing/controller-integration.d.cts.map +1 -1
  51. package/dist/controllers/user-storage/contact-syncing/controller-integration.d.mts.map +1 -1
  52. package/dist/controllers/user-storage/contact-syncing/controller-integration.mjs.map +1 -1
  53. package/dist/controllers/user-storage/contact-syncing/setup-subscriptions.cjs +9 -9
  54. package/dist/controllers/user-storage/contact-syncing/setup-subscriptions.cjs.map +1 -1
  55. package/dist/controllers/user-storage/contact-syncing/setup-subscriptions.d.cts.map +1 -1
  56. package/dist/controllers/user-storage/contact-syncing/setup-subscriptions.d.mts.map +1 -1
  57. package/dist/controllers/user-storage/contact-syncing/setup-subscriptions.mjs.map +1 -1
  58. package/dist/controllers/user-storage/contact-syncing/sync-utils.cjs.map +1 -1
  59. package/dist/controllers/user-storage/contact-syncing/sync-utils.d.cts.map +1 -1
  60. package/dist/controllers/user-storage/contact-syncing/sync-utils.d.mts.map +1 -1
  61. package/dist/controllers/user-storage/contact-syncing/sync-utils.mjs.map +1 -1
  62. package/dist/controllers/user-storage/contact-syncing/types.cjs.map +1 -1
  63. package/dist/controllers/user-storage/contact-syncing/types.d.cts.map +1 -1
  64. package/dist/controllers/user-storage/contact-syncing/types.d.mts.map +1 -1
  65. package/dist/controllers/user-storage/contact-syncing/types.mjs.map +1 -1
  66. package/dist/controllers/user-storage/contact-syncing/utils.cjs +2 -2
  67. package/dist/controllers/user-storage/contact-syncing/utils.cjs.map +1 -1
  68. package/dist/controllers/user-storage/contact-syncing/utils.d.cts.map +1 -1
  69. package/dist/controllers/user-storage/contact-syncing/utils.d.mts.map +1 -1
  70. package/dist/controllers/user-storage/contact-syncing/utils.mjs.map +1 -1
  71. package/dist/controllers/user-storage/index.cjs +3 -3
  72. package/dist/controllers/user-storage/index.cjs.map +1 -1
  73. package/dist/controllers/user-storage/index.d.cts.map +1 -1
  74. package/dist/controllers/user-storage/index.d.mts.map +1 -1
  75. package/dist/controllers/user-storage/index.mjs.map +1 -1
  76. package/dist/controllers/user-storage/mocks/index.cjs.map +1 -1
  77. package/dist/controllers/user-storage/mocks/index.d.cts.map +1 -1
  78. package/dist/controllers/user-storage/mocks/index.d.mts.map +1 -1
  79. package/dist/controllers/user-storage/mocks/index.mjs.map +1 -1
  80. package/dist/controllers/user-storage/mocks/mockResponses.cjs +15 -15
  81. package/dist/controllers/user-storage/mocks/mockResponses.cjs.map +1 -1
  82. package/dist/controllers/user-storage/mocks/mockResponses.d.cts.map +1 -1
  83. package/dist/controllers/user-storage/mocks/mockResponses.d.mts.map +1 -1
  84. package/dist/controllers/user-storage/mocks/mockResponses.mjs.map +1 -1
  85. package/dist/controllers/user-storage/mocks/mockStorage.cjs +3 -3
  86. package/dist/controllers/user-storage/mocks/mockStorage.cjs.map +1 -1
  87. package/dist/controllers/user-storage/mocks/mockStorage.d.cts.map +1 -1
  88. package/dist/controllers/user-storage/mocks/mockStorage.d.mts.map +1 -1
  89. package/dist/controllers/user-storage/mocks/mockStorage.mjs.map +1 -1
  90. package/dist/controllers/user-storage/types.cjs.map +1 -1
  91. package/dist/controllers/user-storage/types.d.cts.map +1 -1
  92. package/dist/controllers/user-storage/types.d.mts.map +1 -1
  93. package/dist/controllers/user-storage/types.mjs.map +1 -1
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.d.cts.map +1 -1
  96. package/dist/index.d.mts.map +1 -1
  97. package/dist/index.mjs.map +1 -1
  98. package/dist/sdk/authentication-jwt-bearer/flow-siwe.cjs +11 -11
  99. package/dist/sdk/authentication-jwt-bearer/flow-siwe.cjs.map +1 -1
  100. package/dist/sdk/authentication-jwt-bearer/flow-siwe.d.cts.map +1 -1
  101. package/dist/sdk/authentication-jwt-bearer/flow-siwe.d.mts.map +1 -1
  102. package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs.map +1 -1
  103. package/dist/sdk/authentication-jwt-bearer/flow-srp.cjs +40 -26
  104. package/dist/sdk/authentication-jwt-bearer/flow-srp.cjs.map +1 -1
  105. package/dist/sdk/authentication-jwt-bearer/flow-srp.d.cts +12 -1
  106. package/dist/sdk/authentication-jwt-bearer/flow-srp.d.cts.map +1 -1
  107. package/dist/sdk/authentication-jwt-bearer/flow-srp.d.mts +12 -1
  108. package/dist/sdk/authentication-jwt-bearer/flow-srp.d.mts.map +1 -1
  109. package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +20 -6
  110. package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs.map +1 -1
  111. package/dist/sdk/authentication-jwt-bearer/services.cjs +85 -39
  112. package/dist/sdk/authentication-jwt-bearer/services.cjs.map +1 -1
  113. package/dist/sdk/authentication-jwt-bearer/services.d.cts +19 -2
  114. package/dist/sdk/authentication-jwt-bearer/services.d.cts.map +1 -1
  115. package/dist/sdk/authentication-jwt-bearer/services.d.mts +19 -2
  116. package/dist/sdk/authentication-jwt-bearer/services.d.mts.map +1 -1
  117. package/dist/sdk/authentication-jwt-bearer/services.mjs +46 -2
  118. package/dist/sdk/authentication-jwt-bearer/services.mjs.map +1 -1
  119. package/dist/sdk/authentication-jwt-bearer/types.cjs.map +1 -1
  120. package/dist/sdk/authentication-jwt-bearer/types.d.cts +36 -0
  121. package/dist/sdk/authentication-jwt-bearer/types.d.cts.map +1 -1
  122. package/dist/sdk/authentication-jwt-bearer/types.d.mts +36 -0
  123. package/dist/sdk/authentication-jwt-bearer/types.d.mts.map +1 -1
  124. package/dist/sdk/authentication-jwt-bearer/types.mjs.map +1 -1
  125. package/dist/sdk/authentication-jwt-bearer/utils/identifier.cjs +2 -2
  126. package/dist/sdk/authentication-jwt-bearer/utils/identifier.cjs.map +1 -1
  127. package/dist/sdk/authentication-jwt-bearer/utils/identifier.d.cts.map +1 -1
  128. package/dist/sdk/authentication-jwt-bearer/utils/identifier.d.mts.map +1 -1
  129. package/dist/sdk/authentication-jwt-bearer/utils/identifier.mjs.map +1 -1
  130. package/dist/sdk/authentication.cjs +25 -21
  131. package/dist/sdk/authentication.cjs.map +1 -1
  132. package/dist/sdk/authentication.d.cts +2 -1
  133. package/dist/sdk/authentication.d.cts.map +1 -1
  134. package/dist/sdk/authentication.d.mts +2 -1
  135. package/dist/sdk/authentication.d.mts.map +1 -1
  136. package/dist/sdk/authentication.mjs +4 -0
  137. package/dist/sdk/authentication.mjs.map +1 -1
  138. package/dist/sdk/constants.cjs +1 -0
  139. package/dist/sdk/constants.cjs.map +1 -1
  140. package/dist/sdk/constants.d.cts +1 -0
  141. package/dist/sdk/constants.d.cts.map +1 -1
  142. package/dist/sdk/constants.d.mts +1 -0
  143. package/dist/sdk/constants.d.mts.map +1 -1
  144. package/dist/sdk/constants.mjs +1 -0
  145. package/dist/sdk/constants.mjs.map +1 -1
  146. package/dist/sdk/errors.cjs +17 -4
  147. package/dist/sdk/errors.cjs.map +1 -1
  148. package/dist/sdk/errors.d.cts +9 -0
  149. package/dist/sdk/errors.d.cts.map +1 -1
  150. package/dist/sdk/errors.d.mts +9 -0
  151. package/dist/sdk/errors.d.mts.map +1 -1
  152. package/dist/sdk/errors.mjs +12 -0
  153. package/dist/sdk/errors.mjs.map +1 -1
  154. package/dist/sdk/index.cjs.map +1 -1
  155. package/dist/sdk/index.d.cts.map +1 -1
  156. package/dist/sdk/index.d.mts.map +1 -1
  157. package/dist/sdk/index.mjs.map +1 -1
  158. package/dist/sdk/mocks/auth.cjs +24 -13
  159. package/dist/sdk/mocks/auth.cjs.map +1 -1
  160. package/dist/sdk/mocks/auth.d.cts +11 -0
  161. package/dist/sdk/mocks/auth.d.cts.map +1 -1
  162. package/dist/sdk/mocks/auth.d.mts +11 -0
  163. package/dist/sdk/mocks/auth.d.mts.map +1 -1
  164. package/dist/sdk/mocks/auth.mjs +12 -1
  165. package/dist/sdk/mocks/auth.mjs.map +1 -1
  166. package/dist/sdk/mocks/userstorage.cjs +8 -8
  167. package/dist/sdk/mocks/userstorage.cjs.map +1 -1
  168. package/dist/sdk/mocks/userstorage.mjs.map +1 -1
  169. package/dist/sdk/user-storage.cjs +32 -32
  170. package/dist/sdk/user-storage.cjs.map +1 -1
  171. package/dist/sdk/user-storage.d.cts.map +1 -1
  172. package/dist/sdk/user-storage.d.mts.map +1 -1
  173. package/dist/sdk/user-storage.mjs +1 -1
  174. package/dist/sdk/user-storage.mjs.map +1 -1
  175. package/dist/sdk/utils/validate-login-response.cjs.map +1 -1
  176. package/dist/sdk/utils/validate-login-response.d.cts.map +1 -1
  177. package/dist/sdk/utils/validate-login-response.d.mts.map +1 -1
  178. package/dist/sdk/utils/validate-login-response.mjs.map +1 -1
  179. package/dist/shared/encryption/cache.cjs +6 -6
  180. package/dist/shared/encryption/cache.cjs.map +1 -1
  181. package/dist/shared/encryption/cache.mjs.map +1 -1
  182. package/dist/shared/encryption/encryption.cjs +26 -26
  183. package/dist/shared/encryption/encryption.cjs.map +1 -1
  184. package/dist/shared/encryption/encryption.d.cts.map +1 -1
  185. package/dist/shared/encryption/encryption.d.mts.map +1 -1
  186. package/dist/shared/encryption/encryption.mjs.map +1 -1
  187. package/dist/shared/encryption/index.cjs +3 -3
  188. package/dist/shared/encryption/index.cjs.map +1 -1
  189. package/dist/shared/encryption/index.d.cts.map +1 -1
  190. package/dist/shared/encryption/index.d.mts.map +1 -1
  191. package/dist/shared/encryption/index.mjs.map +1 -1
  192. package/dist/shared/storage-schema.cjs +2 -2
  193. package/dist/shared/storage-schema.cjs.map +1 -1
  194. package/dist/shared/storage-schema.mjs.map +1 -1
  195. package/dist/shared/types/services.cjs.map +1 -1
  196. package/dist/shared/types/services.d.cts.map +1 -1
  197. package/dist/shared/types/services.d.mts.map +1 -1
  198. package/dist/shared/types/services.mjs.map +1 -1
  199. package/dist/shared/utils/entropy-source.cjs +37 -0
  200. package/dist/shared/utils/entropy-source.cjs.map +1 -0
  201. package/dist/shared/utils/entropy-source.d.cts +22 -0
  202. package/dist/shared/utils/entropy-source.d.cts.map +1 -0
  203. package/dist/shared/utils/entropy-source.d.mts +22 -0
  204. package/dist/shared/utils/entropy-source.d.mts.map +1 -0
  205. package/dist/shared/utils/entropy-source.mjs +32 -0
  206. package/dist/shared/utils/entropy-source.mjs.map +1 -0
  207. package/dist/shared/utils/hd-keyring-seed.cjs +49 -0
  208. package/dist/shared/utils/hd-keyring-seed.cjs.map +1 -0
  209. package/dist/shared/utils/hd-keyring-seed.d.cts +27 -0
  210. package/dist/shared/utils/hd-keyring-seed.d.cts.map +1 -0
  211. package/dist/shared/utils/hd-keyring-seed.d.mts +27 -0
  212. package/dist/shared/utils/hd-keyring-seed.d.mts.map +1 -0
  213. package/dist/shared/utils/hd-keyring-seed.mjs +45 -0
  214. package/dist/shared/utils/hd-keyring-seed.mjs.map +1 -0
  215. package/dist/shared/utils/message-signing.cjs +147 -0
  216. package/dist/shared/utils/message-signing.cjs.map +1 -0
  217. package/dist/shared/utils/message-signing.d.cts +73 -0
  218. package/dist/shared/utils/message-signing.d.cts.map +1 -0
  219. package/dist/shared/utils/message-signing.d.mts +73 -0
  220. package/dist/shared/utils/message-signing.d.mts.map +1 -0
  221. package/dist/shared/utils/message-signing.mjs +140 -0
  222. package/dist/shared/utils/message-signing.mjs.map +1 -0
  223. package/package.json +17 -14
  224. package/dist/controllers/authentication/auth-snap-requests.cjs +0 -60
  225. package/dist/controllers/authentication/auth-snap-requests.cjs.map +0 -1
  226. package/dist/controllers/authentication/auth-snap-requests.d.cts +0 -27
  227. package/dist/controllers/authentication/auth-snap-requests.d.cts.map +0 -1
  228. package/dist/controllers/authentication/auth-snap-requests.d.mts +0 -27
  229. package/dist/controllers/authentication/auth-snap-requests.d.mts.map +0 -1
  230. package/dist/controllers/authentication/auth-snap-requests.mjs +0 -54
  231. package/dist/controllers/authentication/auth-snap-requests.mjs.map +0 -1
@@ -0,0 +1,22 @@
1
+ import type { KeyringObject } from "@metamask/keyring-controller";
2
+ /**
3
+ * Reads HD keyring entropy source IDs (metadata IDs) from KeyringController
4
+ * keyrings, primary first. Returns an empty array when none are available
5
+ * (e.g. the wallet is locked, where `keyrings` is cleared).
6
+ *
7
+ * @param keyrings - Keyrings from `KeyringController:getState`.
8
+ * @returns The HD keyring metadata IDs, primary first.
9
+ */
10
+ export declare function getHdKeyringEntropySourceIds(keyrings: KeyringObject[] | null | undefined): string[];
11
+ /**
12
+ * Resolves the primary SRP's entropy source ID (the first HD keyring's
13
+ * metadata ID). The ID is randomly regenerated whenever the vault is
14
+ * recreated (e.g. on restore).
15
+ *
16
+ * @param keyrings - Keyrings from `KeyringController:getState`.
17
+ * @returns The primary HD keyring metadata ID.
18
+ * @throws If no HD keyring is available; callers must only resolve while
19
+ * the wallet is unlocked.
20
+ */
21
+ export declare function getPrimaryHdKeyringEntropySourceId(keyrings: KeyringObject[] | null | undefined): string;
22
+ //# sourceMappingURL=entropy-source.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-source.d.cts","sourceRoot":"","sources":["../../../src/shared/utils/entropy-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,qCAAqC;AAElE;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GAC3C,MAAM,EAAE,CAIV;AAED;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GAC3C,MAAM,CAQR"}
@@ -0,0 +1,22 @@
1
+ import type { KeyringObject } from "@metamask/keyring-controller";
2
+ /**
3
+ * Reads HD keyring entropy source IDs (metadata IDs) from KeyringController
4
+ * keyrings, primary first. Returns an empty array when none are available
5
+ * (e.g. the wallet is locked, where `keyrings` is cleared).
6
+ *
7
+ * @param keyrings - Keyrings from `KeyringController:getState`.
8
+ * @returns The HD keyring metadata IDs, primary first.
9
+ */
10
+ export declare function getHdKeyringEntropySourceIds(keyrings: KeyringObject[] | null | undefined): string[];
11
+ /**
12
+ * Resolves the primary SRP's entropy source ID (the first HD keyring's
13
+ * metadata ID). The ID is randomly regenerated whenever the vault is
14
+ * recreated (e.g. on restore).
15
+ *
16
+ * @param keyrings - Keyrings from `KeyringController:getState`.
17
+ * @returns The primary HD keyring metadata ID.
18
+ * @throws If no HD keyring is available; callers must only resolve while
19
+ * the wallet is unlocked.
20
+ */
21
+ export declare function getPrimaryHdKeyringEntropySourceId(keyrings: KeyringObject[] | null | undefined): string;
22
+ //# sourceMappingURL=entropy-source.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-source.d.mts","sourceRoot":"","sources":["../../../src/shared/utils/entropy-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,qCAAqC;AAElE;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GAC3C,MAAM,EAAE,CAIV;AAED;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GAC3C,MAAM,CAQR"}
@@ -0,0 +1,32 @@
1
+ import { KeyringTypes } from "@metamask/keyring-controller";
2
+ /**
3
+ * Reads HD keyring entropy source IDs (metadata IDs) from KeyringController
4
+ * keyrings, primary first. Returns an empty array when none are available
5
+ * (e.g. the wallet is locked, where `keyrings` is cleared).
6
+ *
7
+ * @param keyrings - Keyrings from `KeyringController:getState`.
8
+ * @returns The HD keyring metadata IDs, primary first.
9
+ */
10
+ export function getHdKeyringEntropySourceIds(keyrings) {
11
+ return (keyrings ?? [])
12
+ .filter((keyring) => keyring.type === KeyringTypes.hd.toString())
13
+ .map((keyring) => keyring.metadata.id);
14
+ }
15
+ /**
16
+ * Resolves the primary SRP's entropy source ID (the first HD keyring's
17
+ * metadata ID). The ID is randomly regenerated whenever the vault is
18
+ * recreated (e.g. on restore).
19
+ *
20
+ * @param keyrings - Keyrings from `KeyringController:getState`.
21
+ * @returns The primary HD keyring metadata ID.
22
+ * @throws If no HD keyring is available; callers must only resolve while
23
+ * the wallet is unlocked.
24
+ */
25
+ export function getPrimaryHdKeyringEntropySourceId(keyrings) {
26
+ const [primaryEntropySourceId] = getHdKeyringEntropySourceIds(keyrings);
27
+ if (!primaryEntropySourceId) {
28
+ throw new Error('getPrimaryHdKeyringEntropySourceId - no HD keyring available');
29
+ }
30
+ return primaryEntropySourceId;
31
+ }
32
+ //# sourceMappingURL=entropy-source.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-source.mjs","sourceRoot":"","sources":["../../../src/shared/utils/entropy-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAG5D;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAA4C;IAE5C,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;SAChE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kCAAkC,CAChD,QAA4C;IAE5C,MAAM,CAAC,sBAAsB,CAAC,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC","sourcesContent":["import { KeyringTypes } from '@metamask/keyring-controller';\nimport type { KeyringObject } from '@metamask/keyring-controller';\n\n/**\n * Reads HD keyring entropy source IDs (metadata IDs) from KeyringController\n * keyrings, primary first. Returns an empty array when none are available\n * (e.g. the wallet is locked, where `keyrings` is cleared).\n *\n * @param keyrings - Keyrings from `KeyringController:getState`.\n * @returns The HD keyring metadata IDs, primary first.\n */\nexport function getHdKeyringEntropySourceIds(\n keyrings: KeyringObject[] | null | undefined,\n): string[] {\n return (keyrings ?? [])\n .filter((keyring) => keyring.type === KeyringTypes.hd.toString())\n .map((keyring) => keyring.metadata.id);\n}\n\n/**\n * Resolves the primary SRP's entropy source ID (the first HD keyring's\n * metadata ID). The ID is randomly regenerated whenever the vault is\n * recreated (e.g. on restore).\n *\n * @param keyrings - Keyrings from `KeyringController:getState`.\n * @returns The primary HD keyring metadata ID.\n * @throws If no HD keyring is available; callers must only resolve while\n * the wallet is unlocked.\n */\nexport function getPrimaryHdKeyringEntropySourceId(\n keyrings: KeyringObject[] | null | undefined,\n): string {\n const [primaryEntropySourceId] = getHdKeyringEntropySourceIds(keyrings);\n if (!primaryEntropySourceId) {\n throw new Error(\n 'getPrimaryHdKeyringEntropySourceId - no HD keyring available',\n );\n }\n return primaryEntropySourceId;\n}\n"]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHdKeyringSeed = void 0;
4
+ /**
5
+ * HD keyring seed access for native SIP-6 message signing.
6
+ *
7
+ * This mirrors `@metamask/snaps-rpc-methods` `getMnemonicSeed` (when called
8
+ * with an entropy source id):
9
+ * `KeyringController:withKeyringV2Unsafe` → assert HD → return `keyring.seed`.
10
+ *
11
+ * Those helpers are not a public export of snaps-rpc-methods, so this thin wrapper lives here.
12
+ *
13
+ * @see https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts
14
+ */
15
+ /**
16
+ * V2 HD keyring type (`KeyringType.Hd`). The template type keeps the literal
17
+ * aligned with `@metamask/keyring-api/v2` without a runtime dependency.
18
+ */
19
+ const HD_KEYRING_TYPE = 'hd';
20
+ const ENTROPY_SOURCE_NOT_FOUND_ERROR = 'Entropy source not found or is not an HD keyring.';
21
+ /**
22
+ * Reads the BIP-39 seed for an HD keyring entropy source via
23
+ * `KeyringController:withKeyringV2Unsafe`.
24
+ *
25
+ * Equivalent to snaps-rpc-methods `getMnemonicSeed(messenger, source)` for a
26
+ * concrete entropy source id.
27
+ *
28
+ * @param messenger - Messenger that can call `withKeyringV2Unsafe`.
29
+ * @param entropySourceId - Keyring metadata ID (SIP-30 entropy source).
30
+ * @returns The HD keyring seed.
31
+ * @throws If the keyring is missing or is not an HD keyring with a seed.
32
+ */
33
+ async function getHdKeyringSeed(messenger, entropySourceId) {
34
+ try {
35
+ const keyringData = (await messenger.call('KeyringController:withKeyringV2Unsafe', { id: entropySourceId }, async ({ keyring }) => {
36
+ const hdKeyring = keyring;
37
+ return { type: hdKeyring.type, seed: hdKeyring.seed };
38
+ }));
39
+ if (keyringData.type !== HD_KEYRING_TYPE || !keyringData.seed) {
40
+ throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);
41
+ }
42
+ return keyringData.seed;
43
+ }
44
+ catch {
45
+ throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);
46
+ }
47
+ }
48
+ exports.getHdKeyringSeed = getHdKeyringSeed;
49
+ //# sourceMappingURL=hd-keyring-seed.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hd-keyring-seed.cjs","sourceRoot":"","sources":["../../../src/shared/utils/hd-keyring-seed.ts"],"names":[],"mappings":";;;AAKA;;;;;;;;;;GAUG;AAEH;;;GAGG;AACH,MAAM,eAAe,GAAwB,IAAI,CAAC;AAElD,MAAM,8BAA8B,GAClC,mDAAmD,CAAC;AAiBtD;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,gBAAgB,CACpC,SAAuC,EACvC,eAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CACvC,uCAAuC,EACvC,EAAE,EAAE,EAAE,eAAe,EAAE,EACvB,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACpB,MAAM,SAAS,GAAG,OAAoB,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC,CACF,CAA+C,CAAC;QAEjD,IAAI,WAAW,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAtBD,4CAsBC","sourcesContent":["import type { HdKeyring } from '@metamask/eth-hd-keyring/v2';\nimport type { KeyringType } from '@metamask/keyring-api/v2';\nimport type { KeyringControllerWithKeyringV2UnsafeAction } from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\n\n/**\n * HD keyring seed access for native SIP-6 message signing.\n *\n * This mirrors `@metamask/snaps-rpc-methods` `getMnemonicSeed` (when called\n * with an entropy source id):\n * `KeyringController:withKeyringV2Unsafe` → assert HD → return `keyring.seed`.\n *\n * Those helpers are not a public export of snaps-rpc-methods, so this thin wrapper lives here.\n *\n * @see https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts\n */\n\n/**\n * V2 HD keyring type (`KeyringType.Hd`). The template type keeps the literal\n * aligned with `@metamask/keyring-api/v2` without a runtime dependency.\n */\nconst HD_KEYRING_TYPE: `${KeyringType.Hd}` = 'hd';\n\nconst ENTROPY_SOURCE_NOT_FOUND_ERROR =\n 'Entropy source not found or is not an HD keyring.';\n\n/**\n * Structural messenger shape for `withKeyringV2Unsafe`.\n *\n * Not `Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>` because\n * `Messenger` is invariant in its action union — Auth / UserStorage messengers\n * (which allow additional actions) are not assignable to that narrow type.\n */\ntype MessengerWithKeyringV2Unsafe = {\n call: (\n ...args: Parameters<\n Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>['call']\n >\n ) => unknown;\n};\n\n/**\n * Reads the BIP-39 seed for an HD keyring entropy source via\n * `KeyringController:withKeyringV2Unsafe`.\n *\n * Equivalent to snaps-rpc-methods `getMnemonicSeed(messenger, source)` for a\n * concrete entropy source id.\n *\n * @param messenger - Messenger that can call `withKeyringV2Unsafe`.\n * @param entropySourceId - Keyring metadata ID (SIP-30 entropy source).\n * @returns The HD keyring seed.\n * @throws If the keyring is missing or is not an HD keyring with a seed.\n */\nexport async function getHdKeyringSeed(\n messenger: MessengerWithKeyringV2Unsafe,\n entropySourceId: string,\n): Promise<Uint8Array> {\n try {\n const keyringData = (await messenger.call(\n 'KeyringController:withKeyringV2Unsafe',\n { id: entropySourceId },\n async ({ keyring }) => {\n const hdKeyring = keyring as HdKeyring;\n return { type: hdKeyring.type, seed: hdKeyring.seed };\n },\n )) as { type: string; seed?: Uint8Array | null };\n\n if (keyringData.type !== HD_KEYRING_TYPE || !keyringData.seed) {\n throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);\n }\n\n return keyringData.seed;\n } catch {\n throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import type { KeyringControllerWithKeyringV2UnsafeAction } from "@metamask/keyring-controller";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ /**
4
+ * Structural messenger shape for `withKeyringV2Unsafe`.
5
+ *
6
+ * Not `Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>` because
7
+ * `Messenger` is invariant in its action union — Auth / UserStorage messengers
8
+ * (which allow additional actions) are not assignable to that narrow type.
9
+ */
10
+ type MessengerWithKeyringV2Unsafe = {
11
+ call: (...args: Parameters<Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>['call']>) => unknown;
12
+ };
13
+ /**
14
+ * Reads the BIP-39 seed for an HD keyring entropy source via
15
+ * `KeyringController:withKeyringV2Unsafe`.
16
+ *
17
+ * Equivalent to snaps-rpc-methods `getMnemonicSeed(messenger, source)` for a
18
+ * concrete entropy source id.
19
+ *
20
+ * @param messenger - Messenger that can call `withKeyringV2Unsafe`.
21
+ * @param entropySourceId - Keyring metadata ID (SIP-30 entropy source).
22
+ * @returns The HD keyring seed.
23
+ * @throws If the keyring is missing or is not an HD keyring with a seed.
24
+ */
25
+ export declare function getHdKeyringSeed(messenger: MessengerWithKeyringV2Unsafe, entropySourceId: string): Promise<Uint8Array>;
26
+ export {};
27
+ //# sourceMappingURL=hd-keyring-seed.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hd-keyring-seed.d.cts","sourceRoot":"","sources":["../../../src/shared/utils/hd-keyring-seed.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0CAA0C,EAAE,qCAAqC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAuBrD;;;;;;GAMG;AACH,KAAK,4BAA4B,GAAG;IAClC,IAAI,EAAE,CACJ,GAAG,IAAI,EAAE,UAAU,CACjB,SAAS,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC,MAAM,CAAC,CACtE,KACE,OAAO,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,4BAA4B,EACvC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC,CAmBrB"}
@@ -0,0 +1,27 @@
1
+ import type { KeyringControllerWithKeyringV2UnsafeAction } from "@metamask/keyring-controller";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ /**
4
+ * Structural messenger shape for `withKeyringV2Unsafe`.
5
+ *
6
+ * Not `Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>` because
7
+ * `Messenger` is invariant in its action union — Auth / UserStorage messengers
8
+ * (which allow additional actions) are not assignable to that narrow type.
9
+ */
10
+ type MessengerWithKeyringV2Unsafe = {
11
+ call: (...args: Parameters<Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>['call']>) => unknown;
12
+ };
13
+ /**
14
+ * Reads the BIP-39 seed for an HD keyring entropy source via
15
+ * `KeyringController:withKeyringV2Unsafe`.
16
+ *
17
+ * Equivalent to snaps-rpc-methods `getMnemonicSeed(messenger, source)` for a
18
+ * concrete entropy source id.
19
+ *
20
+ * @param messenger - Messenger that can call `withKeyringV2Unsafe`.
21
+ * @param entropySourceId - Keyring metadata ID (SIP-30 entropy source).
22
+ * @returns The HD keyring seed.
23
+ * @throws If the keyring is missing or is not an HD keyring with a seed.
24
+ */
25
+ export declare function getHdKeyringSeed(messenger: MessengerWithKeyringV2Unsafe, entropySourceId: string): Promise<Uint8Array>;
26
+ export {};
27
+ //# sourceMappingURL=hd-keyring-seed.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hd-keyring-seed.d.mts","sourceRoot":"","sources":["../../../src/shared/utils/hd-keyring-seed.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0CAA0C,EAAE,qCAAqC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAuBrD;;;;;;GAMG;AACH,KAAK,4BAA4B,GAAG;IAClC,IAAI,EAAE,CACJ,GAAG,IAAI,EAAE,UAAU,CACjB,SAAS,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC,MAAM,CAAC,CACtE,KACE,OAAO,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,4BAA4B,EACvC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC,CAmBrB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * HD keyring seed access for native SIP-6 message signing.
3
+ *
4
+ * This mirrors `@metamask/snaps-rpc-methods` `getMnemonicSeed` (when called
5
+ * with an entropy source id):
6
+ * `KeyringController:withKeyringV2Unsafe` → assert HD → return `keyring.seed`.
7
+ *
8
+ * Those helpers are not a public export of snaps-rpc-methods, so this thin wrapper lives here.
9
+ *
10
+ * @see https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts
11
+ */
12
+ /**
13
+ * V2 HD keyring type (`KeyringType.Hd`). The template type keeps the literal
14
+ * aligned with `@metamask/keyring-api/v2` without a runtime dependency.
15
+ */
16
+ const HD_KEYRING_TYPE = 'hd';
17
+ const ENTROPY_SOURCE_NOT_FOUND_ERROR = 'Entropy source not found or is not an HD keyring.';
18
+ /**
19
+ * Reads the BIP-39 seed for an HD keyring entropy source via
20
+ * `KeyringController:withKeyringV2Unsafe`.
21
+ *
22
+ * Equivalent to snaps-rpc-methods `getMnemonicSeed(messenger, source)` for a
23
+ * concrete entropy source id.
24
+ *
25
+ * @param messenger - Messenger that can call `withKeyringV2Unsafe`.
26
+ * @param entropySourceId - Keyring metadata ID (SIP-30 entropy source).
27
+ * @returns The HD keyring seed.
28
+ * @throws If the keyring is missing or is not an HD keyring with a seed.
29
+ */
30
+ export async function getHdKeyringSeed(messenger, entropySourceId) {
31
+ try {
32
+ const keyringData = (await messenger.call('KeyringController:withKeyringV2Unsafe', { id: entropySourceId }, async ({ keyring }) => {
33
+ const hdKeyring = keyring;
34
+ return { type: hdKeyring.type, seed: hdKeyring.seed };
35
+ }));
36
+ if (keyringData.type !== HD_KEYRING_TYPE || !keyringData.seed) {
37
+ throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);
38
+ }
39
+ return keyringData.seed;
40
+ }
41
+ catch {
42
+ throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);
43
+ }
44
+ }
45
+ //# sourceMappingURL=hd-keyring-seed.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hd-keyring-seed.mjs","sourceRoot":"","sources":["../../../src/shared/utils/hd-keyring-seed.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AAEH;;;GAGG;AACH,MAAM,eAAe,GAAwB,IAAI,CAAC;AAElD,MAAM,8BAA8B,GAClC,mDAAmD,CAAC;AAiBtD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAuC,EACvC,eAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CACvC,uCAAuC,EACvC,EAAE,EAAE,EAAE,eAAe,EAAE,EACvB,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACpB,MAAM,SAAS,GAAG,OAAoB,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC,CACF,CAA+C,CAAC;QAEjD,IAAI,WAAW,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC","sourcesContent":["import type { HdKeyring } from '@metamask/eth-hd-keyring/v2';\nimport type { KeyringType } from '@metamask/keyring-api/v2';\nimport type { KeyringControllerWithKeyringV2UnsafeAction } from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\n\n/**\n * HD keyring seed access for native SIP-6 message signing.\n *\n * This mirrors `@metamask/snaps-rpc-methods` `getMnemonicSeed` (when called\n * with an entropy source id):\n * `KeyringController:withKeyringV2Unsafe` → assert HD → return `keyring.seed`.\n *\n * Those helpers are not a public export of snaps-rpc-methods, so this thin wrapper lives here.\n *\n * @see https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts\n */\n\n/**\n * V2 HD keyring type (`KeyringType.Hd`). The template type keeps the literal\n * aligned with `@metamask/keyring-api/v2` without a runtime dependency.\n */\nconst HD_KEYRING_TYPE: `${KeyringType.Hd}` = 'hd';\n\nconst ENTROPY_SOURCE_NOT_FOUND_ERROR =\n 'Entropy source not found or is not an HD keyring.';\n\n/**\n * Structural messenger shape for `withKeyringV2Unsafe`.\n *\n * Not `Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>` because\n * `Messenger` is invariant in its action union — Auth / UserStorage messengers\n * (which allow additional actions) are not assignable to that narrow type.\n */\ntype MessengerWithKeyringV2Unsafe = {\n call: (\n ...args: Parameters<\n Messenger<string, KeyringControllerWithKeyringV2UnsafeAction>['call']\n >\n ) => unknown;\n};\n\n/**\n * Reads the BIP-39 seed for an HD keyring entropy source via\n * `KeyringController:withKeyringV2Unsafe`.\n *\n * Equivalent to snaps-rpc-methods `getMnemonicSeed(messenger, source)` for a\n * concrete entropy source id.\n *\n * @param messenger - Messenger that can call `withKeyringV2Unsafe`.\n * @param entropySourceId - Keyring metadata ID (SIP-30 entropy source).\n * @returns The HD keyring seed.\n * @throws If the keyring is missing or is not an HD keyring with a seed.\n */\nexport async function getHdKeyringSeed(\n messenger: MessengerWithKeyringV2Unsafe,\n entropySourceId: string,\n): Promise<Uint8Array> {\n try {\n const keyringData = (await messenger.call(\n 'KeyringController:withKeyringV2Unsafe',\n { id: entropySourceId },\n async ({ keyring }) => {\n const hdKeyring = keyring as HdKeyring;\n return { type: hdKeyring.type, seed: hdKeyring.seed };\n },\n )) as { type: string; seed?: Uint8Array | null };\n\n if (keyringData.type !== HD_KEYRING_TYPE || !keyringData.seed) {\n throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);\n }\n\n return keyringData.seed;\n } catch {\n throw new Error(ENTROPY_SOURCE_NOT_FOUND_ERROR);\n }\n}\n"]}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signMessageWithMessageSigningKey = exports.getMessageSigningPublicKey = exports.deriveMessageSigningPrivateKey = exports.deriveSip6PrivateKey = exports.MESSAGE_SIGNING_SNAP_ID = void 0;
4
+ const key_tree_1 = require("@metamask/key-tree");
5
+ const utils_1 = require("@metamask/utils");
6
+ const secp256k1_1 = require("@noble/curves/secp256k1");
7
+ const hmac_1 = require("@noble/hashes/hmac");
8
+ const sha2_1 = require("@noble/hashes/sha2");
9
+ const sha3_1 = require("@noble/hashes/sha3");
10
+ /**
11
+ * Native SIP-6 message-signing helpers for AuthenticationController /
12
+ * UserStorageController.
13
+ *
14
+ * These are intentional copies of the message-signing snap crypto path so auth
15
+ * and user-storage can derive/sign without booting
16
+ * `npm:@metamask/message-signing-snap`. Behavior must stay byte-identical to:
17
+ *
18
+ * - SIP-6 derivation:
19
+ * `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` /
20
+ * `getEntropyDerivationPath` / `getDerivationPathArray`
21
+ * (https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts)
22
+ * - Magic constant:
23
+ * `@metamask/snaps-utils` `SIP_6_MAGIC_VALUE`
24
+ * - Pubkey + `metamask:…` signing:
25
+ * `@metamask/message-signing-snap` `getPublicEntropyKey` /
26
+ * `signMessageWithEntropyKey`
27
+ * (https://github.com/MetaMask/message-signing-snap/blob/main/src/entropy-keys.ts)
28
+ *
29
+ * `deriveEntropyFromSeed` is not a public export of
30
+ * `@metamask/snaps-rpc-methods` today (and no core package depends on that
31
+ * package), so the SIP-6 math is vendored here rather than imported.
32
+ */
33
+ /**
34
+ * Snap ID used as the SIP-6 `input` so derived keys match
35
+ * `@metamask/message-signing-snap` (`snap_getEntropy` origin).
36
+ */
37
+ exports.MESSAGE_SIGNING_SNAP_ID = 'npm:@metamask/message-signing-snap';
38
+ /**
39
+ * Copy of `@metamask/snaps-utils` `SIP_6_MAGIC_VALUE`
40
+ * (`0xd36e6170 - 0x80000000`).
41
+ *
42
+ * @see https://metamask.github.io/SIPs/SIPS/sip-6
43
+ */
44
+ const SIP_6_MAGIC_VALUE = `1399742832'`;
45
+ const HARDENED_VALUE = 0x80000000;
46
+ /**
47
+ * HMAC-SHA-512 for `@metamask/key-tree`.
48
+ *
49
+ * Passed into `SLIP10Node.fromSeed` so SIP-6 never uses Web Crypto.
50
+ * `@metamask/key-tree` treats any `crypto.subtle` as complete and then HMAC
51
+ * via `importKey` / `sign`. React Native only implements `digest`; its
52
+ * SubtleCrypto cannot HMAC. Noble HMAC is byte-identical without SubtleCrypto.
53
+ */
54
+ const NOBLE_HMAC_SHA512 = {
55
+ hmacSha512: async (key, data) => (0, hmac_1.hmac)(sha2_1.sha512, key, data),
56
+ };
57
+ /**
58
+ * Copy of `@metamask/snaps-rpc-methods` `getDerivationPathArray`.
59
+ *
60
+ * Maps a 32-byte hash to eight hardened BIP-32 indices for `@metamask/key-tree`.
61
+ *
62
+ * @param hash - 32-byte hash.
63
+ * @returns Hardened BIP-32 path nodes.
64
+ */
65
+ function getDerivationPathArray(hash) {
66
+ const array = [];
67
+ const view = (0, utils_1.createDataView)(hash);
68
+ for (let index = 0; index < 8; index++) {
69
+ const uint32 = view.getUint32(index * 4);
70
+ // eslint-disable-next-line no-bitwise
71
+ const pathIndex = (uint32 | HARDENED_VALUE) >>> 0;
72
+ array.push(`bip32:${pathIndex - HARDENED_VALUE}'`);
73
+ }
74
+ return array;
75
+ }
76
+ /**
77
+ * Copy of `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` (SIP-6),
78
+ * returning raw private-key bytes instead of a `0x`-prefixed hex string.
79
+ *
80
+ * @param options - Derivation options.
81
+ * @param options.seed - BIP-39 mnemonic seed.
82
+ * @param options.input - SIP-6 input (snap ID for `snap_getEntropy`).
83
+ * @param options.salt - Optional salt. Internal auth uses `''`.
84
+ * @returns 32-byte private key.
85
+ */
86
+ async function deriveSip6PrivateKey({ seed, input, salt = '', }) {
87
+ const hash = (0, sha3_1.keccak_256)((0, utils_1.concatBytes)([(0, utils_1.stringToBytes)(input), (0, sha3_1.keccak_256)((0, utils_1.stringToBytes)(salt))]));
88
+ const computedDerivationPath = getDerivationPathArray(hash);
89
+ const { privateKey } = await key_tree_1.SLIP10Node.fromSeed({
90
+ derivationPath: [
91
+ seed,
92
+ `bip32:${SIP_6_MAGIC_VALUE}`,
93
+ ...computedDerivationPath,
94
+ ],
95
+ curve: 'secp256k1',
96
+ }, NOBLE_HMAC_SHA512);
97
+ (0, utils_1.assert)(privateKey, 'Failed to derive SIP-6 entropy.');
98
+ return (0, utils_1.hexToBytes)(privateKey);
99
+ }
100
+ exports.deriveSip6PrivateKey = deriveSip6PrivateKey;
101
+ /**
102
+ * Derives the message-signing private key via SIP-6, matching
103
+ * `snap_getEntropy` for the message-signing snap with empty salt
104
+ * (internal `metamask` origin).
105
+ *
106
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
107
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
108
+ * @returns 32-byte private key.
109
+ */
110
+ async function deriveMessageSigningPrivateKey(seed, salt = '') {
111
+ return deriveSip6PrivateKey({
112
+ seed,
113
+ input: exports.MESSAGE_SIGNING_SNAP_ID,
114
+ salt,
115
+ });
116
+ }
117
+ exports.deriveMessageSigningPrivateKey = deriveMessageSigningPrivateKey;
118
+ /**
119
+ * Copy of message-signing-snap `getPublicEntropyKey`: secp256k1 pubkey hex
120
+ * for the SIP-6 message-signing private key.
121
+ *
122
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
123
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
124
+ * @returns Public key hex with `0x` prefix.
125
+ */
126
+ async function getMessageSigningPublicKey(seed, salt = '') {
127
+ const privateKey = await deriveMessageSigningPrivateKey(seed, salt);
128
+ return (0, utils_1.bytesToHex)(secp256k1_1.secp256k1.getPublicKey(privateKey));
129
+ }
130
+ exports.getMessageSigningPublicKey = getMessageSigningPublicKey;
131
+ /**
132
+ * Copy of message-signing-snap `signMessageWithEntropyKey`: sha256(message)
133
+ * then compact secp256k1 signature.
134
+ *
135
+ * @param message - Message to sign (must be validated by the caller).
136
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
137
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
138
+ * @returns Compact secp256k1 signature hex with `0x` prefix.
139
+ */
140
+ async function signMessageWithMessageSigningKey(message, seed, salt = '') {
141
+ const privateKey = await deriveMessageSigningPrivateKey(seed, salt);
142
+ const digest = (0, sha2_1.sha256)(message);
143
+ const signature = secp256k1_1.secp256k1.sign(digest, privateKey);
144
+ return `0x${signature.toCompactHex()}`;
145
+ }
146
+ exports.signMessageWithMessageSigningKey = signMessageWithMessageSigningKey;
147
+ //# sourceMappingURL=message-signing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-signing.cjs","sourceRoot":"","sources":["../../../src/shared/utils/message-signing.ts"],"names":[],"mappings":";;;AACA,iDAAgD;AAChD,2CAOyB;AACzB,uDAAoD;AACpD,6CAA0C;AAC1C,6CAAoD;AACpD,6CAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;GAGG;AACU,QAAA,uBAAuB,GAAG,oCAAoC,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,aAA6B,CAAC;AAExD,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAAE,KAAK,EAAE,GAAe,EAAE,IAAgB,EAAuB,EAAE,CAC3E,IAAA,WAAI,EAAC,aAAM,EAAE,GAAG,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,IAAgB;IAC9C,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,sCAAsC;QACtC,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,cAAc,GAAY,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,oBAAoB,CAAC,EACzC,IAAI,EACJ,KAAK,EACL,IAAI,GAAG,EAAE,GAKV;IACC,MAAM,IAAI,GAAG,IAAA,iBAAS,EACpB,IAAA,mBAAW,EAAC,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,EAAE,IAAA,iBAAS,EAAC,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC;IACF,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,qBAAU,CAAC,QAAQ,CAC9C;QACE,cAAc,EAAE;YACd,IAAI;YACJ,SAAS,iBAAiB,EAAE;YAC5B,GAAG,sBAAsB;SAC1B;QACD,KAAK,EAAE,WAAW;KACnB,EACD,iBAAiB,CAClB,CAAC;IAEF,IAAA,cAAM,EAAC,UAAU,EAAE,iCAAiC,CAAC,CAAC;IACtD,OAAO,IAAA,kBAAU,EAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AA5BD,oDA4BC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,8BAA8B,CAClD,IAAgB,EAChB,IAAI,GAAG,EAAE;IAET,OAAO,oBAAoB,CAAC;QAC1B,IAAI;QACJ,KAAK,EAAE,+BAAuB;QAC9B,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AATD,wEASC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,0BAA0B,CAC9C,IAAgB,EAChB,IAAI,GAAG,EAAE;IAET,MAAM,UAAU,GAAG,MAAM,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpE,OAAO,IAAA,kBAAU,EAAC,qBAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AACxD,CAAC;AAND,gEAMC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,gCAAgC,CACpD,OAAe,EACf,IAAgB,EAChB,IAAI,GAAG,EAAE;IAET,MAAM,UAAU,GAAG,MAAM,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAA,aAAM,EAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,qBAAS,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,KAAK,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;AACzC,CAAC;AATD,4EASC","sourcesContent":["import type { HardenedBIP32Node } from '@metamask/key-tree';\nimport { SLIP10Node } from '@metamask/key-tree';\nimport {\n assert,\n bytesToHex,\n concatBytes,\n createDataView,\n hexToBytes,\n stringToBytes,\n} from '@metamask/utils';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { hmac } from '@noble/hashes/hmac';\nimport { sha256, sha512 } from '@noble/hashes/sha2';\nimport { keccak_256 as keccak256 } from '@noble/hashes/sha3';\n\n/**\n * Native SIP-6 message-signing helpers for AuthenticationController /\n * UserStorageController.\n *\n * These are intentional copies of the message-signing snap crypto path so auth\n * and user-storage can derive/sign without booting\n * `npm:@metamask/message-signing-snap`. Behavior must stay byte-identical to:\n *\n * - SIP-6 derivation:\n * `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` /\n * `getEntropyDerivationPath` / `getDerivationPathArray`\n * (https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts)\n * - Magic constant:\n * `@metamask/snaps-utils` `SIP_6_MAGIC_VALUE`\n * - Pubkey + `metamask:…` signing:\n * `@metamask/message-signing-snap` `getPublicEntropyKey` /\n * `signMessageWithEntropyKey`\n * (https://github.com/MetaMask/message-signing-snap/blob/main/src/entropy-keys.ts)\n *\n * `deriveEntropyFromSeed` is not a public export of\n * `@metamask/snaps-rpc-methods` today (and no core package depends on that\n * package), so the SIP-6 math is vendored here rather than imported.\n */\n\n/**\n * Snap ID used as the SIP-6 `input` so derived keys match\n * `@metamask/message-signing-snap` (`snap_getEntropy` origin).\n */\nexport const MESSAGE_SIGNING_SNAP_ID = 'npm:@metamask/message-signing-snap';\n\n/**\n * Copy of `@metamask/snaps-utils` `SIP_6_MAGIC_VALUE`\n * (`0xd36e6170 - 0x80000000`).\n *\n * @see https://metamask.github.io/SIPs/SIPS/sip-6\n */\nconst SIP_6_MAGIC_VALUE = `1399742832'` as `${number}'`;\n\nconst HARDENED_VALUE = 0x80000000;\n\n/**\n * HMAC-SHA-512 for `@metamask/key-tree`.\n *\n * Passed into `SLIP10Node.fromSeed` so SIP-6 never uses Web Crypto.\n * `@metamask/key-tree` treats any `crypto.subtle` as complete and then HMAC\n * via `importKey` / `sign`. React Native only implements `digest`; its\n * SubtleCrypto cannot HMAC. Noble HMAC is byte-identical without SubtleCrypto.\n */\nconst NOBLE_HMAC_SHA512 = {\n hmacSha512: async (key: Uint8Array, data: Uint8Array): Promise<Uint8Array> =>\n hmac(sha512, key, data),\n};\n\n/**\n * Copy of `@metamask/snaps-rpc-methods` `getDerivationPathArray`.\n *\n * Maps a 32-byte hash to eight hardened BIP-32 indices for `@metamask/key-tree`.\n *\n * @param hash - 32-byte hash.\n * @returns Hardened BIP-32 path nodes.\n */\nfunction getDerivationPathArray(hash: Uint8Array): HardenedBIP32Node[] {\n const array: HardenedBIP32Node[] = [];\n const view = createDataView(hash);\n\n for (let index = 0; index < 8; index++) {\n const uint32 = view.getUint32(index * 4);\n // eslint-disable-next-line no-bitwise\n const pathIndex = (uint32 | HARDENED_VALUE) >>> 0;\n array.push(`bip32:${pathIndex - HARDENED_VALUE}'` as const);\n }\n\n return array;\n}\n\n/**\n * Copy of `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` (SIP-6),\n * returning raw private-key bytes instead of a `0x`-prefixed hex string.\n *\n * @param options - Derivation options.\n * @param options.seed - BIP-39 mnemonic seed.\n * @param options.input - SIP-6 input (snap ID for `snap_getEntropy`).\n * @param options.salt - Optional salt. Internal auth uses `''`.\n * @returns 32-byte private key.\n */\nexport async function deriveSip6PrivateKey({\n seed,\n input,\n salt = '',\n}: {\n seed: Uint8Array;\n input: string;\n salt?: string;\n}): Promise<Uint8Array> {\n const hash = keccak256(\n concatBytes([stringToBytes(input), keccak256(stringToBytes(salt))]),\n );\n const computedDerivationPath = getDerivationPathArray(hash);\n\n const { privateKey } = await SLIP10Node.fromSeed(\n {\n derivationPath: [\n seed,\n `bip32:${SIP_6_MAGIC_VALUE}`,\n ...computedDerivationPath,\n ],\n curve: 'secp256k1',\n },\n NOBLE_HMAC_SHA512,\n );\n\n assert(privateKey, 'Failed to derive SIP-6 entropy.');\n return hexToBytes(privateKey);\n}\n\n/**\n * Derives the message-signing private key via SIP-6, matching\n * `snap_getEntropy` for the message-signing snap with empty salt\n * (internal `metamask` origin).\n *\n * @param seed - BIP-39 mnemonic seed from an HD keyring.\n * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.\n * @returns 32-byte private key.\n */\nexport async function deriveMessageSigningPrivateKey(\n seed: Uint8Array,\n salt = '',\n): Promise<Uint8Array> {\n return deriveSip6PrivateKey({\n seed,\n input: MESSAGE_SIGNING_SNAP_ID,\n salt,\n });\n}\n\n/**\n * Copy of message-signing-snap `getPublicEntropyKey`: secp256k1 pubkey hex\n * for the SIP-6 message-signing private key.\n *\n * @param seed - BIP-39 mnemonic seed from an HD keyring.\n * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.\n * @returns Public key hex with `0x` prefix.\n */\nexport async function getMessageSigningPublicKey(\n seed: Uint8Array,\n salt = '',\n): Promise<string> {\n const privateKey = await deriveMessageSigningPrivateKey(seed, salt);\n return bytesToHex(secp256k1.getPublicKey(privateKey));\n}\n\n/**\n * Copy of message-signing-snap `signMessageWithEntropyKey`: sha256(message)\n * then compact secp256k1 signature.\n *\n * @param message - Message to sign (must be validated by the caller).\n * @param seed - BIP-39 mnemonic seed from an HD keyring.\n * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.\n * @returns Compact secp256k1 signature hex with `0x` prefix.\n */\nexport async function signMessageWithMessageSigningKey(\n message: string,\n seed: Uint8Array,\n salt = '',\n): Promise<string> {\n const privateKey = await deriveMessageSigningPrivateKey(seed, salt);\n const digest = sha256(message);\n const signature = secp256k1.sign(digest, privateKey);\n return `0x${signature.toCompactHex()}`;\n}\n"]}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Native SIP-6 message-signing helpers for AuthenticationController /
3
+ * UserStorageController.
4
+ *
5
+ * These are intentional copies of the message-signing snap crypto path so auth
6
+ * and user-storage can derive/sign without booting
7
+ * `npm:@metamask/message-signing-snap`. Behavior must stay byte-identical to:
8
+ *
9
+ * - SIP-6 derivation:
10
+ * `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` /
11
+ * `getEntropyDerivationPath` / `getDerivationPathArray`
12
+ * (https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts)
13
+ * - Magic constant:
14
+ * `@metamask/snaps-utils` `SIP_6_MAGIC_VALUE`
15
+ * - Pubkey + `metamask:…` signing:
16
+ * `@metamask/message-signing-snap` `getPublicEntropyKey` /
17
+ * `signMessageWithEntropyKey`
18
+ * (https://github.com/MetaMask/message-signing-snap/blob/main/src/entropy-keys.ts)
19
+ *
20
+ * `deriveEntropyFromSeed` is not a public export of
21
+ * `@metamask/snaps-rpc-methods` today (and no core package depends on that
22
+ * package), so the SIP-6 math is vendored here rather than imported.
23
+ */
24
+ /**
25
+ * Snap ID used as the SIP-6 `input` so derived keys match
26
+ * `@metamask/message-signing-snap` (`snap_getEntropy` origin).
27
+ */
28
+ export declare const MESSAGE_SIGNING_SNAP_ID = "npm:@metamask/message-signing-snap";
29
+ /**
30
+ * Copy of `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` (SIP-6),
31
+ * returning raw private-key bytes instead of a `0x`-prefixed hex string.
32
+ *
33
+ * @param options - Derivation options.
34
+ * @param options.seed - BIP-39 mnemonic seed.
35
+ * @param options.input - SIP-6 input (snap ID for `snap_getEntropy`).
36
+ * @param options.salt - Optional salt. Internal auth uses `''`.
37
+ * @returns 32-byte private key.
38
+ */
39
+ export declare function deriveSip6PrivateKey({ seed, input, salt, }: {
40
+ seed: Uint8Array;
41
+ input: string;
42
+ salt?: string;
43
+ }): Promise<Uint8Array>;
44
+ /**
45
+ * Derives the message-signing private key via SIP-6, matching
46
+ * `snap_getEntropy` for the message-signing snap with empty salt
47
+ * (internal `metamask` origin).
48
+ *
49
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
50
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
51
+ * @returns 32-byte private key.
52
+ */
53
+ export declare function deriveMessageSigningPrivateKey(seed: Uint8Array, salt?: string): Promise<Uint8Array>;
54
+ /**
55
+ * Copy of message-signing-snap `getPublicEntropyKey`: secp256k1 pubkey hex
56
+ * for the SIP-6 message-signing private key.
57
+ *
58
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
59
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
60
+ * @returns Public key hex with `0x` prefix.
61
+ */
62
+ export declare function getMessageSigningPublicKey(seed: Uint8Array, salt?: string): Promise<string>;
63
+ /**
64
+ * Copy of message-signing-snap `signMessageWithEntropyKey`: sha256(message)
65
+ * then compact secp256k1 signature.
66
+ *
67
+ * @param message - Message to sign (must be validated by the caller).
68
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
69
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
70
+ * @returns Compact secp256k1 signature hex with `0x` prefix.
71
+ */
72
+ export declare function signMessageWithMessageSigningKey(message: string, seed: Uint8Array, salt?: string): Promise<string>;
73
+ //# sourceMappingURL=message-signing.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-signing.d.cts","sourceRoot":"","sources":["../../../src/shared/utils/message-signing.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB,uCAAuC,CAAC;AA+C5E;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,IAAI,EACJ,KAAK,EACL,IAAS,GACV,EAAE;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,UAAU,EAChB,IAAI,SAAK,GACR,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,UAAU,EAChB,IAAI,SAAK,GACR,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,EAChB,IAAI,SAAK,GACR,OAAO,CAAC,MAAM,CAAC,CAKjB"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Native SIP-6 message-signing helpers for AuthenticationController /
3
+ * UserStorageController.
4
+ *
5
+ * These are intentional copies of the message-signing snap crypto path so auth
6
+ * and user-storage can derive/sign without booting
7
+ * `npm:@metamask/message-signing-snap`. Behavior must stay byte-identical to:
8
+ *
9
+ * - SIP-6 derivation:
10
+ * `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` /
11
+ * `getEntropyDerivationPath` / `getDerivationPathArray`
12
+ * (https://github.com/MetaMask/snaps/blob/main/packages/snaps-rpc-methods/src/utils.ts)
13
+ * - Magic constant:
14
+ * `@metamask/snaps-utils` `SIP_6_MAGIC_VALUE`
15
+ * - Pubkey + `metamask:…` signing:
16
+ * `@metamask/message-signing-snap` `getPublicEntropyKey` /
17
+ * `signMessageWithEntropyKey`
18
+ * (https://github.com/MetaMask/message-signing-snap/blob/main/src/entropy-keys.ts)
19
+ *
20
+ * `deriveEntropyFromSeed` is not a public export of
21
+ * `@metamask/snaps-rpc-methods` today (and no core package depends on that
22
+ * package), so the SIP-6 math is vendored here rather than imported.
23
+ */
24
+ /**
25
+ * Snap ID used as the SIP-6 `input` so derived keys match
26
+ * `@metamask/message-signing-snap` (`snap_getEntropy` origin).
27
+ */
28
+ export declare const MESSAGE_SIGNING_SNAP_ID = "npm:@metamask/message-signing-snap";
29
+ /**
30
+ * Copy of `@metamask/snaps-rpc-methods` `deriveEntropyFromSeed` (SIP-6),
31
+ * returning raw private-key bytes instead of a `0x`-prefixed hex string.
32
+ *
33
+ * @param options - Derivation options.
34
+ * @param options.seed - BIP-39 mnemonic seed.
35
+ * @param options.input - SIP-6 input (snap ID for `snap_getEntropy`).
36
+ * @param options.salt - Optional salt. Internal auth uses `''`.
37
+ * @returns 32-byte private key.
38
+ */
39
+ export declare function deriveSip6PrivateKey({ seed, input, salt, }: {
40
+ seed: Uint8Array;
41
+ input: string;
42
+ salt?: string;
43
+ }): Promise<Uint8Array>;
44
+ /**
45
+ * Derives the message-signing private key via SIP-6, matching
46
+ * `snap_getEntropy` for the message-signing snap with empty salt
47
+ * (internal `metamask` origin).
48
+ *
49
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
50
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
51
+ * @returns 32-byte private key.
52
+ */
53
+ export declare function deriveMessageSigningPrivateKey(seed: Uint8Array, salt?: string): Promise<Uint8Array>;
54
+ /**
55
+ * Copy of message-signing-snap `getPublicEntropyKey`: secp256k1 pubkey hex
56
+ * for the SIP-6 message-signing private key.
57
+ *
58
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
59
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
60
+ * @returns Public key hex with `0x` prefix.
61
+ */
62
+ export declare function getMessageSigningPublicKey(seed: Uint8Array, salt?: string): Promise<string>;
63
+ /**
64
+ * Copy of message-signing-snap `signMessageWithEntropyKey`: sha256(message)
65
+ * then compact secp256k1 signature.
66
+ *
67
+ * @param message - Message to sign (must be validated by the caller).
68
+ * @param seed - BIP-39 mnemonic seed from an HD keyring.
69
+ * @param salt - Optional SIP-6 salt. Auth / user-storage use `''`.
70
+ * @returns Compact secp256k1 signature hex with `0x` prefix.
71
+ */
72
+ export declare function signMessageWithMessageSigningKey(message: string, seed: Uint8Array, salt?: string): Promise<string>;
73
+ //# sourceMappingURL=message-signing.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-signing.d.mts","sourceRoot":"","sources":["../../../src/shared/utils/message-signing.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB,uCAAuC,CAAC;AA+C5E;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,IAAI,EACJ,KAAK,EACL,IAAS,GACV,EAAE;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,UAAU,EAChB,IAAI,SAAK,GACR,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,UAAU,EAChB,IAAI,SAAK,GACR,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,EAChB,IAAI,SAAK,GACR,OAAO,CAAC,MAAM,CAAC,CAKjB"}