@digitaldefiance/ecies-lib 1.1.24 → 1.1.26

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 (348) hide show
  1. package/README.md +8 -0
  2. package/package.json +5 -4
  3. package/src/constants.d.ts +46 -0
  4. package/src/constants.d.ts.map +1 -0
  5. package/src/constants.js +358 -0
  6. package/src/constants.js.map +1 -0
  7. package/src/email-string.d.ts +42 -0
  8. package/src/email-string.d.ts.map +1 -0
  9. package/src/email-string.js +73 -0
  10. package/src/email-string.js.map +1 -0
  11. package/src/enumerations/ecies-encryption-type.d.ts +15 -0
  12. package/src/enumerations/ecies-encryption-type.d.ts.map +1 -0
  13. package/src/enumerations/ecies-encryption-type.js +71 -0
  14. package/src/enumerations/ecies-encryption-type.js.map +1 -0
  15. package/src/enumerations/ecies-error-type.d.ts +32 -0
  16. package/src/enumerations/ecies-error-type.d.ts.map +1 -0
  17. package/src/enumerations/ecies-error-type.js +36 -0
  18. package/src/enumerations/ecies-error-type.js.map +1 -0
  19. package/src/enumerations/ecies-string-key.d.ts +96 -0
  20. package/src/enumerations/ecies-string-key.d.ts.map +1 -0
  21. package/src/enumerations/ecies-string-key.js +105 -0
  22. package/src/enumerations/ecies-string-key.js.map +1 -0
  23. package/src/enumerations/guid-brand-type.d.ts +27 -0
  24. package/src/enumerations/guid-brand-type.d.ts.map +1 -0
  25. package/src/enumerations/guid-brand-type.js +31 -0
  26. package/src/enumerations/guid-brand-type.js.map +1 -0
  27. package/src/enumerations/guid-error-type.d.ts +7 -0
  28. package/src/enumerations/guid-error-type.d.ts.map +1 -0
  29. package/src/enumerations/guid-error-type.js +11 -0
  30. package/src/enumerations/guid-error-type.js.map +1 -0
  31. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  32. package/src/enumerations/index.d.ts.map +1 -0
  33. package/src/enumerations/index.js +18 -0
  34. package/src/enumerations/index.js.map +1 -0
  35. package/src/enumerations/invalid-email-type.d.ts +6 -0
  36. package/src/enumerations/invalid-email-type.d.ts.map +1 -0
  37. package/src/enumerations/invalid-email-type.js +10 -0
  38. package/src/enumerations/invalid-email-type.js.map +1 -0
  39. package/src/enumerations/length-encoding-type.d.ts +7 -0
  40. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  41. package/src/enumerations/length-encoding-type.js +11 -0
  42. package/src/enumerations/length-encoding-type.js.map +1 -0
  43. package/src/enumerations/length-error-type.d.ts +6 -0
  44. package/src/enumerations/length-error-type.d.ts.map +1 -0
  45. package/src/enumerations/length-error-type.js +10 -0
  46. package/src/enumerations/length-error-type.js.map +1 -0
  47. package/src/enumerations/member-error-type.d.ts +87 -0
  48. package/src/enumerations/member-error-type.d.ts.map +1 -0
  49. package/src/enumerations/member-error-type.js +91 -0
  50. package/src/enumerations/member-error-type.js.map +1 -0
  51. package/src/enumerations/{member-type.ts → member-type.d.ts} +6 -7
  52. package/src/enumerations/member-type.d.ts.map +1 -0
  53. package/src/enumerations/member-type.js +19 -0
  54. package/src/enumerations/member-type.js.map +1 -0
  55. package/src/enumerations/password-login-error-type.d.ts +5 -0
  56. package/src/enumerations/password-login-error-type.d.ts.map +1 -0
  57. package/src/enumerations/password-login-error-type.js +9 -0
  58. package/src/enumerations/password-login-error-type.js.map +1 -0
  59. package/src/enumerations/pbkdf2-error-type.d.ts +6 -0
  60. package/src/enumerations/pbkdf2-error-type.d.ts.map +1 -0
  61. package/src/enumerations/pbkdf2-error-type.js +10 -0
  62. package/src/enumerations/pbkdf2-error-type.js.map +1 -0
  63. package/src/enumerations/pbkdf2-profile.d.ts +6 -0
  64. package/src/enumerations/pbkdf2-profile.d.ts.map +1 -0
  65. package/src/enumerations/pbkdf2-profile.js +10 -0
  66. package/src/enumerations/pbkdf2-profile.js.map +1 -0
  67. package/src/enumerations/secure-storage-error-type.d.ts +6 -0
  68. package/src/enumerations/secure-storage-error-type.d.ts.map +1 -0
  69. package/src/enumerations/secure-storage-error-type.js +10 -0
  70. package/src/enumerations/secure-storage-error-type.js.map +1 -0
  71. package/src/errors/disposed.d.ts +4 -0
  72. package/src/errors/disposed.d.ts.map +1 -0
  73. package/src/errors/disposed.js +20 -0
  74. package/src/errors/disposed.js.map +1 -0
  75. package/src/errors/ecies.d.ts +7 -0
  76. package/src/errors/ecies.d.ts.map +1 -0
  77. package/src/errors/ecies.js +15 -0
  78. package/src/errors/ecies.js.map +1 -0
  79. package/src/errors/guid.d.ts +15 -0
  80. package/src/errors/guid.d.ts.map +1 -0
  81. package/src/errors/guid.js +26 -0
  82. package/src/errors/guid.js.map +1 -0
  83. package/src/errors/{index.ts → index.d.ts} +1 -0
  84. package/src/errors/index.d.ts.map +1 -0
  85. package/src/errors/index.js +12 -0
  86. package/src/errors/index.js.map +1 -0
  87. package/src/errors/invalid-email.d.ts +7 -0
  88. package/src/errors/invalid-email.d.ts.map +1 -0
  89. package/src/errors/invalid-email.js +14 -0
  90. package/src/errors/invalid-email.js.map +1 -0
  91. package/src/errors/length.d.ts +7 -0
  92. package/src/errors/length.d.ts.map +1 -0
  93. package/src/errors/length.js +14 -0
  94. package/src/errors/length.js.map +1 -0
  95. package/src/errors/member.d.ts +7 -0
  96. package/src/errors/member.d.ts.map +1 -0
  97. package/src/errors/member.js +14 -0
  98. package/src/errors/member.js.map +1 -0
  99. package/src/errors/pbkdf2.d.ts +7 -0
  100. package/src/errors/pbkdf2.d.ts.map +1 -0
  101. package/src/errors/pbkdf2.js +14 -0
  102. package/src/errors/pbkdf2.js.map +1 -0
  103. package/src/errors/secure-storage.d.ts +7 -0
  104. package/src/errors/secure-storage.d.ts.map +1 -0
  105. package/src/errors/secure-storage.js +15 -0
  106. package/src/errors/secure-storage.js.map +1 -0
  107. package/src/errors/simple-ecies.d.ts +6 -0
  108. package/src/errors/simple-ecies.d.ts.map +1 -0
  109. package/src/errors/simple-ecies.js +15 -0
  110. package/src/errors/simple-ecies.js.map +1 -0
  111. package/src/errors/simple-test-error.d.ts +4 -0
  112. package/src/errors/simple-test-error.d.ts.map +1 -0
  113. package/src/errors/simple-test-error.js +11 -0
  114. package/src/errors/simple-test-error.js.map +1 -0
  115. package/src/guid.d.ts +153 -0
  116. package/src/guid.d.ts.map +1 -0
  117. package/src/guid.js +615 -0
  118. package/src/guid.js.map +1 -0
  119. package/src/i18n-setup.d.ts +24 -0
  120. package/src/i18n-setup.d.ts.map +1 -0
  121. package/src/i18n-setup.js +837 -0
  122. package/src/i18n-setup.js.map +1 -0
  123. package/src/{index.ts → index.d.ts} +1 -0
  124. package/src/index.d.ts.map +1 -0
  125. package/src/index.js +19 -0
  126. package/src/index.js.map +1 -0
  127. package/src/interfaces/checksum-config.d.ts +5 -0
  128. package/src/interfaces/checksum-config.d.ts.map +1 -0
  129. package/src/interfaces/checksum-config.js +3 -0
  130. package/src/interfaces/checksum-config.js.map +1 -0
  131. package/src/interfaces/checksum-consts.d.ts +11 -0
  132. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  133. package/src/interfaces/checksum-consts.js +3 -0
  134. package/src/interfaces/checksum-consts.js.map +1 -0
  135. package/src/interfaces/constants.d.ts +45 -0
  136. package/src/interfaces/constants.d.ts.map +1 -0
  137. package/src/interfaces/constants.js +3 -0
  138. package/src/interfaces/constants.js.map +1 -0
  139. package/src/interfaces/ecies-config.d.ts +9 -0
  140. package/src/interfaces/ecies-config.d.ts.map +1 -0
  141. package/src/interfaces/ecies-config.js +3 -0
  142. package/src/interfaces/ecies-config.js.map +1 -0
  143. package/src/interfaces/ecies-consts.d.ts +58 -0
  144. package/src/interfaces/ecies-consts.d.ts.map +1 -0
  145. package/src/interfaces/ecies-consts.js +3 -0
  146. package/src/interfaces/ecies-consts.js.map +1 -0
  147. package/src/interfaces/ecies-file-service.d.ts +7 -0
  148. package/src/interfaces/ecies-file-service.d.ts.map +1 -0
  149. package/src/interfaces/ecies-file-service.js +3 -0
  150. package/src/interfaces/ecies-file-service.js.map +1 -0
  151. package/src/interfaces/guid.d.ts +45 -0
  152. package/src/interfaces/guid.d.ts.map +1 -0
  153. package/src/interfaces/guid.js +3 -0
  154. package/src/interfaces/guid.js.map +1 -0
  155. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  156. package/src/interfaces/index.d.ts.map +1 -0
  157. package/src/interfaces/index.js +17 -0
  158. package/src/interfaces/index.js.map +1 -0
  159. package/src/interfaces/library-error.d.ts +23 -0
  160. package/src/interfaces/library-error.d.ts.map +1 -0
  161. package/src/interfaces/library-error.js +3 -0
  162. package/src/interfaces/library-error.js.map +1 -0
  163. package/src/interfaces/member-operational.d.ts +40 -0
  164. package/src/interfaces/member-operational.d.ts.map +1 -0
  165. package/src/interfaces/member-operational.js +3 -0
  166. package/src/interfaces/member-operational.js.map +1 -0
  167. package/src/interfaces/{member-storage.ts → member-storage.d.ts} +10 -11
  168. package/src/interfaces/member-storage.d.ts.map +1 -0
  169. package/src/interfaces/member-storage.js +3 -0
  170. package/src/interfaces/member-storage.js.map +1 -0
  171. package/src/interfaces/{member-with-mnemonic.ts → member-with-mnemonic.d.ts} +3 -3
  172. package/src/interfaces/member-with-mnemonic.d.ts.map +1 -0
  173. package/src/interfaces/member-with-mnemonic.js +3 -0
  174. package/src/interfaces/member-with-mnemonic.js.map +1 -0
  175. package/src/interfaces/pbkdf2-config.d.ts +7 -0
  176. package/src/interfaces/pbkdf2-config.d.ts.map +1 -0
  177. package/src/interfaces/pbkdf2-config.js +3 -0
  178. package/src/interfaces/pbkdf2-config.js.map +1 -0
  179. package/src/interfaces/pbkdf2-consts.d.ts +9 -0
  180. package/src/interfaces/pbkdf2-consts.d.ts.map +1 -0
  181. package/src/interfaces/pbkdf2-consts.js +3 -0
  182. package/src/interfaces/pbkdf2-consts.js.map +1 -0
  183. package/src/interfaces/pbkdf2-result.d.ts +6 -0
  184. package/src/interfaces/pbkdf2-result.d.ts.map +1 -0
  185. package/src/interfaces/pbkdf2-result.js +3 -0
  186. package/src/interfaces/pbkdf2-result.js.map +1 -0
  187. package/src/member.d.ts +66 -0
  188. package/src/member.d.ts.map +1 -0
  189. package/src/member.js +269 -0
  190. package/src/member.js.map +1 -0
  191. package/src/{pbkdf2-profiles.ts → pbkdf2-profiles.d.ts} +2 -2
  192. package/src/pbkdf2-profiles.d.ts.map +1 -0
  193. package/src/pbkdf2-profiles.js +3 -0
  194. package/src/pbkdf2-profiles.js.map +1 -0
  195. package/src/phone-number.d.ts +6 -0
  196. package/src/phone-number.d.ts.map +1 -0
  197. package/src/phone-number.js +22 -0
  198. package/src/phone-number.js.map +1 -0
  199. package/src/regexes.d.ts +7 -0
  200. package/src/regexes.d.ts.map +1 -0
  201. package/src/regexes.js +10 -0
  202. package/src/regexes.js.map +1 -0
  203. package/src/secure-buffer.d.ts +38 -0
  204. package/src/secure-buffer.d.ts.map +1 -0
  205. package/src/secure-buffer.js +168 -0
  206. package/src/secure-buffer.js.map +1 -0
  207. package/src/secure-string.d.ts +39 -0
  208. package/src/secure-string.d.ts.map +1 -0
  209. package/src/secure-string.js +195 -0
  210. package/src/secure-string.js.map +1 -0
  211. package/src/services/aes-gcm.d.ts +57 -0
  212. package/src/services/aes-gcm.d.ts.map +1 -0
  213. package/src/services/aes-gcm.js +111 -0
  214. package/src/services/aes-gcm.js.map +1 -0
  215. package/src/services/ecies/crypto-core.d.ts +51 -0
  216. package/src/services/ecies/crypto-core.d.ts.map +1 -0
  217. package/src/services/ecies/crypto-core.js +139 -0
  218. package/src/services/ecies/crypto-core.js.map +1 -0
  219. package/src/services/ecies/example.d.ts +25 -0
  220. package/src/services/ecies/example.d.ts.map +1 -0
  221. package/src/services/ecies/example.js +128 -0
  222. package/src/services/ecies/example.js.map +1 -0
  223. package/src/services/ecies/file.d.ts +18 -0
  224. package/src/services/ecies/file.d.ts.map +1 -0
  225. package/src/services/ecies/file.js +110 -0
  226. package/src/services/ecies/file.js.map +1 -0
  227. package/src/services/ecies/{index.ts → index.d.ts} +1 -3
  228. package/src/services/ecies/index.d.ts.map +1 -0
  229. package/src/services/ecies/index.js +44 -0
  230. package/src/services/ecies/index.js.map +1 -0
  231. package/src/services/ecies/integration.d.ts +59 -0
  232. package/src/services/ecies/integration.d.ts.map +1 -0
  233. package/src/services/ecies/integration.js +172 -0
  234. package/src/services/ecies/integration.js.map +1 -0
  235. package/src/services/ecies/interfaces.d.ts +51 -0
  236. package/src/services/ecies/interfaces.d.ts.map +1 -0
  237. package/src/services/ecies/interfaces.js +6 -0
  238. package/src/services/ecies/interfaces.js.map +1 -0
  239. package/src/services/ecies/manual-test.d.ts +29 -0
  240. package/src/services/ecies/manual-test.d.ts.map +1 -0
  241. package/src/services/ecies/manual-test.js +171 -0
  242. package/src/services/ecies/manual-test.js.map +1 -0
  243. package/src/services/ecies/multi-recipient.d.ts +52 -0
  244. package/src/services/ecies/multi-recipient.d.ts.map +1 -0
  245. package/src/services/ecies/multi-recipient.js +243 -0
  246. package/src/services/ecies/multi-recipient.js.map +1 -0
  247. package/src/services/ecies/service.d.ts +104 -0
  248. package/src/services/ecies/service.d.ts.map +1 -0
  249. package/src/services/ecies/service.js +192 -0
  250. package/src/services/ecies/service.js.map +1 -0
  251. package/src/services/ecies/signature.d.ts +27 -0
  252. package/src/services/ecies/signature.d.ts.map +1 -0
  253. package/src/services/ecies/signature.js +76 -0
  254. package/src/services/ecies/signature.js.map +1 -0
  255. package/src/services/ecies/single-recipient.d.ts +46 -0
  256. package/src/services/ecies/single-recipient.d.ts.map +1 -0
  257. package/src/services/ecies/single-recipient.js +212 -0
  258. package/src/services/ecies/single-recipient.js.map +1 -0
  259. package/src/services/{index.ts → index.d.ts} +1 -0
  260. package/src/services/index.d.ts.map +1 -0
  261. package/src/services/index.js +9 -0
  262. package/src/services/index.js.map +1 -0
  263. package/src/services/password-login.d.ts +49 -0
  264. package/src/services/password-login.d.ts.map +1 -0
  265. package/src/services/password-login.js +121 -0
  266. package/src/services/password-login.js.map +1 -0
  267. package/src/services/pbkdf2.d.ts +56 -0
  268. package/src/services/pbkdf2.d.ts.map +1 -0
  269. package/src/services/pbkdf2.js +114 -0
  270. package/src/services/pbkdf2.js.map +1 -0
  271. package/src/services/xor.d.ts +37 -0
  272. package/src/services/xor.d.ts.map +1 -0
  273. package/src/services/xor.js +67 -0
  274. package/src/services/xor.js.map +1 -0
  275. package/src/types/deep-partial.d.ts +4 -0
  276. package/src/types/deep-partial.d.ts.map +1 -0
  277. package/src/types/deep-partial.js +3 -0
  278. package/src/types/deep-partial.js.map +1 -0
  279. package/src/{types.ts → types.d.ts} +4 -10
  280. package/src/types.d.ts.map +1 -0
  281. package/src/types.js +3 -0
  282. package/src/types.js.map +1 -0
  283. package/src/utils.d.ts +68 -0
  284. package/src/utils.d.ts.map +1 -0
  285. package/src/utils.js +288 -0
  286. package/src/utils.js.map +1 -0
  287. package/LICENSE +0 -21
  288. package/src/constants.ts +0 -474
  289. package/src/email-string.ts +0 -83
  290. package/src/enumerations/ecies-encryption-type.ts +0 -102
  291. package/src/enumerations/ecies-error-type.ts +0 -31
  292. package/src/enumerations/ecies-string-key.ts +0 -108
  293. package/src/enumerations/guid-brand-type.ts +0 -26
  294. package/src/enumerations/guid-error-type.ts +0 -6
  295. package/src/enumerations/invalid-email-type.ts +0 -5
  296. package/src/enumerations/length-encoding-type.ts +0 -6
  297. package/src/enumerations/length-error-type.ts +0 -5
  298. package/src/enumerations/member-error-type.ts +0 -106
  299. package/src/enumerations/password-login-error-type.ts +0 -4
  300. package/src/enumerations/pbkdf2-error-type.ts +0 -5
  301. package/src/enumerations/pbkdf2-profile.ts +0 -5
  302. package/src/enumerations/secure-storage-error-type.ts +0 -5
  303. package/src/errors/disposed.ts +0 -15
  304. package/src/errors/ecies.ts +0 -34
  305. package/src/errors/guid.ts +0 -34
  306. package/src/errors/invalid-email.ts +0 -11
  307. package/src/errors/length.ts +0 -11
  308. package/src/errors/member.ts +0 -12
  309. package/src/errors/pbkdf2.ts +0 -12
  310. package/src/errors/secure-storage.ts +0 -13
  311. package/src/errors/simple-ecies.ts +0 -18
  312. package/src/errors/simple-test-error.ts +0 -6
  313. package/src/guid.ts +0 -800
  314. package/src/i18n-setup.ts +0 -1312
  315. package/src/interfaces/checksum-config.ts +0 -4
  316. package/src/interfaces/checksum-consts.ts +0 -13
  317. package/src/interfaces/constants.ts +0 -48
  318. package/src/interfaces/ecies-config.ts +0 -8
  319. package/src/interfaces/ecies-consts.ts +0 -70
  320. package/src/interfaces/ecies-file-service.ts +0 -6
  321. package/src/interfaces/guid.ts +0 -53
  322. package/src/interfaces/library-error.ts +0 -23
  323. package/src/interfaces/member-operational.ts +0 -54
  324. package/src/interfaces/pbkdf2-config.ts +0 -6
  325. package/src/interfaces/pbkdf2-consts.ts +0 -10
  326. package/src/interfaces/pbkdf2-result.ts +0 -5
  327. package/src/member.ts +0 -429
  328. package/src/phone-number.ts +0 -18
  329. package/src/regexes.ts +0 -10
  330. package/src/secure-buffer.ts +0 -183
  331. package/src/secure-string.ts +0 -229
  332. package/src/services/aes-gcm.ts +0 -177
  333. package/src/services/ecies/README.md +0 -147
  334. package/src/services/ecies/crypto-core.ts +0 -180
  335. package/src/services/ecies/example.ts +0 -185
  336. package/src/services/ecies/file.ts +0 -167
  337. package/src/services/ecies/integration.ts +0 -241
  338. package/src/services/ecies/interfaces.ts +0 -59
  339. package/src/services/ecies/manual-test.ts +0 -219
  340. package/src/services/ecies/multi-recipient.ts +0 -394
  341. package/src/services/ecies/service.ts +0 -317
  342. package/src/services/ecies/signature.ts +0 -93
  343. package/src/services/ecies/single-recipient.ts +0 -340
  344. package/src/services/password-login.ts +0 -228
  345. package/src/services/pbkdf2.ts +0 -172
  346. package/src/services/xor.ts +0 -65
  347. package/src/types/deep-partial.ts +0 -11
  348. package/src/utils.ts +0 -331
@@ -1,180 +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 { IECIESConstants } from '../../interfaces/ecies-consts';
16
- import { EciesComponentId, getEciesI18nEngine } from '../../i18n-setup';
17
- import { EciesStringKey } from '../../enumerations';
18
-
19
- /**
20
- * Browser-compatible crypto core for ECIES operations
21
- * Uses @scure libraries for browser compatibility
22
- */
23
- export class EciesCryptoCore {
24
- protected readonly _config: IECIESConfig;
25
- protected readonly _eciesConsts: IECIESConstants;
26
-
27
- constructor(config: IECIESConfig, eciesParams: IECIESConstants = Constants.ECIES) {
28
- this._config = config;
29
- this._eciesConsts = eciesParams;
30
- }
31
-
32
-
33
-
34
- public get config(): IECIESConfig {
35
- return this._config;
36
- }
37
-
38
- /**
39
- * Validates and normalizes a public key for ECIES operations
40
- */
41
- public normalizePublicKey(publicKey: Uint8Array): Uint8Array {
42
- if (!publicKey) {
43
- const engine = getEciesI18nEngine();
44
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_ReceivedNullOrUndefinedPublicKey));
45
- }
46
-
47
- const keyLength = publicKey.length;
48
-
49
- // Already in correct format (65 bytes with 0x04 prefix)
50
- if (
51
- keyLength === this._eciesConsts.PUBLIC_KEY_LENGTH &&
52
- publicKey[0] === this._eciesConsts.PUBLIC_KEY_MAGIC
53
- ) {
54
- return publicKey;
55
- }
56
-
57
- // Raw key without prefix (64 bytes) - add the 0x04 prefix
58
- if (keyLength === this._eciesConsts.RAW_PUBLIC_KEY_LENGTH) {
59
- const result = new Uint8Array(this._eciesConsts.PUBLIC_KEY_LENGTH);
60
- result[0] = this._eciesConsts.PUBLIC_KEY_MAGIC;
61
- result.set(publicKey, 1);
62
- return result;
63
- }
64
-
65
- const engine = getEciesI18nEngine();
66
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidPublicKeyFormatOrLengthTemplate, { keyLength }));
67
- }
68
-
69
- /**
70
- * Generate a new mnemonic
71
- */
72
- public generateNewMnemonic(): SecureString {
73
- return new SecureString(
74
- generateMnemonic(wordlist, this._config.mnemonicStrength),
75
- );
76
- }
77
-
78
- /**
79
- * Generate wallet and seed from mnemonic
80
- */
81
- public walletAndSeedFromMnemonic(mnemonic: SecureString): IWalletSeed {
82
- if (!mnemonic || !validateMnemonic(mnemonic.value ?? '', wordlist)) {
83
- const engine = getEciesI18nEngine();
84
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidMnemonic));
85
- }
86
-
87
- const seed = mnemonicToSeedSync(mnemonic.value ?? '');
88
- const hdKey = HDKey.fromMasterSeed(seed);
89
- const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
90
-
91
- if (!derivedKey.privateKey) {
92
- const engine = getEciesI18nEngine();
93
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey));
94
- }
95
-
96
- const privateKey = derivedKey.privateKey;
97
-
98
- const wallet = new Wallet(privateKey);
99
-
100
- return {
101
- wallet,
102
- seed,
103
- };
104
- }
105
-
106
- /**
107
- * Create a simple key pair from a seed
108
- */
109
- public seedToSimpleKeyPair(seed: Uint8Array): ISimpleKeyPair {
110
- const hdKey = HDKey.fromMasterSeed(seed);
111
- const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
112
-
113
- if (!derivedKey.privateKey) {
114
- const engine = getEciesI18nEngine();
115
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey));
116
- }
117
-
118
- const privateKey = derivedKey.privateKey;
119
- const publicKey = secp256k1.getPublicKey(privateKey, false); // uncompressed with 0x04 prefix
120
-
121
- return {
122
- privateKey,
123
- publicKey,
124
- };
125
- }
126
-
127
- /**
128
- * Create a simple key pair from a mnemonic
129
- */
130
- public mnemonicToSimpleKeyPair(mnemonic: SecureString): ISimpleKeyPair {
131
- const { seed } = this.walletAndSeedFromMnemonic(mnemonic);
132
- return this.seedToSimpleKeyPair(seed);
133
- }
134
-
135
- /**
136
- * Generate a random private key
137
- */
138
- public generatePrivateKey(): Uint8Array {
139
- return secp256k1.utils.randomSecretKey();
140
- }
141
-
142
- /**
143
- * Get public key from private key
144
- */
145
- public getPublicKey(privateKey: Uint8Array): Uint8Array {
146
- const publicKeyPoint = secp256k1.getPublicKey(privateKey, false); // uncompressed
147
- // publicKeyPoint already includes the 0x04 prefix, so return as-is
148
- return publicKeyPoint;
149
- }
150
-
151
- /**
152
- * Generate ephemeral key pair for ECIES
153
- */
154
- public async generateEphemeralKeyPair(): Promise<ISimpleKeyPair> {
155
- const privateKey = this.generatePrivateKey();
156
- const publicKey = this.getPublicKey(privateKey);
157
- return { privateKey, publicKey };
158
- }
159
-
160
- /**
161
- * Compute ECDH shared secret
162
- */
163
- public computeSharedSecret(
164
- privateKey: Uint8Array,
165
- publicKey: Uint8Array,
166
- ): Uint8Array {
167
- // Normalize the public key to ensure it has the correct format
168
- const normalizedPublicKey = this.normalizePublicKey(publicKey);
169
-
170
- // Use uncompressed shared secret to match Node.js ECDH behavior
171
- // Node.js ECDH.computeSecret() returns the x-coordinate of the shared point
172
- const sharedSecret = secp256k1.getSharedSecret(
173
- privateKey,
174
- normalizedPublicKey,
175
- false,
176
- );
177
- // Return only the x-coordinate (first 32 bytes after the 0x04 prefix)
178
- return sharedSecret.slice(1, 33);
179
- }
180
- }
@@ -1,185 +0,0 @@
1
- /**
2
- * Example usage of the browser-compatible ECIES service
3
- * This file demonstrates how to use the web-based ECIES implementation
4
- */
5
-
6
- import { SecureString } from '../../secure-string';
7
- import {
8
- stringToUint8Array,
9
- uint8ArrayToHex,
10
- uint8ArrayToString,
11
- } from '../../utils';
12
- import { ECIESService } from './service';
13
-
14
- // https://docs.rs/bip39/latest/src/bip39/lib.rs.html
15
-
16
- /**
17
- * Example: Basic encryption and decryption
18
- */
19
- export async function basicEncryptionExample(): Promise<void> {
20
- console.log('=== Basic ECIES Encryption Example ===');
21
-
22
- // Create ECIES service instance
23
- const ecies = new ECIESService();
24
-
25
- // Generate a mnemonic and derive keys
26
- const mnemonic = ecies.generateNewMnemonic();
27
- console.log('Generated mnemonic:', mnemonic);
28
-
29
- const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
30
- console.log('Private key hash:', uint8ArrayToHex(privateKey).slice(0, 16) + '...');
31
- console.log('Public key:', uint8ArrayToHex(publicKey));
32
-
33
- // Message to encrypt
34
- const message = stringToUint8Array('Hello, Digital Defiance!');
35
- console.log('Original message:', uint8ArrayToString(message));
36
-
37
- // Encrypt using single mode (with CRC and length)
38
- const encrypted = await ecies.encryptSimpleOrSingle(
39
- false,
40
- publicKey,
41
- message,
42
- );
43
- console.log('Encrypted data length:', encrypted.length);
44
- console.log('Encrypted data (hex):', uint8ArrayToHex(encrypted));
45
-
46
- // Decrypt the message
47
- const decrypted = await ecies.decryptSimpleOrSingleWithHeader(
48
- false,
49
- privateKey,
50
- encrypted,
51
- );
52
- console.log('Decrypted message:', uint8ArrayToString(decrypted));
53
-
54
- // Verify the message matches
55
- const matches = uint8ArrayToString(message) === uint8ArrayToString(decrypted);
56
- console.log('Encryption/Decryption successful:', matches);
57
- }
58
-
59
- /**
60
- * Example: Simple mode encryption (without CRC)
61
- */
62
- export async function simpleEncryptionExample(): Promise<void> {
63
- console.log('\n=== Simple ECIES Encryption Example ===');
64
-
65
- const ecies = new ECIESService();
66
-
67
- // Generate keys for sender and receiver
68
- const senderMnemonic = ecies.generateNewMnemonic();
69
- const receiverMnemonic = ecies.generateNewMnemonic();
70
-
71
- const senderKeys = ecies.mnemonicToSimpleKeyPair(senderMnemonic);
72
- const receiverKeys = ecies.mnemonicToSimpleKeyPair(receiverMnemonic);
73
-
74
- console.log('Sender public key:', uint8ArrayToHex(senderKeys.publicKey));
75
- console.log('Receiver public key:', uint8ArrayToHex(receiverKeys.publicKey));
76
-
77
- // Message to encrypt
78
- const message = stringToUint8Array('This is a simple encrypted message');
79
- console.log('Original message:', uint8ArrayToString(message));
80
-
81
- // Encrypt using simple mode (no CRC, no length prefix)
82
- const encrypted = await ecies.encryptSimpleOrSingle(
83
- true,
84
- receiverKeys.publicKey,
85
- message,
86
- );
87
- console.log('Encrypted data length:', encrypted.length);
88
-
89
- // Decrypt the message
90
- const decrypted = await ecies.decryptSimpleOrSingleWithHeader(
91
- true,
92
- receiverKeys.privateKey,
93
- encrypted,
94
- );
95
- console.log('Decrypted message:', uint8ArrayToString(decrypted));
96
-
97
- // Verify the message matches
98
- const matches = uint8ArrayToString(message) === uint8ArrayToString(decrypted);
99
- console.log('Simple encryption/decryption successful:', matches);
100
- }
101
-
102
- /**
103
- * Example: Digital signature
104
- */
105
- export async function signatureExample(): Promise<void> {
106
- console.log('\n=== Digital Signature Example ===');
107
-
108
- const ecies = new ECIESService();
109
-
110
- // Generate keys
111
- const mnemonic = ecies.generateNewMnemonic();
112
- const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
113
-
114
- // Message to sign
115
- const message = stringToUint8Array('This message is digitally signed');
116
- console.log('Message to sign:', uint8ArrayToString(message));
117
-
118
- // Sign the message
119
- const signature = ecies.signMessage(privateKey, message);
120
- console.log('Signature:', uint8ArrayToHex(signature));
121
-
122
- // Verify the signature
123
- const isValid = ecies.verifyMessage(publicKey, message, signature);
124
- console.log('Signature valid:', isValid);
125
-
126
- // Test with tampered message
127
- const tamperedMessage = stringToUint8Array(
128
- 'This message has been tampered with',
129
- );
130
- const isTamperedValid = ecies.verifyMessage(
131
- publicKey,
132
- tamperedMessage,
133
- signature,
134
- );
135
- console.log('Tampered message signature valid:', isTamperedValid);
136
- }
137
-
138
- /**
139
- * Example: Wallet derivation from mnemonic
140
- */
141
- export async function walletDerivationExample(): Promise<void> {
142
- console.log('\n=== Wallet Derivation Example ===');
143
-
144
- const ecies = new ECIESService();
145
-
146
- // Use a known mnemonic for reproducible results
147
- const mnemonic = new SecureString(
148
- 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about',
149
- );
150
- console.log('Test mnemonic: [REDACTED - known test mnemonic]');
151
-
152
- // Derive wallet
153
- const { wallet, seed } = ecies.walletAndSeedFromMnemonic(mnemonic);
154
- console.log('Seed:', uint8ArrayToHex(seed));
155
- console.log('Private key hash:', uint8ArrayToHex(wallet.getPrivateKey()).slice(0, 16) + '...');
156
- console.log('Public key:', uint8ArrayToHex(wallet.getPublicKey()));
157
-
158
- // Derive the same keys using the simple method
159
- const simpleKeys = ecies.mnemonicToSimpleKeyPair(mnemonic);
160
- console.log(
161
- 'Simple private key matches:',
162
- uint8ArrayToHex(wallet.getPrivateKey()) ===
163
- uint8ArrayToHex(simpleKeys.privateKey),
164
- );
165
- console.log(
166
- 'Simple public key matches:',
167
- uint8ArrayToHex(wallet.getPublicKey()) ===
168
- uint8ArrayToHex(simpleKeys.publicKey),
169
- );
170
- }
171
-
172
- /**
173
- * Run all examples
174
- */
175
- export async function runAllExamples(): Promise<void> {
176
- try {
177
- await basicEncryptionExample();
178
- await simpleEncryptionExample();
179
- await signatureExample();
180
- await walletDerivationExample();
181
- console.log('\n=== All examples completed successfully! ===');
182
- } catch (error) {
183
- console.error('Example failed:', error);
184
- }
185
- }
@@ -1,167 +0,0 @@
1
- import { IEciesFileService } from '../../interfaces/ecies-file-service';
2
- import { ECIESService } from './service';
3
-
4
- interface ChunkedFileHeader {
5
- version: number;
6
- chunkSize: number;
7
- totalChunks: number;
8
- originalSize: number;
9
- }
10
-
11
- export class EciesFileService implements IEciesFileService {
12
- private static readonly CHUNK_SIZE = 1024 * 1024; // 1MB chunks
13
- private static readonly HEADER_SIZE = 20; // 4 bytes each: version, chunkSize, totalChunks, originalSize, padding
14
-
15
- constructor(
16
- private eciesService: ECIESService,
17
- private userPrivateKey: Uint8Array,
18
- ) {}
19
-
20
- async encryptFile(
21
- file: File,
22
- recipientPublicKey: Uint8Array,
23
- ): Promise<Uint8Array> {
24
- const totalChunks = Math.ceil(file.size / EciesFileService.CHUNK_SIZE);
25
- const header: ChunkedFileHeader = {
26
- version: 1,
27
- chunkSize: EciesFileService.CHUNK_SIZE,
28
- totalChunks,
29
- originalSize: file.size,
30
- };
31
-
32
- const headerBytes = this.serializeHeader(header);
33
- const encryptedHeader = await this.eciesService.encryptSimpleOrSingle(
34
- false,
35
- recipientPublicKey,
36
- headerBytes,
37
- );
38
-
39
- const chunks: Uint8Array[] = [encryptedHeader];
40
-
41
- for (let i = 0; i < totalChunks; i++) {
42
- const offset = i * EciesFileService.CHUNK_SIZE;
43
- const chunk = file.slice(offset, offset + EciesFileService.CHUNK_SIZE);
44
- const chunkData = new Uint8Array(await chunk.arrayBuffer());
45
- const encryptedChunk = await this.eciesService.encryptSimpleOrSingle(
46
- false,
47
- recipientPublicKey,
48
- chunkData,
49
- );
50
- chunks.push(encryptedChunk);
51
- }
52
-
53
- const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
54
- const result = new Uint8Array(totalLength);
55
- let offset = 0;
56
- for (const chunk of chunks) {
57
- result.set(chunk, offset);
58
- offset += chunk.length;
59
- }
60
- return result;
61
- }
62
-
63
- async decryptFile(encryptedData: Uint8Array): Promise<Uint8Array> {
64
- const { header, chunks } = await this.parseEncryptedFile(encryptedData);
65
- const decryptedChunks: Uint8Array[] = [];
66
-
67
- for (const chunk of chunks) {
68
- const decrypted = await this.eciesService.decryptSimpleOrSingleWithHeader(
69
- false,
70
- this.userPrivateKey,
71
- chunk,
72
- );
73
- decryptedChunks.push(decrypted);
74
- }
75
-
76
- const result = new Uint8Array(header.originalSize);
77
- let offset = 0;
78
- for (const chunk of decryptedChunks) {
79
- const copyLength = Math.min(chunk.length, header.originalSize - offset);
80
- result.set(chunk.subarray(0, copyLength), offset);
81
- offset += copyLength;
82
- }
83
- return result;
84
- }
85
-
86
- downloadEncryptedFile(encryptedData: Uint8Array, filename: string): void {
87
- this.downloadFile(encryptedData, `${filename}.encrypted`);
88
- }
89
-
90
- downloadDecryptedFile(decryptedData: Uint8Array, filename: string): void {
91
- this.downloadFile(decryptedData, filename);
92
- }
93
-
94
- private serializeHeader(header: ChunkedFileHeader): Uint8Array {
95
- const buffer = new ArrayBuffer(EciesFileService.HEADER_SIZE);
96
- const view = new DataView(buffer);
97
- view.setUint32(0, header.version, false);
98
- view.setUint32(4, header.chunkSize, false);
99
- view.setUint32(8, header.totalChunks, false);
100
- view.setUint32(12, header.originalSize, false);
101
- return new Uint8Array(buffer);
102
- }
103
-
104
- private deserializeHeader(data: Uint8Array): ChunkedFileHeader {
105
- const view = new DataView(
106
- data.buffer,
107
- data.byteOffset,
108
- EciesFileService.HEADER_SIZE,
109
- );
110
- return {
111
- version: view.getUint32(0, false),
112
- chunkSize: view.getUint32(4, false),
113
- totalChunks: view.getUint32(8, false),
114
- originalSize: view.getUint32(12, false),
115
- };
116
- }
117
-
118
- private async parseEncryptedFile(encryptedData: Uint8Array): Promise<{
119
- header: ChunkedFileHeader;
120
- chunks: Uint8Array[];
121
- }> {
122
- // First, decrypt the header to get metadata
123
- const headerLength = this.eciesService.computeEncryptedLengthFromDataLength(
124
- EciesFileService.HEADER_SIZE,
125
- 'single',
126
- );
127
-
128
- const encryptedHeader = encryptedData.subarray(0, headerLength);
129
- const decryptedHeaderBytes =
130
- await this.eciesService.decryptSimpleOrSingleWithHeader(
131
- false,
132
- this.userPrivateKey,
133
- encryptedHeader,
134
- );
135
-
136
- const header = this.deserializeHeader(decryptedHeaderBytes);
137
- const chunks: Uint8Array[] = [];
138
- let offset = headerLength;
139
-
140
- for (let i = 0; i < header.totalChunks; i++) {
141
- const chunkLength =
142
- this.eciesService.computeEncryptedLengthFromDataLength(
143
- i === header.totalChunks - 1
144
- ? header.originalSize % header.chunkSize || header.chunkSize
145
- : header.chunkSize,
146
- 'single',
147
- );
148
-
149
- chunks.push(encryptedData.subarray(offset, offset + chunkLength));
150
- offset += chunkLength;
151
- }
152
-
153
- return { header, chunks };
154
- }
155
-
156
- private downloadFile(data: Uint8Array, filename: string): void {
157
- const blob = new Blob([data.slice()]);
158
- const url = URL.createObjectURL(blob);
159
- const a = document.createElement('a');
160
- a.href = url;
161
- a.download = filename;
162
- document.body.appendChild(a);
163
- a.click();
164
- document.body.removeChild(a);
165
- URL.revokeObjectURL(url);
166
- }
167
- }