@digitaldefiance/ecies-lib 4.4.11 → 4.4.14

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 (589) hide show
  1. package/package.json +6 -4
  2. package/src/builders/ecies-builder.d.ts +18 -0
  3. package/src/builders/ecies-builder.d.ts.map +1 -0
  4. package/src/builders/ecies-builder.js +30 -0
  5. package/src/builders/ecies-builder.js.map +1 -0
  6. package/src/builders/index.d.ts +6 -0
  7. package/src/builders/index.d.ts.map +1 -0
  8. package/src/builders/{index.ts → index.js} +1 -1
  9. package/src/builders/index.js.map +1 -0
  10. package/src/builders/member-builder.d.ts +51 -0
  11. package/src/builders/member-builder.d.ts.map +1 -0
  12. package/src/builders/member-builder.js +97 -0
  13. package/src/builders/member-builder.js.map +1 -0
  14. package/src/constants.d.ts +60 -0
  15. package/src/constants.d.ts.map +1 -0
  16. package/src/constants.js +446 -0
  17. package/src/constants.js.map +1 -0
  18. package/src/core/errors/crypto-error.d.ts +34 -0
  19. package/src/core/errors/crypto-error.d.ts.map +1 -0
  20. package/src/core/errors/crypto-error.js +56 -0
  21. package/src/core/errors/crypto-error.js.map +1 -0
  22. package/src/core/index.d.ts +6 -0
  23. package/src/core/index.d.ts.map +1 -0
  24. package/src/core/{index.ts → index.js} +1 -1
  25. package/src/core/index.js.map +1 -0
  26. package/src/core/types/result.d.ts +16 -0
  27. package/src/core/types/result.d.ts.map +1 -0
  28. package/src/core/types/result.js +12 -0
  29. package/src/core/types/result.js.map +1 -0
  30. package/src/email-string.d.ts +42 -0
  31. package/src/email-string.d.ts.map +1 -0
  32. package/src/email-string.js +67 -0
  33. package/src/email-string.js.map +1 -0
  34. package/src/enumerations/disposed-error-type.d.ts +12 -0
  35. package/src/enumerations/disposed-error-type.d.ts.map +1 -0
  36. package/src/enumerations/disposed-error-type.js +13 -0
  37. package/src/enumerations/disposed-error-type.js.map +1 -0
  38. package/src/enumerations/ecies-cipher-suite.d.ts +4 -0
  39. package/src/enumerations/ecies-cipher-suite.d.ts.map +1 -0
  40. package/src/enumerations/ecies-cipher-suite.js +6 -0
  41. package/src/enumerations/ecies-cipher-suite.js.map +1 -0
  42. package/src/enumerations/ecies-encryption-type.d.ts +11 -0
  43. package/src/enumerations/ecies-encryption-type.d.ts.map +1 -0
  44. package/src/enumerations/ecies-encryption-type.js +27 -0
  45. package/src/enumerations/ecies-encryption-type.js.map +1 -0
  46. package/src/enumerations/ecies-error-type.d.ts +44 -0
  47. package/src/enumerations/ecies-error-type.d.ts.map +1 -0
  48. package/src/enumerations/ecies-error-type.js +45 -0
  49. package/src/enumerations/ecies-error-type.js.map +1 -0
  50. package/src/enumerations/ecies-string-key.d.ts +192 -0
  51. package/src/enumerations/ecies-string-key.d.ts.map +1 -0
  52. package/src/enumerations/ecies-string-key.js +199 -0
  53. package/src/enumerations/ecies-string-key.js.map +1 -0
  54. package/src/enumerations/ecies-version.d.ts +4 -0
  55. package/src/enumerations/ecies-version.d.ts.map +1 -0
  56. package/src/enumerations/ecies-version.js +5 -0
  57. package/src/enumerations/ecies-version.js.map +1 -0
  58. package/src/enumerations/guid-brand-type.d.ts +27 -0
  59. package/src/enumerations/guid-brand-type.d.ts.map +1 -0
  60. package/src/enumerations/guid-brand-type.js +28 -0
  61. package/src/enumerations/guid-brand-type.js.map +1 -0
  62. package/src/enumerations/guid-error-type.d.ts +7 -0
  63. package/src/enumerations/guid-error-type.d.ts.map +1 -0
  64. package/src/enumerations/guid-error-type.js +8 -0
  65. package/src/enumerations/guid-error-type.js.map +1 -0
  66. package/src/enumerations/id-provider-error-type.d.ts +43 -0
  67. package/src/enumerations/id-provider-error-type.d.ts.map +1 -0
  68. package/src/enumerations/id-provider-error-type.js +44 -0
  69. package/src/enumerations/id-provider-error-type.js.map +1 -0
  70. package/src/enumerations/index.d.ts +18 -0
  71. package/src/enumerations/index.d.ts.map +1 -0
  72. package/src/enumerations/{index.ts → index.js} +1 -0
  73. package/src/enumerations/index.js.map +1 -0
  74. package/src/enumerations/invalid-email-type.d.ts +6 -0
  75. package/src/enumerations/invalid-email-type.d.ts.map +1 -0
  76. package/src/enumerations/invalid-email-type.js +7 -0
  77. package/src/enumerations/invalid-email-type.js.map +1 -0
  78. package/src/enumerations/length-encoding-type.d.ts +7 -0
  79. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  80. package/src/enumerations/length-encoding-type.js +8 -0
  81. package/src/enumerations/length-encoding-type.js.map +1 -0
  82. package/src/enumerations/length-error-type.d.ts +6 -0
  83. package/src/enumerations/length-error-type.d.ts.map +1 -0
  84. package/src/enumerations/length-error-type.js +7 -0
  85. package/src/enumerations/length-error-type.js.map +1 -0
  86. package/src/enumerations/member-error-type.d.ts +87 -0
  87. package/src/enumerations/member-error-type.d.ts.map +1 -0
  88. package/src/enumerations/member-error-type.js +88 -0
  89. package/src/enumerations/member-error-type.js.map +1 -0
  90. package/src/enumerations/{member-type.ts → member-type.d.ts} +6 -7
  91. package/src/enumerations/member-type.d.ts.map +1 -0
  92. package/src/enumerations/member-type.js +16 -0
  93. package/src/enumerations/member-type.js.map +1 -0
  94. package/src/enumerations/password-login-error-type.d.ts +5 -0
  95. package/src/enumerations/password-login-error-type.d.ts.map +1 -0
  96. package/src/enumerations/password-login-error-type.js +6 -0
  97. package/src/enumerations/password-login-error-type.js.map +1 -0
  98. package/src/enumerations/pbkdf2-error-type.d.ts +6 -0
  99. package/src/enumerations/pbkdf2-error-type.d.ts.map +1 -0
  100. package/src/enumerations/pbkdf2-error-type.js +7 -0
  101. package/src/enumerations/pbkdf2-error-type.js.map +1 -0
  102. package/src/enumerations/pbkdf2-profile.d.ts +6 -0
  103. package/src/enumerations/pbkdf2-profile.d.ts.map +1 -0
  104. package/src/enumerations/pbkdf2-profile.js +7 -0
  105. package/src/enumerations/pbkdf2-profile.js.map +1 -0
  106. package/src/enumerations/secure-storage-error-type.d.ts +6 -0
  107. package/src/enumerations/secure-storage-error-type.d.ts.map +1 -0
  108. package/src/enumerations/secure-storage-error-type.js +7 -0
  109. package/src/enumerations/secure-storage-error-type.js.map +1 -0
  110. package/src/errors/disposed.d.ts +22 -0
  111. package/src/errors/disposed.d.ts.map +1 -0
  112. package/src/errors/disposed.js +28 -0
  113. package/src/errors/disposed.js.map +1 -0
  114. package/src/errors/ecies.d.ts +52 -0
  115. package/src/errors/ecies.d.ts.map +1 -0
  116. package/src/errors/ecies.js +78 -0
  117. package/src/errors/ecies.js.map +1 -0
  118. package/src/errors/guid.d.ts +49 -0
  119. package/src/errors/guid.d.ts.map +1 -0
  120. package/src/errors/guid.js +96 -0
  121. package/src/errors/guid.js.map +1 -0
  122. package/src/errors/id-provider.d.ts +23 -0
  123. package/src/errors/id-provider.d.ts.map +1 -0
  124. package/src/errors/id-provider.js +29 -0
  125. package/src/errors/id-provider.js.map +1 -0
  126. package/src/errors/{index.ts → index.d.ts} +1 -0
  127. package/src/errors/index.d.ts.map +1 -0
  128. package/src/errors/index.js +10 -0
  129. package/src/errors/index.js.map +1 -0
  130. package/src/errors/invalid-email.d.ts +8 -0
  131. package/src/errors/invalid-email.d.ts.map +1 -0
  132. package/src/errors/invalid-email.js +15 -0
  133. package/src/errors/invalid-email.js.map +1 -0
  134. package/src/errors/length.d.ts +7 -0
  135. package/src/errors/length.d.ts.map +1 -0
  136. package/src/errors/length.js +11 -0
  137. package/src/errors/length.js.map +1 -0
  138. package/src/errors/member.d.ts +7 -0
  139. package/src/errors/member.d.ts.map +1 -0
  140. package/src/errors/member.js +11 -0
  141. package/src/errors/member.js.map +1 -0
  142. package/src/errors/pbkdf2.d.ts +7 -0
  143. package/src/errors/pbkdf2.d.ts.map +1 -0
  144. package/src/errors/pbkdf2.js +11 -0
  145. package/src/errors/pbkdf2.js.map +1 -0
  146. package/src/errors/secure-storage.d.ts +7 -0
  147. package/src/errors/secure-storage.d.ts.map +1 -0
  148. package/src/errors/secure-storage.js +12 -0
  149. package/src/errors/secure-storage.js.map +1 -0
  150. package/src/errors/simple-ecies.d.ts +6 -0
  151. package/src/errors/simple-ecies.d.ts.map +1 -0
  152. package/src/errors/simple-ecies.js +12 -0
  153. package/src/errors/simple-ecies.js.map +1 -0
  154. package/src/errors/simple-test-error.d.ts +4 -0
  155. package/src/errors/simple-test-error.d.ts.map +1 -0
  156. package/src/errors/simple-test-error.js +7 -0
  157. package/src/errors/simple-test-error.js.map +1 -0
  158. package/src/i18n-setup.d.ts +32 -0
  159. package/src/i18n-setup.d.ts.map +1 -0
  160. package/src/i18n-setup.js +101 -0
  161. package/src/i18n-setup.js.map +1 -0
  162. package/src/index.d.ts +80 -0
  163. package/src/index.d.ts.map +1 -0
  164. package/src/{index.ts → index.js} +7 -64
  165. package/src/index.js.map +1 -0
  166. package/src/interfaces/checksum-config.d.ts +5 -0
  167. package/src/interfaces/checksum-config.d.ts.map +1 -0
  168. package/src/interfaces/checksum-config.js +2 -0
  169. package/src/interfaces/checksum-config.js.map +1 -0
  170. package/src/interfaces/checksum-consts.d.ts +11 -0
  171. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  172. package/src/interfaces/checksum-consts.js +2 -0
  173. package/src/interfaces/checksum-consts.js.map +1 -0
  174. package/src/interfaces/configuration-provenance.d.ts +43 -0
  175. package/src/interfaces/configuration-provenance.d.ts.map +1 -0
  176. package/src/interfaces/configuration-provenance.js +3 -0
  177. package/src/interfaces/configuration-provenance.js.map +1 -0
  178. package/src/interfaces/constants.d.ts +70 -0
  179. package/src/interfaces/constants.d.ts.map +1 -0
  180. package/src/interfaces/constants.js +2 -0
  181. package/src/interfaces/constants.js.map +1 -0
  182. package/src/interfaces/ecies-config.d.ts +9 -0
  183. package/src/interfaces/ecies-config.d.ts.map +1 -0
  184. package/src/interfaces/ecies-config.js +2 -0
  185. package/src/interfaces/ecies-config.js.map +1 -0
  186. package/src/interfaces/ecies-consts.d.ts +61 -0
  187. package/src/interfaces/ecies-consts.d.ts.map +1 -0
  188. package/src/interfaces/ecies-consts.js +2 -0
  189. package/src/interfaces/ecies-consts.js.map +1 -0
  190. package/src/interfaces/ecies-file-service.d.ts +7 -0
  191. package/src/interfaces/ecies-file-service.d.ts.map +1 -0
  192. package/src/interfaces/ecies-file-service.js +2 -0
  193. package/src/interfaces/ecies-file-service.js.map +1 -0
  194. package/src/interfaces/encrypted-chunk.d.ts +55 -0
  195. package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
  196. package/src/interfaces/encrypted-chunk.js +12 -0
  197. package/src/interfaces/encrypted-chunk.js.map +1 -0
  198. package/src/interfaces/encryption-state.d.ts +18 -0
  199. package/src/interfaces/encryption-state.d.ts.map +1 -0
  200. package/src/interfaces/encryption-state.js +2 -0
  201. package/src/interfaces/encryption-state.js.map +1 -0
  202. package/src/interfaces/frontend-member-operational.d.ts +51 -0
  203. package/src/interfaces/frontend-member-operational.d.ts.map +1 -0
  204. package/src/interfaces/frontend-member-operational.js +2 -0
  205. package/src/interfaces/frontend-member-operational.js.map +1 -0
  206. package/src/interfaces/guid.d.ts +78 -0
  207. package/src/interfaces/guid.d.ts.map +1 -0
  208. package/src/interfaces/guid.js +2 -0
  209. package/src/interfaces/guid.js.map +1 -0
  210. package/src/interfaces/id-provider.d.ts +107 -0
  211. package/src/interfaces/id-provider.d.ts.map +1 -0
  212. package/src/interfaces/id-provider.js +52 -0
  213. package/src/interfaces/id-provider.js.map +1 -0
  214. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  215. package/src/interfaces/index.d.ts.map +1 -0
  216. package/src/interfaces/index.js +13 -0
  217. package/src/interfaces/index.js.map +1 -0
  218. package/src/interfaces/invariant.d.ts +46 -0
  219. package/src/interfaces/invariant.d.ts.map +1 -0
  220. package/src/interfaces/invariant.js +18 -0
  221. package/src/interfaces/invariant.js.map +1 -0
  222. package/src/interfaces/library-error.d.ts +23 -0
  223. package/src/interfaces/library-error.d.ts.map +1 -0
  224. package/src/interfaces/library-error.js +2 -0
  225. package/src/interfaces/library-error.js.map +1 -0
  226. package/src/interfaces/{member-storage.ts → member-storage.d.ts} +10 -11
  227. package/src/interfaces/member-storage.d.ts.map +1 -0
  228. package/src/interfaces/member-storage.js +2 -0
  229. package/src/interfaces/member-storage.js.map +1 -0
  230. package/src/interfaces/{member-with-mnemonic.ts → member-with-mnemonic.d.ts} +3 -3
  231. package/src/interfaces/member-with-mnemonic.d.ts.map +1 -0
  232. package/src/interfaces/member-with-mnemonic.js +2 -0
  233. package/src/interfaces/member-with-mnemonic.js.map +1 -0
  234. package/src/interfaces/member.d.ts +55 -0
  235. package/src/interfaces/member.d.ts.map +1 -0
  236. package/src/interfaces/member.js +2 -0
  237. package/src/interfaces/member.js.map +1 -0
  238. package/src/interfaces/multi-recipient-chunk.d.ts +54 -0
  239. package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
  240. package/src/interfaces/multi-recipient-chunk.js +11 -0
  241. package/src/interfaces/multi-recipient-chunk.js.map +1 -0
  242. package/src/interfaces/pbkdf2-config.d.ts +7 -0
  243. package/src/interfaces/pbkdf2-config.d.ts.map +1 -0
  244. package/src/interfaces/pbkdf2-config.js +2 -0
  245. package/src/interfaces/pbkdf2-config.js.map +1 -0
  246. package/src/interfaces/pbkdf2-consts.d.ts +9 -0
  247. package/src/interfaces/pbkdf2-consts.d.ts.map +1 -0
  248. package/src/interfaces/pbkdf2-consts.js +2 -0
  249. package/src/interfaces/pbkdf2-consts.js.map +1 -0
  250. package/src/interfaces/pbkdf2-result.d.ts +6 -0
  251. package/src/interfaces/pbkdf2-result.d.ts.map +1 -0
  252. package/src/interfaces/pbkdf2-result.js +2 -0
  253. package/src/interfaces/pbkdf2-result.js.map +1 -0
  254. package/src/interfaces/stream-config.d.ts +14 -0
  255. package/src/interfaces/stream-config.d.ts.map +1 -0
  256. package/src/interfaces/stream-config.js +8 -0
  257. package/src/interfaces/stream-config.js.map +1 -0
  258. package/src/interfaces/stream-header.d.ts +29 -0
  259. package/src/interfaces/stream-header.d.ts.map +1 -0
  260. package/src/interfaces/stream-header.js +9 -0
  261. package/src/interfaces/stream-header.js.map +1 -0
  262. package/src/interfaces/stream-progress.d.ts +33 -0
  263. package/src/interfaces/stream-progress.d.ts.map +1 -0
  264. package/src/interfaces/stream-progress.js +2 -0
  265. package/src/interfaces/stream-progress.js.map +1 -0
  266. package/src/lib/configuration-provenance-utils.d.ts +11 -0
  267. package/src/lib/configuration-provenance-utils.d.ts.map +1 -0
  268. package/src/lib/configuration-provenance-utils.js +26 -0
  269. package/src/lib/configuration-provenance-utils.js.map +1 -0
  270. package/src/lib/crypto-container.d.ts +25 -0
  271. package/src/lib/crypto-container.d.ts.map +1 -0
  272. package/src/lib/crypto-container.js +46 -0
  273. package/src/lib/crypto-container.js.map +1 -0
  274. package/src/lib/guid.d.ts +344 -0
  275. package/src/lib/guid.d.ts.map +1 -0
  276. package/src/lib/guid.js +914 -0
  277. package/src/lib/guid.js.map +1 -0
  278. package/src/lib/id-providers/custom-provider.d.ts +46 -0
  279. package/src/lib/id-providers/custom-provider.d.ts.map +1 -0
  280. package/src/lib/id-providers/custom-provider.js +85 -0
  281. package/src/lib/id-providers/custom-provider.js.map +1 -0
  282. package/src/lib/id-providers/guidv4-provider.d.ts +56 -0
  283. package/src/lib/id-providers/guidv4-provider.d.ts.map +1 -0
  284. package/src/lib/id-providers/guidv4-provider.js +122 -0
  285. package/src/lib/id-providers/guidv4-provider.js.map +1 -0
  286. package/src/lib/id-providers/{index.ts → index.d.ts} +5 -6
  287. package/src/lib/id-providers/index.d.ts.map +1 -0
  288. package/src/lib/id-providers/index.js +29 -0
  289. package/src/lib/id-providers/index.js.map +1 -0
  290. package/src/lib/id-providers/objectid-provider.d.ts +43 -0
  291. package/src/lib/id-providers/objectid-provider.d.ts.map +1 -0
  292. package/src/lib/id-providers/objectid-provider.js +104 -0
  293. package/src/lib/id-providers/objectid-provider.js.map +1 -0
  294. package/src/lib/id-providers/uuid-provider.d.ts +52 -0
  295. package/src/lib/id-providers/uuid-provider.d.ts.map +1 -0
  296. package/src/lib/id-providers/uuid-provider.js +110 -0
  297. package/src/lib/id-providers/uuid-provider.js.map +1 -0
  298. package/src/lib/index.d.ts +6 -0
  299. package/src/lib/index.d.ts.map +1 -0
  300. package/src/lib/{index.ts → index.js} +2 -2
  301. package/src/lib/index.js.map +1 -0
  302. package/src/lib/invariant-validator.d.ts +59 -0
  303. package/src/lib/invariant-validator.d.ts.map +1 -0
  304. package/src/lib/invariant-validator.js +97 -0
  305. package/src/lib/invariant-validator.js.map +1 -0
  306. package/src/lib/invariants/encryption-algorithm-consistency.d.ts +17 -0
  307. package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +1 -0
  308. package/src/lib/invariants/encryption-algorithm-consistency.js +49 -0
  309. package/src/lib/invariants/encryption-algorithm-consistency.js.map +1 -0
  310. package/src/lib/invariants/index.d.ts +4 -0
  311. package/src/lib/invariants/index.d.ts.map +1 -0
  312. package/src/lib/invariants/{index.ts → index.js} +1 -0
  313. package/src/lib/invariants/index.js.map +1 -0
  314. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +16 -0
  315. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +1 -0
  316. package/src/lib/invariants/pbkdf2-profiles-validity.js +58 -0
  317. package/src/lib/invariants/pbkdf2-profiles-validity.js.map +1 -0
  318. package/src/lib/invariants/recipient-id-consistency.d.ts +18 -0
  319. package/src/lib/invariants/recipient-id-consistency.d.ts.map +1 -0
  320. package/src/lib/invariants/recipient-id-consistency.js +31 -0
  321. package/src/lib/invariants/recipient-id-consistency.js.map +1 -0
  322. package/src/lib/multi-recipient-chunk-utils.d.ts +38 -0
  323. package/src/lib/multi-recipient-chunk-utils.d.ts.map +1 -0
  324. package/src/lib/multi-recipient-chunk-utils.js +41 -0
  325. package/src/lib/multi-recipient-chunk-utils.js.map +1 -0
  326. package/src/member.d.ts +92 -0
  327. package/src/member.d.ts.map +1 -0
  328. package/src/member.js +322 -0
  329. package/src/member.js.map +1 -0
  330. package/src/{pbkdf2-profiles.ts → pbkdf2-profiles.d.ts} +2 -2
  331. package/src/pbkdf2-profiles.d.ts.map +1 -0
  332. package/src/pbkdf2-profiles.js +2 -0
  333. package/src/pbkdf2-profiles.js.map +1 -0
  334. package/src/phone-number.d.ts +6 -0
  335. package/src/phone-number.d.ts.map +1 -0
  336. package/src/phone-number.js +18 -0
  337. package/src/phone-number.js.map +1 -0
  338. package/src/regexes.d.ts +7 -0
  339. package/src/regexes.d.ts.map +1 -0
  340. package/src/regexes.js +7 -0
  341. package/src/regexes.js.map +1 -0
  342. package/src/secure-buffer.d.ts +61 -0
  343. package/src/secure-buffer.d.ts.map +1 -0
  344. package/src/secure-buffer.js +201 -0
  345. package/src/secure-buffer.js.map +1 -0
  346. package/src/secure-string.d.ts +46 -0
  347. package/src/secure-string.d.ts.map +1 -0
  348. package/src/secure-string.js +206 -0
  349. package/src/secure-string.js.map +1 -0
  350. package/src/services/aes-gcm.d.ts +57 -0
  351. package/src/services/aes-gcm.d.ts.map +1 -0
  352. package/src/services/aes-gcm.js +142 -0
  353. package/src/services/aes-gcm.js.map +1 -0
  354. package/src/services/chunk-processor.d.ts +31 -0
  355. package/src/services/chunk-processor.d.ts.map +1 -0
  356. package/src/services/chunk-processor.js +145 -0
  357. package/src/services/chunk-processor.js.map +1 -0
  358. package/src/services/ecies/crypto-core.d.ts +72 -0
  359. package/src/services/ecies/crypto-core.d.ts.map +1 -0
  360. package/src/services/ecies/crypto-core.js +205 -0
  361. package/src/services/ecies/crypto-core.js.map +1 -0
  362. package/src/services/ecies/example.d.ts +25 -0
  363. package/src/services/ecies/example.d.ts.map +1 -0
  364. package/src/services/ecies/example.js +121 -0
  365. package/src/services/ecies/example.js.map +1 -0
  366. package/src/services/ecies/file.d.ts +18 -0
  367. package/src/services/ecies/file.d.ts.map +1 -0
  368. package/src/services/ecies/file.js +106 -0
  369. package/src/services/ecies/file.js.map +1 -0
  370. package/src/services/ecies/index.d.ts +38 -0
  371. package/src/services/ecies/index.d.ts.map +1 -0
  372. package/src/services/ecies/{index.ts → index.js} +1 -2
  373. package/src/services/ecies/index.js.map +1 -0
  374. package/src/services/ecies/integration.d.ts +59 -0
  375. package/src/services/ecies/integration.d.ts.map +1 -0
  376. package/src/services/ecies/integration.js +167 -0
  377. package/src/services/ecies/integration.js.map +1 -0
  378. package/src/services/ecies/interfaces.d.ts +54 -0
  379. package/src/services/ecies/interfaces.d.ts.map +1 -0
  380. package/src/services/ecies/interfaces.js +5 -0
  381. package/src/services/ecies/interfaces.js.map +1 -0
  382. package/src/services/ecies/manual-test.d.ts +29 -0
  383. package/src/services/ecies/manual-test.d.ts.map +1 -0
  384. package/src/services/ecies/manual-test.js +163 -0
  385. package/src/services/ecies/manual-test.js.map +1 -0
  386. package/src/services/ecies/multi-recipient.d.ts +56 -0
  387. package/src/services/ecies/multi-recipient.d.ts.map +1 -0
  388. package/src/services/ecies/multi-recipient.js +344 -0
  389. package/src/services/ecies/multi-recipient.js.map +1 -0
  390. package/src/services/ecies/service.d.ts +120 -0
  391. package/src/services/ecies/service.d.ts.map +1 -0
  392. package/src/services/ecies/service.js +210 -0
  393. package/src/services/ecies/service.js.map +1 -0
  394. package/src/services/ecies/signature.d.ts +27 -0
  395. package/src/services/ecies/signature.d.ts.map +1 -0
  396. package/src/services/ecies/signature.js +72 -0
  397. package/src/services/ecies/signature.js.map +1 -0
  398. package/src/services/ecies/single-recipient.d.ts +46 -0
  399. package/src/services/ecies/single-recipient.d.ts.map +1 -0
  400. package/src/services/ecies/single-recipient.js +322 -0
  401. package/src/services/ecies/single-recipient.js.map +1 -0
  402. package/src/services/encryption-stream.d.ts +71 -0
  403. package/src/services/encryption-stream.d.ts.map +1 -0
  404. package/src/services/encryption-stream.js +295 -0
  405. package/src/services/encryption-stream.js.map +1 -0
  406. package/src/services/index.d.ts +11 -0
  407. package/src/services/index.d.ts.map +1 -0
  408. package/src/services/{index.ts → index.js} +1 -0
  409. package/src/services/index.js.map +1 -0
  410. package/src/services/multi-recipient-processor.d.ts +35 -0
  411. package/src/services/multi-recipient-processor.d.ts.map +1 -0
  412. package/src/services/multi-recipient-processor.js +289 -0
  413. package/src/services/multi-recipient-processor.js.map +1 -0
  414. package/src/services/password-login.d.ts +47 -0
  415. package/src/services/password-login.d.ts.map +1 -0
  416. package/src/services/password-login.js +115 -0
  417. package/src/services/password-login.js.map +1 -0
  418. package/src/services/pbkdf2.d.ts +54 -0
  419. package/src/services/pbkdf2.d.ts.map +1 -0
  420. package/src/services/pbkdf2.js +108 -0
  421. package/src/services/pbkdf2.js.map +1 -0
  422. package/src/services/progress-tracker.d.ts +23 -0
  423. package/src/services/progress-tracker.d.ts.map +1 -0
  424. package/src/services/progress-tracker.js +103 -0
  425. package/src/services/progress-tracker.js.map +1 -0
  426. package/src/services/resumable-encryption.d.ts +19 -0
  427. package/src/services/resumable-encryption.d.ts.map +1 -0
  428. package/src/services/resumable-encryption.js +105 -0
  429. package/src/services/resumable-encryption.js.map +1 -0
  430. package/src/services/xor.d.ts +37 -0
  431. package/src/services/xor.d.ts.map +1 -0
  432. package/src/services/xor.js +63 -0
  433. package/src/services/xor.js.map +1 -0
  434. package/src/test-mocks/index.d.ts +2 -0
  435. package/src/test-mocks/index.d.ts.map +1 -0
  436. package/src/test-mocks/index.js +2 -0
  437. package/src/test-mocks/index.js.map +1 -0
  438. package/src/test-mocks/mock-frontend-member.d.ts +85 -0
  439. package/src/test-mocks/mock-frontend-member.d.ts.map +1 -0
  440. package/src/test-mocks/mock-frontend-member.js +190 -0
  441. package/src/test-mocks/mock-frontend-member.js.map +1 -0
  442. package/src/testing.d.ts +2 -0
  443. package/src/testing.d.ts.map +1 -0
  444. package/src/{testing.ts → testing.js} +1 -0
  445. package/src/testing.js.map +1 -0
  446. package/src/translations/de.d.ts +4 -0
  447. package/src/translations/de.d.ts.map +1 -0
  448. package/src/translations/{de.ts → de.js} +56 -112
  449. package/src/translations/de.js.map +1 -0
  450. package/src/translations/en-US.d.ts +4 -0
  451. package/src/translations/en-US.d.ts.map +1 -0
  452. package/src/translations/{en-US.ts → en-US.js} +58 -116
  453. package/src/translations/en-US.js.map +1 -0
  454. package/src/translations/es.d.ts +4 -0
  455. package/src/translations/es.d.ts.map +1 -0
  456. package/src/translations/{es.ts → es.js} +67 -134
  457. package/src/translations/es.js.map +1 -0
  458. package/src/translations/fr.d.ts +4 -0
  459. package/src/translations/fr.d.ts.map +1 -0
  460. package/src/translations/{fr.ts → fr.js} +64 -129
  461. package/src/translations/fr.js.map +1 -0
  462. package/src/translations/ja.d.ts +4 -0
  463. package/src/translations/ja.d.ts.map +1 -0
  464. package/src/translations/{ja.ts → ja.js} +55 -111
  465. package/src/translations/ja.js.map +1 -0
  466. package/src/translations/uk.d.ts +4 -0
  467. package/src/translations/uk.d.ts.map +1 -0
  468. package/src/translations/{uk.ts → uk.js} +67 -132
  469. package/src/translations/uk.js.map +1 -0
  470. package/src/translations/zh-cn.d.ts +4 -0
  471. package/src/translations/zh-cn.d.ts.map +1 -0
  472. package/src/translations/{zh-cn.ts → zh-cn.js} +29 -60
  473. package/src/translations/zh-cn.js.map +1 -0
  474. package/src/types/deep-partial.d.ts +4 -0
  475. package/src/types/deep-partial.d.ts.map +1 -0
  476. package/src/types/deep-partial.js +2 -0
  477. package/src/types/deep-partial.js.map +1 -0
  478. package/src/{types.ts → types.d.ts} +7 -15
  479. package/src/types.d.ts.map +1 -0
  480. package/src/types.js +2 -0
  481. package/src/types.js.map +1 -0
  482. package/src/utils/encryption-type-utils.d.ts +29 -0
  483. package/src/utils/encryption-type-utils.d.ts.map +1 -0
  484. package/src/utils/encryption-type-utils.js +61 -0
  485. package/src/utils/encryption-type-utils.js.map +1 -0
  486. package/src/utils.d.ts +68 -0
  487. package/src/utils.d.ts.map +1 -0
  488. package/src/utils.js +273 -0
  489. package/src/utils.js.map +1 -0
  490. package/LICENSE +0 -21
  491. package/src/builders/ecies-builder.ts +0 -39
  492. package/src/builders/member-builder.ts +0 -155
  493. package/src/constants.ts +0 -609
  494. package/src/core/errors/crypto-error.ts +0 -78
  495. package/src/core/types/result.ts +0 -19
  496. package/src/email-string.ts +0 -82
  497. package/src/enumerations/disposed-error-type.ts +0 -11
  498. package/src/enumerations/ecies-cipher-suite.ts +0 -4
  499. package/src/enumerations/ecies-encryption-type.ts +0 -41
  500. package/src/enumerations/ecies-error-type.ts +0 -43
  501. package/src/enumerations/ecies-string-key.ts +0 -205
  502. package/src/enumerations/ecies-version.ts +0 -3
  503. package/src/enumerations/guid-brand-type.ts +0 -26
  504. package/src/enumerations/guid-error-type.ts +0 -6
  505. package/src/enumerations/id-provider-error-type.ts +0 -50
  506. package/src/enumerations/invalid-email-type.ts +0 -5
  507. package/src/enumerations/length-encoding-type.ts +0 -6
  508. package/src/enumerations/length-error-type.ts +0 -5
  509. package/src/enumerations/member-error-type.ts +0 -106
  510. package/src/enumerations/password-login-error-type.ts +0 -4
  511. package/src/enumerations/pbkdf2-error-type.ts +0 -5
  512. package/src/enumerations/pbkdf2-profile.ts +0 -5
  513. package/src/enumerations/secure-storage-error-type.ts +0 -5
  514. package/src/errors/disposed.ts +0 -36
  515. package/src/errors/ecies.ts +0 -153
  516. package/src/errors/guid.ts +0 -130
  517. package/src/errors/id-provider.ts +0 -40
  518. package/src/errors/invalid-email.ts +0 -23
  519. package/src/errors/length.ts +0 -19
  520. package/src/errors/member.ts +0 -20
  521. package/src/errors/pbkdf2.ts +0 -20
  522. package/src/errors/secure-storage.ts +0 -17
  523. package/src/errors/simple-ecies.ts +0 -21
  524. package/src/errors/simple-test-error.ts +0 -6
  525. package/src/i18n-setup.ts +0 -130
  526. package/src/interfaces/checksum-config.ts +0 -4
  527. package/src/interfaces/checksum-consts.ts +0 -13
  528. package/src/interfaces/configuration-provenance.ts +0 -54
  529. package/src/interfaces/constants.ts +0 -75
  530. package/src/interfaces/ecies-config.ts +0 -8
  531. package/src/interfaces/ecies-consts.ts +0 -74
  532. package/src/interfaces/ecies-file-service.ts +0 -6
  533. package/src/interfaces/encrypted-chunk.ts +0 -64
  534. package/src/interfaces/encryption-state.ts +0 -19
  535. package/src/interfaces/frontend-member-operational.ts +0 -77
  536. package/src/interfaces/guid.ts +0 -86
  537. package/src/interfaces/id-provider.ts +0 -152
  538. package/src/interfaces/invariant.ts +0 -60
  539. package/src/interfaces/library-error.ts +0 -23
  540. package/src/interfaces/member.ts +0 -84
  541. package/src/interfaces/multi-recipient-chunk.ts +0 -61
  542. package/src/interfaces/pbkdf2-config.ts +0 -6
  543. package/src/interfaces/pbkdf2-consts.ts +0 -10
  544. package/src/interfaces/pbkdf2-result.ts +0 -5
  545. package/src/interfaces/stream-config.ts +0 -17
  546. package/src/interfaces/stream-header.ts +0 -34
  547. package/src/interfaces/stream-progress.ts +0 -31
  548. package/src/lib/configuration-provenance-utils.ts +0 -29
  549. package/src/lib/crypto-container.ts +0 -64
  550. package/src/lib/guid.ts +0 -1097
  551. package/src/lib/id-providers/custom-provider.ts +0 -109
  552. package/src/lib/id-providers/guidv4-provider.ts +0 -141
  553. package/src/lib/id-providers/objectid-provider.ts +0 -125
  554. package/src/lib/id-providers/uuid-provider.ts +0 -133
  555. package/src/lib/invariant-validator.ts +0 -133
  556. package/src/lib/invariants/encryption-algorithm-consistency.ts +0 -73
  557. package/src/lib/invariants/pbkdf2-profiles-validity.ts +0 -78
  558. package/src/lib/invariants/recipient-id-consistency.ts +0 -46
  559. package/src/lib/multi-recipient-chunk-utils.ts +0 -63
  560. package/src/member.ts +0 -495
  561. package/src/phone-number.ts +0 -18
  562. package/src/regexes.ts +0 -10
  563. package/src/secure-buffer.ts +0 -226
  564. package/src/secure-string.ts +0 -244
  565. package/src/services/aes-gcm.ts +0 -220
  566. package/src/services/chunk-processor.ts +0 -188
  567. package/src/services/ecies/README.md +0 -147
  568. package/src/services/ecies/crypto-core.ts +0 -292
  569. package/src/services/ecies/example.ts +0 -185
  570. package/src/services/ecies/file.ts +0 -167
  571. package/src/services/ecies/integration.ts +0 -241
  572. package/src/services/ecies/interfaces.ts +0 -62
  573. package/src/services/ecies/manual-test.ts +0 -219
  574. package/src/services/ecies/multi-recipient.ts +0 -545
  575. package/src/services/ecies/service.ts +0 -370
  576. package/src/services/ecies/signature.ts +0 -93
  577. package/src/services/ecies/single-recipient.ts +0 -476
  578. package/src/services/encryption-stream.ts +0 -435
  579. package/src/services/multi-recipient-processor.ts +0 -377
  580. package/src/services/password-login.ts +0 -226
  581. package/src/services/pbkdf2.ts +0 -169
  582. package/src/services/progress-tracker.ts +0 -128
  583. package/src/services/resumable-encryption.ts +0 -135
  584. package/src/services/xor.ts +0 -65
  585. package/src/test-mocks/index.ts +0 -1
  586. package/src/test-mocks/mock-frontend-member.ts +0 -276
  587. package/src/types/deep-partial.ts +0 -11
  588. package/src/utils/encryption-type-utils.ts +0 -76
  589. package/src/utils.ts +0 -329
@@ -1,377 +0,0 @@
1
- import { ECIESService } from './ecies/service';
2
- import {
3
- IMultiRecipientChunk,
4
- IMultiRecipientChunkHeader,
5
- IRecipientHeader,
6
- IMultiRecipientConstants,
7
- getMultiRecipientConstants,
8
- } from '../interfaces/multi-recipient-chunk';
9
- import { EciesComponentId, getEciesI18nEngine } from '../i18n-setup';
10
- import { EciesStringKey } from '../enumerations';
11
- import { Constants } from '../constants';
12
- import { IConstants } from '../interfaces/constants';
13
- import { AESGCMService } from './aes-gcm';
14
- import { concatUint8Arrays } from '../utils';
15
-
16
- /**
17
- * Processes multi-recipient chunks using symmetric encryption.
18
- * Supports dynamic recipient ID sizes based on the configured ID provider.
19
- */
20
- export class MultiRecipientProcessor {
21
- private readonly recipientIdSize: number;
22
- private readonly constants: IMultiRecipientConstants;
23
-
24
- /**
25
- * Create a new multi-recipient processor.
26
- * @param ecies - ECIES service for key encryption
27
- * @param config - Configuration containing ID provider (defaults to global Constants)
28
- */
29
- constructor(
30
- private readonly ecies: ECIESService,
31
- private readonly config: IConstants = Constants
32
- ) {
33
- this.recipientIdSize = config.idProvider.byteLength;
34
- this.constants = getMultiRecipientConstants(this.recipientIdSize);
35
- }
36
-
37
- /**
38
- * Encrypt chunk for multiple recipients
39
- */
40
- async encryptChunk(
41
- data: Uint8Array,
42
- recipients: Array<{ id: Uint8Array; publicKey: Uint8Array }>,
43
- chunkIndex: number,
44
- isLast: boolean,
45
- symmetricKey: Uint8Array,
46
- senderPrivateKey?: Uint8Array,
47
- ): Promise<IMultiRecipientChunk> {
48
- // Validate inputs
49
- const engine = getEciesI18nEngine();
50
- if (recipients.length === 0 || recipients.length > this.constants.MAX_RECIPIENTS) {
51
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_InvalidRecipientCountTemplate, { count: recipients.length }));
52
- }
53
- if (symmetricKey.length !== 32) {
54
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_SymmetricKeyMust32Bytes));
55
- }
56
- if (chunkIndex < 0 || chunkIndex > 0xFFFFFFFF) {
57
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_InvalidChunkIndexTemplate, { index: chunkIndex }));
58
- }
59
-
60
- // Sign-then-Encrypt
61
- let dataToEncrypt = data;
62
- if (senderPrivateKey) {
63
- const signature = this.ecies.core.sign(senderPrivateKey, data);
64
- dataToEncrypt = concatUint8Arrays(signature, data);
65
- }
66
-
67
- if (dataToEncrypt.length > 0x7FFFFFFF) {
68
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_DataSizeExceedsMaximumTemplate, { size: dataToEncrypt.length }));
69
- }
70
-
71
- // Check for duplicate recipient IDs
72
- const seenIds = new Set<string>();
73
- for (const recipient of recipients) {
74
- const idStr = Buffer.from(recipient.id).toString('hex');
75
- if (seenIds.has(idStr)) {
76
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_DuplicateRecipientId));
77
- }
78
- seenIds.add(idStr);
79
- }
80
-
81
- // Generate ONE ephemeral key pair for all recipients
82
- const ephemeralKeyPair = await this.ecies.core.generateEphemeralKeyPair();
83
-
84
- // Build recipient headers
85
- const recipientHeaders: IRecipientHeader[] = [];
86
- for (const recipient of recipients) {
87
- if (recipient.id.length !== this.recipientIdSize) {
88
- throw new Error(
89
- `Recipient ID must be ${this.recipientIdSize} bytes (configured by ID provider), got ${recipient.id.length} bytes`
90
- );
91
- }
92
-
93
- // Use Recipient ID as AAD for key encryption
94
- const encryptedKey = await this.ecies.encryptKey(
95
- recipient.publicKey,
96
- symmetricKey,
97
- ephemeralKeyPair.privateKey,
98
- recipient.id
99
- );
100
-
101
- recipientHeaders.push({
102
- id: recipient.id,
103
- keySize: encryptedKey.length,
104
- encryptedKey,
105
- });
106
- }
107
-
108
- // Calculate sizes with overflow check
109
- let recipientHeadersSize = 0;
110
- for (const h of recipientHeaders) {
111
- const headerSize = this.recipientIdSize +
112
- this.constants.KEY_SIZE_BYTES + h.keySize;
113
- if (recipientHeadersSize + headerSize < recipientHeadersSize) {
114
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_RecipientHeadersSizeOverflow));
115
- }
116
- recipientHeadersSize += headerSize;
117
- }
118
-
119
- // Calculate encrypted size (Data + Tag)
120
- // AES-GCM tag is 16 bytes
121
- const encryptedSize = dataToEncrypt.length + 16;
122
-
123
- const totalSize = this.constants.HEADER_SIZE +
124
- recipientHeadersSize +
125
- Constants.ECIES.IV_SIZE + // IV
126
- encryptedSize;
127
-
128
- // Check for integer overflow (max safe: 2^31 - 1 for Uint8Array)
129
- if (totalSize > 0x7FFFFFFF || totalSize < 0) {
130
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkSizeOverflow));
131
- }
132
-
133
- // Build chunk buffer
134
- const chunk = new Uint8Array(totalSize);
135
- const view = new DataView(chunk.buffer);
136
- let offset = 0;
137
-
138
- // Write header
139
- view.setUint32(offset, this.constants.MAGIC, false);
140
- offset += 4;
141
- view.setUint16(offset, this.constants.VERSION, false);
142
- offset += 2;
143
- view.setUint16(offset, recipients.length, false);
144
- offset += 2;
145
- view.setUint32(offset, chunkIndex, false);
146
- offset += 4;
147
- view.setUint32(offset, dataToEncrypt.length, false); // Original Size (includes signature if present)
148
- offset += 4;
149
- view.setUint32(offset, encryptedSize, false);
150
- offset += 4;
151
- view.setUint8(offset, isLast ? this.constants.FLAG_IS_LAST : 0);
152
- offset += 1;
153
-
154
- // Write Ephemeral Public Key (33 bytes)
155
- chunk.set(ephemeralKeyPair.publicKey, offset);
156
- offset += 33;
157
-
158
- // Padding to HEADER_SIZE (64 bytes)
159
- offset = this.constants.HEADER_SIZE;
160
-
161
- // Write recipient headers
162
- for (const header of recipientHeaders) {
163
- chunk.set(header.id, offset);
164
- offset += this.recipientIdSize;
165
- view.setUint16(offset, header.keySize, false);
166
- offset += this.constants.KEY_SIZE_BYTES;
167
- chunk.set(header.encryptedKey, offset);
168
- offset += header.keySize;
169
- }
170
-
171
- // Extract the full header (including recipient headers) to use as AAD
172
- const headerBytes = chunk.slice(0, offset);
173
-
174
- // Encrypt data with AES-256-GCM using Header as AAD
175
- const encryptResult = await AESGCMService.encrypt(
176
- dataToEncrypt,
177
- symmetricKey,
178
- true, // Return tag separately
179
- Constants.ECIES,
180
- headerBytes // AAD
181
- );
182
-
183
- // Write IV
184
- chunk.set(encryptResult.iv, offset);
185
- offset += Constants.ECIES.IV_SIZE;
186
-
187
- // Write encrypted data
188
- chunk.set(encryptResult.encrypted, offset);
189
- offset += encryptResult.encrypted.length;
190
-
191
- // Write auth tag
192
- if (encryptResult.tag) {
193
- chunk.set(encryptResult.tag, offset);
194
- }
195
-
196
- return {
197
- index: chunkIndex,
198
- data: chunk,
199
- isLast,
200
- recipientCount: recipients.length,
201
- };
202
- }
203
-
204
- /**
205
- * Decrypt chunk for specific recipient
206
- */
207
- async decryptChunk(
208
- chunkData: Uint8Array,
209
- recipientId: Uint8Array,
210
- privateKey: Uint8Array,
211
- senderPublicKey?: Uint8Array,
212
- ): Promise<{ data: Uint8Array; header: IMultiRecipientChunkHeader }> {
213
- const engine = getEciesI18nEngine();
214
- if (chunkData.length < this.constants.HEADER_SIZE) {
215
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTooSmall));
216
- }
217
-
218
- const view = new DataView(chunkData.buffer, chunkData.byteOffset);
219
- let offset = 0;
220
-
221
- // Parse header
222
- const magic = view.getUint32(offset, false);
223
- offset += 4;
224
- if (magic !== this.constants.MAGIC) {
225
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_InvalidChunkMagic));
226
- }
227
-
228
- const version = view.getUint16(offset, false);
229
- offset += 2;
230
- if (version !== this.constants.VERSION) {
231
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_UnsupportedVersionTemplate, { version }));
232
- }
233
-
234
- const recipientCount = view.getUint16(offset, false);
235
- offset += 2;
236
- if (recipientCount === 0 || recipientCount > this.constants.MAX_RECIPIENTS) {
237
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_InvalidRecipientCountTemplate, { count: recipientCount }));
238
- }
239
- const chunkIndex = view.getUint32(offset, false);
240
- offset += 4;
241
- const originalSize = view.getUint32(offset, false);
242
- offset += 4;
243
- const encryptedSize = view.getUint32(offset, false);
244
- offset += 4;
245
- const flags = view.getUint8(offset);
246
- offset += 1;
247
-
248
- // Read Ephemeral Public Key (33 bytes)
249
- const ephemeralPublicKey = chunkData.slice(offset, offset + 33);
250
- offset += 33;
251
-
252
- offset = this.constants.HEADER_SIZE;
253
-
254
- // Validate encryptedSize against chunk size
255
- // We know it must be at least HEADER + IV + EncryptedSize (which includes tag)
256
- const minChunkSize = this.constants.HEADER_SIZE + Constants.ECIES.IV_SIZE + encryptedSize;
257
- if (chunkData.length < minChunkSize) {
258
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTooSmallForEncryptedSize));
259
- }
260
-
261
- // Find recipient header and decrypt symmetric key
262
- let symmetricKey: Uint8Array | null = null;
263
- let tempOffset = offset;
264
-
265
- for (let i = 0; i < recipientCount; i++) {
266
- // Check if we have enough data for recipient ID
267
- if (tempOffset + this.recipientIdSize > chunkData.length) {
268
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTruncatedRecipientId));
269
- }
270
-
271
- const id = chunkData.slice(tempOffset, tempOffset + this.recipientIdSize);
272
- tempOffset += this.recipientIdSize;
273
-
274
- // Check if we have enough data for keySize field
275
- if (tempOffset + this.constants.KEY_SIZE_BYTES > chunkData.length) {
276
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTruncatedKeySize));
277
- }
278
-
279
- const keySize = view.getUint16(tempOffset, false);
280
- tempOffset += this.constants.KEY_SIZE_BYTES;
281
-
282
- // Validate keySize (typical ECIES: 100-400 bytes)
283
- if (keySize === 0 || keySize > 1000) {
284
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_InvalidKeySizeTemplate, { size: keySize }));
285
- }
286
-
287
- // Check if we have enough data for the encrypted key
288
- if (tempOffset + keySize > chunkData.length) {
289
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTruncatedEncryptedKey));
290
- }
291
-
292
- const encryptedKey = chunkData.slice(tempOffset, tempOffset + keySize);
293
- tempOffset += keySize;
294
-
295
- // Check if this is our recipient
296
- if (this.arraysEqual(id, recipientId)) {
297
- // Use Recipient ID as AAD for key decryption
298
- symmetricKey = await this.ecies.decryptKey(privateKey, encryptedKey, ephemeralPublicKey, id);
299
- // Don't break - need to skip all recipient headers
300
- }
301
- }
302
-
303
- if (!symmetricKey) {
304
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_RecipientNotFoundInChunk));
305
- }
306
-
307
- // Update offset to after all recipient headers
308
- offset = tempOffset;
309
-
310
- // Extract header bytes for AAD
311
- const headerBytes = chunkData.slice(0, offset);
312
-
313
- // Read IV
314
- if (offset + Constants.ECIES.IV_SIZE > chunkData.length) {
315
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTooSmall));
316
- }
317
- const iv = chunkData.slice(offset, offset + Constants.ECIES.IV_SIZE);
318
- offset += Constants.ECIES.IV_SIZE;
319
-
320
- // Read encrypted data (includes auth tag)
321
- if (offset + encryptedSize > chunkData.length) {
322
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_MultiRecipient_ChunkTooSmall));
323
- }
324
- const encryptedWithTag = chunkData.slice(offset, offset + encryptedSize);
325
- offset += encryptedSize;
326
-
327
- // Decrypt with AAD
328
- const decrypted = await AESGCMService.decrypt(
329
- iv,
330
- encryptedWithTag,
331
- symmetricKey,
332
- true,
333
- Constants.ECIES,
334
- headerBytes
335
- );
336
-
337
- // Verify signature if sender public key provided
338
- let finalData = decrypted;
339
- if (senderPublicKey) {
340
- if (decrypted.length < 64) {
341
- throw new Error('Decrypted chunk too short to contain signature');
342
- }
343
- const signature = decrypted.slice(0, 64);
344
- const message = decrypted.slice(64);
345
-
346
- const isValid = this.ecies.core.verify(senderPublicKey, message, signature);
347
- if (!isValid) {
348
- throw new Error('Invalid sender signature in chunk');
349
- }
350
- finalData = message;
351
- }
352
-
353
- return {
354
- data: finalData,
355
- header: {
356
- magic,
357
- version,
358
- recipientCount,
359
- chunkIndex,
360
- originalSize,
361
- encryptedSize,
362
- flags,
363
- },
364
- };
365
- }
366
-
367
- private arraysEqual(a: Uint8Array, b: Uint8Array): boolean {
368
- if (a.length !== b.length) return false;
369
-
370
- // Constant-time comparison to prevent timing attacks
371
- let diff = 0;
372
- for (let i = 0; i < a.length; i++) {
373
- diff |= a[i] ^ b[i];
374
- }
375
- return diff === 0;
376
- }
377
- }
@@ -1,226 +0,0 @@
1
- import { Wallet } from '@ethereumjs/wallet';
2
- import { EciesEncryptionTypeEnum } from '../enumerations/ecies-encryption-type';
3
- import { Pbkdf2ProfileEnum } from '../enumerations/pbkdf2-profile';
4
- import { SecureString } from '../secure-string';
5
- import { hexToUint8Array, uint8ArrayToHex } from '../utils';
6
- import { AESGCMService } from './aes-gcm';
7
- import { ECIESService } from './ecies/service';
8
- import { Pbkdf2Service } from './pbkdf2';
9
- import { EciesStringKey, PasswordLoginErrorTypeEnum } from '../enumerations';
10
- import { buildReasonMap, TranslatableGenericError, TypedHandleableError } from '@digitaldefiance/i18n-lib';
11
- import { IECIESConstants } from '../interfaces/ecies-consts';
12
- import { Constants } from '../constants';
13
- import { EciesComponentId } from '../i18n-setup';
14
-
15
-
16
- export class PasswordLoginService {
17
- protected readonly eciesService: ECIESService;
18
- protected readonly pbkdf2Service: Pbkdf2Service;
19
- protected readonly eciesConsts: IECIESConstants;
20
- public static readonly privateKeyStorageKey = 'encryptedPrivateKey';
21
- public static readonly saltStorageKey = 'passwordLoginSalt';
22
- public static readonly encryptedMnemonicStorageKey = 'encryptedMnemonic';
23
- public static readonly profileStorageKey = 'pbkdf2Profile';
24
-
25
- constructor(eciesService: ECIESService, pbkdf2Service: Pbkdf2Service, eciesParams: IECIESConstants = Constants.ECIES) {
26
- this.eciesService = eciesService;
27
- this.pbkdf2Service = pbkdf2Service;
28
- this.eciesConsts = eciesParams;
29
- }
30
-
31
- public async createPasswordLoginBundle(
32
- mnemonic: SecureString,
33
- password: SecureString,
34
- profile: Pbkdf2ProfileEnum = Pbkdf2ProfileEnum.BROWSER_PASSWORD,
35
- ): Promise<{
36
- salt: Uint8Array;
37
- encryptedPrivateKey: Uint8Array;
38
- encryptedMnemonic: Uint8Array;
39
- wallet: Wallet;
40
- }> {
41
- const { wallet } = this.eciesService.walletAndSeedFromMnemonic(mnemonic);
42
-
43
- const derivedKey =
44
- await this.pbkdf2Service.deriveKeyFromPasswordWithProfileAsync(
45
- password.valueAsUint8Array,
46
- profile,
47
- );
48
-
49
- // Encrypt private key with derived key
50
- const privateKeyBytes = wallet.getPrivateKey();
51
- const { encrypted, iv, tag } = await AESGCMService.encrypt(
52
- privateKeyBytes,
53
- derivedKey.hash,
54
- true,
55
- );
56
- if (!tag) {
57
- throw new TranslatableGenericError(EciesComponentId, EciesStringKey.Error_Utils_EncryptionFailedNoAuthTag);
58
- }
59
- const encryptedPrivateKey = AESGCMService.combineIvTagAndEncryptedData(
60
- iv,
61
- encrypted,
62
- tag,
63
- );
64
-
65
- // now use the public key to encrypt the mnemonic and store it
66
- const encryptedMnemonic = await this.eciesService.encrypt(
67
- EciesEncryptionTypeEnum.Simple,
68
- wallet.getPublicKey(),
69
- mnemonic.valueAsUint8Array,
70
- );
71
-
72
- return {
73
- salt: derivedKey.salt,
74
- encryptedPrivateKey: encryptedPrivateKey,
75
- encryptedMnemonic: encryptedMnemonic,
76
- wallet,
77
- };
78
- }
79
-
80
- /**
81
- * Set up password login by deriving a key from the password and using it to encrypt
82
- * @param mnemonic The user's mnemonic
83
- * @param password The user's password
84
- */
85
- public async setupPasswordLoginLocalStorageBundle(
86
- mnemonic: SecureString,
87
- password: SecureString,
88
- profile: Pbkdf2ProfileEnum = Pbkdf2ProfileEnum.BROWSER_PASSWORD,
89
- ): Promise<Wallet> {
90
- const { salt, encryptedPrivateKey, encryptedMnemonic, wallet } =
91
- await this.createPasswordLoginBundle(mnemonic, password, profile);
92
-
93
- // store the salt and encrypted private key in local storage
94
- try {
95
- localStorage.setItem(
96
- PasswordLoginService.saltStorageKey,
97
- uint8ArrayToHex(salt),
98
- );
99
- localStorage.setItem(
100
- PasswordLoginService.privateKeyStorageKey,
101
- uint8ArrayToHex(encryptedPrivateKey),
102
- );
103
- localStorage.setItem(
104
- PasswordLoginService.encryptedMnemonicStorageKey,
105
- uint8ArrayToHex(encryptedMnemonic),
106
- );
107
- localStorage.setItem(
108
- PasswordLoginService.profileStorageKey,
109
- profile,
110
- );
111
- } catch (error) {
112
- throw new TypedHandleableError<typeof PasswordLoginErrorTypeEnum, EciesStringKey>(EciesComponentId, PasswordLoginErrorTypeEnum.FailedToStoreLoginData, buildReasonMap<typeof PasswordLoginErrorTypeEnum, EciesStringKey>(PasswordLoginErrorTypeEnum, ['Error', 'PasswordLoginError']), new Error(), { cause: error instanceof Error ? error : undefined });
113
- }
114
- return wallet;
115
- }
116
-
117
- public async getWalletAndMnemonicFromEncryptedPasswordBundle(
118
- salt: Uint8Array,
119
- encryptedPrivateKey: Uint8Array,
120
- encryptedMnemonic: Uint8Array,
121
- password: SecureString,
122
- profile: Pbkdf2ProfileEnum = Pbkdf2ProfileEnum.BROWSER_PASSWORD,
123
- ): Promise<{ wallet: Wallet; mnemonic: SecureString }> {
124
- if (!salt || !encryptedPrivateKey || !encryptedMnemonic) {
125
- throw new TypedHandleableError<typeof PasswordLoginErrorTypeEnum, EciesStringKey>(EciesComponentId, PasswordLoginErrorTypeEnum.PasswordLoginNotSetUp, buildReasonMap<typeof PasswordLoginErrorTypeEnum, EciesStringKey>(PasswordLoginErrorTypeEnum, ['Error', 'PasswordLoginError']), new Error());
126
- }
127
-
128
- const derivedKey =
129
- await this.pbkdf2Service.deriveKeyFromPasswordWithProfileAsync(
130
- password.valueAsUint8Array,
131
- profile,
132
- salt,
133
- );
134
-
135
- // Decrypt private key with derived key
136
- const { iv, encryptedDataWithTag } = AESGCMService.splitEncryptedData(
137
- encryptedPrivateKey,
138
- true,
139
- this.eciesConsts,
140
- );
141
- const privateKeyBytes = await AESGCMService.decrypt(
142
- iv,
143
- encryptedDataWithTag,
144
- derivedKey.hash,
145
- true,
146
- this.eciesConsts,
147
- );
148
-
149
- const wallet = Wallet.fromPrivateKey(privateKeyBytes);
150
-
151
- // now decrypt the mnemonic
152
- const decryptedMnemonic =
153
- await this.eciesService.decryptSimpleOrSingleWithHeader(
154
- true,
155
- wallet.getPrivateKey(),
156
- encryptedMnemonic,
157
- );
158
-
159
- return { wallet, mnemonic: new SecureString(decryptedMnemonic) };
160
- }
161
-
162
- /**
163
- * Recover wallet and mnemonic from password
164
- * @param password The user's password
165
- * @returns The user's wallet and mnemonic
166
- */
167
- public async getWalletAndMnemonicFromLocalStorageBundle(
168
- password: SecureString,
169
- ): Promise<{ wallet: Wallet; mnemonic: SecureString }> {
170
- const saltHex = localStorage.getItem(PasswordLoginService.saltStorageKey);
171
- const encryptedPrivateKeyHex = localStorage.getItem(
172
- PasswordLoginService.privateKeyStorageKey,
173
- );
174
- const encryptedMnemonicHex = localStorage.getItem(
175
- PasswordLoginService.encryptedMnemonicStorageKey,
176
- );
177
- const profileStr = localStorage.getItem(PasswordLoginService.profileStorageKey);
178
-
179
- if (
180
- !saltHex ||
181
- !encryptedPrivateKeyHex ||
182
- !encryptedMnemonicHex ||
183
- saltHex === '' ||
184
- encryptedPrivateKeyHex === '' ||
185
- encryptedMnemonicHex === ''
186
- ) {
187
- throw new TypedHandleableError<typeof PasswordLoginErrorTypeEnum, EciesStringKey>(EciesComponentId, PasswordLoginErrorTypeEnum.PasswordLoginNotSetUp, buildReasonMap<typeof PasswordLoginErrorTypeEnum, EciesStringKey>(PasswordLoginErrorTypeEnum, ['Error', 'PasswordLoginError']), new Error());
188
- }
189
-
190
- const salt = hexToUint8Array(saltHex);
191
- const encryptedPrivateKey = hexToUint8Array(encryptedPrivateKeyHex);
192
- const encryptedMnemonic = hexToUint8Array(encryptedMnemonicHex);
193
- const profile = (profileStr as Pbkdf2ProfileEnum) || Pbkdf2ProfileEnum.BROWSER_PASSWORD;
194
-
195
- return await this.getWalletAndMnemonicFromEncryptedPasswordBundle(
196
- salt,
197
- encryptedPrivateKey,
198
- encryptedMnemonic,
199
- password,
200
- profile,
201
- );
202
- }
203
-
204
- /**
205
- *
206
- * @returns True if password login is set up (i.e. salt and encrypted private key are in local storage)
207
- */
208
- public static isPasswordLoginSetup(): boolean {
209
- const saltHex = localStorage.getItem(PasswordLoginService.saltStorageKey);
210
- const encryptedPrivateKeyHex = localStorage.getItem(
211
- PasswordLoginService.privateKeyStorageKey,
212
- );
213
- const encryptedMnemonicHex = localStorage.getItem(
214
- PasswordLoginService.encryptedMnemonicStorageKey,
215
- );
216
-
217
- return !!(
218
- saltHex &&
219
- encryptedPrivateKeyHex &&
220
- encryptedMnemonicHex &&
221
- saltHex !== '' &&
222
- encryptedPrivateKeyHex !== '' &&
223
- encryptedMnemonicHex !== ''
224
- );
225
- }
226
- }