diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index cfba7246..911de2ca 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -1,39 +1,143 @@ -name: Build And Test +name: CI -on: [push] +on: + workflow_dispatch: + push: + branches: + - main + pull_request: + branches: + - main + +permissions: + contents: read + actions: read env: CARGO_TERM_COLOR: always - CARGOFLAGS: --workspace --all-targets --all-features --release + CARGO_INCREMENTAL: 0 + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true jobs: - build: - name: Compile code + fmt: + name: rustfmt runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Save build artifacts - uses: Swatinem/rust-cache@v2 + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: nightly + components: rustfmt + + - name: Run fmt + run: cargo +nightly fmt --all -- --check + + clippy: + name: clippy + runs-on: ubuntu-latest + needs: fmt + + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: "1.90.0" + components: clippy + + - name: Install SP1 system dependencies + run: | + sudo apt-get update + sudo apt-get install -y pkg-config libssl-dev curl ca-certificates + + - name: Install Go (for SP1 native gnark) + uses: actions/setup-go@v5 with: - shared-key: "build" + go-version: "1.22" + cache-dependency-path: "**/go.sum" - - name: Compile - run: cargo build $CARGOFLAGS --verbose + - name: Restore caches + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + ~/.sp1 + target + key: ${{ runner.os }}-clippy-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-clippy- + + - name: Install SP1up CLI + run: | + curl -L https://sp1up.succinct.xyz | bash -s -- -y + echo "$HOME/.sp1/bin" >> "$GITHUB_PATH" + + - name: Setup SP1 toolchain + run: | + sp1up + rustc +succinct --version + + - name: Build (prime SP1 assets, release) + run: cargo build --locked --release --workspace --all-targets --all-features - test: - name: Test code + - name: Run clippy + run: cargo clippy --locked --workspace --all-targets --all-features -- -D warnings + + build-and-test: + name: build-and-test runs-on: ubuntu-latest - needs: build + needs: + - fmt + - clippy steps: - uses: actions/checkout@v4 - - name: Restore cached build artifacts - uses: Swatinem/rust-cache@v2 + - uses: dtolnay/rust-toolchain@stable with: - shared-key: "build" + toolchain: "1.90.0" + + - name: Install SP1 system dependencies + run: | + sudo apt-get update + sudo apt-get install -y pkg-config libssl-dev curl ca-certificates + + - name: Install Go (for SP1 native gnark) + uses: actions/setup-go@v5 + with: + go-version: "1.22" + cache-dependency-path: "**/go.sum" + + - name: Restore caches + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + ~/.sp1 + target + key: ${{ runner.os }}-build-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-build- + + - name: Install SP1up CLI + run: | + curl -L https://sp1up.succinct.xyz | bash -s -- -y + echo "$HOME/.sp1/bin" >> "$GITHUB_PATH" + + - name: Setup SP1 toolchain + run: | + sp1up + rustc +succinct --version + + - name: Build + run: cargo build --locked --workspace --all-targets - - name: Run tests - run: cargo test $CARGOFLAGS + - name: Test + run: cargo test --locked --workspace --all-targets -- --nocapture diff --git a/.github/workflows/gate-count-badges.yml b/.github/workflows/gate-count-badges.yml index c05a4e9b..c4db1a0f 100644 --- a/.github/workflows/gate-count-badges.yml +++ b/.github/workflows/gate-count-badges.yml @@ -33,8 +33,14 @@ jobs: echo "Running gate count..." set -e # Exit on any error - # Run the example and capture output - cargo run --example groth16_gc_gate_count --release -- --json > raw_output.txt 2>&1 + # Run the example without SP1 soldering to avoid installing SP1 toolchain + cargo run \ + --release \ + --no-default-features \ + --features "tracing_max_level tracing_scopes" \ + --example groth16_gc_gate_count \ + -- \ + --json > raw_output.txt 2>&1 echo "Raw output from cargo run:" cat raw_output.txt diff --git a/.gitignore b/.gitignore index 562ff9da..877960cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target .DS_Store /circuit_component_macro/target +/sp1-soldering-program/target diff --git a/Cargo.lock b/Cargo.lock index 59eec446..9dd703e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,32 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aes" version = "0.8.4" @@ -40,6 +66,429 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-consensus" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b151e38e42f1586a01369ec52a6934702731d07e8509a7307331b09f6c46dc" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-trie", + "alloy-tx-macros", + "auto_impl", + "c-kzg", + "derive_more 2.0.1", + "either", + "k256", + "once_cell", + "rand 0.8.5", + "secp256k1 0.30.0", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-consensus-any" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2d5e8668ef6215efdb7dcca6f22277b4e483a5650e05f5de22b2350971f4b8" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-eip2124" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "crc", + "serde", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-eip2930" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", +] + +[[package]] +name = "alloy-eip7702" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-eips" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5434834adaf64fa20a6fb90877bc1d33214c41b055cc49f82189c98614368cc" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "auto_impl", + "c-kzg", + "derive_more 2.0.1", + "either", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-json-abi" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c69f6c9c68a1287c9d5ff903d0010726934de0dac10989be37b75a29190d55" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "http 1.3.1", + "serde", + "serde_json", + "thiserror 2.0.16", + "tracing", +] + +[[package]] +name = "alloy-network" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf2ae05219e73e0979cb2cf55612aafbab191d130f203079805eaf881cca58" +dependencies = [ + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-json-rpc", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rpc-types-any", + "alloy-rpc-types-eth", + "alloy-serde", + "alloy-signer", + "alloy-sol-types", + "async-trait", + "auto_impl", + "derive_more 2.0.1", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-network-primitives" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e58f4f345cef483eab7374f2b6056973c7419ffe8ad35e994b7a7f5d8e0c7ba4" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-primitives" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.0.1", + "foldhash 0.2.0", + "hashbrown 0.16.0", + "indexmap 2.11.4", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.2", + "ruint", + "rustc-hash 2.1.1", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "alloy-rpc-types-any" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbde0801a32d21c5f111f037bee7e22874836fba7add34ed4a6919932dd7cf23" +dependencies = [ + "alloy-consensus-any", + "alloy-rpc-types-eth", + "alloy-serde", +] + +[[package]] +name = "alloy-rpc-types-eth" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361cd87ead4ba7659bda8127902eda92d17fa7ceb18aba1676f7be10f7222487" +dependencies = [ + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.14.0", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-serde" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64600fc6c312b7e0ba76f73a381059af044f4f21f43e07f51f1fa76c868fe302" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5772858492b26f780468ae693405f895d6a27dea6e3eab2c36b6217de47c2647" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "either", + "elliptic-curve", + "k256", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-signer-aws" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66acf5f8745dd935e94855aada39d83b555112872321d9293748424de144897e" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "aws-config", + "aws-sdk-kms", + "k256", + "spki", + "thiserror 2.0.16", + "tracing", +] + +[[package]] +name = "alloy-signer-local" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4195b803d0a992d8dbaab2ca1986fc86533d4bc80967c0cce7668b26ad99ef9" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256", + "rand 0.8.5", + "thiserror 2.0.16", +] + +[[package]] +name = "alloy-sol-macro" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.11.4", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.106", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.106", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" +dependencies = [ + "serde", + "winnow 0.7.13", +] + +[[package]] +name = "alloy-sol-types" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "serde", +] + +[[package]] +name = "alloy-trie" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "arrayvec", + "derive_more 2.0.1", + "nybbles", + "serde", + "smallvec", + "tracing", +] + +[[package]] +name = "alloy-tx-macros" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8e52276fdb553d3c11563afad2898f4085165e4093604afe3d78b69afbf408f" +dependencies = [ + "alloy-primitives", + "darling", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.6.20" @@ -103,8 +552,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -116,14 +565,14 @@ dependencies = [ "ahash", "ark-crypto-primitives-macros", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-serialize", + "ark-serialize 0.5.0", "ark-snark", - "ark-std", + "ark-std 0.5.0", "blake2", "derivative", - "digest", + "digest 0.10.7", "fnv", "merlin", "rayon", @@ -148,36 +597,74 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", - "hashbrown", + "hashbrown 0.15.5", "itertools 0.13.0", - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits", "rayon", "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "educe", "itertools 0.13.0", - "num-bigint", + "num-bigint 0.4.6", "num-traits", "paste", "rayon", @@ -186,23 +673,68 @@ dependencies = [ [[package]] name = "ark-ff-asm" -version = "0.5.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" dependencies = [ "quote", - "syn 2.0.106", + "syn 1.0.109", ] [[package]] -name = "ark-ff-macros" -version = "0.5.0" +name = "ark-ff-asm" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.106", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", "quote", "syn 2.0.106", ] @@ -215,11 +747,11 @@ checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" dependencies = [ "ark-crypto-primitives", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "rayon", ] @@ -230,12 +762,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ "ahash", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", - "hashbrown", + "hashbrown 0.15.5", "rayon", ] @@ -245,8 +777,8 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" dependencies = [ - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", "tracing", "tracing-subscriber 0.2.25", ] @@ -258,8 +790,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8bd211c48debd3037b48873a7aa22c3aba034e83388aa4124795c9f220b88c7" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", ] [[package]] @@ -269,10 +822,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.5.0", "arrayvec", - "digest", - "num-bigint", + "digest 0.10.7", + "num-bigint 0.4.6", "rayon", ] @@ -293,10 +846,30 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" dependencies = [ - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", ] [[package]] @@ -307,7 +880,7 @@ checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "colored", "num-traits", - "rand", + "rand 0.8.5", "rayon", ] @@ -322,265 +895,4318 @@ name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] [[package]] -name = "autocfg" -version = "1.5.0" +name = "async-stream" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] [[package]] -name = "base16ct" -version = "0.2.0" +name = "async-stream-impl" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] -name = "base58ck" -version = "0.1.0" +name = "async-trait" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ - "bitcoin-internals", - "bitcoin_hashes", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "base64ct" -version = "1.8.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "bech32" -version = "0.11.0" +name = "auto_impl" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] -name = "bitcoin" -version = "0.32.7" +name = "autocfg" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda569d741b895131a88ee5589a467e73e9c4718e958ac9308e4f7dc44b6945" -dependencies = [ - "base58ck", - "bech32", - "bitcoin-internals", - "bitcoin-io", - "bitcoin-units", - "bitcoin_hashes", - "hex-conservative", - "hex_lit", - "secp256k1", - "serde", +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "aws-config" +version = "1.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37cf2b6af2a95a20e266782b4f76f1a5e12bf412a9db2de9c1e9123b9d8c0ad8" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "hex", + "http 1.3.1", + "ring", + "time", + "tokio", + "tracing", + "url", + "zeroize", ] [[package]] -name = "bitcoin-internals" -version = "0.3.0" +name = "aws-credential-types" +version = "1.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" +checksum = "faf26925f4a5b59eb76722b63c2892b1d70d06fa053c72e4a100ec308c1d47bc" dependencies = [ - "serde", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", ] [[package]] -name = "bitcoin-io" -version = "0.1.3" +name = "aws-lc-rs" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" +checksum = "879b6c89592deb404ba4dc0ae6b58ffd1795c78991cbb5b8bc441c48a070440d" +dependencies = [ + "aws-lc-sys", + "zeroize", +] [[package]] -name = "bitcoin-script" -version = "0.4.0" -source = "git+https://github.com/BitVM/rust-bitcoin-script#3c75a6e4cfddb800f57710d8270c0a1dc60eb57e" +name = "aws-lc-sys" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107a4e9d9cab9963e04e84bb8dee0e25f2a987f9a8bad5ed054abd439caa8f8c" dependencies = [ - "bitcoin", - "script-macro", - "stdext", + "bindgen 0.72.1", + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "aws-runtime" +version = "1.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa006bb32360ed90ac51203feafb9d02e3d21046e1fd3a450a404b90ea73e5d" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid", ] [[package]] -name = "bitcoin-script-stack" -version = "0.0.1" -source = "git+https://github.com/BitVM/rust-bitcoin-script-stack#643c5f1a44af448274849c01a5ae7fbdd54d8213" +name = "aws-sdk-kms" +version = "1.90.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b08a2b564e660ad69be524f569fea985380b15eea28694b8fd9f6206a437702b" dependencies = [ - "bitcoin", - "bitcoin-script", - "bitcoin-scriptexec", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bitcoin-scriptexec" -version = "0.0.0" -source = "git+https://github.com/BitVM/rust-bitcoin-scriptexec#b24608bff855ea8932ae236c7a04f13f730ab9f8" +name = "aws-sdk-sso" +version = "1.86.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0abbfab841446cce6e87af853a3ba2cc1bc9afcd3f3550dd556c43d434c86d" dependencies = [ - "bitcoin", - "clap", - "console_error_panic_hook", - "getrandom", - "lazy_static", - "serde", - "serde-wasm-bindgen", - "serde_json", - "wasm-bindgen", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bitcoin-units" -version = "0.1.2" +name = "aws-sdk-ssooidc" +version = "1.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" +checksum = "9a68d675582afea0e94d38b6ca9c5aaae4ca14f1d36faa6edb19b42e687e70d7" dependencies = [ - "bitcoin-internals", - "serde", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bitcoin_hashes" -version = "0.14.0" +name = "aws-sdk-sts" +version = "1.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +checksum = "d30990923f4f675523c51eb1c0dec9b752fb267b36a61e83cbc219c9d86da715" dependencies = [ - "bitcoin-io", - "hex-conservative", - "serde", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", ] [[package]] -name = "bitflags" -version = "1.3.2" +name = "aws-sigv4" +version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "bffc03068fbb9c8dd5ce1c6fb240678a5cffb86fb2b7b1985c999c4b83c8df68" +dependencies = [ + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.3.1", + "percent-encoding", + "sha2", + "time", + "tracing", +] [[package]] -name = "bitflags" -version = "2.9.4" +name = "aws-smithy-async" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "127fcfad33b7dfc531141fda7e1c402ac65f88aca5511a4d31e2e3d2cd01ce9c" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] [[package]] -name = "bitvec" -version = "1.0.1" +name = "aws-smithy-http" +version = "0.62.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "3feafd437c763db26aa04e0cc7591185d0961e64c61885bece0fb9d50ceac671" dependencies = [ - "funty", - "radium", - "tap", - "wyz", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", ] [[package]] -name = "bitvm" -version = "0.1.0" -source = "git+https://github.com/BitVM/BitVM?branch=main#9407adb6f41d48a9a683ab2a6da270e12fb52aff" -dependencies = [ - "ark-bn254", - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-groth16", - "ark-relations", - "ark-serialize", - "ark-std", - "bitcoin", - "bitcoin-script", - "bitcoin-script-stack", - "bitcoin-scriptexec", - "blake3", - "colored", - "itertools 0.13.0", - "num-bigint", - "num-traits", - "paste", - "rand", - "rand_chacha", - "regex", - "serde", - "sha2", - "tqdm", +name = "aws-smithy-http-client" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1053b5e587e6fa40ce5a79ea27957b04ba660baa02b28b7436f64850152234f1" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.27", + "h2 0.4.12", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.7.0", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.7", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.33", + "rustls-native-certs 0.8.2", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower 0.5.2", + "tracing", ] [[package]] -name = "blake2" -version = "0.10.6" +name = "aws-smithy-json" +version = "0.61.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +checksum = "cff418fc8ec5cadf8173b10125f05c2e7e1d46771406187b2c878557d4503390" dependencies = [ - "digest", + "aws-smithy-types", ] [[package]] -name = "blake3" -version = "1.8.2" +name = "aws-smithy-observability" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "2d1881b1ea6d313f9890710d65c158bdab6fb08c91ea825f74c1c8c357baf4cc" dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "digest", + "aws-smithy-runtime-api", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "aws-smithy-query" +version = "0.60.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d28a63441360c477465f80c7abac3b9c4d075ca638f982e605b7dc2a2c7156c9" dependencies = [ - "generic-array", + "aws-smithy-types", + "urlencoding", ] [[package]] -name = "bumpalo" -version = "3.19.0" +name = "aws-smithy-runtime" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "40ab99739082da5347660c556689256438defae3bcefd66c52b095905730e404" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-client", + "aws-smithy-observability", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "pin-project-lite", + "pin-utils", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3683c5b152d2ad753607179ed71988e8cfd52964443b4f74fd8e552d0bbfeb46" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.3.1", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f5b3a7486f6690ba25952cabf1e7d75e34d69eaff5081904a47bc79074d6457" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.60.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c34127e8c624bc2999f3b657e749c1393bedc9cd97b92a804db8ced4d2e163" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "1.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2fd329bf0e901ff3f60425691410c69094dc2a1f34b331f37bfc4e9ac1565a1" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version 0.4.1", + "tracing", +] + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "futures-core", + "getrandom 0.2.16", + "instant", + "pin-project-lite", + "rand 0.8.5", + "tokio", +] + +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base58ck" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +dependencies = [ + "bitcoin-internals", + "bitcoin_hashes", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.106", +] + +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.1", + "shlex", + "syn 2.0.106", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitcoin" +version = "0.32.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda569d741b895131a88ee5589a467e73e9c4718e958ac9308e4f7dc44b6945" +dependencies = [ + "base58ck", + "bech32", + "bitcoin-internals", + "bitcoin-io", + "bitcoin-units", + "bitcoin_hashes", + "hex-conservative", + "hex_lit", + "secp256k1 0.29.1", + "serde", +] + +[[package]] +name = "bitcoin-internals" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" +dependencies = [ + "serde", +] + +[[package]] +name = "bitcoin-io" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin-script" +version = "0.4.0" +source = "git+https://github.com/BitVM/rust-bitcoin-script#3c75a6e4cfddb800f57710d8270c0a1dc60eb57e" +dependencies = [ + "bitcoin", + "script-macro", + "stdext", +] + +[[package]] +name = "bitcoin-script-stack" +version = "0.0.1" +source = "git+https://github.com/BitVM/rust-bitcoin-script-stack#643c5f1a44af448274849c01a5ae7fbdd54d8213" +dependencies = [ + "bitcoin", + "bitcoin-script", + "bitcoin-scriptexec", +] + +[[package]] +name = "bitcoin-scriptexec" +version = "0.0.0" +source = "git+https://github.com/BitVM/rust-bitcoin-scriptexec#b24608bff855ea8932ae236c7a04f13f730ab9f8" +dependencies = [ + "bitcoin", + "clap", + "console_error_panic_hook", + "getrandom 0.2.16", + "lazy_static", + "serde", + "serde-wasm-bindgen", + "serde_json", + "wasm-bindgen", +] + +[[package]] +name = "bitcoin-units" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" +dependencies = [ + "bitcoin-internals", + "serde", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bitvm" +version = "0.1.0" +source = "git+https://github.com/BitVM/BitVM?branch=main#9407adb6f41d48a9a683ab2a6da270e12fb52aff" +dependencies = [ + "ark-bn254", + "ark-crypto-primitives", + "ark-ec", + "ark-ff 0.5.0", + "ark-groth16", + "ark-relations", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "bitcoin", + "bitcoin-script", + "bitcoin-script-stack", + "bitcoin-scriptexec", + "blake3", + "colored", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rand 0.8.5", + "rand_chacha 0.3.1", + "regex", + "serde", + "sha2", + "tqdm", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "ff 0.12.1", + "group 0.12.1", + "pairing", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "blst" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + +[[package]] +name = "c-kzg" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", +] + +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-husky" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad" + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.27", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cbindgen" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb" +dependencies = [ + "clap", + "heck 0.4.1", + "indexmap 2.11.4", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 2.0.106", + "tempfile", + "toml", +] + +[[package]] +name = "cc" +version = "1.2.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "circuit_component_macro" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "clap_lex" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-hex" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +dependencies = [ + "cfg-if", + "cpufeatures", + "proptest", + "serde_core", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core_affinity" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342" +dependencies = [ + "libc", + "num_cpus", + "winapi", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "ctrlc" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" +dependencies = [ + "dispatch", + "nix", + "windows-sys 0.61.2", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "serde", + "strsim", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dashu" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b3e5ac1e23ff1995ef05b912e2b012a8784506987a2651552db2c73fb3d7e0" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "dashu-macros", + "dashu-ratio", + "rustversion", +] + +[[package]] +name = "dashu-base" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b80bf6b85aa68c58ffea2ddb040109943049ce3fbdf4385d0380aef08ef289" + +[[package]] +name = "dashu-float" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85078445a8dbd2e1bd21f04a816f352db8d333643f0c9b78ca7c3d1df71063e7" +dependencies = [ + "dashu-base", + "dashu-int", + "num-modular", + "num-order", + "rustversion", + "static_assertions", +] + +[[package]] +name = "dashu-int" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee99d08031ca34a4d044efbbb21dff9b8c54bb9d8c82a189187c0651ffdb9fbf" +dependencies = [ + "cfg-if", + "dashu-base", + "num-modular", + "num-order", + "rustversion", + "static_assertions", +] + +[[package]] +name = "dashu-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93381c3ef6366766f6e9ed9cf09e4ef9dec69499baf04f0c60e70d653cf0ab10" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "dashu-ratio", + "paste", + "proc-macro2", + "quote", + "rustversion", +] + +[[package]] +name = "dashu-ratio" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e33b04dd7ce1ccf8a02a69d3419e354f2bbfdf4eb911a0b7465487248764c9" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "num-modular", + "num-order", + "rustversion", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.4.6", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "downloader" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac1e888d6830712d565b2f3a974be3200be9296bc1b03db8251a4cbf18a4a34" +dependencies = [ + "digest 0.10.7", + "futures", + "rand 0.8.5", + "reqwest", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff 0.13.1", + "generic-array 0.14.7", + "group 0.13.0", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "eventsource-stream" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" +dependencies = [ + "futures-core", + "nom", + "pin-project-lite", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" +dependencies = [ + "addchain", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + +[[package]] +name = "garbled-snark-verifier" +version = "0.5.0" +dependencies = [ + "aes", + "ark-bn254", + "ark-crypto-primitives", + "ark-ec", + "ark-ff 0.5.0", + "ark-groth16", + "ark-relations", + "ark-secp256k1", + "ark-serialize 0.5.0", + "ark-snark", + "ark-std 0.5.0", + "bitcoin", + "bitcoin-script", + "bitvec", + "bitvm", + "blake3", + "cargo-husky", + "circuit_component_macro", + "core_affinity", + "crossbeam", + "digest 0.10.7", + "dirs 6.0.0", + "hex", + "itertools 0.14.0", + "k256", + "num-bigint 0.4.6", + "num-traits", + "num_cpus", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "rkyv", + "serde", + "serde_json", + "sha2", + "slab", + "sp1-build", + "sp1-core-executor", + "sp1-core-machine", + "sp1-primitives", + "sp1-prover", + "sp1-sdk", + "sp1-stark", + "test-log", + "thiserror 2.0.16", + "tracing", + "tracing-log", + "tracing-subscriber 0.3.20", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "gen_ops" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "304de19db7028420975a296ab0fcbbc8e69438c4ed254a1e41e2a7f37d5f0e0a" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "generic-array" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96512db27971c2c3eece70a1e106fbe6c87760234e31e8f7e5634912fe52794a" +dependencies = [ + "serde", + "typenum", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "memuse", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "halo2" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" +dependencies = [ + "halo2_proofs", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core 0.6.4", + "rayon", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", + "serde", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex_lit" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http 1.3.1", + "hyper 1.7.0", + "hyper-util", + "rustls 0.23.33", + "rustls-native-certs 0.8.2", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper 1.7.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +dependencies = [ + "equivalent", + "hashbrown 0.15.5", + "serde", + "serde_core", +] + +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width", + "web-time", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jubjub" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" +dependencies = [ + "bitvec", + "bls12_381", + "ff 0.12.1", + "group 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "libc" +version = "0.2.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.1", +] + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.9.4", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "memuse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "munge" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-modular" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" + +[[package]] +name = "num-order" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" +dependencies = [ + "num-modular", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "nybbles" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" +dependencies = [ + "alloy-rlp", + "cfg-if", + "proptest", + "ruint", + "serde", + "smallvec", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p3-air" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05a97452c4b1cfa8626e69181d901fc8231d99ff7d87e9701a2e6b934606615" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" +dependencies = [ + "num-bigint 0.4.6", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0dd4d095d254783098bd09fc5fdf33fd781a1be54608ab93cb3ed4bd723da54" +dependencies = [ + "ff 0.13.1", + "num-bigint 0.4.6", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-challenger" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d18c223b7e0177f4ac91070fa3f6cc557d5ee3b279869924c3102fb1b20910" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b38fe979d53d4f1d64158c40b3cd9ea1bd6b7bc8f085e489165c542ef914ae28" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-field", + "p3-matrix", + "p3-util", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.6", + "num-traits", + "p3-util", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c274dab2dcd060cdea9ab3f8f7129f5fa5f08917d6092dc2b297a31d883aa0" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-interpolation" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed8de7333abb0ad0a17bb78726a43749cc7fcab4763f296894e8b2933841d4d8" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak-air" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c7ec21317c455d39588428e4ec85b96d663ff171ddf102a10e2ca54c942dea" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand 0.8.5", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f159e073afbee02c00d22390bf26ebb9ce03bbcd3e6dcd13c6a7a3811ab39608" +dependencies = [ + "itertools 0.12.1", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-poseidon2" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a86f29c32bf46fa4acb6547d2065a711e146d4faca388b56d75718c60a0097d" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group 0.12.1", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "pasta_curves" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "lazy_static", + "rand 0.8.5", + "static_assertions", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.1", + "group 0.13.0", + "lazy_static", + "rand 0.8.5", + "static_assertions", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.106", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.9.4", + "lazy_static", + "num-traits", + "rand 0.9.2", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "ptr_meta" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls 0.23.33", + "socket2 0.6.1", + "thiserror 2.0.16", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash 2.1.1", + "rustls 0.23.33", + "rustls-pki-types", + "slab", + "thiserror 2.0.16", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.1", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +dependencies = [ + "ptr_meta", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "serde", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", + "serde", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core 0.9.3", +] + +[[package]] +name = "range-set-blaze" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8421b5d459262eabbe49048d362897ff3e3830b44eac6cfe341d6acb2f0f13d2" +dependencies = [ + "gen_ops", + "itertools 0.12.1", + "num-integer", + "num-traits", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rayon-scan" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" +dependencies = [ + "rayon", +] + +[[package]] +name = "redox_syscall" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.16", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "regex" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] -name = "cargo-husky" -version = "1.5.0" +name = "regex-lite" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad" +checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" [[package]] -name = "cc" -version = "1.2.38" +name = "regex-syntax" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" + +[[package]] +name = "rend" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ - "find-msvc-tools", - "shlex", + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls 0.27.7", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.33", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "tower 0.5.2", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", ] [[package]] -name = "cfg-if" -version = "1.0.3" +name = "reqwest-middleware" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" +dependencies = [ + "anyhow", + "async-trait", + "http 1.3.1", + "reqwest", + "serde", + "thiserror 1.0.69", + "tower-service", +] [[package]] -name = "cipher" -version = "0.4.4" +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-common", - "inout", + "hmac", + "subtle", ] [[package]] -name = "circuit_component_macro" -version = "0.1.0" +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a640b26f007713818e9a9b65d34da1cf58538207b052916a83d80e43f3ffa4" +dependencies = [ + "hashbrown 0.15.5", + "munge", + "ptr_meta", + "rancor", + "rend", + "rkyv_derive", + "tinyvec", +] + +[[package]] +name = "rkyv_derive" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" dependencies = [ "proc-macro2", "quote", @@ -588,1169 +5214,1751 @@ dependencies = [ ] [[package]] -name = "clap" -version = "4.5.48" +name = "rlp" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "clap_builder", - "clap_derive", + "bytes", + "rustc-hex", ] [[package]] -name = "clap_builder" -version = "4.5.48" +name = "rrs-succinct" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "3372685893a9f67d18e98e792d690017287fd17379a83d798d958e517d380fa9" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "downcast-rs", + "num_enum", + "paste", ] [[package]] -name = "clap_derive" -version = "4.5.47" +name = "ruint" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.106", + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rand 0.9.2", + "rlp", + "ruint-macro", + "serde_core", + "valuable", + "zeroize", ] [[package]] -name = "clap_lex" -version = "0.7.5" +name = "ruint-macro" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] -name = "colorchoice" +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.7", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.5.1", +] + +[[package]] +name = "rustls-pemfile" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] [[package]] -name = "colored" +name = "rustls-pemfile" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "lazy_static", - "windows-sys 0.59.0", + "rustls-pki-types", ] [[package]] -name = "console_error_panic_hook" -version = "0.1.7" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", - "wasm-bindgen", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", ] [[package]] -name = "const-oid" -version = "0.9.6" +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "scc" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" +dependencies = [ + "sdd", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "script-macro" +version = "0.4.0" +source = "git+https://github.com/BitVM/rust-bitcoin-script#3c75a6e4cfddb800f57710d8270c0a1dc60eb57e" +dependencies = [ + "bitcoin", + "proc-macro-error", + "proc-macro2", + "quote", +] + +[[package]] +name = "sct" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "sdd" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" [[package]] -name = "core_affinity" -version = "0.8.3" +name = "sec1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "libc", - "num_cpus", - "winapi", + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "serdect", + "subtle", + "zeroize", ] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "secp256k1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "libc", + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", ] [[package]] -name = "crossbeam" -version = "0.8.4" +name = "secp256k1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", ] [[package]] -name = "crossbeam-channel" -version = "0.5.15" +name = "secp256k1-sys" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ - "crossbeam-utils", + "cc", ] [[package]] -name = "crossbeam-deque" -version = "0.8.6" +name = "security-framework" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "bitflags 2.9.4", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "security-framework" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "crossbeam-utils", + "bitflags 2.9.4", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] -name = "crossbeam-queue" -version = "0.3.12" +name = "security-framework-sys" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ - "crossbeam-utils", + "core-foundation-sys", + "libc", ] [[package]] -name = "crossbeam-utils" -version = "0.8.21" +name = "semver" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] [[package]] -name = "crossterm" -version = "0.25.0" +name = "semver" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", + "serde", + "serde_core", ] [[package]] -name = "crossterm_winapi" -version = "0.9.1" +name = "semver-parser" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" dependencies = [ - "winapi", + "pest", ] [[package]] -name = "crypto-bigint" -version = "0.5.5" +name = "serde" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", + "serde_core", + "serde_derive", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "serde-wasm-bindgen" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" dependencies = [ - "generic-array", - "typenum", + "js-sys", + "serde", + "wasm-bindgen", ] [[package]] -name = "der" -version = "0.7.10" +name = "serde_core" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" dependencies = [ - "const-oid", - "zeroize", + "serde_derive", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "serde_derive" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] -name = "digest" -version = "0.10.7" +name = "serde_json" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", ] [[package]] -name = "ecdsa" -version = "0.16.9" +name = "serde_path_to_error" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", + "itoa", + "serde", + "serde_core", ] [[package]] -name = "educe" -version = "0.6.0" +name = "serde_spanned" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 2.0.106", + "serde", ] [[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] -name = "enum-ordinalize" -version = "4.3.0" +name = "serde_with" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" dependencies = [ - "enum-ordinalize-derive", + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", + "serde_json", + "serde_with_macros", + "time", ] [[package]] -name = "enum-ordinalize-derive" -version = "4.3.1" +name = "serde_with_macros" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" dependencies = [ + "darling", "proc-macro2", "quote", "syn 2.0.106", ] [[package]] -name = "ff" -version = "0.13.1" +name = "serdect" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" dependencies = [ - "rand_core", - "subtle", + "base16ct", + "serde", ] [[package]] -name = "find-msvc-tools" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "funty" -version = "2.0.0" +name = "serial_test" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "garbled-snark-verifier" -version = "0.4.0" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" dependencies = [ - "aes", - "ark-bn254", - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-groth16", - "ark-relations", - "ark-secp256k1", - "ark-serialize", - "ark-snark", - "ark-std", - "bitcoin", - "bitcoin-script", - "bitvec", - "bitvm", - "blake3", - "cargo-husky", - "circuit_component_macro", - "core_affinity", - "crossbeam", - "digest", - "hex", - "itertools 0.14.0", - "k256", - "num-bigint", - "num-traits", - "num_cpus", - "rand", - "rand_chacha", - "rayon", - "serde", - "serde_json", - "sha2", - "slab", - "test-log", - "thiserror", - "tracing", - "tracing-log", - "tracing-subscriber 0.3.20", + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "serial_test_derive" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ - "typenum", - "version_check", - "zeroize", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "getrandom" -version = "0.2.16" +name = "sha2" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", + "cpufeatures", + "digest 0.10.7", ] [[package]] -name = "group" -version = "0.13.0" +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "ff", - "rand_core", - "subtle", + "digest 0.10.7", + "keccak", ] [[package]] -name = "hashbrown" -version = "0.15.5" +name = "sha3-asm" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ - "allocator-api2", + "cc", + "cfg-if", ] [[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] [[package]] -name = "hex" -version = "0.4.3" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "hex-conservative" -version = "0.2.1" +name = "signal-hook" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ - "arrayvec", + "libc", + "signal-hook-registry", ] [[package]] -name = "hex_lit" -version = "0.1.1" +name = "signal-hook-mio" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] [[package]] -name = "hmac" -version = "0.12.1" +name = "signal-hook-registry" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ - "digest", + "libc", ] [[package]] -name = "inout" -version = "0.1.4" +name = "signature" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "generic-array", + "digest 0.10.7", + "rand_core 0.6.4", ] [[package]] -name = "is_terminal_polyfill" -version = "1.70.1" +name = "size" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" [[package]] -name = "itertools" -version = "0.13.0" +name = "slab" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] -name = "itertools" -version = "0.14.0" +name = "smallvec" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" dependencies = [ - "either", + "serde", ] [[package]] -name = "itoa" -version = "1.0.15" +name = "snowbridge-amcl" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] [[package]] -name = "js-sys" -version = "0.3.80" +name = "socket2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ - "once_cell", - "wasm-bindgen", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "k256" -version = "0.13.4" +name = "socket2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2", - "signature", + "libc", + "windows-sys 0.60.2", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "sp1-build" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "52508b6f06d427e078b2d87e096e0adc3c3d4e0961d565d84961ce9d9c27c791" dependencies = [ - "cpufeatures", + "anyhow", + "cargo_metadata", + "chrono", + "clap", + "dirs 5.0.1", + "sp1-prover", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "sp1-core-executor" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "117e991e137c9121eac26b2fd06daaa8f9e7c118a167d9a977e0048ac2142fac" +dependencies = [ + "bincode", + "bytemuck", + "clap", + "elf", + "enum-map", + "eyre", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "nohash-hasher", + "num", + "p3-baby-bear", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "range-set-blaze", + "rrs-succinct", + "serde", + "serde_json", + "sp1-curves", + "sp1-primitives", + "sp1-stark", + "strum", + "strum_macros", + "subenum", + "thiserror 1.0.69", + "tiny-keccak", + "tracing", + "typenum", + "vec_map", +] [[package]] -name = "libc" -version = "0.2.176" +name = "sp1-core-machine" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "7b70e76953d1c4d507136b373bc198df0271d011c9acaa9b1eb8614dd65a0e04" +dependencies = [ + "bincode", + "cbindgen", + "cc", + "cfg-if", + "elliptic-curve", + "generic-array 1.1.0", + "glob", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "k256", + "num", + "num_cpus", + "p256", + "p3-air", + "p3-baby-bear", + "p3-challenger", + "p3-field", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "pathdiff", + "rand 0.8.5", + "rayon", + "rayon-scan", + "serde", + "serde_json", + "size", + "snowbridge-amcl", + "sp1-core-executor", + "sp1-curves", + "sp1-derive", + "sp1-primitives", + "sp1-stark", + "static_assertions", + "strum", + "strum_macros", + "tempfile", + "thiserror 1.0.69", + "tracing", + "tracing-forest", + "tracing-subscriber 0.3.20", + "typenum", + "web-time", +] [[package]] -name = "lock_api" -version = "0.4.13" +name = "sp1-cuda" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "e3552cda9c153e7604ba9ec53822214e32975dc9e484eff832ccddbc018524fb" dependencies = [ - "autocfg", - "scopeguard", + "bincode", + "ctrlc", + "prost", + "serde", + "sp1-core-machine", + "sp1-prover", + "tokio", + "tracing", + "twirp-rs", ] [[package]] -name = "log" -version = "0.4.28" +name = "sp1-curves" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "3e29cb79716167e58c0719d572e686880172f1816cd85e0acab74ea0ff3c795e" +dependencies = [ + "cfg-if", + "dashu", + "elliptic-curve", + "generic-array 1.1.0", + "itertools 0.13.0", + "k256", + "num", + "p256", + "p3-field", + "serde", + "snowbridge-amcl", + "sp1-primitives", + "sp1-stark", + "typenum", +] [[package]] -name = "matchers" -version = "0.2.0" +name = "sp1-derive" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +checksum = "7ac59616976c008e862f99d26fd0c1c037d464df33d9ca548be88f938f0b1bcf" dependencies = [ - "regex-automata", + "quote", + "syn 1.0.109", ] [[package]] -name = "memchr" -version = "2.7.5" +name = "sp1-primitives" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "0244dee3a7a0f88cf71c3edf518f4fc97794ae870a107cbe7c810ac3fbf879cb" +dependencies = [ + "bincode", + "blake3", + "cfg-if", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "serde", + "sha2", +] [[package]] -name = "merlin" -version = "3.0.0" +name = "sp1-prover" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +checksum = "ace68f9905360448e0b447a881b689204e7b2ee3a1481b49e91900564d50beb2" dependencies = [ - "byteorder", - "keccak", - "rand_core", - "zeroize", + "anyhow", + "bincode", + "clap", + "dirs 5.0.1", + "downloader", + "enum-map", + "eyre", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "lru", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rayon", + "serde", + "serde_json", + "serial_test", + "sha2", + "sp1-core-executor", + "sp1-core-machine", + "sp1-primitives", + "sp1-recursion-circuit", + "sp1-recursion-compiler", + "sp1-recursion-core", + "sp1-recursion-gnark-ffi", + "sp1-stark", + "thiserror 1.0.69", + "tracing", + "tracing-appender", + "tracing-subscriber 0.3.20", ] [[package]] -name = "mio" -version = "0.8.11" +name = "sp1-recursion-circuit" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "dac2a5bd8b39ebf83160a13595e5197f3f194ddcc6d77af01a14b02a4e7bed12" dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", + "hashbrown 0.14.5", + "itertools 0.13.0", + "num-traits", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rand 0.8.5", + "rayon", + "serde", + "sp1-core-executor", + "sp1-core-machine", + "sp1-derive", + "sp1-primitives", + "sp1-recursion-compiler", + "sp1-recursion-core", + "sp1-recursion-gnark-ffi", + "sp1-stark", + "tracing", ] [[package]] -name = "nu-ansi-term" -version = "0.50.1" +name = "sp1-recursion-compiler" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "5611ead360e9875f426c5add60ce8082bfee28302a5c7dbfa39cad02e9178f88" dependencies = [ - "windows-sys 0.52.0", + "backtrace", + "itertools 0.13.0", + "p3-baby-bear", + "p3-bn254-fr", + "p3-field", + "p3-symmetric", + "serde", + "sp1-core-machine", + "sp1-primitives", + "sp1-recursion-core", + "sp1-recursion-derive", + "sp1-stark", + "tracing", + "vec_map", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "sp1-recursion-core" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "79029408bee7a503394ab9d738432e709475976034348d5107a1d1a0b06dc287" dependencies = [ - "num-integer", - "num-traits", - "rand", + "backtrace", + "cbindgen", + "cc", + "cfg-if", + "ff 0.13.1", + "glob", + "hashbrown 0.14.5", + "itertools 0.13.0", + "num_cpus", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "pathdiff", + "rand 0.8.5", + "serde", + "sp1-core-machine", + "sp1-derive", + "sp1-primitives", + "sp1-stark", + "static_assertions", + "thiserror 1.0.69", + "tracing", + "vec_map", + "zkhash", ] [[package]] -name = "num-integer" -version = "0.1.46" +name = "sp1-recursion-derive" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "632f557f5bbfc8bc21b2bc319d3a375b46ea4522c00b875f02d73e4c0709b023" dependencies = [ - "num-traits", + "quote", + "syn 1.0.109", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "sp1-recursion-gnark-ffi" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "ae30a1148f569a2bd133b5c666654132e0088c1762b826141cca7209106bfb23" dependencies = [ - "autocfg", + "anyhow", + "bincode", + "bindgen 0.70.1", + "cc", + "cfg-if", + "hex", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-field", + "p3-symmetric", + "serde", + "serde_json", + "sha2", + "sp1-core-machine", + "sp1-recursion-compiler", + "sp1-stark", + "tempfile", + "tracing", ] [[package]] -name = "num_cpus" -version = "1.17.0" +name = "sp1-sdk" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +checksum = "f5fcae977c189e0f8e08dafa115add26d39b972b6e672b8e9f772db4655259de" dependencies = [ - "hermit-abi", - "libc", + "alloy-primitives", + "alloy-signer", + "alloy-signer-aws", + "alloy-signer-local", + "alloy-sol-types", + "anyhow", + "async-trait", + "aws-config", + "aws-sdk-kms", + "backoff", + "bincode", + "cfg-if", + "dirs 5.0.1", + "eventsource-stream", + "futures", + "hashbrown 0.14.5", + "hex", + "indicatif", + "itertools 0.13.0", + "k256", + "p3-baby-bear", + "p3-field", + "p3-fri", + "prost", + "reqwest", + "reqwest-middleware", + "rustls 0.23.33", + "serde", + "serde_json", + "sp1-build", + "sp1-core-executor", + "sp1-core-machine", + "sp1-cuda", + "sp1-primitives", + "sp1-prover", + "sp1-stark", + "strum", + "strum_macros", + "sysinfo", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tonic", + "tracing", + "twirp-rs", ] [[package]] -name = "once_cell" -version = "1.21.3" +name = "sp1-stark" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "1f0cdde80366245a374d29fecdde2881286002a6e3f51b84f54b86560ed026e5" +dependencies = [ + "arrayref", + "hashbrown 0.14.5", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "p3-air", + "p3-baby-bear", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rayon-scan", + "serde", + "sp1-derive", + "sp1-primitives", + "strum", + "sysinfo", + "tracing", +] [[package]] -name = "once_cell_polyfill" -version = "1.70.1" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] -name = "parking_lot" -version = "0.12.4" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ - "lock_api", - "parking_lot_core", + "base64ct", + "der", ] [[package]] -name = "parking_lot_core" -version = "0.9.11" +name = "stable_deref_trait" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] -name = "paste" -version = "1.0.15" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "pin-project-lite" -version = "0.2.16" +name = "stdext" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "4af28eeb7c18ac2dbdb255d40bee63f203120e1db6b0024b177746ebec7049c1" [[package]] -name = "pkcs8" -version = "0.10.2" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "zerocopy", + "strum_macros", ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "proc-macro-error-attr", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", - "version_check", + "rustversion", + "syn 2.0.106", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "subenum" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "ec3d08fe7078c57309d5c3d938e50eba95ba1d33b9c3a101a8465fc6861a5416" dependencies = [ + "heck 0.5.0", "proc-macro2", "quote", - "version_check", + "syn 2.0.106", ] [[package]] -name = "proc-macro2" -version = "1.0.101" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" -dependencies = [ - "unicode-ident", -] +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "quote" -version = "1.0.40" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" +name = "syn" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "syn-solidity" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" dependencies = [ - "ppv-lite86", - "rand_core", + "paste", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "getrandom", + "futures-core", ] [[package]] -name = "rayon" -version = "1.11.0" +name = "synstructure" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ - "either", - "rayon-core", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "rayon-core" -version = "1.13.0" +name = "sysinfo" +version = "0.30.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "windows", ] [[package]] -name = "redox_syscall" -version = "0.5.17" +name = "tap" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" -dependencies = [ - "bitflags 2.9.4", -] +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] -name = "regex" -version = "1.11.2" +name = "tempfile" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", ] [[package]] -name = "regex-automata" -version = "0.4.10" +name = "test-log" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "1e33b98a582ea0be1168eba097538ee8dd4bbe0f2b01b22ac92ea30054e5be7b" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "test-log-macros", + "tracing-subscriber 0.3.20", ] [[package]] -name = "regex-syntax" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" - -[[package]] -name = "rfc6979" -version = "0.4.0" +name = "test-log-macros" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" dependencies = [ - "hmac", - "subtle", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.20" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "thiserror" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "script-macro" -version = "0.4.0" -source = "git+https://github.com/BitVM/rust-bitcoin-script#3c75a6e4cfddb800f57710d8270c0a1dc60eb57e" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "bitcoin", - "proc-macro-error", - "proc-macro2", - "quote", + "thiserror-impl 2.0.16", ] [[package]] -name = "sec1" -version = "0.7.3" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "secp256k1" -version = "0.29.1" +name = "thiserror-impl" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ - "bitcoin_hashes", - "rand", - "secp256k1-sys", - "serde", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "secp256k1-sys" -version = "0.10.1" +name = "thread_local" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ - "cc", + "cfg-if", ] [[package]] -name = "serde" -version = "1.0.226" +name = "threadpool" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" dependencies = [ - "serde_core", - "serde_derive", + "num_cpus", ] [[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" +name = "time" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ - "js-sys", + "deranged", + "itoa", + "num-conv", + "powerfmt", "serde", - "wasm-bindgen", + "time-core", + "time-macros", ] [[package]] -name = "serde_core" -version = "1.0.226" +name = "time-core" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" -dependencies = [ - "serde_derive", -] +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] -name = "serde_derive" -version = "1.0.226" +name = "time-macros" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "num-conv", + "time-core", ] [[package]] -name = "serde_json" -version = "1.0.145" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", + "crunchy", ] [[package]] -name = "sha2" -version = "0.10.9" +name = "tinystr" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ - "cfg-if", - "cpufeatures", - "digest", + "displaydoc", + "zerovec", ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "tinyvec" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ - "lazy_static", + "tinyvec_macros", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "signal-hook" -version = "0.3.18" +name = "tokio" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ + "bytes", "libc", + "mio 1.1.0", + "parking_lot", + "pin-project-lite", "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "windows-sys 0.61.2", ] [[package]] -name = "signal-hook-mio" -version = "0.2.4" +name = "tokio-macros" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ - "libc", - "mio", - "signal-hook", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "signal-hook-registry" -version = "1.4.6" +name = "tokio-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "libc", + "rustls 0.21.12", + "tokio", ] [[package]] -name = "signature" -version = "2.2.0" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "digest", - "rand_core", + "rustls 0.23.33", + "tokio", ] [[package]] -name = "slab" -version = "0.4.11" +name = "tokio-stream" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] [[package]] -name = "smallvec" -version = "1.15.1" +name = "tokio-util" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] [[package]] -name = "spki" -version = "0.7.3" +name = "toml" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ - "base64ct", - "der", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] -name = "stdext" -version = "0.3.3" +name = "toml_datetime" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4af28eeb7c18ac2dbdb255d40bee63f203120e1db6b0024b177746ebec7049c1" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] [[package]] -name = "strsim" -version = "0.11.1" +name = "toml_datetime" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] [[package]] -name = "subtle" -version = "2.6.1" +name = "toml_edit" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.6.11", + "winnow 0.5.40", +] [[package]] -name = "syn" -version = "1.0.109" +name = "toml_edit" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "indexmap 2.11.4", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow 0.7.13", ] [[package]] -name = "syn" -version = "2.0.106" +name = "toml_edit" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.13", ] [[package]] -name = "tap" -version = "1.0.1" +name = "toml_parser" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow 0.7.13", +] [[package]] -name = "test-log" -version = "0.2.18" +name = "toml_write" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e33b98a582ea0be1168eba097538ee8dd4bbe0f2b01b22ac92ea30054e5be7b" -dependencies = [ - "test-log-macros", - "tracing-subscriber 0.3.20", +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2 0.4.12", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "rustls-native-certs 0.8.2", + "rustls-pemfile 2.2.0", + "socket2 0.5.10", + "tokio", + "tokio-rustls 0.26.4", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "test-log-macros" -version = "0.2.18" +name = "tower" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "thiserror" -version = "2.0.16" +name = "tower" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ - "thiserror-impl", + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "thiserror-impl" -version = "2.0.16" +name = "tower-http" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "bitflags 2.9.4", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower 0.5.2", + "tower-layer", + "tower-service", ] [[package]] -name = "thread_local" -version = "1.1.9" +name = "tower-layer" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tqdm" @@ -1769,11 +6977,24 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror 1.0.69", + "time", + "tracing-subscriber 0.3.20", +] + [[package]] name = "tracing-attributes" version = "0.1.30" @@ -1789,61 +7010,168 @@ dependencies = [ name = "tracing-core" version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror 1.0.69", + "tracing", + "tracing-subscriber 0.3.20", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twirp-rs" +version = "0.13.0-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27dfcc06b8d9262bc2d4b8d1847c56af9971a52dd8a0076876de9db763227d0d" +dependencies = [ + "async-trait", + "axum", + "futures", + "http 1.3.1", + "http-body-util", + "hyper 1.7.0", + "prost", + "reqwest", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tower 0.5.2", + "url", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] -name = "tracing-log" -version = "0.2.0" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] -name = "tracing-subscriber" -version = "0.2.25" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", -] +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "tracing-subscriber" -version = "0.3.20" +name = "url" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", + "form_urlencoded", + "idna", + "percent-encoding", + "serde", ] [[package]] -name = "typenum" -version = "1.18.0" +name = "urlencoding" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] -name = "unicode-ident" -version = "1.0.19" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" @@ -1851,24 +7179,76 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "valuable" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +dependencies = [ + "serde", +] + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.103" @@ -1896,6 +7276,19 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.103" @@ -1928,6 +7321,48 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1950,12 +7385,90 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "windows-link" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -1992,6 +7505,15 @@ dependencies = [ "windows-targets 0.53.3", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -2029,7 +7551,7 @@ version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -2178,6 +7700,36 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + [[package]] name = "wyz" version = "0.5.1" @@ -2187,6 +7739,36 @@ dependencies = [ "tap", ] +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.8.27" @@ -2207,6 +7789,27 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + [[package]] name = "zeroize" version = "1.8.1" @@ -2226,3 +7829,63 @@ dependencies = [ "quote", "syn 2.0.106", ] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4352d1081da6922701401cdd4cbf29a2723feb4cfabb5771f6fee8e9276da1c7" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bitvec", + "blake2", + "bls12_381", + "byteorder", + "cfg-if", + "group 0.12.1", + "group 0.13.0", + "halo2", + "hex", + "jubjub", + "lazy_static", + "pasta_curves 0.5.1", + "rand 0.8.5", + "serde", + "sha2", + "sha3", + "subtle", +] diff --git a/Cargo.toml b/Cargo.toml index 87a99efc..452c7e1d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garbled-snark-verifier" -version = "0.4.0" +version = "0.5.0" edition = "2024" authors = ["BitVM Alliance"] license = "GPL-3.0-only" @@ -14,9 +14,12 @@ keywords = [ "groth16", ] description = "Garbled-circuit SNARK verifier using Groth16 (BN254), with reusable gadgets and ergonomic circuit composition." +resolver = "2" [features] -default = ["tracing_max_level", "tracing_scopes"] +default = ["tracing_max_level", "tracing_scopes", "sp1-soldering"] +sp1-soldering = ["sp1-prover", "sp1-core-machine", "sp1-core-executor", "sp1-primitives", "sp1-stark"] + tracing_max_level = ["tracing/max_level_trace", "tracing/release_max_level_info"] tracing_scopes = [] @@ -28,43 +31,55 @@ ark-ec = "0.5.0" ark-ff = "0.5.0" ark-groth16 = "0.5.0" ark-relations = "0.5.1" +ark-secp256k1 = "0.5.0" +ark-serialize = "0.5.0" ark-snark = "0.5.1" ark-std = "0.5.0" bitvec = "1.0.1" blake3 = { version = "1.6.1", features = ["traits-preview"] } circuit_component_macro = { path = "circuit_component_macro" } +core_affinity = "0.8" crossbeam = "0.8" digest = "0.10" itertools = "0.14.0" -tracing = { version = "0.1.41", features = ["attributes", "std"] } -tracing-subscriber = { version = "0.3.20", features = ["env-filter", "fmt", "registry"] } -tracing-log = "0.2" num-bigint = { version = "0.4", features = ["rand"] } num-traits = "0.2" +num_cpus = "1.16" rand = "0.8" # using old version for consistency with ark rand_chacha = "0.3" # using old version for consistency with ark rayon = "1.10.0" -core_affinity = "0.8" -num_cpus = "1.16" +rkyv = { version = "0.8", default-features = false, features = ["alloc"] } +serde = { version = "1.0.225", features = ["derive"] } +serde_json = "1.0" slab = "0.4.11" thiserror = "2.0.12" -serde_json = "1.0" -serde = { version = "1.0.225", features = ["derive"] } -ark-serialize = "0.5.0" -ark-secp256k1 = "0.5.0" +tracing = { version = "0.1.41", features = ["attributes", "std"] } +tracing-log = "0.2" +tracing-subscriber = { version = "0.3.20", features = ["env-filter", "fmt", "registry"] } bitcoin = { version = "0.32.7", features = ["rand", "rand-std"] } sha2 = "0.10.9" hex = "0.4.3" +sp1-prover = { version = "5.2", features = ["native-gnark"], optional = true } +sp1-core-machine = { version = "5.2", optional = true } +sp1-core-executor = { version = "5.2", optional = true } +sp1-primitives = { version = "5.2", optional = true } +sp1-stark = { version = "5.2", optional = true } +dirs = "6.0.0" + +[build-dependencies] +sp1-build = "5.2" +sp1-sdk = "5.2" + [dev-dependencies] ark-ec = "0.5.0" ark-relations = "0.5.0" -serde_json = "1.0" -test-log = { version = "0.2.8", default-features = false, features = ["trace"] } bitcoin-script = { git = "https://github.com/BitVM/rust-bitcoin-script" } bitvm = { git = "https://github.com/BitVM/BitVM", branch = "main" } k256 = "0.13.4" +serde_json = "1.0" +test-log = { version = "0.2.8", default-features = false, features = ["trace"] } # Install Git hooks via cargo-husky [dev-dependencies.cargo-husky] @@ -83,3 +98,11 @@ panic = "abort" # Faster execution, smaller binary # `cargo-husky` is intentionally present for git hooks and should be ignored by udeps development = ["cargo-husky"] normal = ["aes"] + +[profile.release] +lto = "thin" # try "fat" if you can afford link time +codegen-units = 1 # maximize inlining decisions +panic = "abort" +incremental = false +strip = "symbols" # if you don't need debug symbols in release + diff --git a/build.rs b/build.rs new file mode 100644 index 00000000..3b4a2333 --- /dev/null +++ b/build.rs @@ -0,0 +1,13 @@ +fn main() { + // Example: checking if the "fast-math" feature is enabled + if std::env::var("CARGO_FEATURE_SP1_SOLDERING").is_ok() { + println!("cargo:rerun-if-changed=sp1-soldering-program/Cargo.toml"); + println!("cargo:rerun-if-changed=sp1-soldering-program/src/main.rs"); + println!("cargo:rerun-if-env-changed=SP1_DEV_MODE"); + + sp1_build::build_program_with_args("sp1-soldering-program", Default::default()); + _ = sp1_sdk::install::try_install_circuit_artifacts("groth16"); + } else { + println!("no soldering"); + } +} diff --git a/examples/groth16_cut_and_choose.rs b/examples/groth16_cut_and_choose.rs index 2308debe..36d91c02 100644 --- a/examples/groth16_cut_and_choose.rs +++ b/examples/groth16_cut_and_choose.rs @@ -1,10 +1,12 @@ +//! High-level driver showcasing the cut-and-choose Setup/Evaluate flow from +//! `docs/gsv_spec.md` using the Groth16 verifier gadget. use std::{path::PathBuf, thread}; use ark_ec::AffineRepr; use ark_ff::AdditiveGroup; use crossbeam::channel; use garbled_snark_verifier::{ - EvaluatedWire, GarbledInstanceCommit, OpenForInstance, S, + CommitPhaseOne, CommitPhaseTwo, EvaluatedWire, OpenForInstance, S, ark::{ self, Bn254, CircuitSpecificSetupSNARK, Groth16 as ArkGroth16, ProvingKey as ArkProvingKey, SNARK, UniformRand, @@ -13,6 +15,7 @@ use garbled_snark_verifier::{ cut_and_choose::FileCiphertextHandlerProvider, garbled_groth16, groth16_cut_and_choose::{self as ccn, EvaluatorCaseInput}, + sp1_soldering::SolderingProof, }; use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha20Rng; @@ -26,18 +29,31 @@ const K_CONSTRAINTS: u32 = 5; // 2^k constraints const IS_PROOF_CORRECT: bool = true; const IS_PRE_BOOLEAN_EXEC: bool = false; -enum G2EMsg { - // Garbler -> Evaluator: commitments for all instances - Commits(Vec), - // Garbler -> Evaluator: indices and seeds for instances to open +// Calculate and display total gates to process +const GATES_PER_INSTANCE: u64 = 11_174_708_821; + +use garbled_snark_verifier::hashers::Sha256LabelCommitHasher as ExampleHasher; + +/// Messages emitted by the Garbler during Setup (spec Steps 1–4). +enum SetupBroadcast { + /// Step 1.2 — `Commit₁(i)` for every instance (ciphertext hash, inputs, outputs, constants). + Commit1(Vec>), + /// Step 1.4 — `Commit₂(i)` records with nonce-injected input commitments. + Commit2(Vec>), + /// Step 3 — seeds for all challenge instances (open set). OpenSeeds(Vec<(usize, ccn::Seed)>), - // Garbler -> Evaluator: fully built evaluator inputs for finalized instances - OpenLabels(Vec), + /// Step 4 — SP1-based soldering proof plus per-instance deltas. + SolderingProof(Box), + /// Base evaluator labels used to derive finalized inputs post-soldering. + BaseInput(Box), } -enum E2GMsg { - // Evaluator -> Garbler: senders to forward ciphertexts for finalized instances - Challenge(Vec<(usize, CTH)>), +/// Messages emitted by the Evaluator during Setup. +enum SetupResponse { + /// Step 1.3 — 128-bit nonce that hardens input label commitments. + Commit2Nonce(S), + /// Step 2 — finalization challenge specifying the evaluation set plus ciphertext handlers. + FinalizeChallenge(Vec<(usize, CTH)>), } // Simple multiplicative circuit used to produce a valid Groth16 proof. @@ -79,9 +95,6 @@ impl ark::ConstraintSynthesizer for DummyCircuit { } } -// Calculate and display total gates to process -const GATES_PER_INSTANCE: u64 = 11_174_708_821; - fn main() { if !garbled_snark_verifier::hardware_aes_available() { eprintln!( @@ -132,8 +145,8 @@ fn main() { GATES_PER_INSTANCE as f64 / 1_000_000_000.0 ); - let (g2e_tx, g2e_rx) = channel::unbounded::(); - let (e2g_tx, e2g_rx) = channel::unbounded::>(); + let (g2e_tx, g2e_rx) = channel::unbounded::(); + let (e2g_tx, e2g_rx) = channel::unbounded::>(); let garbler_cfg = ccn::Config::new(total, finalize, g_input.clone()); let evaluator_cfg = garbler_cfg.clone(); @@ -167,8 +180,8 @@ fn run_garbler( pk: ArkProvingKey, circuit: DummyCircuit, public_input: ark::Fr, - g2e_tx: channel::Sender, - e2g_rx: channel::Receiver>, + g2e_tx: channel::Sender, + e2g_rx: channel::Receiver>, ) { let mut seed_rng = ChaCha20Rng::seed_from_u64(rand::thread_rng().r#gen()); @@ -180,11 +193,31 @@ fn run_garbler( let mut g = ccn::Garbler::create(&mut seed_rng, cfg.clone()); + // Step 1.2 — Garbler publishes Commit₁ for every instance. + g2e_tx + .send(SetupBroadcast::Commit1( + g.commit_phase_one::(), + )) + .expect("send commits"); + + // Step 1.3 — Evaluator samples a nonce that will harden input label commits. + let SetupResponse::Commit2Nonce(nonce) = e2g_rx.recv().expect("recv nonce senders") else { + panic!("unexpected message; expected nonce") + }; + + // Step 1.4 — Garbler republishes input commitments blended with the nonce. g2e_tx - .send(G2EMsg::Commits(g.commit())) + .send(SetupBroadcast::Commit2( + g.commit_phase_two::(nonce), + )) .expect("send commits"); - let E2GMsg::Challenge(finalize_senders) = e2g_rx.recv().expect("recv finalize senders"); + // Step 2 — Evaluator challenges the Garbler with the finalize set. + let SetupResponse::FinalizeChallenge(finalize_senders) = + e2g_rx.recv().expect("recv finalize senders") + else { + panic!("unexpected message; expected challenge") + }; let mut seeds = vec![]; let mut threads = vec![]; @@ -200,15 +233,27 @@ fn run_garbler( } g2e_tx - .send(G2EMsg::OpenSeeds(seeds)) + .send(SetupBroadcast::OpenSeeds(seeds)) .expect("send open_result"); + // Single-machine demo: run stages sequentially to avoid resource contention. + info!("single-machine demo: joining regarbling before soldering/evaluation"); threads.into_iter().for_each(|th| { if let Err(err) = th.join() { error!("while regarbling: {err:?}") } }); + // Produce and send soldering proof (timed via span; no progress output) + { + let _span = tracing::info_span!("soldering").entered(); + info!("start"); + let proof = g.do_soldering(); + g2e_tx + .send(SetupBroadcast::SolderingProof(Box::new(proof))) + .expect("send soldering proof"); + } + let challenge_proof = ArkGroth16::::prove(&pk, circuit, &mut ChaCha20Rng::seed_from_u64(42)) .expect("prove"); @@ -222,15 +267,6 @@ fn run_garbler( "Proof must be valid before garbling!" ); - let is_valid = ArkGroth16::::verify(&cfg.input().vk, &[public_input], &challenge_proof) - .expect("verify"); - - info!("Proof is_valid: {is_valid}"); - assert_eq!( - is_valid, IS_PROOF_CORRECT, - "Proof must be {IS_PROOF_CORRECT} before garbling!" - ); - // Test only if IS_PRE_BOOLEAN_EXEC { let streaming_result: garbled_snark_verifier::circuit::StreamingResult<_, _, bool> = @@ -255,26 +291,45 @@ fn run_garbler( let fin_inputs = g.prepare_input_labels(vec![public_input], challenge_proof); + // Only send base-case input labels; derive others via soldering deltas on evaluator side + assert!(!fin_inputs.is_empty(), "no finalized inputs prepared"); + let base_case = fin_inputs.into_iter().next().expect("base case"); + g2e_tx - .send(G2EMsg::OpenLabels(fin_inputs)) - .expect("send finalized evaluator inputs"); + .send(SetupBroadcast::BaseInput(Box::new(base_case))) + .expect("send base evaluator input labels") } fn run_evaluator( cfg: ccn::Config, out_dir: PathBuf, - g2e_rx: channel::Receiver, - e2g_tx: channel::Sender>, + g2e_rx: channel::Receiver, + e2g_tx: channel::Sender>, ) -> Vec<(usize, EvaluatedWire)> { let mut rng = ChaCha20Rng::seed_from_u64(rand::thread_rng().r#gen()); let finalize = cfg.to_finalize(); - let G2EMsg::Commits(commits) = g2e_rx.recv().expect("recv commits") else { + // Step 1.2 — receive Commit₁ batch. + let SetupBroadcast::Commit1(commits) = g2e_rx.recv().expect("recv commits") else { panic!("unexpected message; expected commits") }; - let eval = ccn::Evaluator::create(&mut rng, cfg.clone(), commits); + let mut eval = ccn::Evaluator::::create(&mut rng, cfg.clone(), commits); + + let nonce = eval.get_nonce(); + + // Step 1.3 — send the nonce back to the Garbler. + e2g_tx + .send(SetupResponse::Commit2Nonce(nonce)) + .expect("send nonce to garbler"); + + // Step 1.4 — receive Commit₂ batch. + let SetupBroadcast::Commit2(commits) = g2e_rx.recv().expect("recv second commit") else { + panic!("unexpected message; expected second commit") + }; + + eval.fill_second_commit(commits); let finalize_indices: Vec = eval.finalized_indexes().to_vec(); @@ -297,11 +352,12 @@ fn run_evaluator( finalize_indices[0] ); + // Step 2 — send the finalize challenge back to the Garbler. e2g_tx - .send(E2GMsg::Challenge(senders)) - .expect("send finalize senders to garbler"); + .send(SetupResponse::FinalizeChallenge(senders)) + .expect("send finalize challenge to garbler"); - let G2EMsg::OpenSeeds(open_result) = g2e_rx.recv().expect("recv open_result") else { + let SetupBroadcast::OpenSeeds(open_result) = g2e_rx.recv().expect("recv open_result") else { panic!("unexpected message; expected open seeds") }; @@ -314,9 +370,20 @@ fn run_evaluator( ) .expect("regarbling checks"); - let Ok(G2EMsg::OpenLabels(cases)) = g2e_rx.recv() else { - panic!("unexpected message; expected finalized inputs") + // Verify soldering proof binds inputs to commits + let SetupBroadcast::SolderingProof(proof) = g2e_rx.recv().expect("recv soldering proof") else { + panic!("unexpected message; expected soldering proof") + }; + + eval.verify_soldering_against_commits(*proof) + .expect("soldering verify"); + + // Receive constants for additional instances + // Receive the base-case evaluator input (labels) + let SetupBroadcast::BaseInput(base_case) = g2e_rx.recv().expect("recv base input") else { + panic!("unexpected message; expected base evaluator input") }; - eval.evaluate_from(&out_dir, cases).unwrap() + eval.run_evaluate_with_soldered_instances(&out_dir, *base_case) + .expect("soldered evaluate") } diff --git a/sp1-soldering-program/Cargo.lock b/sp1-soldering-program/Cargo.lock new file mode 100644 index 00000000..0ee932c0 --- /dev/null +++ b/sp1-soldering-program/Cargo.lock @@ -0,0 +1,719 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "munge" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "p3-baby-bear" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" +dependencies = [ + "num-bigint", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +dependencies = [ + "itertools", + "num-bigint", + "num-traits", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-matrix" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +dependencies = [ + "itertools", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" + +[[package]] +name = "p3-mds" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" +dependencies = [ + "itertools", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-poseidon2" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" +dependencies = [ + "itertools", + "p3-field", + "serde", +] + +[[package]] +name = "p3-util" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" +dependencies = [ + "serde", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "ptr_meta" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +dependencies = [ + "ptr_meta", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rend" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" + +[[package]] +name = "rkyv" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a640b26f007713818e9a9b65d34da1cf58538207b052916a83d80e43f3ffa4" +dependencies = [ + "hashbrown", + "munge", + "ptr_meta", + "rancor", + "rend", + "rkyv_derive", + "tinyvec", +] + +[[package]] +name = "rkyv_derive" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha2-0.10.9-sp1-4.0.0#0b1945eea7d9a776fd6e50ffd5fc51f0c5e6f155" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "sp1-lib" +version = "5.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce8ad0f153443d09d398eccb650a0b2dcbf829470e394e4bf60ec4379c7af93" +dependencies = [ + "bincode", + "serde", + "sp1-primitives", +] + +[[package]] +name = "sp1-primitives" +version = "5.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0244dee3a7a0f88cf71c3edf518f4fc97794ae870a107cbe7c810ac3fbf879cb" +dependencies = [ + "bincode", + "blake3", + "cfg-if", + "hex", + "lazy_static", + "num-bigint", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "serde", + "sha2 0.10.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sp1-soldering-guest" +version = "0.1.0" +dependencies = [ + "rkyv", + "sha2 0.10.9 (git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha2-0.10.9-sp1-4.0.0)", + "sp1-zkvm", +] + +[[package]] +name = "sp1-zkvm" +version = "5.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9cad934f30e245be5c0c55aac0810cf3bbd86187b384e0e95f3afac7cd41b3" +dependencies = [ + "cfg-if", + "getrandom 0.2.16", + "getrandom 0.3.4", + "lazy_static", + "libm", + "rand", + "sha2 0.10.9 (registry+https://github.com/rust-lang/crates.io-index)", + "sp1-lib", + "sp1-primitives", +] + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/sp1-soldering-program/Cargo.toml b/sp1-soldering-program/Cargo.toml new file mode 100644 index 00000000..c40f05ac --- /dev/null +++ b/sp1-soldering-program/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "sp1-soldering-guest" +version = "0.1.0" +edition = "2021" + +[dependencies] +rkyv = { version = "0.8", default-features = false, features = ["alloc"] } +sha2 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.9-sp1-4.0.0" } +sp1-zkvm = "5.2.2" diff --git a/sp1-soldering-program/src/main.rs b/sp1-soldering-program/src/main.rs new file mode 100644 index 00000000..36a676a1 --- /dev/null +++ b/sp1-soldering-program/src/main.rs @@ -0,0 +1,101 @@ +#![no_main] +sp1_zkvm::entrypoint!(main); + +use core::ops::BitXor; + +use rkyv::rancor; +use sha2::{Digest, Sha256}; + +pub mod types; +pub use types::*; + +#[inline(always)] +fn hash_label_into(hasher: &mut Sha256, label: &rkyv::rend::u128_le, out: &mut [u8; 32]) { + hasher.update(label.to_native().to_be_bytes().as_slice()); + hasher.finalize_into_reset(out.into()); +} + +pub fn main() { + let input_bytes = sp1_zkvm::io::read_vec(); + + // Safety: + // + // Crate that is used under the hood for consistency checking - does not work in sp1 env. + // Outside for consistency of ser/deser, the same logic code is executed for checking + // correctness. + let archived = unsafe { rkyv::access_unchecked::(input_bytes.as_slice()) }; + + let (base_instance, remaining) = archived.instances_wires.split_first().unwrap(); + let soldered_instances_count = remaining.len(); + let nonce = archived.nonce; + + let wires_count = base_instance.len(); + + let mut base_commitment = vec![([0u8; 32], [0u8; 32]); wires_count]; + let mut base_nonce_commitment = vec![([0u8; 32], [0u8; 32]); wires_count]; + + // Initialize commitments for each instance with proper capacity + let mut commitments: Vec> = + vec![vec![([0u8; 32], [0u8; 32]); wires_count]; soldered_instances_count]; + + let mut deltas = vec![Vec::with_capacity(wires_count); soldered_instances_count]; + + // Reuse single hasher for all operations + let mut hasher = Sha256::new(); + + for wire_id in 0..wires_count { + let base_wire = &base_instance[wire_id]; + + // Compute base commitments + hash_label_into(&mut hasher, &base_wire.0, &mut base_commitment[wire_id].0); + hash_label_into(&mut hasher, &base_wire.1, &mut base_commitment[wire_id].1); + + // Compute base nonce commitments in the same loop + let label0_with_nonce = base_wire.0.bitxor(nonce); + let label0_le = rkyv::rend::u128_le::from_native(label0_with_nonce); + hash_label_into( + &mut hasher, + &label0_le, + &mut base_nonce_commitment[wire_id].0, + ); + + let label1_with_nonce = base_wire.1.bitxor(nonce); + let label1_le = rkyv::rend::u128_le::from_native(label1_with_nonce); + hash_label_into( + &mut hasher, + &label1_le, + &mut base_nonce_commitment[wire_id].1, + ); + + // Get corresponding wire from each remaining instance + for idx in 0..soldered_instances_count { + let instance_wire = &remaining[idx][wire_id]; + + // Hash each label individually like base instance, reusing the hasher + hash_label_into( + &mut hasher, + &instance_wire.0, + &mut commitments[idx][wire_id].0, + ); + hash_label_into( + &mut hasher, + &instance_wire.1, + &mut commitments[idx][wire_id].1, + ); + + let delta0 = base_wire.0.bitxor(instance_wire.0); + let delta1 = base_wire.1.bitxor(instance_wire.1); + deltas[idx].push((delta0, delta1)); + } + } + + let data = SolderedLabelsData { + deltas, + base_commitment, + base_nonce_commitment, + commitments, + nonce: nonce.to_native(), + }; + + sp1_zkvm::io::commit_slice(rkyv::to_bytes::(&data).unwrap().as_slice()); +} diff --git a/sp1-soldering-program/src/types.rs b/sp1-soldering-program/src/types.rs new file mode 100644 index 00000000..5cbf8480 --- /dev/null +++ b/sp1-soldering-program/src/types.rs @@ -0,0 +1,21 @@ +use rkyv::{Archive, Deserialize, Serialize}; + +pub type Wire = (u128, u128); +pub type InstancesWires = Vec; +pub type Sha256Commit = [u8; 32]; + +#[derive(Archive, Deserialize, Serialize, Debug, PartialEq)] +#[rkyv(derive(Debug))] +pub struct WiresInput { + pub instances_wires: Vec, + pub nonce: u128, +} + +#[derive(Archive, Deserialize, Serialize, Debug, PartialEq)] +pub struct SolderedLabelsData { + pub deltas: Vec>, + pub base_commitment: Vec<(Sha256Commit, Sha256Commit)>, + pub base_nonce_commitment: Vec<(Sha256Commit, Sha256Commit)>, + pub nonce: u128, + pub commitments: Vec>, +} diff --git a/src/cac/adaptor_sigs.rs b/src/cac/adaptor_sigs.rs index 6a6ec1a9..2989279e 100644 --- a/src/cac/adaptor_sigs.rs +++ b/src/cac/adaptor_sigs.rs @@ -1,4 +1,4 @@ -use ark_ec::{CurveGroup, PrimeGroup}; +use ark_ec::{AffineRepr, CurveGroup, PrimeGroup}; use ark_ff::{BigInteger, PrimeField, UniformRand}; use ark_secp256k1::{Fq, Fr, Projective}; use sha2::{Digest, Sha256}; @@ -82,7 +82,15 @@ impl AdaptorInfo { return Err("invalid signature length".to_owned()); } let commit_sum = self.evaluator_nonce_commit + self.garbler_commit; + let is_odd = is_odd(&commit_sum.into_affine().y); + + let expected_encoded_commit = + fq_to_be32(&commit_sum.into_affine().x().expect("valid point")); + if garbler_sig[0..32] != expected_encoded_commit { + return Err("Unexpected nonce value".to_owned()); + } + let garbler_s = fr_from_be_bytes_mod_order(&garbler_sig[32..]); let diff = garbler_s - self.evaluator_s; Ok(if is_odd { -diff } else { diff }) @@ -106,6 +114,39 @@ impl AdaptorInfo { } } +/// Represents an adaptor where a valid signature can be produced by revealing any one of the garbler secrets. +pub struct WideAdaptorInfo(Vec); + +impl WideAdaptorInfo { + pub fn new( + evaluator_secret: &Fr, + garbler_commit: &[Projective], + message_hash: &[u8], + rng: &mut R, + ) -> Self { + let sigs = garbler_commit + .iter() + .map(|commit| AdaptorInfo::new(evaluator_secret, *commit, message_hash, rng)) + .collect(); + Self(sigs) + } + pub fn garbler_signature(&self, secret: &Fr) -> Result { + let commit = Projective::generator() * secret; + Ok(self + .0 + .iter() + .find(|x| x.garbler_commit == commit) + .ok_or("Secret does not correspond to any of the commits".to_owned())? + .garbler_signature(secret)) + } + pub fn extract_secret(&self, garbler_sig: &[u8]) -> Result { + self.0 + .iter() + .find_map(|sig| sig.extract_secret(garbler_sig).ok()) + .ok_or("No valid garbler signature found".to_owned()) + } +} + #[cfg(test)] mod tests { use k256::schnorr::{Signature as KSig, SigningKey, VerifyingKey}; @@ -147,6 +188,46 @@ mod tests { .expect("secret should be extracted"); assert_eq!(secret, garbler_secret_fr); } + + #[test] + fn test_wide_adaptor_sig() { + let mut rng = rand::thread_rng(); + let evaluator_privkey = SigningKey::random(&mut rng); + let evaluator_secret_fr = fr_from_sk(&evaluator_privkey); + + let num_sigs = 32; // expected to be 256, but keeping it low to speed up tests + + let garbler_secrets = (0..num_sigs) + .map(|_| Fr::rand(&mut rng)) + .collect::>(); + let garbler_commits = garbler_secrets + .iter() + .map(|secret| Projective::generator() * secret) + .collect::>(); + + let sighash = Sha256::digest(b"some message").to_vec(); + let wide_adaptor = WideAdaptorInfo::new( + &evaluator_secret_fr, + &garbler_commits, + sighash.as_slice(), + &mut rng, + ); + + for garbler_secret in garbler_secrets { + let garbler_sig_bytes = wide_adaptor.garbler_signature(&garbler_secret).unwrap(); + // Verify using k256 in test only + let verifying_key: VerifyingKey = *evaluator_privkey.verifying_key(); + let ksig = KSig::try_from(garbler_sig_bytes.as_slice()).expect("valid sig"); + verifying_key + .verify_raw(sighash.as_slice(), &ksig) + .expect("signature should be valid"); + + let extracted_secret = wide_adaptor + .extract_secret(&garbler_sig_bytes) + .expect("secret should be extracted"); + assert_eq!(extracted_secret, garbler_secret); + } + } } #[cfg(test)] @@ -154,8 +235,8 @@ mod bitvm_tests { use std::str::FromStr; use bitcoin::{ - Address, Amount, Network, ScriptBuf, TapSighashType, Transaction, TxIn, TxOut, Witness, - XOnlyPublicKey, + Address, Amount, Network, ScriptBuf, TapSighash, TapSighashType, Transaction, TxIn, TxOut, + Witness, XOnlyPublicKey, absolute::LockTime, hashes::Hash, key::{Secp256k1, UntweakedPublicKey}, @@ -276,4 +357,115 @@ mod bitvm_tests { let res = bitvm::dry_run_taproot_input(&tx, 0, &prevouts[..]); assert!(res.success); } + + #[test] + fn test_tx_multiple_sigs() { + let evaluator_privkey = SigningKey::random(&mut rand::thread_rng()); + let evaluator_pubkey = evaluator_privkey.verifying_key().as_affine().x().to_vec(); + let mut rng = rand::thread_rng(); + + let num_sigs = 3; + + // assumes num_sigs >= 2 + let script = script! { + { evaluator_pubkey.clone() } + + for _ in 0..num_sigs - 1 { + OP_TUCK + OP_CHECKSIGVERIFY + OP_CODESEPARATOR + } + + OP_CHECKSIG + } + .compile(); + + let spend_info = spend_info_from_script(script.clone()); + let address = address_from_spend_info(&spend_info, Network::Testnet); + let mut tx = Transaction { + version: Version::TWO, + lock_time: LockTime::ZERO, + input: vec![TxIn::default()], + output: vec![TxOut { + value: Amount::from_sat(2000), + script_pubkey: address.script_pubkey(), + }], + }; + + // Provide a concrete prevout matching the spend script to compute taproot sighash + let prevouts = vec![TxOut { + value: Amount::from_sat(2000), + script_pubkey: address.script_pubkey(), + }]; + let mut sighash_cache = SighashCache::new(&tx); + + let sigs = (0..num_sigs) + .map(|i| { + let evaluator_secret_fr = + fr_from_be_bytes_mod_order(evaluator_privkey.to_bytes().as_slice()); + + let garbler_secret_fr = Fr::rand(&mut rng); + let garbler_commit = Projective::generator() * garbler_secret_fr; + + let mut enc = TapSighash::engine(); + sighash_cache + .taproot_encode_signing_data_to( + &mut enc, + 0, + &Prevouts::All(&prevouts), + None, + Some(( + ScriptPath::with_defaults(script.as_script()).into(), + if i == 0 { 0xFFFFFFFF } else { 3 * i + 32 }, + )), + TapSighashType::Default, + ) + .unwrap(); + let sighash = TapSighash::from_engine(enc).to_byte_array().to_vec(); + + let adaptor = AdaptorInfo::new( + &evaluator_secret_fr, + garbler_commit, + sighash.as_slice(), + &mut rng, + ); + + let garbler_sig_bytes = adaptor.garbler_signature(&garbler_secret_fr); + // Verify using k256 in test only + let verifying_key: VerifyingKey = *evaluator_privkey.verifying_key(); + let ksig = KSig::try_from(garbler_sig_bytes.as_slice()).expect("valid sig"); + verifying_key + .verify_raw(sighash.as_slice(), &ksig) + .expect("signature should be valid"); + + let secret = adaptor + .extract_secret(&garbler_sig_bytes) + .expect("secret should be extracted"); + assert_eq!(secret, garbler_secret_fr); + garbler_sig_bytes.to_vec() + }) + .collect::>(); + + let control_block = spend_info + .control_block(&(script.clone(), LeafVersion::TapScript)) + .unwrap() + .serialize(); + + tx.input[0].witness = [ + sigs.iter().cloned().rev().collect::>(), + vec![script.to_bytes(), control_block.clone()], + ] + .concat() + .into(); + assert!(bitvm::dry_run_taproot_input(&tx, 0, &prevouts[..]).success); + + // Test with different order of sigs: should fail + tx.input[0].witness = [ + sigs.to_vec(), + vec![script.to_bytes(), control_block.clone()], + ] + .concat() + .into(); + assert!(!bitvm::dry_run_taproot_input(&tx, 0, &prevouts[..]).success); + } } diff --git a/src/cac/vsss.rs b/src/cac/vsss.rs index cd9574e2..e0aee238 100644 --- a/src/cac/vsss.rs +++ b/src/cac/vsss.rs @@ -1,10 +1,12 @@ -use super::utils::neg_pos_sum_of_powers_of_two; +use std::ops::{Add, Mul}; + use ark_ec::{PrimeGroup, scalar_mul::BatchMulPreprocessing}; use ark_ff::{BigInteger, Field, One, PrimeField, UniformRand, Zero}; use ark_secp256k1::{Fr, Projective}; use rand::Rng; use serde::{Deserialize, Serialize}; -use std::ops::{Add, Mul}; + +use super::utils::neg_pos_sum_of_powers_of_two; pub struct Secp256k1 { pub generator: BatchMulPreprocessing, @@ -343,14 +345,13 @@ pub fn lagrange_interpolate_whole_polynomial( #[cfg(test)] mod tests { - use std::time::Instant; + use std::{collections::HashSet, time::Instant}; use ark_ec::ScalarMul; - - use super::*; use rand::{SeedableRng, seq::index::sample}; use rand_chacha::ChaCha20Rng; - use std::collections::HashSet; + + use super::*; #[test] fn test_commit_verification() { @@ -401,7 +402,7 @@ mod tests { #[test] fn test_interpolation() { - for (n_revealed, n_hidden) in vec![(5usize, 2usize), (100, 10), (175, 7)] { + for (n_revealed, n_hidden) in [(5usize, 2usize), (100, 10), (175, 7)] { // Assumes one of the revealed ones is 0, as it will be in application, includes it in the n_revealed ones let n_total = n_revealed + n_hidden; let mut seed_rng = ChaCha20Rng::seed_from_u64(42); @@ -430,14 +431,14 @@ mod tests { #[test] fn test_suffix_interpolation() { - for (n_revealed, n_hidden) in vec![(5usize, 2usize), (100, 10), (175, 7)] { + for (n_revealed, n_hidden) in [(5usize, 2usize), (100, 10), (175, 7)] { // Assumes one of the revealed ones is 0, as it will be in application, includes it in the n_revealed ones let n_total = n_revealed + n_hidden; let seed_rng = ChaCha20Rng::seed_from_u64(42); let polynomial = Polynomial::rand(seed_rng, n_revealed - 1); let points = polynomial.shares(n_total); let answer = polynomial.eval_at_suffix_points::(n_hidden); - for (x, y) in (n_revealed..n_total).into_iter().zip(answer.into_iter()) { + for (x, y) in (n_revealed..n_total).zip(answer.into_iter()) { assert_eq!(points[x].1, y); assert_eq!(polynomial.eval_at(x), y); } diff --git a/src/cut_and_choose/ciphertext_repository.rs b/src/cut_and_choose/ciphertext_repository.rs index fb5cb3bb..898b49b5 100644 --- a/src/cut_and_choose/ciphertext_repository.rs +++ b/src/cut_and_choose/ciphertext_repository.rs @@ -1,3 +1,5 @@ +//! Utilities for storing and streaming ciphertext blocks during the +//! cut-and-choose protocol (see `docs/gsv_spec.md`, Step 3). use std::{ fmt, fs::{self, File}, diff --git a/src/cut_and_choose/evaluator.rs b/src/cut_and_choose/evaluator.rs index bfc89091..6ca28234 100644 --- a/src/cut_and_choose/evaluator.rs +++ b/src/cut_and_choose/evaluator.rs @@ -1,11 +1,19 @@ -use std::{error, fmt}; +//! Evaluator-side state machine for the cut-and-choose Setup phase (see +//! `docs/gsv_spec.md`). The `Evaluator` mirrors the spec: it consumes `Commit₁` +//! (`commit_phase_one`) data, samples the challenge set, requests `Commit₂`, and +//! drives regarbling/opening plus soldering verification. +use std::{error, fmt, mem}; +use itertools::*; use rand::Rng; -use rayon::{iter::IntoParallelRefIterator, prelude::*}; +use rayon::prelude::*; use serde::{Deserialize, Serialize, de::DeserializeOwned}; use tracing::{error, info}; -use super::{Config, garbler::GarbledInstanceCommit}; +use super::{ + Config, + garbler::{CommitPhaseOne, CommitPhaseTwo}, +}; use crate::{ AESAccumulatingHash, AesNiHasher, EvaluatedWire, GarbleMode, GarbledWire, S, WireId, circuit::{ @@ -18,6 +26,47 @@ use crate::{ write_commit_hex, }, }; +#[cfg(feature = "sp1-soldering")] +use crate::{ + cut_and_choose::Sha256LabelCommitHasher, + sp1_soldering::{Sha256Commit, SolderInput, SolderedLabels, SolderingProof}, +}; + +#[derive(Default, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(bound = "H: LabelCommitHasher")] +enum Stage { + #[default] + Empty, + Created(Vec>), + Filled { + first: Vec>, + second: Vec>, + regarbled: bool, + }, + #[cfg(feature = "sp1-soldering")] + Soldered { + first: Vec>, + second: Vec>, + soldering_deltas: Vec>, + }, +} + +impl Stage { + fn get_commit_if_ready(&self) -> Option<&[CommitPhaseOne]> { + match self { + Stage::Empty => None, + Stage::Created(_) => None, + Stage::Filled { + first, + regarbled: true, + .. + } => Some(first), + #[cfg(feature = "sp1-soldering")] + Stage::Soldered { first, .. } => Some(first), + _ => None, + } + } +} #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(bound = "H: LabelCommitHasher")] @@ -26,8 +75,12 @@ pub struct Evaluator< H: LabelCommitHasher = DefaultLabelCommitHasher, > { config: Config, - commits: Vec>, + + /// To protect against the second-preimage of input-label hash, this nonce supplements the + /// commit from `Garbler` + nonce: S, to_finalize: Box<[usize]>, + stage: Stage, } impl Evaluator @@ -42,16 +95,14 @@ where H: LabelCommitHasher, { // Generate `to_finalize` with `rng` based on data on `Config` - pub fn create( - mut rng: impl Rng, - config: Config, - commits: Vec>, - ) -> Self { + pub fn create(mut rng: impl Rng, config: Config, commits: Vec>) -> Self { assert!( config.to_finalize <= config.total, "to_finalize must be <= total" ); + assert_eq!(commits.len(), config.total); + // Sample without replacement: shuffle 0..total and take first `to_finalize` let mut idxs: Vec = (0..config.total).collect(); // Fisher-Yates with unbiased rng @@ -63,14 +114,28 @@ where idxs.sort_unstable(); Self { - commits, + stage: Stage::Created(commits), to_finalize: idxs.into_boxed_slice(), config, + nonce: S::from_u128(rng.r#gen()), } } - pub fn get_indexes_to_finalize(&self) -> &[usize] { - &self.to_finalize + pub fn fill_second_commit(&mut self, commits: Vec>) { + let first = match &mut self.stage { + Stage::Created(first) => mem::take(first), + _ => panic!("Can't fill second commit for filled `Evaluator`"), + }; + + self.stage = Stage::Filled { + first, + second: commits, + regarbled: false, + }; + } + + pub fn get_nonce(&self) -> S { + self.nonce } pub fn finalized_indexes(&self) -> &[usize] { @@ -81,7 +146,7 @@ where // 2. For `Open` run `streaming_garbling` via rayon, where at the end it checks for a match with saved commits #[allow(clippy::result_unit_err)] pub fn run_regarbling( - &self, + &mut self, seeds: Vec<(usize, Seed)>, ciphertext_sources_provider: &CSourceProvider, ciphertext_handler_provider: &CHandlerProvider, @@ -101,12 +166,25 @@ where + Sync + Copy, { + let Stage::Filled { + first, + second, + regarbled, + } = &mut self.stage + else { + panic!("Can't run regarbling for not filled Evaluator"); + }; + + let iter = first.iter().zip_eq(second.iter()).enumerate(); + + let inputs = self.config.input.clone(); + let to_finalize = &self.to_finalize; + let nonce = self.nonce; + super::get_optimized_pool().install(|| { - self.commits - .par_iter() - .enumerate() - .map(|(index, commit)| { - if self.to_finalize.contains(&index) { + iter.par_bridge() + .map(|(index, (first_commit, second_commit))| { + if to_finalize.contains(&index) { let mut source = match ciphertext_sources_provider.source_for(index) { Ok(source) => source, Err(err) => { @@ -129,7 +207,7 @@ where let computed_commit: CiphertextCommit = handler.finalize().into(); - if computed_commit != commit.ciphertext_commit() { + if computed_commit != first_commit.ciphertext_hash() { error!("ciphertext corrupted"); return Err(()); } @@ -144,7 +222,7 @@ where return Err(()); }; - let inputs = self.config.input.clone(); + let inputs = inputs.clone(); let hasher = AESAccumulatingHash::default(); let span = tracing::info_span!("regarble", instance = index); @@ -164,10 +242,21 @@ where builder, ); - let regarbling_commit = GarbledInstanceCommit::::new(&res.into()); + let res = res.into(); + let regarbling_first_commit = CommitPhaseOne::::from_instance(&res); + + if ®arbling_first_commit != first_commit { + error!("regarbling failed, first commit not equal"); + return Err(()); + } + + let regarbling_second_commit = + CommitPhaseTwo::::from_instance(&res, nonce); - if ®arbling_commit != commit { - error!("regarbling failed"); + if regarbling_second_commit.input_commitments() + != second_commit.input_commitments() + { + error!("regarbling failed, second commit not equal"); return Err(()); } @@ -177,11 +266,9 @@ where .collect::, ()>>() })?; - Ok(()) - } + *regarbled = true; - pub fn commits(&self) -> &[GarbledInstanceCommit] { - &self.commits + Ok(()) } } @@ -189,8 +276,6 @@ where pub struct EvaluatorCaseInput { pub index: usize, pub input: I, - pub true_constant_wire: u128, - pub false_constant_wire: u128, } /// Errors that can occur during consistency checking. @@ -351,6 +436,8 @@ where + Sync + Copy, { + let commits = self.stage.get_commit_if_ready().unwrap(); + super::get_optimized_pool().install(|| { input_cases .into_par_iter() @@ -358,35 +445,11 @@ where let EvaluatorCaseInput { index, input: eval_input, - true_constant_wire, - false_constant_wire, } = case; - let commit = &self.commits[index]; + let commit = &commits[index]; - let true_consatnt_wire_hash = - commit_label_with::(S::from_u128(true_constant_wire)); - - if true_consatnt_wire_hash != commit.true_consatnt_wire_commit() { - return Err(ConsistencyError::TrueConstantMismatch { - index, - expected: commit.true_consatnt_wire_commit(), - actual: true_consatnt_wire_hash, - }); - } - - let false_consatnt_wire_hash = - commit_label_with::(S::from_u128(false_constant_wire)); - - if false_consatnt_wire_hash != commit.false_consatnt_wire_commit() { - return Err(ConsistencyError::FalseConstantMismatch { - index, - expected: commit.false_consatnt_wire_commit(), - actual: false_consatnt_wire_hash, - }); - } - - let expected_input_commits = commit.input_labels_commit(); + let expected_input_commits = commit.input_commitments(); let source = match ciphertext_repo.source_for(index) { Ok(src) => src, @@ -404,8 +467,8 @@ where >( eval_input, capacity, - true_constant_wire, - false_constant_wire, + commit.true_constant(), + commit.false_constant(), source, builder, ); @@ -444,11 +507,12 @@ where } } - let new_ciphertext_commit: CiphertextCommit = result.ciphertext_handler_result.into(); - if new_ciphertext_commit != commit.ciphertext_commit() { + let new_ciphertext_commit: CiphertextCommit = + result.ciphertext_handler_result.into(); + if new_ciphertext_commit != commit.ciphertext_hash() { return Err(ConsistencyError::CiphertextMismatch { index, - expected: commit.ciphertext_commit(), + expected: commit.ciphertext_hash(), actual: new_ciphertext_commit, }); } @@ -456,9 +520,9 @@ where let output_hash = commit_label_with::(result.output_value.active_label); let expected_output_hash = if result.output_value.value { - commit.output_label1_commit() + commit.output_commit_true() } else { - commit.output_label0_commit() + commit.output_commit_false() }; if output_hash != expected_output_hash { @@ -475,3 +539,394 @@ where }) } } + +/// Errors that can occur when verifying soldering data against local commits. +#[cfg(feature = "sp1-soldering")] +#[derive(Debug)] +pub enum SolderingCheckError { + /// Unexpected size/layout of soldering data compared to local state + ShapeMismatch(&'static str), + /// Base instance per-wire commit mismatch + BaseCommitMismatch { + wire_index: usize, + which: &'static str, + expected: [u8; 32], + actual: [u8; 32], + }, + /// Base instance per-wire nonce commit mismatch + BaseNonceCommitMismatch { + wire_index: usize, + which: &'static str, + expected: [u8; 32], + actual: [u8; 32], + }, + /// Additional instance per-wire commit mismatch + InstanceCommitMismatch { + instance_index: usize, + wire_index: usize, + which: &'static str, + expected: [u8; 32], + actual: [u8; 32], + }, + /// Failure during soldering verification + SolderingFailed(String), +} + +#[cfg(feature = "sp1-soldering")] +impl error::Error for SolderingCheckError { + fn source(&self) -> Option<&(dyn error::Error + 'static)> { + None + } +} + +#[cfg(feature = "sp1-soldering")] +impl fmt::Display for SolderingCheckError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::ShapeMismatch(msg) => write!(f, "soldering data shape mismatch: {}", msg), + Self::BaseCommitMismatch { + wire_index, + which, + expected, + actual, + } => { + write!( + f, + "base commit mismatch at wire {} ({}): expected 0x", + wire_index, which + )?; + super::write_commit_hex(f, expected)?; + write!(f, ", got 0x")?; + super::write_commit_hex(f, actual) + } + Self::BaseNonceCommitMismatch { + wire_index, + which, + expected, + actual, + } => { + write!( + f, + "base nonce commit mismatch at wire {} ({}): expected 0x", + wire_index, which + )?; + super::write_commit_hex(f, expected)?; + write!(f, ", got 0x")?; + super::write_commit_hex(f, actual) + } + Self::InstanceCommitMismatch { + instance_index, + wire_index, + which, + expected, + actual, + } => { + write!( + f, + "instance {} commit mismatch at wire {} ({}): expected 0x", + instance_index, wire_index, which + )?; + super::write_commit_hex(f, expected)?; + write!(f, ", got 0x")?; + super::write_commit_hex(f, actual) + } + Self::SolderingFailed(msg) => write!(f, "soldering verification failed: {}", msg), + } + } +} + +impl Evaluator +where + I: CircuitInput + Clone + Send + Sync + Serialize + DeserializeOwned, +{ + /// Verify the garbler-provided soldering proof and compare its bound commitments + /// against local commits for the finalized instances. Returns the verified + /// soldering data (`SolderedLabels`) on success. + /// + /// Requirements: + /// - Local commits must be produced with a hasher that outputs 32 bytes + /// (e.g., `Sha256LabelCommitHasher`) to compare with soldering commitments. + /// - The garbler must build the proof using the same `to_finalize` ordering, + /// with the base at `to_finalize[0]` and additional instances following. + #[cfg(feature = "sp1-soldering")] + pub fn verify_soldering_against_commits( + &mut self, + proof: SolderingProof, + ) -> Result { + let Stage::Filled { + first: first_commits, + second: second_commits, + regarbled: true, + } = mem::take(&mut self.stage) + else { + panic!() + }; + + // First, get the base index to prepare commitments + let Some(&base_idx) = self.to_finalize.first() else { + return Err(SolderingCheckError::ShapeMismatch( + "to_finalize must contain at least one index", + )); + }; + + // Prepare base commitments + let base_commitment: Vec<(Sha256Commit, Sha256Commit)> = first_commits[base_idx] + .input_commitments() + .iter() + .map(|lc| (lc.commit_label0, lc.commit_label1)) + .collect(); + + // Prepare base nonce commitments (from second commit which has nonce applied) + let base_nonce_commitment: Vec<(Sha256Commit, Sha256Commit)> = second_commits[base_idx] + .input_commitments() + .iter() + .map(|lc| (lc.commit_label0, lc.commit_label1)) + .collect(); + + // Prepare commitments for additional instances + let additional_indexes = &self.to_finalize[1..]; + let commitments: Vec> = additional_indexes + .iter() + .map(|&idx| { + first_commits[idx] + .input_commitments() + .iter() + .map(|lc| (lc.commit_label0, lc.commit_label1)) + .collect() + }) + .collect(); + + // Extract proof and deltas + let SolderingProof { + proof: groth16_proof, + deltas, + } = proof; + + // Verify using the new API + if !crate::sp1_soldering::verify_soldering( + SolderingProof { + proof: groth16_proof, + deltas: deltas.clone(), + }, + base_commitment.clone(), + base_nonce_commitment.clone(), + self.nonce.to_u128(), + commitments.clone(), + ) { + return Err(SolderingCheckError::SolderingFailed( + "Soldering verification failed".to_string(), + )); + } + + // Reconstruct the verified public params + let verified_public_params = SolderedLabels { + deltas: deltas.clone(), + base_commitment, + base_nonce_commitment, + nonce: self.nonce.to_u128(), + commitments, + }; + + let soldered_instances_indexes = &self.to_finalize[1..]; + + // Shape checks + let expected_wires = first_commits[base_idx].input_commitments().len(); + if verified_public_params.base_commitment.len() != expected_wires { + return Err(SolderingCheckError::ShapeMismatch( + "base commitment wire count", + )); + } + if verified_public_params.deltas.len() != soldered_instances_indexes.len() { + return Err(SolderingCheckError::ShapeMismatch( + "deltas count vs additional instances", + )); + } + if verified_public_params.commitments.len() != soldered_instances_indexes.len() { + return Err(SolderingCheckError::ShapeMismatch( + "commitments count vs additional instances", + )); + } + for (j, &inst_idx) in soldered_instances_indexes.iter().enumerate() { + if first_commits[inst_idx].input_commitments().len() != expected_wires + || verified_public_params.commitments[j].len() != expected_wires + || verified_public_params.deltas[j].len() != expected_wires + { + return Err(SolderingCheckError::ShapeMismatch( + "per-instance wire count", + )); + } + } + + info!( + base = base_idx, + extra = soldered_instances_indexes.len(), + wires = expected_wires, + "verifying soldering commits against local commits" + ); + + // Compare base instance per-wire commitments + let base_local = &first_commits[base_idx]; + for (wire_idx, base_pair) in base_local.input_commitments().iter().enumerate() { + let (exp0, exp1) = verified_public_params.base_commitment[wire_idx]; + + if base_pair.commit_label0 != exp0 { + return Err(SolderingCheckError::BaseCommitMismatch { + wire_index: wire_idx, + which: "label0", + expected: exp0, + actual: base_pair.commit_label0, + }); + } + + if base_pair.commit_label1 != exp1 { + return Err(SolderingCheckError::BaseCommitMismatch { + wire_index: wire_idx, + which: "label1", + expected: exp1, + actual: base_pair.commit_label1, + }); + } + } + + // Verify nonce commitments for base instance + // The second commit for base instance should have the nonce applied + let base_second = &second_commits[base_idx]; + + for (wire_idx, (nonce_commit, nonce_local_commit)) in verified_public_params + .base_nonce_commitment + .iter() + .zip(base_second.input_commitments().iter()) + .enumerate() + { + // Verify label0 with nonce + if nonce_commit.0 != nonce_local_commit.commit_label0 { + return Err(SolderingCheckError::BaseNonceCommitMismatch { + wire_index: wire_idx, + which: "label0_with_nonce", + expected: nonce_local_commit.commit_label0, + actual: nonce_commit.0, + }); + } + + // Verify label1 with nonce + if nonce_commit.1 != nonce_local_commit.commit_label1 { + return Err(SolderingCheckError::BaseNonceCommitMismatch { + wire_index: wire_idx, + which: "label1_with_nonce", + expected: nonce_local_commit.commit_label1, + actual: nonce_commit.1, + }); + } + } + + // Compare additional instances per-wire commitments + for (j, &inst_idx) in soldered_instances_indexes.iter().enumerate() { + let local = &first_commits[inst_idx]; + + for (wire_idx, local_pair) in local.input_commitments().iter().enumerate() { + let (exp0, exp1) = verified_public_params.commitments[j][wire_idx]; + + if local_pair.commit_label0 != exp0 { + return Err(SolderingCheckError::InstanceCommitMismatch { + instance_index: inst_idx, + wire_index: wire_idx, + which: "label0", + expected: exp0, + actual: local_pair.commit_label0, + }); + } + + if local_pair.commit_label1 != exp1 { + return Err(SolderingCheckError::InstanceCommitMismatch { + instance_index: inst_idx, + wire_index: wire_idx, + which: "label1", + expected: exp1, + actual: local_pair.commit_label1, + }); + } + } + } + + // Convert deltas from u128 to S and persist for later evaluate step + let soldering_deltas_s: Vec> = verified_public_params + .deltas + .iter() + .map(|instance_deltas| { + instance_deltas + .iter() + .map(|(d0, d1)| (S::from_u128(*d0), S::from_u128(*d1))) + .collect() + }) + .collect(); + + self.stage = Stage::Soldered { + first: first_commits, + second: second_commits, + soldering_deltas: soldering_deltas_s, + }; + + Ok(verified_public_params) + } +} + +#[cfg(feature = "sp1-soldering")] +impl Evaluator +where + I: CircuitInput + Clone + Send + Sync + Serialize + DeserializeOwned, +{ + #[allow(clippy::result_large_err)] + pub fn evaluate_with_soldered_instances_from( + &self, + ciphertext_repo: &CR, + base_case: EvaluatorCaseInput, + capacity: usize, + builder: F, + ) -> Result, ConsistencyError> + where + E: CircuitInput + Send + EncodeInput> + SolderInput, + CR: 'static + CiphertextSourceProvider + Send + Sync, + ::Result: Into, + F: Fn(&mut StreamingMode>, &E::WireRepr) -> WireId + + Send + + Sync + + Copy, + { + let finalized = self.to_finalize.clone(); + assert!( + !finalized.is_empty(), + "no finalized instances; evaluator not initialized?" + ); + + // Ensure base case index matches our base finalized index + let base_index = finalized[0]; + assert_eq!( + base_case.index, base_index, + "base_case.index must equal first finalized index" + ); + + let Stage::Soldered { + soldering_deltas: deltas, + .. + } = &self.stage + else { + panic!() + }; + + // Build input cases: base + derived for each additional finalized index + let mut cases: Vec> = Vec::with_capacity(finalized.len()); + cases.push(base_case); + + for (j, &inst_idx) in finalized.iter().enumerate().skip(1) { + let per_wire = &deltas[j - 1]; + let derived_input = cases[0].input.solder(per_wire); + + cases.push(EvaluatorCaseInput { + index: inst_idx, + input: derived_input, + }); + } + + self.evaluate_from(ciphertext_repo, cases, capacity, builder) + } +} diff --git a/src/cut_and_choose/garbler.rs b/src/cut_and_choose/garbler.rs index d957251d..b7ab2e46 100644 --- a/src/cut_and_choose/garbler.rs +++ b/src/cut_and_choose/garbler.rs @@ -1,3 +1,7 @@ +//! Garbler-side orchestration for the cut-and-choose Setup phase described in +//! `docs/gsv_spec.md`. The API mirrors the protocol steps: `commit_phase_one` +//! produces the `Commit₁` payload, `commit_phase_two` covers `Commit₂`, and +//! `open_commit` implements the challenge/opening flow. use std::{ mem, thread::{self, JoinHandle}, @@ -8,8 +12,10 @@ use rayon::{iter::IntoParallelRefIterator, prelude::*}; use serde::{Deserialize, Serialize}; use tracing::info; +#[cfg(feature = "sp1-soldering")] +use crate::sp1_soldering::{self, SolderingProof}; use crate::{ - AESAccumulatingHash, AesNiHasher, GarbleMode, GarbledWire, WireId, + AESAccumulatingHash, AesNiHasher, GarbleMode, GarbledWire, S, WireId, circuit::{ CiphertextHandler, CircuitBuilder, CircuitInput, EncodeInput, StreamingMode, StreamingResult, @@ -58,88 +64,115 @@ impl } } +/// `Commit₁(i)` payload containing ciphertext hash, per-wire input commits, +/// output commits, and constant wire values (spec Step 1.2). #[derive(Clone, Debug, Serialize, Deserialize, Eq)] #[serde(bound = "H: LabelCommitHasher")] -pub struct GarbledInstanceCommit { - ciphertext_commit: CiphertextCommit, - input_labels_commit: Vec>, - // Separate commits for output labels: one for label1 and one for label0 +pub struct CommitPhaseOne { + ciphertext_hash: CiphertextCommit, + input_commitments: Vec>, + /// Commitment to the active output label when the circuit output is `true`. output_label1_commit: H::Output, + /// Commitment to the active output label when the circuit output is `false`. output_label0_commit: H::Output, - true_constant_commit: H::Output, - false_constant_commit: H::Output, + true_constant: u128, + false_constant: u128, } -impl PartialEq for GarbledInstanceCommit { +impl PartialEq for CommitPhaseOne { fn eq(&self, other: &Self) -> bool { - self.ciphertext_commit == other.ciphertext_commit - && self.input_labels_commit == other.input_labels_commit + self.ciphertext_hash == other.ciphertext_hash + && self.input_commitments == other.input_commitments && self.output_label1_commit == other.output_label1_commit && self.output_label0_commit == other.output_label0_commit - && self.true_constant_commit == other.true_constant_commit - && self.false_constant_commit == other.false_constant_commit + && self.true_constant == other.true_constant + && self.false_constant == other.false_constant } } -impl GarbledInstanceCommit { - pub fn new(instance: &GarbledInstance) -> Self { +impl CommitPhaseOne { + /// Recompute the `Commit₁` payload (without nonce injection) for a garbled instance. + pub fn from_instance(instance: &GarbledInstance) -> Self { Self { - ciphertext_commit: instance.ciphertext_handler_result, - input_labels_commit: Self::commit_garbled_wires(&instance.input_wire_values), - - output_label1_commit: Self::commit_label1(&instance.output_wire_values), - - output_label0_commit: Self::commit_label0(&instance.output_wire_values), - - true_constant_commit: commit_label_with::(instance.true_wire_constant.select(true)), - false_constant_commit: commit_label_with::( - instance.false_wire_constant.select(false), - ), + ciphertext_hash: instance.ciphertext_handler_result, + input_commitments: commit_input_wires::(&instance.input_wire_values, None), + output_label1_commit: commit_output_label1::(&instance.output_wire_values), + output_label0_commit: commit_output_label0::(&instance.output_wire_values), + true_constant: instance.true_wire_constant.select(true).to_u128(), + false_constant: instance.false_wire_constant.select(false).to_u128(), } } - pub fn commit_garbled_wires(inputs: &[GarbledWire]) -> Vec> { - inputs - .iter() - .map(|GarbledWire { label0, label1 }| { - LabelCommit::::new::(*label0, *label1) - }) - .collect() - } - - fn commit_label1(input: &GarbledWire) -> H::Output { - commit_label_with::(input.label1) + pub fn ciphertext_hash(&self) -> CiphertextCommit { + self.ciphertext_hash } - fn commit_label0(input: &GarbledWire) -> H::Output { - commit_label_with::(input.label0) + pub fn input_commitments(&self) -> &[LabelCommit] { + &self.input_commitments } - pub fn output_label1_commit(&self) -> H::Output { + pub fn output_commit_true(&self) -> H::Output { self.output_label1_commit } - pub fn output_label0_commit(&self) -> H::Output { + pub fn output_commit_false(&self) -> H::Output { self.output_label0_commit } - pub fn true_consatnt_wire_commit(&self) -> H::Output { - self.true_constant_commit + pub fn true_constant(&self) -> u128 { + self.true_constant + } + + pub fn false_constant(&self) -> u128 { + self.false_constant } +} + +/// `Commit₂(i)` payload containing nonce-blended per-wire input commitments +/// (spec Step 1.4). +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(bound = "H: LabelCommitHasher")] +pub struct CommitPhaseTwo { + input_commitments: Vec>, +} - pub fn false_consatnt_wire_commit(&self) -> H::Output { - self.false_constant_commit +impl CommitPhaseTwo { + /// Recompute the `Commit₂` payload (with nonce injection) for a garbled instance. + pub fn from_instance(instance: &GarbledInstance, nonce: S) -> Self { + Self { + input_commitments: commit_input_wires::(&instance.input_wire_values, Some(nonce)), + } } - pub fn ciphertext_commit(&self) -> CiphertextCommit { - self.ciphertext_commit + pub fn input_commitments(&self) -> &[LabelCommit] { + &self.input_commitments } - pub fn input_labels_commit(&self) -> &[LabelCommit] { - &self.input_labels_commit + pub fn into_inner(self) -> Vec> { + self.input_commitments } } +fn commit_output_label1(wire: &GarbledWire) -> H::Output { + commit_label_with::(wire.label1) +} + +fn commit_output_label0(wire: &GarbledWire) -> H::Output { + commit_label_with::(wire.label0) +} + +fn commit_input_wires( + inputs: &[GarbledWire], + nonce: Option, +) -> Vec> { + inputs + .iter() + .map(|GarbledWire { label0, label1 }| { + LabelCommit::::new::(*label0, *label1, &nonce) + }) + .collect() +} + pub enum OpenForInstance { Open(usize, Seed), Closed { @@ -175,6 +208,8 @@ pub struct Garbler { instances: Vec, config: Config, live_capacity: usize, + /// Nonce received from evaluator, stored for internal use in `commit_phase_two` and `do_soldering` + nonce: Option, } impl Garbler @@ -238,21 +273,39 @@ where instances, live_capacity, config, + nonce: None, } } - pub fn commit(&self) -> Vec { - self.commit_with_hasher::() + /// Produce the `Commit₁` transcript for every garbled instance (spec Step 1.2). + pub fn commit_phase_one(&self) -> Vec> + where + HHasher: LabelCommitHasher, + { + self.instances + .iter() + .map(CommitPhaseOne::::from_instance) + .collect() } - pub fn commit_with_hasher(&self) -> Vec> + /// Produce the `Commit₂` transcript (nonce-injected input commitments; spec Step 1.4). + /// Stores the nonce internally for use in `do_soldering`. + /// If called multiple times, the nonce must be the same; otherwise panics. + pub fn commit_phase_two(&mut self, nonce: S) -> Vec> where HHasher: LabelCommitHasher, { - // Build commits in parallel; independent per instance + if let Some(existing_nonce) = self.nonce { + if existing_nonce != nonce { + panic!("Different nonce provided to commit_phase_two; nonce must be consistent"); + } + } else { + self.nonce = Some(nonce); + } + self.instances .iter() - .map(GarbledInstanceCommit::::new) + .map(|instance| CommitPhaseTwo::::from_instance(instance, self.nonce.unwrap())) .collect() } @@ -318,6 +371,30 @@ where .collect() } + #[cfg(feature = "sp1-soldering")] + pub fn do_soldering(&self) -> SolderingProof { + let nonce = self + .nonce + .expect("Nonce must be set before calling do_soldering"); + let GarblerStage::PreparedForEval { indexes_to_eval } = &self.stage else { + panic!("Garbler not ready to soldering") + }; + + let mut indexes_to_eval = indexes_to_eval.clone(); + indexes_to_eval.sort(); + + // Collect all instances (base + additional) into a single vector + let mut all_instances = Vec::new(); + for &index in indexes_to_eval.iter() { + all_instances.push(self.instances[index].input_wire_values.clone()); + } + + // Convert nonce from S to u128 + let nonce = nonce.to_u128(); + + sp1_soldering::prove_soldering(all_instances, nonce) + } + /// Return the constant labels for true/false as u128 words for a given instance. pub fn true_wire_constant_for(&self, index: usize) -> u128 { self.instances[index] diff --git a/src/cut_and_choose/groth16.rs b/src/cut_and_choose/groth16.rs index 6ed94ade..7a42b87d 100644 --- a/src/cut_and_choose/groth16.rs +++ b/src/cut_and_choose/groth16.rs @@ -1,9 +1,15 @@ +//! Groth16-specific wrappers around the generic cut-and-choose API so callers +//! can mirror the protocol described in `docs/gsv_spec.md` with minimal glue. +#[cfg(feature = "sp1-soldering")] +use garbled_groth16::{EvaluatedCompressedG1Wires, EvaluatedCompressedG2Wires, EvaluatedFrWires}; use rand::Rng; use serde::{Deserialize, Serialize}; -pub use crate::cut_and_choose::{GarbledInstanceCommit, LabelCommitHasher, OpenForInstance, Seed}; +pub use crate::cut_and_choose::{ + CommitPhaseOne, CommitPhaseTwo, LabelCommitHasher, OpenForInstance, Seed, +}; use crate::{ - EvaluatedWire, GarbledWire, + EvaluatedWire, GarbledWire, S, circuit::{CiphertextHandler, CiphertextSource}, cut_and_choose::{ self as generic, CiphertextCommit, CiphertextHandlerProvider, CiphertextSourceProvider, @@ -34,15 +40,18 @@ impl Garbler { Self { inner } } - pub fn commit(&self) -> Vec { - self.inner.commit() + pub fn commit_phase_one(&self) -> Vec> + where + HHasher: LabelCommitHasher, + { + self.inner.commit_phase_one::() } - pub fn commit_with_hasher(&self) -> Vec> + pub fn commit_phase_two(&mut self, nonce: S) -> Vec> where HHasher: LabelCommitHasher, { - self.inner.commit_with_hasher::() + self.inner.commit_phase_two::(nonce) } pub fn open_commit( @@ -90,12 +99,7 @@ impl Garbler { self.input_labels_for(*idx), ); - EvaluatorCaseInput { - index: *idx, - input, - true_constant_wire: self.true_wire_constant_for(*idx), - false_constant_wire: self.false_wire_constant_for(*idx), - } + EvaluatorCaseInput { index: *idx, input } }) .collect() } @@ -103,6 +107,11 @@ impl Garbler { pub fn output_wire(&self, index: usize) -> Option<&GarbledWire> { self.inner.output_wire(index) } + + #[cfg(feature = "sp1-soldering")] + pub fn do_soldering(&self) -> crate::sp1_soldering::SolderingProof { + self.inner.do_soldering() + } } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -113,15 +122,19 @@ pub struct Evaluator { impl Evaluator { // Generate `to_finalize` with `rng` based on data on `Config` - pub fn create(rng: impl Rng, config: Config, commits: Vec>) -> Self { + pub fn create(rng: impl Rng, config: Config, commits: Vec>) -> Self { let inner = generic::Evaluator::::create( rng, config, commits, ); Self { inner } } - pub fn get_indexes_to_finalize(&self) -> &[usize] { - self.inner.get_indexes_to_finalize() + pub fn fill_second_commit(&mut self, commits: Vec>) { + self.inner.fill_second_commit(commits); + } + + pub fn get_nonce(&self) -> S { + self.inner.get_nonce() } pub fn finalized_indexes(&self) -> &[usize] { @@ -130,7 +143,7 @@ impl Evaluator { #[allow(clippy::result_unit_err)] pub fn run_regarbling( - &self, + &mut self, seeds: Vec<(usize, Seed)>, ciphertext_sources_provider: &CSourceProvider, ciphertext_sink_provider: &CHandlerProvider, @@ -149,10 +162,6 @@ impl Evaluator { garbled_groth16::verify_compressed, ) } - - pub fn commits(&self) -> &[GarbledInstanceCommit] { - self.inner.commits() - } } pub type EvaluatorCaseInput = @@ -183,3 +192,98 @@ impl Evaluator { ) } } + +// Implement SolderInput to allow creating derived instances from base instance with deltas +#[cfg(feature = "sp1-soldering")] +use crate::sp1_soldering::SolderInput; + +#[cfg(feature = "sp1-soldering")] +impl SolderInput for garbled_groth16::EvaluatorCompressedInput { + fn solder( + &self, + per_wire: &[(crate::S, crate::S)], + ) -> garbled_groth16::EvaluatorCompressedInput { + let mut it = per_wire.iter(); + + let mut map_wire = |ew: &EvaluatedWire| -> EvaluatedWire { + let (d0, d1) = *it.next().expect("delta length matches input wires"); + let delta = if ew.value { d1 } else { d0 }; + EvaluatedWire::new(ew.active_label ^ &delta, ew.value) + }; + + let map_fr = + |fr: &garbled_groth16::EvaluatedFrWires, + map_wire: &mut dyn FnMut(&EvaluatedWire) -> EvaluatedWire| { + EvaluatedFrWires(fr.0.iter().map(map_wire).collect()) + }; + + let public = self + .public + .iter() + .map(|fr| map_fr(fr, &mut map_wire)) + .collect(); + + let a_x = map_fr(&self.a.x, &mut map_wire); + let a_y_flag = map_wire(&self.a.y_flag); + + let b_x0 = map_fr(&self.b.x[0], &mut map_wire); + let b_x1 = map_fr(&self.b.x[1], &mut map_wire); + let b_y_flag = map_wire(&self.b.y_flag); + + let c_x = map_fr(&self.c.x, &mut map_wire); + let c_y_flag = map_wire(&self.c.y_flag); + + garbled_groth16::EvaluatorCompressedInput { + public, + a: EvaluatedCompressedG1Wires { + x: a_x, + y_flag: a_y_flag, + }, + b: EvaluatedCompressedG2Wires { + x: [b_x0, b_x1], + y_flag: b_y_flag, + }, + c: EvaluatedCompressedG1Wires { + x: c_x, + y_flag: c_y_flag, + }, + vk: self.vk.clone(), + } + } +} + +#[cfg(feature = "sp1-soldering")] +impl Evaluator { + pub fn verify_soldering_against_commits( + &mut self, + proof: crate::sp1_soldering::SolderingProof, + ) -> Result { + self.inner.verify_soldering_against_commits(proof) + } + + /// Evaluate all finalized instances using a single base set of input labels, + /// reconstructing the rest from previously verified soldering deltas. + /// + /// Requirements: + /// - Call `verify_soldering_against_commits` first; this stores the deltas. + /// - `base_case.index` must equal the first finalized index (the base). + /// - No additional constants are required; constants are derived from commits. + #[allow(clippy::result_large_err)] + pub fn run_evaluate_with_soldered_instances< + CR: 'static + CiphertextSourceProvider + Send + Sync, + >( + &self, + ciphertext_repo: &CR, + base_case: EvaluatorCaseInput, + ) -> Result, ConsistencyError> + where + ::Result: Into, + { + self.inner.evaluate_with_soldered_instances_from( + ciphertext_repo, + base_case, + DEFAULT_CAPACITY, + garbled_groth16::verify_compressed, + ) + } +} diff --git a/src/cut_and_choose/mod.rs b/src/cut_and_choose/mod.rs index 749147db..7b941326 100644 --- a/src/cut_and_choose/mod.rs +++ b/src/cut_and_choose/mod.rs @@ -1,12 +1,21 @@ +//! Cut-and-choose protocol primitives that implement the Setup and Evaluate +//! phases described in `docs/gsv_spec.md`. The submodules expose garbler and +//! evaluator roles plus utilities for ciphertext storage. use std::{ fmt, + ops::BitXor, sync::{Arc, OnceLock}, }; use rayon::{ThreadPool, ThreadPoolBuilder}; use serde::{Deserialize, Serialize}; -use crate::{S, circuit::CircuitInput, hashers}; +// Re-export the label commit hashers from hashers module +pub use crate::hashers::{ + AesLabelCommitHasher, Commit, DefaultLabelCommitHasher, LabelCommitHasher, + Sha256LabelCommitHasher, commit_label_with, +}; +use crate::{S, circuit::CircuitInput}; pub mod ciphertext_repository; pub mod evaluator; @@ -22,34 +31,7 @@ pub type Seed = u64; pub type CiphertextCommit = [u8; 16]; -pub trait LabelCommitHasher: fmt::Debug { - type Output: Copy - + fmt::Debug - + Eq - + Send - + Sync - + Serialize - + for<'de> serde::Deserialize<'de> - + AsRef<[u8]>; - - fn hash_label(label: S) -> Self::Output; -} - -#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] -pub struct AesLabelCommitHasher; - -impl LabelCommitHasher for AesLabelCommitHasher { - type Output = [u8; 16]; - - fn hash_label(label: S) -> Self::Output { - hashers::aes_ni::aes128_encrypt_block_static(label.to_bytes()) - .expect("AES backend should be available (HW or software)") - } -} - -pub type DefaultLabelCommitHasher = AesLabelCommitHasher; -pub type Commit = ::Output; - +/// Per-wire label commitments used in both `Commit₁` and `Commit₂`. #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct LabelCommit { pub commit_label0: H, @@ -57,10 +39,21 @@ pub struct LabelCommit { } impl LabelCommit { - pub fn new>(label0: S, label1: S) -> Self { - Self { - commit_label0: commit_label_with::(label0), - commit_label1: commit_label_with::(label1), + /// Hash both labels, optionally XOR-ing a nonce before hashing (spec Step 1.4). + pub fn new>( + label0: S, + label1: S, + nonce: &Option, + ) -> Self { + match nonce { + Some(nonce) => Self { + commit_label0: commit_label_with::(label0.bitxor(nonce)), + commit_label1: commit_label_with::(label1.bitxor(nonce)), + }, + None => Self { + commit_label0: commit_label_with::(label0), + commit_label1: commit_label_with::(label1), + }, } } @@ -87,10 +80,6 @@ pub fn commit_label(label: S) -> Commit { commit_label_with::(label) } -pub fn commit_label_with(label: S) -> H::Output { - H::hash_label(label) -} - pub(crate) fn write_commit_hex(f: &mut fmt::Formatter<'_>, bytes: &[u8]) -> fmt::Result { for byte in bytes.iter() { write!(f, "{:02x}", byte)?; @@ -98,7 +87,11 @@ pub(crate) fn write_commit_hex(f: &mut fmt::Formatter<'_>, bytes: &[u8]) -> fmt: Ok(()) } -/// Protocol configuration shared by Garbler/Evaluator. +/// Protocol configuration shared by Garbler and Evaluator. +/// +/// Corresponds to the `(n, f, input)` tuple in `docs/gsv_spec.md`, where `n` +/// is the total number of garbled instances and `f` is the size of the +/// evaluation set selected during Step 2 (challenging). #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct Config { total: usize, @@ -107,6 +100,9 @@ pub struct Config { } impl Config { + /// Create a new configuration with the total instance count, the number + /// of finalized instances, and the compressed circuit input shared between + /// garbler and evaluator. pub fn new(total: usize, to_finalize: usize, input: I) -> Self { Self { total, @@ -115,14 +111,17 @@ impl Config { } } + /// Total number of garbled circuits `n`. pub fn total(&self) -> usize { self.total } + /// Number of circuits `f` that will remain closed/finalized. pub fn to_finalize(&self) -> usize { self.to_finalize } + /// Immutable access to the shared circuit input payload. pub fn input(&self) -> &I { &self.input } diff --git a/src/cut_and_choose/tests.rs b/src/cut_and_choose/tests.rs index 761094a5..e6e2bbb4 100644 --- a/src/cut_and_choose/tests.rs +++ b/src/cut_and_choose/tests.rs @@ -107,12 +107,24 @@ fn cut_and_choose_one_bit_e2e() { // Garbler creates all instances let cfg_g = Config::new(total, finalize, OneBitGarblerInput); let mut garbler = Garbler::create(&mut rng, cfg_g, CAPACITY, one_bit_circuit); - let commits = garbler.commit(); - // Evaluator chooses which instances to finalize + // First phase: commit without nonce + let first_commits = garbler.commit_phase_one::(); + + // Evaluator chooses which instances to finalize with first commits let cfg_e = Config::new(total, finalize, OneBitGarblerInput); - let evaluator: Evaluator = - Evaluator::create(&mut rng, cfg_e, commits.clone()); + let mut evaluator: Evaluator = + Evaluator::create(&mut rng, cfg_e, first_commits.clone()); + + // Get nonce from evaluator + let nonce = evaluator.get_nonce(); + + // Second phase: commit with nonce + let second_commits = garbler.commit_phase_two::(nonce); + + // Fill evaluator with second commits + evaluator.fill_second_commit(second_commits.clone()); + let finalize_indices: Vec = evaluator.finalized_indexes().to_vec(); // Build channels for finalized instances using iterator + unzip @@ -156,14 +168,11 @@ fn cut_and_choose_one_bit_e2e() { j.join().unwrap(); } - // Gather constants + input labels for finalized instances + // Gather input labels for finalized instances let mut cases_true = Vec::new(); let mut cases_false = Vec::new(); for idx in finalize_indices { - let t = garbler.true_wire_constant_for(idx); - let f = garbler.false_wire_constant_for(idx); - let input_labels = garbler.input_labels_for(idx); assert_eq!(input_labels.len(), 1); @@ -181,15 +190,11 @@ fn cut_and_choose_one_bit_e2e() { cases_true.push(EvaluatorCaseInput { index: idx, input: e_true, - true_constant_wire: t, - false_constant_wire: f, }); cases_false.push(EvaluatorCaseInput { index: idx, input: e_false, - true_constant_wire: t, - false_constant_wire: f, }); } @@ -370,11 +375,24 @@ fn cut_and_choose_fq12_mul_e2e() { // Garbler flow let cfg_g = Config::new(total, finalize, input.clone()); let mut garbler = Garbler::create(&mut rng, cfg_g, CAPACITY, build_fq12_mul_eq_const); - let commits = garbler.commit(); - // Evaluator chooses to finalize instances + // First phase: commit without nonce + let first_commits = garbler.commit_phase_one::(); + + // Evaluator chooses to finalize instances with first commits let cfg_e = Config::new(total, finalize, input.clone()); - let evaluator: Evaluator = Evaluator::create(&mut rng, cfg_e, commits.clone()); + let mut evaluator: Evaluator = + Evaluator::create(&mut rng, cfg_e, first_commits.clone()); + + // Get nonce from evaluator + let nonce = evaluator.get_nonce(); + + // Second phase: commit with nonce + let second_commits = garbler.commit_phase_two::(nonce); + + // Fill evaluator with second commits + evaluator.fill_second_commit(second_commits.clone()); + let to_finalize = evaluator.finalized_indexes().to_vec().into_boxed_slice(); // Prepare channels for finalized instances using iterator + unzip @@ -424,9 +442,6 @@ fn cut_and_choose_fq12_mul_e2e() { let mut cases_true = Vec::new(); for idx in to_finalize.iter().copied() { - let t = garbler.true_wire_constant_for(idx); - let f = garbler.false_wire_constant_for(idx); - let labels = garbler.input_labels_for(idx); let input_true = Fq12MulInput { labels: labels.clone(), @@ -436,8 +451,6 @@ fn cut_and_choose_fq12_mul_e2e() { cases_true.push(EvaluatorCaseInput { index: idx, input: input_true, - true_constant_wire: t, - false_constant_wire: f, }); } @@ -450,7 +463,7 @@ fn cut_and_choose_fq12_mul_e2e() { assert!(out.value, "a*b == prod_m should be true"); assert_eq!( super::commit_label(out.active_label), - commits[idx].output_label1_commit() + first_commits[idx].output_commit_true() ); } @@ -473,8 +486,6 @@ fn cut_and_choose_fq12_mul_e2e() { cases_false.push(EvaluatorCaseInput { index: idx, input: input_false, - true_constant_wire: garbler.true_wire_constant_for(idx), - false_constant_wire: garbler.false_wire_constant_for(idx), }); } @@ -486,7 +497,7 @@ fn cut_and_choose_fq12_mul_e2e() { assert!(!out.value, "a*b_alt == prod_m should be false"); assert_eq!( super::commit_label(out.active_label), - commits[idx].output_label0_commit() + first_commits[idx].output_commit_false() ); } } diff --git a/src/hashers/mod.rs b/src/hashers/mod.rs index 28f339c5..5ff7500b 100644 --- a/src/hashers/mod.rs +++ b/src/hashers/mod.rs @@ -11,6 +11,13 @@ pub enum HasherKind { } pub mod aes_ni; +pub mod sha256; + +// Re-export label commit hashers and trait for public API +pub use sha256::{ + AesLabelCommitHasher, Commit, DefaultLabelCommitHasher, LabelCommitHasher, + Sha256LabelCommitHasher, commit_label_with, +}; pub trait GateHasher: HashWithGate<1> + HashWithGate<2> {} impl + HashWithGate<2>> GateHasher for H {} diff --git a/src/hashers/sha256.rs b/src/hashers/sha256.rs new file mode 100644 index 00000000..d7deef62 --- /dev/null +++ b/src/hashers/sha256.rs @@ -0,0 +1,58 @@ +//! Label commit hashers for the cut-and-choose protocol. + +use std::fmt; + +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; + +use crate::{S, hashers}; + +/// Trait for hashing garbled circuit labels for commitment. +pub trait LabelCommitHasher: fmt::Debug { + type Output: Copy + + fmt::Debug + + Eq + + Send + + Sync + + Serialize + + for<'de> Deserialize<'de> + + AsRef<[u8]>; + + fn hash_label(label: S) -> Self::Output; +} + +/// SHA-256 based label commit hasher. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct Sha256LabelCommitHasher; + +impl LabelCommitHasher for Sha256LabelCommitHasher { + type Output = [u8; 32]; + + fn hash_label(label: S) -> Self::Output { + let digest = Sha256::digest(label.to_u128().to_be_bytes()); + digest.into() + } +} + +/// AES-based label commit hasher. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct AesLabelCommitHasher; + +impl LabelCommitHasher for AesLabelCommitHasher { + type Output = [u8; 16]; + + fn hash_label(label: S) -> Self::Output { + hashers::aes_ni::aes128_encrypt_block_static(label.to_bytes()) + .expect("AES backend should be available (HW or software)") + } +} + +/// Helper function to commit a label using a specific hasher. +pub fn commit_label_with(label: S) -> H::Output { + H::hash_label(label) +} + +/// Default label commit hasher type. +pub type DefaultLabelCommitHasher = AesLabelCommitHasher; +/// Default commit type. +pub type Commit = ::Output; diff --git a/src/lib.rs b/src/lib.rs index 3d513859..0772a8b9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,7 +17,16 @@ pub use crate::circuit::modes::EvaluatedWire; // Re-export GarbledWire from mode locality while keeping public path stable pub use crate::circuit::modes::GarbledWire; // Root-level hasher exports -pub use crate::hashers::{AesNiHasher, Blake3Hasher, GateHasher, HasherKind}; +pub use crate::hashers::{ + AesLabelCommitHasher, + AesNiHasher, + Blake3Hasher, + GateHasher, + HasherKind, + // Label commit hashers for cut-and-choose + LabelCommitHasher, + Sha256LabelCommitHasher, +}; pub type DefaultHasher = crate::hashers::Blake3Hasher; pub use ciphertext_hasher::AESAccumulatingHash; @@ -72,4 +81,7 @@ pub mod ark { } pub use cut_and_choose::groth16 as groth16_cut_and_choose; -pub use groth16_cut_and_choose::{GarbledInstanceCommit, Garbler, OpenForInstance}; +pub use groth16_cut_and_choose::{CommitPhaseOne, CommitPhaseTwo, Garbler, OpenForInstance}; + +#[cfg(feature = "sp1-soldering")] +pub mod sp1_soldering; diff --git a/src/sp1_soldering.rs b/src/sp1_soldering.rs new file mode 100644 index 00000000..6586c949 --- /dev/null +++ b/src/sp1_soldering.rs @@ -0,0 +1,394 @@ +use std::{path::PathBuf, time::Instant}; + +use rkyv::util::AlignedVec; +use sp1_core_executor::SP1ContextBuilder; +use sp1_core_machine::io::SP1Stdin; +use sp1_prover::{ + Groth16Bn254Proof, SP1Prover, SP1PublicValues, build, components::CpuProverComponents, +}; +use sp1_stark::SP1ProverOpts; +use tracing::{info, instrument}; + +#[path = "../sp1-soldering-program/src/types.rs"] +mod types; + +pub use types::{Sha256Commit, SolderedLabelsData as SolderedLabels}; + +use crate::{GarbledWire, S, circuit::CircuitInput}; + +/// Trait for inputs that can be soldered with deltas to create derived instances +pub trait SolderInput: CircuitInput { + /// Apply per-wire deltas to create a new instance + fn solder(&self, per_wire_deltas: &[(S, S)]) -> Self; +} + +/// Returns the compiled soldering guest ELF bytes. +pub fn elf() -> &'static [u8] { + include_bytes!(env!("SP1_ELF_sp1-soldering-guest")) +} + +pub struct SolderingProof { + pub proof: Groth16Bn254Proof, + pub deltas: Vec>, +} + +/// Serializes the wires input into the format expected by the SP1 guest. +pub fn serialize_wires_input(input: &types::WiresInput) -> Result { + rkyv::to_bytes::(input) +} + +/// Serializes the soldering public parameters. +pub fn serialize_public_params( + params: &types::SolderedLabelsData, +) -> Result { + rkyv::to_bytes::(params) +} + +/// Deserializes the soldering public parameters emitted by the SP1 guest. +pub fn deserialize_public_params( + bytes: &[u8], +) -> Result { + // Safety: The SP1 program writes out a valid `SolderedLabelsData` archive and + // we only call this on buffers produced by that program or in tests that + // mirror its serialization logic. + unsafe { rkyv::from_bytes_unchecked::(bytes) } +} + +fn groth16_artifacts_dir() -> PathBuf { + std::env::var("SP1_GROTH16_CIRCUIT_PATH") + .map(PathBuf::from) + .unwrap_or_else(|_| dirs::home_dir().unwrap().join(".sp1/circuits/groth16")) + .join(sp1_prover::SP1_CIRCUIT_VERSION.trim()) +} + +#[instrument(skip_all)] +pub fn prove_soldering(instances: Vec>, nonce: u128) -> SolderingProof { + let input = types::WiresInput { + instances_wires: instances + .into_iter() + .map(|instance| { + instance + .into_iter() + .map(|gw| (gw.label0.to_u128(), gw.label1.to_u128())) + .collect::>() + }) + .collect::>(), + nonce, + }; + + let prover = SP1Prover::::new(); + + let input_bytes = serialize_wires_input(&input).expect("failed to serialize wires input"); + + let mut stdin = SP1Stdin::new(); + stdin.write(&input_bytes.as_slice()); // example input + + // 3. Create proving/verification keys. + let (_pk, pk_device, program, vk) = prover.setup(elf()); + + // 4. Optional: customise proving opts/context. + let opts = SP1ProverOpts::default(); + let context = SP1ContextBuilder::default().build(); + + // 5. Prove the core execution. + let prove_time = Instant::now(); + let core_proof = prover + .prove_core(&pk_device, program, &stdin, opts, context) + .unwrap(); + info!("Proved in {}", prove_time.elapsed().as_secs()); + let public_values = core_proof.public_values.clone(); + + info!("Raw data from program is {public_values:?}"); + + let data = deserialize_public_params(public_values.as_slice()) + .expect("failed to deserialize `SolderedLabelsData`"); + + info!("Data from program is {data:?}"); + + // 6. Compress → shrink → wrap (PLONK/STARK outer proof). + let compress_time = Instant::now(); + let deferred = stdin.proofs.iter().map(|(p, _)| p.clone()).collect(); + let reduced = prover.compress(&vk, core_proof, deferred, opts).unwrap(); + let shrunk = prover.shrink(reduced, opts).unwrap(); + let wrapped = prover.wrap_bn254(shrunk, opts).unwrap(); + info!("Compressed in {}", compress_time.elapsed().as_secs()); + + // 7. Build/download Groth16 artifacts and produce Groth16 proof. + let wrap_time = Instant::now(); + + let artifacts = if sp1_prover::build::sp1_dev_mode() { + build::try_build_groth16_bn254_artifacts_dev(&wrapped.vk, &wrapped.proof) + } else { + groth16_artifacts_dir() + }; + + let groth16_proof = prover.wrap_groth16_bn254(wrapped, &artifacts); + info!("Wrapped in {}", wrap_time.elapsed().as_secs()); + + SolderingProof { + proof: groth16_proof, + deltas: data.deltas, + } +} + +#[instrument(skip_all)] +pub fn verify_soldering( + proof: SolderingProof, + base_commitment: Vec<(Sha256Commit, Sha256Commit)>, + base_nonce_commitment: Vec<(Sha256Commit, Sha256Commit)>, + nonce: u128, + commitments: Vec>, +) -> bool { + info!("start"); + let SolderingProof { proof, deltas } = proof; + + let pp = types::SolderedLabelsData { + deltas, + base_commitment, + base_nonce_commitment, + nonce, + commitments, + }; + + let input_bytes = serialize_public_params(&pp).expect("failed to serialize public params"); + + let prover = SP1Prover::::new(); + let (_pk, _pk_device, _program, vk) = prover.setup(elf()); + + let artifacts = groth16_artifacts_dir(); + + prover + .verify_groth16_bn254( + &proof, + &vk, + &SP1PublicValues::from(input_bytes.as_slice()), + &artifacts, + ) + .unwrap(); + + info!("end"); + + true +} + +#[cfg(test)] +mod tests { + use std::time::Instant; + + use test_log::test; + use tracing::info; + + use super::*; + use crate::S; + + /// Hash a label to create a commitment (internal helper for tests) + fn hash_label(label: u128) -> Sha256Commit { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(label.to_be_bytes()); + let result = hasher.finalize(); + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(&result); + bytes + } + + /// Build the expected public parameters for a set of raw wire labels. + fn build_expected_public_params( + raw_instances: &[Vec<(u128, u128)>], + nonce: u128, + ) -> SolderedLabels { + let (base, rest) = raw_instances + .split_first() + .expect("at least one instance required"); + + let mut base_commitment = Vec::with_capacity(base.len()); + let mut base_nonce_commitment = Vec::with_capacity(base.len()); + + for &(label0, label1) in base { + base_commitment.push((hash_label(label0), hash_label(label1))); + base_nonce_commitment.push((hash_label(label0 ^ nonce), hash_label(label1 ^ nonce))); + } + + let mut commitments = Vec::with_capacity(rest.len()); + let mut deltas = Vec::with_capacity(rest.len()); + + for instance in rest { + let mut instance_commitment = Vec::with_capacity(instance.len()); + let mut instance_deltas = Vec::with_capacity(instance.len()); + + for ((base0, base1), (label0, label1)) in base.iter().zip(instance.iter()) { + instance_commitment.push((hash_label(*label0), hash_label(*label1))); + instance_deltas.push((base0 ^ label0, base1 ^ label1)); + } + + commitments.push(instance_commitment); + deltas.push(instance_deltas); + } + + SolderedLabels { + deltas, + base_commitment, + base_nonce_commitment, + nonce, + commitments, + } + } + + #[test] + #[ignore] + fn test_core_public_params_roundtrip() { + use rand::{Rng, SeedableRng, rngs::StdRng}; + + let wires = 1; + let instances = 1; + + let mut rng = StdRng::seed_from_u64(42); + let nonce: u128 = rng.r#gen(); + let delta: u128 = rng.r#gen::() | 1; + + let mut raw_instances = Vec::with_capacity(1 + instances); + + for _ in 0..=instances { + let mut raw_labels = Vec::with_capacity(wires); + + for _ in 0..wires { + let label0: u128 = rng.r#gen(); + let label1: u128 = label0 ^ delta; + raw_labels.push((label0, label1)); + } + + raw_instances.push(raw_labels); + } + + let input = types::WiresInput { + instances_wires: raw_instances.clone(), + nonce, + }; + + let input_bytes = + serialize_wires_input(&input).expect("failed to serialize wires input for core test"); + + let mut stdin = SP1Stdin::new(); + stdin.write(&input_bytes.as_slice()); + + let prover = SP1Prover::::new(); + let (_pk, pk_device, program, _vk) = prover.setup(elf()); + let opts = SP1ProverOpts::default(); + let context = SP1ContextBuilder::default().build(); + + let core_proof = prover + .prove_core(&pk_device, program, &stdin, opts, context) + .expect("core proving failed"); + + let public_values = core_proof.public_values; + + let recovered = + deserialize_public_params(public_values.as_slice()).expect("failed to deserialize pp"); + let expected = build_expected_public_params(&raw_instances, nonce); + + assert_eq!( + recovered, expected, + "deserialized public params differ from expected output" + ); + + let reserialized = + serialize_public_params(&recovered).expect("failed to reserialize public params"); + let decoded = deserialize_public_params(reserialized.as_slice()) + .expect("failed to deserialize reserialized params"); + assert_eq!( + decoded, recovered, + "reserialized params differ from original deserialize output" + ); + } + + /// Helper function to test prove and verify with configurable parameters + fn test_soldering_with_params(wires: usize, instances: usize) { + use rand::Rng; + + let mut rng = rand::thread_rng(); + let nonce: u128 = rng.r#gen(); + + // Generate garbled wires with consistent delta + let delta: u128 = rng.r#gen::() | 1; // Ensure odd for Free-XOR + + let mut all_instances = Vec::with_capacity(1 + instances); + let mut all_raw_labels = Vec::with_capacity(1 + instances); + + // Generate all instances (base + additional) + for i in 0..=instances { + let mut instance: Vec = Vec::with_capacity(wires); + let mut raw_labels: Vec<(u128, u128)> = Vec::with_capacity(wires); + + for _ in 0..wires { + let label0: u128 = rng.r#gen(); + let label1: u128 = label0 ^ delta; + + instance.push(GarbledWire { + label0: S::from_u128(label0), + label1: S::from_u128(label1), + }); + + raw_labels.push((label0, label1)); + } + + all_instances.push(instance); + all_raw_labels.push(raw_labels); + + if i == 0 { + info!("Generated base instance: {} wires", wires); + } + } + + info!("Generated {} additional instances", instances); + + // Prove using the public API + let prove_start = Instant::now(); + let proof = prove_soldering(all_instances.clone(), nonce); + info!( + "Total proving time: {} seconds", + prove_start.elapsed().as_secs() + ); + + // Now create the commitments exactly as the SP1 program does + let SolderedLabels { + base_commitment, + base_nonce_commitment, + commitments, + .. + } = build_expected_public_params(&all_raw_labels, nonce); + + // Verify using the public API + let verify_start = Instant::now(); + let is_valid = verify_soldering( + proof, + base_commitment, + base_nonce_commitment, + nonce, + commitments, + ); + + info!( + "Verification time: {} ms", + verify_start.elapsed().as_millis() + ); + + assert!(is_valid, "Proof verification failed"); + println!("Groth16 proof generated and verified successfully!"); + } + + #[test] + #[ignore] // Run with: cargo test test_soldering_quick -- --ignored + fn test_soldering_quick() { + println!("Running quick soldering test with minimal parameters (1 wire, 1 instance)"); + println!("This test should complete in a few seconds"); + test_soldering_with_params(1, 1); + } + + #[test] + #[ignore] // Run with: cargo test test_soldering_full -- --ignored + fn test_soldering_full() { + println!("Running full soldering test with real payload size (1019 wires, 6 instances)"); + println!("WARNING: This test takes approximately 74 minutes to complete!"); + test_soldering_with_params(1019, 6); + } +}