snow
A pure-rust implementation of the Noise Protocol Framework
0.10.0
26M downloads/mo
#1849 most downloaded on crates.io
mcginty/snow
What this package is like to depend on
Last release 1 years ago
19 Jul 2025
Release timing varies
gaps range from 1 weeks to 13 months
Rarely documented
notes for 7 of 29 stable releases
13 versions withdrawn
withdrawn after publishing
9 years old
70 releases · first in 2017
0 releases in the last 12 months
see the full history below
Release timeline
70 releases · Mar 2017 to Jul 2025Releases
latest 60 of 70-
0.10.019 Jul 2025Release notes
Open source →Quick Summary
snowis nowno_std-friendly, with only one required dependency (subtle) now if you bring your own cryptographic provider, thank you @complexspaces!This release also sees some breaking API changes in the builder to further prevent misuse/abuse - more builder functions now return
Result<Self, Error>instead ofSelf.The P-256 curve is now also available as a non-default feature for those of you needing more curves in your life.
Finally, this release transitioned the snow codebase to Rust 2024 and has a new MSRV of 1.85.
New
- Add support for NIST P-256 curve by @AlfioEmanueleFresta in #185
no_stdsupport withallocby @jmlepisto #183
Improvements
- Removed dependency on
randby @complexspaces in #193 - Update dead docs link for forming NoiseParams strings by @thombles in #129
- Fix documentation reference to parameters in examples/simple.rs by @okdistribute in #113
- Update various links by @robyoder in #151
- Fix nonce incrementing in stateful transport to match the specification by @complexspaces in #152
- s/Ed448/Curve448/ by @dconnolly in #155
- curve25519_dalek 4 by @kayabaNerve in #161
- Bump aes-gcm and chacha20poly1305 by @kayabaNerve in #166
- Simplify example code by @BlackHoleFox in #175
- added example for oneway pattern Xpsk1 by @bluen in #186
Migrating from 0.9
The main change you'll likely notice is the need to add
expect(...)or?to a few builder functions that have been updated to further limit the chance of misuse.Here are the semver-breaking changes:
- Builder function fallibility: more functions in the builder now return a
Resultto more explicitly prohibit calling the same setter twice. DHChoice::Ed448has been renamed toDHChoice::Curve448- Multiple new error enum variants have been added.
PRs
- Update dead docs link for forming NoiseParams strings by @thombles in #129
- Fix documentation reference to parameters in examples/simple.rs by @okdistribute in #113
- Bump
curve25519-dalekto v4.0.0-rc.0 by @tarcieri in #148 - Update various links by @robyoder in #151
- Fix nonce incrementing in stateful transport to match the specification by @complexspaces in #152
- s/Ed448/Curve448/ by @dconnolly in #155
- curve25519_dalek 4 by @kayabaNerve in #161
- Bump aes-gcm and chacha20poly1305 by @kayabaNerve in #166
- Simplify example code by @BlackHoleFox in #175
- Add support for NIST P-256 curve by @AlfioEmanueleFresta in #185
- added example for oneway pattern Xpsk1 by @bluen in #186
- Remove direct dependency on rand and rand_core by @complexspaces in #193
Full Changelog: v0.9.6...v0.10.0
-
0.10.0-beta.216 Jun 2025 pre-releaseRelease notes
Open source →This latest beta cleans out the dependency graph, such that
snownow only has one required dependency (onsubtle)! Shoutout to @complexspaces for the work.changes since
v0.10.0-beta.1- Updated Rust edition to 2024
- Remove dependency on
rand, and feature-gated dependency ongetrandom - Removed unused
byteorderdependency
Quick Summary
snowis nowno_std-friendly, with only one required dependency now if you bring your own cryptographic provider!This release also sees some breaking API changes in the builder to further prevent misuse/abuse - more builder functions now return
Result<Self, Error>instead ofSelf.The P-256 curve is now also available as a non-default feature for those of you needing more curves in your life.
New
- Add support for NIST P-256 curve by @AlfioEmanueleFresta in #185
no_stdsupport withallocby @jmlepisto #183
Improvements
- Removed dependency on
randby @complexspaces in #193 - Update dead docs link for forming NoiseParams strings by @thombles in #129
- Fix documentation reference to parameters in examples/simple.rs by @okdistribute in #113
- Update various links by @robyoder in #151
- Fix nonce incrementing in stateful transport to match the specification by @complexspaces in #152
- s/Ed448/Curve448/ by @dconnolly in #155
- curve25519_dalek 4 by @kayabaNerve in #161
- Bump aes-gcm and chacha20poly1305 by @kayabaNerve in #166
- Simplify example code by @BlackHoleFox in #175
- added example for oneway pattern Xpsk1 by @bluen in #186
Migrating from 0.9
The main change you'll likely notice is the need to add
expect(...)or?to a few builder functions that have been updated to further limit the chance of misuse.Here are all the semver-breaking changes:
- Builder function fallibility: more functions in the builder now return a
Resultto more explicitly prohibit calling the same setter twice. DHChoice::Ed448has been renamed toDHChoice::Curve448- Multiple new error enum variants have been added.
New Contributors
- @thombles made their first contribution in #129
- @okdistribute made their first contribution in #113
- @robyoder made their first contribution in #151
- @complexspaces made their first contribution in #152
- @dconnolly made their first contribution in #155
- @kayabaNerve made their first contribution in #161
- @AlfioEmanueleFresta made their first contribution in #185
- @bluen made their first contribution in #186
- @jmlepisto made their first contribution in #183
Full Changelog: v0.9.0...v0.10.0-beta.1
-
0.10.0-beta.106 Jun 2025 pre-releaseRelease notes
Open source →v0.10.0-beta.1
This change brings in some very welcome additions:
no_stdsupport, finally, and unofficial support for the P-256 curve.changes since
v0.10.0-alpha.1- Updated
rand_coreto 0.9 - Updated
criterionto 0.6 - Updated
ringandcurve25519-dalekversions to the latest version that doesn't have a RUSTSEC warning
New
- Add support for NIST P-256 curve by @AlfioEmanueleFresta in #185
no_stdsupport withallocby @jmlepisto #183
Improvements
- Update dead docs link for forming NoiseParams strings by @thombles in #129
- Fix documentation reference to parameters in examples/simple.rs by @okdistribute in #113
- Update various links by @robyoder in #151
- Fix nonce incrementing in stateful transport to match the specification by @complexspaces in #152
- s/Ed448/Curve448/ by @dconnolly in #155
- curve25519_dalek 4 by @kayabaNerve in #161
- Bump aes-gcm and chacha20poly1305 by @kayabaNerve in #166
- Simplify example code by @BlackHoleFox in #175
- added example for oneway pattern Xpsk1 by @bluen in #186
Migrating from 0.9
The main change you'll likely notice is the need to add
expect(...)or?to a few builder functions that have been updated to further limit the chance of misuse.Here are all the semver-breaking changes:
- Builder function fallibility: more functions in the builder now return a
Resultto more explicitly prohibit calling the same setter twice. DHChoice::Ed448has been renamed toDHChoice::Curve448- Multiple new error enum variants have been added.
New Contributors
- @thombles made their first contribution in #129
- @okdistribute made their first contribution in #113
- @robyoder made their first contribution in #151
- @complexspaces made their first contribution in #152
- @dconnolly made their first contribution in #155
- @kayabaNerve made their first contribution in #161
- @AlfioEmanueleFresta made their first contribution in #185
- @bluen made their first contribution in #186
- @jmlepisto made their first contribution in #183
Full Changelog: v0.9.0...v0.10.0-beta.1
- Updated
-
0.10.0-alpha.118 Feb 2025 pre-releaseRelease notes
Open source →v0.10.0-alpha.1
This change brings in some very welcome additions:
no_stdsupport, finally, and unofficial support for the P-256 curve.New
- Add support for NIST P-256 curve by @AlfioEmanueleFresta in #185
no_stdsupport withallocby @jmlepisto #183
Improvements
- Update dead docs link for forming NoiseParams strings by @thombles in #129
- Fix documentation reference to parameters in examples/simple.rs by @okdistribute in #113
- Update various links by @robyoder in #151
- Fix nonce incrementing in stateful transport to match the specification by @complexspaces in #152
- s/Ed448/Curve448/ by @dconnolly in #155
- curve25519_dalek 4 by @kayabaNerve in #161
- Bump aes-gcm and chacha20poly1305 by @kayabaNerve in #166
- Simplify example code by @BlackHoleFox in #175
- added example for oneway pattern Xpsk1 by @bluen in #186
Migrating from 0.9
This should be a zero-diff change for most users of Snow, but there are small semver incompatibilities.
DHChoice::Ed448has been renamed toDHChoice::Curve448- Multiple new error enum variants have been added.
New Contributors
- @thombles made their first contribution in #129
- @okdistribute made their first contribution in #113
- @robyoder made their first contribution in #151
- @complexspaces made their first contribution in #152
- @dconnolly made their first contribution in #155
- @kayabaNerve made their first contribution in #161
- @AlfioEmanueleFresta made their first contribution in #185
- @bluen made their first contribution in #186
- @jmlepisto made their first contribution in #183
Full Changelog: v0.9.0...v0.10.0-alpha.1
-
0.9.626 Jan 2024Release notes
Open source →- Validate invalid PSK positions when building a Noise protocol.
- Raise errors in various typos/mistakes in Noise patterns when parsing.
- Deprecate the
sodiumoxidebackend, as that crate is no longer maintained. We may eventually migrate it to a maintaned version of the crate, but for now it's best to warn users. - Set a hard limit in
read_message()in transport mode to 65535 to be fully compliant with the Noise specification.
Full Changelog: v0.9.5...v0.9.6
-
0.9.524 Jan 2024Release notes
Open source →This is a security release that fixes a logic flaw in decryption in
TransportState(i.e. the stateful one), where the nonce could increase even when decryption failed, which can cause a desync between the sender and receiver, opening this up as a denial of service vector if the attacker has the ability to inject packets in the channel Noise is talking over.More details can be found in the advisory: GHSA-7g9j-g5jg-3vv3
All users are encouraged to update.
-
0.9.411 Nov 2023Release notes
Open source →This is a dependency version bump release because a couple of important dependencies released new versions that needed a
Cargo.tomlbump:ring0.17pqcrypto-kyber0.8aes-gcm0.10chacha20poly13050.10
-
0.9.316 Aug 2023Release notes
Open source →This is a quick patch release to use the stable
4.0version ofcurve25519-dalek. -
0.9.213 Mar 2023Release notes
Open source →This is a patch release to address a correctness issue for compliance with the Noise specification: the nonce $2^{64} - 1$ is reserved for rekeying, and
CipherStateandStatelessCipherStatedid not check that, instead just making sure that there was no integer overflow.Thanks to @kjvalencik for reporting the issue and @complexspaces for contributing the fix PR (#152).
Thanks to @robyoder as well for fixing broken links and making sure all links were HTTPS (#151).
Full Changelog: v0.9.1...v0.9.2
-
0.9.131 Jan 2023Release notes
Open source →This is a patch release to fix build breakages due to not pinning
curve25519-dalekto a specific pre-release version.Thanks to @Kofituo and @thomaseizinger for bringing it to attention and @tarcieri for the fix PR (#148).
-
0.9.003 Feb 2022Nothing published for this version
-
0.8.103 Feb 2022 withdrawnNothing published for this version
-
0.8.011 May 2021Nothing published for this version
-
0.7.314 Feb 2021 withdrawnNothing published for this version
-
0.7.230 Sep 2020Nothing published for this version
-
0.7.106 Jul 2020Nothing published for this version
-
0.7.015 Jun 2020Nothing published for this version
-
0.7.0-alpha531 May 2020 pre-releaseNothing published for this version
-
0.7.0-alpha421 Feb 2020 pre-releaseNothing published for this version
-
0.7.0-alpha319 Feb 2020 pre-releaseNothing published for this version
-
0.7.0-alpha213 Feb 2020 pre-releaseNothing published for this version
-
0.7.0-alpha108 Feb 2020 pre-releaseNothing published for this version
-
0.6.202 Dec 2019Nothing published for this version
-
0.6.131 Aug 2019Nothing published for this version
-
0.6.014 Jul 2019Nothing published for this version
-
0.6.0-alpha222 Jun 2019 pre-release withdrawnNothing published for this version
-
0.6.0-alpha122 Jun 2019 pre-release withdrawnNothing published for this version
-
0.5.226 Feb 2019Nothing published for this version
-
0.5.107 Feb 2019Nothing published for this version
-
0.5.031 Jan 2019Nothing published for this version
-
0.5.0-alpha228 Jan 2019 pre-release withdrawnNothing published for this version
-
0.5.0-alpha128 Jan 2019 pre-release withdrawnNothing published for this version
-
0.4.216 Jan 2019Nothing published for this version
-
0.4.106 Jan 2019Nothing published for this version
-
0.4.009 Sep 2018Nothing published for this version
-
0.4.0-alpha224 Aug 2018 pre-release withdrawnNothing published for this version
-
0.4.0-alpha102 Aug 2018 pre-release withdrawnNothing published for this version
-
0.3.124 Jul 2018Nothing published for this version
-
0.3.023 Jul 2018Nothing published for this version
-
0.3.0-alpha520 Jul 2018 pre-release withdrawnNothing published for this version
-
0.3.0-alpha420 Jul 2018 pre-release withdrawnNothing published for this version
-
0.3.0-alpha319 Jul 2018 pre-release withdrawnNothing published for this version
-
0.3.0-alpha216 Jul 2018 pre-release withdrawnNothing published for this version
-
0.3.0-alpha113 Jul 2018 pre-release withdrawnNothing published for this version
-
0.2.121 Jun 2018Nothing published for this version
-
0.2.021 Jun 2018Nothing published for this version
-
0.1.1229 May 2018Nothing published for this version
-
0.1.1128 May 2018Nothing published for this version
-
0.1.1027 May 2018Nothing published for this version
-
0.1.901 May 2018Nothing published for this version
-
0.1.8-preview05 Oct 2017 pre-releaseNothing published for this version
-
0.1.7-preview15 Jun 2017 pre-releaseNothing published for this version
-
0.1.6-preview31 May 2017 pre-releaseNothing published for this version
-
0.1.5-preview30 May 2017 pre-releaseNothing published for this version
-
0.1.4-preview29 May 2017 pre-releaseNothing published for this version
-
0.1.3-preview29 May 2017 pre-releaseNothing published for this version
-
0.1.2-preview29 May 2017 pre-releaseNothing published for this version
-
0.1.0-preview26 May 2017 pre-releaseNothing published for this version
-
0.0.1-preview.1226 May 2017 pre-releaseNothing published for this version
-
0.0.1-preview.1113 May 2017 pre-releaseNothing published for this version