@digitaldefiance/ecies-lib 4.4.13 → 4.4.15

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 (597) hide show
  1. package/package.json +5 -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 +34 -0
  5. package/src/builders/ecies-builder.js.map +1 -0
  6. package/src/builders/{index.ts → index.d.ts} +1 -1
  7. package/src/builders/index.d.ts.map +1 -0
  8. package/src/builders/index.js +9 -0
  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 +101 -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 +457 -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 +60 -0
  21. package/src/core/errors/crypto-error.js.map +1 -0
  22. package/src/core/{index.ts → index.d.ts} +1 -1
  23. package/src/core/index.d.ts.map +1 -0
  24. package/src/core/index.js +9 -0
  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 +16 -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 +72 -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 +16 -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 +9 -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 +30 -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 +48 -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 +202 -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 +8 -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 +31 -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 +11 -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 +47 -0
  69. package/src/enumerations/id-provider-error-type.js.map +1 -0
  70. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  71. package/src/enumerations/index.d.ts.map +1 -0
  72. package/src/enumerations/index.js +21 -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 +10 -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 +11 -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 +10 -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 +91 -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 +19 -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 +9 -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 +10 -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 +10 -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 +10 -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 +32 -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 +82 -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 +100 -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 +33 -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 +13 -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 +19 -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 +15 -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 +15 -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 +15 -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 +16 -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 +16 -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 +11 -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 +109 -0
  161. package/src/i18n-setup.js.map +1 -0
  162. package/src/{index.ts → index.d.ts} +12 -72
  163. package/src/index.d.ts.map +1 -0
  164. package/src/index.js +146 -0
  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 +3 -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 +3 -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 +8 -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 +3 -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 +3 -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 +3 -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 +3 -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 +15 -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 +5 -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 +3 -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 +3 -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 +56 -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 +16 -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 +22 -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 +3 -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 +3 -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 +3 -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 +3 -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 +16 -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 +3 -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 +3 -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 +3 -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 +11 -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 +12 -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 +3 -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 +30 -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 +50 -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 +919 -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 +89 -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 +126 -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 +37 -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 +108 -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 +114 -0
  297. package/src/lib/id-providers/uuid-provider.js.map +1 -0
  298. package/src/lib/{index.ts → index.d.ts} +2 -2
  299. package/src/lib/index.d.ts.map +1 -0
  300. package/src/lib/index.js +9 -0
  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 +101 -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 +53 -0
  309. package/src/lib/invariants/encryption-algorithm-consistency.js.map +1 -0
  310. package/src/lib/invariants/{index.ts → index.d.ts} +1 -0
  311. package/src/lib/invariants/index.d.ts.map +1 -0
  312. package/src/lib/invariants/index.js +7 -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 +62 -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 +35 -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 +45 -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 +327 -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 +3 -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 +22 -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 +10 -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 +205 -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 +210 -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 +146 -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 +149 -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 +209 -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 +128 -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 +110 -0
  369. package/src/services/ecies/file.js.map +1 -0
  370. package/src/services/ecies/{index.ts → index.d.ts} +1 -3
  371. package/src/services/ecies/index.d.ts.map +1 -0
  372. package/src/services/ecies/index.js +44 -0
  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 +172 -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 +6 -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 +171 -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 +348 -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 +214 -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 +76 -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 +326 -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 +299 -0
  405. package/src/services/encryption-stream.js.map +1 -0
  406. package/src/services/{index.ts → index.d.ts} +1 -0
  407. package/src/services/index.d.ts.map +1 -0
  408. package/src/services/index.js +14 -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 +293 -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 +119 -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 +112 -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 +107 -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 +109 -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 +67 -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 +5 -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 +194 -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.js +6 -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.js +207 -0
  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.js +207 -0
  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.js +207 -0
  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.js +207 -0
  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.js +206 -0
  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.js +209 -0
  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.js +206 -0
  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 +3 -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 +3 -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 +67 -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 +291 -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 -76
  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/testing.ts +0 -2
  588. package/src/translations/de.ts +0 -260
  589. package/src/translations/en-US.ts +0 -262
  590. package/src/translations/es.ts +0 -271
  591. package/src/translations/fr.ts +0 -269
  592. package/src/translations/ja.ts +0 -259
  593. package/src/translations/uk.ts +0 -271
  594. package/src/translations/zh-cn.ts +0 -234
  595. package/src/types/deep-partial.ts +0 -11
  596. package/src/utils/encryption-type-utils.ts +0 -76
  597. package/src/utils.ts +0 -329
@@ -1,545 +0,0 @@
1
- import { IECIESConstants } from '../../interfaces/ecies-consts';
2
- import { Constants } from '../../constants';
3
- import { IECIESConfig } from '../../interfaces/ecies-config';
4
- import { concatUint8Arrays } from '../../utils';
5
- import { AESGCMService } from '../aes-gcm';
6
- import { EciesCryptoCore } from './crypto-core';
7
- import {
8
- IMultiEncryptedMessage,
9
- IMultiEncryptedParsedHeader,
10
- IMultiRecipient,
11
- } from './interfaces';
12
- import { EciesComponentId, getEciesI18nEngine } from '../../i18n-setup';
13
- import { EciesStringKey } from '../../enumerations';
14
- import { EciesVersionEnum } from '../../enumerations/ecies-version';
15
- import { EciesCipherSuiteEnum } from '../../enumerations/ecies-cipher-suite';
16
- import { EciesEncryptionTypeEnum } from '../../enumerations/ecies-encryption-type';
17
-
18
- /**
19
- * Browser-compatible multi-recipient ECIES encryption/decryption
20
- */
21
- export class EciesMultiRecipient {
22
- protected readonly cryptoCore: EciesCryptoCore;
23
- protected readonly eciesConsts: IECIESConstants;
24
-
25
- constructor(config: IECIESConfig, eciesParams: IECIESConstants = Constants.ECIES) {
26
- this.cryptoCore = new EciesCryptoCore(config, eciesParams);
27
- this.eciesConsts = eciesParams;
28
- }
29
-
30
- /**
31
- * Get the header size for multi-recipient encryption
32
- */
33
- public getHeaderSize(recipientCount: number): number {
34
- return (
35
- this.eciesConsts.VERSION_SIZE +
36
- this.eciesConsts.CIPHER_SUITE_SIZE +
37
- this.eciesConsts.ENCRYPTION_TYPE_SIZE +
38
- this.eciesConsts.PUBLIC_KEY_LENGTH + // Shared ephemeral public key
39
- this.eciesConsts.MULTIPLE.DATA_LENGTH_SIZE +
40
- this.eciesConsts.MULTIPLE.RECIPIENT_COUNT_SIZE +
41
- recipientCount * this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE +
42
- recipientCount * this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE
43
- );
44
- }
45
-
46
- /**
47
- * Encrypt a message symmetric key with a public key
48
- * @param receiverPublicKey The public key of the receiver
49
- * @param messageSymmetricKey The message to encrypt
50
- * @param ephemeralPrivateKey The ephemeral private key to use for encryption
51
- * @param aad Additional Authenticated Data (optional)
52
- * @returns The encrypted message (IV + Tag + EncryptedKey)
53
- */
54
- public async encryptKey(
55
- receiverPublicKey: Uint8Array,
56
- messageSymmetricKey: Uint8Array,
57
- ephemeralPrivateKey: Uint8Array,
58
- aad?: Uint8Array,
59
- ): Promise<Uint8Array> {
60
- const sharedSecret = await this.cryptoCore.computeSharedSecret(
61
- ephemeralPrivateKey,
62
- receiverPublicKey,
63
- );
64
-
65
- // Use HKDF to derive the key
66
- const symKey = this.cryptoCore.deriveSharedKey(
67
- sharedSecret,
68
- new Uint8Array(0), // No salt
69
- new TextEncoder().encode('ecies-v2-key-derivation'), // Info
70
- this.eciesConsts.SYMMETRIC.KEY_SIZE
71
- );
72
-
73
- const encryptResult = await AESGCMService.encrypt(
74
- messageSymmetricKey,
75
- symKey,
76
- true,
77
- this.eciesConsts,
78
- aad
79
- );
80
- const { encrypted, iv } = encryptResult;
81
- const authTag = encryptResult.tag;
82
-
83
- if (!authTag) {
84
- const engine = getEciesI18nEngine();
85
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForKeyEncryption));
86
- }
87
-
88
- return concatUint8Arrays(
89
- iv,
90
- authTag,
91
- encrypted,
92
- );
93
- }
94
-
95
- /**
96
- * Decrypts symmetric key encrypted with ECIES
97
- * @param privateKey The private key to decrypt the data
98
- * @param encryptedKey The data to decrypt
99
- * @param ephemeralPublicKey The ephemeral public key from the header
100
- * @param aad Additional Authenticated Data (optional)
101
- * @returns The decrypted data buffer
102
- */
103
- public async decryptKey(
104
- privateKey: Uint8Array,
105
- encryptedKey: Uint8Array,
106
- ephemeralPublicKey: Uint8Array,
107
- aad?: Uint8Array,
108
- ): Promise<Uint8Array> {
109
- if (encryptedKey.length !== this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE) {
110
- const engine = getEciesI18nEngine();
111
- throw new Error(engine.translate(
112
- EciesComponentId,
113
- EciesStringKey.Error_ECIESError_InvalidEncryptedKeyLengthTemplate, {keySize: this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE, encryptedKeyLength: encryptedKey.length}));
114
- }
115
-
116
- const iv = encryptedKey.slice(
117
- 0,
118
- this.eciesConsts.IV_SIZE,
119
- );
120
- const authTag = encryptedKey.slice(
121
- this.eciesConsts.IV_SIZE,
122
- this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE,
123
- );
124
- const encrypted = encryptedKey.slice(
125
- this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE,
126
- );
127
-
128
- const sharedSecret = await this.cryptoCore.computeSharedSecret(
129
- privateKey,
130
- ephemeralPublicKey,
131
- );
132
-
133
- // Use HKDF to derive the key
134
- const symKey = this.cryptoCore.deriveSharedKey(
135
- sharedSecret,
136
- new Uint8Array(0), // No salt
137
- new TextEncoder().encode('ecies-v2-key-derivation'), // Info
138
- this.eciesConsts.SYMMETRIC.KEY_SIZE
139
- );
140
-
141
- const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(
142
- encrypted,
143
- authTag,
144
- );
145
-
146
- try {
147
- const decrypted = await AESGCMService.decrypt(
148
- iv,
149
- encryptedWithTag,
150
- symKey,
151
- true,
152
- this.eciesConsts,
153
- aad
154
- );
155
- if (decrypted.length !== this.eciesConsts.SYMMETRIC.KEY_SIZE) {
156
- const engine = getEciesI18nEngine();
157
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
158
- }
159
- return decrypted;
160
- } catch (error) {
161
- console.error('Failed to decrypt key:', error);
162
- const engine = getEciesI18nEngine();
163
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_FailedToDecryptKey));
164
- }
165
- }
166
-
167
- /**
168
- * Encrypt a message for multiple recipients
169
- */
170
- public async encryptMultiple(
171
- recipients: IMultiRecipient[],
172
- message: Uint8Array,
173
- preamble: Uint8Array = new Uint8Array(0),
174
- senderPrivateKey?: Uint8Array,
175
- ): Promise<IMultiEncryptedMessage> {
176
- const engine = getEciesI18nEngine();
177
- if (recipients.length > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
178
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_TooManyRecipientsTemplate, { recipientsCount: recipients.length }));
179
- }
180
-
181
- // Sign-then-Encrypt: If sender key provided, sign the message and prepend signature
182
- let messageToEncrypt = message;
183
- if (senderPrivateKey) {
184
- const signature = this.cryptoCore.sign(senderPrivateKey, message);
185
- messageToEncrypt = concatUint8Arrays(signature, message);
186
- }
187
-
188
- if (messageToEncrypt.length > this.eciesConsts.MAX_RAW_DATA_SIZE) {
189
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MessageTooLargeTemplate, { length: messageToEncrypt.length }));
190
- }
191
-
192
- // Generate symmetric key
193
- const symmetricKey = crypto.getRandomValues(
194
- new Uint8Array(this.eciesConsts.SYMMETRIC.KEY_SIZE),
195
- );
196
-
197
- // Generate ONE ephemeral key pair for all recipients
198
- const ephemeralKeyPair = await this.cryptoCore.generateEphemeralKeyPair();
199
-
200
- // Encrypt symmetric key for each recipient
201
- const recipientIds: Uint8Array[] = [];
202
- const recipientKeys: Uint8Array[] = [];
203
-
204
- for (const recipient of recipients) {
205
- // Use Recipient ID as AAD for key encryption to bind key to recipient
206
- const encryptedKey = await this.encryptKey(
207
- recipient.publicKey,
208
- symmetricKey,
209
- ephemeralKeyPair.privateKey,
210
- recipient.id
211
- );
212
-
213
- recipientIds.push(recipient.id);
214
- recipientKeys.push(encryptedKey);
215
- }
216
-
217
- const headerSize = this.getHeaderSize(recipients.length);
218
-
219
- // Build the header to use as AAD for message encryption
220
- // We need to construct a temporary object to build the header
221
- const tempHeaderData: IMultiEncryptedMessage = {
222
- dataLength: messageToEncrypt.length,
223
- recipientCount: recipients.length,
224
- recipientIds,
225
- recipientKeys,
226
- encryptedMessage: new Uint8Array(0), // Placeholder
227
- headerSize,
228
- ephemeralPublicKey: ephemeralKeyPair.publicKey,
229
- };
230
-
231
- const headerBytes = this.buildHeader(tempHeaderData);
232
-
233
- // Encrypt message with symmetric key, using Header as AAD
234
- const encryptResult = await AESGCMService.encrypt(
235
- messageToEncrypt,
236
- symmetricKey,
237
- true,
238
- this.eciesConsts,
239
- headerBytes // Bind header to ciphertext
240
- );
241
- const { encrypted, iv } = encryptResult;
242
- const authTag = encryptResult.tag;
243
-
244
- if (!authTag) {
245
- const engine = getEciesI18nEngine();
246
- throw new Error(
247
- engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForMultiRecipientECIESEncryption),
248
- );
249
- }
250
-
251
- // Create stored message: preamble + iv + authTag + encrypted
252
- const storedMessage = concatUint8Arrays(preamble, iv, authTag, encrypted);
253
-
254
- return {
255
- dataLength: messageToEncrypt.length,
256
- recipientCount: recipients.length,
257
- recipientIds,
258
- recipientKeys,
259
- encryptedMessage: storedMessage,
260
- headerSize,
261
- ephemeralPublicKey: ephemeralKeyPair.publicKey,
262
- };
263
- }
264
-
265
- /**
266
- * Decrypt a multi-recipient message for a specific recipient
267
- */
268
- public async decryptMultipleForRecipient(
269
- encryptedData: IMultiEncryptedMessage,
270
- recipientId: Uint8Array,
271
- privateKey: Uint8Array,
272
- senderPublicKey?: Uint8Array,
273
- ): Promise<Uint8Array> {
274
- // Find recipient's encrypted key
275
- const recipientIndex = encryptedData.recipientIds.findIndex((id) =>
276
- this.arraysEqual(id, recipientId),
277
- );
278
-
279
- if (recipientIndex === -1) {
280
- const engine = getEciesI18nEngine();
281
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientNotFound));
282
- }
283
-
284
- const encryptedKey = encryptedData.recipientKeys[recipientIndex];
285
-
286
- // Decrypt the symmetric key using the shared ephemeral public key
287
- if (!encryptedData.ephemeralPublicKey) {
288
- const engine = getEciesI18nEngine();
289
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MissingEphemeralPublicKey));
290
- }
291
-
292
- // Use Recipient ID as AAD for key decryption
293
- const symmetricKey = await this.decryptKey(
294
- privateKey,
295
- encryptedKey,
296
- encryptedData.ephemeralPublicKey,
297
- recipientId
298
- );
299
-
300
- // Rebuild header to use as AAD
301
- const headerBytes = this.buildHeader(encryptedData);
302
-
303
- // Extract components from encrypted message
304
- let offset = 0;
305
- const iv = encryptedData.encryptedMessage.slice(
306
- offset,
307
- offset + this.eciesConsts.IV_SIZE,
308
- );
309
- offset += this.eciesConsts.IV_SIZE;
310
-
311
- const authTag = encryptedData.encryptedMessage.slice(
312
- offset,
313
- offset + this.eciesConsts.AUTH_TAG_SIZE,
314
- );
315
- offset += this.eciesConsts.AUTH_TAG_SIZE;
316
-
317
- const encrypted = encryptedData.encryptedMessage.slice(offset);
318
-
319
- // AES-GCM provides authentication via auth tag (no separate CRC needed)
320
-
321
- // Decrypt with symmetric key and Header as AAD
322
- const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(
323
- encrypted,
324
- authTag,
325
- );
326
-
327
- const decrypted = await AESGCMService.decrypt(
328
- iv,
329
- encryptedWithTag,
330
- symmetricKey,
331
- true,
332
- this.eciesConsts,
333
- headerBytes
334
- );
335
-
336
- // Verify length
337
- if (decrypted.length !== encryptedData.dataLength) {
338
- const engine = getEciesI18nEngine();
339
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_DecryptedDataLengthMismatch));
340
- }
341
-
342
- // If sender public key is provided, verify signature
343
- if (senderPublicKey) {
344
- // Expect [Signature (64)][Message]
345
- if (decrypted.length < 64) {
346
- throw new Error('Decrypted data too short to contain signature');
347
- }
348
- const signature = decrypted.slice(0, 64);
349
- const message = decrypted.slice(64);
350
-
351
- const isValid = this.cryptoCore.verify(senderPublicKey, message, signature);
352
- if (!isValid) {
353
- throw new Error('Invalid sender signature');
354
- }
355
-
356
- return message;
357
- }
358
-
359
- return decrypted;
360
- }
361
-
362
- /**
363
- * Build header for multi-recipient message
364
- */
365
- public buildHeader(data: IMultiEncryptedMessage): Uint8Array {
366
- if (data.recipientIds.length !== data.recipientKeys.length) {
367
- const engine = getEciesI18nEngine();
368
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientCountMismatch));
369
- }
370
-
371
- if (data.dataLength < 0 || data.dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
372
- const engine = getEciesI18nEngine();
373
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
374
- }
375
-
376
- const versionArray = new Uint8Array([EciesVersionEnum.V1]);
377
- const cipherSuiteArray = new Uint8Array([EciesCipherSuiteEnum.Secp256k1_Aes256Gcm_Sha256]);
378
- const encryptionTypeArray = new Uint8Array([EciesEncryptionTypeEnum.Multiple]);
379
-
380
- if (!data.ephemeralPublicKey) {
381
- const engine = getEciesI18nEngine();
382
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MissingEphemeralPublicKey));
383
- }
384
-
385
- // Data length (8 bytes)
386
- // We use the most significant byte (MSB) to store the recipient ID size
387
- // This allows parsing the header without knowing the configured ID provider
388
- // Max data size is 2^53-1, so the top byte is always 0 for valid data lengths
389
- const recipientIdSize = this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE;
390
- if (recipientIdSize > 255) {
391
- const engine = getEciesI18nEngine();
392
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientIdSizeTooLargeTemplate, { size: recipientIdSize }));
393
- }
394
-
395
- const dataLengthBigInt = BigInt(data.dataLength);
396
- const recipientIdSizeBigInt = BigInt(recipientIdSize);
397
- const combinedLength = (recipientIdSizeBigInt << 56n) | dataLengthBigInt;
398
-
399
- const dataLengthUint8Array = new Uint8Array(8);
400
- new DataView(dataLengthUint8Array.buffer).setBigUint64(
401
- 0,
402
- combinedLength,
403
- false,
404
- );
405
-
406
- // Recipient count (2 bytes)
407
- const recipientCountUint8Array = new Uint8Array(2);
408
- new DataView(recipientCountUint8Array.buffer).setUint16(
409
- 0,
410
- data.recipientIds.length,
411
- false,
412
- );
413
-
414
- // Recipient IDs
415
- const recipientIdsUint8Array = concatUint8Arrays(...data.recipientIds);
416
-
417
- // Encrypted keys
418
- const encryptedKeysUint8Array = concatUint8Arrays(...data.recipientKeys);
419
-
420
- return concatUint8Arrays(
421
- versionArray,
422
- cipherSuiteArray,
423
- encryptionTypeArray,
424
- data.ephemeralPublicKey,
425
- dataLengthUint8Array,
426
- recipientCountUint8Array,
427
- recipientIdsUint8Array,
428
- encryptedKeysUint8Array,
429
- );
430
- }
431
-
432
- /**
433
- * Parse multi-recipient header
434
- */
435
- public parseHeader(data: Uint8Array): IMultiEncryptedParsedHeader {
436
- const engine = getEciesI18nEngine();
437
- // minimum: 1 (ver) + 1 (suite) + 1 (type) + 33 (pubkey) + 8 (len) + 2 (count) = 46
438
- if (data.length < 46) {
439
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_DataTooShortForMultiRecipientHeader));
440
- }
441
-
442
- let offset = 0;
443
- const view = new DataView(data.buffer, data.byteOffset);
444
-
445
- // Read Version
446
- const version = data[offset];
447
- offset += this.eciesConsts.VERSION_SIZE;
448
- if (version !== EciesVersionEnum.V1) {
449
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidVersionTemplate, { version }));
450
- }
451
-
452
- // Read CipherSuite
453
- const cipherSuite = data[offset];
454
- offset += this.eciesConsts.CIPHER_SUITE_SIZE;
455
- if (cipherSuite !== EciesCipherSuiteEnum.Secp256k1_Aes256Gcm_Sha256) {
456
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidCipherSuiteTemplate, { cipherSuite }));
457
- }
458
-
459
- // Read Encryption Type
460
- const encryptionType = data[offset];
461
- offset += this.eciesConsts.ENCRYPTION_TYPE_SIZE;
462
- if (encryptionType !== EciesEncryptionTypeEnum.Multiple) {
463
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidEncryptionTypeTemplate, { encryptionType: encryptionType.toString(16) }));
464
- }
465
-
466
- // Read Ephemeral Public Key
467
- const ephemeralPublicKey = data.slice(offset, offset + this.eciesConsts.PUBLIC_KEY_LENGTH);
468
- offset += this.eciesConsts.PUBLIC_KEY_LENGTH;
469
-
470
- // Read data length and recipient ID size
471
- const combinedLength = view.getBigUint64(offset, false);
472
- offset += 8;
473
-
474
- // Extract recipient ID size from MSB (top 8 bits)
475
- const storedRecipientIdSize = Number(combinedLength >> 56n);
476
-
477
- // Extract data length from lower 56 bits
478
- const dataLength = Number(combinedLength & 0x00FFFFFFFFFFFFFFn);
479
-
480
- if (dataLength <= 0 || dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
481
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
482
- }
483
-
484
- // Use stored recipient ID size if available (non-legacy), otherwise fallback to config
485
- const recipientIdSize = storedRecipientIdSize > 0
486
- ? storedRecipientIdSize
487
- : this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE;
488
-
489
- // Read recipient count
490
- const recipientCount = view.getUint16(offset, false);
491
- offset += 2;
492
-
493
- if (recipientCount <= 0 || recipientCount > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
494
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidRecipientCount));
495
- }
496
-
497
- // Read recipient IDs
498
- const recipientIds: Uint8Array[] = [];
499
- for (let i = 0; i < recipientCount; i++) {
500
- recipientIds.push(
501
- data.slice(offset, offset + recipientIdSize),
502
- );
503
- offset += recipientIdSize;
504
- }
505
-
506
- // Read encrypted keys
507
- const recipientKeys: Uint8Array[] = [];
508
- for (let i = 0; i < recipientCount; i++) {
509
- recipientKeys.push(
510
- data.slice(offset, offset + this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE),
511
- );
512
- offset += this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE;
513
- }
514
-
515
- return {
516
- dataLength,
517
- recipientCount,
518
- recipientIds,
519
- recipientKeys,
520
- headerSize: offset,
521
- ephemeralPublicKey,
522
- };
523
- }
524
-
525
- /**
526
- * Parse complete multi-recipient message
527
- */
528
- public parseMessage(data: Uint8Array): IMultiEncryptedMessage {
529
- const header = this.parseHeader(data);
530
- const encryptedMessage = data.slice(header.headerSize);
531
-
532
- return {
533
- ...header,
534
- encryptedMessage,
535
- };
536
- }
537
-
538
- private arraysEqual(a: Uint8Array, b: Uint8Array): boolean {
539
- if (a.length !== b.length) return false;
540
- for (let i = 0; i < a.length; i++) {
541
- if (a[i] !== b[i]) return false;
542
- }
543
- return true;
544
- }
545
- }