@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,172 +0,0 @@
1
- import { CoreLanguageCode, PluginI18nEngine } from '@digitaldefiance/i18n-lib';
2
- import { Constants } from '../constants';
3
- import { Pbkdf2ErrorType } from '../enumerations/pbkdf2-error-type';
4
- import { Pbkdf2ProfileEnum } from '../enumerations/pbkdf2-profile';
5
- import { Pbkdf2Error } from '../errors/pbkdf2';
6
- import { IPbkdf2Config } from '../interfaces/pbkdf2-config';
7
- import { IPbkdf2Result } from '../interfaces/pbkdf2-result';
8
- import { IECIESConstants } from '../interfaces/ecies-consts';
9
- import { IPBkdf2Consts } from '../interfaces/pbkdf2-consts';
10
-
11
- /**
12
- * Service for handling PBKDF2 (Password-Based Key Derivation Function 2) operations.
13
- * This service provides functionality for:
14
- * - Generating secure key derivation configurations
15
- * - Deriving cryptographic keys from passwords
16
- * - Managing salt and iteration parameters
17
- * - Both synchronous and asynchronous key derivation
18
- */
19
- export class Pbkdf2Service<TLanguage extends CoreLanguageCode> {
20
- protected readonly engine: PluginI18nEngine<TLanguage>;
21
- protected readonly profiles: Record<string, IPbkdf2Config>;
22
- protected readonly eciesConsts: IECIESConstants;
23
- protected readonly pbkdf2Consts: IPBkdf2Consts;
24
-
25
- constructor(
26
- engine: PluginI18nEngine<TLanguage>,
27
- profiles: Record<string, IPbkdf2Config> = Constants.PBKDF2_PROFILES,
28
- eciesParams: IECIESConstants = Constants.ECIES,
29
- pbkdf2Params: IPBkdf2Consts = Constants.PBKDF2,
30
- ) {
31
- this.engine = engine;
32
- this.profiles = profiles;
33
- this.eciesConsts = eciesParams;
34
- this.pbkdf2Consts = pbkdf2Params;
35
- }
36
- /**
37
- * Get a predefined configuration profile for common use cases
38
- * @param profile The name of the profile to use
39
- * @returns Configuration object for the specified profile
40
- */
41
- public getProfileConfig(
42
- profile: string,
43
- ): IPbkdf2Config {
44
- const profileConfig = this.profiles[profile];
45
- if (!profileConfig) {
46
- throw new Pbkdf2Error(Pbkdf2ErrorType.InvalidProfile, this.engine);
47
- }
48
- return {
49
- hashBytes: profileConfig.hashBytes,
50
- saltBytes: profileConfig.saltBytes,
51
- iterations: profileConfig.iterations,
52
- algorithm: profileConfig.algorithm,
53
- };
54
- }
55
-
56
- /**
57
- * Generate an options object for pbkdf2
58
- * @param iterations Optional number of iterations (defaults to Pbkdf2IterationsPerSecond)
59
- * @param saltBytes Optional salt size in bytes (defaults to PBKDF2.SALT_BYTES)
60
- * @param hashBytes Optional hash size in bytes (defaults to ECIES.SYMMETRIC.KEY_SIZE)
61
- * @param algorithm Optional hash algorithm (defaults to PBKDF2.ALGORITHM)
62
- * @returns Configuration object for PBKDF2
63
- */
64
- public getConfig(
65
- iterations?: number,
66
- saltBytes?: number,
67
- hashBytes?: number,
68
- algorithm?: string,
69
- ): IPbkdf2Config {
70
- // larger numbers mean better security, less
71
- return {
72
- // size of the generated hash
73
- hashBytes: hashBytes ?? this.eciesConsts.SYMMETRIC.KEY_SIZE,
74
- // larger salt means hashed passwords are more resistant to rainbow table, but
75
- // you get diminishing returns pretty fast
76
- saltBytes: saltBytes ?? this.pbkdf2Consts.SALT_BYTES,
77
- // more iterations means an attacker has to take longer to brute force an
78
- // individual password, so larger is better. however, larger also means longer
79
- // to hash the password. tune so that hashing the password takes about a
80
- // second
81
- iterations: iterations ?? this.pbkdf2Consts.ITERATIONS_PER_SECOND,
82
- // hash algorithm
83
- algorithm: algorithm ?? this.pbkdf2Consts.ALGORITHM,
84
- };
85
- }
86
-
87
- /**
88
- * Given a password, use pbkdf2 to generate an appropriately sized key for AES encryption
89
- * @param password The password to derive a key from
90
- * @param salt Optional salt (will be randomly generated if not provided)
91
- * @param iterations Optional number of iterations
92
- * @param saltBytes Optional salt size in bytes
93
- * @param keySize Optional key size in bytes
94
- * @param algorithm Optional hash algorithm
95
- * @returns Object containing the derived key, salt, and iteration count
96
- */
97
- public async deriveKeyFromPasswordAsync(
98
- password: Uint8Array,
99
- salt?: Uint8Array,
100
- iterations?: number,
101
- saltBytes?: number,
102
- keySize?: number,
103
- algorithm?: string,
104
- ): Promise<IPbkdf2Result> {
105
- const config = this.getConfig(
106
- iterations,
107
- saltBytes,
108
- keySize,
109
- algorithm,
110
- );
111
- const saltBytes_ =
112
- salt ?? crypto.getRandomValues(new Uint8Array(config.saltBytes));
113
-
114
- if (saltBytes_.length !== config.saltBytes) {
115
- throw new Pbkdf2Error(Pbkdf2ErrorType.InvalidSaltLength, this.engine);
116
- }
117
-
118
- const keyMaterial = await crypto.subtle.importKey(
119
- 'raw',
120
- new Uint8Array(password),
121
- 'PBKDF2',
122
- false,
123
- ['deriveBits'],
124
- );
125
-
126
- const keyArray = await crypto.subtle.deriveBits(
127
- {
128
- name: 'PBKDF2',
129
- salt: new Uint8Array(saltBytes_),
130
- iterations: config.iterations,
131
- hash: config.algorithm,
132
- },
133
- keyMaterial,
134
- config.hashBytes * 8,
135
- );
136
-
137
- const keyBytes = new Uint8Array(keyArray);
138
-
139
- if (keyBytes.length !== config.hashBytes) {
140
- throw new Pbkdf2Error(Pbkdf2ErrorType.InvalidHashLength, this.engine);
141
- }
142
-
143
- return {
144
- salt: saltBytes_,
145
- hash: keyBytes,
146
- iterations: config.iterations,
147
- };
148
- }
149
-
150
- /**
151
- * Derive a key using a predefined configuration profile
152
- * @param password The password to derive a key from
153
- * @param profile The configuration profile to use
154
- * @param salt Optional salt (will be randomly generated if not provided)
155
- * @returns Object containing the derived key, salt, and iteration count
156
- */
157
- public async deriveKeyFromPasswordWithProfileAsync(
158
- password: Uint8Array,
159
- profile: Pbkdf2ProfileEnum,
160
- salt?: Uint8Array,
161
- ): Promise<IPbkdf2Result> {
162
- const config = this.getProfileConfig(profile);
163
- return await this.deriveKeyFromPasswordAsync(
164
- password,
165
- salt,
166
- config.iterations,
167
- config.saltBytes,
168
- config.hashBytes,
169
- config.algorithm,
170
- );
171
- }
172
- }
@@ -1,65 +0,0 @@
1
- /**
2
- * A simple and fast XOR cipher for obfuscating data in memory for browser environments.
3
- * This is not a substitute for strong cryptography but provides a lightweight way
4
- * to prevent sensitive data from being stored in plaintext in memory.
5
- */
6
- export class XorService {
7
- /**
8
- * Encrypts or decrypts data using a simple XOR cipher.
9
- * The key is XORed with the data. The same function is used for
10
- * both encryption and decryption.
11
- *
12
- * @param data The data to process.
13
- * @param key The key to use for the XOR operation.
14
- * @returns A new Uint8Array containing the result of the XOR operation.
15
- */
16
- public static xor(data: Uint8Array, key: Uint8Array): Uint8Array {
17
- const result = new Uint8Array(data.length);
18
- for (let i = 0; i < data.length; i++) {
19
- result[i] = data[i] ^ key[i % key.length];
20
- }
21
- return result;
22
- }
23
-
24
- /**
25
- * Generates a random key of a specified length.
26
- * @param length The length of the key in bytes.
27
- * @returns A Uint8Array containing the random key.
28
- * @throws Error if crypto API is not available.
29
- */
30
- public static generateKey(length: number): Uint8Array {
31
- const randomBytes = new Uint8Array(length);
32
-
33
- // Check if running in a browser with crypto support
34
- if (typeof window !== 'undefined' && window.crypto) {
35
- window.crypto.getRandomValues(randomBytes);
36
- } else if (typeof crypto !== 'undefined') {
37
- // For environments where crypto is global (some newer JS runtimes)
38
- crypto.getRandomValues(randomBytes);
39
- } else {
40
- throw new Error('Crypto API not available in this environment');
41
- }
42
-
43
- return randomBytes;
44
- }
45
-
46
- /**
47
- * Helper method to convert a string to a Uint8Array.
48
- * @param str The string to convert.
49
- * @returns A Uint8Array representation of the string.
50
- */
51
- public static stringToBytes(str: string): Uint8Array {
52
- const encoder = new TextEncoder();
53
- return encoder.encode(str);
54
- }
55
-
56
- /**
57
- * Helper method to convert a Uint8Array to a string.
58
- * @param bytes The Uint8Array to convert.
59
- * @returns A string representation of the Uint8Array.
60
- */
61
- public static bytesToString(bytes: Uint8Array): string {
62
- const decoder = new TextDecoder();
63
- return decoder.decode(bytes);
64
- }
65
- }
@@ -1,11 +0,0 @@
1
- export type DeepPartial<T> = {
2
- [P in keyof T]?: T[P] extends (...args: any[]) => any
3
- ? T[P]
4
- : T[P] extends ReadonlyArray<infer U>
5
- ? ReadonlyArray<DeepPartial<U>>
6
- : T[P] extends Array<infer U>
7
- ? Array<DeepPartial<U>>
8
- : T[P] extends object
9
- ? DeepPartial<T[P]>
10
- : T[P];
11
- };
package/src/utils.ts DELETED
@@ -1,331 +0,0 @@
1
- import { LengthEncodingType } from './enumerations/length-encoding-type';
2
- import { LengthErrorType } from './enumerations/length-error-type';
3
- import { LengthError } from './errors';
4
- import { getEciesI18nEngine } from './i18n-setup';
5
-
6
- /**
7
- * Encodes the length of the data in the buffer
8
- * @param buffer The buffer to encode
9
- * @returns The encoded buffer
10
- */
11
- export function lengthEncodeData(buffer: Uint8Array): Uint8Array {
12
- const lengthType: LengthEncodingType = getLengthEncodingTypeForLength(
13
- buffer.length,
14
- );
15
- const lengthTypeSize: number = getLengthForLengthType(lengthType);
16
- const result = new Uint8Array(1 + lengthTypeSize + buffer.length);
17
- const view = new DataView(result.buffer);
18
-
19
- view.setUint8(0, lengthType);
20
- switch (lengthType) {
21
- case LengthEncodingType.UInt8:
22
- view.setUint8(1, buffer.length);
23
- break;
24
- case LengthEncodingType.UInt16:
25
- view.setUint16(1, buffer.length, false); // big-endian
26
- break;
27
- case LengthEncodingType.UInt32:
28
- view.setUint32(1, buffer.length, false); // big-endian
29
- break;
30
- case LengthEncodingType.UInt64:
31
- view.setBigUint64(1, BigInt(buffer.length), false); // big-endian
32
- break;
33
- }
34
- result.set(buffer, 1 + lengthTypeSize);
35
- return result;
36
- }
37
-
38
- export function decodeLengthEncodedData(buffer: Uint8Array): {
39
- data: Uint8Array;
40
- totalLength: number;
41
- } {
42
- if (buffer.length < 1) {
43
- throw new LengthError(
44
- LengthErrorType.LengthIsTooShort,
45
- getEciesI18nEngine() as any,
46
- );
47
- }
48
-
49
- const view = new DataView(
50
- buffer.buffer,
51
- buffer.byteOffset,
52
- buffer.byteLength,
53
- );
54
- const lengthType: LengthEncodingType = getLengthEncodingTypeFromValue(
55
- view.getUint8(0),
56
- );
57
- const lengthTypeSize: number = getLengthForLengthType(lengthType);
58
-
59
- if (buffer.length < 1 + lengthTypeSize) {
60
- throw new LengthError(
61
- LengthErrorType.LengthIsTooShort,
62
- getEciesI18nEngine() as any,
63
- );
64
- }
65
-
66
- let length: number | BigInt;
67
- switch (lengthType) {
68
- case LengthEncodingType.UInt8:
69
- length = view.getUint8(1);
70
- break;
71
- case LengthEncodingType.UInt16:
72
- length = view.getUint16(1, false); // big-endian
73
- break;
74
- case LengthEncodingType.UInt32:
75
- length = view.getUint32(1, false); // big-endian
76
- break;
77
- case LengthEncodingType.UInt64:
78
- length = view.getBigUint64(1, false); // big-endian
79
- if (length.valueOf() > BigInt(Number.MAX_SAFE_INTEGER)) {
80
- throw new LengthError(
81
- LengthErrorType.LengthIsTooLong,
82
- getEciesI18nEngine() as any,
83
- );
84
- }
85
- break;
86
- default:
87
- throw new LengthError(
88
- LengthErrorType.LengthIsInvalidType,
89
- getEciesI18nEngine() as any,
90
- );
91
- }
92
-
93
- const totalLength = 1 + lengthTypeSize + Number(length);
94
- if (totalLength > buffer.length) {
95
- throw new LengthError(
96
- LengthErrorType.LengthIsTooShort,
97
- getEciesI18nEngine() as any,
98
- );
99
- }
100
- return {
101
- data: buffer.subarray(1 + lengthTypeSize, totalLength),
102
- totalLength,
103
- };
104
- }
105
-
106
- export function uint8ArrayToBase64(uint8Array: Uint8Array): string {
107
- let binaryString = '';
108
- for (let i = 0; i < uint8Array.length; i++) {
109
- binaryString += String.fromCharCode(uint8Array[i]);
110
- }
111
- return btoa(binaryString);
112
- }
113
-
114
- export function base64ToUint8Array(base64String: string): Uint8Array {
115
- const binaryString = atob(base64String);
116
- const len = binaryString.length;
117
- const bytes = new Uint8Array(len);
118
- for (let i = 0; i < len; i++) {
119
- bytes[i] = binaryString.charCodeAt(i);
120
- }
121
- return bytes;
122
- }
123
-
124
- export function uint8ArrayToHex(uint8Array: Uint8Array): string {
125
- return Array.from(uint8Array)
126
- .map((byte) => byte.toString(16).padStart(2, '0'))
127
- .join('');
128
- }
129
-
130
- export function hexToUint8Array(hexString: string): Uint8Array {
131
- if (!hexString || typeof hexString !== 'string') {
132
- throw new Error('Invalid hex string');
133
- }
134
- if (hexString.length % 2 !== 0) {
135
- throw new Error('Hex string must have even length');
136
- }
137
- if (!/^[0-9a-fA-F]*$/.test(hexString)) {
138
- throw new Error('Hex string contains invalid characters');
139
- }
140
- const len = hexString.length;
141
- const bytes = new Uint8Array(len / 2);
142
- for (let i = 0; i < len; i += 2) {
143
- bytes[i / 2] = parseInt(hexString.substring(i, i + 2), 16);
144
- }
145
- return bytes;
146
- }
147
-
148
- /**
149
- * Utility functions for browser ECIES implementation
150
- */
151
-
152
- /**
153
- * CRC16-CCITT implementation for data integrity checking
154
- * Uses CRC16-CCITT-FALSE variant (init 0xFFFF)
155
- */
156
- export function crc16(data: Uint8Array): Uint8Array {
157
- let crc = 0xffff; // Initial value for CRC16-CCITT-FALSE
158
- const polynomial = 0x1021; // CRC16-CCITT polynomial
159
-
160
- for (let i = 0; i < data.length; i++) {
161
- crc ^= data[i] << 8;
162
- for (let j = 0; j < 8; j++) {
163
- if (crc & 0x8000) {
164
- crc = (crc << 1) ^ polynomial;
165
- } else {
166
- crc = crc << 1;
167
- }
168
- crc &= 0xffff; // Keep it 16-bit
169
- }
170
- }
171
-
172
- const result = new Uint8Array(2);
173
- result[0] = (crc >>> 8) & 0xff; // Big-endian
174
- result[1] = crc & 0xff;
175
- return result;
176
- }
177
-
178
- /**
179
- * Convert string to Uint8Array (UTF-8 encoding)
180
- */
181
- export function stringToUint8Array(str: string): Uint8Array {
182
- return new TextEncoder().encode(str);
183
- }
184
-
185
- /**
186
- * Convert Uint8Array to string (UTF-8 decoding)
187
- */
188
- export function uint8ArrayToString(array: Uint8Array): string {
189
- return new TextDecoder().decode(array);
190
- }
191
-
192
- /**
193
- * Secure random bytes generation
194
- */
195
- export function randomBytes(length: number): Uint8Array {
196
- return crypto.getRandomValues(new Uint8Array(length));
197
- }
198
-
199
- /**
200
- * Compare two Uint8Arrays for equality
201
- */
202
- export function arraysEqual(a: Uint8Array, b: Uint8Array): boolean {
203
- if (a.length !== b.length) return false;
204
- let result = 0;
205
- for (let i = 0; i < a.length; i++) {
206
- result |= a[i] ^ b[i];
207
- }
208
- return result === 0;
209
- }
210
-
211
- /**
212
- * Concatenate multiple Uint8Arrays
213
- */
214
- export function concatUint8Arrays(...arrays: Uint8Array[]): Uint8Array {
215
- const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
216
- const result = new Uint8Array(totalLength);
217
- let offset = 0;
218
- for (const array of arrays) {
219
- result.set(array, offset);
220
- offset += array.length;
221
- }
222
- return result;
223
- }
224
-
225
- /**
226
- * Get the length encoding type for a given length
227
- * @param length The length to evaluate
228
- * @returns The corresponding LengthEncodingType
229
- */
230
- export function getLengthEncodingTypeForLength<
231
- TStringKey extends string,
232
- TLanguage extends string,
233
- >(length: number | BigInt): LengthEncodingType {
234
- if (typeof length === 'number') {
235
- if (length < 256) {
236
- return LengthEncodingType.UInt8;
237
- } else if (length < 65536) {
238
- return LengthEncodingType.UInt16;
239
- } else if (length < 4294967296) {
240
- return LengthEncodingType.UInt32;
241
- } else if (length < Number.MAX_SAFE_INTEGER) {
242
- return LengthEncodingType.UInt64;
243
- } else {
244
- throw new LengthError(
245
- LengthErrorType.LengthIsTooLong,
246
- getEciesI18nEngine() as any,
247
- );
248
- }
249
- } else if (typeof length === 'bigint') {
250
- if (length < 256n) {
251
- return LengthEncodingType.UInt8;
252
- } else if (length < 65536n) {
253
- return LengthEncodingType.UInt16;
254
- } else if (length < 4294967296n) {
255
- return LengthEncodingType.UInt32;
256
- } else if (length < 18446744073709551616n) {
257
- return LengthEncodingType.UInt64;
258
- } else {
259
- throw new LengthError(
260
- LengthErrorType.LengthIsTooLong,
261
- getEciesI18nEngine() as any,
262
- );
263
- }
264
- } else {
265
- throw new LengthError(
266
- LengthErrorType.LengthIsInvalidType,
267
- getEciesI18nEngine() as any,
268
- );
269
- }
270
- }
271
-
272
- /**
273
- * Get the length encoding type for a given value
274
- * @param value The value to evaluate
275
- * @returns The corresponding LengthEncodingType
276
- */
277
- export function getLengthEncodingTypeFromValue<
278
- TStringKey extends string,
279
- TLanguage extends string,
280
- >(value: number): LengthEncodingType {
281
- for (const length of Object.values(LengthEncodingType)) {
282
- if (length === value) {
283
- return length;
284
- }
285
- }
286
- throw new LengthError(
287
- LengthErrorType.LengthIsInvalidType,
288
- getEciesI18nEngine() as any,
289
- );
290
- }
291
-
292
- /**
293
- * Safely converts BigInt to Number, throwing if value exceeds safe integer range
294
- * @param value The BigInt value to convert
295
- * @returns The number value
296
- */
297
- export function safeBigIntToNumber(value: bigint): number {
298
- if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
299
- throw new Error('Value exceeds safe integer range');
300
- }
301
- if (value < BigInt(Number.MIN_SAFE_INTEGER)) {
302
- throw new Error('Value below safe integer range');
303
- }
304
- return Number(value);
305
- }
306
-
307
- /**
308
- * Get the length in bytes for a given LengthEncodingType
309
- * @param type The LengthEncodingType to evaluate
310
- * @returns The length in bytes
311
- */
312
- export function getLengthForLengthType<
313
- TStringKey extends string,
314
- TLanguage extends string,
315
- >(type: LengthEncodingType): number {
316
- switch (type) {
317
- case LengthEncodingType.UInt8:
318
- return 1;
319
- case LengthEncodingType.UInt16:
320
- return 2;
321
- case LengthEncodingType.UInt32:
322
- return 4;
323
- case LengthEncodingType.UInt64:
324
- return 8;
325
- default:
326
- throw new LengthError(
327
- LengthErrorType.LengthIsInvalidType,
328
- getEciesI18nEngine() as any,
329
- );
330
- }
331
- }