Releases: paulmillr/noble-ciphers
Releases · paulmillr/noble-ciphers
2.2.0
Immutable
release. Only release title and notes can be modified.
- March 2026 self-audit (all files): no major issues found
- Audited for spec compliance and security
- Fix:
ctrfromwebcryptosubmodule used wrong counter wrapping - Fix: MAC no longer corrupts oversized outputs
- Align CMAC API to other MACs
- Fix all Byte Array types, to ensure proper work in both TypeScript 5.6 & TypeScript 5.9+
- TS 5.6 has
Uint8Array, while TS 5.9+ made it genericUint8Array<ArrayBuffer> - This creates incompatibility of code between versions
- Previously, it was hard to use and constantly emitted errors similar to
TS2345 - See typescript#62240 for more context
- TS 5.6 has
- Fix compilation issues on TypeScript v6
- Zeroization improvements by @ChALkeR in #67, #68
- Make package Big Endian friendly. All tests pass on s390x
- Improve tree-shaking, reduce bundle sizes
- Add massive amounts of documentation everywhere
Full Changelog: 2.1.1...2.2.0
2.1.1
Immutable
release. Only release title and notes can be modified.
- Implement AES-SIV by @overheadhunter in #62
- AES-SIV (RFC 5297) is different from AES-GCM-SIV (RFC 8452)
- Deprecate old
sivexport inaes.jsbecause it was an alias to gcmsiv
- Publish provenance statement, missed in 2.0.1 due to GitHub bugs
New Contributors
- @overheadhunter made their first contribution in #62
Full Changelog: 2.0.1...2.1.0
2.0.1
Immutable
release. Only release title and notes can be modified.
- Disable extension-less imports. If you've used
/chacha, switch to/chacha.jsnow. See 2.0.0 for more details. - package.json: specify exported submodules to ensure typescript autocompletion
GitHub Immutable Releases
This GH release does not include NPM & JSR attestations, until we fix bugs related to newly added GitHub Immutable Releases
Full Changelog: 2.0.0...2.0.1
2.0.0
High-level
- The package is now ESM-only. ESM can finally be loaded from common.js on node v20.19+
- Node v20.19 is now the minimum required version
- Package imports now work correctly in bundler-less environments, such as browsers
- Reduces npm package size (traffic consumed): 118KB => 99KB
- Reduces unpacked npm size (on-disk space): 753KB => 458KB
- Make bundle sizes smaller, compared to v1.x
.jsextension must be used for all modules- Old:
@noble/ciphers/aes - New:
@noble/ciphers/aes.js - This simplifies working in browsers natively without transpilers
- Old:
Changes
- webcrypto: move
randomBytesandmanagedNoncetoutils.js - ghash, poly1305, polyval: only allow Uint8Array as hash inputs, prohibit
string - utils: new abytes; remove ahash, toBytes
- Remove modules
_assert(useutils),_microandcrypto(usewebcrypto) - Upgrade typescript compilation env to ts5.9 and es2022
- Massively improve error messages, make them more descriptive
Full Changelog: 1.3.0...2.0.0
1.3.0
- Modules are now available with
.jsextension- Old:
@noble/ciphers/chacha - New:
@noble/ciphers/chacha.js - Old path is still available
- This simplifies working in browsers natively without transpilers
- Old:
- utils: use built-in Uint8Array toHex / fromHex when available. Gives 13x speed-up on 256b arrays, 20x speed-up on 32kb arrays
- utils.randomBytes: ensure same return type Uint8Array in old nodejs
- Move _assert into utils
- Rename siv to gcmsiv
- Standalone build files are now attested in CI. Check out README for verification guide
- Typescript source can now be used without compilation in node.js v24, due to erasableSyntaxOnly
Full Changelog: 1.2.1...1.3.0
1.2.1
- Use typescript verbatimModuleSyntax to support future node.js type stripping
Full Changelog: 1.2.0...1.2.1
1.2.0
- The package is now available on JSR.
- Use isolatedDeclarations typescript option, which massively simplifies documentation auto-gen, and more
- Check out JSR page for one example
- Add tons of comments everywhere to improve autocompletion, LLM code gen, and basic code understanding.
- Remove some exports from internal
_assert
Full Changelog: 1.1.3...1.2.0
1.1.3
- Harden input / output buffer checks
- Ensure all ciphers prohibit overlaps
- Ensure salsapoly supports overlapping input / output
- Ensure chachapoly also supports it. This brings v1.0.0 behavior
Full Changelog: 1.1.2...1.1.3
1.1.2
- Prohibit input and output overlaps
- Reusing same buffer still works when indexes do not overlap with each other
Full Changelog: 1.1.1...1.1.2