- Protect passed options against mutation / pollution
- keccakprg: fail until entropy is added
- webcrypto: reject output sizes which crashed engine
- blake3: fix tree merging for multi-terabyte streams
- Improve zeroization
- Speed-up Argon2 by 20%
- Argon2 cost options are now optional. The defaults are
t: 3,m: 1024 ** 2KiB (1 GiB),p: 1,dkLen: 32, and a 1 GiBmaxmemlimit; larger-memory calls must setmaxmemexplicitly. - Corrected scrypt's default
maxmemto work forN: 2 ** 20,r: 8, andp: 1 nextTickandasyncLoopnow yield throughscheduler.yield()when available orsetTimeoutotherwise, allowing timers, I/O, and rendering to progress. They also accept optional rejection cleanup; async Argon2, PBKDF2, and scrypt use it to wipe work state if scheduling is aborted.
- Improved 32-byte input performance across all hashes by 10–45%.
- Improved SHA-3 and SHAKE by 40%, one-megabyte KangarooTwelve, MarsupilamiFourteen, and TurboSHAKE by 50%, and KMAC by 20%.
- Improved Argon2 performance by 2.2×.
- Improved PBKDF2 and HKDF performance by 20%.
- Added better error messages and stricter type checks throughout the package.
- Fixed
HMAC._cloneIntoso it preservescanXOFin issue #134, reported by @ChALkeR, and corrected an Argon2d typo in issue #135. - Renamed
blake2.compressto the internal_compressmethod. - Reduced unpacked on-disk size from 869 KB to 665 KB by disabling less-relevant source maps.
- March 2026 self-audit (all files): no major issues found.
- Audited for specification compliance and security.
- Fixed
dkLen=0handling inpbkdf2,blake2,turboshake, andkt. - Fixed
parallelHashwithblockLen=0. - Made the
argon2progress callback reach 100%. - Changed
digestIntoto return no value for better performance. - Added support for non-four-divisible
dkLenvalues inargon2andblake2.
- Fixed all byte-array types for compatibility with both TypeScript 5.6 and TypeScript 5.9+.
- TypeScript 5.6 uses
Uint8Array, while TypeScript 5.9+ made it generic asUint8Array<ArrayBuffer>. - This previously caused incompatibilities and errors such as
TS2345. - See TypeScript issue #62240 for more context.
- TypeScript 5.6 uses
- Sped up SHA-3 by as much as 50%, contributed by @ChALkeR in pull request #126.
- Fixed compilation issues on TypeScript 6.
- Added big-endian support; all tests pass on s390x.
- Improved tree-shaking and reduced bundle sizes.
- Added extensive documentation throughout the package.
- Skipped version 2.1 to align with the other noble packages.
- Required the
.jsextension for all module imports.- Old:
@noble/hashes/sha3. - New:
@noble/hashes/sha3.js. - This simplifies native browser use without transpilers.
- The change was planned for 2.0.0 but accidentally omitted.
- Old:
- Declared exported submodules in
package.jsonto support TypeScript autocompletion. - Fixed the scrypt
maxmemerror message, contributed by @ChALkeR in pull request #121. - Sped up scrypt by 4%, contributed by @ChALkeR in pull request #122.
- Made the package ESM-only. ESM can be loaded from CommonJS on Node.js 20.19 and later.
- Node.js 20.19 is now the minimum required version.
- Package imports now work correctly in bundler-free environments such as browsers.
- Reduced npm package download size from 152 KB to 136 KB.
- Reduced unpacked on-disk size from 1.1 MB to 669 KB.
- Reduced bundle sizes compared with version 1.
- Required the
.jsextension for all module imports.- Old:
@noble/hashes/sha3. - New:
@noble/hashes/sha3.js. - This simplifies native browser use without transpilers.
- Old:
- Restricted hash inputs to
Uint8Arrayand prohibitedstringinputs.- Strict validation improves security.
- Use
utils.utf8ToBytesto reproduce the previous behavior.
- Renamed or removed modules for consistency.
sha256andsha512→sha2.js.blake2bandblake2s→blake2.js.ripemd160,sha1, andmd5→legacy.js._assert→utils.js.- Removed the internal
cryptomodule in favor of built-in WebCrypto.
- Improved TypeScript types and option autocompletion.
- Upgraded the TypeScript compilation environment to TypeScript 5.9 and ES2022.
- Made error messages substantially more descriptive.
This release contains fixes and improvements that pave the way for version 2.
- Made modules available with a
.jsextension.- Old:
@noble/hashes/sha2. - New:
@noble/hashes/sha2.js. - The old path remains available.
- This simplifies native browser use without transpilers.
- Old:
- Refactored core functionality and removed duplicate code.
- Reduced package size.
Several modules were renamed for clearer grouping. The old names remain available but deprecated to ease migration:
sha256andsha512→sha2._assert→utils.blake2bandblake2s→blake2.ripemd160andsha1→legacy.
- Added an MD5 implementation to the new
legacymodule. - Moved SHA-1 to
legacy, retaining the old alias until the next major release. - Made
randomBytesensure aUint8Arrayresult on older Node.js versions. - Used built-in
Uint8Array.toHexandUint8Array.fromHexwhen available, giving a 13× speedup for 256-byte arrays and a 20× speedup for 32 KB arrays. - Made the TypeScript source runnable without compilation on Node.js 24 through
erasableSyntaxOnly.
- Implemented BLAKE1, an SHA-3 proposal.
- Enabled TypeScript
verbatimModuleSyntaxin preparation for native Node.js type stripping. - Improved documentation.
- Published the package on JSR.
- Enabled TypeScript
isolatedDeclarations, simplifying generated documentation and related tooling. - Added extensive comments to improve autocompletion, code generation, and general code comprehension.
- Removed some exports from the internal
_assertmodule.
- @quentinadam made their first contribution in pull request #103.
- Fixed Argon2 initialization.
- Included
d.ts.mapfiles in the package.
- Added support for arrays larger than 4 GB on supported platforms.
- Hardened and stabilized Argon2.
- Improved
isBytesperformance. - Improved compatibility with parsers and minifiers.
- @mahnunchik made their first contribution in pull request #102.
- Relaxed scrypt parameter validation to allow
{ r: 1, p: 8 }. - Exported additional TypeScript types.
- Added support for Node.js 14.21.3 alongside Node.js 16 and later.
- Exported SHA-224, SHA-384, SHA-512/224, and SHA-512/256 in the single-file build.
- @quixoten made their first contribution in pull request #89.
- @legobeat made their first contribution in pull request #94.
- @iAchilles made their first contribution in pull request #92.
- @sreyemnayr made their first contribution in pull request #99.
- Added support for big-endian platforms, contributed by @jonathan-albrecht-ibm in pull request #81.
- Added an XOF constructor wrapper for cSHAKE, contributed by @stknob in pull request #82.
- Renamed
_sha2to_md. - Reduced duplicate code in
utilsand_assert. - Changed the TypeScript module target to
Node16.
- Added the
sha2module as an alias for the existingsha256andsha512modules. - Implemented TurboSHAKE in
sha3-addons. - Improved utilities:
- Sped up
hexToBytessixfold and improved its error formatting. - Made
isBytesmore reliable in environments such as jsdom. - Made
concatBytesvalidate input types earlier.
- Sped up
- Upgraded the build to TypeScript 5.3.2.
- Improved tree-shaking:
- Annotated top-level invocations as pure.
- Used constant enums.
- Reduced wildcard imports from
_assertand_u64. - Declared the package side-effect-free.
- Fixed Argon2 validation for the parallelism and iterations parameters.
- Fixed
isPlainObjectin serverless environments, as used by scrypt and PBKDF2. - Disabled the viral TypeScript
moduleResolutionsetting.
- @jeetiss made their first contribution in pull request #65.
- @Systemcluster made their first contribution in pull request #69.
- Fixed
utf8ToBytesin Firefox extension contexts (Firefox issue 1681809). - Made BLAKE3 inputs immutable, contributed by @libitx in pull request #51.
- Added pure annotations to
sha3-addonsto reduce bundle size. - Harmonized
utilswith noble-curves. - Fixed types:
- Fixed the XOF type in SHA-3 and BLAKE3, closing issue #55.
- Exported the HMAC type, fixing issue #52.
- Removed the
cryptoNodedependency on@types/node.
- @pkieltyka made their first contribution in pull request #47.
- @libitx made their first contribution in pull request #51.
- @janek26 made their first contribution.
- Changed native cryptography imports so built-in WebCrypto is used on all platforms, including Node.js.
- Added an experimental Argon2 implementation from RFC 9106.
- Included source maps in the package.
- Fixed an
import "_assert"issue.
- Added SHA-224 and SHA-512/224.
- Fixed an SHA-2 bug.
- Improved HMAC type checking in worker contexts.
- Added TypeScript
typesfields to the exports map, contributed by @jacogr in pull request #36.
- @neil-yoga-crypto made their first contribution in pull request #35.
- Added SHA-1 support.
- Removed the viral TypeScript
esModuleInteropoption. - Improved key-derivation functions.
- Improved performance.
- First stable post-audit release.
- Initial release