Skip to content

Commit

Permalink
Bump curve25519-dalek from 3.2.1 to 4.1.3
Browse files Browse the repository at this point in the history
  • Loading branch information
dependabot[bot] authored and yihau committed Jun 19, 2024
1 parent a6bc917 commit 6ac8e85
Show file tree
Hide file tree
Showing 39 changed files with 263 additions and 225 deletions.
88 changes: 52 additions & 36 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 1 addition & 34 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ criterion-stats = "0.3.0"
crossbeam-channel = "0.5.13"
csv = "1.3.0"
ctrlc = "3.4.4"
curve25519-dalek = "3.2.1"
curve25519-dalek = { version = "4.1.3", features = ["digest", "rand_core"] }
dashmap = "5.5.3"
derivation-path = { version = "0.2.0", default-features = false }
derivative = "2.2.0"
Expand Down Expand Up @@ -497,39 +497,6 @@ solana-program = { path = "sdk/program" }
solana-zk-sdk = { path = "zk-sdk" }
solana-zk-token-sdk = { path = "zk-token-sdk" }

# Our dependency tree has `curve25519-dalek` v3.2.1. They have removed the
# constraint in the next major release. The commit that removes the `zeroize`
# constraint was added to multiple release branches, but not to the 3.2 branch.
#
# `curve25519-dalek` maintainers are saying they do not want to invest any more
# time in the 3.2 release:
#
# https://github.com/dalek-cryptography/curve25519-dalek/issues/452#issuecomment-1749809428
#
# So we have to fork and create our own release, based on v3.2.1, with the
# commit that removed `zeroize` constraint on the `main` branch cherry-picked on
# top.
#
# `curve25519-dalek` v3.2.1 release:
#
# https://github.com/dalek-cryptography/curve25519-dalek/releases/tag/3.2.1
#
# Corresponds to commit
#
# https://github.com/dalek-cryptography/curve25519-dalek/commit/29e5c29b0e5c6821e4586af58b0d0891dd2ec639
#
# Comparison with `b500cdc2a920cd5bff9e2dd974d7b97349d61464`:
#
# https://github.com/dalek-cryptography/curve25519-dalek/compare/3.2.1...solana-labs:curve25519-dalek:b500cdc2a920cd5bff9e2dd974d7b97349d61464
#
# Or, using the branch name instead of the hash:
#
# https://github.com/dalek-cryptography/curve25519-dalek/compare/3.2.1...solana-labs:curve25519-dalek:3.2.1-unpin-zeroize
#
[patch.crates-io.curve25519-dalek]
git = "https://github.com/anza-xyz/curve25519-dalek.git"
rev = "b500cdc2a920cd5bff9e2dd974d7b97349d61464"

# Solana RPC nodes experience stalls when running with `tokio` containing this
# commit:
# https://github.com/tokio-rs/tokio/commit/4eed411519783ef6f58cbf74f886f91142b5cfa6
Expand Down
12 changes: 8 additions & 4 deletions curves/curve25519/src/edwards.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,10 @@ mod target_arch {
type Error = Curve25519Error;

fn try_from(pod: &PodEdwardsPoint) -> Result<Self, Self::Error> {
CompressedEdwardsY::from_slice(&pod.0)
let Ok(compressed_edwards_y) = CompressedEdwardsY::from_slice(&pod.0) else {
return Err(Curve25519Error::PodConversion);
};
compressed_edwards_y
.decompress()
.ok_or(Curve25519Error::PodConversion)
}
Expand All @@ -73,9 +76,10 @@ mod target_arch {
type Point = Self;

fn validate_point(&self) -> bool {
CompressedEdwardsY::from_slice(&self.0)
.decompress()
.is_some()
let Ok(compressed_edwards_y) = CompressedEdwardsY::from_slice(&self.0) else {
return false;
};
compressed_edwards_y.decompress().is_some()
}
}

Expand Down
12 changes: 8 additions & 4 deletions curves/curve25519/src/ristretto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,10 @@ mod target_arch {
type Error = Curve25519Error;

fn try_from(pod: &PodRistrettoPoint) -> Result<Self, Self::Error> {
CompressedRistretto::from_slice(&pod.0)
let Ok(compressed_ristretto) = CompressedRistretto::from_slice(&pod.0) else {
return Err(Curve25519Error::PodConversion);
};
compressed_ristretto
.decompress()
.ok_or(Curve25519Error::PodConversion)
}
Expand All @@ -73,9 +76,10 @@ mod target_arch {
type Point = Self;

fn validate_point(&self) -> bool {
CompressedRistretto::from_slice(&self.0)
.decompress()
.is_some()
let Ok(compressed_ristretto) = CompressedRistretto::from_slice(&self.0) else {
return false;
};
compressed_ristretto.decompress().is_some()
}
}

Expand Down
4 changes: 2 additions & 2 deletions curves/curve25519/src/scalar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ mod target_arch {
type Error = Curve25519Error;

fn try_from(pod: &PodScalar) -> Result<Self, Self::Error> {
Scalar::from_canonical_bytes(pod.0).ok_or(Curve25519Error::PodConversion)
Option::from(Scalar::from_canonical_bytes(pod.0)).ok_or(Curve25519Error::PodConversion)
}
}

Expand All @@ -32,7 +32,7 @@ mod target_arch {
type Error = Curve25519Error;

fn try_from(pod: PodScalar) -> Result<Self, Self::Error> {
Scalar::from_canonical_bytes(pod.0).ok_or(Curve25519Error::PodConversion)
Option::from(Scalar::from_canonical_bytes(pod.0)).ok_or(Curve25519Error::PodConversion)
}
}
}
4 changes: 2 additions & 2 deletions perf/src/sigverify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1280,7 +1280,7 @@ mod tests {
for _ in 0..1_000_000 {
thread_rng().fill(&mut input);
let ans = get_checked_scalar(&input);
let ref_ans = Scalar::from_canonical_bytes(input);
let ref_ans = Option::<Scalar>::from(Scalar::from_canonical_bytes(input));
if let Some(ref_ans) = ref_ans {
passed += 1;
assert_eq!(ans.unwrap(), ref_ans.to_bytes());
Expand Down Expand Up @@ -1315,7 +1315,7 @@ mod tests {
for _ in 0..1_000_000 {
thread_rng().fill(&mut input);
let ans = check_packed_ge_small_order(&input);
let ref_ge = CompressedEdwardsY::from_slice(&input);
let ref_ge = CompressedEdwardsY::from_slice(&input).unwrap();
if let Some(ref_element) = ref_ge.decompress() {
if ref_element.is_small_order() {
assert!(!ans);
Expand Down
Loading

0 comments on commit 6ac8e85

Please sign in to comment.