curve25519-dalek
A pure-Rust implementation of group operations on ristretto255 and Curve25519
5.0.0
236M downloads/mo
#440 most downloaded on crates.io
dalek-cryptography/curve25519-dalek
What this package is like to depend on
Last release 1 months ago
06 Jul 2026
Ships unpredictably
gaps range from 1 weeks to 13 months
Nearly every release is documented
notes for 27 of 29 stable releases
55 versions withdrawn
withdrawn after publishing
10 years old
104 releases · first in 2016
9 releases in the last 12 months
see the full history below
Release timeline
104 releases · Dec 2016 to Jul 2026Releases
latest 60 of 104-
5.0.006 Jul 2026Release notes
Open source →Breaking Changes
- Update edition to 2024
- Update the MSRV from 1.60 to 1.85
- Remove
group-bitsfeature due to soundness issues with underlying trait (#909) - Re-export
rand_core(#908) - Rename
unstable_avx512backend toavx512, and no longer require nightly for it (#913) - Rename
Scalar::batch_invert->Scalar::invert_batchfor consistency. Also make it no-alloc. (#789) - Remove deprecated functions
FieldElement::as_bytes()andEdwardsPoint::nonspec_map_to_curve()(#778) - Upgrade
rand_coredependency to v0.10.0 - Upgrade
digestandsha2deps
Other Changes
- Perf: Use maximum available NAF window size in
VartimePrecomputedStraus(#848) - Perf: Skip checking 8 candidate points in
RistrettoPoint::lizard_decode(#882) - Add Lizard bytes-to-point injection for Ristretto. Gated under
lizardfeature. (#826) - Add an allocating batch inversion called
Scalar::invert_batch_alloc(#789) - Add
Scalar::div_by_2(#805) - Add
EdwardsPoint::hash_to_curve(#786) - Undeprecate
Scalar::from_bits()(#780) - Use constant-time equality testing for compressed Ristretto and Edwards points, rather than autoderived equality
4.x series
Release notes
Open source →Breaking Changes
- Update edition to 2024
- Update the MSRV from 1.60 to 1.85
- Remove
group-bitsfeature due to soundness issues with underlying trait (#909) - Re-export
rand_core(#908) - Rename
Scalar::batch_invert->Scalar::invert_batchfor consistency. Also make it no-alloc. (#789) - Remove deprecated functions
FieldElement::as_bytes()andEdwardsPoint::nonspec_map_to_curve()(#778) - Upgrade
rand_coredependency to v0.10.0 - Upgrade
digestandsha2deps
Other Changes
- Perf: Use maximum available NAF window size in
VartimePrecomputedStraus(#848) - Perf: Skip checking 8 candidate points in
RistrettoPoint::lizard_decode(#882) - Add Lizard bytes-to-point injection for Ristretto. Gated under
lizardfeature. (#826) - Add an allocating batch inversion called
Scalar::invert_batch_alloc(#789) - Add
Scalar::div_by_2(#805) - Add
EdwardsPoint::hash_to_curve(#786) - Undeprecate
Scalar::from_bits()(#780) - Use constant-time equality testing for compressed Ristretto and Edwards points, rather than autoderived equality
4.x series
-
5.0.0-rc.118 Jun 2026 pre-releaseNothing published for this version
-
5.0.0-rc.028 May 2026 pre-releaseNothing published for this version
-
5.0.0-pre.604 Feb 2026 pre-releaseNothing published for this version
-
5.0.0-pre.525 Jan 2026 pre-releaseNothing published for this version
-
5.0.0-pre.403 Jan 2026 pre-releaseNothing published for this version
-
5.0.0-pre.305 Dec 2025 pre-releaseNothing published for this version
-
5.0.0-pre.222 Nov 2025 pre-releaseNothing published for this version
-
5.0.0-pre.104 Sep 2025 pre-releaseNothing published for this version
-
5.0.0-pre.009 Jul 2025 pre-releaseNothing published for this version
-
4.2.009 Jul 2025 withdrawnRelease notes
Open source →NOTE: yanked because
hash_to_curvewas improperly implemented (#785)- Move AVX-512 backend selection logic to a separate CFG flag that requires nightly
- Add Elligator2 hashing methods
EdwardsPoint::hash_to_curve()andFieldElement::hash_to_field() - Deprecate
FieldElement::as_bytesin favor ofFieldElement::to_bytes - Remove deprecated
FieldElement::as_bytes - Add batch conversion function
EdwardsPoint::to_montgomery_batch() - Make
VartimePrecomputedStraus::optional_mixed_multiscalar_mul()andVartimeRistrettoPrecomputation::vartime_mixed_multiscalar_mul()accept more points than static scalars
-
4.1.318 Jun 2024Release notes
Open source →- Security: Fix timing leak in Scalar subtraction on u32, u64, fiat_u32, and fiat_u64 backends
- Fix assorted new warnings and lints from rustc and clippy
-
4.1.207 Feb 2024 -
4.1.120 Sep 2023Release notes
Open source →- Mark
constants::BASEPOINT_ORDERdeprecated from pub API - Add implementation for
PrimeFieldBits, behind thegroup-bitsfeature flag.
- Mark
-
4.1.006 Sep 2023Release notes
Open source →- Add arbitrary integer multiplication with
MontgomeryPoint::mul_bits_be - Add implementations of the
ffandgrouptraits, behind thegroupfeature flag - Adapt to new types introduced in
fiat-crypto0.2 infiatbackend - Fix
no_stdforfiatbackend - Mark
Scalar::clamp_integeras#[must_use] - Various documentation fixes
- Add arbitrary integer multiplication with
-
4.0.022 Jul 2023Release notes
Open source →Breaking changes
- Update the MSRV from 1.41 to 1.60
- Provide SemVer policy
- Make
digestan optional feature - Make
rand_corean optional feature - Remove
stdfeature flag - Remove
nightlyfeature flag - Automatic serial backend selection between
u32andu64over the defaultu32 - Backend
simdis now automatically selected overserialwhen a supported CPU is detected - Backend override is now via cfg(curve25519_dalek_backend) over additive features
- Provide override to select
u32oru64backend via cfg(curve25519_dalek_bits) - Replace methods
Scalar::{zero, one}with constantsScalar::{ZERO, ONE} - Deprecate
EdwardsPoint::hash_from_bytesand rename itEdwardsPoint::nonspec_map_to_curve - Require including a new trait,
use curve25519_dalek::traits::BasepointTablewhenever usingEdwardsBasepointTableorRistrettoBasepointTable Scalar::from_canonical_bytesnow returnsCtOptionScalar::is_canonicalnow returnsChoice- Remove
Scalar::from_bytes_clampedandScalar::reduce - Deprecate and feature-gate
Scalar::from_bitsbehindlegacy_compatibility
Other changes
- Add
EdwardsPoint::{mul_base, mul_base_clamped},MontgomeryPoint::{mul_base, mul_base_clamped}, andBasepointTable::mul_base_clamped - Add
precomputed-tablesfeature - Update Maintenance Policies for SemVer
- Migrate documentation to docs.rs hosted
- Fix backend documentation generation
- Fix panic when
Ristretto::double_and_compress_batchreceives the identity point - Remove
byteorderdependency - Update the
criteriondependency to 0.4.0 - Include README.md into crate Documentation
- Update the
rand_coredependency version and theranddev-dependency version. - Relax the
zeroizedependency to^1 - Update the edition from 2015 to 2021
3.x series
-
4.0.0-rc.324 Jun 2023 pre-releaseNothing published for this version
-
4.0.0-rc.226 Mar 2023 pre-releaseNothing published for this version
-
4.0.0-rc.102 Feb 2023 pre-releaseNothing published for this version
-
4.0.0-rc.028 Jan 2023 pre-releaseNothing published for this version
-
4.0.0-pre.514 Dec 2022 pre-releaseNothing published for this version
-
4.0.0-pre.413 Dec 2022 pre-releaseNothing published for this version
-
4.0.0-pre.313 Dec 2022 pre-releaseNothing published for this version
-
4.0.0-pre.216 Feb 2022 pre-releaseNothing published for this version
-
4.0.0-pre.117 Aug 2021 pre-releaseNothing published for this version
-
4.0.0-pre.014 Apr 2021 pre-releaseNothing published for this version
-
3.2.116 Feb 2022Nothing published for this version
-
3.2.004 Aug 2021Release notes
Open source →- Add support for getting the identity element for the Montgomery form of curve25519, which is useful in certain protocols for checking contributory behaviour in derivation of shared secrets.
-
3.1.316 Feb 2022Nothing published for this version
-
3.1.204 Aug 2021Release notes
Open source →- Revert a commit which mistakenly removed support for
zeroizetraits for some point types, as well as elligator2 support for Edwards points.
- Revert a commit which mistakenly removed support for
-
3.1.103 Aug 2021Release notes
Open source →- Fix documentation builds on nightly due to syntax changes to
#![cfg_attr(feature = "nightly", doc = include_str!("../README.md"))].
- Fix documentation builds on nightly due to syntax changes to
-
3.1.014 Apr 2021Release notes
Open source →- Add support for the Elligator2 encoding for Edwards points.
- Add two optional formally-verified field arithmetic backends which use the Fiat Crypto project's Rust code, which is generated from proofs of functional correctness checked by the Coq theorem proving system.
- Add support for additional sizes of precomputed tables for basepoint scalar multiplication.
- Fix an unused import.
- Add support for using the
zeroizetraits with all point types. Note that points are not automatically zeroized on Drop, but that consumers ofcurve25519-dalekshould call these methods manually when needed.
-
3.0.320 Jul 2021Release notes
Open source →- Fix documentation builds on nightly due to syntax changes to
#![cfg_attr(feature = "nightly", doc = include_str!("../README.md"))].
- Fix documentation builds on nightly due to syntax changes to
-
3.0.208 Jan 2021Release notes
Open source →- Multiple documentation typo fixes.
- Fixes to make using
alloc+no_stdpossible for stable Rust.
-
3.0.107 Jan 2021Release notes
Open source →- Update the optional
packed-simddependency to rely on a newer, maintained version of thepacked-simd-2crate.
- Update the optional
-
3.0.018 Aug 2020Release notes
Open source →Breaking changes
- Update the
digestdependency to0.9. This requires a major version because thedigesttraits are part of the public API, but there are otherwise no changes to the API.
2.x series
- Update the
-
2.1.313 Jul 2021Release notes
Open source →- Fix documentation builds on nightly due to syntax changes to
#![fg_attr(feature = "nightly", doc = include_str!("../README.md"))].
- Fix documentation builds on nightly due to syntax changes to
-
2.1.208 Jan 2021Release notes
Open source →- Multiple documentation typo fixes.
- Fix
allocfeature working with stable rust.
-
2.1.107 Jan 2021Release notes
Open source →- Update the optional
packed-simddependency to rely on a newer, maintained version of thepacked-simd-2crate.
- Update the optional
-
2.1.029 May 2020 -
2.0.022 Nov 2019Release notes
Open source →The only significant change is the data model change to the
serdefeature; besides therand_coreversion bump, there are no other user-visible changes.Breaking changes
- Fix a data modeling error in the
serdefeature pointed out by Trevor Perrin which caused points and scalars to be serialized with length fields rather than as fixed-size 32-byte arrays. This is a breaking change, but it fixes compatibility withserde-jsonand ensures that theserde-bincodeencoding matches the conventional encoding for X/Ed25519. - Update
rand_coreto0.5, allowing use with newrandversions.
Other changes
- Switch from
clear_on_droptozeroize(by Tony Arcieri). - Require
subtle = ^2.2.1and remove the note advising nightly Rust, which is no longer required as of that version ofsubtle. See thesubtlechangelog for more details. - Update
README.mdfor2.xseries. - Remove the
build.rshack which loaded the entire crate into its ownbuild.rsto generate constants, and keep the constants in the source code.
1.x series
- Fix a data modeling error in the
-
2.0.0-alpha.215 Nov 2019 pre-releaseNothing published for this version
-
2.0.0-alpha.125 Oct 2019 pre-release withdrawnNothing published for this version
-
2.0.0-alpha.024 Oct 2019 pre-release withdrawnNothing published for this version
-
1.2.608 Jan 2021 -
1.2.507 Jan 2021Release notes
Open source →- Update the optional
packed-simddependency to rely on a newer, maintained version of thepacked-simd-2crate.
- Update the optional
-
1.2.402 Jul 2020Release notes
Open source →- Specify a semver bound for
clear_on_droprather than an exact version, addressing an issue where changes to inline assembly in rustc preventedclear_on_dropfrom working without an update.
- Specify a semver bound for
-
1.2.307 Aug 2019Release notes
Open source →- Fix an issue identified by a Quarkslab audit (and Jack Grigg), where manually
constructing unreduced
Scalarvalues, as needed for X/Ed25519, and then performing scalar/scalar arithmetic could compute incorrect results. - Switch to upstream Rust intrinsics for the IFMA backend now that they exist in Rust and don't need to be defined locally.
- Ensure that the NAF computation works correctly, even for parameters never used elsewhere in the codebase.
- Minor refactoring to EdwardsPoint decompression.
- Fix broken links in documentation.
- Fix compilation on nightly broken due to changes to the
#[doc(include)]path root (not quite correctly done in 1.2.2).
- Fix an issue identified by a Quarkslab audit (and Jack Grigg), where manually
constructing unreduced
-
1.2.231 Jul 2019Release notes
Open source →- Fix a typo in an internal doc-comment.
- Add the "crypto" tag to crate metadata.
- Fix compilation on nightly broken due to changes to the
#[doc(include)]path root.
-
1.2.106 Jun 2019Release notes
Open source →- Fix a bug in bucket index calculations in the Pippenger multiscalar algorithm for very large input sizes.
- Add a more extensive randomized multiscalar multiplication consistency check to the test suite to prevent regressions.
- Ensure that multiscalar and NAF computations work correctly on extremal
Scalarvalues constructed viafrom_bits.
-
1.2.004 Jun 2019 withdrawnRelease notes
Open source →- New multiscalar multiplication algorithm with better performance for large problem sizes. The backend algorithm is selected transparently using the size hints of the input iterators, so no changes are required for client crates to start using it.
- Equality of Edwards points is now checked in projective coordinates.
- Serde can now be used with
no_std.
-
1.1.407 May 2019 withdrawnRelease notes
Open source →- Fix typos in documentation comments.
- Remove unnecessary
Defaultbound onScalar::from_hash.
-
1.1.315 Feb 2019Release notes
Open source →- Reverts the change in 1.1.0 to allow owned and borrowed RNGs, which caused a breakage due to a subtle interaction with ownership rules. (The
RngCorechange is retained).
- Reverts the change in 1.1.0 to allow owned and borrowed RNGs, which caused a breakage due to a subtle interaction with ownership rules. (The
-
1.1.215 Feb 2019 withdrawn -
1.1.115 Feb 2019 withdrawnRelease notes
Open source →- Fixed an issue related to
#[cfg(rustdoc)]which prevented documenting multiple backends.
- Fixed an issue related to
-
1.1.015 Feb 2019 withdrawnRelease notes
Open source →- Adds support for precomputation for multiscalar multiplication.
- Restructures the internal source tree into
serialandvectorbackends (no change to external API). - Adds a new IFMA backend which sets speed records.
- The
avx2_backendfeature is now an alias for thesimd_backendfeature, which autoselects an appropriate vector backend (currently AVX2 or IFMA). - Replaces the
randdependency withrand_core. - Generalizes trait bounds on
RistrettoPoint::random()andScalar::random()to allow owned and borrowed RNGs and to allowRngCoreinstead ofRng.
-
1.1.0-pre.014 Feb 2019 pre-release withdrawnNothing published for this version
-
1.0.328 Jan 2019 -
1.0.218 Jan 2019 withdrawnRelease notes
Open source →- Fixes a typo in the naming of variables in Ristretto formulas (no change to functionality).
-
1.0.113 Dec 2018 withdrawn