@digitaldefiance/ecies-lib 4.4.13 → 4.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/package.json +5 -4
  2. package/src/builders/ecies-builder.d.ts +18 -0
  3. package/src/builders/ecies-builder.d.ts.map +1 -0
  4. package/src/builders/ecies-builder.js +34 -0
  5. package/src/builders/ecies-builder.js.map +1 -0
  6. package/src/builders/{index.ts → index.d.ts} +1 -1
  7. package/src/builders/index.d.ts.map +1 -0
  8. package/src/builders/index.js +9 -0
  9. package/src/builders/index.js.map +1 -0
  10. package/src/builders/member-builder.d.ts +51 -0
  11. package/src/builders/member-builder.d.ts.map +1 -0
  12. package/src/builders/member-builder.js +101 -0
  13. package/src/builders/member-builder.js.map +1 -0
  14. package/src/constants.d.ts +60 -0
  15. package/src/constants.d.ts.map +1 -0
  16. package/src/constants.js +457 -0
  17. package/src/constants.js.map +1 -0
  18. package/src/core/errors/crypto-error.d.ts +34 -0
  19. package/src/core/errors/crypto-error.d.ts.map +1 -0
  20. package/src/core/errors/crypto-error.js +60 -0
  21. package/src/core/errors/crypto-error.js.map +1 -0
  22. package/src/core/{index.ts → index.d.ts} +1 -1
  23. package/src/core/index.d.ts.map +1 -0
  24. package/src/core/index.js +9 -0
  25. package/src/core/index.js.map +1 -0
  26. package/src/core/types/result.d.ts +16 -0
  27. package/src/core/types/result.d.ts.map +1 -0
  28. package/src/core/types/result.js +16 -0
  29. package/src/core/types/result.js.map +1 -0
  30. package/src/email-string.d.ts +42 -0
  31. package/src/email-string.d.ts.map +1 -0
  32. package/src/email-string.js +72 -0
  33. package/src/email-string.js.map +1 -0
  34. package/src/enumerations/disposed-error-type.d.ts +12 -0
  35. package/src/enumerations/disposed-error-type.d.ts.map +1 -0
  36. package/src/enumerations/disposed-error-type.js +16 -0
  37. package/src/enumerations/disposed-error-type.js.map +1 -0
  38. package/src/enumerations/ecies-cipher-suite.d.ts +4 -0
  39. package/src/enumerations/ecies-cipher-suite.d.ts.map +1 -0
  40. package/src/enumerations/ecies-cipher-suite.js +9 -0
  41. package/src/enumerations/ecies-cipher-suite.js.map +1 -0
  42. package/src/enumerations/ecies-encryption-type.d.ts +11 -0
  43. package/src/enumerations/ecies-encryption-type.d.ts.map +1 -0
  44. package/src/enumerations/ecies-encryption-type.js +30 -0
  45. package/src/enumerations/ecies-encryption-type.js.map +1 -0
  46. package/src/enumerations/ecies-error-type.d.ts +44 -0
  47. package/src/enumerations/ecies-error-type.d.ts.map +1 -0
  48. package/src/enumerations/ecies-error-type.js +48 -0
  49. package/src/enumerations/ecies-error-type.js.map +1 -0
  50. package/src/enumerations/ecies-string-key.d.ts +192 -0
  51. package/src/enumerations/ecies-string-key.d.ts.map +1 -0
  52. package/src/enumerations/ecies-string-key.js +202 -0
  53. package/src/enumerations/ecies-string-key.js.map +1 -0
  54. package/src/enumerations/ecies-version.d.ts +4 -0
  55. package/src/enumerations/ecies-version.d.ts.map +1 -0
  56. package/src/enumerations/ecies-version.js +8 -0
  57. package/src/enumerations/ecies-version.js.map +1 -0
  58. package/src/enumerations/guid-brand-type.d.ts +27 -0
  59. package/src/enumerations/guid-brand-type.d.ts.map +1 -0
  60. package/src/enumerations/guid-brand-type.js +31 -0
  61. package/src/enumerations/guid-brand-type.js.map +1 -0
  62. package/src/enumerations/guid-error-type.d.ts +7 -0
  63. package/src/enumerations/guid-error-type.d.ts.map +1 -0
  64. package/src/enumerations/guid-error-type.js +11 -0
  65. package/src/enumerations/guid-error-type.js.map +1 -0
  66. package/src/enumerations/id-provider-error-type.d.ts +43 -0
  67. package/src/enumerations/id-provider-error-type.d.ts.map +1 -0
  68. package/src/enumerations/id-provider-error-type.js +47 -0
  69. package/src/enumerations/id-provider-error-type.js.map +1 -0
  70. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  71. package/src/enumerations/index.d.ts.map +1 -0
  72. package/src/enumerations/index.js +21 -0
  73. package/src/enumerations/index.js.map +1 -0
  74. package/src/enumerations/invalid-email-type.d.ts +6 -0
  75. package/src/enumerations/invalid-email-type.d.ts.map +1 -0
  76. package/src/enumerations/invalid-email-type.js +10 -0
  77. package/src/enumerations/invalid-email-type.js.map +1 -0
  78. package/src/enumerations/length-encoding-type.d.ts +7 -0
  79. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  80. package/src/enumerations/length-encoding-type.js +11 -0
  81. package/src/enumerations/length-encoding-type.js.map +1 -0
  82. package/src/enumerations/length-error-type.d.ts +6 -0
  83. package/src/enumerations/length-error-type.d.ts.map +1 -0
  84. package/src/enumerations/length-error-type.js +10 -0
  85. package/src/enumerations/length-error-type.js.map +1 -0
  86. package/src/enumerations/member-error-type.d.ts +87 -0
  87. package/src/enumerations/member-error-type.d.ts.map +1 -0
  88. package/src/enumerations/member-error-type.js +91 -0
  89. package/src/enumerations/member-error-type.js.map +1 -0
  90. package/src/enumerations/{member-type.ts → member-type.d.ts} +6 -7
  91. package/src/enumerations/member-type.d.ts.map +1 -0
  92. package/src/enumerations/member-type.js +19 -0
  93. package/src/enumerations/member-type.js.map +1 -0
  94. package/src/enumerations/password-login-error-type.d.ts +5 -0
  95. package/src/enumerations/password-login-error-type.d.ts.map +1 -0
  96. package/src/enumerations/password-login-error-type.js +9 -0
  97. package/src/enumerations/password-login-error-type.js.map +1 -0
  98. package/src/enumerations/pbkdf2-error-type.d.ts +6 -0
  99. package/src/enumerations/pbkdf2-error-type.d.ts.map +1 -0
  100. package/src/enumerations/pbkdf2-error-type.js +10 -0
  101. package/src/enumerations/pbkdf2-error-type.js.map +1 -0
  102. package/src/enumerations/pbkdf2-profile.d.ts +6 -0
  103. package/src/enumerations/pbkdf2-profile.d.ts.map +1 -0
  104. package/src/enumerations/pbkdf2-profile.js +10 -0
  105. package/src/enumerations/pbkdf2-profile.js.map +1 -0
  106. package/src/enumerations/secure-storage-error-type.d.ts +6 -0
  107. package/src/enumerations/secure-storage-error-type.d.ts.map +1 -0
  108. package/src/enumerations/secure-storage-error-type.js +10 -0
  109. package/src/enumerations/secure-storage-error-type.js.map +1 -0
  110. package/src/errors/disposed.d.ts +22 -0
  111. package/src/errors/disposed.d.ts.map +1 -0
  112. package/src/errors/disposed.js +32 -0
  113. package/src/errors/disposed.js.map +1 -0
  114. package/src/errors/ecies.d.ts +52 -0
  115. package/src/errors/ecies.d.ts.map +1 -0
  116. package/src/errors/ecies.js +82 -0
  117. package/src/errors/ecies.js.map +1 -0
  118. package/src/errors/guid.d.ts +49 -0
  119. package/src/errors/guid.d.ts.map +1 -0
  120. package/src/errors/guid.js +100 -0
  121. package/src/errors/guid.js.map +1 -0
  122. package/src/errors/id-provider.d.ts +23 -0
  123. package/src/errors/id-provider.d.ts.map +1 -0
  124. package/src/errors/id-provider.js +33 -0
  125. package/src/errors/id-provider.js.map +1 -0
  126. package/src/errors/{index.ts → index.d.ts} +1 -0
  127. package/src/errors/index.d.ts.map +1 -0
  128. package/src/errors/index.js +13 -0
  129. package/src/errors/index.js.map +1 -0
  130. package/src/errors/invalid-email.d.ts +8 -0
  131. package/src/errors/invalid-email.d.ts.map +1 -0
  132. package/src/errors/invalid-email.js +19 -0
  133. package/src/errors/invalid-email.js.map +1 -0
  134. package/src/errors/length.d.ts +7 -0
  135. package/src/errors/length.d.ts.map +1 -0
  136. package/src/errors/length.js +15 -0
  137. package/src/errors/length.js.map +1 -0
  138. package/src/errors/member.d.ts +7 -0
  139. package/src/errors/member.d.ts.map +1 -0
  140. package/src/errors/member.js +15 -0
  141. package/src/errors/member.js.map +1 -0
  142. package/src/errors/pbkdf2.d.ts +7 -0
  143. package/src/errors/pbkdf2.d.ts.map +1 -0
  144. package/src/errors/pbkdf2.js +15 -0
  145. package/src/errors/pbkdf2.js.map +1 -0
  146. package/src/errors/secure-storage.d.ts +7 -0
  147. package/src/errors/secure-storage.d.ts.map +1 -0
  148. package/src/errors/secure-storage.js +16 -0
  149. package/src/errors/secure-storage.js.map +1 -0
  150. package/src/errors/simple-ecies.d.ts +6 -0
  151. package/src/errors/simple-ecies.d.ts.map +1 -0
  152. package/src/errors/simple-ecies.js +16 -0
  153. package/src/errors/simple-ecies.js.map +1 -0
  154. package/src/errors/simple-test-error.d.ts +4 -0
  155. package/src/errors/simple-test-error.d.ts.map +1 -0
  156. package/src/errors/simple-test-error.js +11 -0
  157. package/src/errors/simple-test-error.js.map +1 -0
  158. package/src/i18n-setup.d.ts +32 -0
  159. package/src/i18n-setup.d.ts.map +1 -0
  160. package/src/i18n-setup.js +109 -0
  161. package/src/i18n-setup.js.map +1 -0
  162. package/src/{index.ts → index.d.ts} +12 -72
  163. package/src/index.d.ts.map +1 -0
  164. package/src/index.js +146 -0
  165. package/src/index.js.map +1 -0
  166. package/src/interfaces/checksum-config.d.ts +5 -0
  167. package/src/interfaces/checksum-config.d.ts.map +1 -0
  168. package/src/interfaces/checksum-config.js +3 -0
  169. package/src/interfaces/checksum-config.js.map +1 -0
  170. package/src/interfaces/checksum-consts.d.ts +11 -0
  171. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  172. package/src/interfaces/checksum-consts.js +3 -0
  173. package/src/interfaces/checksum-consts.js.map +1 -0
  174. package/src/interfaces/configuration-provenance.d.ts +43 -0
  175. package/src/interfaces/configuration-provenance.d.ts.map +1 -0
  176. package/src/interfaces/configuration-provenance.js +8 -0
  177. package/src/interfaces/configuration-provenance.js.map +1 -0
  178. package/src/interfaces/constants.d.ts +70 -0
  179. package/src/interfaces/constants.d.ts.map +1 -0
  180. package/src/interfaces/constants.js +3 -0
  181. package/src/interfaces/constants.js.map +1 -0
  182. package/src/interfaces/ecies-config.d.ts +9 -0
  183. package/src/interfaces/ecies-config.d.ts.map +1 -0
  184. package/src/interfaces/ecies-config.js +3 -0
  185. package/src/interfaces/ecies-config.js.map +1 -0
  186. package/src/interfaces/ecies-consts.d.ts +61 -0
  187. package/src/interfaces/ecies-consts.d.ts.map +1 -0
  188. package/src/interfaces/ecies-consts.js +3 -0
  189. package/src/interfaces/ecies-consts.js.map +1 -0
  190. package/src/interfaces/ecies-file-service.d.ts +7 -0
  191. package/src/interfaces/ecies-file-service.d.ts.map +1 -0
  192. package/src/interfaces/ecies-file-service.js +3 -0
  193. package/src/interfaces/ecies-file-service.js.map +1 -0
  194. package/src/interfaces/encrypted-chunk.d.ts +55 -0
  195. package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
  196. package/src/interfaces/encrypted-chunk.js +15 -0
  197. package/src/interfaces/encrypted-chunk.js.map +1 -0
  198. package/src/interfaces/encryption-state.d.ts +18 -0
  199. package/src/interfaces/encryption-state.d.ts.map +1 -0
  200. package/src/interfaces/encryption-state.js +5 -0
  201. package/src/interfaces/encryption-state.js.map +1 -0
  202. package/src/interfaces/frontend-member-operational.d.ts +51 -0
  203. package/src/interfaces/frontend-member-operational.d.ts.map +1 -0
  204. package/src/interfaces/frontend-member-operational.js +3 -0
  205. package/src/interfaces/frontend-member-operational.js.map +1 -0
  206. package/src/interfaces/guid.d.ts +78 -0
  207. package/src/interfaces/guid.d.ts.map +1 -0
  208. package/src/interfaces/guid.js +3 -0
  209. package/src/interfaces/guid.js.map +1 -0
  210. package/src/interfaces/id-provider.d.ts +107 -0
  211. package/src/interfaces/id-provider.d.ts.map +1 -0
  212. package/src/interfaces/id-provider.js +56 -0
  213. package/src/interfaces/id-provider.js.map +1 -0
  214. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  215. package/src/interfaces/index.d.ts.map +1 -0
  216. package/src/interfaces/index.js +16 -0
  217. package/src/interfaces/index.js.map +1 -0
  218. package/src/interfaces/invariant.d.ts +46 -0
  219. package/src/interfaces/invariant.d.ts.map +1 -0
  220. package/src/interfaces/invariant.js +22 -0
  221. package/src/interfaces/invariant.js.map +1 -0
  222. package/src/interfaces/library-error.d.ts +23 -0
  223. package/src/interfaces/library-error.d.ts.map +1 -0
  224. package/src/interfaces/library-error.js +3 -0
  225. package/src/interfaces/library-error.js.map +1 -0
  226. package/src/interfaces/{member-storage.ts → member-storage.d.ts} +10 -11
  227. package/src/interfaces/member-storage.d.ts.map +1 -0
  228. package/src/interfaces/member-storage.js +3 -0
  229. package/src/interfaces/member-storage.js.map +1 -0
  230. package/src/interfaces/{member-with-mnemonic.ts → member-with-mnemonic.d.ts} +3 -3
  231. package/src/interfaces/member-with-mnemonic.d.ts.map +1 -0
  232. package/src/interfaces/member-with-mnemonic.js +3 -0
  233. package/src/interfaces/member-with-mnemonic.js.map +1 -0
  234. package/src/interfaces/member.d.ts +55 -0
  235. package/src/interfaces/member.d.ts.map +1 -0
  236. package/src/interfaces/member.js +3 -0
  237. package/src/interfaces/member.js.map +1 -0
  238. package/src/interfaces/multi-recipient-chunk.d.ts +54 -0
  239. package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
  240. package/src/interfaces/multi-recipient-chunk.js +16 -0
  241. package/src/interfaces/multi-recipient-chunk.js.map +1 -0
  242. package/src/interfaces/pbkdf2-config.d.ts +7 -0
  243. package/src/interfaces/pbkdf2-config.d.ts.map +1 -0
  244. package/src/interfaces/pbkdf2-config.js +3 -0
  245. package/src/interfaces/pbkdf2-config.js.map +1 -0
  246. package/src/interfaces/pbkdf2-consts.d.ts +9 -0
  247. package/src/interfaces/pbkdf2-consts.d.ts.map +1 -0
  248. package/src/interfaces/pbkdf2-consts.js +3 -0
  249. package/src/interfaces/pbkdf2-consts.js.map +1 -0
  250. package/src/interfaces/pbkdf2-result.d.ts +6 -0
  251. package/src/interfaces/pbkdf2-result.d.ts.map +1 -0
  252. package/src/interfaces/pbkdf2-result.js +3 -0
  253. package/src/interfaces/pbkdf2-result.js.map +1 -0
  254. package/src/interfaces/stream-config.d.ts +14 -0
  255. package/src/interfaces/stream-config.d.ts.map +1 -0
  256. package/src/interfaces/stream-config.js +11 -0
  257. package/src/interfaces/stream-config.js.map +1 -0
  258. package/src/interfaces/stream-header.d.ts +29 -0
  259. package/src/interfaces/stream-header.d.ts.map +1 -0
  260. package/src/interfaces/stream-header.js +12 -0
  261. package/src/interfaces/stream-header.js.map +1 -0
  262. package/src/interfaces/stream-progress.d.ts +33 -0
  263. package/src/interfaces/stream-progress.d.ts.map +1 -0
  264. package/src/interfaces/stream-progress.js +3 -0
  265. package/src/interfaces/stream-progress.js.map +1 -0
  266. package/src/lib/configuration-provenance-utils.d.ts +11 -0
  267. package/src/lib/configuration-provenance-utils.d.ts.map +1 -0
  268. package/src/lib/configuration-provenance-utils.js +30 -0
  269. package/src/lib/configuration-provenance-utils.js.map +1 -0
  270. package/src/lib/crypto-container.d.ts +25 -0
  271. package/src/lib/crypto-container.d.ts.map +1 -0
  272. package/src/lib/crypto-container.js +50 -0
  273. package/src/lib/crypto-container.js.map +1 -0
  274. package/src/lib/guid.d.ts +344 -0
  275. package/src/lib/guid.d.ts.map +1 -0
  276. package/src/lib/guid.js +919 -0
  277. package/src/lib/guid.js.map +1 -0
  278. package/src/lib/id-providers/custom-provider.d.ts +46 -0
  279. package/src/lib/id-providers/custom-provider.d.ts.map +1 -0
  280. package/src/lib/id-providers/custom-provider.js +89 -0
  281. package/src/lib/id-providers/custom-provider.js.map +1 -0
  282. package/src/lib/id-providers/guidv4-provider.d.ts +56 -0
  283. package/src/lib/id-providers/guidv4-provider.d.ts.map +1 -0
  284. package/src/lib/id-providers/guidv4-provider.js +126 -0
  285. package/src/lib/id-providers/guidv4-provider.js.map +1 -0
  286. package/src/lib/id-providers/{index.ts → index.d.ts} +5 -6
  287. package/src/lib/id-providers/index.d.ts.map +1 -0
  288. package/src/lib/id-providers/index.js +37 -0
  289. package/src/lib/id-providers/index.js.map +1 -0
  290. package/src/lib/id-providers/objectid-provider.d.ts +43 -0
  291. package/src/lib/id-providers/objectid-provider.d.ts.map +1 -0
  292. package/src/lib/id-providers/objectid-provider.js +108 -0
  293. package/src/lib/id-providers/objectid-provider.js.map +1 -0
  294. package/src/lib/id-providers/uuid-provider.d.ts +52 -0
  295. package/src/lib/id-providers/uuid-provider.d.ts.map +1 -0
  296. package/src/lib/id-providers/uuid-provider.js +114 -0
  297. package/src/lib/id-providers/uuid-provider.js.map +1 -0
  298. package/src/lib/{index.ts → index.d.ts} +2 -2
  299. package/src/lib/index.d.ts.map +1 -0
  300. package/src/lib/index.js +9 -0
  301. package/src/lib/index.js.map +1 -0
  302. package/src/lib/invariant-validator.d.ts +59 -0
  303. package/src/lib/invariant-validator.d.ts.map +1 -0
  304. package/src/lib/invariant-validator.js +101 -0
  305. package/src/lib/invariant-validator.js.map +1 -0
  306. package/src/lib/invariants/encryption-algorithm-consistency.d.ts +17 -0
  307. package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +1 -0
  308. package/src/lib/invariants/encryption-algorithm-consistency.js +53 -0
  309. package/src/lib/invariants/encryption-algorithm-consistency.js.map +1 -0
  310. package/src/lib/invariants/{index.ts → index.d.ts} +1 -0
  311. package/src/lib/invariants/index.d.ts.map +1 -0
  312. package/src/lib/invariants/index.js +7 -0
  313. package/src/lib/invariants/index.js.map +1 -0
  314. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +16 -0
  315. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +1 -0
  316. package/src/lib/invariants/pbkdf2-profiles-validity.js +62 -0
  317. package/src/lib/invariants/pbkdf2-profiles-validity.js.map +1 -0
  318. package/src/lib/invariants/recipient-id-consistency.d.ts +18 -0
  319. package/src/lib/invariants/recipient-id-consistency.d.ts.map +1 -0
  320. package/src/lib/invariants/recipient-id-consistency.js +35 -0
  321. package/src/lib/invariants/recipient-id-consistency.js.map +1 -0
  322. package/src/lib/multi-recipient-chunk-utils.d.ts +38 -0
  323. package/src/lib/multi-recipient-chunk-utils.d.ts.map +1 -0
  324. package/src/lib/multi-recipient-chunk-utils.js +45 -0
  325. package/src/lib/multi-recipient-chunk-utils.js.map +1 -0
  326. package/src/member.d.ts +92 -0
  327. package/src/member.d.ts.map +1 -0
  328. package/src/member.js +327 -0
  329. package/src/member.js.map +1 -0
  330. package/src/{pbkdf2-profiles.ts → pbkdf2-profiles.d.ts} +2 -2
  331. package/src/pbkdf2-profiles.d.ts.map +1 -0
  332. package/src/pbkdf2-profiles.js +3 -0
  333. package/src/pbkdf2-profiles.js.map +1 -0
  334. package/src/phone-number.d.ts +6 -0
  335. package/src/phone-number.d.ts.map +1 -0
  336. package/src/phone-number.js +22 -0
  337. package/src/phone-number.js.map +1 -0
  338. package/src/regexes.d.ts +7 -0
  339. package/src/regexes.d.ts.map +1 -0
  340. package/src/regexes.js +10 -0
  341. package/src/regexes.js.map +1 -0
  342. package/src/secure-buffer.d.ts +61 -0
  343. package/src/secure-buffer.d.ts.map +1 -0
  344. package/src/secure-buffer.js +205 -0
  345. package/src/secure-buffer.js.map +1 -0
  346. package/src/secure-string.d.ts +46 -0
  347. package/src/secure-string.d.ts.map +1 -0
  348. package/src/secure-string.js +210 -0
  349. package/src/secure-string.js.map +1 -0
  350. package/src/services/aes-gcm.d.ts +57 -0
  351. package/src/services/aes-gcm.d.ts.map +1 -0
  352. package/src/services/aes-gcm.js +146 -0
  353. package/src/services/aes-gcm.js.map +1 -0
  354. package/src/services/chunk-processor.d.ts +31 -0
  355. package/src/services/chunk-processor.d.ts.map +1 -0
  356. package/src/services/chunk-processor.js +149 -0
  357. package/src/services/chunk-processor.js.map +1 -0
  358. package/src/services/ecies/crypto-core.d.ts +72 -0
  359. package/src/services/ecies/crypto-core.d.ts.map +1 -0
  360. package/src/services/ecies/crypto-core.js +209 -0
  361. package/src/services/ecies/crypto-core.js.map +1 -0
  362. package/src/services/ecies/example.d.ts +25 -0
  363. package/src/services/ecies/example.d.ts.map +1 -0
  364. package/src/services/ecies/example.js +128 -0
  365. package/src/services/ecies/example.js.map +1 -0
  366. package/src/services/ecies/file.d.ts +18 -0
  367. package/src/services/ecies/file.d.ts.map +1 -0
  368. package/src/services/ecies/file.js +110 -0
  369. package/src/services/ecies/file.js.map +1 -0
  370. package/src/services/ecies/{index.ts → index.d.ts} +1 -3
  371. package/src/services/ecies/index.d.ts.map +1 -0
  372. package/src/services/ecies/index.js +44 -0
  373. package/src/services/ecies/index.js.map +1 -0
  374. package/src/services/ecies/integration.d.ts +59 -0
  375. package/src/services/ecies/integration.d.ts.map +1 -0
  376. package/src/services/ecies/integration.js +172 -0
  377. package/src/services/ecies/integration.js.map +1 -0
  378. package/src/services/ecies/interfaces.d.ts +54 -0
  379. package/src/services/ecies/interfaces.d.ts.map +1 -0
  380. package/src/services/ecies/interfaces.js +6 -0
  381. package/src/services/ecies/interfaces.js.map +1 -0
  382. package/src/services/ecies/manual-test.d.ts +29 -0
  383. package/src/services/ecies/manual-test.d.ts.map +1 -0
  384. package/src/services/ecies/manual-test.js +171 -0
  385. package/src/services/ecies/manual-test.js.map +1 -0
  386. package/src/services/ecies/multi-recipient.d.ts +56 -0
  387. package/src/services/ecies/multi-recipient.d.ts.map +1 -0
  388. package/src/services/ecies/multi-recipient.js +348 -0
  389. package/src/services/ecies/multi-recipient.js.map +1 -0
  390. package/src/services/ecies/service.d.ts +120 -0
  391. package/src/services/ecies/service.d.ts.map +1 -0
  392. package/src/services/ecies/service.js +214 -0
  393. package/src/services/ecies/service.js.map +1 -0
  394. package/src/services/ecies/signature.d.ts +27 -0
  395. package/src/services/ecies/signature.d.ts.map +1 -0
  396. package/src/services/ecies/signature.js +76 -0
  397. package/src/services/ecies/signature.js.map +1 -0
  398. package/src/services/ecies/single-recipient.d.ts +46 -0
  399. package/src/services/ecies/single-recipient.d.ts.map +1 -0
  400. package/src/services/ecies/single-recipient.js +326 -0
  401. package/src/services/ecies/single-recipient.js.map +1 -0
  402. package/src/services/encryption-stream.d.ts +71 -0
  403. package/src/services/encryption-stream.d.ts.map +1 -0
  404. package/src/services/encryption-stream.js +299 -0
  405. package/src/services/encryption-stream.js.map +1 -0
  406. package/src/services/{index.ts → index.d.ts} +1 -0
  407. package/src/services/index.d.ts.map +1 -0
  408. package/src/services/index.js +14 -0
  409. package/src/services/index.js.map +1 -0
  410. package/src/services/multi-recipient-processor.d.ts +35 -0
  411. package/src/services/multi-recipient-processor.d.ts.map +1 -0
  412. package/src/services/multi-recipient-processor.js +293 -0
  413. package/src/services/multi-recipient-processor.js.map +1 -0
  414. package/src/services/password-login.d.ts +47 -0
  415. package/src/services/password-login.d.ts.map +1 -0
  416. package/src/services/password-login.js +119 -0
  417. package/src/services/password-login.js.map +1 -0
  418. package/src/services/pbkdf2.d.ts +54 -0
  419. package/src/services/pbkdf2.d.ts.map +1 -0
  420. package/src/services/pbkdf2.js +112 -0
  421. package/src/services/pbkdf2.js.map +1 -0
  422. package/src/services/progress-tracker.d.ts +23 -0
  423. package/src/services/progress-tracker.d.ts.map +1 -0
  424. package/src/services/progress-tracker.js +107 -0
  425. package/src/services/progress-tracker.js.map +1 -0
  426. package/src/services/resumable-encryption.d.ts +19 -0
  427. package/src/services/resumable-encryption.d.ts.map +1 -0
  428. package/src/services/resumable-encryption.js +109 -0
  429. package/src/services/resumable-encryption.js.map +1 -0
  430. package/src/services/xor.d.ts +37 -0
  431. package/src/services/xor.d.ts.map +1 -0
  432. package/src/services/xor.js +67 -0
  433. package/src/services/xor.js.map +1 -0
  434. package/src/test-mocks/index.d.ts +2 -0
  435. package/src/test-mocks/index.d.ts.map +1 -0
  436. package/src/test-mocks/index.js +5 -0
  437. package/src/test-mocks/index.js.map +1 -0
  438. package/src/test-mocks/mock-frontend-member.d.ts +85 -0
  439. package/src/test-mocks/mock-frontend-member.d.ts.map +1 -0
  440. package/src/test-mocks/mock-frontend-member.js +194 -0
  441. package/src/test-mocks/mock-frontend-member.js.map +1 -0
  442. package/src/testing.d.ts +2 -0
  443. package/src/testing.d.ts.map +1 -0
  444. package/src/testing.js +6 -0
  445. package/src/testing.js.map +1 -0
  446. package/src/translations/de.d.ts +4 -0
  447. package/src/translations/de.d.ts.map +1 -0
  448. package/src/translations/de.js +207 -0
  449. package/src/translations/de.js.map +1 -0
  450. package/src/translations/en-US.d.ts +4 -0
  451. package/src/translations/en-US.d.ts.map +1 -0
  452. package/src/translations/en-US.js +207 -0
  453. package/src/translations/en-US.js.map +1 -0
  454. package/src/translations/es.d.ts +4 -0
  455. package/src/translations/es.d.ts.map +1 -0
  456. package/src/translations/es.js +207 -0
  457. package/src/translations/es.js.map +1 -0
  458. package/src/translations/fr.d.ts +4 -0
  459. package/src/translations/fr.d.ts.map +1 -0
  460. package/src/translations/fr.js +207 -0
  461. package/src/translations/fr.js.map +1 -0
  462. package/src/translations/ja.d.ts +4 -0
  463. package/src/translations/ja.d.ts.map +1 -0
  464. package/src/translations/ja.js +206 -0
  465. package/src/translations/ja.js.map +1 -0
  466. package/src/translations/uk.d.ts +4 -0
  467. package/src/translations/uk.d.ts.map +1 -0
  468. package/src/translations/uk.js +209 -0
  469. package/src/translations/uk.js.map +1 -0
  470. package/src/translations/zh-cn.d.ts +4 -0
  471. package/src/translations/zh-cn.d.ts.map +1 -0
  472. package/src/translations/zh-cn.js +206 -0
  473. package/src/translations/zh-cn.js.map +1 -0
  474. package/src/types/deep-partial.d.ts +4 -0
  475. package/src/types/deep-partial.d.ts.map +1 -0
  476. package/src/types/deep-partial.js +3 -0
  477. package/src/types/deep-partial.js.map +1 -0
  478. package/src/{types.ts → types.d.ts} +7 -15
  479. package/src/types.d.ts.map +1 -0
  480. package/src/types.js +3 -0
  481. package/src/types.js.map +1 -0
  482. package/src/utils/encryption-type-utils.d.ts +29 -0
  483. package/src/utils/encryption-type-utils.d.ts.map +1 -0
  484. package/src/utils/encryption-type-utils.js +67 -0
  485. package/src/utils/encryption-type-utils.js.map +1 -0
  486. package/src/utils.d.ts +68 -0
  487. package/src/utils.d.ts.map +1 -0
  488. package/src/utils.js +291 -0
  489. package/src/utils.js.map +1 -0
  490. package/LICENSE +0 -21
  491. package/src/builders/ecies-builder.ts +0 -39
  492. package/src/builders/member-builder.ts +0 -155
  493. package/src/constants.ts +0 -609
  494. package/src/core/errors/crypto-error.ts +0 -78
  495. package/src/core/types/result.ts +0 -19
  496. package/src/email-string.ts +0 -82
  497. package/src/enumerations/disposed-error-type.ts +0 -11
  498. package/src/enumerations/ecies-cipher-suite.ts +0 -4
  499. package/src/enumerations/ecies-encryption-type.ts +0 -41
  500. package/src/enumerations/ecies-error-type.ts +0 -43
  501. package/src/enumerations/ecies-string-key.ts +0 -205
  502. package/src/enumerations/ecies-version.ts +0 -3
  503. package/src/enumerations/guid-brand-type.ts +0 -26
  504. package/src/enumerations/guid-error-type.ts +0 -6
  505. package/src/enumerations/id-provider-error-type.ts +0 -50
  506. package/src/enumerations/invalid-email-type.ts +0 -5
  507. package/src/enumerations/length-encoding-type.ts +0 -6
  508. package/src/enumerations/length-error-type.ts +0 -5
  509. package/src/enumerations/member-error-type.ts +0 -106
  510. package/src/enumerations/password-login-error-type.ts +0 -4
  511. package/src/enumerations/pbkdf2-error-type.ts +0 -5
  512. package/src/enumerations/pbkdf2-profile.ts +0 -5
  513. package/src/enumerations/secure-storage-error-type.ts +0 -5
  514. package/src/errors/disposed.ts +0 -36
  515. package/src/errors/ecies.ts +0 -153
  516. package/src/errors/guid.ts +0 -130
  517. package/src/errors/id-provider.ts +0 -40
  518. package/src/errors/invalid-email.ts +0 -23
  519. package/src/errors/length.ts +0 -19
  520. package/src/errors/member.ts +0 -20
  521. package/src/errors/pbkdf2.ts +0 -20
  522. package/src/errors/secure-storage.ts +0 -17
  523. package/src/errors/simple-ecies.ts +0 -21
  524. package/src/errors/simple-test-error.ts +0 -6
  525. package/src/i18n-setup.ts +0 -130
  526. package/src/interfaces/checksum-config.ts +0 -4
  527. package/src/interfaces/checksum-consts.ts +0 -13
  528. package/src/interfaces/configuration-provenance.ts +0 -54
  529. package/src/interfaces/constants.ts +0 -75
  530. package/src/interfaces/ecies-config.ts +0 -8
  531. package/src/interfaces/ecies-consts.ts +0 -76
  532. package/src/interfaces/ecies-file-service.ts +0 -6
  533. package/src/interfaces/encrypted-chunk.ts +0 -64
  534. package/src/interfaces/encryption-state.ts +0 -19
  535. package/src/interfaces/frontend-member-operational.ts +0 -77
  536. package/src/interfaces/guid.ts +0 -86
  537. package/src/interfaces/id-provider.ts +0 -152
  538. package/src/interfaces/invariant.ts +0 -60
  539. package/src/interfaces/library-error.ts +0 -23
  540. package/src/interfaces/member.ts +0 -84
  541. package/src/interfaces/multi-recipient-chunk.ts +0 -61
  542. package/src/interfaces/pbkdf2-config.ts +0 -6
  543. package/src/interfaces/pbkdf2-consts.ts +0 -10
  544. package/src/interfaces/pbkdf2-result.ts +0 -5
  545. package/src/interfaces/stream-config.ts +0 -17
  546. package/src/interfaces/stream-header.ts +0 -34
  547. package/src/interfaces/stream-progress.ts +0 -31
  548. package/src/lib/configuration-provenance-utils.ts +0 -29
  549. package/src/lib/crypto-container.ts +0 -64
  550. package/src/lib/guid.ts +0 -1097
  551. package/src/lib/id-providers/custom-provider.ts +0 -109
  552. package/src/lib/id-providers/guidv4-provider.ts +0 -141
  553. package/src/lib/id-providers/objectid-provider.ts +0 -125
  554. package/src/lib/id-providers/uuid-provider.ts +0 -133
  555. package/src/lib/invariant-validator.ts +0 -133
  556. package/src/lib/invariants/encryption-algorithm-consistency.ts +0 -73
  557. package/src/lib/invariants/pbkdf2-profiles-validity.ts +0 -78
  558. package/src/lib/invariants/recipient-id-consistency.ts +0 -46
  559. package/src/lib/multi-recipient-chunk-utils.ts +0 -63
  560. package/src/member.ts +0 -495
  561. package/src/phone-number.ts +0 -18
  562. package/src/regexes.ts +0 -10
  563. package/src/secure-buffer.ts +0 -226
  564. package/src/secure-string.ts +0 -244
  565. package/src/services/aes-gcm.ts +0 -220
  566. package/src/services/chunk-processor.ts +0 -188
  567. package/src/services/ecies/README.md +0 -147
  568. package/src/services/ecies/crypto-core.ts +0 -292
  569. package/src/services/ecies/example.ts +0 -185
  570. package/src/services/ecies/file.ts +0 -167
  571. package/src/services/ecies/integration.ts +0 -241
  572. package/src/services/ecies/interfaces.ts +0 -62
  573. package/src/services/ecies/manual-test.ts +0 -219
  574. package/src/services/ecies/multi-recipient.ts +0 -545
  575. package/src/services/ecies/service.ts +0 -370
  576. package/src/services/ecies/signature.ts +0 -93
  577. package/src/services/ecies/single-recipient.ts +0 -476
  578. package/src/services/encryption-stream.ts +0 -435
  579. package/src/services/multi-recipient-processor.ts +0 -377
  580. package/src/services/password-login.ts +0 -226
  581. package/src/services/pbkdf2.ts +0 -169
  582. package/src/services/progress-tracker.ts +0 -128
  583. package/src/services/resumable-encryption.ts +0 -135
  584. package/src/services/xor.ts +0 -65
  585. package/src/test-mocks/index.ts +0 -1
  586. package/src/test-mocks/mock-frontend-member.ts +0 -276
  587. package/src/testing.ts +0 -2
  588. package/src/translations/de.ts +0 -260
  589. package/src/translations/en-US.ts +0 -262
  590. package/src/translations/es.ts +0 -271
  591. package/src/translations/fr.ts +0 -269
  592. package/src/translations/ja.ts +0 -259
  593. package/src/translations/uk.ts +0 -271
  594. package/src/translations/zh-cn.ts +0 -234
  595. package/src/types/deep-partial.ts +0 -11
  596. package/src/utils/encryption-type-utils.ts +0 -76
  597. package/src/utils.ts +0 -329
@@ -1,226 +0,0 @@
1
- /// <reference path="../../../types/global.d.ts" />
2
- import { SecureStorageErrorType } from './enumerations/secure-storage-error-type';
3
- import { DisposedError } from './errors/disposed';
4
- import { SecureStorageError } from './errors/secure-storage';
5
- import type { IIdProvider } from './interfaces/id-provider';
6
- import { ObjectIdProvider } from './lib/id-providers/objectid-provider';
7
- import { XorService } from './services/xor';
8
- import { uint8ArrayToHex } from './utils';
9
-
10
- /**
11
- * Default ID provider (singleton, no circular dependency)
12
- */
13
- const DEFAULT_ID_PROVIDER = new ObjectIdProvider();
14
-
15
- /**
16
- * A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
17
- * The buffer is encrypted with a key derived from a random ID.
18
- * The ID is stored in the clear, but the buffer is encrypted with a key derived from the ID.
19
- * This allows the buffer to be decrypted, but only if the ID and salt are known.
20
- *
21
- * Supports explicit resource management (TC39 proposal) for automatic disposal:
22
- * ```typescript
23
- * using buffer = new SecureBuffer(sensitiveData);
24
- * // buffer automatically disposed when leaving scope
25
- * ```
26
- */
27
- export class SecureBuffer implements Disposable {
28
- private _disposed: boolean = false;
29
- private readonly _id: Uint8Array;
30
- private readonly _idProvider: IIdProvider;
31
- private readonly _length: number;
32
- private readonly _obfuscatedValue: Uint8Array;
33
- private readonly _key: Uint8Array;
34
- private readonly _obfuscatedChecksum: Uint8Array;
35
- private _disposedAt?: string;
36
-
37
- constructor(
38
- data?: Uint8Array,
39
- idProvider: IIdProvider = DEFAULT_ID_PROVIDER,
40
- ) {
41
- this._idProvider = idProvider;
42
- this._id = this._idProvider.generate();
43
- // don't bother encrypting an empty buffer
44
- if (data === undefined || data.length === 0) {
45
- this._length = 0;
46
- this._obfuscatedValue = new Uint8Array(0);
47
- this._key = new Uint8Array(0);
48
- this._obfuscatedChecksum = new Uint8Array(0);
49
- return;
50
- }
51
- this._length = data.length;
52
- this._key = this._id;
53
- this._obfuscatedValue = this.obfuscateData(data);
54
- // Create a simple checksum without crypto for synchronous operation
55
- this._obfuscatedChecksum = this.createSimpleObfuscatedChecksum(data);
56
- }
57
- public dispose(): void {
58
- const err = new DisposedError();
59
- if (typeof Error.captureStackTrace === 'function') {
60
- Error.captureStackTrace(err, this.dispose);
61
- }
62
- this._disposedAt = err.stack ?? 'stack unavailable';
63
- this._obfuscatedValue.fill(0);
64
- this._key.fill(0);
65
- this._obfuscatedChecksum.fill(0);
66
- this._disposed = true;
67
- }
68
-
69
- /**
70
- * Symbol.dispose implementation for explicit resource management
71
- * Allows using 'using' keyword (TC39 proposal)
72
- */
73
- [Symbol.dispose](): void {
74
- this.dispose();
75
- }
76
-
77
- /**
78
- * Factory method for backward compatibility that uses Constants.idProvider
79
- * @param data Optional data to secure
80
- * @returns A new SecureBuffer instance using the global ID provider
81
- */
82
- static create(data?: Uint8Array): SecureBuffer {
83
- const { Constants } = require('./constants');
84
- return new SecureBuffer(data, Constants.idProvider);
85
- }
86
-
87
- /**
88
- * Static factory method that creates a SecureBuffer for a symmetric key
89
- * Useful for managing encryption keys securely
90
- */
91
- static allocateKey(sizeBytes: number = 32): SecureBuffer {
92
- const keyData = new Uint8Array(sizeBytes);
93
- // Will be filled by crypto.getRandomValues by caller
94
- return new SecureBuffer(keyData);
95
- }
96
-
97
- private assertNotDisposed(): void {
98
- if (this._disposed) {
99
- const e = new DisposedError();
100
- try {
101
- e.disposedAt = this._disposedAt;
102
- } catch {
103
- // ignore if Error object is sealed/frozen
104
- }
105
- throw e;
106
- }
107
- }
108
- public static fromString(data: string): SecureBuffer {
109
- return new SecureBuffer(new TextEncoder().encode(data));
110
- }
111
- public get disposedAtStack(): string | undefined {
112
- return this._disposedAt;
113
- }
114
- public get id(): string {
115
- this.assertNotDisposed();
116
- return this._idProvider.serialize(this._id);
117
- }
118
- public get idUint8Array(): Uint8Array {
119
- this.assertNotDisposed();
120
- return this._id;
121
- }
122
- public get originalLength(): number {
123
- this.assertNotDisposed();
124
- return this._length;
125
- }
126
- public get value(): Uint8Array {
127
- this.assertNotDisposed();
128
- if (this._length === 0) {
129
- return new Uint8Array(0);
130
- }
131
- try {
132
- const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
133
- if (deobfuscatedResult.length !== this._length) {
134
- throw new SecureStorageError(
135
- SecureStorageErrorType.DecryptedValueLengthMismatch,
136
- );
137
- }
138
- if (!this.validateObfuscatedChecksum(deobfuscatedResult)) {
139
- throw new SecureStorageError(
140
- SecureStorageErrorType.DecryptedValueChecksumMismatch,
141
- );
142
- }
143
- return deobfuscatedResult;
144
- } catch (error) {
145
- // If it's already a SecureStorageError, re-throw it
146
- if (error instanceof SecureStorageError) {
147
- throw error;
148
- }
149
- // Convert any other error (including AES-GCM authentication errors) to SecureStorageError
150
- throw new SecureStorageError(
151
- SecureStorageErrorType.DecryptedValueChecksumMismatch,
152
- );
153
- }
154
- }
155
- public get valueAsString(): string {
156
- this.assertNotDisposed();
157
- return new TextDecoder().decode(this.value);
158
- }
159
- public get valueAsHexString(): string {
160
- this.assertNotDisposed();
161
- return uint8ArrayToHex(this.value);
162
- }
163
- public get valueAsBase64String(): string {
164
- this.assertNotDisposed();
165
- return btoa(String.fromCharCode(...this.value));
166
- }
167
- public get checksum(): string {
168
- this.assertNotDisposed();
169
- const deobfuscatedChecksum = new TextDecoder().decode(
170
- this.deobfuscateData(this._obfuscatedChecksum),
171
- );
172
- return deobfuscatedChecksum;
173
- }
174
- private generateSimpleChecksum(data: string | Uint8Array): string {
175
- const dataBytes =
176
- typeof data === 'string' ? new TextEncoder().encode(data) : data;
177
- let hash = 0;
178
- for (let i = 0; i < dataBytes.length; i++) {
179
- hash = ((hash << 5) - hash + dataBytes[i]) & 0xffffffff;
180
- }
181
- return hash.toString(16);
182
- }
183
- private createSimpleObfuscatedChecksum(
184
- data: string | Uint8Array,
185
- ): Uint8Array {
186
- const checksum = this.generateSimpleChecksum(data);
187
- const result = this.obfuscateData(new TextEncoder().encode(checksum));
188
- return result;
189
- }
190
- private validateSimpleChecksum(
191
- data: string | Uint8Array,
192
- checksum: string,
193
- ): boolean {
194
- const generatedChecksum = this.generateSimpleChecksum(data);
195
- const a = new TextEncoder().encode(generatedChecksum);
196
- const b = new TextEncoder().encode(checksum);
197
- return this.timingSafeEqual(a, b);
198
- }
199
-
200
- private timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {
201
- if (a.length !== b.length) {
202
- return false;
203
- }
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
- private validateObfuscatedChecksum(data: string | Uint8Array): boolean {
211
- const deobfuscatedChecksum = new TextDecoder().decode(
212
- this.deobfuscateData(this._obfuscatedChecksum),
213
- );
214
- return this.validateSimpleChecksum(data, deobfuscatedChecksum);
215
- }
216
- private obfuscateData(data: Uint8Array): Uint8Array {
217
- return XorService.xor(data, this._key);
218
- }
219
- private deobfuscateData(data: Uint8Array): Uint8Array {
220
- return XorService.xor(data, this._key);
221
- }
222
- public get length(): number {
223
- this.assertNotDisposed();
224
- return this._length;
225
- }
226
- }
@@ -1,244 +0,0 @@
1
- /// <reference path="../../../types/global.d.ts" />
2
- import { SecureStorageErrorType } from './enumerations/secure-storage-error-type';
3
- import { DisposedError } from './errors/disposed';
4
- import { SecureStorageError } from './errors/secure-storage';
5
- import type { IIdProvider } from './interfaces/id-provider';
6
- import { ObjectIdProvider } from './lib/id-providers/objectid-provider';
7
- import { XorService } from './services/xor';
8
- import { uint8ArrayToHex } from './utils';
9
-
10
- /**
11
- * Default ID provider (singleton, no circular dependency)
12
- */
13
- const DEFAULT_ID_PROVIDER = new ObjectIdProvider();
14
-
15
- /**
16
- * A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
17
- */
18
- export class SecureString {
19
- private _disposed: boolean = false;
20
- private readonly _isNull: boolean;
21
- private readonly _id: Uint8Array;
22
- private readonly _idProvider: IIdProvider;
23
- private readonly _length: number;
24
- private readonly _obfuscatedValue: Uint8Array;
25
- private readonly _key: Uint8Array;
26
- private readonly _obfuscatedChecksum: Uint8Array;
27
- private _disposedAt?: string;
28
- constructor(
29
- data?: string | Uint8Array | null,
30
- idProvider: IIdProvider = DEFAULT_ID_PROVIDER,
31
- ) {
32
- this._idProvider = idProvider;
33
- this._id = this._idProvider.generate();
34
- // only treat null/undefined as null, empty strings/arrays are valid empty data
35
- if (data === null || data === undefined) {
36
- this._isNull = true;
37
- this._length = 0;
38
- this._obfuscatedValue = new Uint8Array(0);
39
- this._key = new Uint8Array(0);
40
- this._obfuscatedChecksum = new Uint8Array(0);
41
- return;
42
- }
43
- this._isNull = false;
44
- this._key = this._id;
45
- const dataAsUint8Array =
46
- typeof data === 'string'
47
- ? new TextEncoder().encode(data)
48
- : (data as Uint8Array);
49
- // Store the byte length, not the character length
50
- this._length = dataAsUint8Array.length;
51
- this._obfuscatedValue = this.obfuscateData(dataAsUint8Array);
52
- this._obfuscatedChecksum =
53
- this.createSimpleObfuscatedChecksum(dataAsUint8Array);
54
- }
55
-
56
- /**
57
- * Factory method for backward compatibility that uses Constants.idProvider
58
- * @param data Optional data to secure
59
- * @returns A new SecureString instance using the global ID provider
60
- */
61
- static create(data?: string | Uint8Array | null): SecureString {
62
- const { Constants } = require('./constants');
63
- return new SecureString(data, Constants.idProvider);
64
- }
65
-
66
- private assertNotDisposed(): void {
67
- if (this._disposed) {
68
- const e = new DisposedError();
69
- try {
70
- e.disposedAt = this._disposedAt;
71
- } catch {
72
- // ignore if Error object is sealed/frozen
73
- }
74
- throw e;
75
- }
76
- }
77
- public dispose(): void {
78
- const err = new DisposedError();
79
- if (typeof Error.captureStackTrace === 'function') {
80
- Error.captureStackTrace(err, this.dispose);
81
- }
82
- this._disposedAt = err.stack ?? 'stack unavailable';
83
- this._obfuscatedValue.fill(0);
84
- this._key.fill(0);
85
- this._obfuscatedChecksum.fill(0);
86
- this._disposed = true;
87
- }
88
- public get disposedAtStack(): string | undefined {
89
- return this._disposedAt;
90
- }
91
- public get id(): string {
92
- this.assertNotDisposed();
93
- return this._idProvider.serialize(this._id);
94
- }
95
- public get idUint8Array(): Uint8Array {
96
- this.assertNotDisposed();
97
- return this._id;
98
- }
99
- public get originalLength(): number {
100
- this.assertNotDisposed();
101
- return this._length;
102
- }
103
- public get valueAsUint8Array(): Uint8Array {
104
- this.assertNotDisposed();
105
- if (this._isNull) {
106
- return new Uint8Array(0);
107
- }
108
- try {
109
- const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
110
- if (deobfuscatedResult.length !== this._length) {
111
- throw new SecureStorageError(
112
- SecureStorageErrorType.DecryptedValueLengthMismatch,
113
- );
114
- }
115
-
116
- // Validate checksum
117
- const expectedChecksum = this.createSimpleChecksum(deobfuscatedResult);
118
- const storedChecksum = new TextDecoder().decode(
119
- this.deobfuscateData(this._obfuscatedChecksum),
120
- );
121
-
122
- const expectedBytes = new TextEncoder().encode(expectedChecksum);
123
- const storedBytes = new TextEncoder().encode(storedChecksum);
124
- if (!this.timingSafeEqual(expectedBytes, storedBytes)) {
125
- throw new SecureStorageError(
126
- SecureStorageErrorType.DecryptedValueChecksumMismatch,
127
- );
128
- }
129
-
130
- return deobfuscatedResult;
131
- } catch (error) {
132
- // If it's already a SecureStorageError, re-throw it
133
- if (error instanceof SecureStorageError) {
134
- throw error;
135
- }
136
- // Convert any other error to SecureStorageError
137
- throw new SecureStorageError(
138
- SecureStorageErrorType.DecryptedValueChecksumMismatch,
139
- );
140
- }
141
- }
142
- public get value(): string | null {
143
- this.assertNotDisposed();
144
- if (this._isNull) {
145
- return null;
146
- }
147
- return new TextDecoder().decode(this.valueAsUint8Array);
148
- }
149
- public get notNullValue(): string {
150
- this.assertNotDisposed();
151
- if (this._isNull) {
152
- throw new SecureStorageError(SecureStorageErrorType.ValueIsNull);
153
- }
154
- return new TextDecoder().decode(this.valueAsUint8Array);
155
- }
156
- public get valueAsHexString(): string {
157
- this.assertNotDisposed();
158
- return uint8ArrayToHex(this.valueAsUint8Array);
159
- }
160
- public get valueAsBase64String(): string {
161
- this.assertNotDisposed();
162
- return btoa(String.fromCharCode(...this.valueAsUint8Array));
163
- }
164
- public get hasValue(): boolean {
165
- this.assertNotDisposed();
166
- return !this._isNull && this._length > 0;
167
- }
168
- public get checksum(): string {
169
- this.assertNotDisposed();
170
- const deobfuscatedChecksum = new TextDecoder().decode(
171
- this.deobfuscateData(this._obfuscatedChecksum),
172
- );
173
- return deobfuscatedChecksum;
174
- }
175
- public get length(): number {
176
- this.assertNotDisposed();
177
- return this._length;
178
- }
179
- private async generateChecksum(data: string | Uint8Array): Promise<string> {
180
- const dataBytes =
181
- typeof data === 'string' ? new TextEncoder().encode(data) : data;
182
- const hashArray = await crypto.subtle.digest(
183
- 'SHA-256',
184
- new Uint8Array(dataBytes),
185
- );
186
- return uint8ArrayToHex(new Uint8Array(hashArray));
187
- }
188
- private createSimpleChecksum(data: Uint8Array): string {
189
- let hash = 0;
190
- for (let i = 0; i < data.length; i++) {
191
- hash = ((hash << 5) - hash + data[i]) & 0xffffffff;
192
- }
193
- return hash.toString(16);
194
- }
195
-
196
- private createSimpleObfuscatedChecksum(
197
- data: string | Uint8Array,
198
- ): Uint8Array {
199
- const dataBytes =
200
- typeof data === 'string' ? new TextEncoder().encode(data) : data;
201
- const checksum = this.createSimpleChecksum(dataBytes);
202
- return this.obfuscateData(new TextEncoder().encode(checksum));
203
- }
204
-
205
- private async createObfuscatedChecksum(
206
- data: string | Uint8Array,
207
- ): Promise<Uint8Array> {
208
- const checksum = await this.generateChecksum(data);
209
- const result = this.obfuscateData(new TextEncoder().encode(checksum));
210
- return result;
211
- }
212
- private async validateChecksum(
213
- data: string | Uint8Array,
214
- checksum: string,
215
- ): Promise<boolean> {
216
- const generatedChecksum = await this.generateChecksum(data);
217
- return generatedChecksum === checksum;
218
- }
219
-
220
- private timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {
221
- if (a.length !== b.length) {
222
- return false;
223
- }
224
- let result = 0;
225
- for (let i = 0; i < a.length; i++) {
226
- result |= a[i] ^ b[i];
227
- }
228
- return result === 0;
229
- }
230
- private async validateObfuscatedChecksum(
231
- data: string | Uint8Array,
232
- ): Promise<boolean> {
233
- const deobfuscatedChecksum = new TextDecoder().decode(
234
- this.deobfuscateData(this._obfuscatedChecksum),
235
- );
236
- return this.validateChecksum(data, deobfuscatedChecksum);
237
- }
238
- private obfuscateData(data: Uint8Array): Uint8Array {
239
- return XorService.xor(data, this._key);
240
- }
241
- private deobfuscateData(data: Uint8Array): Uint8Array {
242
- return XorService.xor(data, this._key);
243
- }
244
- }
@@ -1,220 +0,0 @@
1
- import { IECIESConstants } from '../interfaces/ecies-consts';
2
- import { Constants } from '../constants';
3
- import { EciesComponentId, getEciesI18nEngine } from '../i18n-setup';
4
- import { EciesStringKey } from '../enumerations';
5
-
6
- export abstract class AESGCMService {
7
- public static readonly ALGORITHM_NAME = 'AES-GCM';
8
- /**
9
- * Encrypt data using AES-GCM
10
- * @param data Data to encrypt
11
- * @param key Key to use for encryption (must be 16, 24 or 32 bytes for AES)
12
- * @returns Encrypted data
13
- */
14
- public static async encrypt(
15
- data: Uint8Array,
16
- key: Uint8Array,
17
- authTag: boolean = false,
18
- eciesParams: IECIESConstants = Constants.ECIES,
19
- aad?: Uint8Array,
20
- ): Promise<{ encrypted: Uint8Array; iv: Uint8Array; tag?: Uint8Array }> {
21
- // Validate key length (AES supports 16, 24, or 32 bytes)
22
- if (!key || (key.length !== 16 && key.length !== 24 && key.length !== 32)) {
23
- const engine = getEciesI18nEngine();
24
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidAESKeyLength));
25
- }
26
-
27
- // Validate data exists (empty data is allowed for AES-GCM)
28
- if (!data) {
29
- const engine = getEciesI18nEngine();
30
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_CannotEncryptEmptyData));
31
- }
32
- if (data.length > eciesParams.MAX_RAW_DATA_SIZE) {
33
- const engine = getEciesI18nEngine();
34
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MessageLengthExceedsMaximumAllowedSizeTemplate, { messageLength: data.length }));
35
- }
36
-
37
- const cryptoKey = await crypto.subtle.importKey(
38
- 'raw',
39
- new Uint8Array(key),
40
- { name: AESGCMService.ALGORITHM_NAME },
41
- false,
42
- ['encrypt'],
43
- );
44
-
45
- const eciesConsts = eciesParams;
46
- const iv = crypto.getRandomValues(new Uint8Array(eciesConsts.IV_SIZE));
47
- const encryptedResult = await crypto.subtle.encrypt(
48
- {
49
- name: AESGCMService.ALGORITHM_NAME,
50
- iv,
51
- additionalData: aad,
52
- ...(authTag && { tagLength: eciesConsts.AUTH_TAG_SIZE * 8 }),
53
- },
54
- cryptoKey,
55
- new Uint8Array(data),
56
- );
57
-
58
- const encryptedArray = new Uint8Array(encryptedResult);
59
- if (!authTag) {
60
- return { encrypted: encryptedArray, iv };
61
- }
62
- const authTagLengthBytes = eciesConsts.AUTH_TAG_SIZE;
63
- const encryptedBytes = encryptedArray.slice(0, -authTagLengthBytes); // Remove auth tag
64
- const authTagBytes = encryptedArray.slice(-authTagLengthBytes); // Last 16 bytes are auth tag
65
-
66
- return { encrypted: encryptedBytes, iv, tag: authTagBytes };
67
- }
68
-
69
- /**
70
- * Combine encrypted data and auth tag into a single Uint8Array
71
- * @param encryptedData The encrypted data
72
- * @param authTag The authentication tag
73
- * @returns The combined Uint8Array
74
- */
75
- public static combineEncryptedDataAndTag(
76
- encryptedData: Uint8Array,
77
- authTag: Uint8Array,
78
- ): Uint8Array {
79
- const combined = new Uint8Array(encryptedData.length + authTag.length);
80
- combined.set(encryptedData);
81
- combined.set(authTag, encryptedData.length);
82
- return combined;
83
- }
84
-
85
- /**
86
- * Combine IV and encrypted data (with optional auth tag) into a single Uint8Array
87
- * @param iv The initialization vector
88
- * @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
89
- * @returns The combined Uint8Array
90
- */
91
- public static combineIvAndEncryptedData(
92
- iv: Uint8Array,
93
- encryptedDataWithTag: Uint8Array,
94
- ): Uint8Array {
95
- const combined = new Uint8Array(iv.length + encryptedDataWithTag.length);
96
- combined.set(iv);
97
- combined.set(encryptedDataWithTag, iv.length);
98
- return combined;
99
- }
100
-
101
- /**
102
- * Combine IV, encrypted data and auth tag into a single Uint8Array
103
- * @param iv The initialization vector
104
- * @param encryptedData The encrypted data
105
- * @param authTag The authentication tag
106
- * @returns The combined Uint8Array
107
- */
108
- public static combineIvTagAndEncryptedData(
109
- iv: Uint8Array,
110
- encryptedData: Uint8Array,
111
- authTag: Uint8Array,
112
- ): Uint8Array {
113
- const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(
114
- encryptedData,
115
- authTag,
116
- );
117
- return AESGCMService.combineIvAndEncryptedData(iv, encryptedWithTag);
118
- }
119
-
120
- /**
121
- * Split combined encrypted data back into its components
122
- * @param combinedData The combined data containing IV, encrypted data, and optionally auth tag
123
- * @param hasAuthTag Whether the combined data includes an authentication tag
124
- * @returns Object containing the split components
125
- */
126
- public static splitEncryptedData(
127
- combinedData: Uint8Array,
128
- hasAuthTag: boolean = true,
129
- eciesParams: IECIESConstants = Constants.ECIES,
130
- ): { iv: Uint8Array; encryptedDataWithTag: Uint8Array } {
131
- const eciesConsts = eciesParams;
132
- const ivLength = eciesConsts.IV_SIZE;
133
- const tagLength = hasAuthTag ? eciesConsts.AUTH_TAG_SIZE : 0;
134
-
135
- if (combinedData.length < ivLength + tagLength) {
136
- const engine = getEciesI18nEngine();
137
- throw new Error(
138
- engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_CombinedDataTooShortForComponents),
139
- );
140
- }
141
-
142
- const iv = combinedData.slice(0, ivLength);
143
- const encryptedDataWithTag = combinedData.slice(ivLength);
144
-
145
- return { iv, encryptedDataWithTag };
146
- }
147
-
148
- /**
149
- * Decrypt data using AES-GCM
150
- * @param iv The initialization vector
151
- * @param encryptedData Data to decrypt (with auth tag appended if authTag is true)
152
- * @param key Key to use for decryption (must be 16, 24 or 32 bytes for AES)
153
- * @param authTag Whether the encrypted data includes an authentication tag
154
- * @returns Decrypted data
155
- */
156
- public static async decrypt(
157
- iv: Uint8Array,
158
- encryptedData: Uint8Array,
159
- key: Uint8Array,
160
- authTag: boolean = false,
161
- eciesParams: IECIESConstants = Constants.ECIES,
162
- aad?: Uint8Array,
163
- ): Promise<Uint8Array> {
164
- const eciesConsts = eciesParams;
165
-
166
- // Validate key length
167
- if (!key || (key.length !== 16 && key.length !== 24 && key.length !== 32)) {
168
- const engine = getEciesI18nEngine();
169
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidAESKeyLength));
170
- }
171
-
172
- // Validate IV
173
- if (!iv || iv.length !== eciesConsts.IV_SIZE) {
174
- const engine = getEciesI18nEngine();
175
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidIV));
176
- }
177
-
178
- // Validate encrypted data exists (empty encrypted data is allowed)
179
- if (!encryptedData) {
180
- const engine = getEciesI18nEngine();
181
- throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_CannotDecryptEmptyData));
182
- }
183
-
184
- const cryptoKey = await crypto.subtle.importKey(
185
- 'raw',
186
- new Uint8Array(key),
187
- { name: AESGCMService.ALGORITHM_NAME },
188
- false,
189
- ['decrypt'],
190
- );
191
-
192
- if (!authTag) {
193
- const decrypted = await crypto.subtle.decrypt(
194
- {
195
- name: AESGCMService.ALGORITHM_NAME,
196
- iv: new Uint8Array(iv),
197
- additionalData: aad,
198
- },
199
- cryptoKey,
200
- new Uint8Array(encryptedData),
201
- );
202
-
203
- return new Uint8Array(decrypted);
204
- }
205
-
206
- // Decrypt with auth tag (already appended to encryptedData)
207
- const decryptedResult = await crypto.subtle.decrypt(
208
- {
209
- name: AESGCMService.ALGORITHM_NAME,
210
- iv: new Uint8Array(iv),
211
- tagLength: eciesConsts.AUTH_TAG_SIZE * 8,
212
- additionalData: aad,
213
- },
214
- cryptoKey,
215
- new Uint8Array(encryptedData),
216
- );
217
-
218
- return new Uint8Array(decryptedResult);
219
- }
220
- }