@zudojs/crypto 0.0.1 → 1.0.0

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 (353) hide show
  1. package/README.md +43 -14
  2. package/dist/compare/compare.helper.d.ts +10 -2
  3. package/dist/compare/compare.helper.js +22 -6
  4. package/dist/cryptoCipher/cryptoCipher.core.d.ts +11 -1
  5. package/dist/cryptoCipher/cryptoCipher.core.js +19 -3
  6. package/dist/cryptoCipher/cryptoCipher.envelope.d.ts +7 -2
  7. package/dist/cryptoCipher/cryptoCipher.envelope.js +33 -14
  8. package/dist/cryptoCipher/cryptoCipher.string.d.ts +2 -1
  9. package/dist/cryptoCipher/cryptoCipher.string.js +2 -2
  10. package/dist/cryptoConstants/cryptoConstants.guard.d.ts +9 -0
  11. package/dist/cryptoConstants/cryptoConstants.guard.js +16 -1
  12. package/dist/cryptoConstants/cryptoConstants.security.d.ts +34 -1
  13. package/dist/cryptoConstants/cryptoConstants.security.js +34 -1
  14. package/dist/cryptoConstants/cryptoConstants.token.d.ts +2 -0
  15. package/dist/cryptoConstants/cryptoConstants.token.js +2 -0
  16. package/dist/cryptoConstants/cryptoConstants.type.d.ts +36 -14
  17. package/dist/cryptoConstants/cryptoConstants.type.js +36 -14
  18. package/dist/cryptoEncoding/cryptoEncoding.compare.d.ts +4 -1
  19. package/dist/cryptoEncoding/cryptoEncoding.compare.js +11 -4
  20. package/dist/cryptoEncoding/cryptoEncoding.core.d.ts +22 -0
  21. package/dist/cryptoEncoding/cryptoEncoding.core.js +41 -3
  22. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64.d.ts +10 -2
  23. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64.js +24 -16
  24. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64url.d.ts +9 -1
  25. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64url.js +23 -20
  26. package/dist/cryptoEncoding/encoding/cryptoEncoding.hex.d.ts +9 -2
  27. package/dist/cryptoEncoding/encoding/cryptoEncoding.hex.js +17 -11
  28. package/dist/cryptoErrors/cryptoErrors.helper.d.ts +30 -0
  29. package/dist/cryptoErrors/cryptoErrors.helper.js +72 -0
  30. package/dist/cryptoFactory/cryptoFactory.core.d.ts +37 -6
  31. package/dist/cryptoFactory/cryptoFactory.core.js +56 -30
  32. package/dist/cryptoFactory/cryptoFactory.password.d.ts +4 -3
  33. package/dist/cryptoFactory/cryptoFactory.password.js +4 -4
  34. package/dist/cryptoFactory/cryptoFactory.token.d.ts +9 -8
  35. package/dist/cryptoFactory/cryptoFactory.token.js +16 -15
  36. package/dist/cryptoHash/cryptoHash.codec.d.ts +2 -0
  37. package/dist/cryptoHash/cryptoHash.codec.js +12 -12
  38. package/dist/cryptoHash/cryptoHash.compare.d.ts +3 -1
  39. package/dist/cryptoHash/cryptoHash.compare.js +5 -9
  40. package/dist/cryptoHash/cryptoHash.core.d.ts +6 -2
  41. package/dist/cryptoHash/cryptoHash.core.js +9 -2
  42. package/dist/cryptoHash/cryptoHmac.core.d.ts +8 -5
  43. package/dist/cryptoHash/cryptoHmac.core.js +22 -9
  44. package/dist/cryptoKey/cryptoKey.factory.d.ts +29 -2
  45. package/dist/cryptoKey/cryptoKey.factory.js +82 -18
  46. package/dist/cryptoKey/cryptoKey.utils.d.ts +5 -3
  47. package/dist/cryptoKey/cryptoKey.utils.js +5 -3
  48. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.core.d.ts +7 -1
  49. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.core.js +40 -15
  50. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.salt.d.ts +2 -1
  51. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.salt.js +2 -3
  52. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.type.d.ts +5 -1
  53. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.validate.d.ts +2 -2
  54. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.validate.js +16 -6
  55. package/dist/cryptoPassword/cryptoPassword.codec.d.ts +15 -1
  56. package/dist/cryptoPassword/cryptoPassword.codec.js +127 -56
  57. package/dist/cryptoPassword/cryptoPassword.core.d.ts +17 -3
  58. package/dist/cryptoPassword/cryptoPassword.core.js +29 -21
  59. package/dist/cryptoPassword/cryptoPassword.helper.js +6 -5
  60. package/dist/cryptoPassword/cryptoPassword.type.d.ts +33 -5
  61. package/dist/cryptoPassword/cryptoPassword.validate.d.ts +14 -3
  62. package/dist/cryptoPassword/cryptoPassword.validate.js +51 -20
  63. package/dist/cryptoProvider/cryptoProvider.default.d.ts +18 -0
  64. package/dist/cryptoProvider/cryptoProvider.default.js +31 -0
  65. package/dist/cryptoProvider/cryptoProvider.interface.d.ts +9 -34
  66. package/dist/cryptoProvider/cryptoProvider.type.d.ts +32 -3
  67. package/dist/cryptoProvider/cryptoProvider.type.js +40 -1
  68. package/dist/cryptoProvider/index.d.ts +5 -2
  69. package/dist/cryptoProvider/index.js +2 -0
  70. package/dist/cryptoProvider/types/cryptoCipher.type.d.ts +11 -6
  71. package/dist/cryptoProvider/types/cryptoKeyDerivation.type.d.ts +39 -3
  72. package/dist/cryptoProvider/types/cryptoSignature.type.d.ts +5 -5
  73. package/dist/cryptoProvider/types/index.d.ts +1 -1
  74. package/dist/cryptoRandom/cryptoRandom.choice.d.ts +6 -3
  75. package/dist/cryptoRandom/cryptoRandom.choice.js +10 -6
  76. package/dist/cryptoRandom/cryptoRandom.core.d.ts +8 -5
  77. package/dist/cryptoRandom/cryptoRandom.core.js +8 -7
  78. package/dist/cryptoRandom/cryptoRandom.string.d.ts +11 -9
  79. package/dist/cryptoRandom/cryptoRandom.string.js +28 -29
  80. package/dist/cryptoService/cryptoService.core.d.ts +47 -9
  81. package/dist/cryptoService/cryptoService.core.js +65 -33
  82. package/dist/cryptoService/cryptoService.derivation.d.ts +3 -3
  83. package/dist/cryptoService/cryptoService.derivation.js +8 -6
  84. package/dist/cryptoService/cryptoService.encoding.js +6 -5
  85. package/dist/cryptoService/index.d.ts +1 -5
  86. package/dist/cryptoService/index.js +1 -5
  87. package/dist/cryptoService/operations/cryptoService.cipher.d.ts +3 -2
  88. package/dist/cryptoService/operations/cryptoService.cipher.js +13 -9
  89. package/dist/cryptoService/operations/cryptoService.hash.d.ts +3 -2
  90. package/dist/cryptoService/operations/cryptoService.hash.js +7 -8
  91. package/dist/cryptoService/operations/cryptoService.password.d.ts +7 -2
  92. package/dist/cryptoService/operations/cryptoService.password.js +20 -9
  93. package/dist/cryptoService/operations/cryptoService.token.d.ts +9 -4
  94. package/dist/cryptoService/operations/cryptoService.token.js +31 -17
  95. package/dist/cryptoSignature/cryptoSignature.core.d.ts +10 -2
  96. package/dist/cryptoSignature/cryptoSignature.core.js +7 -3
  97. package/dist/cryptoToken/cryptoToken.core.d.ts +15 -9
  98. package/dist/cryptoToken/cryptoToken.core.js +63 -38
  99. package/dist/cryptoToken/cryptoToken.hash.d.ts +9 -7
  100. package/dist/cryptoToken/cryptoToken.hash.js +19 -43
  101. package/dist/cryptoUtils/cryptoUtils.compare.d.ts +3 -1
  102. package/dist/cryptoUtils/cryptoUtils.compare.js +5 -14
  103. package/dist/cryptoUtils/cryptoUtils.number.d.ts +3 -0
  104. package/dist/cryptoUtils/cryptoUtils.number.js +12 -6
  105. package/dist/cryptoUtils/cryptoUtils.validation.d.ts +2 -2
  106. package/dist/cryptoUtils/cryptoUtils.validation.js +6 -8
  107. package/dist/cryptoUtils/encoding/cryptoUtils.base64.d.ts +4 -4
  108. package/dist/cryptoUtils/encoding/cryptoUtils.base64.js +5 -23
  109. package/dist/cryptoUtils/encoding/cryptoUtils.base64url.d.ts +4 -4
  110. package/dist/cryptoUtils/encoding/cryptoUtils.base64url.js +5 -32
  111. package/dist/cryptoUtils/encoding/cryptoUtils.hex.d.ts +4 -4
  112. package/dist/cryptoUtils/encoding/cryptoUtils.hex.js +5 -20
  113. package/dist/index.d.ts +1 -2
  114. package/dist/index.js +1 -2
  115. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.core.d.ts +6 -29
  116. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.core.js +0 -1
  117. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.helper.d.ts +9 -4
  118. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.helper.js +25 -43
  119. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.derivation.d.ts +7 -0
  120. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.derivation.js +89 -30
  121. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.password.d.ts +17 -10
  122. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.password.js +112 -72
  123. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.encryption.d.ts +3 -12
  124. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.encryption.js +74 -25
  125. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.hash.js +7 -2
  126. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.random.d.ts +6 -0
  127. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.random.js +18 -18
  128. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.signing.d.ts +10 -12
  129. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.signing.js +75 -20
  130. package/dist/node/signing/signing.conversion.d.ts +13 -3
  131. package/dist/node/signing/signing.conversion.js +35 -15
  132. package/dist/node/signing/signing.core.d.ts +2 -1
  133. package/dist/node/signing/signing.core.js +2 -3
  134. package/dist/node/signing/signing.utils.d.ts +10 -2
  135. package/dist/node/signing/signing.utils.js +26 -5
  136. package/package.json +18 -8
  137. package/dist/.tsbuildinfo +0 -1
  138. package/dist/compare/compare.helper.d.ts.map +0 -1
  139. package/dist/compare/compare.helper.js.map +0 -1
  140. package/dist/compare/index.d.ts.map +0 -1
  141. package/dist/compare/index.js.map +0 -1
  142. package/dist/cryptoAlgorithm/index.d.ts +0 -8
  143. package/dist/cryptoAlgorithm/index.d.ts.map +0 -1
  144. package/dist/cryptoAlgorithm/index.js +0 -8
  145. package/dist/cryptoAlgorithm/index.js.map +0 -1
  146. package/dist/cryptoCipher/cryptoCipher.core.d.ts.map +0 -1
  147. package/dist/cryptoCipher/cryptoCipher.core.js.map +0 -1
  148. package/dist/cryptoCipher/cryptoCipher.envelope.d.ts.map +0 -1
  149. package/dist/cryptoCipher/cryptoCipher.envelope.js.map +0 -1
  150. package/dist/cryptoCipher/cryptoCipher.string.d.ts.map +0 -1
  151. package/dist/cryptoCipher/cryptoCipher.string.js.map +0 -1
  152. package/dist/cryptoCipher/index.d.ts.map +0 -1
  153. package/dist/cryptoCipher/index.js.map +0 -1
  154. package/dist/cryptoConstants/cryptoConstants.config.d.ts.map +0 -1
  155. package/dist/cryptoConstants/cryptoConstants.config.js.map +0 -1
  156. package/dist/cryptoConstants/cryptoConstants.guard.d.ts.map +0 -1
  157. package/dist/cryptoConstants/cryptoConstants.guard.js.map +0 -1
  158. package/dist/cryptoConstants/cryptoConstants.security.d.ts.map +0 -1
  159. package/dist/cryptoConstants/cryptoConstants.security.js.map +0 -1
  160. package/dist/cryptoConstants/cryptoConstants.token.d.ts.map +0 -1
  161. package/dist/cryptoConstants/cryptoConstants.token.js.map +0 -1
  162. package/dist/cryptoConstants/cryptoConstants.type.d.ts.map +0 -1
  163. package/dist/cryptoConstants/cryptoConstants.type.js.map +0 -1
  164. package/dist/cryptoConstants/index.d.ts.map +0 -1
  165. package/dist/cryptoConstants/index.js.map +0 -1
  166. package/dist/cryptoEncoding/cryptoEncoding.arrayBuffer.d.ts.map +0 -1
  167. package/dist/cryptoEncoding/cryptoEncoding.arrayBuffer.js.map +0 -1
  168. package/dist/cryptoEncoding/cryptoEncoding.compare.d.ts.map +0 -1
  169. package/dist/cryptoEncoding/cryptoEncoding.compare.js.map +0 -1
  170. package/dist/cryptoEncoding/cryptoEncoding.core.d.ts.map +0 -1
  171. package/dist/cryptoEncoding/cryptoEncoding.core.js.map +0 -1
  172. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64.d.ts.map +0 -1
  173. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64.js.map +0 -1
  174. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64url.d.ts.map +0 -1
  175. package/dist/cryptoEncoding/encoding/cryptoEncoding.base64url.js.map +0 -1
  176. package/dist/cryptoEncoding/encoding/cryptoEncoding.hex.d.ts.map +0 -1
  177. package/dist/cryptoEncoding/encoding/cryptoEncoding.hex.js.map +0 -1
  178. package/dist/cryptoEncoding/encoding/index.d.ts.map +0 -1
  179. package/dist/cryptoEncoding/encoding/index.js.map +0 -1
  180. package/dist/cryptoEncoding/index.d.ts.map +0 -1
  181. package/dist/cryptoEncoding/index.js.map +0 -1
  182. package/dist/cryptoErrors/index.d.ts.map +0 -1
  183. package/dist/cryptoErrors/index.js.map +0 -1
  184. package/dist/cryptoFactory/cryptoFactory.core.d.ts.map +0 -1
  185. package/dist/cryptoFactory/cryptoFactory.core.js.map +0 -1
  186. package/dist/cryptoFactory/cryptoFactory.encoding.d.ts.map +0 -1
  187. package/dist/cryptoFactory/cryptoFactory.encoding.js.map +0 -1
  188. package/dist/cryptoFactory/cryptoFactory.options.d.ts +0 -2
  189. package/dist/cryptoFactory/cryptoFactory.options.d.ts.map +0 -1
  190. package/dist/cryptoFactory/cryptoFactory.options.js +0 -6
  191. package/dist/cryptoFactory/cryptoFactory.options.js.map +0 -1
  192. package/dist/cryptoFactory/cryptoFactory.password.d.ts.map +0 -1
  193. package/dist/cryptoFactory/cryptoFactory.password.js.map +0 -1
  194. package/dist/cryptoFactory/cryptoFactory.token.d.ts.map +0 -1
  195. package/dist/cryptoFactory/cryptoFactory.token.js.map +0 -1
  196. package/dist/cryptoFactory/index.d.ts.map +0 -1
  197. package/dist/cryptoFactory/index.js.map +0 -1
  198. package/dist/cryptoHash/cryptoHash.codec.d.ts.map +0 -1
  199. package/dist/cryptoHash/cryptoHash.codec.js.map +0 -1
  200. package/dist/cryptoHash/cryptoHash.compare.d.ts.map +0 -1
  201. package/dist/cryptoHash/cryptoHash.compare.js.map +0 -1
  202. package/dist/cryptoHash/cryptoHash.convenience.d.ts.map +0 -1
  203. package/dist/cryptoHash/cryptoHash.convenience.js.map +0 -1
  204. package/dist/cryptoHash/cryptoHash.core.d.ts.map +0 -1
  205. package/dist/cryptoHash/cryptoHash.core.js.map +0 -1
  206. package/dist/cryptoHash/cryptoHmac.core.d.ts.map +0 -1
  207. package/dist/cryptoHash/cryptoHmac.core.js.map +0 -1
  208. package/dist/cryptoHash/index.d.ts.map +0 -1
  209. package/dist/cryptoHash/index.js.map +0 -1
  210. package/dist/cryptoKey/cryptoKey.factory.d.ts.map +0 -1
  211. package/dist/cryptoKey/cryptoKey.factory.js.map +0 -1
  212. package/dist/cryptoKey/cryptoKey.type.d.ts.map +0 -1
  213. package/dist/cryptoKey/cryptoKey.type.js.map +0 -1
  214. package/dist/cryptoKey/cryptoKey.utils.d.ts.map +0 -1
  215. package/dist/cryptoKey/cryptoKey.utils.js.map +0 -1
  216. package/dist/cryptoKey/index.d.ts.map +0 -1
  217. package/dist/cryptoKey/index.js.map +0 -1
  218. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.core.d.ts.map +0 -1
  219. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.core.js.map +0 -1
  220. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.salt.d.ts.map +0 -1
  221. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.salt.js.map +0 -1
  222. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.type.d.ts.map +0 -1
  223. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.type.js.map +0 -1
  224. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.validate.d.ts.map +0 -1
  225. package/dist/cryptoKeyDerivation/cryptoKeyDerivation.validate.js.map +0 -1
  226. package/dist/cryptoKeyDerivation/index.d.ts.map +0 -1
  227. package/dist/cryptoKeyDerivation/index.js.map +0 -1
  228. package/dist/cryptoPassword/cryptoPassword.codec.d.ts.map +0 -1
  229. package/dist/cryptoPassword/cryptoPassword.codec.js.map +0 -1
  230. package/dist/cryptoPassword/cryptoPassword.core.d.ts.map +0 -1
  231. package/dist/cryptoPassword/cryptoPassword.core.js.map +0 -1
  232. package/dist/cryptoPassword/cryptoPassword.helper.d.ts.map +0 -1
  233. package/dist/cryptoPassword/cryptoPassword.helper.js.map +0 -1
  234. package/dist/cryptoPassword/cryptoPassword.type.d.ts.map +0 -1
  235. package/dist/cryptoPassword/cryptoPassword.type.js.map +0 -1
  236. package/dist/cryptoPassword/cryptoPassword.validate.d.ts.map +0 -1
  237. package/dist/cryptoPassword/cryptoPassword.validate.js.map +0 -1
  238. package/dist/cryptoPassword/index.d.ts.map +0 -1
  239. package/dist/cryptoPassword/index.js.map +0 -1
  240. package/dist/cryptoProvider/cryptoProvider.core.d.ts.map +0 -1
  241. package/dist/cryptoProvider/cryptoProvider.core.js.map +0 -1
  242. package/dist/cryptoProvider/cryptoProvider.interface.d.ts.map +0 -1
  243. package/dist/cryptoProvider/cryptoProvider.interface.js.map +0 -1
  244. package/dist/cryptoProvider/cryptoProvider.type.d.ts.map +0 -1
  245. package/dist/cryptoProvider/cryptoProvider.type.js.map +0 -1
  246. package/dist/cryptoProvider/index.d.ts.map +0 -1
  247. package/dist/cryptoProvider/index.js.map +0 -1
  248. package/dist/cryptoProvider/types/cryptoCipher.type.d.ts.map +0 -1
  249. package/dist/cryptoProvider/types/cryptoCipher.type.js.map +0 -1
  250. package/dist/cryptoProvider/types/cryptoHash.type.d.ts.map +0 -1
  251. package/dist/cryptoProvider/types/cryptoHash.type.js.map +0 -1
  252. package/dist/cryptoProvider/types/cryptoKeyDerivation.type.d.ts.map +0 -1
  253. package/dist/cryptoProvider/types/cryptoKeyDerivation.type.js.map +0 -1
  254. package/dist/cryptoProvider/types/cryptoRandom.type.d.ts.map +0 -1
  255. package/dist/cryptoProvider/types/cryptoRandom.type.js.map +0 -1
  256. package/dist/cryptoProvider/types/cryptoSignature.type.d.ts.map +0 -1
  257. package/dist/cryptoProvider/types/cryptoSignature.type.js.map +0 -1
  258. package/dist/cryptoProvider/types/index.d.ts.map +0 -1
  259. package/dist/cryptoProvider/types/index.js.map +0 -1
  260. package/dist/cryptoRandom/cryptoRandom.choice.d.ts.map +0 -1
  261. package/dist/cryptoRandom/cryptoRandom.choice.js.map +0 -1
  262. package/dist/cryptoRandom/cryptoRandom.core.d.ts.map +0 -1
  263. package/dist/cryptoRandom/cryptoRandom.core.js.map +0 -1
  264. package/dist/cryptoRandom/cryptoRandom.string.d.ts.map +0 -1
  265. package/dist/cryptoRandom/cryptoRandom.string.js.map +0 -1
  266. package/dist/cryptoRandom/index.d.ts.map +0 -1
  267. package/dist/cryptoRandom/index.js.map +0 -1
  268. package/dist/cryptoService/cryptoService.core.d.ts.map +0 -1
  269. package/dist/cryptoService/cryptoService.core.js.map +0 -1
  270. package/dist/cryptoService/cryptoService.derivation.d.ts.map +0 -1
  271. package/dist/cryptoService/cryptoService.derivation.js.map +0 -1
  272. package/dist/cryptoService/cryptoService.encoding.d.ts.map +0 -1
  273. package/dist/cryptoService/cryptoService.encoding.js.map +0 -1
  274. package/dist/cryptoService/index.d.ts.map +0 -1
  275. package/dist/cryptoService/index.js.map +0 -1
  276. package/dist/cryptoService/operations/cryptoService.cipher.d.ts.map +0 -1
  277. package/dist/cryptoService/operations/cryptoService.cipher.js.map +0 -1
  278. package/dist/cryptoService/operations/cryptoService.hash.d.ts.map +0 -1
  279. package/dist/cryptoService/operations/cryptoService.hash.js.map +0 -1
  280. package/dist/cryptoService/operations/cryptoService.password.d.ts.map +0 -1
  281. package/dist/cryptoService/operations/cryptoService.password.js.map +0 -1
  282. package/dist/cryptoService/operations/cryptoService.token.d.ts.map +0 -1
  283. package/dist/cryptoService/operations/cryptoService.token.js.map +0 -1
  284. package/dist/cryptoService/operations/index.d.ts.map +0 -1
  285. package/dist/cryptoService/operations/index.js.map +0 -1
  286. package/dist/cryptoSignature/cryptoSignature.core.d.ts.map +0 -1
  287. package/dist/cryptoSignature/cryptoSignature.core.js.map +0 -1
  288. package/dist/cryptoSignature/index.d.ts.map +0 -1
  289. package/dist/cryptoSignature/index.js.map +0 -1
  290. package/dist/cryptoToken/cryptoToken.core.d.ts.map +0 -1
  291. package/dist/cryptoToken/cryptoToken.core.js.map +0 -1
  292. package/dist/cryptoToken/cryptoToken.hash.d.ts.map +0 -1
  293. package/dist/cryptoToken/cryptoToken.hash.js.map +0 -1
  294. package/dist/cryptoToken/cryptoToken.utils.d.ts.map +0 -1
  295. package/dist/cryptoToken/cryptoToken.utils.js.map +0 -1
  296. package/dist/cryptoToken/index.d.ts.map +0 -1
  297. package/dist/cryptoToken/index.js.map +0 -1
  298. package/dist/cryptoUtils/cryptoUtils.compare.d.ts.map +0 -1
  299. package/dist/cryptoUtils/cryptoUtils.compare.js.map +0 -1
  300. package/dist/cryptoUtils/cryptoUtils.conversion.d.ts.map +0 -1
  301. package/dist/cryptoUtils/cryptoUtils.conversion.js.map +0 -1
  302. package/dist/cryptoUtils/cryptoUtils.number.d.ts.map +0 -1
  303. package/dist/cryptoUtils/cryptoUtils.number.js.map +0 -1
  304. package/dist/cryptoUtils/cryptoUtils.text.d.ts.map +0 -1
  305. package/dist/cryptoUtils/cryptoUtils.text.js.map +0 -1
  306. package/dist/cryptoUtils/cryptoUtils.validation.d.ts.map +0 -1
  307. package/dist/cryptoUtils/cryptoUtils.validation.js.map +0 -1
  308. package/dist/cryptoUtils/encoding/cryptoUtils.base64.d.ts.map +0 -1
  309. package/dist/cryptoUtils/encoding/cryptoUtils.base64.js.map +0 -1
  310. package/dist/cryptoUtils/encoding/cryptoUtils.base64url.d.ts.map +0 -1
  311. package/dist/cryptoUtils/encoding/cryptoUtils.base64url.js.map +0 -1
  312. package/dist/cryptoUtils/encoding/cryptoUtils.hex.d.ts.map +0 -1
  313. package/dist/cryptoUtils/encoding/cryptoUtils.hex.js.map +0 -1
  314. package/dist/cryptoUtils/encoding/index.d.ts.map +0 -1
  315. package/dist/cryptoUtils/encoding/index.js.map +0 -1
  316. package/dist/cryptoUtils/index.d.ts.map +0 -1
  317. package/dist/cryptoUtils/index.js.map +0 -1
  318. package/dist/index.d.ts.map +0 -1
  319. package/dist/index.js.map +0 -1
  320. package/dist/node/index.d.ts.map +0 -1
  321. package/dist/node/index.js.map +0 -1
  322. package/dist/node/nodeCryptoProvider/index.d.ts.map +0 -1
  323. package/dist/node/nodeCryptoProvider/index.js.map +0 -1
  324. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.core.d.ts.map +0 -1
  325. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.core.js.map +0 -1
  326. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.factory.d.ts.map +0 -1
  327. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.factory.js.map +0 -1
  328. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.helper.d.ts.map +0 -1
  329. package/dist/node/nodeCryptoProvider/nodeCryptoProvider.helper.js.map +0 -1
  330. package/dist/node/nodeCryptoProvider/operations/index.d.ts.map +0 -1
  331. package/dist/node/nodeCryptoProvider/operations/index.js.map +0 -1
  332. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.derivation.d.ts.map +0 -1
  333. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.derivation.js.map +0 -1
  334. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.password.d.ts.map +0 -1
  335. package/dist/node/nodeCryptoProvider/operations/nodeCryptoProvider.password.js.map +0 -1
  336. package/dist/node/nodeCryptoProvider/primitives/index.d.ts.map +0 -1
  337. package/dist/node/nodeCryptoProvider/primitives/index.js.map +0 -1
  338. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.encryption.d.ts.map +0 -1
  339. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.encryption.js.map +0 -1
  340. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.hash.d.ts.map +0 -1
  341. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.hash.js.map +0 -1
  342. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.random.d.ts.map +0 -1
  343. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.random.js.map +0 -1
  344. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.signing.d.ts.map +0 -1
  345. package/dist/node/nodeCryptoProvider/primitives/nodeCryptoProvider.signing.js.map +0 -1
  346. package/dist/node/signing/index.d.ts.map +0 -1
  347. package/dist/node/signing/index.js.map +0 -1
  348. package/dist/node/signing/signing.conversion.d.ts.map +0 -1
  349. package/dist/node/signing/signing.conversion.js.map +0 -1
  350. package/dist/node/signing/signing.core.d.ts.map +0 -1
  351. package/dist/node/signing/signing.core.js.map +0 -1
  352. package/dist/node/signing/signing.utils.d.ts.map +0 -1
  353. package/dist/node/signing/signing.utils.js.map +0 -1
@@ -1,45 +1,104 @@
1
- import { pbkdf2, scrypt, randomBytes, timingSafeEqual } from "node:crypto";
2
- import { toBytes, toBase64Url, fromBase64Url, } from "../nodeCryptoProvider.helper.js";
3
- import { cryptoKeyDerivationError } from "@zudojs/errors";
4
- export async function deriveKey(options) {
1
+ import { isPbkdf2Digest } from "../../../cryptoProvider/cryptoProvider.type.js";
2
+ import { pbkdf2, scrypt } from "node:crypto";
3
+ import { toBytes } from "../nodeCryptoProvider.helper.js";
4
+ import { keyDerivationError } from "../../../cryptoErrors/cryptoErrors.helper.js";
5
+ /** Hard floors applied at the provider boundary. */
6
+ const PROVIDER_MIN_SALT_BYTES = 16;
7
+ const PROVIDER_MIN_KEY_BYTES = 16;
8
+ const PROVIDER_MIN_PBKDF2_ITERATIONS = 1_000;
9
+ const DEFAULT_PBKDF2_ITERATIONS = 600_000;
10
+ const DEFAULT_SCRYPT_COST = 16_384;
11
+ const DEFAULT_SCRYPT_BLOCK_SIZE = 8;
12
+ const DEFAULT_SCRYPT_PARALLELISM = 1;
13
+ const NODE_DEFAULT_MAXMEM = 32 * 1024 * 1024;
14
+ /**
15
+ * Computes a memory bound for scrypt from its parameters.
16
+ *
17
+ * OpenSSL requires roughly `128 * N * r` bytes plus `128 * r * p`; we
18
+ * double that for margin and never go below Node's own 32 MiB default.
19
+ */
20
+ export function defaultScryptMaxMemory(N, r, p) {
21
+ return Math.max(NODE_DEFAULT_MAXMEM, 2 * (128 * N * r + 128 * r * p));
22
+ }
23
+ function validateCommon(options, algorithm) {
5
24
  const password = toBytes(options.password);
6
25
  const salt = options.salt;
26
+ const keyLength = options.keyLength ?? 32;
27
+ if (!(salt instanceof Uint8Array) || salt.byteLength < PROVIDER_MIN_SALT_BYTES) {
28
+ throw keyDerivationError(`Salt must be at least ${PROVIDER_MIN_SALT_BYTES} bytes.`, algorithm);
29
+ }
30
+ if (!Number.isInteger(keyLength) || keyLength < PROVIDER_MIN_KEY_BYTES) {
31
+ throw keyDerivationError(`keyLength must be an integer of at least ${PROVIDER_MIN_KEY_BYTES}.`, algorithm);
32
+ }
33
+ return { password, salt, keyLength };
34
+ }
35
+ export async function deriveKey(options) {
7
36
  switch (options.algorithm) {
8
37
  case "pbkdf2": {
38
+ const { password, salt, keyLength } = validateCommon(options, "pbkdf2");
39
+ const iterations = options.iterations ?? DEFAULT_PBKDF2_ITERATIONS;
40
+ const digest = options.digest ?? "sha256";
41
+ if (!Number.isInteger(iterations) ||
42
+ iterations < PROVIDER_MIN_PBKDF2_ITERATIONS) {
43
+ throw keyDerivationError(`PBKDF2 iterations must be an integer of at least ${PROVIDER_MIN_PBKDF2_ITERATIONS}.`, "pbkdf2");
44
+ }
45
+ if (!isPbkdf2Digest(digest)) {
46
+ throw keyDerivationError(`Unsupported PBKDF2 digest: ${String(digest)}.`, "pbkdf2");
47
+ }
9
48
  return new Promise((resolve, reject) => {
10
- const keyLength = options.keyLength ?? 32;
11
- pbkdf2(Buffer.from(password), Buffer.from(salt), options.iterations ?? 100_000, keyLength, "sha256", (err, derived) => {
12
- if (err) {
13
- reject(cryptoKeyDerivationError("Key derivation failed.", "pbkdf2"));
14
- }
15
- else {
16
- resolve(new Uint8Array(derived));
17
- }
18
- });
49
+ try {
50
+ pbkdf2(Buffer.from(password), Buffer.from(salt), iterations, keyLength, digest, (err, derived) => {
51
+ if (err) {
52
+ reject(keyDerivationError("Key derivation failed.", "pbkdf2", err));
53
+ }
54
+ else {
55
+ resolve(new Uint8Array(derived));
56
+ }
57
+ });
58
+ }
59
+ catch (error) {
60
+ reject(keyDerivationError("Key derivation failed.", "pbkdf2", error));
61
+ }
19
62
  });
20
63
  }
21
64
  case "scrypt": {
65
+ const { password, salt, keyLength } = validateCommon(options, "scrypt");
66
+ const N = options.memoryCost ?? DEFAULT_SCRYPT_COST;
67
+ const r = options.blockSize ?? DEFAULT_SCRYPT_BLOCK_SIZE;
68
+ const p = options.parallelism ?? DEFAULT_SCRYPT_PARALLELISM;
69
+ if (!Number.isInteger(N) || N < 2 || (N & (N - 1)) !== 0) {
70
+ throw keyDerivationError("scrypt cost must be a power of two greater than or equal to 2.", "scrypt");
71
+ }
72
+ if (!Number.isInteger(r) || r <= 0) {
73
+ throw keyDerivationError("scrypt blockSize must be a positive integer.", "scrypt");
74
+ }
75
+ if (!Number.isInteger(p) || p <= 0) {
76
+ throw keyDerivationError("scrypt parallelism must be a positive integer.", "scrypt");
77
+ }
78
+ const maxmem = options.maxMemory ?? defaultScryptMaxMemory(N, r, p);
79
+ if (!Number.isInteger(maxmem) || maxmem <= 0) {
80
+ throw keyDerivationError("scrypt maxMemory must be a positive integer.", "scrypt");
81
+ }
22
82
  return new Promise((resolve, reject) => {
23
- const keyLength = options.keyLength ?? 32;
24
- scrypt(Buffer.from(password), Buffer.from(salt), keyLength, {
25
- N: options.memoryCost ?? 16384,
26
- r: 8,
27
- p: options.parallelism ?? 1,
28
- }, (err, derived) => {
29
- if (err) {
30
- reject(cryptoKeyDerivationError("Key derivation failed.", "scrypt"));
31
- }
32
- else {
33
- resolve(new Uint8Array(derived));
34
- }
35
- });
83
+ try {
84
+ scrypt(Buffer.from(password), Buffer.from(salt), keyLength, { N, r, p, maxmem }, (err, derived) => {
85
+ if (err) {
86
+ reject(keyDerivationError("Key derivation failed.", "scrypt", err));
87
+ }
88
+ else {
89
+ resolve(new Uint8Array(derived));
90
+ }
91
+ });
92
+ }
93
+ catch (error) {
94
+ reject(keyDerivationError("Key derivation failed.", "scrypt", error));
95
+ }
36
96
  });
37
97
  }
38
- case "argon2id": {
39
- throw new TypeError("Argon2id requires the argon2 package.");
40
- }
41
98
  default:
42
- throw new TypeError(`Unsupported key derivation algorithm: ${options.algorithm}.`);
99
+ throw keyDerivationError(`Unsupported key derivation algorithm: ${String(options.algorithm)}.`, typeof options.algorithm === "string"
100
+ ? String(options.algorithm)
101
+ : undefined);
43
102
  }
44
103
  }
45
104
  //# sourceMappingURL=nodeCryptoProvider.derivation.js.map
@@ -1,12 +1,19 @@
1
- import type { CryptoInput, KeyDerivationAlgorithm } from "../../../cryptoProvider/index.js";
2
- export declare function hashPassword(password: CryptoInput, options?: {
3
- algorithm?: KeyDerivationAlgorithm;
4
- memoryCost?: number;
5
- timeCost?: number;
6
- blockSize?: number;
7
- parallelism?: number;
8
- keyBytes?: number;
9
- salt?: Uint8Array;
10
- }): Promise<string>;
1
+ import type { CryptoInput, PasswordHashProviderOptions } from "../../../cryptoProvider/index.js";
2
+ /**
3
+ * Hashes a password with scrypt (default) or PBKDF2 and returns the
4
+ * self-describing, versioned encoding produced by `encodePasswordHash`.
5
+ *
6
+ * The encoded string is validated against `PASSWORD_HASH.LIMITS`, so the
7
+ * provider refuses insecure parameters (short salts, tiny work factors)
8
+ * instead of producing a hash that can never be verified.
9
+ */
10
+ export declare function hashPassword(password: CryptoInput, options?: PasswordHashProviderOptions): Promise<string>;
11
+ /**
12
+ * Verifies a password against an encoded hash.
13
+ *
14
+ * Returns false for any malformed, foreign or out-of-bounds hash string
15
+ * instead of throwing, so login paths fail closed. The hash is decoded
16
+ * and validated before any derivation work is done.
17
+ */
11
18
  export declare function verifyPassword(password: CryptoInput, hash: string): Promise<boolean>;
12
19
  //# sourceMappingURL=nodeCryptoProvider.password.d.ts.map
@@ -1,94 +1,134 @@
1
- import { randomBytes, pbkdf2, scrypt, timingSafeEqual } from "node:crypto";
2
- import { toBytes, toBase64Url, fromBase64Url, } from "../nodeCryptoProvider.helper.js";
3
- import { PASSWORD_FORMAT_VERSION } from "../../../cryptoPassword/cryptoPassword.codec.js";
4
- import { decodePasswordHash } from "../../../cryptoPassword/cryptoPassword.codec.js";
1
+ import { randomBytes } from "node:crypto";
2
+ import { toBytes } from "../nodeCryptoProvider.helper.js";
3
+ import { timingSafeEqual } from "../../../compare/compare.helper.js";
4
+ import { CryptoAlgorithm } from "../../../cryptoConstants/cryptoConstants.type.js";
5
+ import { PASSWORD_HASH } from "../../../cryptoConstants/cryptoConstants.security.js";
6
+ import { PASSWORD_FORMAT_VERSION, decodePasswordHash, encodePasswordHash, pbkdf2PasswordAlgorithm, } from "../../../cryptoPassword/cryptoPassword.codec.js";
7
+ import { deriveKey } from "./nodeCryptoProvider.derivation.js";
8
+ import { keyDerivationError } from "../../../cryptoErrors/cryptoErrors.helper.js";
9
+ /**
10
+ * Hashes a password with scrypt (default) or PBKDF2 and returns the
11
+ * self-describing, versioned encoding produced by `encodePasswordHash`.
12
+ *
13
+ * The encoded string is validated against `PASSWORD_HASH.LIMITS`, so the
14
+ * provider refuses insecure parameters (short salts, tiny work factors)
15
+ * instead of producing a hash that can never be verified.
16
+ */
5
17
  export async function hashPassword(password, options) {
6
18
  const algorithm = options?.algorithm ?? "scrypt";
7
- const salt = options?.salt ?? randomBytes(16);
8
- const blockSize = options?.blockSize ?? 8;
9
- const keyBytes = options?.keyBytes ?? 32;
10
- let hash;
19
+ const salt = options?.salt ?? new Uint8Array(randomBytes(PASSWORD_HASH.SALT_BYTES));
20
+ const keyBytes = options?.keyBytes ?? PASSWORD_HASH.KEY_BYTES;
21
+ const passwordBytes = toBytes(password);
11
22
  switch (algorithm) {
12
23
  case "scrypt": {
13
- const passwordBytes = toBytes(password);
14
- hash = await new Promise((resolve, reject) => {
15
- scrypt(passwordBytes, salt, keyBytes, {
16
- N: options?.memoryCost ?? 16384,
17
- r: blockSize,
18
- p: options?.parallelism ?? 1,
19
- }, (err, derived) => {
20
- if (err) {
21
- reject(err);
22
- }
23
- else {
24
- resolve(new Uint8Array(derived));
25
- }
26
- });
24
+ const cost = options?.memoryCost ?? PASSWORD_HASH.SCRYPT.COST;
25
+ const blockSize = options?.blockSize ?? PASSWORD_HASH.SCRYPT.BLOCK_SIZE;
26
+ const parallelization = options?.parallelism ?? PASSWORD_HASH.SCRYPT.PARALLELIZATION;
27
+ // Validate before deriving so invalid parameters fail fast.
28
+ const placeholder = new Uint8Array(keyBytes);
29
+ encodePasswordHash({
30
+ version: PASSWORD_FORMAT_VERSION,
31
+ algorithm: CryptoAlgorithm.SCRYPT,
32
+ salt,
33
+ hash: placeholder,
34
+ cost,
35
+ blockSize,
36
+ parallelization,
37
+ });
38
+ const hash = await deriveKey({
39
+ password: passwordBytes,
40
+ salt,
41
+ algorithm: "scrypt",
42
+ keyLength: keyBytes,
43
+ memoryCost: cost,
44
+ blockSize,
45
+ parallelism: parallelization,
46
+ });
47
+ return encodePasswordHash({
48
+ version: PASSWORD_FORMAT_VERSION,
49
+ algorithm: CryptoAlgorithm.SCRYPT,
50
+ salt,
51
+ hash,
52
+ cost,
53
+ blockSize,
54
+ parallelization,
27
55
  });
28
- break;
29
- }
30
- case "argon2id": {
31
- throw new TypeError("Argon2id requires the argon2 package.");
32
56
  }
33
57
  case "pbkdf2": {
34
- const passwordBytes = toBytes(password);
35
- hash = await new Promise((resolve, reject) => {
36
- pbkdf2(passwordBytes, salt, options?.timeCost ?? 100_000, keyBytes, "sha256", (err, derived) => {
37
- if (err) {
38
- reject(err);
39
- }
40
- else {
41
- resolve(new Uint8Array(derived));
42
- }
43
- });
58
+ const iterations = options?.timeCost ?? PASSWORD_HASH.PBKDF2.ITERATIONS;
59
+ const digest = options?.digest ?? "sha256";
60
+ const label = pbkdf2PasswordAlgorithm(digest);
61
+ const placeholder = new Uint8Array(keyBytes);
62
+ encodePasswordHash({
63
+ version: PASSWORD_FORMAT_VERSION,
64
+ algorithm: label,
65
+ digest,
66
+ salt,
67
+ hash: placeholder,
68
+ iterations,
69
+ });
70
+ const hash = await deriveKey({
71
+ password: passwordBytes,
72
+ salt,
73
+ algorithm: "pbkdf2",
74
+ keyLength: keyBytes,
75
+ iterations,
76
+ digest,
77
+ });
78
+ return encodePasswordHash({
79
+ version: PASSWORD_FORMAT_VERSION,
80
+ algorithm: label,
81
+ digest,
82
+ salt,
83
+ hash,
84
+ iterations,
44
85
  });
45
- break;
46
86
  }
47
87
  default:
48
- throw new TypeError(`Unsupported password algorithm: ${algorithm}.`);
88
+ throw keyDerivationError(`Unsupported password algorithm: ${String(algorithm)}.`, typeof algorithm === "string" ? algorithm : undefined);
49
89
  }
50
- const saltB64 = toBase64Url(salt);
51
- const hashB64 = toBase64Url(hash);
52
- return [
53
- PASSWORD_FORMAT_VERSION,
54
- algorithm,
55
- options?.memoryCost ?? 16384,
56
- blockSize,
57
- options?.parallelism ?? 1,
58
- `${saltB64}.${hashB64}`,
59
- ].join("$");
60
90
  }
91
+ /**
92
+ * Verifies a password against an encoded hash.
93
+ *
94
+ * Returns false for any malformed, foreign or out-of-bounds hash string
95
+ * instead of throwing, so login paths fail closed. The hash is decoded
96
+ * and validated before any derivation work is done.
97
+ */
61
98
  export async function verifyPassword(password, hash) {
62
- const parts = hash.split("$");
63
- if (parts.length !== 6 || parts[0] !== "v1") {
99
+ if (typeof hash !== "string") {
64
100
  return false;
65
101
  }
66
- const [version, algorithm, costPart, blockSizePart, parallelizationPart, payload,] = parts;
67
- if (version !== "v1" || !payload) {
68
- return false;
102
+ let decoded;
103
+ try {
104
+ decoded = decodePasswordHash(hash);
69
105
  }
70
- const payloadParts = payload.split(".");
71
- if (payloadParts.length !== 2) {
106
+ catch {
72
107
  return false;
73
108
  }
74
- const [saltB64] = payloadParts;
75
- if (!saltB64) {
76
- return false;
109
+ const passwordBytes = toBytes(password);
110
+ let expected;
111
+ if (decoded.algorithm === CryptoAlgorithm.SCRYPT) {
112
+ expected = await deriveKey({
113
+ password: passwordBytes,
114
+ salt: decoded.salt,
115
+ algorithm: "scrypt",
116
+ keyLength: decoded.hash.byteLength,
117
+ memoryCost: decoded.cost,
118
+ blockSize: decoded.blockSize,
119
+ parallelism: decoded.parallelization,
120
+ });
77
121
  }
78
- const salt = fromBase64Url(saltB64);
79
- const computed = await hashPassword(password, {
80
- algorithm: algorithm,
81
- memoryCost: Number(costPart),
82
- blockSize: Number(blockSizePart),
83
- parallelism: Number(parallelizationPart),
84
- salt,
85
- });
86
- const computedParts = computed.split("$");
87
- if (computedParts.length !== 6) {
88
- return false;
122
+ else {
123
+ expected = await deriveKey({
124
+ password: passwordBytes,
125
+ salt: decoded.salt,
126
+ algorithm: "pbkdf2",
127
+ keyLength: decoded.hash.byteLength,
128
+ iterations: decoded.iterations,
129
+ digest: decoded.digest,
130
+ });
89
131
  }
90
- const expectedHash = fromBase64Url(computedParts[5].split(".")[1]);
91
- const decoded = decodePasswordHash(hash);
92
- return timingSafeEqual(decoded.hash, expectedHash);
132
+ return timingSafeEqual(decoded.hash, expected);
93
133
  }
94
134
  //# sourceMappingURL=nodeCryptoProvider.password.js.map
@@ -1,13 +1,4 @@
1
- import type { CryptoInput, EncryptedData } from "../../../cryptoProvider/index.js";
2
- export declare function encrypt(options: {
3
- key: CryptoInput;
4
- plaintext: CryptoInput;
5
- associatedData?: CryptoInput;
6
- nonce?: Uint8Array;
7
- }): Promise<EncryptedData>;
8
- export declare function decrypt(options: {
9
- key: CryptoInput;
10
- encrypted: EncryptedData;
11
- associatedData?: CryptoInput;
12
- }): Promise<Uint8Array>;
1
+ import type { EncryptedData, EncryptOptions, DecryptOptions } from "../../../cryptoProvider/index.js";
2
+ export declare function encrypt(options: EncryptOptions): Promise<EncryptedData>;
3
+ export declare function decrypt(options: DecryptOptions): Promise<Uint8Array>;
13
4
  //# sourceMappingURL=nodeCryptoProvider.encryption.d.ts.map
@@ -1,35 +1,84 @@
1
1
  import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
2
+ import { CryptoOperation } from "@zudojs/errors";
2
3
  import { toBytes } from "../nodeCryptoProvider.helper.js";
4
+ import { AES_GCM } from "../../../cryptoConstants/cryptoConstants.type.js";
5
+ import { cipherError } from "../../../cryptoErrors/cryptoErrors.helper.js";
6
+ const ALGORITHM = "aes-256-gcm";
7
+ /**
8
+ * Validates the caller-controlled inputs to AES-256-GCM before they reach
9
+ * OpenSSL, so that the error surface is uniform and short tags / odd IVs
10
+ * are never accepted.
11
+ */
12
+ function assertKey(key, operation) {
13
+ if (key.byteLength !== AES_GCM.KEY_BYTES) {
14
+ throw cipherError(`AES-256-GCM key must be ${AES_GCM.KEY_BYTES} bytes.`, operation, ALGORITHM);
15
+ }
16
+ }
17
+ function assertNonce(nonce, operation) {
18
+ if (!(nonce instanceof Uint8Array) || nonce.byteLength !== AES_GCM.IV_BYTES) {
19
+ throw cipherError(`AES-256-GCM nonce must be ${AES_GCM.IV_BYTES} bytes.`, operation, ALGORITHM);
20
+ }
21
+ }
22
+ function assertTag(tag) {
23
+ if (!(tag instanceof Uint8Array) ||
24
+ tag.byteLength !== AES_GCM.AUTH_TAG_BYTES) {
25
+ throw cipherError(`AES-256-GCM authentication tag must be ${AES_GCM.AUTH_TAG_BYTES} bytes.`, CryptoOperation.DECRYPT, ALGORITHM);
26
+ }
27
+ }
3
28
  export async function encrypt(options) {
4
29
  const key = toBytes(options.key);
5
30
  const plaintext = toBytes(options.plaintext);
6
- const algorithm = "aes-256-gcm";
7
- const nonce = options.nonce ?? new Uint8Array(randomBytes(12));
8
- const cipher = createCipheriv("aes-256-gcm", key, nonce);
9
- if (options.associatedData) {
10
- cipher.setAAD(toBytes(options.associatedData));
11
- }
12
- const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
13
- const tag = cipher.getAuthTag();
14
- return Object.freeze({
15
- algorithm,
16
- ciphertext: new Uint8Array(ciphertext),
17
- nonce,
18
- tag: new Uint8Array(tag),
19
- });
31
+ const nonce = options.nonce ?? new Uint8Array(randomBytes(AES_GCM.IV_BYTES));
32
+ assertKey(key, CryptoOperation.ENCRYPT);
33
+ assertNonce(nonce, CryptoOperation.ENCRYPT);
34
+ try {
35
+ const cipher = createCipheriv(ALGORITHM, key, nonce, {
36
+ authTagLength: AES_GCM.AUTH_TAG_BYTES,
37
+ });
38
+ if (options.associatedData !== undefined) {
39
+ cipher.setAAD(toBytes(options.associatedData));
40
+ }
41
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
42
+ const tag = cipher.getAuthTag();
43
+ return Object.freeze({
44
+ algorithm: ALGORITHM,
45
+ ciphertext: new Uint8Array(ciphertext),
46
+ nonce: new Uint8Array(nonce),
47
+ tag: new Uint8Array(tag),
48
+ });
49
+ }
50
+ catch (error) {
51
+ throw cipherError("Encryption failed.", CryptoOperation.ENCRYPT, ALGORITHM, error);
52
+ }
20
53
  }
21
54
  export async function decrypt(options) {
22
55
  const key = toBytes(options.key);
23
- const { ciphertext, nonce, tag } = options.encrypted;
24
- const decipher = createDecipheriv(options.encrypted.algorithm, key, nonce);
25
- if (options.associatedData) {
26
- decipher.setAAD(toBytes(options.associatedData));
27
- }
28
- decipher.setAuthTag(tag);
29
- const decrypted = Buffer.concat([
30
- decipher.update(ciphertext),
31
- decipher.final(),
32
- ]);
33
- return new Uint8Array(decrypted);
56
+ const { ciphertext, nonce, tag, algorithm } = options.encrypted;
57
+ if (algorithm !== ALGORITHM) {
58
+ throw cipherError(`Unsupported encryption algorithm: ${String(algorithm)}.`, CryptoOperation.DECRYPT, typeof algorithm === "string" ? algorithm : undefined);
59
+ }
60
+ assertKey(key, CryptoOperation.DECRYPT);
61
+ assertNonce(nonce, CryptoOperation.DECRYPT);
62
+ assertTag(tag);
63
+ if (!(ciphertext instanceof Uint8Array)) {
64
+ throw cipherError("Ciphertext must be a Uint8Array.", CryptoOperation.DECRYPT, ALGORITHM);
65
+ }
66
+ try {
67
+ const decipher = createDecipheriv(ALGORITHM, key, nonce, {
68
+ authTagLength: AES_GCM.AUTH_TAG_BYTES,
69
+ });
70
+ if (options.associatedData !== undefined) {
71
+ decipher.setAAD(toBytes(options.associatedData));
72
+ }
73
+ decipher.setAuthTag(tag);
74
+ const decrypted = Buffer.concat([
75
+ decipher.update(ciphertext),
76
+ decipher.final(),
77
+ ]);
78
+ return new Uint8Array(decrypted);
79
+ }
80
+ catch (error) {
81
+ throw cipherError("Decryption failed.", CryptoOperation.DECRYPT, ALGORITHM, error);
82
+ }
34
83
  }
35
84
  //# sourceMappingURL=nodeCryptoProvider.encryption.js.map
@@ -1,15 +1,20 @@
1
1
  import { createHash, createHmac } from "node:crypto";
2
2
  import { toBytes, nodeHashAlgorithm } from "../nodeCryptoProvider.helper.js";
3
3
  export async function hash(algorithm, data) {
4
+ const digestName = nodeHashAlgorithm(algorithm);
4
5
  const normalized = toBytes(data);
5
- const hasher = createHash(nodeHashAlgorithm(algorithm));
6
+ const hasher = createHash(digestName);
6
7
  hasher.update(normalized);
7
8
  return new Uint8Array(hasher.digest());
8
9
  }
9
10
  export async function hmac(algorithm, key, data) {
11
+ const digestName = nodeHashAlgorithm(algorithm);
10
12
  const normalizedKey = toBytes(key);
13
+ if (normalizedKey.byteLength === 0) {
14
+ throw new TypeError("HMAC key must not be empty.");
15
+ }
11
16
  const normalizedData = toBytes(data);
12
- const h = createHmac(nodeHashAlgorithm(algorithm), normalizedKey);
17
+ const h = createHmac(digestName, normalizedKey);
13
18
  h.update(normalizedData);
14
19
  return new Uint8Array(h.digest());
15
20
  }
@@ -1,4 +1,10 @@
1
1
  export declare function randomBytesImpl(length: number): Promise<Uint8Array>;
2
+ /**
3
+ * Returns a uniformly distributed integer in `[min, max)`.
4
+ *
5
+ * Delegates to `node:crypto.randomInt`, which is unbiased for ranges up
6
+ * to 2^48. A range of exactly one value returns `min`.
7
+ */
2
8
  export declare function randomIntImpl(min: number, max: number): Promise<number>;
3
9
  export declare function randomUUIDImpl(): Promise<string>;
4
10
  //# sourceMappingURL=nodeCryptoProvider.random.d.ts.map
@@ -1,39 +1,39 @@
1
- import { randomBytes } from "node:crypto";
1
+ import { randomBytes, randomInt } from "node:crypto";
2
+ /** Largest range accepted by `node:crypto.randomInt`. */
3
+ const MAX_RANGE = 2 ** 48;
2
4
  export async function randomBytesImpl(length) {
3
5
  if (!Number.isInteger(length) || length <= 0) {
4
6
  throw new TypeError("randomBytes length must be a positive integer.");
5
7
  }
6
8
  return new Uint8Array(randomBytes(length));
7
9
  }
10
+ /**
11
+ * Returns a uniformly distributed integer in `[min, max)`.
12
+ *
13
+ * Delegates to `node:crypto.randomInt`, which is unbiased for ranges up
14
+ * to 2^48. A range of exactly one value returns `min`.
15
+ */
8
16
  export async function randomIntImpl(min, max) {
9
- if (!Number.isInteger(min) || !Number.isInteger(max)) {
10
- throw new TypeError("randomInt bounds must be integers.");
17
+ if (!Number.isSafeInteger(min) || !Number.isSafeInteger(max)) {
18
+ throw new TypeError("randomInt bounds must be safe integers.");
11
19
  }
12
20
  if (max <= min) {
13
21
  throw new RangeError("max must be greater than min.");
14
22
  }
15
23
  const range = max - min;
16
- const bytesNeeded = Math.ceil(Math.log2(range) / 8);
17
- const limit = Math.floor(256 ** bytesNeeded / range) * range;
18
- while (true) {
19
- const bytes = await randomBytesImpl(bytesNeeded);
20
- let value = 0;
21
- for (let i = 0; i < bytesNeeded; i += 1) {
22
- value = (value << 8) | bytes[i];
23
- }
24
- value = value >>> 0;
25
- if (value < limit) {
26
- return min + (value % range);
27
- }
24
+ if (range > MAX_RANGE) {
25
+ throw new RangeError(`randomInt range must not exceed 2^48.`);
28
26
  }
27
+ if (range === 1) {
28
+ return min;
29
+ }
30
+ return randomInt(min, max);
29
31
  }
30
32
  export async function randomUUIDImpl() {
31
33
  const bytes = await randomBytesImpl(16);
32
34
  bytes[6] = (bytes[6] & 0x0f) | 0x40;
33
35
  bytes[8] = (bytes[8] & 0x3f) | 0x80;
34
- const hex = Array.from(bytes)
35
- .map((b) => b.toString(16).padStart(2, "0"))
36
- .join("");
36
+ const hex = Buffer.from(bytes).toString("hex");
37
37
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
38
38
  }
39
39
  //# sourceMappingURL=nodeCryptoProvider.random.js.map
@@ -1,13 +1,11 @@
1
- import type { SignatureAlgorithm, CryptoInput } from "../../../cryptoProvider/index.js";
2
- export declare function sign(options: {
3
- key: CryptoInput;
4
- data: CryptoInput;
5
- algorithm?: SignatureAlgorithm;
6
- }): Promise<Uint8Array>;
7
- export declare function verify(options: {
8
- key: CryptoInput;
9
- data: CryptoInput;
10
- signature: Uint8Array;
11
- algorithm?: SignatureAlgorithm;
12
- }): Promise<boolean>;
1
+ import type { SignOptions, VerifyOptions } from "../../../cryptoProvider/index.js";
2
+ export declare function sign(options: SignOptions): Promise<Uint8Array>;
3
+ /**
4
+ * Verifies a signature.
5
+ *
6
+ * Returns false for a malformed key, malformed signature or mismatching
7
+ * data. Throws only for programmer errors (unsupported algorithm, key
8
+ * type that cannot be used with the algorithm).
9
+ */
10
+ export declare function verify(options: VerifyOptions): Promise<boolean>;
13
11
  //# sourceMappingURL=nodeCryptoProvider.signing.d.ts.map