Compare commits

...

3 commits

Author SHA1 Message Date
dependabot[bot]
ca701d2e7b
Merge a7b121eccc into 5f8e70e636 2026-07-30 19:21:53 +08:00
5f8e70e636 Aeneas-compat: decompress step_2 negate-then-conditional-assign
Same documented rewrite as FieldElement::sqrt_ratio_i: semantically
identical and still constant-time, but avoids subtle's
ConditionallyNegatable blanket impl, which the verification toolchain
cannot translate. Unblocks extracting decompress for the phase-2 full
point-level lift.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 01:41:56 +02:00
dependabot[bot]
a7b121eccc
Bump ark-ec from 0.5.0 to 0.6.0
Bumps [ark-ec](https://github.com/arkworks-rs/algebra) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/arkworks-rs/algebra/releases)
- [Changelog](https://github.com/arkworks-rs/algebra/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arkworks-rs/algebra/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: ark-ec
  dependency-version: 0.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-30 15:47:11 +00:00
3 changed files with 139 additions and 22 deletions

150
Cargo.lock generated
View file

@ -77,9 +77,9 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc"
dependencies = [ dependencies = [
"ark-ec", "ark-ec 0.5.0",
"ark-ff", "ark-ff 0.5.0",
"ark-std", "ark-std 0.5.0",
] ]
[[package]] [[package]]
@ -89,10 +89,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce"
dependencies = [ dependencies = [
"ahash", "ahash",
"ark-ff", "ark-ff 0.5.0",
"ark-poly", "ark-poly 0.5.0",
"ark-serialize", "ark-serialize 0.5.0",
"ark-std", "ark-std 0.5.0",
"educe", "educe",
"fnv", "fnv",
"hashbrown 0.15.5", "hashbrown 0.15.5",
@ -103,16 +103,37 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "ark-ec"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8352a2b2aedf6ba2cc38f7520fc51191d518dde96175c729af19f2d059f191c4"
dependencies = [
"ahash",
"ark-ff 0.6.0",
"ark-poly 0.6.0",
"ark-serialize 0.6.0",
"ark-std 0.6.0",
"educe",
"fnv",
"hashbrown 0.17.1",
"itertools 0.14.0",
"num-bigint",
"num-integer",
"num-traits",
"zeroize",
]
[[package]] [[package]]
name = "ark-ff" name = "ark-ff"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70"
dependencies = [ dependencies = [
"ark-ff-asm", "ark-ff-asm 0.5.0",
"ark-ff-macros", "ark-ff-macros 0.5.0",
"ark-serialize", "ark-serialize 0.5.0",
"ark-std", "ark-std 0.5.0",
"arrayvec", "arrayvec",
"digest 0.10.7", "digest 0.10.7",
"educe", "educe",
@ -123,6 +144,23 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "ark-ff"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7a806ac6c8307b929df4645776290a50ee2aac754ad09d8bdf73391309e43af"
dependencies = [
"ark-ff-asm 0.6.0",
"ark-ff-macros 0.6.0",
"ark-serialize 0.6.0",
"ark-std 0.6.0",
"digest 0.10.7",
"educe",
"num-bigint",
"num-traits",
"zeroize",
]
[[package]] [[package]]
name = "ark-ff-asm" name = "ark-ff-asm"
version = "0.5.0" version = "0.5.0"
@ -133,6 +171,16 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "ark-ff-asm"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1479009684adc073dff49a1025d3a7065b317a9ead25aaaca38cdc70058ba8a2"
dependencies = [
"quote",
"syn",
]
[[package]] [[package]]
name = "ark-ff-macros" name = "ark-ff-macros"
version = "0.5.0" version = "0.5.0"
@ -146,6 +194,19 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "ark-ff-macros"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a0691ed21ef00ef89c1e9bda832eba493dda3ec2f8d892fb25b705f73f06bb8"
dependencies = [
"num-bigint",
"num-traits",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "ark-poly" name = "ark-poly"
version = "0.5.0" version = "0.5.0"
@ -153,27 +214,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27"
dependencies = [ dependencies = [
"ahash", "ahash",
"ark-ff", "ark-ff 0.5.0",
"ark-serialize", "ark-serialize 0.5.0",
"ark-std", "ark-std 0.5.0",
"educe", "educe",
"fnv", "fnv",
"hashbrown 0.15.5", "hashbrown 0.15.5",
] ]
[[package]]
name = "ark-poly"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75f55af10b672002b8d953e230282c51206842e20e5791a94432219b4201de5c"
dependencies = [
"ahash",
"ark-ff 0.6.0",
"ark-serialize 0.6.0",
"ark-std 0.6.0",
"educe",
"fnv",
"hashbrown 0.17.1",
]
[[package]] [[package]]
name = "ark-serialize" name = "ark-serialize"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7"
dependencies = [ dependencies = [
"ark-serialize-derive", "ark-serialize-derive 0.5.0",
"ark-std", "ark-std 0.5.0",
"arrayvec", "arrayvec",
"digest 0.10.7", "digest 0.10.7",
"num-bigint", "num-bigint",
] ]
[[package]]
name = "ark-serialize"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a74dd304fd536fb95d0a328e72be759209cc496a9da094c5bc56e5fea4f9e86b"
dependencies = [
"ark-serialize-derive 0.6.0",
"ark-std 0.6.0",
"digest 0.10.7",
"num-bigint",
]
[[package]] [[package]]
name = "ark-serialize-derive" name = "ark-serialize-derive"
version = "0.5.0" version = "0.5.0"
@ -185,6 +273,17 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "ark-serialize-derive"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f153690697a2b91e5e1251ff98411ee5371500a111a0fd317a70e588eb300f9"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "ark-std" name = "ark-std"
version = "0.5.0" version = "0.5.0"
@ -195,6 +294,16 @@ dependencies = [
"rand 0.8.6", "rand 0.8.6",
] ]
[[package]]
name = "ark-std"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "367c9c827ed431bff6868b7aa926e05b16eb46603cc8b6e768e4a5553fa1d155"
dependencies = [
"num-traits",
"rand 0.8.6",
]
[[package]] [[package]]
name = "arrayvec" name = "arrayvec"
version = "0.7.6" version = "0.7.6"
@ -947,6 +1056,9 @@ name = "hashbrown"
version = "0.17.1" version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
dependencies = [
"allocator-api2",
]
[[package]] [[package]]
name = "heck" name = "heck"
@ -1963,9 +2075,9 @@ name = "solana-bn254-syscall"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"ark-bn254", "ark-bn254",
"ark-ec", "ark-ec 0.6.0",
"ark-ff", "ark-ff 0.5.0",
"ark-serialize", "ark-serialize 0.5.0",
"bytemuck", "bytemuck",
] ]

View file

@ -18,7 +18,7 @@ rust-version = "1.89.0" # solana platform-tools
[workspace.dependencies] [workspace.dependencies]
ark-bn254 = "0.5.0" ark-bn254 = "0.5.0"
ark-ec = "0.5.0" ark-ec = "0.6.0"
ark-ff = "0.5.0" ark-ff = "0.5.0"
ark-serialize = "0.5.0" ark-serialize = "0.5.0"
bincode = "1" bincode = "1"

View file

@ -121,7 +121,6 @@ use {
use rand_core::{CryptoRng, RngCore}; use rand_core::{CryptoRng, RngCore};
use subtle::Choice; use subtle::Choice;
use subtle::ConditionallyNegatable;
use subtle::ConditionallySelectable; use subtle::ConditionallySelectable;
use subtle::ConstantTimeEq; use subtle::ConstantTimeEq;
@ -246,7 +245,13 @@ mod decompress {
// FieldElement::sqrt_ratio_i always returns the nonnegative square root, // FieldElement::sqrt_ratio_i always returns the nonnegative square root,
// so we negate according to the supplied sign bit. // so we negate according to the supplied sign bit.
let compressed_sign_bit = Choice::from(repr.as_bytes()[31] >> 7); let compressed_sign_bit = Choice::from(repr.as_bytes()[31] >> 7);
X.conditional_negate(compressed_sign_bit); // AENEAS-COMPAT: negate-then-conditional-assign instead of
// `X.conditional_negate(...)` — semantically identical and still
// constant-time, but avoids subtle's `ConditionallyNegatable`
// blanket impl which breaks the verification toolchain (the same
// documented rewrite as in `FieldElement::sqrt_ratio_i`).
let X_neg = -&X;
X.conditional_assign(&X_neg, compressed_sign_bit);
EdwardsPoint { EdwardsPoint {
X, X,