@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,188 +0,0 @@
1
- import { sha256 } from '@noble/hashes/sha2.js';
2
- import { IECIESConstants } from '../interfaces/ecies-consts';
3
- import { Constants } from '../constants';
4
- import {
5
- IChunkHeader,
6
- IEncryptedChunk,
7
- CHUNK_CONSTANTS,
8
- } from '../interfaces/encrypted-chunk';
9
- import { ECIESService } from './ecies/service';
10
- import { getEciesI18nEngine, EciesComponentId } from '../i18n-setup';
11
- import { EciesStringKey } from '../enumerations/ecies-string-key';
12
-
13
- /**
14
- * Processes chunks for streaming encryption/decryption
15
- */
16
- export class ChunkProcessor {
17
- constructor(
18
- private readonly ecies: ECIESService,
19
- private readonly eciesConsts: IECIESConstants = Constants.ECIES
20
- ) {}
21
-
22
- /**
23
- * Build chunk header
24
- */
25
- buildChunkHeader(header: IChunkHeader): Uint8Array {
26
- const buffer = new Uint8Array(CHUNK_CONSTANTS.HEADER_SIZE);
27
- const view = new DataView(buffer.buffer);
28
-
29
- view.setUint32(0, header.magic, false);
30
- view.setUint16(4, header.version, false);
31
- view.setUint32(6, header.index, false);
32
- view.setUint32(10, header.originalSize, false);
33
- view.setUint32(14, header.encryptedSize, false);
34
- view.setUint16(18, header.flags, false);
35
- // Bytes 20-31: reserved (zeros)
36
-
37
- return buffer;
38
- }
39
-
40
- /**
41
- * Parse chunk header
42
- */
43
- parseChunkHeader(data: Uint8Array): IChunkHeader {
44
- const engine = getEciesI18nEngine();
45
- if (data.length < CHUNK_CONSTANTS.HEADER_SIZE) {
46
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_DataTooShortForHeader));
47
- }
48
-
49
- const view = new DataView(data.buffer, data.byteOffset);
50
-
51
- const magic = view.getUint32(0, false);
52
- if (magic !== CHUNK_CONSTANTS.MAGIC) {
53
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_InvalidMagicBytes));
54
- }
55
-
56
- const version = view.getUint16(4, false);
57
- if (version !== CHUNK_CONSTANTS.VERSION) {
58
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_UnsupportedVersion));
59
- }
60
-
61
- return {
62
- magic,
63
- version,
64
- index: view.getUint32(6, false),
65
- originalSize: view.getUint32(10, false),
66
- encryptedSize: view.getUint32(14, false),
67
- flags: view.getUint16(18, false),
68
- };
69
- }
70
-
71
- /**
72
- * Encrypt a single chunk
73
- */
74
- async encryptChunk(
75
- data: Uint8Array,
76
- publicKey: Uint8Array,
77
- index: number,
78
- isLast: boolean,
79
- includeChecksum: boolean
80
- ): Promise<IEncryptedChunk> {
81
- // Encrypt data
82
- const encrypted = await this.ecies.encryptSimpleOrSingle(
83
- false,
84
- publicKey,
85
- data
86
- );
87
-
88
- // Calculate checksum if requested
89
- const checksum = includeChecksum ? sha256(data) : undefined;
90
-
91
- // Build header
92
- let flags = 0;
93
- if (isLast) flags |= CHUNK_CONSTANTS.FLAG_IS_LAST;
94
- if (includeChecksum) flags |= CHUNK_CONSTANTS.FLAG_HAS_CHECKSUM;
95
-
96
- const header = this.buildChunkHeader({
97
- magic: CHUNK_CONSTANTS.MAGIC,
98
- version: CHUNK_CONSTANTS.VERSION,
99
- index,
100
- originalSize: data.length,
101
- encryptedSize: encrypted.length,
102
- flags,
103
- });
104
-
105
- // Combine: header + encrypted + optional checksum
106
- const parts = [header, encrypted];
107
- if (checksum) {
108
- parts.push(checksum);
109
- }
110
-
111
- const totalLength = parts.reduce((sum, part) => sum + part.length, 0);
112
- const result = new Uint8Array(totalLength);
113
- let offset = 0;
114
- for (const part of parts) {
115
- result.set(part, offset);
116
- offset += part.length;
117
- }
118
-
119
- return {
120
- index,
121
- data: result,
122
- isLast,
123
- metadata: {
124
- originalSize: data.length,
125
- encryptedSize: encrypted.length,
126
- timestamp: Date.now(),
127
- checksum,
128
- },
129
- };
130
- }
131
-
132
- /**
133
- * Decrypt a single chunk
134
- */
135
- async decryptChunk(
136
- chunkData: Uint8Array,
137
- privateKey: Uint8Array
138
- ): Promise<{ data: Uint8Array; header: IChunkHeader }> {
139
- // Parse header
140
- const header = this.parseChunkHeader(chunkData);
141
-
142
- // Extract encrypted data
143
- const hasChecksum = (header.flags & CHUNK_CONSTANTS.FLAG_HAS_CHECKSUM) !== 0;
144
- const encryptedStart = CHUNK_CONSTANTS.HEADER_SIZE;
145
- const encryptedEnd = hasChecksum
146
- ? chunkData.length - CHUNK_CONSTANTS.CHECKSUM_SIZE
147
- : chunkData.length;
148
-
149
- const encrypted = chunkData.slice(encryptedStart, encryptedEnd);
150
-
151
- // Validate encrypted size matches header
152
- if (encrypted.length !== header.encryptedSize) {
153
- const engine = getEciesI18nEngine();
154
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_EncryptedSizeMismatchTemplate, { expectedSize: header.encryptedSize, actualSize: encrypted.length }));
155
- }
156
-
157
- // Decrypt
158
- const decrypted = await this.ecies.decryptSimpleOrSingleWithHeader(
159
- false,
160
- privateKey,
161
- encrypted
162
- );
163
-
164
- // Verify checksum if present
165
- if (hasChecksum) {
166
- const storedChecksum = chunkData.slice(-CHUNK_CONSTANTS.CHECKSUM_SIZE);
167
- const computedChecksum = sha256(decrypted);
168
-
169
- // Constant-time comparison to prevent timing attacks
170
- let diff = 0;
171
- for (let i = 0; i < CHUNK_CONSTANTS.CHECKSUM_SIZE; i++) {
172
- diff |= storedChecksum[i] ^ computedChecksum[i];
173
- }
174
- if (diff !== 0) {
175
- const engine = getEciesI18nEngine();
176
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_ChecksumMismatch));
177
- }
178
- }
179
-
180
- // Verify size
181
- if (decrypted.length !== header.originalSize) {
182
- const engine = getEciesI18nEngine();
183
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_DecryptedSizeMismatch));
184
- }
185
-
186
- return { data: decrypted, header };
187
- }
188
- }
@@ -1,147 +0,0 @@
1
- # Browser-Compatible ECIES Service
2
-
3
- This directory contains a web-based implementation of the ECIES (Elliptic Curve Integrated Encryption Scheme) service that mirrors the functionality of the server-side implementation but uses browser-compatible libraries.
4
-
5
- ## Overview
6
-
7
- The browser ECIES service provides the same cryptographic functionality as the server-side version, including:
8
-
9
- - **Mnemonic generation and wallet derivation** using BIP39/BIP32
10
- - **ECDH key exchange** using secp256k1 curve
11
- - **AES-GCM encryption** using Web Crypto API
12
- - **ECDSA signatures** using secp256k1
13
- - **Single and simple recipient encryption modes**
14
- - **CRC16 validation** for data integrity
15
-
16
- ## Dependencies
17
-
18
- The service uses the following browser-compatible libraries:
19
-
20
- - `@scure/bip39` - BIP39 mnemonic generation and validation
21
- - `@scure/bip32` - BIP32 hierarchical deterministic key derivation
22
- - `@noble/curves` - Elliptic curve cryptography (secp256k1)
23
- - `@noble/hashes` - Cryptographic hash functions
24
- - Web Crypto API - Native browser AES-GCM encryption
25
-
26
- ## Architecture
27
-
28
- ### Core Components
29
-
30
- 1. **`crypto-core.ts`** - Core cryptographic operations (key generation, ECDH)
31
- 2. **`single-recipient.ts`** - Single recipient encryption/decryption
32
- 3. **`signature.ts`** - ECDSA signature operations
33
- 4. **`service.ts`** - Main service that integrates all components
34
- 5. **`utils.ts`** - Utility functions (CRC16, hex conversion, etc.)
35
- 6. **`constants.ts`** - Cryptographic constants matching server-side
36
- 7. **`interfaces.ts`** - TypeScript interfaces
37
-
38
- ### Encryption Modes
39
-
40
- - **Simple Mode**: Basic encryption without CRC or length prefix
41
- - **Single Mode**: Encryption with data length and CRC16 validation
42
- - **Multiple Mode**: Multi-recipient encryption (planned for future implementation)
43
-
44
- ## Usage
45
-
46
- ### Basic Example
47
-
48
- ```typescript
49
- import { ECIESService } from './services/ecies';
50
-
51
- // Create service instance
52
- const ecies = new ECIESService();
53
-
54
- // Generate mnemonic and derive keys
55
- const mnemonic = ecies.generateNewMnemonic();
56
- const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
57
-
58
- // Encrypt a message
59
- const message = new TextEncoder().encode('Hello, World!');
60
- const encrypted = await ecies.encryptSimpleOrSingle(false, publicKey, message);
61
-
62
- // Decrypt the message
63
- const decrypted = await ecies.decryptSimpleOrSingleWithHeader(false, privateKey, encrypted);
64
- const result = new TextDecoder().decode(decrypted);
65
- ```
66
-
67
- ### Wallet Derivation
68
-
69
- ```typescript
70
- // Generate new mnemonic
71
- const mnemonic = ecies.generateNewMnemonic();
72
-
73
- // Derive wallet from mnemonic
74
- const wallet = ecies.walletAndSeedFromMnemonic(mnemonic);
75
- console.log('Seed:', wallet.seed);
76
- console.log('Private Key:', wallet.privateKey);
77
- console.log('Public Key:', wallet.publicKey);
78
- ```
79
-
80
- ### Digital Signatures
81
-
82
- ```typescript
83
- // Sign a message
84
- const message = new TextEncoder().encode('Message to sign');
85
- const signature = ecies.signMessage(privateKey, message);
86
-
87
- // Verify signature
88
- const isValid = ecies.verifyMessage(publicKey, message, signature);
89
- ```
90
-
91
- ### Simple vs Single Mode
92
-
93
- ```typescript
94
- // Simple mode (no CRC, smaller overhead)
95
- const simpleEncrypted = await ecies.encryptSimpleOrSingle(true, publicKey, message);
96
- const simpleDecrypted = await ecies.decryptSimpleOrSingleWithHeader(true, privateKey, simpleEncrypted);
97
-
98
- // Single mode (with CRC and length validation)
99
- const singleEncrypted = await ecies.encryptSimpleOrSingle(false, publicKey, message);
100
- const singleDecrypted = await ecies.decryptSimpleOrSingleWithHeader(false, privateKey, singleEncrypted);
101
- ```
102
-
103
- ## Compatibility
104
-
105
- This implementation is designed to be fully compatible with the server-side ECIES service:
106
-
107
- - Uses the same cryptographic constants and algorithms
108
- - Produces identical encrypted output format
109
- - Supports the same key derivation paths
110
- - Implements the same CRC16 algorithm for data integrity
111
-
112
- ## Security Considerations
113
-
114
- - All cryptographic operations use well-established, audited libraries
115
- - Private keys are handled as Uint8Array and should be properly secured
116
- - The Web Crypto API provides secure random number generation
117
- - ECDH shared secrets are properly derived using secp256k1
118
-
119
- ## Testing
120
-
121
- Run the examples to test the functionality:
122
-
123
- ```typescript
124
- import { runAllExamples } from './services/ecies/example';
125
-
126
- // Run all examples in browser console
127
- runAllExamples();
128
- ```
129
-
130
- ## Future Enhancements
131
-
132
- - Multi-recipient encryption support
133
- - Key caching and management
134
- - Integration with browser storage APIs
135
- - Performance optimizations for large messages
136
-
137
- ## Error Handling
138
-
139
- The service throws descriptive errors for:
140
-
141
- - Invalid mnemonics
142
- - Malformed public/private keys
143
- - Encryption/decryption failures
144
- - CRC validation errors
145
- - Invalid encryption types
146
-
147
- Always wrap cryptographic operations in try-catch blocks for proper error handling.
@@ -1,292 +0,0 @@
1
- import { Wallet } from '@ethereumjs/wallet';
2
- import { HDKey } from '@scure/bip32';
3
- import {
4
- generateMnemonic,
5
- mnemonicToSeedSync,
6
- validateMnemonic,
7
- } from '@scure/bip39';
8
- import { wordlist } from '@scure/bip39/wordlists/english';
9
- import { Constants } from '../../constants';
10
- import { IECIESConfig } from '../../interfaces/ecies-config';
11
- import { SecureString } from '../../secure-string';
12
- import { ISimpleKeyPair, IWalletSeed } from './interfaces';
13
-
14
- import { secp256k1 } from '@noble/curves/secp256k1.js';
15
- import { hkdf } from '@noble/hashes/hkdf.js';
16
- import { sha256 } from '@noble/hashes/sha2.js';
17
- import { EciesStringKey } from '../../enumerations';
18
- import { EciesComponentId, getEciesI18nEngine } from '../../i18n-setup';
19
- import { IECIESConstants } from '../../interfaces/ecies-consts';
20
-
21
- /**
22
- * Browser-compatible crypto core for ECIES operations
23
- * Uses @scure libraries for browser compatibility
24
- */
25
- export class EciesCryptoCore {
26
- protected readonly _config: IECIESConfig;
27
- protected readonly _eciesConsts: IECIESConstants;
28
-
29
- constructor(
30
- config: IECIESConfig,
31
- eciesParams: IECIESConstants = Constants.ECIES,
32
- ) {
33
- this._config = config;
34
- this._eciesConsts = eciesParams;
35
- }
36
-
37
- public get config(): IECIESConfig {
38
- return this._config;
39
- }
40
-
41
- /**
42
- * Validates and normalizes a public key for ECIES operations
43
- */
44
- public normalizePublicKey(publicKey: Uint8Array): Uint8Array {
45
- if (!publicKey) {
46
- const engine = getEciesI18nEngine();
47
- throw new Error(
48
- engine.translate(
49
- EciesComponentId,
50
- EciesStringKey.Error_ECIESError_ReceivedNullOrUndefinedPublicKey,
51
- ),
52
- );
53
- }
54
-
55
- const keyLength = publicKey.length;
56
- let normalizedKey: Uint8Array;
57
-
58
- // Compressed key (33 bytes) - 0x02 or 0x03 prefix
59
- if (keyLength === 33 && (publicKey[0] === 0x02 || publicKey[0] === 0x03)) {
60
- normalizedKey = publicKey;
61
- }
62
- // Uncompressed key (65 bytes) - 0x04 prefix
63
- // We accept this for backward compatibility with existing keys
64
- else if (keyLength === 65 && publicKey[0] === 0x04) {
65
- normalizedKey = publicKey;
66
- }
67
- // Raw key without prefix (64 bytes) - add the 0x04 prefix
68
- // Legacy support
69
- else if (keyLength === 64) {
70
- normalizedKey = new Uint8Array(65);
71
- normalizedKey[0] = 0x04;
72
- normalizedKey.set(publicKey, 1);
73
- } else {
74
- const engine = getEciesI18nEngine();
75
- throw new Error(
76
- engine.translate(
77
- EciesComponentId,
78
- EciesStringKey.Error_ECIESError_InvalidPublicKeyFormatOrLengthTemplate,
79
- { keyLength },
80
- ),
81
- );
82
- }
83
-
84
- // Basic validation: check it's not all zeros
85
- let allZeros = true;
86
- for (let i = 1; i < normalizedKey.length; i++) {
87
- // Skip first byte (prefix)
88
- if (normalizedKey[i] !== 0) {
89
- allZeros = false;
90
- break;
91
- }
92
- }
93
- if (allZeros) {
94
- const engine = getEciesI18nEngine();
95
- throw new Error(
96
- engine.translate(
97
- EciesComponentId,
98
- EciesStringKey.Error_ECIESError_InvalidPublicKeyNotOnCurve,
99
- ),
100
- );
101
- }
102
-
103
- return normalizedKey;
104
- }
105
-
106
- /**
107
- * Generate a new mnemonic
108
- */
109
- public generateNewMnemonic(): SecureString {
110
- return new SecureString(
111
- generateMnemonic(wordlist, this._config.mnemonicStrength),
112
- );
113
- }
114
-
115
- /**
116
- * Generate wallet and seed from mnemonic
117
- */
118
- public walletAndSeedFromMnemonic(mnemonic: SecureString): IWalletSeed {
119
- if (!mnemonic || !validateMnemonic(mnemonic.value ?? '', wordlist)) {
120
- const engine = getEciesI18nEngine();
121
- throw new Error(
122
- engine.translate(
123
- EciesComponentId,
124
- EciesStringKey.Error_ECIESError_InvalidMnemonic,
125
- ),
126
- );
127
- }
128
-
129
- const seed = mnemonicToSeedSync(mnemonic.value ?? '');
130
- const hdKey = HDKey.fromMasterSeed(seed);
131
- const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
132
-
133
- if (!derivedKey.privateKey) {
134
- const engine = getEciesI18nEngine();
135
- throw new Error(
136
- engine.translate(
137
- EciesComponentId,
138
- EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey,
139
- ),
140
- );
141
- }
142
-
143
- const privateKey = derivedKey.privateKey;
144
-
145
- const wallet = new Wallet(privateKey);
146
-
147
- return {
148
- wallet,
149
- seed,
150
- };
151
- }
152
-
153
- /**
154
- * Create a simple key pair from a seed
155
- */
156
- public seedToSimpleKeyPair(seed: Uint8Array): ISimpleKeyPair {
157
- const hdKey = HDKey.fromMasterSeed(seed);
158
- const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
159
-
160
- if (!derivedKey.privateKey) {
161
- const engine = getEciesI18nEngine();
162
- throw new Error(
163
- engine.translate(
164
- EciesComponentId,
165
- EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey,
166
- ),
167
- );
168
- }
169
-
170
- const privateKey = derivedKey.privateKey;
171
- const publicKey = secp256k1.getPublicKey(privateKey, true); // compressed
172
-
173
- return {
174
- privateKey,
175
- publicKey,
176
- };
177
- }
178
-
179
- /**
180
- * Create a simple key pair from a mnemonic
181
- */
182
- public mnemonicToSimpleKeyPair(mnemonic: SecureString): ISimpleKeyPair {
183
- const { seed } = this.walletAndSeedFromMnemonic(mnemonic);
184
- return this.seedToSimpleKeyPair(seed);
185
- }
186
-
187
- /**
188
- * Generate a random private key
189
- */
190
- public generatePrivateKey(): Uint8Array {
191
- return secp256k1.utils.randomSecretKey();
192
- }
193
-
194
- /**
195
- * Get public key from private key
196
- */
197
- public getPublicKey(privateKey: Uint8Array): Uint8Array {
198
- const publicKeyPoint = secp256k1.getPublicKey(privateKey, true); // compressed
199
- return publicKeyPoint;
200
- }
201
-
202
- /**
203
- * Generate ephemeral key pair for ECIES
204
- */
205
- public async generateEphemeralKeyPair(): Promise<ISimpleKeyPair> {
206
- const privateKey = this.generatePrivateKey();
207
- const publicKey = this.getPublicKey(privateKey);
208
- return { privateKey, publicKey };
209
- }
210
-
211
- /**
212
- * Compute ECDH shared secret
213
- */
214
- public computeSharedSecret(
215
- privateKey: Uint8Array,
216
- publicKey: Uint8Array,
217
- ): Uint8Array {
218
- // Normalize the public key to ensure it has the correct format
219
- const normalizedPublicKey = this.normalizePublicKey(publicKey);
220
-
221
- // Use uncompressed shared secret to match Node.js ECDH behavior
222
- // Node.js ECDH.computeSecret() returns the x-coordinate of the shared point
223
- const sharedSecret = secp256k1.getSharedSecret(
224
- privateKey,
225
- normalizedPublicKey,
226
- false,
227
- );
228
- // Return only the x-coordinate (first 32 bytes after the 0x04 prefix)
229
- return sharedSecret.slice(1, 33);
230
- }
231
-
232
- /**
233
- * Derive a symmetric key from a shared secret using HKDF
234
- * @param sharedSecret The shared secret (ECDH output)
235
- * @param salt Optional salt
236
- * @param info Optional context info
237
- * @param length Length of the output key (default 32 for AES-256)
238
- */
239
- public deriveSharedKey(
240
- sharedSecret: Uint8Array,
241
- salt: Uint8Array = new Uint8Array(0),
242
- info: Uint8Array = new Uint8Array(0),
243
- length: number = 32,
244
- ): Uint8Array {
245
- return hkdf(sha256, sharedSecret, salt, info, length);
246
- }
247
-
248
- /**
249
- * Sign a message using ECDSA
250
- * @param privateKey The private key to sign with
251
- * @param message The message to sign
252
- */
253
- public sign(privateKey: Uint8Array, message: Uint8Array): Uint8Array {
254
- const hash = sha256(message);
255
- const signature = secp256k1.sign(hash, privateKey);
256
- if (signature instanceof Uint8Array) {
257
- return signature;
258
- }
259
- // Check if signature has toCompactRawBytes method
260
- if (
261
- signature &&
262
- typeof signature === 'object' &&
263
- 'toCompactRawBytes' in signature
264
- ) {
265
- const sig = signature as { toCompactRawBytes: () => Uint8Array };
266
- if (typeof sig.toCompactRawBytes === 'function') {
267
- return sig.toCompactRawBytes();
268
- }
269
- }
270
- // Fallback or error
271
- throw new Error('Unknown signature format');
272
- }
273
-
274
- /**
275
- * Verify a signature using ECDSA
276
- * @param publicKey The public key to verify with
277
- * @param message The message that was signed
278
- * @param signature The signature to verify
279
- */
280
- public verify(
281
- publicKey: Uint8Array,
282
- message: Uint8Array,
283
- signature: Uint8Array,
284
- ): boolean {
285
- const hash = sha256(message);
286
- try {
287
- return secp256k1.verify(signature, hash, publicKey);
288
- } catch (e) {
289
- return false;
290
- }
291
- }
292
- }