Skip to content

Commit

Permalink
chore: bump curve25519-dalek from 3.2.1 to 4.1.3 (#2252)
Browse files Browse the repository at this point in the history
* bump curve25519-dalek from 3.2.1 to 4.1.3

* Update .github/scripts/downstream-project-spl-common.sh

Co-authored-by: samkim-crypto <[email protected]>

* Update .github/scripts/downstream-project-spl-common.sh

Co-authored-by: samkim-crypto <[email protected]>

* Update .github/scripts/downstream-project-spl-common.sh

Co-authored-by: samkim-crypto <[email protected]>

* Update Cargo.toml

Co-authored-by: samkim-crypto <[email protected]>

* remove opt level hack

* add comment for opt level

---------

Co-authored-by: samkim-crypto <[email protected]>
(cherry picked from commit 6e23e69)

# Conflicts:
#	Cargo.lock
#	Cargo.toml
#	programs/sbf/Cargo.lock
  • Loading branch information
yihau committed Sep 4, 2024
1 parent f111b36 commit 4d10dc4
Show file tree
Hide file tree
Showing 40 changed files with 291 additions and 205 deletions.
3 changes: 3 additions & 0 deletions .github/scripts/downstream-project-spl-common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,6 @@ fi

# anza migration stopgap. can be removed when agave is fully recommended for public usage.
sed -i 's/solana-geyser-plugin-interface/agave-geyser-plugin-interface/g' ./Cargo.toml

# should be removed when spl bump their curve25519-dalek
sed -i "s/^curve25519-dalek =.*/curve25519-dalek = \"4.1.3\"/" token/confidential-transfer/proof-generation/Cargo.toml
93 changes: 58 additions & 35 deletions Cargo.lock

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

47 changes: 15 additions & 32 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,13 @@ criterion = "0.5.1"
criterion-stats = "0.3.0"
crossbeam-channel = "0.5.13"
csv = "1.3.0"
<<<<<<< HEAD
ctrlc = "3.4.4"
curve25519-dalek = "3.2.1"
=======
ctrlc = "3.4.5"
curve25519-dalek = { version = "4.1.3", features = ["digest", "rand_core"] }
>>>>>>> 6e23e69f09 (chore: bump curve25519-dalek from 3.2.1 to 4.1.3 (#2252))
dashmap = "5.5.3"
derivation-path = { version = "0.2.0", default-features = false }
derivative = "2.2.0"
Expand Down Expand Up @@ -499,38 +504,16 @@ 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"
# curve25519-dalek uses the simd backend by default in v4 if possible,
# which has very slow performance on some platforms with opt-level 0,
# which is the default for dev and test builds.
# This slowdown causes certain interactions in the solana-test-validator,
# such as verifying ZK proofs in transactions, to take much more than 400ms,
# creating problems in the testing environment.
# To enable better performance in solana-test-validator during tests and dev builds,
# we override the opt-level to 3 for the crate.
[profile.dev.package.curve25519-dalek]
opt-level = 3

# Solana RPC nodes experience stalls when running with `tokio` containing this
# commit:
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
8 changes: 6 additions & 2 deletions curves/curve25519/src/scalar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ 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)
Scalar::from_canonical_bytes(pod.0)
.into_option()
.ok_or(Curve25519Error::PodConversion)
}
}

Expand All @@ -32,7 +34,9 @@ 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)
Scalar::from_canonical_bytes(pod.0)
.into_option()
.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 = Scalar::from_canonical_bytes(input).into_option();
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 4d10dc4

Please sign in to comment.