xypriss 1.0.1 → 1.1.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 (570) hide show
  1. package/README.md +187 -84
  2. package/dist/cjs/ServerFactory.js +1 -1
  3. package/dist/cjs/cache/SecureCacheAdapter.js +2 -2
  4. package/dist/cjs/cluster/cluster-manager.js +1 -1
  5. package/dist/cjs/cluster/index.js +30 -30
  6. package/dist/cjs/cluster/modules/AutoScaler.js +2 -2
  7. package/dist/cjs/cluster/modules/ClusterPersistenceManager.js +3 -3
  8. package/dist/cjs/cluster/modules/HealthMonitor.js +2 -2
  9. package/dist/cjs/cluster/modules/IPCManager.js +2 -2
  10. package/dist/cjs/cluster/modules/MetricsCollector.js +1 -1
  11. package/dist/cjs/cluster/modules/WorkerManager.js +2 -2
  12. package/dist/cjs/encryption/EncryptionService.js +12 -12
  13. package/dist/cjs/encryption/EncryptionService.js.map +1 -1
  14. package/dist/cjs/index.js +1 -1
  15. package/dist/cjs/middleware/safe-json-middleware.js +1 -1
  16. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +727 -0
  17. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -0
  18. package/dist/cjs/mods/security/src/algorithms/registry.js +83 -0
  19. package/dist/cjs/mods/security/src/algorithms/registry.js.map +1 -0
  20. package/dist/cjs/mods/security/src/components/attestation.js +1065 -0
  21. package/dist/cjs/mods/security/src/components/attestation.js.map +1 -0
  22. package/dist/cjs/mods/security/src/components/cache/FastLRU.js +323 -0
  23. package/dist/cjs/mods/security/src/components/cache/FastLRU.js.map +1 -0
  24. package/dist/cjs/mods/security/src/components/cache/UFSIMC.js +1131 -0
  25. package/dist/cjs/mods/security/src/components/cache/UFSIMC.js.map +1 -0
  26. package/dist/cjs/mods/security/src/components/cache/cacheSys.js +624 -0
  27. package/dist/cjs/mods/security/src/components/cache/cacheSys.js.map +1 -0
  28. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +136 -0
  29. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -0
  30. package/dist/cjs/mods/security/src/components/cache/config/cache.config.js +39 -0
  31. package/dist/cjs/mods/security/src/components/cache/config/cache.config.js.map +1 -0
  32. package/dist/cjs/mods/security/src/components/cache/index.js +459 -0
  33. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -0
  34. package/dist/cjs/mods/security/src/components/cache/useCache.js +243 -0
  35. package/dist/cjs/mods/security/src/components/cache/useCache.js.map +1 -0
  36. package/dist/cjs/mods/security/src/components/canary-tokens.js +351 -0
  37. package/dist/cjs/mods/security/src/components/canary-tokens.js.map +1 -0
  38. package/dist/cjs/mods/security/src/components/entropy-augmentation.js +478 -0
  39. package/dist/cjs/mods/security/src/components/entropy-augmentation.js.map +1 -0
  40. package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js +338 -0
  41. package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js.map +1 -0
  42. package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js +536 -0
  43. package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js.map +1 -0
  44. package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js +631 -0
  45. package/dist/cjs/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js.map +1 -0
  46. package/dist/cjs/mods/security/src/components/fortified-function/const/exec.const.js +18 -0
  47. package/dist/cjs/mods/security/src/components/fortified-function/const/exec.const.js.map +1 -0
  48. package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-config.js +356 -0
  49. package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-config.js.map +1 -0
  50. package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-function-core.js +520 -0
  51. package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-function-core.js.map +1 -0
  52. package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-logger.js +246 -0
  53. package/dist/cjs/mods/security/src/components/fortified-function/core/fortified-logger.js.map +1 -0
  54. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/api-manager.js +189 -0
  55. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/api-manager.js.map +1 -0
  56. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/cache-manager.js +107 -0
  57. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/cache-manager.js.map +1 -0
  58. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-context.js +105 -0
  59. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-context.js.map +1 -0
  60. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-engine.js +127 -0
  61. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-engine.js.map +1 -0
  62. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-router.js +93 -0
  63. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/execution-router.js.map +1 -0
  64. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/memory-manager.js +147 -0
  65. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/memory-manager.js.map +1 -0
  66. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/security-manager.js +102 -0
  67. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/security-manager.js.map +1 -0
  68. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/stats-manager.js +159 -0
  69. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/stats-manager.js.map +1 -0
  70. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/timing-manager.js +125 -0
  71. package/dist/cjs/mods/security/src/components/fortified-function/core/mods/timing-manager.js.map +1 -0
  72. package/dist/cjs/mods/security/src/components/fortified-function/engines/analytics-engine.js +370 -0
  73. package/dist/cjs/mods/security/src/components/fortified-function/engines/analytics-engine.js.map +1 -0
  74. package/dist/cjs/mods/security/src/components/fortified-function/engines/execution-engine.js +402 -0
  75. package/dist/cjs/mods/security/src/components/fortified-function/engines/execution-engine.js.map +1 -0
  76. package/dist/cjs/mods/security/src/components/fortified-function/index.js +172 -0
  77. package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -0
  78. package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-monitor.js +240 -0
  79. package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-monitor.js.map +1 -0
  80. package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-timer.js +188 -0
  81. package/dist/cjs/mods/security/src/components/fortified-function/performance/performance-timer.js.map +1 -0
  82. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +253 -0
  83. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -0
  84. package/dist/cjs/mods/security/src/components/fortified-function/serializer/safe-serializer.js +350 -0
  85. package/dist/cjs/mods/security/src/components/fortified-function/serializer/safe-serializer.js.map +1 -0
  86. package/dist/cjs/mods/security/src/components/fortified-function/smart-cache.js +693 -0
  87. package/dist/cjs/mods/security/src/components/fortified-function/smart-cache.js.map +1 -0
  88. package/dist/cjs/mods/security/src/components/fortified-function/types/types.js +16 -0
  89. package/dist/cjs/mods/security/src/components/fortified-function/types/types.js.map +1 -0
  90. package/dist/cjs/mods/security/src/components/fortified-function/utils/utils.js +68 -0
  91. package/dist/cjs/mods/security/src/components/fortified-function/utils/utils.js.map +1 -0
  92. package/dist/cjs/mods/security/src/components/memory-hard.js +922 -0
  93. package/dist/cjs/mods/security/src/components/memory-hard.js.map +1 -0
  94. package/dist/cjs/mods/security/src/components/post-quantum.js +323 -0
  95. package/dist/cjs/mods/security/src/components/post-quantum.js.map +1 -0
  96. package/dist/cjs/mods/security/src/components/runtime-verification.js +645 -0
  97. package/dist/cjs/mods/security/src/components/runtime-verification.js.map +1 -0
  98. package/dist/cjs/mods/security/src/components/secure-array/core/secure-array-core.js +1572 -0
  99. package/dist/cjs/mods/security/src/components/secure-array/core/secure-array-core.js.map +1 -0
  100. package/dist/cjs/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js +330 -0
  101. package/dist/cjs/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js.map +1 -0
  102. package/dist/cjs/mods/security/src/components/secure-array/events/event-manager.js +270 -0
  103. package/dist/cjs/mods/security/src/components/secure-array/events/event-manager.js.map +1 -0
  104. package/dist/cjs/mods/security/src/components/secure-array/index.js +66 -0
  105. package/dist/cjs/mods/security/src/components/secure-array/index.js.map +1 -0
  106. package/dist/cjs/mods/security/src/components/secure-array/metadata/metadata-manager.js +331 -0
  107. package/dist/cjs/mods/security/src/components/secure-array/metadata/metadata-manager.js.map +1 -0
  108. package/dist/cjs/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js +390 -0
  109. package/dist/cjs/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js.map +1 -0
  110. package/dist/cjs/mods/security/src/components/secure-array/types/index.js +87 -0
  111. package/dist/cjs/mods/security/src/components/secure-array/types/index.js.map +1 -0
  112. package/dist/cjs/mods/security/src/components/secure-array/utils/id-generator.js +80 -0
  113. package/dist/cjs/mods/security/src/components/secure-array/utils/id-generator.js.map +1 -0
  114. package/dist/cjs/mods/security/src/components/secure-array/utils/validation.js +275 -0
  115. package/dist/cjs/mods/security/src/components/secure-array/utils/validation.js.map +1 -0
  116. package/dist/cjs/mods/security/src/components/secure-memory.js +906 -0
  117. package/dist/cjs/mods/security/src/components/secure-memory.js.map +1 -0
  118. package/dist/cjs/mods/security/src/components/secure-object/core/secure-object-core.js +1605 -0
  119. package/dist/cjs/mods/security/src/components/secure-object/core/secure-object-core.js.map +1 -0
  120. package/dist/cjs/mods/security/src/components/secure-object/encryption/crypto-handler.js +362 -0
  121. package/dist/cjs/mods/security/src/components/secure-object/encryption/crypto-handler.js.map +1 -0
  122. package/dist/cjs/mods/security/src/components/secure-object/encryption/sensitive-keys.js +206 -0
  123. package/dist/cjs/mods/security/src/components/secure-object/encryption/sensitive-keys.js.map +1 -0
  124. package/dist/cjs/mods/security/src/components/secure-object/events/event-manager.js +197 -0
  125. package/dist/cjs/mods/security/src/components/secure-object/events/event-manager.js.map +1 -0
  126. package/dist/cjs/mods/security/src/components/secure-object/index.js +67 -0
  127. package/dist/cjs/mods/security/src/components/secure-object/index.js.map +1 -0
  128. package/dist/cjs/mods/security/src/components/secure-object/metadata/metadata-manager.js +183 -0
  129. package/dist/cjs/mods/security/src/components/secure-object/metadata/metadata-manager.js.map +1 -0
  130. package/dist/cjs/mods/security/src/components/secure-object/serialization/serialization-handler.js +197 -0
  131. package/dist/cjs/mods/security/src/components/secure-object/serialization/serialization-handler.js.map +1 -0
  132. package/dist/cjs/mods/security/src/components/secure-object/utils/id-generator.js +64 -0
  133. package/dist/cjs/mods/security/src/components/secure-object/utils/id-generator.js.map +1 -0
  134. package/dist/cjs/mods/security/src/components/secure-object/utils/validation.js +239 -0
  135. package/dist/cjs/mods/security/src/components/secure-object/utils/validation.js.map +1 -0
  136. package/dist/cjs/mods/security/src/components/secure-serialization.js +772 -0
  137. package/dist/cjs/mods/security/src/components/secure-serialization.js.map +1 -0
  138. package/dist/cjs/mods/security/src/components/secure-string/advanced/entropy-analyzer.js +308 -0
  139. package/dist/cjs/mods/security/src/components/secure-string/advanced/entropy-analyzer.js.map +1 -0
  140. package/dist/cjs/mods/security/src/components/secure-string/advanced/performance-monitor.js +335 -0
  141. package/dist/cjs/mods/security/src/components/secure-string/advanced/performance-monitor.js.map +1 -0
  142. package/dist/cjs/mods/security/src/components/secure-string/advanced/quantum-safe.js +245 -0
  143. package/dist/cjs/mods/security/src/components/secure-string/advanced/quantum-safe.js.map +1 -0
  144. package/dist/cjs/mods/security/src/components/secure-string/buffer/buffer-manager.js +205 -0
  145. package/dist/cjs/mods/security/src/components/secure-string/buffer/buffer-manager.js.map +1 -0
  146. package/dist/cjs/mods/security/src/components/secure-string/core/secure-string-core.js +788 -0
  147. package/dist/cjs/mods/security/src/components/secure-string/core/secure-string-core.js.map +1 -0
  148. package/dist/cjs/mods/security/src/components/secure-string/crypto/crypto-operations.js +319 -0
  149. package/dist/cjs/mods/security/src/components/secure-string/crypto/crypto-operations.js.map +1 -0
  150. package/dist/cjs/mods/security/src/components/secure-string/operations/comparison-operations.js +221 -0
  151. package/dist/cjs/mods/security/src/components/secure-string/operations/comparison-operations.js.map +1 -0
  152. package/dist/cjs/mods/security/src/components/secure-string/operations/string-operations.js +234 -0
  153. package/dist/cjs/mods/security/src/components/secure-string/operations/string-operations.js.map +1 -0
  154. package/dist/cjs/mods/security/src/components/secure-string/types/index.js +41 -0
  155. package/dist/cjs/mods/security/src/components/secure-string/types/index.js.map +1 -0
  156. package/dist/cjs/mods/security/src/components/secure-string/validation/string-validator.js +334 -0
  157. package/dist/cjs/mods/security/src/components/secure-string/validation/string-validator.js.map +1 -0
  158. package/dist/cjs/mods/security/src/components/side-channel.js +146 -0
  159. package/dist/cjs/mods/security/src/components/side-channel.js.map +1 -0
  160. package/dist/cjs/mods/security/src/components/tamper-evident-logging.js +391 -0
  161. package/dist/cjs/mods/security/src/components/tamper-evident-logging.js.map +1 -0
  162. package/dist/cjs/mods/security/src/const/buffer.const.js +15 -0
  163. package/dist/cjs/mods/security/src/const/buffer.const.js.map +1 -0
  164. package/dist/cjs/mods/security/src/core/crypto.js +722 -0
  165. package/dist/cjs/mods/security/src/core/crypto.js.map +1 -0
  166. package/dist/cjs/mods/security/src/core/hash/hash-advanced.js +388 -0
  167. package/dist/cjs/mods/security/src/core/hash/hash-advanced.js.map +1 -0
  168. package/dist/cjs/mods/security/src/core/hash/hash-core.js +376 -0
  169. package/dist/cjs/mods/security/src/core/hash/hash-core.js.map +1 -0
  170. package/dist/cjs/mods/security/src/core/hash/hash-entropy.js +307 -0
  171. package/dist/cjs/mods/security/src/core/hash/hash-entropy.js.map +1 -0
  172. package/dist/cjs/mods/security/src/core/hash/hash-security.js +372 -0
  173. package/dist/cjs/mods/security/src/core/hash/hash-security.js.map +1 -0
  174. package/dist/cjs/mods/security/src/core/hash/hash-types.js +16 -0
  175. package/dist/cjs/mods/security/src/core/hash/hash-types.js.map +1 -0
  176. package/dist/cjs/mods/security/src/core/hash/hash-utils.js +328 -0
  177. package/dist/cjs/mods/security/src/core/hash/hash-utils.js.map +1 -0
  178. package/dist/cjs/mods/security/src/core/hash/hash-validator.js +312 -0
  179. package/dist/cjs/mods/security/src/core/hash/hash-validator.js.map +1 -0
  180. package/dist/cjs/mods/security/src/core/hash.js +25 -0
  181. package/dist/cjs/mods/security/src/core/hash.js.map +1 -0
  182. package/dist/cjs/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js +135 -0
  183. package/dist/cjs/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js.map +1 -0
  184. package/dist/cjs/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js +293 -0
  185. package/dist/cjs/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js.map +1 -0
  186. package/dist/cjs/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js +317 -0
  187. package/dist/cjs/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js.map +1 -0
  188. package/dist/cjs/mods/security/src/core/keys/keys-core.js +201 -0
  189. package/dist/cjs/mods/security/src/core/keys/keys-core.js.map +1 -0
  190. package/dist/cjs/mods/security/src/core/keys/keys-logger.js +234 -0
  191. package/dist/cjs/mods/security/src/core/keys/keys-logger.js.map +1 -0
  192. package/dist/cjs/mods/security/src/core/keys/keys-types.js +65 -0
  193. package/dist/cjs/mods/security/src/core/keys/keys-types.js.map +1 -0
  194. package/dist/cjs/mods/security/src/core/keys/keys-utils.js +322 -0
  195. package/dist/cjs/mods/security/src/core/keys/keys-utils.js.map +1 -0
  196. package/dist/cjs/mods/security/src/core/keys.js +136 -0
  197. package/dist/cjs/mods/security/src/core/keys.js.map +1 -0
  198. package/dist/cjs/mods/security/src/core/password/index.js +122 -0
  199. package/dist/cjs/mods/security/src/core/password/index.js.map +1 -0
  200. package/dist/cjs/mods/security/src/core/password/password-algorithms.js +397 -0
  201. package/dist/cjs/mods/security/src/core/password/password-algorithms.js.map +1 -0
  202. package/dist/cjs/mods/security/src/core/password/password-core.js +294 -0
  203. package/dist/cjs/mods/security/src/core/password/password-core.js.map +1 -0
  204. package/dist/cjs/mods/security/src/core/password/password-generator.js +365 -0
  205. package/dist/cjs/mods/security/src/core/password/password-generator.js.map +1 -0
  206. package/dist/cjs/mods/security/src/core/password/password-migration.js +237 -0
  207. package/dist/cjs/mods/security/src/core/password/password-migration.js.map +1 -0
  208. package/dist/cjs/mods/security/src/core/password/password-security.js +534 -0
  209. package/dist/cjs/mods/security/src/core/password/password-security.js.map +1 -0
  210. package/dist/cjs/mods/security/src/core/password/password-types.js +39 -0
  211. package/dist/cjs/mods/security/src/core/password/password-types.js.map +1 -0
  212. package/dist/cjs/mods/security/src/core/password/password-utils.js +651 -0
  213. package/dist/cjs/mods/security/src/core/password/password-utils.js.map +1 -0
  214. package/dist/cjs/mods/security/src/core/password/swlist.js +1122 -0
  215. package/dist/cjs/mods/security/src/core/password/swlist.js.map +1 -0
  216. package/dist/cjs/mods/security/src/core/random/random-core.js +328 -0
  217. package/dist/cjs/mods/security/src/core/random/random-core.js.map +1 -0
  218. package/dist/cjs/mods/security/src/core/random/random-crypto.js +339 -0
  219. package/dist/cjs/mods/security/src/core/random/random-crypto.js.map +1 -0
  220. package/dist/cjs/mods/security/src/core/random/random-entropy.js +388 -0
  221. package/dist/cjs/mods/security/src/core/random/random-entropy.js.map +1 -0
  222. package/dist/cjs/mods/security/src/core/random/random-generators.js +344 -0
  223. package/dist/cjs/mods/security/src/core/random/random-generators.js.map +1 -0
  224. package/dist/cjs/mods/security/src/core/random/random-sources.js +426 -0
  225. package/dist/cjs/mods/security/src/core/random/random-sources.js.map +1 -0
  226. package/dist/cjs/mods/security/src/core/random/random-tokens.js +309 -0
  227. package/dist/cjs/mods/security/src/core/random/random-tokens.js.map +1 -0
  228. package/dist/cjs/mods/security/src/core/random/random-types.js +36 -0
  229. package/dist/cjs/mods/security/src/core/random/random-types.js.map +1 -0
  230. package/dist/cjs/mods/security/src/core/validators.js +200 -0
  231. package/dist/cjs/mods/security/src/core/validators.js.map +1 -0
  232. package/dist/cjs/mods/security/src/helpers/Uint8Array.js +335 -0
  233. package/dist/cjs/mods/security/src/helpers/Uint8Array.js.map +1 -0
  234. package/dist/cjs/mods/security/src/helpers/createEnu.js +27 -0
  235. package/dist/cjs/mods/security/src/helpers/createEnu.js.map +1 -0
  236. package/dist/cjs/mods/security/src/index.js +417 -0
  237. package/dist/cjs/mods/security/src/index.js.map +1 -0
  238. package/dist/cjs/mods/security/src/types/global.js +51 -0
  239. package/dist/cjs/mods/security/src/types/global.js.map +1 -0
  240. package/dist/cjs/mods/security/src/types/secure-mem.type.js +100 -0
  241. package/dist/cjs/mods/security/src/types/secure-mem.type.js.map +1 -0
  242. package/dist/cjs/mods/security/src/types/secure-memory.js +20 -0
  243. package/dist/cjs/mods/security/src/types/secure-memory.js.map +1 -0
  244. package/dist/cjs/mods/security/src/types.js +63 -0
  245. package/dist/cjs/mods/security/src/types.js.map +1 -0
  246. package/dist/cjs/mods/security/src/utils/CryptoAlgorithmUtils.js +71 -0
  247. package/dist/cjs/mods/security/src/utils/CryptoAlgorithmUtils.js.map +1 -0
  248. package/dist/cjs/mods/security/src/utils/constants.js +111 -0
  249. package/dist/cjs/mods/security/src/utils/constants.js.map +1 -0
  250. package/dist/cjs/mods/security/src/utils/dataConverter.js +74 -0
  251. package/dist/cjs/mods/security/src/utils/dataConverter.js.map +1 -0
  252. package/dist/cjs/mods/security/src/utils/encoding.js +290 -0
  253. package/dist/cjs/mods/security/src/utils/encoding.js.map +1 -0
  254. package/dist/cjs/mods/security/src/utils/errorHandler.js +140 -0
  255. package/dist/cjs/mods/security/src/utils/errorHandler.js.map +1 -0
  256. package/dist/cjs/mods/security/src/utils/memory/config-manager.js +282 -0
  257. package/dist/cjs/mods/security/src/utils/memory/config-manager.js.map +1 -0
  258. package/dist/cjs/mods/security/src/utils/memory/event-manager.js +277 -0
  259. package/dist/cjs/mods/security/src/utils/memory/event-manager.js.map +1 -0
  260. package/dist/cjs/mods/security/src/utils/memory/index.js +162 -0
  261. package/dist/cjs/mods/security/src/utils/memory/index.js.map +1 -0
  262. package/dist/cjs/mods/security/src/utils/memory/memory-manager.js +888 -0
  263. package/dist/cjs/mods/security/src/utils/memory/memory-manager.js.map +1 -0
  264. package/dist/cjs/mods/security/src/utils/memory/memory-pool.js +356 -0
  265. package/dist/cjs/mods/security/src/utils/memory/memory-pool.js.map +1 -0
  266. package/dist/cjs/mods/security/src/utils/memory/reference-tracker.js +376 -0
  267. package/dist/cjs/mods/security/src/utils/memory/reference-tracker.js.map +1 -0
  268. package/dist/cjs/mods/security/src/utils/memory/types.js +56 -0
  269. package/dist/cjs/mods/security/src/utils/memory/types.js.map +1 -0
  270. package/dist/cjs/mods/security/src/utils/patterns.js +127 -0
  271. package/dist/cjs/mods/security/src/utils/patterns.js.map +1 -0
  272. package/dist/cjs/mods/security/src/utils/performanceMonitor.js +249 -0
  273. package/dist/cjs/mods/security/src/utils/performanceMonitor.js.map +1 -0
  274. package/dist/cjs/mods/security/src/utils/stats.js +182 -0
  275. package/dist/cjs/mods/security/src/utils/stats.js.map +1 -0
  276. package/dist/cjs/security-middleware.js +15 -15
  277. package/dist/cjs/server/components/fastapi/UltraFastRequestProcessor.js +1 -1
  278. package/dist/cjs/server/components/fastapi/console/ConsoleInterceptor.js +23 -23
  279. package/dist/cjs/server/components/fastapi/middlewares/MiddlewareAPI.js +1 -1
  280. package/dist/cjs/server/optimization/RequestPreCompiler.js +1 -1
  281. package/dist/cjs/server/plugins/PluginRegistry.js +1 -1
  282. package/dist/cjs/server/plugins/core/CachePlugin.js +7 -7
  283. package/dist/cjs/server/plugins/core/PerformancePlugin.js +2 -2
  284. package/dist/cjs/server/plugins/core/SecurityPlugin.js +10 -10
  285. package/dist/cjs/smart-routes.js +1 -1
  286. package/dist/esm/ServerFactory.js +1 -1
  287. package/dist/esm/cache/SecureCacheAdapter.js +2 -2
  288. package/dist/esm/cluster/cluster-manager.js +1 -1
  289. package/dist/esm/cluster/index.js +30 -30
  290. package/dist/esm/cluster/modules/AutoScaler.js +2 -2
  291. package/dist/esm/cluster/modules/ClusterPersistenceManager.js +3 -3
  292. package/dist/esm/cluster/modules/HealthMonitor.js +2 -2
  293. package/dist/esm/cluster/modules/IPCManager.js +2 -2
  294. package/dist/esm/cluster/modules/MetricsCollector.js +1 -1
  295. package/dist/esm/cluster/modules/WorkerManager.js +2 -2
  296. package/dist/esm/encryption/EncryptionService.js +12 -12
  297. package/dist/esm/encryption/EncryptionService.js.map +1 -1
  298. package/dist/esm/index.js +1 -1
  299. package/dist/esm/middleware/safe-json-middleware.js +1 -1
  300. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +705 -0
  301. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -0
  302. package/dist/esm/mods/security/src/algorithms/registry.js +81 -0
  303. package/dist/esm/mods/security/src/algorithms/registry.js.map +1 -0
  304. package/dist/esm/mods/security/src/components/attestation.js +1059 -0
  305. package/dist/esm/mods/security/src/components/attestation.js.map +1 -0
  306. package/dist/esm/mods/security/src/components/cache/FastLRU.js +320 -0
  307. package/dist/esm/mods/security/src/components/cache/FastLRU.js.map +1 -0
  308. package/dist/esm/mods/security/src/components/cache/UFSIMC.js +1109 -0
  309. package/dist/esm/mods/security/src/components/cache/UFSIMC.js.map +1 -0
  310. package/dist/esm/mods/security/src/components/cache/cacheSys.js +622 -0
  311. package/dist/esm/mods/security/src/components/cache/cacheSys.js.map +1 -0
  312. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +111 -0
  313. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -0
  314. package/dist/esm/mods/security/src/components/cache/config/cache.config.js +36 -0
  315. package/dist/esm/mods/security/src/components/cache/config/cache.config.js.map +1 -0
  316. package/dist/esm/mods/security/src/components/cache/index.js +449 -0
  317. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -0
  318. package/dist/esm/mods/security/src/components/cache/useCache.js +240 -0
  319. package/dist/esm/mods/security/src/components/cache/useCache.js.map +1 -0
  320. package/dist/esm/mods/security/src/components/canary-tokens.js +346 -0
  321. package/dist/esm/mods/security/src/components/canary-tokens.js.map +1 -0
  322. package/dist/esm/mods/security/src/components/entropy-augmentation.js +476 -0
  323. package/dist/esm/mods/security/src/components/entropy-augmentation.js.map +1 -0
  324. package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js +336 -0
  325. package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-allocator.js.map +1 -0
  326. package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js +534 -0
  327. package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-cache.js.map +1 -0
  328. package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js +629 -0
  329. package/dist/esm/mods/security/src/components/fortified-function/UFA/ultra-fast-engine.js.map +1 -0
  330. package/dist/esm/mods/security/src/components/fortified-function/const/exec.const.js +11 -0
  331. package/dist/esm/mods/security/src/components/fortified-function/const/exec.const.js.map +1 -0
  332. package/dist/esm/mods/security/src/components/fortified-function/core/fortified-config.js +351 -0
  333. package/dist/esm/mods/security/src/components/fortified-function/core/fortified-config.js.map +1 -0
  334. package/dist/esm/mods/security/src/components/fortified-function/core/fortified-function-core.js +518 -0
  335. package/dist/esm/mods/security/src/components/fortified-function/core/fortified-function-core.js.map +1 -0
  336. package/dist/esm/mods/security/src/components/fortified-function/core/fortified-logger.js +243 -0
  337. package/dist/esm/mods/security/src/components/fortified-function/core/fortified-logger.js.map +1 -0
  338. package/dist/esm/mods/security/src/components/fortified-function/core/mods/api-manager.js +187 -0
  339. package/dist/esm/mods/security/src/components/fortified-function/core/mods/api-manager.js.map +1 -0
  340. package/dist/esm/mods/security/src/components/fortified-function/core/mods/cache-manager.js +105 -0
  341. package/dist/esm/mods/security/src/components/fortified-function/core/mods/cache-manager.js.map +1 -0
  342. package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-context.js +103 -0
  343. package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-context.js.map +1 -0
  344. package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-engine.js +125 -0
  345. package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-engine.js.map +1 -0
  346. package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-router.js +91 -0
  347. package/dist/esm/mods/security/src/components/fortified-function/core/mods/execution-router.js.map +1 -0
  348. package/dist/esm/mods/security/src/components/fortified-function/core/mods/memory-manager.js +145 -0
  349. package/dist/esm/mods/security/src/components/fortified-function/core/mods/memory-manager.js.map +1 -0
  350. package/dist/esm/mods/security/src/components/fortified-function/core/mods/security-manager.js +100 -0
  351. package/dist/esm/mods/security/src/components/fortified-function/core/mods/security-manager.js.map +1 -0
  352. package/dist/esm/mods/security/src/components/fortified-function/core/mods/stats-manager.js +157 -0
  353. package/dist/esm/mods/security/src/components/fortified-function/core/mods/stats-manager.js.map +1 -0
  354. package/dist/esm/mods/security/src/components/fortified-function/core/mods/timing-manager.js +123 -0
  355. package/dist/esm/mods/security/src/components/fortified-function/core/mods/timing-manager.js.map +1 -0
  356. package/dist/esm/mods/security/src/components/fortified-function/engines/analytics-engine.js +368 -0
  357. package/dist/esm/mods/security/src/components/fortified-function/engines/analytics-engine.js.map +1 -0
  358. package/dist/esm/mods/security/src/components/fortified-function/engines/execution-engine.js +400 -0
  359. package/dist/esm/mods/security/src/components/fortified-function/engines/execution-engine.js.map +1 -0
  360. package/dist/esm/mods/security/src/components/fortified-function/index.js +165 -0
  361. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -0
  362. package/dist/esm/mods/security/src/components/fortified-function/performance/performance-monitor.js +238 -0
  363. package/dist/esm/mods/security/src/components/fortified-function/performance/performance-monitor.js.map +1 -0
  364. package/dist/esm/mods/security/src/components/fortified-function/performance/performance-timer.js +186 -0
  365. package/dist/esm/mods/security/src/components/fortified-function/performance/performance-timer.js.map +1 -0
  366. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +251 -0
  367. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -0
  368. package/dist/esm/mods/security/src/components/fortified-function/serializer/safe-serializer.js +344 -0
  369. package/dist/esm/mods/security/src/components/fortified-function/serializer/safe-serializer.js.map +1 -0
  370. package/dist/esm/mods/security/src/components/fortified-function/smart-cache.js +691 -0
  371. package/dist/esm/mods/security/src/components/fortified-function/smart-cache.js.map +1 -0
  372. package/dist/esm/mods/security/src/components/fortified-function/types/types.js +14 -0
  373. package/dist/esm/mods/security/src/components/fortified-function/types/types.js.map +1 -0
  374. package/dist/esm/mods/security/src/components/fortified-function/utils/utils.js +66 -0
  375. package/dist/esm/mods/security/src/components/fortified-function/utils/utils.js.map +1 -0
  376. package/dist/esm/mods/security/src/components/memory-hard.js +919 -0
  377. package/dist/esm/mods/security/src/components/memory-hard.js.map +1 -0
  378. package/dist/esm/mods/security/src/components/post-quantum.js +316 -0
  379. package/dist/esm/mods/security/src/components/post-quantum.js.map +1 -0
  380. package/dist/esm/mods/security/src/components/runtime-verification.js +643 -0
  381. package/dist/esm/mods/security/src/components/runtime-verification.js.map +1 -0
  382. package/dist/esm/mods/security/src/components/secure-array/core/secure-array-core.js +1570 -0
  383. package/dist/esm/mods/security/src/components/secure-array/core/secure-array-core.js.map +1 -0
  384. package/dist/esm/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js +328 -0
  385. package/dist/esm/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js.map +1 -0
  386. package/dist/esm/mods/security/src/components/secure-array/events/event-manager.js +268 -0
  387. package/dist/esm/mods/security/src/components/secure-array/events/event-manager.js.map +1 -0
  388. package/dist/esm/mods/security/src/components/secure-array/index.js +61 -0
  389. package/dist/esm/mods/security/src/components/secure-array/index.js.map +1 -0
  390. package/dist/esm/mods/security/src/components/secure-array/metadata/metadata-manager.js +329 -0
  391. package/dist/esm/mods/security/src/components/secure-array/metadata/metadata-manager.js.map +1 -0
  392. package/dist/esm/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js +388 -0
  393. package/dist/esm/mods/security/src/components/secure-array/serialization/ArraySerializationHandler.js.map +1 -0
  394. package/dist/esm/mods/security/src/components/secure-array/types/index.js +84 -0
  395. package/dist/esm/mods/security/src/components/secure-array/types/index.js.map +1 -0
  396. package/dist/esm/mods/security/src/components/secure-array/utils/id-generator.js +78 -0
  397. package/dist/esm/mods/security/src/components/secure-array/utils/id-generator.js.map +1 -0
  398. package/dist/esm/mods/security/src/components/secure-array/utils/validation.js +273 -0
  399. package/dist/esm/mods/security/src/components/secure-array/utils/validation.js.map +1 -0
  400. package/dist/esm/mods/security/src/components/secure-memory.js +884 -0
  401. package/dist/esm/mods/security/src/components/secure-memory.js.map +1 -0
  402. package/dist/esm/mods/security/src/components/secure-object/core/secure-object-core.js +1603 -0
  403. package/dist/esm/mods/security/src/components/secure-object/core/secure-object-core.js.map +1 -0
  404. package/dist/esm/mods/security/src/components/secure-object/encryption/crypto-handler.js +360 -0
  405. package/dist/esm/mods/security/src/components/secure-object/encryption/crypto-handler.js.map +1 -0
  406. package/dist/esm/mods/security/src/components/secure-object/encryption/sensitive-keys.js +203 -0
  407. package/dist/esm/mods/security/src/components/secure-object/encryption/sensitive-keys.js.map +1 -0
  408. package/dist/esm/mods/security/src/components/secure-object/events/event-manager.js +195 -0
  409. package/dist/esm/mods/security/src/components/secure-object/events/event-manager.js.map +1 -0
  410. package/dist/esm/mods/security/src/components/secure-object/index.js +63 -0
  411. package/dist/esm/mods/security/src/components/secure-object/index.js.map +1 -0
  412. package/dist/esm/mods/security/src/components/secure-object/metadata/metadata-manager.js +181 -0
  413. package/dist/esm/mods/security/src/components/secure-object/metadata/metadata-manager.js.map +1 -0
  414. package/dist/esm/mods/security/src/components/secure-object/serialization/serialization-handler.js +195 -0
  415. package/dist/esm/mods/security/src/components/secure-object/serialization/serialization-handler.js.map +1 -0
  416. package/dist/esm/mods/security/src/components/secure-object/utils/id-generator.js +62 -0
  417. package/dist/esm/mods/security/src/components/secure-object/utils/id-generator.js.map +1 -0
  418. package/dist/esm/mods/security/src/components/secure-object/utils/validation.js +237 -0
  419. package/dist/esm/mods/security/src/components/secure-object/utils/validation.js.map +1 -0
  420. package/dist/esm/mods/security/src/components/secure-serialization.js +769 -0
  421. package/dist/esm/mods/security/src/components/secure-serialization.js.map +1 -0
  422. package/dist/esm/mods/security/src/components/secure-string/advanced/entropy-analyzer.js +306 -0
  423. package/dist/esm/mods/security/src/components/secure-string/advanced/entropy-analyzer.js.map +1 -0
  424. package/dist/esm/mods/security/src/components/secure-string/advanced/performance-monitor.js +333 -0
  425. package/dist/esm/mods/security/src/components/secure-string/advanced/performance-monitor.js.map +1 -0
  426. package/dist/esm/mods/security/src/components/secure-string/advanced/quantum-safe.js +243 -0
  427. package/dist/esm/mods/security/src/components/secure-string/advanced/quantum-safe.js.map +1 -0
  428. package/dist/esm/mods/security/src/components/secure-string/buffer/buffer-manager.js +203 -0
  429. package/dist/esm/mods/security/src/components/secure-string/buffer/buffer-manager.js.map +1 -0
  430. package/dist/esm/mods/security/src/components/secure-string/core/secure-string-core.js +786 -0
  431. package/dist/esm/mods/security/src/components/secure-string/core/secure-string-core.js.map +1 -0
  432. package/dist/esm/mods/security/src/components/secure-string/crypto/crypto-operations.js +298 -0
  433. package/dist/esm/mods/security/src/components/secure-string/crypto/crypto-operations.js.map +1 -0
  434. package/dist/esm/mods/security/src/components/secure-string/operations/comparison-operations.js +219 -0
  435. package/dist/esm/mods/security/src/components/secure-string/operations/comparison-operations.js.map +1 -0
  436. package/dist/esm/mods/security/src/components/secure-string/operations/string-operations.js +232 -0
  437. package/dist/esm/mods/security/src/components/secure-string/operations/string-operations.js.map +1 -0
  438. package/dist/esm/mods/security/src/components/secure-string/types/index.js +37 -0
  439. package/dist/esm/mods/security/src/components/secure-string/types/index.js.map +1 -0
  440. package/dist/esm/mods/security/src/components/secure-string/validation/string-validator.js +332 -0
  441. package/dist/esm/mods/security/src/components/secure-string/validation/string-validator.js.map +1 -0
  442. package/dist/esm/mods/security/src/components/side-channel.js +142 -0
  443. package/dist/esm/mods/security/src/components/side-channel.js.map +1 -0
  444. package/dist/esm/mods/security/src/components/tamper-evident-logging.js +389 -0
  445. package/dist/esm/mods/security/src/components/tamper-evident-logging.js.map +1 -0
  446. package/dist/esm/mods/security/src/const/buffer.const.js +13 -0
  447. package/dist/esm/mods/security/src/const/buffer.const.js.map +1 -0
  448. package/dist/esm/mods/security/src/core/crypto.js +720 -0
  449. package/dist/esm/mods/security/src/core/crypto.js.map +1 -0
  450. package/dist/esm/mods/security/src/core/hash/hash-advanced.js +367 -0
  451. package/dist/esm/mods/security/src/core/hash/hash-advanced.js.map +1 -0
  452. package/dist/esm/mods/security/src/core/hash/hash-core.js +355 -0
  453. package/dist/esm/mods/security/src/core/hash/hash-core.js.map +1 -0
  454. package/dist/esm/mods/security/src/core/hash/hash-entropy.js +286 -0
  455. package/dist/esm/mods/security/src/core/hash/hash-entropy.js.map +1 -0
  456. package/dist/esm/mods/security/src/core/hash/hash-security.js +351 -0
  457. package/dist/esm/mods/security/src/core/hash/hash-security.js.map +1 -0
  458. package/dist/esm/mods/security/src/core/hash/hash-types.js +16 -0
  459. package/dist/esm/mods/security/src/core/hash/hash-types.js.map +1 -0
  460. package/dist/esm/mods/security/src/core/hash/hash-utils.js +307 -0
  461. package/dist/esm/mods/security/src/core/hash/hash-utils.js.map +1 -0
  462. package/dist/esm/mods/security/src/core/hash/hash-validator.js +310 -0
  463. package/dist/esm/mods/security/src/core/hash/hash-validator.js.map +1 -0
  464. package/dist/esm/mods/security/src/core/hash.js +9 -0
  465. package/dist/esm/mods/security/src/core/hash.js.map +1 -0
  466. package/dist/esm/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js +133 -0
  467. package/dist/esm/mods/security/src/core/keys/algorithms/mods/Argon2Algo.js.map +1 -0
  468. package/dist/esm/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js +272 -0
  469. package/dist/esm/mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js.map +1 -0
  470. package/dist/esm/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js +296 -0
  471. package/dist/esm/mods/security/src/core/keys/algorithms/mods/ScryptAlgo.js.map +1 -0
  472. package/dist/esm/mods/security/src/core/keys/keys-core.js +199 -0
  473. package/dist/esm/mods/security/src/core/keys/keys-core.js.map +1 -0
  474. package/dist/esm/mods/security/src/core/keys/keys-logger.js +231 -0
  475. package/dist/esm/mods/security/src/core/keys/keys-logger.js.map +1 -0
  476. package/dist/esm/mods/security/src/core/keys/keys-types.js +63 -0
  477. package/dist/esm/mods/security/src/core/keys/keys-types.js.map +1 -0
  478. package/dist/esm/mods/security/src/core/keys/keys-utils.js +316 -0
  479. package/dist/esm/mods/security/src/core/keys/keys-utils.js.map +1 -0
  480. package/dist/esm/mods/security/src/core/keys.js +134 -0
  481. package/dist/esm/mods/security/src/core/keys.js.map +1 -0
  482. package/dist/esm/mods/security/src/core/password/index.js +110 -0
  483. package/dist/esm/mods/security/src/core/password/index.js.map +1 -0
  484. package/dist/esm/mods/security/src/core/password/password-algorithms.js +395 -0
  485. package/dist/esm/mods/security/src/core/password/password-algorithms.js.map +1 -0
  486. package/dist/esm/mods/security/src/core/password/password-core.js +292 -0
  487. package/dist/esm/mods/security/src/core/password/password-core.js.map +1 -0
  488. package/dist/esm/mods/security/src/core/password/password-generator.js +363 -0
  489. package/dist/esm/mods/security/src/core/password/password-generator.js.map +1 -0
  490. package/dist/esm/mods/security/src/core/password/password-migration.js +235 -0
  491. package/dist/esm/mods/security/src/core/password/password-migration.js.map +1 -0
  492. package/dist/esm/mods/security/src/core/password/password-security.js +532 -0
  493. package/dist/esm/mods/security/src/core/password/password-security.js.map +1 -0
  494. package/dist/esm/mods/security/src/core/password/password-types.js +34 -0
  495. package/dist/esm/mods/security/src/core/password/password-types.js.map +1 -0
  496. package/dist/esm/mods/security/src/core/password/password-utils.js +630 -0
  497. package/dist/esm/mods/security/src/core/password/password-utils.js.map +1 -0
  498. package/dist/esm/mods/security/src/core/password/swlist.js +1120 -0
  499. package/dist/esm/mods/security/src/core/password/swlist.js.map +1 -0
  500. package/dist/esm/mods/security/src/core/random/random-core.js +326 -0
  501. package/dist/esm/mods/security/src/core/random/random-core.js.map +1 -0
  502. package/dist/esm/mods/security/src/core/random/random-crypto.js +337 -0
  503. package/dist/esm/mods/security/src/core/random/random-crypto.js.map +1 -0
  504. package/dist/esm/mods/security/src/core/random/random-entropy.js +367 -0
  505. package/dist/esm/mods/security/src/core/random/random-entropy.js.map +1 -0
  506. package/dist/esm/mods/security/src/core/random/random-generators.js +323 -0
  507. package/dist/esm/mods/security/src/core/random/random-generators.js.map +1 -0
  508. package/dist/esm/mods/security/src/core/random/random-sources.js +405 -0
  509. package/dist/esm/mods/security/src/core/random/random-sources.js.map +1 -0
  510. package/dist/esm/mods/security/src/core/random/random-tokens.js +307 -0
  511. package/dist/esm/mods/security/src/core/random/random-tokens.js.map +1 -0
  512. package/dist/esm/mods/security/src/core/random/random-types.js +27 -0
  513. package/dist/esm/mods/security/src/core/random/random-types.js.map +1 -0
  514. package/dist/esm/mods/security/src/core/validators.js +198 -0
  515. package/dist/esm/mods/security/src/core/validators.js.map +1 -0
  516. package/dist/esm/mods/security/src/helpers/Uint8Array.js +333 -0
  517. package/dist/esm/mods/security/src/helpers/Uint8Array.js.map +1 -0
  518. package/dist/esm/mods/security/src/helpers/createEnu.js +25 -0
  519. package/dist/esm/mods/security/src/helpers/createEnu.js.map +1 -0
  520. package/dist/esm/mods/security/src/index.js +373 -0
  521. package/dist/esm/mods/security/src/index.js.map +1 -0
  522. package/dist/esm/mods/security/src/types/global.js +49 -0
  523. package/dist/esm/mods/security/src/types/global.js.map +1 -0
  524. package/dist/esm/mods/security/src/types/secure-mem.type.js +96 -0
  525. package/dist/esm/mods/security/src/types/secure-mem.type.js.map +1 -0
  526. package/dist/esm/mods/security/src/types/secure-memory.js +20 -0
  527. package/dist/esm/mods/security/src/types/secure-memory.js.map +1 -0
  528. package/dist/esm/mods/security/src/types.js +63 -0
  529. package/dist/esm/mods/security/src/types.js.map +1 -0
  530. package/dist/esm/mods/security/src/utils/CryptoAlgorithmUtils.js +69 -0
  531. package/dist/esm/mods/security/src/utils/CryptoAlgorithmUtils.js.map +1 -0
  532. package/dist/esm/mods/security/src/utils/constants.js +105 -0
  533. package/dist/esm/mods/security/src/utils/constants.js.map +1 -0
  534. package/dist/esm/mods/security/src/utils/dataConverter.js +72 -0
  535. package/dist/esm/mods/security/src/utils/dataConverter.js.map +1 -0
  536. package/dist/esm/mods/security/src/utils/encoding.js +279 -0
  537. package/dist/esm/mods/security/src/utils/encoding.js.map +1 -0
  538. package/dist/esm/mods/security/src/utils/errorHandler.js +137 -0
  539. package/dist/esm/mods/security/src/utils/errorHandler.js.map +1 -0
  540. package/dist/esm/mods/security/src/utils/memory/config-manager.js +280 -0
  541. package/dist/esm/mods/security/src/utils/memory/config-manager.js.map +1 -0
  542. package/dist/esm/mods/security/src/utils/memory/event-manager.js +275 -0
  543. package/dist/esm/mods/security/src/utils/memory/event-manager.js.map +1 -0
  544. package/dist/esm/mods/security/src/utils/memory/index.js +141 -0
  545. package/dist/esm/mods/security/src/utils/memory/index.js.map +1 -0
  546. package/dist/esm/mods/security/src/utils/memory/memory-manager.js +886 -0
  547. package/dist/esm/mods/security/src/utils/memory/memory-manager.js.map +1 -0
  548. package/dist/esm/mods/security/src/utils/memory/memory-pool.js +354 -0
  549. package/dist/esm/mods/security/src/utils/memory/memory-pool.js.map +1 -0
  550. package/dist/esm/mods/security/src/utils/memory/reference-tracker.js +374 -0
  551. package/dist/esm/mods/security/src/utils/memory/reference-tracker.js.map +1 -0
  552. package/dist/esm/mods/security/src/utils/memory/types.js +56 -0
  553. package/dist/esm/mods/security/src/utils/memory/types.js.map +1 -0
  554. package/dist/esm/mods/security/src/utils/patterns.js +124 -0
  555. package/dist/esm/mods/security/src/utils/patterns.js.map +1 -0
  556. package/dist/esm/mods/security/src/utils/performanceMonitor.js +246 -0
  557. package/dist/esm/mods/security/src/utils/performanceMonitor.js.map +1 -0
  558. package/dist/esm/mods/security/src/utils/stats.js +180 -0
  559. package/dist/esm/mods/security/src/utils/stats.js.map +1 -0
  560. package/dist/esm/security-middleware.js +15 -15
  561. package/dist/esm/server/components/fastapi/UltraFastRequestProcessor.js +1 -1
  562. package/dist/esm/server/components/fastapi/console/ConsoleInterceptor.js +23 -23
  563. package/dist/esm/server/components/fastapi/middlewares/MiddlewareAPI.js +1 -1
  564. package/dist/esm/server/optimization/RequestPreCompiler.js +1 -1
  565. package/dist/esm/server/plugins/PluginRegistry.js +1 -1
  566. package/dist/esm/server/plugins/core/CachePlugin.js +7 -7
  567. package/dist/esm/server/plugins/core/PerformancePlugin.js +2 -2
  568. package/dist/esm/server/plugins/core/SecurityPlugin.js +10 -10
  569. package/dist/esm/smart-routes.js +1 -1
  570. package/package.json +2 -2
@@ -0,0 +1,919 @@
1
+ import { SecureRandom } from '../core/random/random-core.js';
2
+ import '../core/random/random-types.js';
3
+ import 'crypto';
4
+ import '../core/random/random-sources.js';
5
+ import 'nehonix-uri-processor';
6
+ import { bufferToHex } from '../utils/encoding.js';
7
+ import { StatsTracker } from '../utils/stats.js';
8
+ import '../utils/memory/index.js';
9
+ import '../types.js';
10
+ import { Hash } from '../core/hash/hash-core.js';
11
+ import '../core/hash/hash-types.js';
12
+ import '../core/hash/hash-security.js';
13
+ import '../core/hash/hash-advanced.js';
14
+ import '../algorithms/hash-algorithms.js';
15
+ import argon2 from 'argon2';
16
+ import childProcess from 'child_process';
17
+
18
+ /* ---------------------------------------------------------------------------------------------
19
+ * Copyright (c) NEHONIX INC. All rights reserved.
20
+ * Licensed under the MIT License. See LICENSE in the project root for license information.
21
+ * -------------------------------------------------------------------------------------------
22
+ */
23
+ /**
24
+ * Memory-Hard Key Derivation Module
25
+ *
26
+ * This module implements memory-hard key derivation functions that require
27
+ * significant amounts of memory to compute, making them resistant to
28
+ * hardware-based attacks (ASICs, FPGAs, GPUs).
29
+ *
30
+ * These functions are particularly effective against brute-force attacks
31
+ * as they impose both computational and memory constraints on attackers.
32
+ */
33
+ /**
34
+ * Implements the Argon2 memory-hard key derivation function using the argon2 library
35
+ *
36
+ * Argon2 is designed to be resistant to GPU, ASIC, and FPGA attacks by
37
+ * requiring large amounts of memory to compute.
38
+ *
39
+ * This implementation uses the official argon2 library for Node.js.
40
+ *
41
+ * @param password - Password to derive key from
42
+ * @param options - Derivation options
43
+ * @returns Derived key and metadata
44
+ */
45
+ async function argon2Derive(password, options = {}) {
46
+ const startTime = Date.now();
47
+ // Check if the argon2 library is available
48
+ if (!argon2) {
49
+ // Fallback to the simplified implementation if the library is not available
50
+ console.warn("Argon2 library not available, using simplified implementation");
51
+ return argon2DeriveSimplified(password, options);
52
+ }
53
+ // Parse options with defaults
54
+ const memoryCost = options.memoryCost || 16384; // 16 MB
55
+ const timeCost = options.timeCost || 4;
56
+ const parallelism = options.parallelism || 1;
57
+ const keyLength = options.keyLength || 32;
58
+ // Generate or use provided salt
59
+ const saltLength = options.saltLength || 16;
60
+ const saltBytes = options.salt || SecureRandom.getRandomBytes(saltLength);
61
+ const salt = Buffer.from(saltBytes);
62
+ // Convert password to the format expected by argon2
63
+ const passwordBuffer = typeof password === "string"
64
+ ? Buffer.from(password)
65
+ : Buffer.from(password);
66
+ try {
67
+ // Configure Argon2 options
68
+ const argon2Options = {
69
+ type: argon2.argon2id, // Use Argon2id variant (balanced security)
70
+ memoryCost: Math.max(8, Math.floor(memoryCost / 1024)), // Convert to KiB, minimum 8
71
+ timeCost: timeCost,
72
+ parallelism: parallelism,
73
+ hashLength: keyLength,
74
+ salt: salt,
75
+ raw: true, // Return raw buffer instead of encoded hash
76
+ };
77
+ // Perform the key derivation
78
+ const result = await argon2.hash(passwordBuffer, argon2Options);
79
+ const endTime = Date.now();
80
+ const timeTakenMs = endTime - startTime;
81
+ // Track statistics
82
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
83
+ );
84
+ return {
85
+ derivedKey: bufferToHex(new Uint8Array(Buffer.from(result))),
86
+ salt: bufferToHex(saltBytes),
87
+ params: {
88
+ memoryCost,
89
+ timeCost,
90
+ parallelism,
91
+ keyLength,
92
+ },
93
+ metrics: {
94
+ timeTakenMs,
95
+ memoryUsedBytes: memoryCost * 1024, // Convert KiB to bytes
96
+ },
97
+ };
98
+ }
99
+ catch (error) {
100
+ console.error("Error using Argon2 library:", error);
101
+ // Fallback to simplified implementation
102
+ return argon2DeriveSimplified(password, options);
103
+ }
104
+ }
105
+ /**
106
+ *
107
+ * Implements a simplified version of Argon2 for environments where the argon2 library is not available
108
+ * This uses the argon2-browser library or a Node.js child process approach as fallbacks
109
+ *
110
+ * @param password - Password to derive key from
111
+ * @param options - Derivation options
112
+ * @returns Derived key and metadata
113
+ */
114
+ function argon2DeriveSimplified(password, options = {}) {
115
+ const startTime = Date.now();
116
+ // Parse options with defaults
117
+ const memoryCost = options.memoryCost || 16384; // 16 MB
118
+ const timeCost = options.timeCost || 4;
119
+ const parallelism = options.parallelism || 1;
120
+ const keyLength = options.keyLength || 32;
121
+ // Generate or use provided salt
122
+ const saltLength = options.saltLength || 16;
123
+ const salt = options.salt || SecureRandom.getRandomBytes(saltLength);
124
+ // Convert password to bytes if it's a string
125
+ const passwordBytes = typeof password === "string"
126
+ ? new TextEncoder().encode(password)
127
+ : password;
128
+ try {
129
+ // Try to use argon2-browser in browser environments
130
+ if (typeof window !== "undefined") {
131
+ try {
132
+ // Try to dynamically import argon2-browser
133
+ const argon2Browser = require("argon2-browser");
134
+ if (argon2Browser) {
135
+ // Create a synchronous wrapper around the async argon2-browser
136
+ const argon2BrowserSync = (pwd, slt, mem, time, parallel, hashLen) => {
137
+ // Use a synchronous XMLHttpRequest to block until we have a result
138
+ const xhr = new XMLHttpRequest();
139
+ let result = null;
140
+ let error = null;
141
+ // Convert Uint8Arrays to regular arrays for argon2-browser
142
+ const pwdArray = Array.from(pwd);
143
+ const saltArray = Array.from(slt);
144
+ // Call argon2-browser
145
+ argon2Browser
146
+ .hash({
147
+ pass: pwdArray,
148
+ salt: saltArray,
149
+ time: time,
150
+ mem: Math.max(8, Math.floor(mem / 1024)), // Convert to KiB, minimum 8
151
+ parallelism: parallel,
152
+ hashLen: hashLen,
153
+ type: argon2Browser.ArgonType.Argon2id,
154
+ })
155
+ .then((result) => {
156
+ result = new Uint8Array(result.hash);
157
+ })
158
+ .catch((err) => {
159
+ error = err;
160
+ });
161
+ // Wait for the result (blocking)
162
+ xhr.open("GET", "data:text/plain;charset=utf-8,", false);
163
+ const maxWaitTime = Date.now() + 30000; // 30 second timeout
164
+ while (result === null && error === null) {
165
+ // Check for timeout
166
+ if (Date.now() > maxWaitTime) {
167
+ throw new Error("Argon2 operation timed out");
168
+ }
169
+ // Poll every 100ms
170
+ try {
171
+ xhr.send(null);
172
+ }
173
+ catch (e) {
174
+ // Ignore errors from the XHR
175
+ }
176
+ }
177
+ // Check for errors
178
+ if (error) {
179
+ throw error;
180
+ }
181
+ // Return the result
182
+ if (result) ;
183
+ throw new Error("Argon2 operation failed with no result");
184
+ };
185
+ // Call our synchronous wrapper
186
+ const derivedKey = argon2BrowserSync(passwordBytes, salt, memoryCost, timeCost, parallelism, keyLength);
187
+ const endTime = Date.now();
188
+ const timeTakenMs = endTime - startTime;
189
+ // Track statistics
190
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
191
+ );
192
+ return {
193
+ derivedKey: bufferToHex(derivedKey),
194
+ salt: bufferToHex(salt),
195
+ params: {
196
+ memoryCost,
197
+ timeCost,
198
+ parallelism,
199
+ keyLength,
200
+ },
201
+ metrics: {
202
+ timeTakenMs,
203
+ memoryUsedBytes: memoryCost,
204
+ },
205
+ };
206
+ }
207
+ }
208
+ catch (e) {
209
+ console.warn("argon2-browser not available:", e);
210
+ // Fall back to Web Crypto API with PBKDF2
211
+ }
212
+ // If argon2-browser is not available, try to use Web Crypto API with PBKDF2
213
+ if (window.crypto && window.crypto.subtle) {
214
+ try {
215
+ // Create a synchronous wrapper around the async Web Crypto API
216
+ const pbkdf2Sync = (pwd, slt, iterations, hashLen) => {
217
+ // Use a synchronous XMLHttpRequest to block until we have a result
218
+ const xhr = new XMLHttpRequest();
219
+ let result = null;
220
+ let error = null;
221
+ // Create proper ArrayBuffers to avoid type issues
222
+ const pwdBuffer = new ArrayBuffer(pwd.length);
223
+ const pwdView = new Uint8Array(pwdBuffer);
224
+ pwdView.set(pwd);
225
+ const saltBuffer = new ArrayBuffer(slt.length);
226
+ const saltView = new Uint8Array(saltBuffer);
227
+ saltView.set(slt);
228
+ // Import the password as a key
229
+ window.crypto.subtle
230
+ .importKey("raw", pwdBuffer, { name: "PBKDF2" }, false, ["deriveBits"])
231
+ .then((key) => {
232
+ // Derive bits using PBKDF2
233
+ return window.crypto.subtle.deriveBits({
234
+ name: "PBKDF2",
235
+ salt: saltBuffer,
236
+ iterations: iterations,
237
+ hash: "SHA-512",
238
+ }, key, hashLen * 8);
239
+ })
240
+ .then((derivedBits) => {
241
+ result = new Uint8Array(derivedBits);
242
+ })
243
+ .catch((err) => {
244
+ error = err;
245
+ });
246
+ // Wait for the result (blocking)
247
+ xhr.open("GET", "data:text/plain;charset=utf-8,", false);
248
+ const maxWaitTime = Date.now() + 30000; // 30 second timeout
249
+ while (result === null && error === null) {
250
+ // Check for timeout
251
+ if (Date.now() > maxWaitTime) {
252
+ throw new Error("PBKDF2 operation timed out");
253
+ }
254
+ // Poll every 100ms
255
+ try {
256
+ xhr.send(null);
257
+ }
258
+ catch (e) {
259
+ // Ignore errors from the XHR
260
+ }
261
+ }
262
+ // Check for errors
263
+ if (error) {
264
+ throw error;
265
+ }
266
+ // Return the result
267
+ if (result) {
268
+ return result;
269
+ }
270
+ throw new Error("PBKDF2 operation failed with no result");
271
+ };
272
+ // Calculate equivalent PBKDF2 iterations to match Argon2 security
273
+ // This is a rough approximation: Argon2 with memoryCost=m, timeCost=t, parallelism=p
274
+ // is roughly equivalent to PBKDF2 with iterations = m * t * p / 10
275
+ const equivalentIterations = Math.max(100000, Math.floor((memoryCost * timeCost * parallelism) / 10));
276
+ // Call our synchronous wrapper
277
+ const derivedKey = pbkdf2Sync(passwordBytes, salt, equivalentIterations, keyLength);
278
+ const endTime = Date.now();
279
+ const timeTakenMs = endTime - startTime;
280
+ console.warn(`Using Web Crypto PBKDF2 with ${equivalentIterations} iterations as Argon2 fallback`);
281
+ // Track statistics
282
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
283
+ );
284
+ return {
285
+ derivedKey: bufferToHex(derivedKey),
286
+ salt: bufferToHex(salt),
287
+ params: {
288
+ memoryCost,
289
+ timeCost,
290
+ parallelism,
291
+ keyLength,
292
+ },
293
+ metrics: {
294
+ timeTakenMs,
295
+ memoryUsedBytes: memoryCost,
296
+ },
297
+ };
298
+ }
299
+ catch (e) {
300
+ console.warn("Web Crypto PBKDF2 failed:", e);
301
+ // Fall back to Node.js approach or pure JS implementation
302
+ }
303
+ }
304
+ }
305
+ // Try to use Node.js crypto module if available
306
+ if (typeof require === "function") {
307
+ try {
308
+ const crypto = require("crypto");
309
+ if (crypto && crypto.scryptSync) {
310
+ // Use scrypt as a fallback for Argon2
311
+ console.warn("Using Node.js crypto scrypt as Argon2 fallback");
312
+ // Convert parameters to scrypt parameters
313
+ // Argon2 with memoryCost=m, timeCost=t is roughly equivalent to
314
+ // scrypt with N=2^(log2(m/p)), r=8, p=parallelism
315
+ const log2MemoryCost = Math.max(14, Math.min(20, Math.log2(memoryCost / parallelism)));
316
+ const N = Math.pow(2, log2MemoryCost);
317
+ const r = 8; // Block size
318
+ const p = parallelism;
319
+ // Convert password and salt to Buffer
320
+ const passwordBuffer = Buffer.from(passwordBytes);
321
+ const saltBuffer = Buffer.from(salt);
322
+ // Derive key using scrypt
323
+ const derivedKey = crypto.scryptSync(passwordBuffer, saltBuffer, keyLength, { N, r, p });
324
+ const endTime = Date.now();
325
+ const timeTakenMs = endTime - startTime;
326
+ // Track statistics
327
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
328
+ );
329
+ return {
330
+ derivedKey: bufferToHex(new Uint8Array(derivedKey)),
331
+ salt: bufferToHex(salt),
332
+ params: {
333
+ memoryCost,
334
+ timeCost,
335
+ parallelism,
336
+ keyLength,
337
+ },
338
+ metrics: {
339
+ timeTakenMs,
340
+ memoryUsedBytes: N * r * 128 * p, // Approximate memory usage
341
+ },
342
+ };
343
+ }
344
+ else if (crypto && crypto.pbkdf2Sync) {
345
+ // Use PBKDF2 as a fallback for Argon2
346
+ console.warn("Using Node.js crypto PBKDF2 as Argon2 fallback");
347
+ // Calculate equivalent PBKDF2 iterations
348
+ const equivalentIterations = Math.max(100000, Math.floor((memoryCost * timeCost * parallelism) / 10));
349
+ // Convert password and salt to Buffer
350
+ const passwordBuffer = Buffer.from(passwordBytes);
351
+ const saltBuffer = Buffer.from(salt);
352
+ // Derive key using PBKDF2
353
+ const derivedKey = crypto.pbkdf2Sync(passwordBuffer, saltBuffer, equivalentIterations, keyLength, "sha512");
354
+ const endTime = Date.now();
355
+ const timeTakenMs = endTime - startTime;
356
+ // Track statistics
357
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
358
+ );
359
+ return {
360
+ derivedKey: bufferToHex(new Uint8Array(derivedKey)),
361
+ salt: bufferToHex(salt),
362
+ params: {
363
+ memoryCost,
364
+ timeCost,
365
+ parallelism,
366
+ keyLength,
367
+ },
368
+ metrics: {
369
+ timeTakenMs,
370
+ memoryUsedBytes: memoryCost, // Approximate memory usage
371
+ },
372
+ };
373
+ }
374
+ }
375
+ catch (e) {
376
+ console.warn("Node.js crypto fallback failed:", e);
377
+ // Fall back to pure JS implementation
378
+ }
379
+ // Try to use a child process to run the argon2 command-line tool
380
+ try {
381
+ // const childProcess = require("child_process");
382
+ const fs = require("fs");
383
+ const path = require("path");
384
+ const os = require("os");
385
+ // Check if argon2 command-line tool is available
386
+ try {
387
+ // Try to execute argon2 -h to check if it's available
388
+ childProcess.execSync("argon2 -h", { stdio: "ignore" });
389
+ // If we get here, argon2 is available
390
+ console.warn("Using argon2 command-line tool as fallback");
391
+ // Create temporary files for password and salt
392
+ const tempDir = os.tmpdir();
393
+ const passwordFile = path.join(tempDir, `argon2-pwd-${Date.now()}.bin`);
394
+ const saltFile = path.join(tempDir, `argon2-salt-${Date.now()}.bin`);
395
+ const outputFile = path.join(tempDir, `argon2-out-${Date.now()}.bin`);
396
+ // Write password and salt to temporary files
397
+ fs.writeFileSync(passwordFile, Buffer.from(passwordBytes));
398
+ fs.writeFileSync(saltFile, Buffer.from(salt));
399
+ // Build argon2 command
400
+ const command = `argon2 "${passwordFile}" -r -id -t ${timeCost} -m ${Math.log2(memoryCost / 1024)} -p ${parallelism} -l ${keyLength} -s "${saltFile}" -o "${outputFile}"`;
401
+ // Execute argon2 command
402
+ childProcess.execSync(command, { stdio: "ignore" });
403
+ // Read the output
404
+ const derivedKey = new Uint8Array(fs.readFileSync(outputFile));
405
+ // Clean up temporary files
406
+ try {
407
+ fs.unlinkSync(passwordFile);
408
+ fs.unlinkSync(saltFile);
409
+ fs.unlinkSync(outputFile);
410
+ }
411
+ catch (e) {
412
+ // Ignore cleanup errors
413
+ }
414
+ const endTime = Date.now();
415
+ const timeTakenMs = endTime - startTime;
416
+ // Track statistics
417
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
418
+ );
419
+ return {
420
+ derivedKey: bufferToHex(derivedKey),
421
+ salt: bufferToHex(salt),
422
+ params: {
423
+ memoryCost,
424
+ timeCost,
425
+ parallelism,
426
+ keyLength,
427
+ },
428
+ metrics: {
429
+ timeTakenMs,
430
+ memoryUsedBytes: memoryCost,
431
+ },
432
+ };
433
+ }
434
+ catch (e) {
435
+ // argon2 command-line tool not available
436
+ console.warn("argon2 command-line tool not available:", e);
437
+ }
438
+ }
439
+ catch (e) {
440
+ console.warn("Child process approach failed:", e);
441
+ }
442
+ }
443
+ }
444
+ catch (e) {
445
+ console.warn("All Argon2 alternatives failed:", e);
446
+ }
447
+ // If all else fails, use a more secure fallback implementation
448
+ console.warn("Using Hash.create as final Argon2 fallback");
449
+ // Use multiple iterations of Hash.create with memory-hard properties
450
+ const blockSize = 64; // Size of each memory block in bytes
451
+ const numBlocks = Math.max(256, Math.min(memoryCost, 4096)); // Limit memory usage
452
+ const memory = new Array(numBlocks);
453
+ // Initialize memory with hash chains
454
+ for (let i = 0; i < numBlocks; i++) {
455
+ // Create a unique seed for each block
456
+ const blockSeed = new Uint8Array(passwordBytes.length + salt.length + 4);
457
+ blockSeed.set(passwordBytes, 0);
458
+ blockSeed.set(salt, passwordBytes.length);
459
+ // Add block index to the seed
460
+ const view = new DataView(blockSeed.buffer);
461
+ view.setUint32(passwordBytes.length + salt.length, i, true);
462
+ // Use Hash.create to fill the block
463
+ try {
464
+ const hashResult = Hash.create(blockSeed, {
465
+ algorithm: "sha512",
466
+ iterations: Math.max(1, Math.floor(timeCost / 2)),
467
+ salt: salt,
468
+ outputFormat: "buffer",
469
+ });
470
+ // Convert the hash result to a Uint8Array
471
+ memory[i] = new Uint8Array(hashResult).slice(0, blockSize);
472
+ }
473
+ catch (e) {
474
+ // If Hash.create fails, use a simple hash
475
+ memory[i] = new Uint8Array(blockSize);
476
+ for (let j = 0; j < blockSize; j++) {
477
+ memory[i][j] = (blockSeed[j % blockSeed.length] + i + j) & 0xff;
478
+ }
479
+ }
480
+ }
481
+ // Perform mixing rounds with dependencies between blocks
482
+ for (let t = 0; t < timeCost; t++) {
483
+ for (let p = 0; p < parallelism; p++) {
484
+ for (let i = 0; i < numBlocks; i++) {
485
+ // Select blocks to mix with based on current block's content
486
+ const j = memory[i][0] % numBlocks; // Dependent indexing
487
+ const k = memory[i][1] % numBlocks; // Dependent indexing
488
+ // Create a buffer for mixing
489
+ const mixBuffer = new Uint8Array(blockSize * 3 + salt.length);
490
+ mixBuffer.set(memory[i], 0);
491
+ mixBuffer.set(memory[j], blockSize);
492
+ mixBuffer.set(memory[k], blockSize * 2);
493
+ mixBuffer.set(salt, blockSize * 3);
494
+ // Use Hash.create for mixing
495
+ try {
496
+ const hashResult = Hash.create(mixBuffer, {
497
+ algorithm: "sha512",
498
+ iterations: 1,
499
+ outputFormat: "buffer",
500
+ });
501
+ // Update the current block
502
+ memory[i] = new Uint8Array(hashResult).slice(0, blockSize);
503
+ }
504
+ catch (e) {
505
+ // If Hash.create fails, use a simple mixing function
506
+ for (let b = 0; b < blockSize; b++) {
507
+ memory[i][b] ^= memory[j][b] ^ memory[k][b];
508
+ memory[i][b] =
509
+ (memory[i][b] + memory[j][(b + 1) % blockSize]) &
510
+ 0xff;
511
+ }
512
+ }
513
+ }
514
+ }
515
+ }
516
+ // Extract the key from multiple blocks
517
+ const result = new Uint8Array(keyLength);
518
+ const finalMixBuffer = new Uint8Array(numBlocks * 4 + salt.length);
519
+ // Collect data from all blocks
520
+ for (let i = 0; i < numBlocks; i++) {
521
+ finalMixBuffer.set(memory[i].slice(0, 4), i * 4);
522
+ }
523
+ finalMixBuffer.set(salt, numBlocks * 4);
524
+ // Final hash to derive the key
525
+ try {
526
+ const hashResult = Hash.create(finalMixBuffer, {
527
+ algorithm: "sha512",
528
+ iterations: timeCost * 2,
529
+ salt: salt,
530
+ outputFormat: "buffer",
531
+ });
532
+ // Copy the result, repeating if necessary
533
+ const hashBytes = new Uint8Array(hashResult);
534
+ for (let i = 0; i < keyLength; i++) {
535
+ result[i] = hashBytes[i % hashBytes.length];
536
+ }
537
+ }
538
+ catch (e) {
539
+ // If Hash.create fails, derive key from memory blocks
540
+ for (let i = 0; i < keyLength; i++) {
541
+ let value = 0;
542
+ for (let j = 0; j < Math.min(16, numBlocks); j++) {
543
+ const blockIndex = (i * j) % numBlocks;
544
+ const byteIndex = (i + j) % blockSize;
545
+ value ^= memory[blockIndex][byteIndex];
546
+ }
547
+ result[i] = value;
548
+ }
549
+ }
550
+ const endTime = Date.now();
551
+ const timeTakenMs = endTime - startTime;
552
+ // Track statistics
553
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
554
+ );
555
+ return {
556
+ derivedKey: bufferToHex(result),
557
+ salt: bufferToHex(salt),
558
+ params: {
559
+ memoryCost,
560
+ timeCost,
561
+ parallelism,
562
+ keyLength,
563
+ },
564
+ metrics: {
565
+ timeTakenMs,
566
+ memoryUsedBytes: numBlocks * blockSize,
567
+ },
568
+ };
569
+ }
570
+ /**
571
+ * Implements a real version of the Balloon memory-hard hashing algorithm
572
+ *
573
+ * Balloon is designed to be a simple memory-hard algorithm with provable
574
+ * memory-hardness properties. This implementation follows the paper:
575
+ * "Balloon: A Forward-Secure Password-Hashing Algorithm with Memory-Hard Functions"
576
+ * by Dan Boneh, Henry Corrigan-Gibbs, and Stuart Schechter.
577
+ *
578
+ * @param password - Password to derive key from
579
+ * @param options - Derivation options
580
+ * @returns Derived key and metadata
581
+ */
582
+ function balloonDerive(password, options = {}) {
583
+ const startTime = Date.now();
584
+ // Parse options with defaults
585
+ const memoryCost = options.memoryCost || 16384; // 16 MB
586
+ const timeCost = options.timeCost || 4;
587
+ const parallelism = options.parallelism || 1; // Used for multiple lanes in enhanced Balloon
588
+ const keyLength = options.keyLength || 32;
589
+ // Generate or use provided salt
590
+ const saltLength = options.saltLength || 16;
591
+ const salt = options.salt || SecureRandom.getRandomBytes(saltLength);
592
+ // Convert password to bytes if it's a string
593
+ const passwordBytes = typeof password === "string"
594
+ ? new TextEncoder().encode(password)
595
+ : password;
596
+ // Try to use Node.js crypto for better performance if available
597
+ if (typeof require === "function") {
598
+ try {
599
+ const crypto = require("crypto");
600
+ if (crypto && crypto.createHash) {
601
+ // Use Node.js crypto implementation
602
+ return balloonDeriveNodeCrypto(passwordBytes, salt, memoryCost, timeCost, parallelism, keyLength, startTime);
603
+ }
604
+ }
605
+ catch (e) {
606
+ console.warn("Node.js crypto not available for Balloon:", e);
607
+ // Fall back to the pure JS implementation
608
+ }
609
+ }
610
+ // Initialize memory blocks (each 64 bytes for better security)
611
+ const blockSize = 64; // Use 64 bytes (512 bits) for SHA-512
612
+ const numBlocks = Math.max(256, Math.min(memoryCost, 65536)); // Limit memory usage
613
+ const memory = new Array(numBlocks);
614
+ // Create a secure hash function using SHA-512
615
+ const secureHash = (data) => {
616
+ try {
617
+ // Use the Hash module's secure hash function
618
+ const hashResult = Hash.create(data, {
619
+ algorithm: "sha512", // Use SHA-512 for better security
620
+ outputFormat: "buffer",
621
+ });
622
+ // Convert the hash result to a Uint8Array
623
+ if (typeof hashResult === "string") {
624
+ // Convert string to buffer
625
+ return new TextEncoder().encode(hashResult).slice(0, blockSize);
626
+ }
627
+ else {
628
+ // Use it as a Uint8Array
629
+ return new Uint8Array(hashResult).slice(0, blockSize);
630
+ }
631
+ }
632
+ catch (e) {
633
+ console.warn("Error using Hash.create:", e);
634
+ // Fallback to a more secure custom implementation
635
+ try {
636
+ // Create a buffer for the hash result
637
+ const result = new Uint8Array(blockSize);
638
+ // Simple custom hash function based on multiple rounds of mixing
639
+ let h = 0;
640
+ for (let i = 0; i < blockSize; i++) {
641
+ for (let j = 0; j < data.length; j++) {
642
+ // Mix data bytes with position and previous hash value
643
+ h = ((h << 5) - h + data[j]) | 0;
644
+ h =
645
+ ((h << 7) ^
646
+ (h >>> 3) ^
647
+ data[(j + i) % data.length]) |
648
+ 0;
649
+ }
650
+ // Store hash byte
651
+ result[i] = h & 0xff;
652
+ }
653
+ return result;
654
+ }
655
+ catch (innerError) {
656
+ // Last resort fallback
657
+ console.warn("Error in fallback hash:", innerError);
658
+ const fallbackHash = new Uint8Array(blockSize);
659
+ for (let i = 0; i < blockSize; i++) {
660
+ fallbackHash[i] = (i * 31 + data[i % data.length]) & 0xff;
661
+ }
662
+ return fallbackHash;
663
+ }
664
+ }
665
+ };
666
+ // Step 1: Expand - Fill the buffer with pseudorandom bytes derived from the password and salt
667
+ // Initialize first block with password and salt
668
+ const initialSeed = new Uint8Array(passwordBytes.length + salt.length + 8);
669
+ initialSeed.set(passwordBytes, 0);
670
+ initialSeed.set(salt, passwordBytes.length);
671
+ // Add counter and other parameters to the seed
672
+ const seedView = new DataView(initialSeed.buffer);
673
+ seedView.setUint32(passwordBytes.length + salt.length, numBlocks, true);
674
+ seedView.setUint32(passwordBytes.length + salt.length + 4, timeCost, true);
675
+ // Fill first block
676
+ memory[0] = secureHash(initialSeed);
677
+ // Fill remaining blocks using counter mode
678
+ for (let i = 1; i < numBlocks; i++) {
679
+ const input = new Uint8Array(memory[i - 1].length + 8);
680
+ input.set(memory[i - 1], 0);
681
+ // Add counter and block index
682
+ const view = new DataView(input.buffer);
683
+ view.setUint32(memory[i - 1].length, i, true);
684
+ view.setUint32(memory[i - 1].length + 4, 0, true); // Round 0
685
+ memory[i] = secureHash(input);
686
+ }
687
+ // Step 2: Mix - Perform multiple rounds of mixing
688
+ for (let round = 0; round < timeCost; round++) {
689
+ // Process each block
690
+ for (let i = 0; i < numBlocks; i++) {
691
+ // Step 2a: Hash the current block with round and index
692
+ const bufferA = new Uint8Array(memory[i].length + 8);
693
+ bufferA.set(memory[i], 0);
694
+ const viewA = new DataView(bufferA.buffer);
695
+ viewA.setUint32(memory[i].length, round, true);
696
+ viewA.setUint32(memory[i].length + 4, i, true);
697
+ memory[i] = secureHash(bufferA);
698
+ // Step 2b: Mix in data from other blocks
699
+ // In the Balloon algorithm, we mix with:
700
+ // 1. Previous block (sequential dependency)
701
+ // 2. A random block (random dependency)
702
+ // 3. A block determined by the current block's content (data-dependent indexing)
703
+ // Number of blocks to mix with (more for better security)
704
+ const mixCount = Math.min(4, numBlocks - 1);
705
+ for (let mix = 0; mix < mixCount; mix++) {
706
+ let blockToMix;
707
+ if (mix === 0) {
708
+ // Previous block (sequential dependency)
709
+ blockToMix = (i + numBlocks - 1) % numBlocks;
710
+ }
711
+ else if (mix === 1) {
712
+ // Random block based on round and index (random dependency)
713
+ // Use a deterministic but "random-looking" function
714
+ blockToMix = (i ^ round ^ (i * round)) % numBlocks;
715
+ }
716
+ else {
717
+ // Data-dependent indexing (use current block's content to determine index)
718
+ // This is the key to making the algorithm memory-hard
719
+ const idxData = new Uint8Array(memory[i].length + 4);
720
+ idxData.set(memory[i], 0);
721
+ const idxView = new DataView(idxData.buffer);
722
+ idxView.setUint32(memory[i].length, mix, true);
723
+ // Hash to get a "random" index
724
+ const idxHash = secureHash(idxData);
725
+ // Use first 4 bytes as an index
726
+ const idxHashView = new DataView(idxHash.buffer);
727
+ blockToMix = idxHashView.getUint32(0, true) % numBlocks;
728
+ }
729
+ // Mix the selected block with the current block
730
+ const mixBuffer = new Uint8Array(memory[i].length + memory[blockToMix].length + 8);
731
+ mixBuffer.set(memory[i], 0);
732
+ mixBuffer.set(memory[blockToMix], memory[i].length);
733
+ const mixView = new DataView(mixBuffer.buffer);
734
+ mixView.setUint32(memory[i].length + memory[blockToMix].length, round, true);
735
+ mixView.setUint32(memory[i].length + memory[blockToMix].length + 4, i, true);
736
+ // Update current block
737
+ memory[i] = secureHash(mixBuffer);
738
+ }
739
+ }
740
+ }
741
+ // Step 3: Extract - Derive the final key from multiple blocks
742
+ // Create a buffer to hold the final extraction data
743
+ const extractBuffer = new Uint8Array(blockSize * Math.min(16, numBlocks) + salt.length);
744
+ // Use multiple blocks for extraction (last blocks contain the most mixed data)
745
+ const blocksToUse = Math.min(16, numBlocks);
746
+ for (let i = 0; i < blocksToUse; i++) {
747
+ const blockIndex = numBlocks - i - 1;
748
+ extractBuffer.set(memory[blockIndex].slice(0, blockSize), i * blockSize);
749
+ }
750
+ // Add salt to the extraction
751
+ extractBuffer.set(salt, blocksToUse * blockSize);
752
+ // Final hash to get the key
753
+ let finalHash;
754
+ try {
755
+ // Use PBKDF2 with a single iteration for the final extraction
756
+ // This adds some extra security and allows flexible key length
757
+ finalHash = Hash.create(extractBuffer, {
758
+ algorithm: "sha512",
759
+ iterations: 1,
760
+ salt: salt,
761
+ outputFormat: "buffer",
762
+ });
763
+ // Convert to Uint8Array
764
+ finalHash = new Uint8Array(finalHash);
765
+ }
766
+ catch (e) {
767
+ console.warn("Error in final hash extraction:", e);
768
+ // Fallback: combine blocks directly
769
+ finalHash = new Uint8Array(blocksToUse * blockSize);
770
+ for (let i = 0; i < blocksToUse; i++) {
771
+ finalHash.set(memory[numBlocks - i - 1], i * blockSize);
772
+ }
773
+ }
774
+ // Truncate or extend to the requested key length
775
+ const result = new Uint8Array(keyLength);
776
+ for (let i = 0; i < keyLength; i++) {
777
+ result[i] = finalHash[i % finalHash.length];
778
+ }
779
+ const endTime = Date.now();
780
+ const timeTakenMs = endTime - startTime;
781
+ // Track statistics
782
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
783
+ );
784
+ return {
785
+ derivedKey: bufferToHex(result),
786
+ salt: bufferToHex(salt),
787
+ params: {
788
+ memoryCost,
789
+ timeCost,
790
+ parallelism,
791
+ keyLength,
792
+ },
793
+ metrics: {
794
+ timeTakenMs,
795
+ memoryUsedBytes: numBlocks * blockSize,
796
+ },
797
+ };
798
+ }
799
+ /**
800
+ * Node.js crypto implementation of Balloon
801
+ * This is more efficient than the pure JS implementation
802
+ */
803
+ function balloonDeriveNodeCrypto(passwordBytes, salt, memoryCost, timeCost, parallelism, keyLength, startTime) {
804
+ const crypto = require("crypto");
805
+ // Initialize memory blocks (each 64 bytes for better security)
806
+ const blockSize = 64; // Use 64 bytes (512 bits) for SHA-512
807
+ const numBlocks = Math.max(256, Math.min(memoryCost, 65536)); // Limit memory usage
808
+ const memory = new Array(numBlocks);
809
+ // Create a secure hash function using Node.js crypto
810
+ const secureHash = (data) => {
811
+ const hash = crypto.createHash("sha512");
812
+ hash.update(Buffer.from(data));
813
+ return new Uint8Array(hash.digest().slice(0, blockSize));
814
+ };
815
+ // Step 1: Expand - Fill the buffer with pseudorandom bytes derived from the password and salt
816
+ // Initialize first block with password and salt
817
+ const initialSeed = new Uint8Array(passwordBytes.length + salt.length + 8);
818
+ initialSeed.set(passwordBytes, 0);
819
+ initialSeed.set(salt, passwordBytes.length);
820
+ // Add counter and other parameters to the seed
821
+ const seedView = new DataView(initialSeed.buffer);
822
+ seedView.setUint32(passwordBytes.length + salt.length, numBlocks, true);
823
+ seedView.setUint32(passwordBytes.length + salt.length + 4, timeCost, true);
824
+ // Fill first block
825
+ memory[0] = secureHash(initialSeed);
826
+ // Fill remaining blocks using counter mode
827
+ for (let i = 1; i < numBlocks; i++) {
828
+ const input = new Uint8Array(memory[i - 1].length + 8);
829
+ input.set(memory[i - 1], 0);
830
+ // Add counter and block index
831
+ const view = new DataView(input.buffer);
832
+ view.setUint32(memory[i - 1].length, i, true);
833
+ view.setUint32(memory[i - 1].length + 4, 0, true); // Round 0
834
+ memory[i] = secureHash(input);
835
+ }
836
+ // Step 2: Mix - Perform multiple rounds of mixing
837
+ for (let round = 0; round < timeCost; round++) {
838
+ // Process each block
839
+ for (let i = 0; i < numBlocks; i++) {
840
+ // Step 2a: Hash the current block with round and index
841
+ const bufferA = new Uint8Array(memory[i].length + 8);
842
+ bufferA.set(memory[i], 0);
843
+ const viewA = new DataView(bufferA.buffer);
844
+ viewA.setUint32(memory[i].length, round, true);
845
+ viewA.setUint32(memory[i].length + 4, i, true);
846
+ memory[i] = secureHash(bufferA);
847
+ // Step 2b: Mix in data from other blocks
848
+ // Number of blocks to mix with (more for better security)
849
+ const mixCount = Math.min(4, numBlocks - 1);
850
+ for (let mix = 0; mix < mixCount; mix++) {
851
+ let blockToMix;
852
+ if (mix === 0) {
853
+ // Previous block (sequential dependency)
854
+ blockToMix = (i + numBlocks - 1) % numBlocks;
855
+ }
856
+ else if (mix === 1) {
857
+ // Random block based on round and index (random dependency)
858
+ blockToMix = (i ^ round ^ (i * round)) % numBlocks;
859
+ }
860
+ else {
861
+ // Data-dependent indexing
862
+ const idxData = new Uint8Array(memory[i].length + 4);
863
+ idxData.set(memory[i], 0);
864
+ const idxView = new DataView(idxData.buffer);
865
+ idxView.setUint32(memory[i].length, mix, true);
866
+ // Hash to get a "random" index
867
+ const idxHash = secureHash(idxData);
868
+ // Use first 4 bytes as an index
869
+ const idxHashView = new DataView(idxHash.buffer);
870
+ blockToMix = idxHashView.getUint32(0, true) % numBlocks;
871
+ }
872
+ // Mix the selected block with the current block
873
+ const mixBuffer = new Uint8Array(memory[i].length + memory[blockToMix].length + 8);
874
+ mixBuffer.set(memory[i], 0);
875
+ mixBuffer.set(memory[blockToMix], memory[i].length);
876
+ const mixView = new DataView(mixBuffer.buffer);
877
+ mixView.setUint32(memory[i].length + memory[blockToMix].length, round, true);
878
+ mixView.setUint32(memory[i].length + memory[blockToMix].length + 4, i, true);
879
+ // Update current block
880
+ memory[i] = secureHash(mixBuffer);
881
+ }
882
+ }
883
+ }
884
+ // Step 3: Extract - Derive the final key from multiple blocks
885
+ // Create a buffer to hold the final extraction data
886
+ const extractBuffer = Buffer.alloc(blockSize * Math.min(16, numBlocks) + salt.length);
887
+ // Use multiple blocks for extraction (last blocks contain the most mixed data)
888
+ const blocksToUse = Math.min(16, numBlocks);
889
+ for (let i = 0; i < blocksToUse; i++) {
890
+ const blockIndex = numBlocks - i - 1;
891
+ Buffer.from(memory[blockIndex].slice(0, blockSize)).copy(extractBuffer, i * blockSize);
892
+ }
893
+ // Add salt to the extraction
894
+ Buffer.from(salt).copy(extractBuffer, blocksToUse * blockSize);
895
+ // Final derivation using PBKDF2 with a single iteration
896
+ const result = crypto.pbkdf2Sync(extractBuffer, Buffer.from(salt), 1, keyLength, "sha512");
897
+ const endTime = Date.now();
898
+ const timeTakenMs = endTime - startTime;
899
+ // Track statistics
900
+ StatsTracker.getInstance().trackKeyDerivation(timeTakenMs, keyLength * 8 // Entropy bits
901
+ );
902
+ return {
903
+ derivedKey: bufferToHex(new Uint8Array(result)),
904
+ salt: bufferToHex(salt),
905
+ params: {
906
+ memoryCost,
907
+ timeCost,
908
+ parallelism,
909
+ keyLength,
910
+ },
911
+ metrics: {
912
+ timeTakenMs,
913
+ memoryUsedBytes: numBlocks * blockSize,
914
+ },
915
+ };
916
+ }
917
+
918
+ export { argon2Derive, balloonDerive };
919
+ //# sourceMappingURL=memory-hard.js.map