From 3b2d87fd083e796d8d057ecac958e9dd7b50f503 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Thu, 9 Nov 2023 15:14:59 +0530 Subject: [PATCH 01/31] initial commit for risc0 hash benchmark --- hash/risc0/bench/.gitignore | 4 + hash/risc0/bench/.vscode/settings.json | 5 + hash/risc0/bench/Cargo.toml | 17 ++ hash/risc0/bench/LICENSE | 201 ++++++++++++++++++ hash/risc0/bench/README.md | 101 +++++++++ hash/risc0/bench/host/Cargo.toml | 21 ++ .../bench/host/benches/sha256_benchmarks.rs | 46 ++++ hash/risc0/bench/host/src/lib.rs | 71 +++++++ hash/risc0/bench/methods/Cargo.toml | 10 + hash/risc0/bench/methods/build.rs | 3 + hash/risc0/bench/methods/guest/Cargo.toml | 10 + hash/risc0/bench/methods/guest/src/main.rs | 24 +++ hash/risc0/bench/methods/src/lib.rs | 1 + hash/risc0/bench/rust-toolchain.toml | 4 + 14 files changed, 518 insertions(+) create mode 100644 hash/risc0/bench/.gitignore create mode 100644 hash/risc0/bench/.vscode/settings.json create mode 100644 hash/risc0/bench/Cargo.toml create mode 100644 hash/risc0/bench/LICENSE create mode 100644 hash/risc0/bench/README.md create mode 100644 hash/risc0/bench/host/Cargo.toml create mode 100644 hash/risc0/bench/host/benches/sha256_benchmarks.rs create mode 100644 hash/risc0/bench/host/src/lib.rs create mode 100644 hash/risc0/bench/methods/Cargo.toml create mode 100644 hash/risc0/bench/methods/build.rs create mode 100644 hash/risc0/bench/methods/guest/Cargo.toml create mode 100644 hash/risc0/bench/methods/guest/src/main.rs create mode 100644 hash/risc0/bench/methods/src/lib.rs create mode 100644 hash/risc0/bench/rust-toolchain.toml diff --git a/hash/risc0/bench/.gitignore b/hash/risc0/bench/.gitignore new file mode 100644 index 0000000..f4247e1 --- /dev/null +++ b/hash/risc0/bench/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +Cargo.lock +methods/guest/Cargo.lock +target/ diff --git a/hash/risc0/bench/.vscode/settings.json b/hash/risc0/bench/.vscode/settings.json new file mode 100644 index 0000000..4545fa6 --- /dev/null +++ b/hash/risc0/bench/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.linkedProjects": [ + "./methods/guest/Cargo.toml" + ] +} \ No newline at end of file diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml new file mode 100644 index 0000000..5363877 --- /dev/null +++ b/hash/risc0/bench/Cargo.toml @@ -0,0 +1,17 @@ +[workspace] +resolver = "2" +members = ["host", "methods"] + +# Always optimize; building and running the guest takes much longer without optimization. +[profile.dev] +opt-level = 3 + +[profile.dev.build-override] +opt-level = 3 + +[profile.release] +debug = 1 +lto = true + +[profile.release.build-override] +opt-level = 3 diff --git a/hash/risc0/bench/LICENSE b/hash/risc0/bench/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/hash/risc0/bench/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/hash/risc0/bench/README.md b/hash/risc0/bench/README.md new file mode 100644 index 0000000..f1d1022 --- /dev/null +++ b/hash/risc0/bench/README.md @@ -0,0 +1,101 @@ +# RISC Zero Rust Starter Template + +Welcome to the RISC Zero Rust Starter Template! This template is intended to +give you a starting point for building a project using the RISC Zero zkVM. +Throughout the template (including in this README), you'll find comments +labelled `TODO` in places where you'll need to make changes. To better +understand the concepts behind this template, check out the [zkVM +Overview][zkvm-overview]. + +## Quick Start + +First, make sure [rustup] is installed. The +[`rust-toolchain.toml`][rust-toolchain] file will be used by `cargo` to +automatically install the correct version. + +To build all methods and execute the method within the zkVM, run the following +command: + +```bash +cargo run +``` + +This is an empty template, and so there is no expected output (until you modify +the code). + +### Running proofs remotely on Bonsai + +_Note: The Bonsai proving service is still in early Alpha; an API key is +required for access. [Click here to request access][bonsai access]._ + +If you have access to the URL and API key to Bonsai you can run your proofs +remotely. To prove in Bonsai mode, invoke `cargo run` with two additional +environment variables: + +```bash +BONSAI_API_KEY="YOUR_API_KEY" BONSAI_API_URL="BONSAI_URL" cargo run +``` + +## How to create a project based on this template + +Search this template for the string `TODO`, and make the necessary changes to +implement the required feature described by the `TODO` comment. Some of these +changes will be complex, and so we have a number of instructional resources to +assist you in learning how to write your own code for the RISC Zero zkVM: + +- The [RISC Zero Developer Docs][dev-docs] is a great place to get started. +- Example projects are available in the [examples folder][examples] of + [`risc0`][risc0-repo] repository. +- Reference documentation is available at [https://docs.rs][docs.rs], including + [`risc0-zkvm`][risc0-zkvm], [`cargo-risczero`][cargo-risczero], + [`risc0-build`][risc0-build], and [others][crates]. + +## Directory Structure + +It is possible to organize the files for these components in various ways. +However, in this starter template we use a standard directory structure for zkVM +applications, which we think is a good starting point for your applications. + +```text +project_name +├── Cargo.toml +├── host +│ ├── Cargo.toml +│ └── src +│ └── main.rs <-- [Host code goes here] +└── methods + ├── Cargo.toml + ├── build.rs + ├── guest + │ ├── Cargo.toml + │ └── src + │ └── bin + │ └── method_name.rs <-- [Guest code goes here] + └── src + └── lib.rs +``` + +## Video Tutorial + +For a walk-through of how to build with this template, check out this [excerpt +from our workshop at ZK HACK III][zkhack-iii]. + +## Questions, Feedback, and Collaborations + +We'd love to hear from you on [Discord][discord] or [Twitter][twitter]. + +[bonsai access]: https://bonsai.xyz/apply +[cargo-risczero]: https://docs.rs/cargo-risczero +[crates]: https://github.com/risc0/risc0/blob/main/README.md#rust-binaries +[dev-docs]: https://dev.risczero.com +[discord]: https://discord.gg/risczero +[docs.rs]: https://docs.rs/releases/search?query=risc0 +[examples]: https://github.com/risc0/risc0/tree/main/examples +[risc0-build]: https://docs.rs/risc0-build +[risc0-repo]: https://www.github.com/risc0/risc0 +[risc0-zkvm]: https://docs.rs/risc0-zkvm +[rustup]: https://rustup.rs +[rust-toolchain]: rust-toolchain.toml +[twitter]: https://twitter.com/risczero +[zkvm-overview]: https://dev.risczero.com/zkvm +[zkhack-iii]: https://www.youtube.com/watch?v=Yg_BGqj_6lg&list=PLcPzhUaCxlCgig7ofeARMPwQ8vbuD6hC5&index=5 diff --git a/hash/risc0/bench/host/Cargo.toml b/hash/risc0/bench/host/Cargo.toml new file mode 100644 index 0000000..c28882c --- /dev/null +++ b/hash/risc0/bench/host/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "host" +version = "0.1.0" +edition = "2021" + +[dependencies] +methods = { path = "../methods" } +risc0-zkvm = { version = "0.19.0" } +serde = "1.0" +rand = "0.8.5" + +[dev-dependencies] +criterion = "0.5.1" + +[[bench]] +name = "sha256_benchmarks" +harness = false + +[[bin]] +name = "host" +path = "src/lib.rs" \ No newline at end of file diff --git a/hash/risc0/bench/host/benches/sha256_benchmarks.rs b/hash/risc0/bench/host/benches/sha256_benchmarks.rs new file mode 100644 index 0000000..fb0d9d5 --- /dev/null +++ b/hash/risc0/bench/host/benches/sha256_benchmarks.rs @@ -0,0 +1,46 @@ + +use host::sha_bench; +use criterion::{criterion_group, criterion_main, Criterion}; +use rand::RngCore; +fn sha256_1kb(c: &mut Criterion) { + c.bench_function("sha256_bench", |b| { + //generating 1kb of random data in a vector of u8 + let mut data = [0u8; 64]; + rand::thread_rng().fill_bytes(&mut data); + let input: Vec = data.to_vec(); + + // println!("{:?}", input); + b.iter(|| { + sha_bench(input.clone()); + // hasher.update(data); + // black_box(hasher.finalize()); + }); + }); + + c.bench_function("sha256_bench", |b| { + //generating 1kb of random data in a vector of u8 + let mut data = [0u8; 64]; + rand::thread_rng().fill_bytes(&mut data); + let input: Vec = data.to_vec(); + + // println!("{:?}", input); + b.iter(|| { + sha_bench(input.clone()); + // hasher.update(data); + // black_box(hasher.finalize()); + }); + }); + +} + +criterion_group!( + name = benches; + + // Setting the sample size to 10 for quick benchmarks + // Becuase running default number of samples(100) takes a lot of time + config = Criterion::default().sample_size(10); + targets = sha256_1kb +); + +// criterion_group!(benches, sha256_bench); +criterion_main!(benches); diff --git a/hash/risc0/bench/host/src/lib.rs b/hash/risc0/bench/host/src/lib.rs new file mode 100644 index 0000000..8ff50cd --- /dev/null +++ b/hash/risc0/bench/host/src/lib.rs @@ -0,0 +1,71 @@ +// These constants represent the RISC-V ELF and the image ID generated by risc0-build. +// The ELF is used for proving and the ID is used for verification. +use methods::{ + METHOD_ELF, METHOD_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::{ sha}; + +pub fn sha_bench(input: Vec) { + // An executor environment describes the configurations for the zkVM + // including program inputs. + // An default ExecutorEnv can be created like so: + // `let env = ExecutorEnv::builder().build().unwrap();` + // However, this `env` does not have any inputs. + // + // To add add guest input to the executor environment, use + // ExecutorEnvBuilder::write(). + // To access this method, you'll need to use ExecutorEnv::builder(), which + // creates an ExecutorEnvBuilder. When you're done adding input, call + // ExecutorEnvBuilder::build(). + + // For example: + // let input: u32 = 15*2^27 + 1; + // let input: Vec = data.to_vec(); + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, METHOD_ELF).unwrap(); + + // TODO: Implement code for retrieving receipt journal here. + + // For example: + let _output: sha::Digest = receipt.journal.decode().unwrap(); + // println!("output: {:?}", _output); + // Optional: Verify receipt to confirm that recipients will also be able to + // verify your receipt + // receipt.verify(METHOD_ID).unwrap(); +} + +fn main() { + sha_bench(vec![97, 98, 99, 100, 101, 102, 103, 104]); +} + +// #[cfg(test)] +// mod benches { +// extern crate criterion; + +// use criterion::{black_box, criterion_group, criterion_main, Criterion}; +// use crate::main as your_function_to_benchmark; +// // Your benchmark function + +// fn my_benchmark(c: &mut Criterion) { +// c.bench_function("my_function", |b| { +// b.iter(|| { +// // Code to benchmark +// let result = your_function_to_benchmark(); +// black_box(result); +// }); +// }); +// } + +// // Define other benchmark functions here + +// criterion_group!(benches, my_benchmark); +// criterion_main!(benches); +// } + + diff --git a/hash/risc0/bench/methods/Cargo.toml b/hash/risc0/bench/methods/Cargo.toml new file mode 100644 index 0000000..30d237a --- /dev/null +++ b/hash/risc0/bench/methods/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "methods" +version = "0.1.0" +edition = "2021" + +[build-dependencies] +risc0-build = { version = "0.19.0" } + +[package.metadata.risc0] +methods = ["guest"] diff --git a/hash/risc0/bench/methods/build.rs b/hash/risc0/bench/methods/build.rs new file mode 100644 index 0000000..08a8a4e --- /dev/null +++ b/hash/risc0/bench/methods/build.rs @@ -0,0 +1,3 @@ +fn main() { + risc0_build::embed_methods(); +} diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml new file mode 100644 index 0000000..550f6bf --- /dev/null +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "method" +version = "0.1.0" +edition = "2021" + +[workspace] + +[dependencies] +# If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm +risc0-zkvm = { version = "0.19.0", default-features = false, features = [ "std" ] } diff --git a/hash/risc0/bench/methods/guest/src/main.rs b/hash/risc0/bench/methods/guest/src/main.rs new file mode 100644 index 0000000..ceffa06 --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/main.rs @@ -0,0 +1,24 @@ +#![no_main] +// If you want to try std support, also update the guest Cargo.toml file + + +use risc0_zkvm::{guest::env, sha, sha::Sha256}; + +risc0_zkvm::guest::entry!(main); + + +pub fn main() { + // // TODO: Implement your guest code here + + // // read the input + // let input: u32 = env::read(); + + // // TODO: do something with the input + + // // write public output to the journal + // env::commit(&input); + + let data: Vec = env::read(); + let hash = sha::Impl::hash_bytes(&data); + env::commit(&hash) +} diff --git a/hash/risc0/bench/methods/src/lib.rs b/hash/risc0/bench/methods/src/lib.rs new file mode 100644 index 0000000..1bdb308 --- /dev/null +++ b/hash/risc0/bench/methods/src/lib.rs @@ -0,0 +1 @@ +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/bench/rust-toolchain.toml b/hash/risc0/bench/rust-toolchain.toml new file mode 100644 index 0000000..36614c3 --- /dev/null +++ b/hash/risc0/bench/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "stable" +components = ["rustfmt", "rust-src"] +profile = "minimal" From b2bdaac8b453e13eb7d66fc0f55923f441264289 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Thu, 9 Nov 2023 21:23:52 +0530 Subject: [PATCH 02/31] sha256 benchmark added --- .../bench/host/benches/sha256_benchmarks.rs | 68 ++++++++++++++++--- hash/risc0/bench/host/src/lib.rs | 29 +------- 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/hash/risc0/bench/host/benches/sha256_benchmarks.rs b/hash/risc0/bench/host/benches/sha256_benchmarks.rs index fb0d9d5..c695809 100644 --- a/hash/risc0/bench/host/benches/sha256_benchmarks.rs +++ b/hash/risc0/bench/host/benches/sha256_benchmarks.rs @@ -2,8 +2,8 @@ use host::sha_bench; use criterion::{criterion_group, criterion_main, Criterion}; use rand::RngCore; -fn sha256_1kb(c: &mut Criterion) { - c.bench_function("sha256_bench", |b| { +fn sha256_benchmarks(c: &mut Criterion) { + c.bench_function("Benchmarking sha256 on 1KB of random data:", |b| { //generating 1kb of random data in a vector of u8 let mut data = [0u8; 64]; rand::thread_rng().fill_bytes(&mut data); @@ -12,34 +12,80 @@ fn sha256_1kb(c: &mut Criterion) { // println!("{:?}", input); b.iter(|| { sha_bench(input.clone()); - // hasher.update(data); - // black_box(hasher.finalize()); }); }); - c.bench_function("sha256_bench", |b| { - //generating 1kb of random data in a vector of u8 - let mut data = [0u8; 64]; + c.bench_function("Benchmarking sha256 on 2KB of random data:", |b| { + //generating 2kb of random data in a vector of u8 + let mut data = [0u8; 128]; rand::thread_rng().fill_bytes(&mut data); let input: Vec = data.to_vec(); // println!("{:?}", input); b.iter(|| { sha_bench(input.clone()); - // hasher.update(data); - // black_box(hasher.finalize()); + + }); + }); + + c.bench_function("Benchmarking sha256 on 10KB of random data:", |b| { + //generating 10kb of random data in a vector of u8 + let mut data = [0u8; 1280]; + rand::thread_rng().fill_bytes(&mut data); + let input: Vec = data.to_vec(); + + b.iter(|| { + sha_bench(input.clone()); }); }); - } +// fn sha256_benchmarks_2(c: &mut Criterion) { +// c.bench_function("Benchmarking sha256 on 1KB of random data:", |b| { +// //generating 1kb of random data in a vector of u8 +// let mut data = [0u8; 64]; +// rand::thread_rng().fill_bytes(&mut data); +// let input: Vec = data.to_vec(); + +// // println!("{:?}", input); +// b.iter(|| { +// sha_bench(input.clone()); +// }); +// }); + +// // c.bench_function("Benchmarking sha256 on 2KB of random data:", |b| { +// // //generating 2kb of random data in a vector of u8 +// // let mut data = [0u8; 128]; +// // rand::thread_rng().fill_bytes(&mut data); +// // let input: Vec = data.to_vec(); + +// // // println!("{:?}", input); +// // b.iter(|| { +// // sha_bench(input.clone()); + +// // }); +// // }); + +// // c.bench_function("Benchmarking sha256 on 10KB of random data:", |b| { +// // //generating 10kb of random data in a vector of u8 +// // let mut data = [0u8; 1280]; +// // rand::thread_rng().fill_bytes(&mut data); +// // let input: Vec = data.to_vec(); + +// // b.iter(|| { +// // sha_bench(input.clone()); +// // }); +// // }); + +// } + criterion_group!( name = benches; // Setting the sample size to 10 for quick benchmarks // Becuase running default number of samples(100) takes a lot of time config = Criterion::default().sample_size(10); - targets = sha256_1kb + targets = sha256_benchmarks //, sha256_benchmarks_2 ); // criterion_group!(benches, sha256_bench); diff --git a/hash/risc0/bench/host/src/lib.rs b/hash/risc0/bench/host/src/lib.rs index 8ff50cd..2d48276 100644 --- a/hash/risc0/bench/host/src/lib.rs +++ b/hash/risc0/bench/host/src/lib.rs @@ -37,35 +37,10 @@ pub fn sha_bench(input: Vec) { // println!("output: {:?}", _output); // Optional: Verify receipt to confirm that recipients will also be able to // verify your receipt - // receipt.verify(METHOD_ID).unwrap(); + receipt.verify(METHOD_ID).unwrap(); } +#[allow(dead_code)] fn main() { sha_bench(vec![97, 98, 99, 100, 101, 102, 103, 104]); } - -// #[cfg(test)] -// mod benches { -// extern crate criterion; - -// use criterion::{black_box, criterion_group, criterion_main, Criterion}; -// use crate::main as your_function_to_benchmark; -// // Your benchmark function - -// fn my_benchmark(c: &mut Criterion) { -// c.bench_function("my_function", |b| { -// b.iter(|| { -// // Code to benchmark -// let result = your_function_to_benchmark(); -// black_box(result); -// }); -// }); -// } - -// // Define other benchmark functions here - -// criterion_group!(benches, my_benchmark); -// criterion_main!(benches); -// } - - From e564b28e8efb76e87e632f1a8e983c2c5272a101 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Thu, 9 Nov 2023 22:03:38 +0530 Subject: [PATCH 03/31] script for building & benchmark running added, code cleaning --- hash/risc0/bench/build.sh | 4 ++ .../bench/host/benches/sha256_benchmarks.rs | 42 +------------------ hash/risc0/bench/host/src/lib.rs | 25 ++--------- hash/risc0/bench/methods/guest/src/main.rs | 12 ------ hash/risc0/bench/run.sh | 4 ++ 5 files changed, 13 insertions(+), 74 deletions(-) create mode 100755 hash/risc0/bench/build.sh create mode 100755 hash/risc0/bench/run.sh diff --git a/hash/risc0/bench/build.sh b/hash/risc0/bench/build.sh new file mode 100755 index 0000000..6870477 --- /dev/null +++ b/hash/risc0/bench/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Run the 'cargo bench' command. +cargo build --release diff --git a/hash/risc0/bench/host/benches/sha256_benchmarks.rs b/hash/risc0/bench/host/benches/sha256_benchmarks.rs index c695809..c53e015 100644 --- a/hash/risc0/bench/host/benches/sha256_benchmarks.rs +++ b/hash/risc0/bench/host/benches/sha256_benchmarks.rs @@ -40,53 +40,13 @@ fn sha256_benchmarks(c: &mut Criterion) { }); } -// fn sha256_benchmarks_2(c: &mut Criterion) { -// c.bench_function("Benchmarking sha256 on 1KB of random data:", |b| { -// //generating 1kb of random data in a vector of u8 -// let mut data = [0u8; 64]; -// rand::thread_rng().fill_bytes(&mut data); -// let input: Vec = data.to_vec(); - -// // println!("{:?}", input); -// b.iter(|| { -// sha_bench(input.clone()); -// }); -// }); - -// // c.bench_function("Benchmarking sha256 on 2KB of random data:", |b| { -// // //generating 2kb of random data in a vector of u8 -// // let mut data = [0u8; 128]; -// // rand::thread_rng().fill_bytes(&mut data); -// // let input: Vec = data.to_vec(); - -// // // println!("{:?}", input); -// // b.iter(|| { -// // sha_bench(input.clone()); - -// // }); -// // }); - -// // c.bench_function("Benchmarking sha256 on 10KB of random data:", |b| { -// // //generating 10kb of random data in a vector of u8 -// // let mut data = [0u8; 1280]; -// // rand::thread_rng().fill_bytes(&mut data); -// // let input: Vec = data.to_vec(); - -// // b.iter(|| { -// // sha_bench(input.clone()); -// // }); -// // }); - -// } - criterion_group!( name = benches; // Setting the sample size to 10 for quick benchmarks // Becuase running default number of samples(100) takes a lot of time config = Criterion::default().sample_size(10); - targets = sha256_benchmarks //, sha256_benchmarks_2 + targets = sha256_benchmarks ); -// criterion_group!(benches, sha256_bench); criterion_main!(benches); diff --git a/hash/risc0/bench/host/src/lib.rs b/hash/risc0/bench/host/src/lib.rs index 2d48276..3db39b1 100644 --- a/hash/risc0/bench/host/src/lib.rs +++ b/hash/risc0/bench/host/src/lib.rs @@ -1,5 +1,3 @@ -// These constants represent the RISC-V ELF and the image ID generated by risc0-build. -// The ELF is used for proving and the ID is used for verification. use methods::{ METHOD_ELF, METHOD_ID }; @@ -7,21 +5,7 @@ use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; pub fn sha_bench(input: Vec) { - // An executor environment describes the configurations for the zkVM - // including program inputs. - // An default ExecutorEnv can be created like so: - // `let env = ExecutorEnv::builder().build().unwrap();` - // However, this `env` does not have any inputs. - // - // To add add guest input to the executor environment, use - // ExecutorEnvBuilder::write(). - // To access this method, you'll need to use ExecutorEnv::builder(), which - // creates an ExecutorEnvBuilder. When you're done adding input, call - // ExecutorEnvBuilder::build(). - - // For example: - // let input: u32 = 15*2^27 + 1; - // let input: Vec = data.to_vec(); + // Build an executor environment with the input. let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); // Obtain the default prover. @@ -30,17 +14,16 @@ pub fn sha_bench(input: Vec) { // Produce a receipt by proving the specified ELF binary. let receipt = prover.prove_elf(env, METHOD_ELF).unwrap(); - // TODO: Implement code for retrieving receipt journal here. - // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); - // println!("output: {:?}", _output); - // Optional: Verify receipt to confirm that recipients will also be able to + // verify your receipt receipt.verify(METHOD_ID).unwrap(); } #[allow(dead_code)] fn main() { + // This is a dummy call for the sha256 execution. + // Benchmarking does not depend on this. sha_bench(vec![97, 98, 99, 100, 101, 102, 103, 104]); } diff --git a/hash/risc0/bench/methods/guest/src/main.rs b/hash/risc0/bench/methods/guest/src/main.rs index ceffa06..aa4473f 100644 --- a/hash/risc0/bench/methods/guest/src/main.rs +++ b/hash/risc0/bench/methods/guest/src/main.rs @@ -1,22 +1,10 @@ #![no_main] -// If you want to try std support, also update the guest Cargo.toml file - use risc0_zkvm::{guest::env, sha, sha::Sha256}; risc0_zkvm::guest::entry!(main); - pub fn main() { - // // TODO: Implement your guest code here - - // // read the input - // let input: u32 = env::read(); - - // // TODO: do something with the input - - // // write public output to the journal - // env::commit(&input); let data: Vec = env::read(); let hash = sha::Impl::hash_bytes(&data); diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh new file mode 100755 index 0000000..fb14795 --- /dev/null +++ b/hash/risc0/bench/run.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Run the 'cargo bench' command. +cargo bench From 9fa3fe54f67859789d37b1e2bf722f76401ca46a Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 20 Nov 2023 14:35:03 +0530 Subject: [PATCH 04/31] passing cli argument added and run.sh modified accordingly --- hash/risc0/bench/host/Cargo.toml | 9 ++-- hash/risc0/bench/host/benches/bench_main.rs | 44 +++++++++++++++++++ .../bench/host/benches/benchmarks/mod.rs | 1 + .../{ => benchmarks}/sha256_benchmarks.rs | 36 +++++++-------- hash/risc0/bench/host/src/lib.rs | 7 +-- hash/risc0/bench/host/src/main.rs | 4 ++ hash/risc0/bench/run.sh | 15 ++++++- 7 files changed, 82 insertions(+), 34 deletions(-) create mode 100644 hash/risc0/bench/host/benches/bench_main.rs create mode 100644 hash/risc0/bench/host/benches/benchmarks/mod.rs rename hash/risc0/bench/host/benches/{ => benchmarks}/sha256_benchmarks.rs (53%) create mode 100644 hash/risc0/bench/host/src/main.rs diff --git a/hash/risc0/bench/host/Cargo.toml b/hash/risc0/bench/host/Cargo.toml index c28882c..1747bba 100644 --- a/hash/risc0/bench/host/Cargo.toml +++ b/hash/risc0/bench/host/Cargo.toml @@ -8,14 +8,11 @@ methods = { path = "../methods" } risc0-zkvm = { version = "0.19.0" } serde = "1.0" rand = "0.8.5" +clap = {version = "4.4.8", features = [ "derive" ]} [dev-dependencies] -criterion = "0.5.1" +criterion = {version ="0.5.1", default-features = false} [[bench]] -name = "sha256_benchmarks" +name = "bench_main" harness = false - -[[bin]] -name = "host" -path = "src/lib.rs" \ No newline at end of file diff --git a/hash/risc0/bench/host/benches/bench_main.rs b/hash/risc0/bench/host/benches/bench_main.rs new file mode 100644 index 0000000..f6b5634 --- /dev/null +++ b/hash/risc0/bench/host/benches/bench_main.rs @@ -0,0 +1,44 @@ +use criterion::Criterion; +// use clap::Parser; +// use std::env; +mod benchmarks; + +fn main() { + let mut criterion: criterion::Criterion<_> = (Criterion::default().sample_size(10)).configure_from_args(); + match std::env::args().skip(1).next() { + Some(arg) => { + match arg.as_str() { + "1" => benchmarks::sha256_benchmarks::sha256_benchmarks_1kb(&mut criterion), + "2" => benchmarks::sha256_benchmarks::sha256_benchmarks_2kb(&mut criterion), + "10" => benchmarks::sha256_benchmarks::sha256_benchmarks_10kb(&mut criterion), + _ => eprintln!("Invalid benchmark argument: {}", arg), + } + } + None => {eprintln!("No benchmark")} + } + + criterion::Criterion::default().configure_from_args().final_summary(); + } + + +// #[derive(Parser)] +// #[command(author, version, about, long_about = None)] +// struct Args { +// #[clap(long, short)] +// run_benchmark_function_one: bool, +// #[clap(long, short)] +// run_benchmark_function_two: bool, +// } + +// fn main(){ +// let args: Args = Args::parse(); +// let mut criterion: criterion::Criterion<_> = (Criterion::default().sample_size(10)).configure_from_args(); + +// if args.run_benchmark_function_one { +// benchmarks::sha256_benchmarks::sha256_benchmarks1(&mut criterion); +// } +// if args.run_benchmark_function_two { +// benchmarks::sha256_benchmarks22::sha256_benchmarks123(&mut criterion); +// } +// criterion::Criterion::default().configure_from_args().final_summary(); +// } diff --git a/hash/risc0/bench/host/benches/benchmarks/mod.rs b/hash/risc0/bench/host/benches/benchmarks/mod.rs new file mode 100644 index 0000000..006d0a4 --- /dev/null +++ b/hash/risc0/bench/host/benches/benchmarks/mod.rs @@ -0,0 +1 @@ +pub mod sha256_benchmarks; \ No newline at end of file diff --git a/hash/risc0/bench/host/benches/sha256_benchmarks.rs b/hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs similarity index 53% rename from hash/risc0/bench/host/benches/sha256_benchmarks.rs rename to hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs index c53e015..0bd640b 100644 --- a/hash/risc0/bench/host/benches/sha256_benchmarks.rs +++ b/hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs @@ -1,9 +1,9 @@ - use host::sha_bench; -use criterion::{criterion_group, criterion_main, Criterion}; +use criterion::Criterion; use rand::RngCore; -fn sha256_benchmarks(c: &mut Criterion) { - c.bench_function("Benchmarking sha256 on 1KB of random data:", |b| { + +pub fn sha256_benchmarks_1kb(c: &mut Criterion) { + c.bench_function(" sha256 on 1KB of random data:", |b| { //generating 1kb of random data in a vector of u8 let mut data = [0u8; 64]; rand::thread_rng().fill_bytes(&mut data); @@ -14,8 +14,11 @@ fn sha256_benchmarks(c: &mut Criterion) { sha_bench(input.clone()); }); }); +} - c.bench_function("Benchmarking sha256 on 2KB of random data:", |b| { +pub fn sha256_benchmarks_2kb(c: &mut Criterion) { + + c.bench_function(" sha256 on 2KB of random data:", |b| { //generating 2kb of random data in a vector of u8 let mut data = [0u8; 128]; rand::thread_rng().fill_bytes(&mut data); @@ -27,26 +30,19 @@ fn sha256_benchmarks(c: &mut Criterion) { }); }); +} - c.bench_function("Benchmarking sha256 on 10KB of random data:", |b| { - //generating 10kb of random data in a vector of u8 - let mut data = [0u8; 1280]; +pub fn sha256_benchmarks_10kb(c: &mut Criterion) { + + //generating 10kb of random data in a vector of u8 + let mut data = [0u8; 1280]; rand::thread_rng().fill_bytes(&mut data); let input: Vec = data.to_vec(); + c.bench_function(" sha256 on 10KB of random data:", |b| { + b.iter(|| { sha_bench(input.clone()); }); }); -} - -criterion_group!( - name = benches; - - // Setting the sample size to 10 for quick benchmarks - // Becuase running default number of samples(100) takes a lot of time - config = Criterion::default().sample_size(10); - targets = sha256_benchmarks -); - -criterion_main!(benches); +} \ No newline at end of file diff --git a/hash/risc0/bench/host/src/lib.rs b/hash/risc0/bench/host/src/lib.rs index 3db39b1..5a25047 100644 --- a/hash/risc0/bench/host/src/lib.rs +++ b/hash/risc0/bench/host/src/lib.rs @@ -21,9 +21,4 @@ pub fn sha_bench(input: Vec) { receipt.verify(METHOD_ID).unwrap(); } -#[allow(dead_code)] -fn main() { - // This is a dummy call for the sha256 execution. - // Benchmarking does not depend on this. - sha_bench(vec![97, 98, 99, 100, 101, 102, 103, 104]); -} + diff --git a/hash/risc0/bench/host/src/main.rs b/hash/risc0/bench/host/src/main.rs new file mode 100644 index 0000000..3033f62 --- /dev/null +++ b/hash/risc0/bench/host/src/main.rs @@ -0,0 +1,4 @@ + +fn main() { + +} diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index fb14795..b9fc453 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -1,4 +1,15 @@ #!/bin/bash -# Run the 'cargo bench' command. -cargo bench +# Check if ZKBENCH_INPUT_SIZE_KB is set, otherwise set a default value +ZKBENCH_INPUT_SIZE_KB=${ZKBENCH_INPUT_SIZE_KB:-"1"} # Default to 1 if not set + +# Run benchmarks with the specified input size +if [ "$ZKBENCH_INPUT_SIZE_KB" = "1" ]; then + cargo bench --bench bench_main -- 1 +elif [ "$ZKBENCH_INPUT_SIZE_KB" = "2" ]; then + cargo bench --bench bench_main -- 2 +elif [ "$ZKBENCH_INPUT_SIZE_KB" = "10" ]; then + cargo bench --bench bench_main -- 10 +else + echo "Invalid input size: $ZKBENCH_INPUT_SIZE_KB" +fi From ffb423610a0b9fbe72582c5b8310b0c1f1fda5f7 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Fri, 8 Dec 2023 12:52:19 +0530 Subject: [PATCH 05/31] criterion benchmarking removed, benchmarking using std::time --- hash/risc0/bench/.gitignore | 4 - hash/risc0/bench/.vscode/settings.json | 5 - hash/risc0/bench/Cargo.lock | 2029 +++++++++++++++++ hash/risc0/bench/host/Cargo.toml | 9 +- hash/risc0/bench/host/benches/bench_main.rs | 44 - .../bench/host/benches/benchmarks/mod.rs | 1 - .../benches/benchmarks/sha256_benchmarks.rs | 48 - hash/risc0/bench/host/src/lib.rs | 24 - hash/risc0/bench/host/src/main.rs | 45 +- hash/risc0/bench/methods/guest/Cargo.lock | 442 ++++ hash/risc0/bench/methods/guest/Cargo.toml | 4 + hash/risc0/bench/run.sh | 16 +- 12 files changed, 2525 insertions(+), 146 deletions(-) delete mode 100644 hash/risc0/bench/.gitignore delete mode 100644 hash/risc0/bench/.vscode/settings.json create mode 100644 hash/risc0/bench/Cargo.lock delete mode 100644 hash/risc0/bench/host/benches/bench_main.rs delete mode 100644 hash/risc0/bench/host/benches/benchmarks/mod.rs delete mode 100644 hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs delete mode 100644 hash/risc0/bench/host/src/lib.rs create mode 100644 hash/risc0/bench/methods/guest/Cargo.lock diff --git a/hash/risc0/bench/.gitignore b/hash/risc0/bench/.gitignore deleted file mode 100644 index f4247e1..0000000 --- a/hash/risc0/bench/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.DS_Store -Cargo.lock -methods/guest/Cargo.lock -target/ diff --git a/hash/risc0/bench/.vscode/settings.json b/hash/risc0/bench/.vscode/settings.json deleted file mode 100644 index 4545fa6..0000000 --- a/hash/risc0/bench/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rust-analyzer.linkedProjects": [ - "./methods/guest/Cargo.toml" - ] -} \ No newline at end of file diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock new file mode 100644 index 0000000..e6179f9 --- /dev/null +++ b/hash/risc0/bench/Cargo.lock @@ -0,0 +1,2029 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[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 = "bonsai-sdk" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "296de0c044ff3207f2252415ca3b5789de384e5d9a64185a003416bf11096ceb" +dependencies = [ + "reqwest", + "serde", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +dependencies = [ + "anstyle", + "clap_lex", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6e7d85896690fe195447717af8eceae0593ac2196fd42fe88c184e904406ce" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "host" +version = "0.1.0" +dependencies = [ + "criterion", + "methods", + "rand", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[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.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[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", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.2", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix", + "windows-sys", +] + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "linux-raw-sys" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "openssl" +version = "0.10.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac" +dependencies = [ + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[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", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "risc0-binfmt" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b008c7506a6acb15f14a87e7e57797fd901cdf2f4eb560a032df4e1fc12790" +dependencies = [ + "anyhow", + "elf", + "log", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", +] + +[[package]] +name = "risc0-build" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c44fdc4ad18c946a26dc42ed95ffc1cfa09a18973e68e394b83840724a5ca7ab" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924bbd4f27070f04556e10565441fbf64e399763a3f244819f84dc645590bca1" +dependencies = [ + "anyhow", + "bytemuck", + "log", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac44b6493d73638018d62eccec93f2797795d286c6201e2a79d842a16bbb43f" +dependencies = [ + "anyhow", + "log", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8d9ff7ca4b8a9ecf63e4567dfc5ab73ea4c4c20618cdd36d5c0eb69be80cb2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-zkp" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1b8f047ec52f645e5e1c46f69303658f9cca96f0a2dcb78b4e7cadef5c2ac3d" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "digest", + "hex", + "log", + "paste", + "rand_core", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b51d8aa8a4b0a350cca2deb9ead841989ed601ca3091e33a8ee8e6f2453048" +dependencies = [ + "anyhow", + "bincode", + "bonsai-sdk", + "bytemuck", + "bytes", + "cfg-if", + "getrandom", + "hex", + "log", + "num-derive", + "num-traits", + "prost", + "prost-build", + "protobuf-src", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver", + "serde", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59e9d18c75958239e91213a181e836e28dfbede913e4de66fa36e2ad1d70fcdc" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustix" +version = "0.38.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +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 = "tokio" +version = "1.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.5", + "windows-sys", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[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.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" + +[[package]] +name = "web-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys", +] diff --git a/hash/risc0/bench/host/Cargo.toml b/hash/risc0/bench/host/Cargo.toml index 1747bba..22fd27f 100644 --- a/hash/risc0/bench/host/Cargo.toml +++ b/hash/risc0/bench/host/Cargo.toml @@ -7,12 +7,7 @@ edition = "2021" methods = { path = "../methods" } risc0-zkvm = { version = "0.19.0" } serde = "1.0" -rand = "0.8.5" -clap = {version = "4.4.8", features = [ "derive" ]} +rand = "0.8.3" [dev-dependencies] -criterion = {version ="0.5.1", default-features = false} - -[[bench]] -name = "bench_main" -harness = false +criterion = "0.5.1" diff --git a/hash/risc0/bench/host/benches/bench_main.rs b/hash/risc0/bench/host/benches/bench_main.rs deleted file mode 100644 index f6b5634..0000000 --- a/hash/risc0/bench/host/benches/bench_main.rs +++ /dev/null @@ -1,44 +0,0 @@ -use criterion::Criterion; -// use clap::Parser; -// use std::env; -mod benchmarks; - -fn main() { - let mut criterion: criterion::Criterion<_> = (Criterion::default().sample_size(10)).configure_from_args(); - match std::env::args().skip(1).next() { - Some(arg) => { - match arg.as_str() { - "1" => benchmarks::sha256_benchmarks::sha256_benchmarks_1kb(&mut criterion), - "2" => benchmarks::sha256_benchmarks::sha256_benchmarks_2kb(&mut criterion), - "10" => benchmarks::sha256_benchmarks::sha256_benchmarks_10kb(&mut criterion), - _ => eprintln!("Invalid benchmark argument: {}", arg), - } - } - None => {eprintln!("No benchmark")} - } - - criterion::Criterion::default().configure_from_args().final_summary(); - } - - -// #[derive(Parser)] -// #[command(author, version, about, long_about = None)] -// struct Args { -// #[clap(long, short)] -// run_benchmark_function_one: bool, -// #[clap(long, short)] -// run_benchmark_function_two: bool, -// } - -// fn main(){ -// let args: Args = Args::parse(); -// let mut criterion: criterion::Criterion<_> = (Criterion::default().sample_size(10)).configure_from_args(); - -// if args.run_benchmark_function_one { -// benchmarks::sha256_benchmarks::sha256_benchmarks1(&mut criterion); -// } -// if args.run_benchmark_function_two { -// benchmarks::sha256_benchmarks22::sha256_benchmarks123(&mut criterion); -// } -// criterion::Criterion::default().configure_from_args().final_summary(); -// } diff --git a/hash/risc0/bench/host/benches/benchmarks/mod.rs b/hash/risc0/bench/host/benches/benchmarks/mod.rs deleted file mode 100644 index 006d0a4..0000000 --- a/hash/risc0/bench/host/benches/benchmarks/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod sha256_benchmarks; \ No newline at end of file diff --git a/hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs b/hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs deleted file mode 100644 index 0bd640b..0000000 --- a/hash/risc0/bench/host/benches/benchmarks/sha256_benchmarks.rs +++ /dev/null @@ -1,48 +0,0 @@ -use host::sha_bench; -use criterion::Criterion; -use rand::RngCore; - -pub fn sha256_benchmarks_1kb(c: &mut Criterion) { - c.bench_function(" sha256 on 1KB of random data:", |b| { - //generating 1kb of random data in a vector of u8 - let mut data = [0u8; 64]; - rand::thread_rng().fill_bytes(&mut data); - let input: Vec = data.to_vec(); - - // println!("{:?}", input); - b.iter(|| { - sha_bench(input.clone()); - }); - }); -} - -pub fn sha256_benchmarks_2kb(c: &mut Criterion) { - - c.bench_function(" sha256 on 2KB of random data:", |b| { - //generating 2kb of random data in a vector of u8 - let mut data = [0u8; 128]; - rand::thread_rng().fill_bytes(&mut data); - let input: Vec = data.to_vec(); - - // println!("{:?}", input); - b.iter(|| { - sha_bench(input.clone()); - - }); - }); -} - -pub fn sha256_benchmarks_10kb(c: &mut Criterion) { - - //generating 10kb of random data in a vector of u8 - let mut data = [0u8; 1280]; - rand::thread_rng().fill_bytes(&mut data); - let input: Vec = data.to_vec(); - - c.bench_function(" sha256 on 10KB of random data:", |b| { - - b.iter(|| { - sha_bench(input.clone()); - }); - }); -} \ No newline at end of file diff --git a/hash/risc0/bench/host/src/lib.rs b/hash/risc0/bench/host/src/lib.rs deleted file mode 100644 index 5a25047..0000000 --- a/hash/risc0/bench/host/src/lib.rs +++ /dev/null @@ -1,24 +0,0 @@ -use methods::{ - METHOD_ELF, METHOD_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::{ sha}; - -pub fn sha_bench(input: Vec) { - // Build an executor environment with the input. - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, METHOD_ELF).unwrap(); - - // For example: - let _output: sha::Digest = receipt.journal.decode().unwrap(); - - // verify your receipt - receipt.verify(METHOD_ID).unwrap(); -} - - diff --git a/hash/risc0/bench/host/src/main.rs b/hash/risc0/bench/host/src/main.rs index 3033f62..afab626 100644 --- a/hash/risc0/bench/host/src/main.rs +++ b/hash/risc0/bench/host/src/main.rs @@ -1,4 +1,47 @@ +use methods::{ + METHOD_ELF, METHOD_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::{ sha}; +// use rand::RngCore; +use rand::Rng; +use std::time::Instant; + +fn generate_bytes(size: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..size).map(|_| rng.gen()).collect() +} + +pub fn sha_bench(input: Vec) { + + let start_time = Instant::now(); + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, METHOD_ELF).unwrap(); + + // TODO: Implement code for retrieving receipt journal here. + + // For example: + let _output: sha::Digest = receipt.journal.decode().unwrap(); + + // verify your receipt + receipt.verify(METHOD_ID).unwrap(); + + let elapsed_time = start_time.elapsed(); + eprintln!("Total time: {:?}", elapsed_time); +} fn main() { - + let args: Vec = std::env::args().collect(); + eprintln!("{:?}", &args[1]); + // eprintln!("{:?}", &args[2]); + let size_kb = args[1].parse::().unwrap(); + eprintln!("{:?}", size_kb); + let input = generate_bytes(size_kb); + sha_bench(input); } diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock new file mode 100644 index 0000000..b817f44 --- /dev/null +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -0,0 +1,442 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[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 = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "elf" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6e7d85896690fe195447717af8eceae0593ac2196fd42fe88c184e904406ce" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "method" +version = "0.1.0" +dependencies = [ + "risc0-zkvm", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "risc0-binfmt" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b008c7506a6acb15f14a87e7e57797fd901cdf2f4eb560a032df4e1fc12790" +dependencies = [ + "anyhow", + "elf", + "log", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924bbd4f27070f04556e10565441fbf64e399763a3f244819f84dc645590bca1" +dependencies = [ + "anyhow", + "bytemuck", + "log", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac44b6493d73638018d62eccec93f2797795d286c6201e2a79d842a16bbb43f" +dependencies = [ + "anyhow", + "log", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8d9ff7ca4b8a9ecf63e4567dfc5ab73ea4c4c20618cdd36d5c0eb69be80cb2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-zkp" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1b8f047ec52f645e5e1c46f69303658f9cca96f0a2dcb78b4e7cadef5c2ac3d" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "digest", + "hex", + "log", + "paste", + "rand_core", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b51d8aa8a4b0a350cca2deb9ead841989ed601ca3091e33a8ee8e6f2453048" +dependencies = [ + "anyhow", + "bytemuck", + "cfg-if", + "getrandom", + "hex", + "log", + "num-derive", + "num-traits", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver", + "serde", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59e9d18c75958239e91213a181e836e28dfbede913e4de66fa36e2ad1d70fcdc" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index 550f6bf..8bcb40f 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -8,3 +8,7 @@ edition = "2021" [dependencies] # If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm risc0-zkvm = { version = "0.19.0", default-features = false, features = [ "std" ] } + +# [lib] +# name = "guest" +# path = "src/mod.rs" \ No newline at end of file diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index b9fc453..03e2842 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -1,15 +1,7 @@ #!/bin/bash -# Check if ZKBENCH_INPUT_SIZE_KB is set, otherwise set a default value -ZKBENCH_INPUT_SIZE_KB=${ZKBENCH_INPUT_SIZE_KB:-"1"} # Default to 1 if not set +# Set a default value if ZKBENCH_INPUT_SIZE_KB is not set +: ${ZKBENCH_INPUT_SIZE_KB:=1024} -# Run benchmarks with the specified input size -if [ "$ZKBENCH_INPUT_SIZE_KB" = "1" ]; then - cargo bench --bench bench_main -- 1 -elif [ "$ZKBENCH_INPUT_SIZE_KB" = "2" ]; then - cargo bench --bench bench_main -- 2 -elif [ "$ZKBENCH_INPUT_SIZE_KB" = "10" ]; then - cargo bench --bench bench_main -- 10 -else - echo "Invalid input size: $ZKBENCH_INPUT_SIZE_KB" -fi +# Run cargo run with the specified environment variable +cargo run $ZKBENCH_INPUT_SIZE_KB From 0318e180329f61fb02316c9e6979c4aa9819d592 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 11 Dec 2023 18:26:36 +0530 Subject: [PATCH 06/31] benchmark for sha256 and keccak --- hash/risc0/bench/Cargo.lock | 475 ++++-------------- hash/risc0/bench/Cargo.toml | 17 +- hash/risc0/bench/host/Cargo.toml | 13 - hash/risc0/bench/methods/guest/Cargo.lock | 20 + hash/risc0/bench/methods/guest/Cargo.toml | 5 +- .../bench/methods/guest/src/bin/blake2b.rs | 15 + .../bench/methods/guest/src/bin/blake3.rs | 15 + .../bench/methods/guest/src/bin/keccak.rs | 15 + .../guest/src/{main.rs => bin/sha256.rs} | 1 - hash/risc0/bench/run.sh | 5 +- hash/risc0/bench/src/benches/blake2b.rs | 33 ++ hash/risc0/bench/src/benches/blake3.rs | 33 ++ hash/risc0/bench/src/benches/keccak.rs | 33 ++ hash/risc0/bench/src/benches/mod.rs | 2 + .../src/main.rs => src/benches/sha256.rs} | 24 +- hash/risc0/bench/src/main.rs | 44 ++ 16 files changed, 327 insertions(+), 423 deletions(-) delete mode 100644 hash/risc0/bench/host/Cargo.toml create mode 100644 hash/risc0/bench/methods/guest/src/bin/blake2b.rs create mode 100644 hash/risc0/bench/methods/guest/src/bin/blake3.rs create mode 100644 hash/risc0/bench/methods/guest/src/bin/keccak.rs rename hash/risc0/bench/methods/guest/src/{main.rs => bin/sha256.rs} (99%) create mode 100644 hash/risc0/bench/src/benches/blake2b.rs create mode 100644 hash/risc0/bench/src/benches/blake3.rs create mode 100644 hash/risc0/bench/src/benches/keccak.rs create mode 100644 hash/risc0/bench/src/benches/mod.rs rename hash/risc0/bench/{host/src/main.rs => src/benches/sha256.rs} (55%) create mode 100644 hash/risc0/bench/src/main.rs diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock index e6179f9..e6430ca 100644 --- a/hash/risc0/bench/Cargo.lock +++ b/hash/risc0/bench/Cargo.lock @@ -26,18 +26,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstyle" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" - [[package]] name = "anyhow" version = "1.0.75" @@ -80,6 +68,16 @@ version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +[[package]] +name = "benchmark" +version = "0.1.0" +dependencies = [ + "methods", + "rand", + "risc0-zkvm", + "serde", +] + [[package]] name = "bincode" version = "1.3.3" @@ -121,9 +119,9 @@ dependencies = [ [[package]] name = "bonsai-sdk" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "296de0c044ff3207f2252415ca3b5789de384e5d9a64185a003416bf11096ceb" +checksum = "441d1092e11977985946b6564251df91d80ae36982128e53be52a32548ad8762" dependencies = [ "reqwest", "serde", @@ -176,9 +174,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] @@ -197,12 +195,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - [[package]] name = "cc" version = "1.0.83" @@ -218,58 +210,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "ciborium" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" - -[[package]] -name = "ciborium-ll" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "clap" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" -dependencies = [ - "clap_builder", -] - -[[package]] -name = "clap_builder" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" -dependencies = [ - "anstyle", - "clap_lex", -] - -[[package]] -name = "clap_lex" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" - [[package]] name = "const-oid" version = "0.9.5" @@ -278,9 +218,9 @@ checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -288,9 +228,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cpufeatures" @@ -301,75 +241,6 @@ dependencies = [ "libc", ] -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - [[package]] name = "crypto-common" version = "0.1.6" @@ -476,9 +347,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -554,15 +425,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -570,30 +441,18 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -622,22 +481,11 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "host" -version = "0.1.0" -dependencies = [ - "criterion", - "methods", - "rand", - "risc0-zkvm", - "serde", -] - [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -706,24 +554,14 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", ] -[[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", -] - [[package]] name = "indexmap" version = "2.1.0" @@ -731,7 +569,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown", ] [[package]] @@ -740,26 +578,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi", - "rustix", - "windows-sys", -] - -[[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.11.0" @@ -777,9 +595,9 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -820,15 +638,6 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - [[package]] name = "methods" version = "0.1.0" @@ -853,9 +662,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi", @@ -927,21 +736,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.59" +version = "0.10.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" +checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -971,9 +774,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.95" +version = "0.9.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" dependencies = [ "cc", "libc", @@ -989,9 +792,9 @@ checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" @@ -1000,7 +803,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.1.0", + "indexmap", ] [[package]] @@ -1021,34 +824,6 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" -[[package]] -name = "plotters" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" - -[[package]] -name = "plotters-svg" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" -dependencies = [ - "plotters-backend", -] - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1076,9 +851,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" dependencies = [ "bytes", "prost-derive", @@ -1086,13 +861,13 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" dependencies = [ "bytes", "heck", - "itertools 0.11.0", + "itertools", "log", "multimap", "once_cell", @@ -1108,12 +883,12 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools", "proc-macro2", "quote", "syn", @@ -1121,9 +896,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" dependencies = [ "prost", ] @@ -1176,26 +951,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rayon" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -1274,9 +1029,9 @@ dependencies = [ [[package]] name = "risc0-binfmt" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b008c7506a6acb15f14a87e7e57797fd901cdf2f4eb560a032df4e1fc12790" +checksum = "923c85a23cb9a9475b8cd4479ad3a06252604a361626e9ae7dc0dc635af22c22" dependencies = [ "anyhow", "elf", @@ -1288,9 +1043,9 @@ dependencies = [ [[package]] name = "risc0-build" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44fdc4ad18c946a26dc42ed95ffc1cfa09a18973e68e394b83840724a5ca7ab" +checksum = "e58d4cc25e243e52d1ccd75d357b0aa55081736bf3052c65a823fdf169586843" dependencies = [ "anyhow", "cargo_metadata", @@ -1305,9 +1060,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924bbd4f27070f04556e10565441fbf64e399763a3f244819f84dc645590bca1" +checksum = "97547e10e9fdaaab8b64ffb45dc158b31f023b1a68015c6ce9f12fe3e403012a" dependencies = [ "anyhow", "bytemuck", @@ -1319,9 +1074,9 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac44b6493d73638018d62eccec93f2797795d286c6201e2a79d842a16bbb43f" +checksum = "1a269d01b18cba24ee1a08f68726fc3623e8705ed79d158377d12e9129dcde2e" dependencies = [ "anyhow", "log", @@ -1333,9 +1088,9 @@ dependencies = [ [[package]] name = "risc0-core" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8d9ff7ca4b8a9ecf63e4567dfc5ab73ea4c4c20618cdd36d5c0eb69be80cb2" +checksum = "477e0bb8d2ec0b7955088b521eb596901e652d0faa2ea73bda0b77e05af5c07d" dependencies = [ "bytemuck", "rand_core", @@ -1343,9 +1098,9 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b8f047ec52f645e5e1c46f69303658f9cca96f0a2dcb78b4e7cadef5c2ac3d" +checksum = "d5abb1a0cf847d3f9aed1e563b76c358107e7ba66dbfab28f7144252c990bd82" dependencies = [ "anyhow", "blake2", @@ -1364,9 +1119,9 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b51d8aa8a4b0a350cca2deb9ead841989ed601ca3091e33a8ee8e6f2453048" +checksum = "3cf80df202c038efc2199be34fda8114b38bfc5b2b51c60cbbdf1f425b07b384" dependencies = [ "anyhow", "bincode", @@ -1396,9 +1151,9 @@ dependencies = [ [[package]] name = "risc0-zkvm-platform" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e9d18c75958239e91213a181e836e28dfbede913e4de66fa36e2ad1d70fcdc" +checksum = "2dcd6b66f7a4972001db0acf3f06d99b7851c8d9f0de1f7e0fb4496c66c5cd02" dependencies = [ "bytemuck", "getrandom", @@ -1440,15 +1195,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.22" @@ -1458,12 +1204,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "security-framework" version = "2.9.2" @@ -1650,16 +1390,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -1677,9 +1407,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ "backtrace", "bytes", @@ -1754,9 +1484,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" @@ -1766,9 +1496,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" @@ -1787,9 +1517,9 @@ dependencies = [ [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -1808,16 +1538,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -1835,9 +1555,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1845,9 +1565,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", @@ -1860,9 +1580,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if", "js-sys", @@ -1872,9 +1592,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1882,9 +1602,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", @@ -1895,15 +1615,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -1937,15 +1657,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml index 5363877..6299669 100644 --- a/hash/risc0/bench/Cargo.toml +++ b/hash/risc0/bench/Cargo.toml @@ -1,6 +1,13 @@ +[package] +name = "benchmark" +version = "0.1.0" +edition = "2021" + [workspace] -resolver = "2" -members = ["host", "methods"] +members = ["methods"] + +[workspace.dependencies] +methods = { path = "methods" } # Always optimize; building and running the guest takes much longer without optimization. [profile.dev] @@ -15,3 +22,9 @@ lto = true [profile.release.build-override] opt-level = 3 + +[dependencies] +risc0-zkvm = { version = "0.19.0" } +serde = "1.0" +rand = "0.8.3" +methods = { workspace = true } \ No newline at end of file diff --git a/hash/risc0/bench/host/Cargo.toml b/hash/risc0/bench/host/Cargo.toml deleted file mode 100644 index 22fd27f..0000000 --- a/hash/risc0/bench/host/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "host" -version = "0.1.0" -edition = "2021" - -[dependencies] -methods = { path = "../methods" } -risc0-zkvm = { version = "0.19.0" } -serde = "1.0" -rand = "0.8.3" - -[dev-dependencies] -criterion = "0.5.1" diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock index b817f44..bbf6d2f 100644 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -134,6 +134,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + [[package]] name = "libc" version = "0.2.150" @@ -157,6 +166,7 @@ name = "method" version = "0.1.0" dependencies = [ "risc0-zkvm", + "sha3", ] [[package]] @@ -372,6 +382,16 @@ dependencies = [ "digest", ] +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + [[package]] name = "subtle" version = "2.5.0" diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index 8bcb40f..fb613e6 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -8,7 +8,4 @@ edition = "2021" [dependencies] # If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm risc0-zkvm = { version = "0.19.0", default-features = false, features = [ "std" ] } - -# [lib] -# name = "guest" -# path = "src/mod.rs" \ No newline at end of file +sha3 = "0.10.8" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/blake2b.rs b/hash/risc0/bench/methods/guest/src/bin/blake2b.rs new file mode 100644 index 0000000..c28e7e0 --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/blake2b.rs @@ -0,0 +1,15 @@ +#![no_main] + +use risc0_zkvm::{guest::env, sha::Digest}; +use sha3::{Digest as _, Keccak256}; + +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec = env::read(); + let hash: [u8;32] = Keccak256::digest(data).into(); + let digest = Digest::try_from(hash).unwrap(); + env::commit(&digest) + +} diff --git a/hash/risc0/bench/methods/guest/src/bin/blake3.rs b/hash/risc0/bench/methods/guest/src/bin/blake3.rs new file mode 100644 index 0000000..c28e7e0 --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/blake3.rs @@ -0,0 +1,15 @@ +#![no_main] + +use risc0_zkvm::{guest::env, sha::Digest}; +use sha3::{Digest as _, Keccak256}; + +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec = env::read(); + let hash: [u8;32] = Keccak256::digest(data).into(); + let digest = Digest::try_from(hash).unwrap(); + env::commit(&digest) + +} diff --git a/hash/risc0/bench/methods/guest/src/bin/keccak.rs b/hash/risc0/bench/methods/guest/src/bin/keccak.rs new file mode 100644 index 0000000..c28e7e0 --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/keccak.rs @@ -0,0 +1,15 @@ +#![no_main] + +use risc0_zkvm::{guest::env, sha::Digest}; +use sha3::{Digest as _, Keccak256}; + +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec = env::read(); + let hash: [u8;32] = Keccak256::digest(data).into(); + let digest = Digest::try_from(hash).unwrap(); + env::commit(&digest) + +} diff --git a/hash/risc0/bench/methods/guest/src/main.rs b/hash/risc0/bench/methods/guest/src/bin/sha256.rs similarity index 99% rename from hash/risc0/bench/methods/guest/src/main.rs rename to hash/risc0/bench/methods/guest/src/bin/sha256.rs index aa4473f..9b47e39 100644 --- a/hash/risc0/bench/methods/guest/src/main.rs +++ b/hash/risc0/bench/methods/guest/src/bin/sha256.rs @@ -1,7 +1,6 @@ #![no_main] use risc0_zkvm::{guest::env, sha, sha::Sha256}; - risc0_zkvm::guest::entry!(main); pub fn main() { diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index 03e2842..35ba62a 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -3,5 +3,8 @@ # Set a default value if ZKBENCH_INPUT_SIZE_KB is not set : ${ZKBENCH_INPUT_SIZE_KB:=1024} +# Set a default value if ZKBENCH_INPUT_SIZE_KB is not set +: ${WHICH:="all"} + # Run cargo run with the specified environment variable -cargo run $ZKBENCH_INPUT_SIZE_KB +cargo run $WHICH $ZKBENCH_INPUT_SIZE_KB diff --git a/hash/risc0/bench/src/benches/blake2b.rs b/hash/risc0/bench/src/benches/blake2b.rs new file mode 100644 index 0000000..71c6ff5 --- /dev/null +++ b/hash/risc0/bench/src/benches/blake2b.rs @@ -0,0 +1,33 @@ +use methods::{ + KECCAK_ELF, KECCAK_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::{ sha}; +// use rand::RngCore; +use std::time::Instant; + +pub fn keccak_bench(input: Vec) { + + let start_time = Instant::now(); + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, KECCAK_ELF).unwrap(); + + // For example: + let _output: sha::Digest = receipt.journal.decode().unwrap(); + + let elapsed_time1 = start_time.elapsed(); + // verify your receipt + receipt.verify(KECCAK_ID).unwrap(); + + let elapsed_time2 = start_time.elapsed(); + + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("verification time: {:?}", elapsed_time2 - elapsed_time1); + +} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/blake3.rs b/hash/risc0/bench/src/benches/blake3.rs new file mode 100644 index 0000000..71c6ff5 --- /dev/null +++ b/hash/risc0/bench/src/benches/blake3.rs @@ -0,0 +1,33 @@ +use methods::{ + KECCAK_ELF, KECCAK_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::{ sha}; +// use rand::RngCore; +use std::time::Instant; + +pub fn keccak_bench(input: Vec) { + + let start_time = Instant::now(); + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, KECCAK_ELF).unwrap(); + + // For example: + let _output: sha::Digest = receipt.journal.decode().unwrap(); + + let elapsed_time1 = start_time.elapsed(); + // verify your receipt + receipt.verify(KECCAK_ID).unwrap(); + + let elapsed_time2 = start_time.elapsed(); + + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("verification time: {:?}", elapsed_time2 - elapsed_time1); + +} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/keccak.rs b/hash/risc0/bench/src/benches/keccak.rs new file mode 100644 index 0000000..71c6ff5 --- /dev/null +++ b/hash/risc0/bench/src/benches/keccak.rs @@ -0,0 +1,33 @@ +use methods::{ + KECCAK_ELF, KECCAK_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::{ sha}; +// use rand::RngCore; +use std::time::Instant; + +pub fn keccak_bench(input: Vec) { + + let start_time = Instant::now(); + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, KECCAK_ELF).unwrap(); + + // For example: + let _output: sha::Digest = receipt.journal.decode().unwrap(); + + let elapsed_time1 = start_time.elapsed(); + // verify your receipt + receipt.verify(KECCAK_ID).unwrap(); + + let elapsed_time2 = start_time.elapsed(); + + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("verification time: {:?}", elapsed_time2 - elapsed_time1); + +} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/mod.rs b/hash/risc0/bench/src/benches/mod.rs new file mode 100644 index 0000000..3007ce6 --- /dev/null +++ b/hash/risc0/bench/src/benches/mod.rs @@ -0,0 +1,2 @@ +pub mod sha256; +pub mod keccak; \ No newline at end of file diff --git a/hash/risc0/bench/host/src/main.rs b/hash/risc0/bench/src/benches/sha256.rs similarity index 55% rename from hash/risc0/bench/host/src/main.rs rename to hash/risc0/bench/src/benches/sha256.rs index afab626..169244a 100644 --- a/hash/risc0/bench/host/src/main.rs +++ b/hash/risc0/bench/src/benches/sha256.rs @@ -1,17 +1,11 @@ use methods::{ - METHOD_ELF, METHOD_ID + SHA256_ELF, SHA256_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; // use rand::RngCore; -use rand::Rng; use std::time::Instant; -fn generate_bytes(size: usize) -> Vec { - let mut rng = rand::thread_rng(); - (0..size).map(|_| rng.gen()).collect() -} - pub fn sha_bench(input: Vec) { let start_time = Instant::now(); @@ -22,7 +16,7 @@ pub fn sha_bench(input: Vec) { let prover = default_prover(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, METHOD_ELF).unwrap(); + let receipt = prover.prove_elf(env, SHA256_ELF).unwrap(); // TODO: Implement code for retrieving receipt journal here. @@ -30,18 +24,8 @@ pub fn sha_bench(input: Vec) { let _output: sha::Digest = receipt.journal.decode().unwrap(); // verify your receipt - receipt.verify(METHOD_ID).unwrap(); + receipt.verify(SHA256_ID).unwrap(); let elapsed_time = start_time.elapsed(); eprintln!("Total time: {:?}", elapsed_time); -} - -fn main() { - let args: Vec = std::env::args().collect(); - eprintln!("{:?}", &args[1]); - // eprintln!("{:?}", &args[2]); - let size_kb = args[1].parse::().unwrap(); - eprintln!("{:?}", size_kb); - let input = generate_bytes(size_kb); - sha_bench(input); -} +} \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs new file mode 100644 index 0000000..8a64580 --- /dev/null +++ b/hash/risc0/bench/src/main.rs @@ -0,0 +1,44 @@ +mod benches; +use benches::sha256::sha_bench; +use benches::keccak::keccak_bench; +use rand::Rng; + + +fn generate_bytes(size: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..size).map(|_| rng.gen()).collect() +} + + + +fn main() { + let args: Vec = std::env::args().collect(); + + let mut flag = 0; + + let hash_type = &args[1]; + let size_kb = args[2].parse::().unwrap(); + + eprintln!("data size(bytes): {:?}", size_kb); + let input = generate_bytes(size_kb); + + if hash_type == "all" || hash_type == "sha256" { + println!("SHA256 Benchmarking: "); + sha_bench(input.clone()); + println!(""); + flag = 1; + } + + if hash_type == "all" || hash_type == "keccak" { + println!("KECCAK Benchmarking: "); + keccak_bench(input.clone()); + println!(""); + flag = 1; + } + + if flag == 0 { + println!("Wrong Benchmarking Name"); + } + println!("All Done!"); + +} From d14c0f827e8f7381d0533ffa36700f86e1a4b047 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Wed, 13 Dec 2023 19:16:31 +0530 Subject: [PATCH 07/31] benchmark for blake2b, blake3, cfg file added --- hash/risc0/bench/Cargo.lock | 13 +++- hash/risc0/bench/Cargo.toml | 1 + hash/risc0/bench/bench.cfg | 12 ++++ hash/risc0/bench/build.sh | 1 - hash/risc0/bench/methods/guest/Cargo.lock | 67 +++++++++++++++++-- hash/risc0/bench/methods/guest/Cargo.toml | 5 +- .../bench/methods/guest/src/bin/blake2b.rs | 6 +- .../bench/methods/guest/src/bin/blake3.rs | 6 +- .../bench/methods/guest/src/bin/sha256.rs | 15 +++++ hash/risc0/bench/run.sh | 27 ++++++-- hash/risc0/bench/src/benches/blake2b.rs | 11 ++- hash/risc0/bench/src/benches/blake3.rs | 11 +-- hash/risc0/bench/src/benches/mod.rs | 4 +- hash/risc0/bench/src/benches/sha256.rs | 11 +-- hash/risc0/bench/src/main.rs | 47 ++++++++----- 15 files changed, 180 insertions(+), 57 deletions(-) create mode 100644 hash/risc0/bench/bench.cfg diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock index e6430ca..a61040b 100644 --- a/hash/risc0/bench/Cargo.lock +++ b/hash/risc0/bench/Cargo.lock @@ -76,6 +76,7 @@ dependencies = [ "rand", "risc0-zkvm", "serde", + "sha2 0.10.6", ] [[package]] @@ -1113,7 +1114,7 @@ dependencies = [ "risc0-core", "risc0-zkvm-platform", "serde", - "sha2", + "sha2 0.10.8", "tracing", ] @@ -1279,6 +1280,16 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.6" +source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.6-risczero.0#7fd6900c4f637bd15ee2642dfa77110f8f1ad065" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.8" diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml index 6299669..176fdde 100644 --- a/hash/risc0/bench/Cargo.toml +++ b/hash/risc0/bench/Cargo.toml @@ -27,4 +27,5 @@ opt-level = 3 risc0-zkvm = { version = "0.19.0" } serde = "1.0" rand = "0.8.3" +sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } methods = { workspace = true } \ No newline at end of file diff --git a/hash/risc0/bench/bench.cfg b/hash/risc0/bench/bench.cfg new file mode 100644 index 0000000..d5adade --- /dev/null +++ b/hash/risc0/bench/bench.cfg @@ -0,0 +1,12 @@ +name: "Hashes benchmarking using risc0 prover" +author: +timeout: 100 +params: + [ PROVER: [ risc0 ] + , INPUT_SIZE: [ 256, 512, 1024, 2048 ] + , WHICH: [ LINEAR ] + ] +tags: CPU, SHA256, KECCAK, BLAKE2B, BLAKE3 +comments: + The benchmarks includes for sha256, keccak, blake2b, blake3. + the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/build.sh b/hash/risc0/bench/build.sh index 6870477..26156ef 100755 --- a/hash/risc0/bench/build.sh +++ b/hash/risc0/bench/build.sh @@ -1,4 +1,3 @@ #!/bin/bash -# Run the 'cargo bench' command. cargo build --release diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock index bbf6d2f..d98b978 100644 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -8,6 +8,18 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "autocfg" version = "1.1.0" @@ -23,6 +35,19 @@ dependencies = [ "digest", ] +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -52,6 +77,15 @@ dependencies = [ "syn", ] +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -64,6 +98,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + [[package]] name = "cpufeatures" version = "0.2.11" @@ -165,7 +205,10 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" name = "method" version = "0.1.0" dependencies = [ + "blake3", + "risc0-zkp", "risc0-zkvm", + "sha2 0.10.6", "sha3", ] @@ -269,9 +312,9 @@ dependencies = [ [[package]] name = "risc0-core" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8d9ff7ca4b8a9ecf63e4567dfc5ab73ea4c4c20618cdd36d5c0eb69be80cb2" +checksum = "477e0bb8d2ec0b7955088b521eb596901e652d0faa2ea73bda0b77e05af5c07d" dependencies = [ "bytemuck", "rand_core", @@ -279,9 +322,9 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b8f047ec52f645e5e1c46f69303658f9cca96f0a2dcb78b4e7cadef5c2ac3d" +checksum = "d5abb1a0cf847d3f9aed1e563b76c358107e7ba66dbfab28f7144252c990bd82" dependencies = [ "anyhow", "blake2", @@ -294,7 +337,7 @@ dependencies = [ "risc0-core", "risc0-zkvm-platform", "serde", - "sha2", + "sha2 0.10.8", "tracing", ] @@ -326,9 +369,9 @@ dependencies = [ [[package]] name = "risc0-zkvm-platform" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e9d18c75958239e91213a181e836e28dfbede913e4de66fa36e2ad1d70fcdc" +checksum = "2dcd6b66f7a4972001db0acf3f06d99b7851c8d9f0de1f7e0fb4496c66c5cd02" dependencies = [ "bytemuck", "getrandom", @@ -371,6 +414,16 @@ dependencies = [ "syn", ] +[[package]] +name = "sha2" +version = "0.10.6" +source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.6-risczero.0#7fd6900c4f637bd15ee2642dfa77110f8f1ad065" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.8" diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index fb613e6..4f8e376 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -8,4 +8,7 @@ edition = "2021" [dependencies] # If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm risc0-zkvm = { version = "0.19.0", default-features = false, features = [ "std" ] } -sha3 = "0.10.8" \ No newline at end of file +sha3 = "0.10.8" +sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } +risc0-zkp = "0.19.1" +blake3 = "1.5.0" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/blake2b.rs b/hash/risc0/bench/methods/guest/src/bin/blake2b.rs index c28e7e0..4d6c3e5 100644 --- a/hash/risc0/bench/methods/guest/src/bin/blake2b.rs +++ b/hash/risc0/bench/methods/guest/src/bin/blake2b.rs @@ -1,15 +1,15 @@ #![no_main] use risc0_zkvm::{guest::env, sha::Digest}; -use sha3::{Digest as _, Keccak256}; +use risc0_zkp::core::hash::blake2b::{Blake2b, Blake2bCpuImpl}; risc0_zkvm::guest::entry!(main); pub fn main() { let data: Vec = env::read(); - let hash: [u8;32] = Keccak256::digest(data).into(); - let digest = Digest::try_from(hash).unwrap(); + let hash = Blake2bCpuImpl::blake2b(&data); + let digest: Digest = hash.into(); env::commit(&digest) } diff --git a/hash/risc0/bench/methods/guest/src/bin/blake3.rs b/hash/risc0/bench/methods/guest/src/bin/blake3.rs index c28e7e0..fc78b7a 100644 --- a/hash/risc0/bench/methods/guest/src/bin/blake3.rs +++ b/hash/risc0/bench/methods/guest/src/bin/blake3.rs @@ -1,15 +1,15 @@ #![no_main] use risc0_zkvm::{guest::env, sha::Digest}; -use sha3::{Digest as _, Keccak256}; +use blake3::hash; risc0_zkvm::guest::entry!(main); pub fn main() { let data: Vec = env::read(); - let hash: [u8;32] = Keccak256::digest(data).into(); - let digest = Digest::try_from(hash).unwrap(); + let result = hash(&data); + let digest = Digest::try_from(*result.as_bytes()).unwrap(); env::commit(&digest) } diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256.rs b/hash/risc0/bench/methods/guest/src/bin/sha256.rs index 9b47e39..f133700 100644 --- a/hash/risc0/bench/methods/guest/src/bin/sha256.rs +++ b/hash/risc0/bench/methods/guest/src/bin/sha256.rs @@ -9,3 +9,18 @@ pub fn main() { let hash = sha::Impl::hash_bytes(&data); env::commit(&hash) } + +// accelerated sha2 crate +// #![no_main] + +// use risc0_zkvm::{guest::env}; +// use sha2::{Sha256, Digest}; +// // use base16ct::lower::encode_str; +// risc0_zkvm::guest::entry!(main); + +// pub fn main() { + +// let data: Vec = env::read(); +// let result: [u8;32] = Sha256::digest(data).into(); +// env::commit(&result) +// } diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index 35ba62a..a8a4e62 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -1,10 +1,25 @@ #!/bin/bash +if [ -z ${ZKBENCH_HASH_TYPE} ]; then +ZKBENCH_HASH_TYPE="sha256" +fi -# Set a default value if ZKBENCH_INPUT_SIZE_KB is not set -: ${ZKBENCH_INPUT_SIZE_KB:=1024} +if [ -z ${ZKBENCH_WHICH} ]; then +ZKBENCH_WHICH="LINEAR" +fi -# Set a default value if ZKBENCH_INPUT_SIZE_KB is not set -: ${WHICH:="all"} +if [ -z ${ZKBENCH_NTHREADS} ]; then +ZKBENCH_NTHREADS=1 +fi -# Run cargo run with the specified environment variable -cargo run $WHICH $ZKBENCH_INPUT_SIZE_KB +if [ -z ${ZKBENCH_INPUT_SIZE_KB} ]; then +ZKBENCH_INPUT_SIZE_KB=1024 +fi + +echo "Running benchmarks with the following configurations:" +echo "HASH = $ZKBENCH_HASH_TYPE" +echo "WHICH = $ZKBENCH_WHICH" +echo "NTHREADS = $ZKBENCH_NTHREADS" +echo "Input Size (KB) = $ZKBENCH_INPUT_SIZE_KB" + +# Run the benchmarks using cargo run +CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_KB diff --git a/hash/risc0/bench/src/benches/blake2b.rs b/hash/risc0/bench/src/benches/blake2b.rs index 71c6ff5..c5d7f32 100644 --- a/hash/risc0/bench/src/benches/blake2b.rs +++ b/hash/risc0/bench/src/benches/blake2b.rs @@ -1,29 +1,28 @@ use methods::{ - KECCAK_ELF, KECCAK_ID + BLAKE2B_ELF, BLAKE2B_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; // use rand::RngCore; use std::time::Instant; -pub fn keccak_bench(input: Vec) { +pub fn blake2b_bench(input: Vec) { - let start_time = Instant::now(); - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); // Obtain the default prover. let prover = default_prover(); + let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, KECCAK_ELF).unwrap(); + let receipt = prover.prove_elf(env, BLAKE2B_ELF).unwrap(); // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); let elapsed_time1 = start_time.elapsed(); // verify your receipt - receipt.verify(KECCAK_ID).unwrap(); + receipt.verify(BLAKE2B_ID).unwrap(); let elapsed_time2 = start_time.elapsed(); diff --git a/hash/risc0/bench/src/benches/blake3.rs b/hash/risc0/bench/src/benches/blake3.rs index 71c6ff5..204c3a3 100644 --- a/hash/risc0/bench/src/benches/blake3.rs +++ b/hash/risc0/bench/src/benches/blake3.rs @@ -1,29 +1,30 @@ use methods::{ - KECCAK_ELF, KECCAK_ID + BLAKE3_ELF, BLAKE3_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; // use rand::RngCore; use std::time::Instant; -pub fn keccak_bench(input: Vec) { +pub fn blake3_bench(input: Vec) { - let start_time = Instant::now(); + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); // Obtain the default prover. let prover = default_prover(); + let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, KECCAK_ELF).unwrap(); + let receipt = prover.prove_elf(env, BLAKE3_ELF).unwrap(); // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); let elapsed_time1 = start_time.elapsed(); // verify your receipt - receipt.verify(KECCAK_ID).unwrap(); + receipt.verify(BLAKE3_ID).unwrap(); let elapsed_time2 = start_time.elapsed(); diff --git a/hash/risc0/bench/src/benches/mod.rs b/hash/risc0/bench/src/benches/mod.rs index 3007ce6..fbc1943 100644 --- a/hash/risc0/bench/src/benches/mod.rs +++ b/hash/risc0/bench/src/benches/mod.rs @@ -1,2 +1,4 @@ pub mod sha256; -pub mod keccak; \ No newline at end of file +pub mod keccak; +pub mod blake2b; +pub mod blake3; \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/sha256.rs b/hash/risc0/bench/src/benches/sha256.rs index 169244a..553623f 100644 --- a/hash/risc0/bench/src/benches/sha256.rs +++ b/hash/risc0/bench/src/benches/sha256.rs @@ -3,29 +3,30 @@ use methods::{ }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; +// use sha2; // use rand::RngCore; use std::time::Instant; pub fn sha_bench(input: Vec) { - let start_time = Instant::now(); let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); // Obtain the default prover. let prover = default_prover(); + let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. let receipt = prover.prove_elf(env, SHA256_ELF).unwrap(); - - // TODO: Implement code for retrieving receipt journal here. + let elapsed_time = start_time.elapsed(); // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); - + // verify your receipt receipt.verify(SHA256_ID).unwrap(); - let elapsed_time = start_time.elapsed(); + eprintln!("Total time: {:?}", elapsed_time); + eprintln!("Hash: {:?}", _output); } \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index 8a64580..243a0e0 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -1,6 +1,10 @@ mod benches; -use benches::sha256::sha_bench; -use benches::keccak::keccak_bench; +use benches::{ + sha256::sha_bench, + keccak::keccak_bench, + blake2b::blake2b_bench, + blake3::blake3_bench, +}; use rand::Rng; @@ -14,7 +18,7 @@ fn generate_bytes(size: usize) -> Vec { fn main() { let args: Vec = std::env::args().collect(); - let mut flag = 0; + // let mut flag = 0; let hash_type = &args[1]; let size_kb = args[2].parse::().unwrap(); @@ -22,23 +26,30 @@ fn main() { eprintln!("data size(bytes): {:?}", size_kb); let input = generate_bytes(size_kb); - if hash_type == "all" || hash_type == "sha256" { - println!("SHA256 Benchmarking: "); - sha_bench(input.clone()); - println!(""); - flag = 1; + match hash_type.as_str() { + "sha256" => { + println!("SHA256 Benchmarking: "); + sha_bench(input.clone()); + } + "keccak" => { + println!("KECCAK Benchmarking: "); + keccak_bench(input.clone()); + } + + "blake2b" => { + println!("Blake2b Benchmarking: "); + blake2b_bench(input.clone()); + } + + "blake3" => { + println!("Blake3 Benchmarking: "); + blake3_bench(input.clone()); + } + _ => { + println!("Wrong Benchmark Name!"); + } } - if hash_type == "all" || hash_type == "keccak" { - println!("KECCAK Benchmarking: "); - keccak_bench(input.clone()); - println!(""); - flag = 1; - } - - if flag == 0 { - println!("Wrong Benchmarking Name"); - } println!("All Done!"); } From ad841ce04d7afc37a021e0fadb13f8792518ee2b Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 18 Dec 2023 23:56:55 +0530 Subject: [PATCH 08/31] poseidon2 benchmark over bn128(merkle) and baby_bear --- hash/risc0/bench/.vscode/settings.json | 5 + hash/risc0/bench/Cargo.lock | 510 +++++++++++++++++- hash/risc0/bench/Cargo.toml | 6 +- hash/risc0/bench/methods/guest/Cargo.lock | 495 ++++++++++++++++- hash/risc0/bench/methods/guest/Cargo.toml | 4 +- .../guest/src/bin/poseidon2_babybear.rs | 42 ++ .../methods/guest/src/bin/poseidon2_bn128.rs | 42 ++ hash/risc0/bench/run.sh | 16 +- hash/risc0/bench/src/benches/mod.rs | 4 +- .../bench/src/benches/poseidon2_babybear.rs | 105 ++++ .../bench/src/benches/poseidon2_bn128.rs | 97 ++++ hash/risc0/bench/src/main.rs | 28 +- 12 files changed, 1328 insertions(+), 26 deletions(-) create mode 100644 hash/risc0/bench/.vscode/settings.json create mode 100644 hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs create mode 100644 hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs create mode 100644 hash/risc0/bench/src/benches/poseidon2_babybear.rs create mode 100644 hash/risc0/bench/src/benches/poseidon2_bn128.rs diff --git a/hash/risc0/bench/.vscode/settings.json b/hash/risc0/bench/.vscode/settings.json new file mode 100644 index 0000000..4545fa6 --- /dev/null +++ b/hash/risc0/bench/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.linkedProjects": [ + "./methods/guest/Cargo.toml" + ] +} \ No newline at end of file diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock index a61040b..e8cd0fd 100644 --- a/hash/risc0/bench/Cargo.lock +++ b/hash/risc0/bench/Cargo.lock @@ -32,6 +32,82 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "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", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "autocfg" version = "1.1.0" @@ -72,11 +148,15 @@ checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" name = "benchmark" version = "0.1.0" dependencies = [ + "ark-ff", + "ark-serialize", + "hex", "methods", "rand", "risc0-zkvm", "serde", "sha2 0.10.6", + "zkhash", ] [[package]] @@ -100,6 +180,18 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +[[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 = "blake2" version = "0.10.6" @@ -109,6 +201,17 @@ dependencies = [ "digest", ] +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -118,6 +221,19 @@ dependencies = [ "generic-array", ] +[[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", + "subtle", +] + [[package]] name = "bonsai-sdk" version = "0.5.1" @@ -152,9 +268,15 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.5.0" @@ -217,6 +339,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + [[package]] name = "core-foundation" version = "0.9.4" @@ -242,6 +370,38 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -252,6 +412,17 @@ dependencies = [ "typenum", ] +[[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 = "digest" version = "0.10.7" @@ -319,6 +490,28 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + [[package]] name = "fixedbitset" version = "0.4.2" @@ -355,6 +548,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures-channel" version = "0.3.29" @@ -430,6 +629,29 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[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", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core", + "subtle", +] + [[package]] name = "h2" version = "0.3.22" @@ -449,6 +671,29 @@ dependencies = [ "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", + "rayon", +] + [[package]] name = "hashbrown" version = "0.14.3" @@ -579,6 +824,15 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[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.11.0" @@ -603,11 +857,37 @@ dependencies = [ "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", + "subtle", +] + +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin", +] [[package]] name = "libc" @@ -639,6 +919,21 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memuse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" + [[package]] name = "methods" version = "0.1.0" @@ -696,6 +991,17 @@ dependencies = [ "tempfile", ] +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-derive" version = "0.4.1" @@ -704,7 +1010,17 @@ checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", ] [[package]] @@ -764,7 +1080,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -785,6 +1101,45 @@ dependencies = [ "vcpkg", ] +[[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 = "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", + "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.0", + "group 0.13.0", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + [[package]] name = "paste" version = "1.0.14" @@ -838,7 +1193,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.39", ] [[package]] @@ -868,7 +1223,7 @@ checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" dependencies = [ "bytes", "heck", - "itertools", + "itertools 0.11.0", "log", "multimap", "once_cell", @@ -877,7 +1232,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 2.0.39", "tempfile", "which", ] @@ -889,10 +1244,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", - "itertools", + "itertools 0.11.0", "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -922,6 +1277,12 @@ dependencies = [ "proc-macro2", ] +[[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" @@ -952,6 +1313,26 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1177,6 +1558,15 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.21" @@ -1254,7 +1644,7 @@ checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -1301,6 +1691,16 @@ dependencies = [ "digest", ] +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + [[package]] name = "slab" version = "0.4.9" @@ -1330,12 +1730,35 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "subtle" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.39" @@ -1368,6 +1791,12 @@ dependencies = [ "libc", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tempfile" version = "3.8.1" @@ -1398,7 +1827,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -1481,7 +1910,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -1585,7 +2014,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.39", "wasm-bindgen-shared", ] @@ -1619,7 +2048,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1749,3 +2178,58 @@ dependencies = [ "cfg-if", "windows-sys", ] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "git+https://github.com/HorizenLabs/poseidon2.git#bb476b9ca38198cf5092487283c8b8c5d4317c4e" +dependencies = [ + "ark-ff", + "ark-std", + "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", + "serde", + "sha2 0.10.8", + "sha3", + "subtle", +] diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml index 176fdde..8d484c5 100644 --- a/hash/risc0/bench/Cargo.toml +++ b/hash/risc0/bench/Cargo.toml @@ -28,4 +28,8 @@ risc0-zkvm = { version = "0.19.0" } serde = "1.0" rand = "0.8.3" sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } -methods = { workspace = true } \ No newline at end of file +methods = { workspace = true } +zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} +ark-ff = "0.4.2" +hex = "0.4.3" +ark-serialize = "0.4" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock index d98b978..7469794 100644 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -8,6 +8,70 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "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", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + [[package]] name = "arrayref" version = "0.3.7" @@ -26,6 +90,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[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 = "blake2" version = "0.10.6" @@ -35,6 +111,17 @@ dependencies = [ "digest", ] +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + [[package]] name = "blake3" version = "1.5.0" @@ -57,6 +144,19 @@ dependencies = [ "generic-array", ] +[[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", + "subtle", +] + [[package]] name = "bytemuck" version = "1.14.0" @@ -74,9 +174,15 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cc" version = "1.0.83" @@ -113,6 +219,38 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -123,6 +261,17 @@ dependencies = [ "typenum", ] +[[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 = "digest" version = "0.10.7" @@ -141,12 +290,46 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + [[package]] name = "elf" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6e7d85896690fe195447717af8eceae0593ac2196fd42fe88c184e904406ce" +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "generic-array" version = "0.14.7" @@ -168,12 +351,81 @@ dependencies = [ "wasi", ] +[[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", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core", + "subtle", +] + +[[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", + "rayon", +] + [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[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", + "subtle", +] + [[package]] name = "keccak" version = "0.1.4" @@ -183,6 +435,15 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin", +] + [[package]] name = "libc" version = "0.2.150" @@ -201,15 +462,43 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memuse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" + [[package]] name = "method" version = "0.1.0" dependencies = [ + "ark-serialize", "blake3", "risc0-zkp", "risc0-zkvm", "sha2 0.10.6", "sha3", + "zkhash", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", ] [[package]] @@ -220,7 +509,17 @@ checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", ] [[package]] @@ -232,6 +531,45 @@ dependencies = [ "autocfg", ] +[[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 = "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", + "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.0", + "group 0.13.0", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + [[package]] name = "paste" version = "1.0.14" @@ -244,6 +582,12 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + [[package]] name = "proc-macro2" version = "1.0.69" @@ -262,11 +606,61 @@ dependencies = [ "proc-macro2", ] +[[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" +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", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] [[package]] name = "risc0-binfmt" @@ -388,6 +782,15 @@ dependencies = [ "paste", ] +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "semver" version = "1.0.20" @@ -411,7 +814,7 @@ checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -445,12 +848,35 @@ dependencies = [ "keccak", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "subtle" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.39" @@ -462,6 +888,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tracing" version = "0.1.40" @@ -481,7 +913,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.39", ] [[package]] @@ -513,3 +945,58 @@ name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "git+https://github.com/HorizenLabs/poseidon2.git#bb476b9ca38198cf5092487283c8b8c5d4317c4e" +dependencies = [ + "ark-ff", + "ark-std", + "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", + "serde", + "sha2 0.10.8", + "sha3", + "subtle", +] diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index 4f8e376..7ea1c24 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -11,4 +11,6 @@ risc0-zkvm = { version = "0.19.0", default-features = false, features = [ "std" sha3 = "0.10.8" sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } risc0-zkp = "0.19.1" -blake3 = "1.5.0" \ No newline at end of file +blake3 = "1.5.0" +zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} +ark-serialize = "0.4" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs new file mode 100644 index 0000000..58928eb --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs @@ -0,0 +1,42 @@ +#![no_main] +#![allow(non_snake_case)] +use risc0_zkvm::{guest::env/* , sha::Digest*/}; +// use sha3::{Digest as _, Keccak256}; +use zkhash::poseidon2::poseidon2; +use zkhash::poseidon2::poseidon2_instance_babybear::{POSEIDON2_BABYBEAR_16_PARAMS/* , POSEIDON2_BABYBEAR_24_PARAMS*/}; +use zkhash::fields::babybear::FpBabyBear; +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; + +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec> = env::read(); + let cycles1 = env::get_cycle_count(); + let mut hash_data: Vec = Vec::new(); + for i in 0..data.len() { + let a_uncompressed = FpBabyBear::deserialize_uncompressed(&**data.get(i).unwrap()).unwrap(); + hash_data.push(a_uncompressed); + } + let cycles2 = env::get_cycle_count(); + + let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BABYBEAR_16_PARAMS); + let perm: Vec = permutation.permutation(&hash_data); + + let cycles4 = env::get_cycle_count(); + + let mut perm_seralised: Vec> = Vec::new(); + for i in 0..data.len() { + let mut temp: Vec = Vec::new(); + perm.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); + perm_seralised.push(temp); + } + let cycles6 = env::get_cycle_count(); + + env::commit(&perm_seralised); + + eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); + eprintln!("number of cycles for hash permutation builder: {:?}", cycles4 - cycles2); + eprintln!("number of cycles for permutation seralisation: {:?}", cycles6 - cycles4); + +} diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs new file mode 100644 index 0000000..d83669e --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs @@ -0,0 +1,42 @@ +#![no_main] +use risc0_zkvm::{guest::env/* , sha::Digest*/}; +// use sha3::{Digest as _, Keccak256}; +use zkhash::poseidon2::poseidon2; +use zkhash::poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS; +use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; +use zkhash::fields::bn256::FpBN256; +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; + +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec> = env::read(); + let cycles1 = env::get_cycle_count(); + let mut hash_data: Vec = Vec::new(); + for i in 0..data.len() { + let a_uncompressed = FpBN256::deserialize_uncompressed(&**data.get(i).unwrap()).unwrap(); + hash_data.push(a_uncompressed); + } + let cycles2 = env::get_cycle_count(); + + let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BN256_PARAMS); + let mut merkle_tree = MerkleTree::new(permutation.clone()); + let cycles4 = env::get_cycle_count(); + let hash_final = merkle_tree.accumulate(&hash_data); + let cycles5 = env::get_cycle_count(); + + + let mut hash_bytes: Vec = Vec::new(); + hash_final.serialize_uncompressed(&mut hash_bytes).unwrap(); + + let cycles6 = env::get_cycle_count(); + + env::commit(&hash_bytes); + + eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); + eprintln!("number of cycles for hash builder: {:?}", cycles4 - cycles2); + eprintln!("number of cycles for hash calculation: {:?}", cycles5 - cycles4); + eprintln!("number of cycles for hash serealisation: {:?}", cycles6 - cycles5); + +} diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index a8a4e62..e51695a 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -15,11 +15,23 @@ if [ -z ${ZKBENCH_INPUT_SIZE_KB} ]; then ZKBENCH_INPUT_SIZE_KB=1024 fi +if [ -z ${ZKBENCH_TREE_DEPTH} ]; then +ZKBENCH_TREE_DEPTH=4 +fi + + echo "Running benchmarks with the following configurations:" echo "HASH = $ZKBENCH_HASH_TYPE" -echo "WHICH = $ZKBENCH_WHICH" +# echo "WHICH = $ZKBENCH_WHICH" echo "NTHREADS = $ZKBENCH_NTHREADS" echo "Input Size (KB) = $ZKBENCH_INPUT_SIZE_KB" # Run the benchmarks using cargo run -CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_KB +# Check if the environment variable is set to "poseidon2_bn128" +if [ "$ZKBENCH_HASH_TYPE" == "poseidon2_bn128" ]; then + # echo "Running Poseidon2 benchmark over bn128 field" + CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_TREE_DEPTH +else + CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_KB + +fi \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/mod.rs b/hash/risc0/bench/src/benches/mod.rs index fbc1943..d3382cf 100644 --- a/hash/risc0/bench/src/benches/mod.rs +++ b/hash/risc0/bench/src/benches/mod.rs @@ -1,4 +1,6 @@ pub mod sha256; pub mod keccak; pub mod blake2b; -pub mod blake3; \ No newline at end of file +pub mod blake3; +pub mod poseidon2_bn128; +pub mod poseidon2_babybear; \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs new file mode 100644 index 0000000..f8c6558 --- /dev/null +++ b/hash/risc0/bench/src/benches/poseidon2_babybear.rs @@ -0,0 +1,105 @@ +#![allow(non_snake_case)] +use methods::{ + POSEIDON2_BABYBEAR_ELF, POSEIDON2_BABYBEAR_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use zkhash::{fields::{babybear::FpBabyBear, utils::random_scalar}/* , poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS*/}; +// use zkhash::poseidon2::poseidon2::Poseidon2; +// use std::convert::TryFrom; +use std::time::Instant; +// use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; +// use std::convert::TryInto; +// use hex::encode_to_slice; +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; + + +pub fn poseidon2_babybear_bench(mtDepth: usize) { + + type Scalar = FpBabyBear; + + let mut input_scalar: Vec> = Vec::new(); + let number_of_leaves: u32 = 1 << mtDepth; + for _ in 0..number_of_leaves { + let mut uncompressed_bytes = Vec::new(); + let a: Scalar = random_scalar(); + a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); + input_scalar.push(uncompressed_bytes); + } + + let env = ExecutorEnv::builder().write(&input_scalar).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + let start_time = Instant::now(); + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, POSEIDON2_BABYBEAR_ELF).unwrap(); + let elapsed_time = start_time.elapsed(); + + // For example: + let output: Vec> = receipt.journal.decode().unwrap(); + + let mut output_deseralised: Vec = Vec::new(); + + for i in 0..output.len() { + output_deseralised.push(Scalar::deserialize_uncompressed(&**output.get(i).unwrap()).unwrap()); + } + + eprintln!("size: {:?}", output_deseralised); + // let hash_final = FpBabyBear::deserialize_uncompressed(&*output).unwrap(); + + // verify your receipt + receipt.verify(POSEIDON2_BABYBEAR_ID).unwrap(); + + + eprintln!("Total time: {:?}", elapsed_time); + // eprintln!("Hash: {:?}", hash_final); + + + + + + // let input2:[Scalar;16] = [Scalar::from(1), Scalar::from(2), Scalar::from(3), Scalar::from(4),Scalar::from(5), Scalar::from(6), Scalar::from(7), Scalar::from(8),Scalar::from(9), Scalar::from(10), Scalar::from(11), Scalar::from(12), Scalar::from(13), Scalar::from(14), Scalar::from(15), Scalar::from(16)]; + // let hash = merkle_tree.accumulate(&input2); + + // let hash_string = hash.0.to_string(); + // // eprintln!("merkle hash: {:?}",hex::encode(hash_string)); + // eprintln!("merkle hash: {:?}", hash_string); + + // let x = hash.0.0; + // eprintln!("from: {:x}{:x}{:x}{:x}", x[0],x[1], x[2], x[3]); + // eprintln!("scalar: {:?}", Scalar::from(4)); + + // let a = Scalar::from(4); + // let mut uncompressed_bytes = Vec::new(); + // a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); + // eprintln!("compress: {:?}", uncompressed_bytes); + + // let a_uncompressed = Scalar::deserialize_uncompressed(&*uncompressed_bytes).unwrap(); + // eprintln!("uncompress: {:?}", a_uncompressed); + + // let t = poseidon2.get_t(); + // let input1: Vec = (0..t).map(|_| random_scalar()).collect(); + // let perm = poseidon2.permutation(&input1); + // eprintln!("output: {:?}", perm); + + // let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + // let prover = default_prover(); + + // let start_time = Instant::now(); + // // Produce a receipt by proving the specified ELF binary. + // let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); + // let elapsed_time = start_time.elapsed(); + + // // For example: + // let _output: sha::Digest = receipt.journal.decode().unwrap(); + + // // verify your receipt + // receipt.verify(POSEIDON2_BN128_ID).unwrap(); + + + // eprintln!("Total time: {:?}", elapsed_time); + // eprintln!("Hash: {:?}", _output); +} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_bn128.rs b/hash/risc0/bench/src/benches/poseidon2_bn128.rs new file mode 100644 index 0000000..db28ed6 --- /dev/null +++ b/hash/risc0/bench/src/benches/poseidon2_bn128.rs @@ -0,0 +1,97 @@ +use methods::{ + POSEIDON2_BN128_ELF, POSEIDON2_BN128_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use zkhash::{fields::{bn256::FpBN256, utils::random_scalar}/* , poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS*/}; +// use zkhash::poseidon2::poseidon2::Poseidon2; +// use std::convert::TryFrom; +use std::time::Instant; +// use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; +// use std::convert::TryInto; +// use hex::encode_to_slice; +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; + + +pub fn poseidon2_bn128_bench(mt_depth: usize) { + + type Scalar = FpBN256; + + let mut input_scalar: Vec> = Vec::new(); + let number_of_leaves: u32 = 1 << mt_depth; + for _ in 0..number_of_leaves { + let mut uncompressed_bytes = Vec::new(); + let a: Scalar = random_scalar(); + a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); + input_scalar.push(uncompressed_bytes); + } + + let env = ExecutorEnv::builder().write(&input_scalar).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + let start_time = Instant::now(); + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); + let elapsed_time = start_time.elapsed(); + + // For example: + let output: Vec = receipt.journal.decode().unwrap(); + + let hash_final = Scalar::deserialize_uncompressed(&*output).unwrap(); + + // verify your receipt + receipt.verify(POSEIDON2_BN128_ID).unwrap(); + + + eprintln!("Total time: {:?}", elapsed_time); + eprintln!("Hash: {:?}", hash_final); + + + + + + // let input2:[Scalar;16] = [Scalar::from(1), Scalar::from(2), Scalar::from(3), Scalar::from(4),Scalar::from(5), Scalar::from(6), Scalar::from(7), Scalar::from(8),Scalar::from(9), Scalar::from(10), Scalar::from(11), Scalar::from(12), Scalar::from(13), Scalar::from(14), Scalar::from(15), Scalar::from(16)]; + // let hash = merkle_tree.accumulate(&input2); + + // let hash_string = hash.0.to_string(); + // // eprintln!("merkle hash: {:?}",hex::encode(hash_string)); + // eprintln!("merkle hash: {:?}", hash_string); + + // let x = hash.0.0; + // eprintln!("from: {:x}{:x}{:x}{:x}", x[0],x[1], x[2], x[3]); + // eprintln!("scalar: {:?}", Scalar::from(4)); + + // let a = Scalar::from(4); + // let mut uncompressed_bytes = Vec::new(); + // a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); + // eprintln!("compress: {:?}", uncompressed_bytes); + + // let a_uncompressed = Scalar::deserialize_uncompressed(&*uncompressed_bytes).unwrap(); + // eprintln!("uncompress: {:?}", a_uncompressed); + + // let t = poseidon2.get_t(); + // let input1: Vec = (0..t).map(|_| random_scalar()).collect(); + // let perm = poseidon2.permutation(&input1); + // eprintln!("output: {:?}", perm); + + // let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + // let prover = default_prover(); + + // let start_time = Instant::now(); + // // Produce a receipt by proving the specified ELF binary. + // let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); + // let elapsed_time = start_time.elapsed(); + + // // For example: + // let _output: sha::Digest = receipt.journal.decode().unwrap(); + + // // verify your receipt + // receipt.verify(POSEIDON2_BN128_ID).unwrap(); + + + // eprintln!("Total time: {:?}", elapsed_time); + // eprintln!("Hash: {:?}", _output); +} \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index 243a0e0..266a65f 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -4,6 +4,8 @@ use benches::{ keccak::keccak_bench, blake2b::blake2b_bench, blake3::blake3_bench, + poseidon2_bn128::poseidon2_bn128_bench, + poseidon2_babybear::poseidon2_babybear_bench, }; use rand::Rng; @@ -23,33 +25,51 @@ fn main() { let hash_type = &args[1]; let size_kb = args[2].parse::().unwrap(); - eprintln!("data size(bytes): {:?}", size_kb); - let input = generate_bytes(size_kb); - match hash_type.as_str() { "sha256" => { println!("SHA256 Benchmarking: "); + eprintln!("data size(bytes): {:?}", size_kb); + let input = generate_bytes(size_kb); sha_bench(input.clone()); } "keccak" => { println!("KECCAK Benchmarking: "); + eprintln!("data size(bytes): {:?}", size_kb); + let input = generate_bytes(size_kb); keccak_bench(input.clone()); } "blake2b" => { println!("Blake2b Benchmarking: "); + eprintln!("data size(bytes): {:?}", size_kb); + let input = generate_bytes(size_kb); blake2b_bench(input.clone()); } "blake3" => { println!("Blake3 Benchmarking: "); + eprintln!("data size(bytes): {:?}", size_kb); + let input = generate_bytes(size_kb); blake3_bench(input.clone()); } + + "poseidon2_bn128" => { + println!("Poseidon2 Benchmarking on the BN128 field: "); + eprintln!("Tree Depth: {:?}", size_kb); + poseidon2_bn128_bench(size_kb); + } + + "poseidon2_babybear" => { + println!("Poseidon2 Benchmarking on the BabyBear field: "); + eprintln!("number of inputs {:?}", size_kb); + poseidon2_babybear_bench(size_kb); + } + _ => { println!("Wrong Benchmark Name!"); } } - + println!("All Done!"); } From 882a55557ef1471911115c6f8d88f621a3ffa687 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Wed, 20 Dec 2023 16:10:14 +0530 Subject: [PATCH 09/31] merkle hahsing over babybear(ark-ff) testing --- hash/risc0/bench/methods/guest/Cargo.lock | 21 +- hash/risc0/bench/methods/guest/Cargo.toml | 5 +- .../guest/src/bin/poseidon2_babybear.rs | 614 +++++++++++++++++- .../bench/src/benches/poseidon2_babybear.rs | 14 +- hash/risc0/bench/src/main.rs | 9 +- 5 files changed, 641 insertions(+), 22 deletions(-) diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock index 7469794..3f2b808 100644 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -481,8 +481,11 @@ checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" name = "method" version = "0.1.0" dependencies = [ + "ark-ff", "ark-serialize", "blake3", + "lazy_static", + "risc0-core 0.18.0", "risc0-zkp", "risc0-zkvm", "sha2 0.10.6", @@ -685,7 +688,7 @@ dependencies = [ "anyhow", "bytemuck", "log", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkp", "tracing", ] @@ -698,12 +701,22 @@ checksum = "4ac44b6493d73638018d62eccec93f2797795d286c6201e2a79d842a16bbb43f" dependencies = [ "anyhow", "log", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkp", "risc0-zkvm-platform", "tracing", ] +[[package]] +name = "risc0-core" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08605aec93ea22ed83f7f81f42e2d7287a5b0c749d8671f94de9d5994020045c" +dependencies = [ + "bytemuck", + "rand_core", +] + [[package]] name = "risc0-core" version = "0.19.1" @@ -728,7 +741,7 @@ dependencies = [ "log", "paste", "rand_core", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkvm-platform", "serde", "sha2 0.10.8", @@ -752,7 +765,7 @@ dependencies = [ "risc0-binfmt", "risc0-circuit-recursion", "risc0-circuit-rv32im", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkp", "risc0-zkvm-platform", "rrs-lib", diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index 7ea1c24..ea206a8 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -13,4 +13,7 @@ sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6- risc0-zkp = "0.19.1" blake3 = "1.5.0" zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} -ark-serialize = "0.4" \ No newline at end of file +ark-serialize = "0.4" +ark-ff = "0.4.2" +risc0-core = "0.18.0" +lazy_static = "1.4" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs index 58928eb..141814f 100644 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs @@ -1,17 +1,594 @@ #![no_main] #![allow(non_snake_case)] +use ark_ff::Field; use risc0_zkvm::{guest::env/* , sha::Digest*/}; // use sha3::{Digest as _, Keccak256}; use zkhash::poseidon2::poseidon2; -use zkhash::poseidon2::poseidon2_instance_babybear::{POSEIDON2_BABYBEAR_16_PARAMS/* , POSEIDON2_BABYBEAR_24_PARAMS*/}; +use zkhash::poseidon2::poseidon2::Poseidon2; +use zkhash::poseidon2::poseidon2_instance_babybear::{/*POSEIDON2_BABYBEAR_16_PARAMS , */POSEIDON2_BABYBEAR_24_PARAMS}; use zkhash::fields::babybear::FpBabyBear; use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; +// use zkhash::merkle_tree::merkle_tree_fp::MerkleTreeHash; +use risc0_core::field::Elem; + +use std::sync::Arc; +use std::marker::PhantomData; +use risc0_core::field::baby_bear::BabyBear; +use lazy_static::lazy_static; + +// #[derive(Clone, Debug)] +// pub struct Poseidon2Params { +// pub(crate) t: usize, // statesize +// pub(crate) d: usize, // sbox degree +// pub(crate) rounds_f_beginning: usize, +// pub(crate) rounds_p: usize, +// #[allow(dead_code)] +// pub(crate) rounds_f_end: usize, +// pub(crate) rounds: usize, +// pub(crate) mat_internal_diag_m_1: Vec, +// pub(crate) _mat_internal: Vec>, +// pub(crate) round_constants: Vec>, +// } + +// pub fn mat_inverse(mat: &[Vec]) -> Vec> { +// let n = mat.len(); +// assert!(mat[0].len() == n); + +// let mut m = mat.to_owned(); +// let mut inv = vec![vec![F::ZERO; n]; n]; +// for (i, invi) in inv.iter_mut().enumerate() { +// invi[i] = F::ONE; +// } + +// // upper triangle +// for row in 0..n { +// for j in 0..row { +// // subtract from these rows +// let el = m[row][j]; +// for col in 0..n { +// // do subtraction for each col +// if col < j { +// m[row][col] = F::ZERO; +// } else { +// let mut tmp = m[j][col]; +// tmp.mul_assign(el); +// m[row][col].sub_assign(tmp); +// } +// if col > row { +// inv[row][col] = F::ZERO; +// } else { +// let mut tmp = inv[j][col]; +// tmp.mul_assign(el); +// inv[row][col].sub_assign(tmp); +// } +// } +// } +// // make 1 in diag +// let el_inv = m[row][row].inv(); +// for col in 0..n { +// match col.cmp(&row) { +// std::cmp::Ordering::Less => inv[row][col].mul_assign(el_inv), +// std::cmp::Ordering::Equal => { +// m[row][col] = F::ONE; +// inv[row][col].mul_assign(el_inv) +// } +// std::cmp::Ordering::Greater => m[row][col].mul_assign(el_inv), +// } +// } +// } + +// // upper triangle +// for row in (0..n).rev() { +// for j in (row + 1..n).rev() { +// // subtract from these rows +// let el = m[row][j]; +// for col in 0..n { +// // do subtraction for each col + +// #[cfg(debug_assertions)] +// { +// if col >= j { +// m[row][col] = F::ZERO; +// } +// } +// let mut tmp = inv[j][col]; +// tmp.mul_assign(el); +// inv[row][col].sub_assign(tmp); +// } +// } +// } + +// #[cfg(debug_assertions)] +// { +// for (row, mrow) in m.iter().enumerate() { +// for (col, v) in mrow.iter().enumerate() { +// if row == col { +// debug_assert!(*v == F::ONE); +// } else { +// debug_assert!(*v == F::ZERO); +// } +// } +// } +// } + +// inv +// } + +// impl Poseidon2Params { +// #[allow(clippy::too_many_arguments)] + +// pub const INIT_SHAKE: &'static str = "Poseidon2"; + +// pub fn new( +// t: usize, +// d: usize, +// rounds_f: usize, +// rounds_p: usize, +// mat_internal_diag_m_1: &[F], +// mat_internal: &[Vec], +// round_constants: &[Vec], +// ) -> Self { +// assert!(d == 3 || d == 5 || d == 7 || d == 11); +// assert_eq!(rounds_f % 2, 0); +// let r = rounds_f / 2; +// let rounds = rounds_f + rounds_p; + +// Poseidon2Params { +// t, +// d, +// rounds_f_beginning: r, +// rounds_p, +// rounds_f_end: r, +// rounds, +// mat_internal_diag_m_1: mat_internal_diag_m_1.to_owned(), +// _mat_internal: mat_internal.to_owned(), +// round_constants: round_constants.to_owned(), +// } +// } + + +// // Unused +// pub fn equivalent_round_constants( +// round_constants: &[Vec], +// mat_internal: &[Vec], +// rounds_f_beginning: usize, +// rounds_p: usize, +// ) -> Vec> { +// let mut opt = vec![Vec::new(); rounds_p + 1]; +// let mat_internal_inv = mat_inverse(mat_internal); + +// let p_end = rounds_f_beginning + rounds_p - 1; +// let mut tmp = round_constants[p_end].clone(); +// for i in (0..rounds_p - 1).rev() { +// let inv_cip = Self::mat_vec_mul(&mat_internal_inv, &tmp); +// opt[i + 1] = vec![inv_cip[0]]; +// tmp = round_constants[rounds_f_beginning + i].clone(); +// for i in 1..inv_cip.len() { +// tmp[i].add_assign(inv_cip[i]); +// } +// } +// opt[0] = tmp; +// opt[rounds_p] = vec![F::ZERO; opt[0].len()]; // opt[0].len() = t + +// opt +// } + +// pub fn mat_vec_mul(mat: &[Vec], input: &[F]) -> Vec { +// let t = mat.len(); +// debug_assert!(t == input.len()); +// let mut out = vec![F::ZERO; t]; +// for row in 0..t { +// for (col, inp) in input.iter().enumerate() { +// let mut tmp = mat[row][col]; +// tmp.mul_assign(*inp); +// out[row].add_assign(tmp); +// } +// } +// out +// } + +// } + +// #[derive(Clone, Debug)] +// pub struct Poseidon2 { +// pub(crate) params: Arc>, +// } + +// impl Poseidon2 { +// pub fn new(params: &Arc>) -> Self { +// Poseidon2 { +// params: Arc::clone(params), +// } +// } + +// pub fn get_t(&self) -> usize { +// self.params.t +// } + +// pub fn permutation(&self, input: &[F]) -> Vec { +// let t = self.params.t; +// assert_eq!(input.len(), t); + +// let mut current_state = input.to_owned(); + +// // Linear layer at beginning +// self.matmul_external(&mut current_state); + +// for r in 0..self.params.rounds_f_beginning { +// current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); +// current_state = self.sbox(¤t_state); +// self.matmul_external(&mut current_state); +// } + +// let p_end = self.params.rounds_f_beginning + self.params.rounds_p; +// for r in self.params.rounds_f_beginning..p_end { +// current_state[0].add_assign(self.params.round_constants[r][0]); +// current_state[0] = self.sbox_p(¤t_state[0]); +// self.matmul_internal(&mut current_state, &self.params.mat_internal_diag_m_1); +// } + +// for r in p_end..self.params.rounds { +// current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); +// current_state = self.sbox(¤t_state); +// self.matmul_external(&mut current_state); +// } +// current_state +// } + +// fn sbox(&self, input: &[F]) -> Vec { +// input.iter().map(|el| self.sbox_p(el)).collect() +// } + +// fn sbox_p(&self, input: &F) -> F { +// let mut input2 = *input; +// input2.mul_assign(input2); + +// match self.params.d { +// 3 => { +// let mut out = input2; +// out.mul_assign(*input); +// out +// } +// 5 => { +// let mut out = input2; +// out.mul_assign(out); +// out.mul_assign(*input); +// out +// } +// 7 => { +// let mut out = input2; +// out.mul_assign(out); +// out.mul_assign(input2); +// out.mul_assign(*input); +// out +// } +// _ => { +// panic!() +// } +// } +// } + +// fn matmul_m4(&self, input: &mut[F]) { +// let t = self.params.t; +// let t4 = t / 4; +// for i in 0..t4 { +// let start_index = i * 4; +// let mut t_0 = input[start_index]; +// t_0.add_assign(input[start_index + 1]); +// let mut t_1 = input[start_index + 2]; +// t_1.add_assign(input[start_index + 3]); +// let mut t_2 = input[start_index + 1]; +// t_2.add_assign(t_2); +// t_2.add_assign(t_1); +// let mut t_3 = input[start_index + 3]; +// t_3.add_assign(t_3); +// t_3.add_assign(t_0); +// let mut t_4 = t_1; +// t_4.add_assign(t_4); +// t_4.add_assign(t_4); +// t_4.add_assign(t_3); +// let mut t_5 = t_0; +// t_5.add_assign(t_5); +// t_5.add_assign(t_5); +// t_5.add_assign(t_2); +// let mut t_6 = t_3; +// t_6.add_assign(t_5); +// let mut t_7 = t_2; +// t_7.add_assign(t_4); +// input[start_index] = t_6; +// input[start_index + 1] = t_5; +// input[start_index + 2] = t_7; +// input[start_index + 3] = t_4; +// } +// } + +// fn matmul_external(&self, input: &mut[F]) { +// let t = self.params.t; +// match t { +// 2 => { +// // Matrix circ(2, 1) +// let mut sum = input[0]; +// sum.add_assign(input[1]); +// input[0].add_assign(sum); +// input[1].add_assign(sum); +// } +// 3 => { +// // Matrix circ(2, 1, 1) +// let mut sum = input[0]; +// sum.add_assign(input[1]); +// sum.add_assign(input[2]); +// input[0].add_assign(sum); +// input[1].add_assign(sum); +// input[2].add_assign(sum); +// } +// 4 => { +// // Applying cheap 4x4 MDS matrix to each 4-element part of the state +// self.matmul_m4(input); +// } +// 8 | 12 | 16 | 20 | 24 => { +// // Applying cheap 4x4 MDS matrix to each 4-element part of the state +// self.matmul_m4(input); + +// // Applying second cheap matrix for t > 4 +// let t4 = t / 4; +// let mut stored = [F::ZERO; 4]; +// for l in 0..4 { +// stored[l] = input[l]; +// for j in 1..t4 { +// stored[l].add_assign(input[4 * j + l]); +// } +// } +// for i in 0..input.len() { +// input[i].add_assign(stored[i % 4]); +// } +// } +// _ => { +// panic!() +// } +// } +// } + +// fn matmul_internal(&self, input: &mut[F], mat_internal_diag_m_1: &[F]) { +// let t = self.params.t; + +// match t { +// 2 => { +// // [2, 1] +// // [1, 3] +// let mut sum = input[0]; +// sum.add_assign(input[1]); +// input[0].add_assign(sum); +// input[1].add_assign(input[1]); +// input[1].add_assign(sum); +// } +// 3 => { +// // [2, 1, 1] +// // [1, 2, 1] +// // [1, 1, 3] +// let mut sum = input[0]; +// sum.add_assign(input[1]); +// sum.add_assign(input[2]); +// input[0].add_assign(sum); +// input[1].add_assign(sum); +// input[2].add_assign(input[2]); +// input[2].add_assign(sum); +// } +// 4 | 8 | 12 | 16 | 20 | 24 => { +// // Compute input sum +// let mut sum = input[0]; +// input +// .iter() +// .skip(1) +// .take(t-1) +// .for_each(|el| sum.add_assign(*el)); +// // Add sum + diag entry * element to each element +// for i in 0..input.len() { +// input[i].mul_assign(mat_internal_diag_m_1[i]); +// input[i].add_assign(sum); +// } +// } +// _ => { +// panic!() +// } +// } +// } + +// fn add_rc(&self, input: &[F], rc: &[F]) -> Vec { +// input +// .iter() +// .zip(rc.iter()) +// .map(|(a, b)| { +// let mut r = *a; +// r.add_assign(*b); +// r +// }) +// .collect() +// } +// } + +// pub trait MerkleTreeHash { +// fn compress(&self, input: &[&F]) -> Vec; +// } + +// #[derive(Clone, Debug)] +// pub struct MerkleTree> { +// perm: P, +// field: PhantomData, +// } + +// impl> MerkleTree { +// pub fn new(perm: P) -> Self { +// MerkleTree { +// perm, +// field: PhantomData, +// } +// } + +// fn round_up_pow_n(input: usize, n: usize) -> usize { +// debug_assert!(n >= 1); +// let mut res = 1; +// // try powers, starting from n +// loop { +// res *= n; +// if res >= input { +// break; +// } +// } +// res +// } + +// // pub fn accumulate(&mut self, set: &[F]) -> F { +// // let set_size = set.len(); +// // let mut bound = Self::round_up_pow_n(set_size, 2); +// // loop { +// // if bound >= 2 { +// // break; +// // } +// // bound *= 2; +// // } +// // let mut nodes: Vec = Vec::with_capacity(bound); +// // for s in set { +// // nodes.push(s.to_owned()); +// // } +// // // pad +// // for _ in nodes.len()..bound { +// // nodes.push(nodes[set_size - 1].to_owned()); +// // } + +// // while nodes.len() > 1 { +// // let new_len = nodes.len() / 2; +// // let mut new_nodes: Vec = Vec::with_capacity(new_len); +// // for i in (0..nodes.len()).step_by(2) { +// // let inp = [&nodes[i], &nodes[i + 1]]; +// // let dig = self.perm.compress(&inp); +// // new_nodes.push(dig); +// // } +// // nodes = new_nodes; +// // } +// // nodes[0].to_owned() +// // } + +// pub fn accumulate(&mut self, set: &[F]) -> Vec { +// let set_size = set.len(); +// let mut bound = Self::round_up_pow_n(set_size, 2); +// loop { +// if bound >= 16 { +// break; +// } +// bound *= 2; +// } + +// let mut nodes: Vec = Vec::with_capacity(bound); + +// // Populate nodes with set elements +// for s in set { +// nodes.push(s.to_owned()); +// } + +// // Pad nodes to reach the required size +// while nodes.len() < bound { +// nodes.push(nodes[set_size - 1].to_owned()); +// } + +// // Compress pairs of 8 elements until a single set of 8 elements is left +// while nodes.len() > 8 { +// let new_len = nodes.len() / 2; +// let mut new_nodes: Vec = Vec::with_capacity(new_len); + +// // Compress pairs of 8 elements at a time +// for i in (0..nodes.len()).step_by(16) { +// let inp: Vec<_> = nodes[i..i + 16].iter().collect(); +// let dig = self.perm.compress(&inp); +// new_nodes.push(dig[0]); +// new_nodes.push(dig[1]); +// new_nodes.push(dig[2]); +// new_nodes.push(dig[3]); +// new_nodes.push(dig[4]); +// new_nodes.push(dig[5]); +// new_nodes.push(dig[6]); +// new_nodes.push(dig[7]); +// } + +// nodes = new_nodes; +// } + +// nodes +// } + +// } + +// impl MerkleTreeHash for Poseidon2 { +// fn compress(&self, input: &[&F]) -> Vec { +// let res = self.permutation(&[ +// input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), +// input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), +// F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO]); + +// vec![res[0], res[1], res[2], res[3], res[4], res[5], res[6], res[7] ] +// } +// } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// for POSEIDON2_BABYBEAR_24_PARAMS only +pub fn compress(perm: Poseidon2, input: Vec) -> Vec{ + let p = perm.permutation( + &[ + *input.get(0).unwrap(), *input.get(1).unwrap(), *input.get(2).unwrap(), *input.get(3).unwrap(), *input.get(4).unwrap(), *input.get(5).unwrap(), *input.get(6).unwrap(), *input.get(7).unwrap(), + *input.get(8).unwrap(), *input.get(9).unwrap(), *input.get(10).unwrap(), *input.get(11).unwrap(), *input.get(12).unwrap(), *input.get(13).unwrap(), *input.get(14).unwrap(), *input.get(15).unwrap(), + FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) + ] + ); + vec![p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7] ] +} + + risc0_zkvm::guest::entry!(main); pub fn main() { let data: Vec> = env::read(); + let cycles1 = env::get_cycle_count(); let mut hash_data: Vec = Vec::new(); for i in 0..data.len() { @@ -20,15 +597,42 @@ pub fn main() { } let cycles2 = env::get_cycle_count(); - let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BABYBEAR_16_PARAMS); - let perm: Vec = permutation.permutation(&hash_data); + let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); + // let perm: Vec = permutation.permutation(&hash_data); + let input1: [FpBabyBear;24] = [ + *hash_data.get(0).unwrap(), *hash_data.get(1).unwrap(), *hash_data.get(2).unwrap(), *hash_data.get(3).unwrap(), *hash_data.get(4).unwrap(), *hash_data.get(5).unwrap(), *hash_data.get(6).unwrap(), *hash_data.get(7).unwrap(), + *hash_data.get(8).unwrap(), *hash_data.get(9).unwrap(), *hash_data.get(10).unwrap(), *hash_data.get(11).unwrap(), *hash_data.get(12).unwrap(), *hash_data.get(13).unwrap(), *hash_data.get(14).unwrap(), *hash_data.get(15).unwrap(), + FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) + ]; + + let input2: [FpBabyBear;24] = [ + *hash_data.get(16).unwrap(), *hash_data.get(17).unwrap(), *hash_data.get(18).unwrap(), *hash_data.get(19).unwrap(), *hash_data.get(20).unwrap(), *hash_data.get(21).unwrap(), *hash_data.get(22).unwrap(), *hash_data.get(23).unwrap(), + *hash_data.get(24).unwrap(), *hash_data.get(25).unwrap(), *hash_data.get(26).unwrap(), *hash_data.get(27).unwrap(), *hash_data.get(28).unwrap(), *hash_data.get(29).unwrap(), *hash_data.get(30).unwrap(), *hash_data.get(31).unwrap(), + FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) + ]; + + let output1 = compress(permutation.clone(), input1.into()); + let output2 = compress(permutation.clone(), input2.into()); + + let input3 = vec![ + output1[0], output1[1], output1[2], output1[3], output1[4], output1[5], output1[6], output1[7], + output2[0], output2[1], output2[2], output2[3], output2[4], output2[5], output2[6], output2[7], + FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) + ]; + let output_final = compress(permutation.clone(), input3); + + + // // let mut merkle_tree = MerkleTree::new(permutation.clone()); + // let cycles4 = env::get_cycle_count(); + // // let hash_final = merkle_tree.accumulate(&hash_data); + // let cycles5 = env::get_cycle_count(); let cycles4 = env::get_cycle_count(); let mut perm_seralised: Vec> = Vec::new(); - for i in 0..data.len() { + for i in 0..8 { let mut temp: Vec = Vec::new(); - perm.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); + output_final.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); perm_seralised.push(temp); } let cycles6 = env::get_cycle_count(); diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs index f8c6558..382f34b 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear.rs @@ -3,8 +3,8 @@ use methods::{ POSEIDON2_BABYBEAR_ELF, POSEIDON2_BABYBEAR_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; -use zkhash::{fields::{babybear::FpBabyBear, utils::random_scalar}/* , poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS*/}; -// use zkhash::poseidon2::poseidon2::Poseidon2; +use zkhash::{fields::{babybear::FpBabyBear, utils::random_scalar} , poseidon2::poseidon2_instance_babybear::POSEIDON2_BABYBEAR_24_PARAMS}; +use zkhash::poseidon2::poseidon2::Poseidon2; // use std::convert::TryFrom; use std::time::Instant; // use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; @@ -13,13 +13,15 @@ use std::time::Instant; use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; -pub fn poseidon2_babybear_bench(mtDepth: usize) { +pub fn poseidon2_babybear_bench() { type Scalar = FpBabyBear; - + let permutation = Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); + // let t = permutation.get_t(); + let t = 32; let mut input_scalar: Vec> = Vec::new(); - let number_of_leaves: u32 = 1 << mtDepth; - for _ in 0..number_of_leaves { + + for _ in 0..t { let mut uncompressed_bytes = Vec::new(); let a: Scalar = random_scalar(); a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index 266a65f..140db08 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -9,7 +9,6 @@ use benches::{ }; use rand::Rng; - fn generate_bytes(size: usize) -> Vec { let mut rng = rand::thread_rng(); (0..size).map(|_| rng.gen()).collect() @@ -19,9 +18,7 @@ fn generate_bytes(size: usize) -> Vec { fn main() { let args: Vec = std::env::args().collect(); - - // let mut flag = 0; - + let hash_type = &args[1]; let size_kb = args[2].parse::().unwrap(); @@ -61,8 +58,8 @@ fn main() { "poseidon2_babybear" => { println!("Poseidon2 Benchmarking on the BabyBear field: "); - eprintln!("number of inputs {:?}", size_kb); - poseidon2_babybear_bench(size_kb); + eprintln!("number of inputs {:?}", 32); + poseidon2_babybear_bench(); } _ => { From d5193cce6e822340fab6c13ea7f178e541ab53ae Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Tue, 2 Jan 2024 13:37:38 +0530 Subject: [PATCH 10/31] rust-crypto accelerated sha and poseidon2 over babybear(ark-ff) benchmarking --- hash/risc0/bench/bench.cfg | 4 +- .../guest/src/bin/poseidon2_babybear.rs | 690 +++--------------- .../bench/methods/guest/src/bin/sha256.rs | 1 + .../guest/src/bin/sha256_accelerated.rs | 20 + hash/risc0/bench/run.sh | 2 +- .../bench/src/benches/poseidon2_babybear.rs | 76 +- hash/risc0/bench/src/benches/sha256.rs | 24 +- hash/risc0/bench/src/main.rs | 5 +- 8 files changed, 154 insertions(+), 668 deletions(-) create mode 100644 hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs diff --git a/hash/risc0/bench/bench.cfg b/hash/risc0/bench/bench.cfg index d5adade..5e47ea2 100644 --- a/hash/risc0/bench/bench.cfg +++ b/hash/risc0/bench/bench.cfg @@ -6,7 +6,7 @@ params: , INPUT_SIZE: [ 256, 512, 1024, 2048 ] , WHICH: [ LINEAR ] ] -tags: CPU, SHA256, KECCAK, BLAKE2B, BLAKE3 +tags: CPU, SHA256, KECCAK, BLAKE2B, BLAKE3, POSEIDON2, BN128, BABYBEAR comments: - The benchmarks includes for sha256, keccak, blake2b, blake3. + The benchmarks includes for sha256, keccak, blake2b, blake3 & poseidon2(merkle hashing). the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs index 141814f..a00e7ad 100644 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs @@ -1,587 +1,97 @@ #![no_main] #![allow(non_snake_case)] -use ark_ff::Field; -use risc0_zkvm::{guest::env/* , sha::Digest*/}; -// use sha3::{Digest as _, Keccak256}; +use risc0_zkvm::guest::env; use zkhash::poseidon2::poseidon2; use zkhash::poseidon2::poseidon2::Poseidon2; use zkhash::poseidon2::poseidon2_instance_babybear::{/*POSEIDON2_BABYBEAR_16_PARAMS , */POSEIDON2_BABYBEAR_24_PARAMS}; use zkhash::fields::babybear::FpBabyBear; use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; -// use zkhash::merkle_tree::merkle_tree_fp::MerkleTreeHash; -use risc0_core::field::Elem; - -use std::sync::Arc; use std::marker::PhantomData; -use risc0_core::field::baby_bear::BabyBear; -use lazy_static::lazy_static; -// #[derive(Clone, Debug)] -// pub struct Poseidon2Params { -// pub(crate) t: usize, // statesize -// pub(crate) d: usize, // sbox degree -// pub(crate) rounds_f_beginning: usize, -// pub(crate) rounds_p: usize, -// #[allow(dead_code)] -// pub(crate) rounds_f_end: usize, -// pub(crate) rounds: usize, -// pub(crate) mat_internal_diag_m_1: Vec, -// pub(crate) _mat_internal: Vec>, -// pub(crate) round_constants: Vec>, -// } +use ark_ff::PrimeField; -// pub fn mat_inverse(mat: &[Vec]) -> Vec> { -// let n = mat.len(); -// assert!(mat[0].len() == n); - -// let mut m = mat.to_owned(); -// let mut inv = vec![vec![F::ZERO; n]; n]; -// for (i, invi) in inv.iter_mut().enumerate() { -// invi[i] = F::ONE; -// } - -// // upper triangle -// for row in 0..n { -// for j in 0..row { -// // subtract from these rows -// let el = m[row][j]; -// for col in 0..n { -// // do subtraction for each col -// if col < j { -// m[row][col] = F::ZERO; -// } else { -// let mut tmp = m[j][col]; -// tmp.mul_assign(el); -// m[row][col].sub_assign(tmp); -// } -// if col > row { -// inv[row][col] = F::ZERO; -// } else { -// let mut tmp = inv[j][col]; -// tmp.mul_assign(el); -// inv[row][col].sub_assign(tmp); -// } -// } -// } -// // make 1 in diag -// let el_inv = m[row][row].inv(); -// for col in 0..n { -// match col.cmp(&row) { -// std::cmp::Ordering::Less => inv[row][col].mul_assign(el_inv), -// std::cmp::Ordering::Equal => { -// m[row][col] = F::ONE; -// inv[row][col].mul_assign(el_inv) -// } -// std::cmp::Ordering::Greater => m[row][col].mul_assign(el_inv), -// } -// } -// } - -// // upper triangle -// for row in (0..n).rev() { -// for j in (row + 1..n).rev() { -// // subtract from these rows -// let el = m[row][j]; -// for col in 0..n { -// // do subtraction for each col - -// #[cfg(debug_assertions)] -// { -// if col >= j { -// m[row][col] = F::ZERO; -// } -// } -// let mut tmp = inv[j][col]; -// tmp.mul_assign(el); -// inv[row][col].sub_assign(tmp); -// } -// } -// } - -// #[cfg(debug_assertions)] -// { -// for (row, mrow) in m.iter().enumerate() { -// for (col, v) in mrow.iter().enumerate() { -// if row == col { -// debug_assert!(*v == F::ONE); -// } else { -// debug_assert!(*v == F::ZERO); -// } -// } -// } -// } - -// inv -// } - -// impl Poseidon2Params { -// #[allow(clippy::too_many_arguments)] - -// pub const INIT_SHAKE: &'static str = "Poseidon2"; - -// pub fn new( -// t: usize, -// d: usize, -// rounds_f: usize, -// rounds_p: usize, -// mat_internal_diag_m_1: &[F], -// mat_internal: &[Vec], -// round_constants: &[Vec], -// ) -> Self { -// assert!(d == 3 || d == 5 || d == 7 || d == 11); -// assert_eq!(rounds_f % 2, 0); -// let r = rounds_f / 2; -// let rounds = rounds_f + rounds_p; - -// Poseidon2Params { -// t, -// d, -// rounds_f_beginning: r, -// rounds_p, -// rounds_f_end: r, -// rounds, -// mat_internal_diag_m_1: mat_internal_diag_m_1.to_owned(), -// _mat_internal: mat_internal.to_owned(), -// round_constants: round_constants.to_owned(), -// } -// } - - -// // Unused -// pub fn equivalent_round_constants( -// round_constants: &[Vec], -// mat_internal: &[Vec], -// rounds_f_beginning: usize, -// rounds_p: usize, -// ) -> Vec> { -// let mut opt = vec![Vec::new(); rounds_p + 1]; -// let mat_internal_inv = mat_inverse(mat_internal); - -// let p_end = rounds_f_beginning + rounds_p - 1; -// let mut tmp = round_constants[p_end].clone(); -// for i in (0..rounds_p - 1).rev() { -// let inv_cip = Self::mat_vec_mul(&mat_internal_inv, &tmp); -// opt[i + 1] = vec![inv_cip[0]]; -// tmp = round_constants[rounds_f_beginning + i].clone(); -// for i in 1..inv_cip.len() { -// tmp[i].add_assign(inv_cip[i]); -// } -// } -// opt[0] = tmp; -// opt[rounds_p] = vec![F::ZERO; opt[0].len()]; // opt[0].len() = t - -// opt -// } - -// pub fn mat_vec_mul(mat: &[Vec], input: &[F]) -> Vec { -// let t = mat.len(); -// debug_assert!(t == input.len()); -// let mut out = vec![F::ZERO; t]; -// for row in 0..t { -// for (col, inp) in input.iter().enumerate() { -// let mut tmp = mat[row][col]; -// tmp.mul_assign(*inp); -// out[row].add_assign(tmp); -// } -// } -// out -// } - -// } - -// #[derive(Clone, Debug)] -// pub struct Poseidon2 { -// pub(crate) params: Arc>, -// } - -// impl Poseidon2 { -// pub fn new(params: &Arc>) -> Self { -// Poseidon2 { -// params: Arc::clone(params), -// } -// } - -// pub fn get_t(&self) -> usize { -// self.params.t -// } - -// pub fn permutation(&self, input: &[F]) -> Vec { -// let t = self.params.t; -// assert_eq!(input.len(), t); - -// let mut current_state = input.to_owned(); - -// // Linear layer at beginning -// self.matmul_external(&mut current_state); - -// for r in 0..self.params.rounds_f_beginning { -// current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); -// current_state = self.sbox(¤t_state); -// self.matmul_external(&mut current_state); -// } - -// let p_end = self.params.rounds_f_beginning + self.params.rounds_p; -// for r in self.params.rounds_f_beginning..p_end { -// current_state[0].add_assign(self.params.round_constants[r][0]); -// current_state[0] = self.sbox_p(¤t_state[0]); -// self.matmul_internal(&mut current_state, &self.params.mat_internal_diag_m_1); -// } - -// for r in p_end..self.params.rounds { -// current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); -// current_state = self.sbox(¤t_state); -// self.matmul_external(&mut current_state); -// } -// current_state -// } - -// fn sbox(&self, input: &[F]) -> Vec { -// input.iter().map(|el| self.sbox_p(el)).collect() -// } - -// fn sbox_p(&self, input: &F) -> F { -// let mut input2 = *input; -// input2.mul_assign(input2); - -// match self.params.d { -// 3 => { -// let mut out = input2; -// out.mul_assign(*input); -// out -// } -// 5 => { -// let mut out = input2; -// out.mul_assign(out); -// out.mul_assign(*input); -// out -// } -// 7 => { -// let mut out = input2; -// out.mul_assign(out); -// out.mul_assign(input2); -// out.mul_assign(*input); -// out -// } -// _ => { -// panic!() -// } -// } -// } - -// fn matmul_m4(&self, input: &mut[F]) { -// let t = self.params.t; -// let t4 = t / 4; -// for i in 0..t4 { -// let start_index = i * 4; -// let mut t_0 = input[start_index]; -// t_0.add_assign(input[start_index + 1]); -// let mut t_1 = input[start_index + 2]; -// t_1.add_assign(input[start_index + 3]); -// let mut t_2 = input[start_index + 1]; -// t_2.add_assign(t_2); -// t_2.add_assign(t_1); -// let mut t_3 = input[start_index + 3]; -// t_3.add_assign(t_3); -// t_3.add_assign(t_0); -// let mut t_4 = t_1; -// t_4.add_assign(t_4); -// t_4.add_assign(t_4); -// t_4.add_assign(t_3); -// let mut t_5 = t_0; -// t_5.add_assign(t_5); -// t_5.add_assign(t_5); -// t_5.add_assign(t_2); -// let mut t_6 = t_3; -// t_6.add_assign(t_5); -// let mut t_7 = t_2; -// t_7.add_assign(t_4); -// input[start_index] = t_6; -// input[start_index + 1] = t_5; -// input[start_index + 2] = t_7; -// input[start_index + 3] = t_4; -// } -// } - -// fn matmul_external(&self, input: &mut[F]) { -// let t = self.params.t; -// match t { -// 2 => { -// // Matrix circ(2, 1) -// let mut sum = input[0]; -// sum.add_assign(input[1]); -// input[0].add_assign(sum); -// input[1].add_assign(sum); -// } -// 3 => { -// // Matrix circ(2, 1, 1) -// let mut sum = input[0]; -// sum.add_assign(input[1]); -// sum.add_assign(input[2]); -// input[0].add_assign(sum); -// input[1].add_assign(sum); -// input[2].add_assign(sum); -// } -// 4 => { -// // Applying cheap 4x4 MDS matrix to each 4-element part of the state -// self.matmul_m4(input); -// } -// 8 | 12 | 16 | 20 | 24 => { -// // Applying cheap 4x4 MDS matrix to each 4-element part of the state -// self.matmul_m4(input); - -// // Applying second cheap matrix for t > 4 -// let t4 = t / 4; -// let mut stored = [F::ZERO; 4]; -// for l in 0..4 { -// stored[l] = input[l]; -// for j in 1..t4 { -// stored[l].add_assign(input[4 * j + l]); -// } -// } -// for i in 0..input.len() { -// input[i].add_assign(stored[i % 4]); -// } -// } -// _ => { -// panic!() -// } -// } -// } - -// fn matmul_internal(&self, input: &mut[F], mat_internal_diag_m_1: &[F]) { -// let t = self.params.t; - -// match t { -// 2 => { -// // [2, 1] -// // [1, 3] -// let mut sum = input[0]; -// sum.add_assign(input[1]); -// input[0].add_assign(sum); -// input[1].add_assign(input[1]); -// input[1].add_assign(sum); -// } -// 3 => { -// // [2, 1, 1] -// // [1, 2, 1] -// // [1, 1, 3] -// let mut sum = input[0]; -// sum.add_assign(input[1]); -// sum.add_assign(input[2]); -// input[0].add_assign(sum); -// input[1].add_assign(sum); -// input[2].add_assign(input[2]); -// input[2].add_assign(sum); -// } -// 4 | 8 | 12 | 16 | 20 | 24 => { -// // Compute input sum -// let mut sum = input[0]; -// input -// .iter() -// .skip(1) -// .take(t-1) -// .for_each(|el| sum.add_assign(*el)); -// // Add sum + diag entry * element to each element -// for i in 0..input.len() { -// input[i].mul_assign(mat_internal_diag_m_1[i]); -// input[i].add_assign(sum); -// } -// } -// _ => { -// panic!() -// } -// } -// } - -// fn add_rc(&self, input: &[F], rc: &[F]) -> Vec { -// input -// .iter() -// .zip(rc.iter()) -// .map(|(a, b)| { -// let mut r = *a; -// r.add_assign(*b); -// r -// }) -// .collect() -// } -// } - -// pub trait MerkleTreeHash { -// fn compress(&self, input: &[&F]) -> Vec; -// } - -// #[derive(Clone, Debug)] -// pub struct MerkleTree> { -// perm: P, -// field: PhantomData, -// } - -// impl> MerkleTree { -// pub fn new(perm: P) -> Self { -// MerkleTree { -// perm, -// field: PhantomData, -// } -// } - -// fn round_up_pow_n(input: usize, n: usize) -> usize { -// debug_assert!(n >= 1); -// let mut res = 1; -// // try powers, starting from n -// loop { -// res *= n; -// if res >= input { -// break; -// } -// } -// res -// } - -// // pub fn accumulate(&mut self, set: &[F]) -> F { -// // let set_size = set.len(); -// // let mut bound = Self::round_up_pow_n(set_size, 2); -// // loop { -// // if bound >= 2 { -// // break; -// // } -// // bound *= 2; -// // } -// // let mut nodes: Vec = Vec::with_capacity(bound); -// // for s in set { -// // nodes.push(s.to_owned()); -// // } -// // // pad -// // for _ in nodes.len()..bound { -// // nodes.push(nodes[set_size - 1].to_owned()); -// // } - -// // while nodes.len() > 1 { -// // let new_len = nodes.len() / 2; -// // let mut new_nodes: Vec = Vec::with_capacity(new_len); -// // for i in (0..nodes.len()).step_by(2) { -// // let inp = [&nodes[i], &nodes[i + 1]]; -// // let dig = self.perm.compress(&inp); -// // new_nodes.push(dig); -// // } -// // nodes = new_nodes; -// // } -// // nodes[0].to_owned() -// // } - -// pub fn accumulate(&mut self, set: &[F]) -> Vec { -// let set_size = set.len(); -// let mut bound = Self::round_up_pow_n(set_size, 2); -// loop { -// if bound >= 16 { -// break; -// } -// bound *= 2; -// } - -// let mut nodes: Vec = Vec::with_capacity(bound); - -// // Populate nodes with set elements -// for s in set { -// nodes.push(s.to_owned()); -// } - -// // Pad nodes to reach the required size -// while nodes.len() < bound { -// nodes.push(nodes[set_size - 1].to_owned()); -// } - -// // Compress pairs of 8 elements until a single set of 8 elements is left -// while nodes.len() > 8 { -// let new_len = nodes.len() / 2; -// let mut new_nodes: Vec = Vec::with_capacity(new_len); - -// // Compress pairs of 8 elements at a time -// for i in (0..nodes.len()).step_by(16) { -// let inp: Vec<_> = nodes[i..i + 16].iter().collect(); -// let dig = self.perm.compress(&inp); -// new_nodes.push(dig[0]); -// new_nodes.push(dig[1]); -// new_nodes.push(dig[2]); -// new_nodes.push(dig[3]); -// new_nodes.push(dig[4]); -// new_nodes.push(dig[5]); -// new_nodes.push(dig[6]); -// new_nodes.push(dig[7]); -// } - -// nodes = new_nodes; -// } - -// nodes -// } - -// } - -// impl MerkleTreeHash for Poseidon2 { -// fn compress(&self, input: &[&F]) -> Vec { -// let res = self.permutation(&[ -// input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), -// input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), input[0].to_owned(), -// F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO]); - -// vec![res[0], res[1], res[2], res[3], res[4], res[5], res[6], res[7] ] -// } -// } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// for POSEIDON2_BABYBEAR_24_PARAMS only -pub fn compress(perm: Poseidon2, input: Vec) -> Vec{ - let p = perm.permutation( - &[ - *input.get(0).unwrap(), *input.get(1).unwrap(), *input.get(2).unwrap(), *input.get(3).unwrap(), *input.get(4).unwrap(), *input.get(5).unwrap(), *input.get(6).unwrap(), *input.get(7).unwrap(), - *input.get(8).unwrap(), *input.get(9).unwrap(), *input.get(10).unwrap(), *input.get(11).unwrap(), *input.get(12).unwrap(), *input.get(13).unwrap(), *input.get(14).unwrap(), *input.get(15).unwrap(), - FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) - ] - ); - vec![p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7] ] +pub trait MerkleTreeHash { + fn compress(&self, input: &[&F]) -> Vec; } +#[derive(Clone, Debug)] +pub struct MerkleTree> { + perm: P, + field: PhantomData, +} +impl> MerkleTree { + pub fn new(perm: P) -> Self { + MerkleTree { + perm, + field: PhantomData, + } + } + + fn round_up_pow_n(input: usize, n: usize) -> usize { + debug_assert!(n >= 1); + let mut res = 1; + // try powers, starting from n + loop { + res *= n; + if res >= input { + break; + } + } + res + } + + pub fn accumulate(&mut self, set: &[F]) -> Vec { + assert!(set.len()%8 == 0); + let set_size = set.len() / 8; + let mut bound = Self::round_up_pow_n(set_size, 2); + loop { + if bound >= 2 { + break; + } + bound *= 2; + } + let mut nodes: Vec = Vec::with_capacity(bound * 8); + for s in set { + nodes.push(s.to_owned()); + } + // pad + for _ in nodes.len()..bound { + nodes.push(nodes[set_size * 8 - 1].to_owned()); + } + + while nodes.len() > 8 { + let new_len = nodes.len() / 2; + let mut new_nodes: Vec = Vec::with_capacity(new_len); + for i in (0..nodes.len()).step_by(16) { + let inp = [ + &nodes[i], &nodes[i + 1], &nodes[i + 2], &nodes[i + 3], &nodes[i + 4], &nodes[i + 5], &nodes[i + 6], &nodes[i + 7], + &nodes[i + 8], &nodes[i + 9], &nodes[i + 10], &nodes[i + 11], &nodes[i + 12], &nodes[i + 13], &nodes[i + 14], &nodes[i + 15] + ]; + let dig = self.perm.compress(&inp); + + for j in 0..8 { + new_nodes.push(dig[j]); + } + + } + nodes = new_nodes; + } + vec![nodes[0].to_owned(), nodes[1].to_owned(), nodes[2].to_owned(), nodes[3].to_owned(), nodes[4].to_owned(), nodes[5].to_owned(), nodes[6].to_owned(), nodes[7].to_owned()] + } +} + +impl MerkleTreeHash for Poseidon2 { + fn compress(&self, input: &[&F]) -> Vec { + let p = self.permutation(&[ + input[0].to_owned(), input[1].to_owned(),input[2].to_owned(), input[3].to_owned(),input[4].to_owned(), input[5].to_owned(),input[6].to_owned(), input[7].to_owned(), + input[8].to_owned(), input[9].to_owned(),input[10].to_owned(), input[11].to_owned(),input[12].to_owned(), input[13].to_owned(),input[14].to_owned(), input[15].to_owned(), + F::zero(), F::zero(), F::zero(), F::zero(), F::zero(), F::zero(), F::zero(), F::zero() + ]); + + vec![p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]] + } +} risc0_zkvm::guest::entry!(main); @@ -597,42 +107,18 @@ pub fn main() { } let cycles2 = env::get_cycle_count(); + let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); - // let perm: Vec = permutation.permutation(&hash_data); - let input1: [FpBabyBear;24] = [ - *hash_data.get(0).unwrap(), *hash_data.get(1).unwrap(), *hash_data.get(2).unwrap(), *hash_data.get(3).unwrap(), *hash_data.get(4).unwrap(), *hash_data.get(5).unwrap(), *hash_data.get(6).unwrap(), *hash_data.get(7).unwrap(), - *hash_data.get(8).unwrap(), *hash_data.get(9).unwrap(), *hash_data.get(10).unwrap(), *hash_data.get(11).unwrap(), *hash_data.get(12).unwrap(), *hash_data.get(13).unwrap(), *hash_data.get(14).unwrap(), *hash_data.get(15).unwrap(), - FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) - ]; - - let input2: [FpBabyBear;24] = [ - *hash_data.get(16).unwrap(), *hash_data.get(17).unwrap(), *hash_data.get(18).unwrap(), *hash_data.get(19).unwrap(), *hash_data.get(20).unwrap(), *hash_data.get(21).unwrap(), *hash_data.get(22).unwrap(), *hash_data.get(23).unwrap(), - *hash_data.get(24).unwrap(), *hash_data.get(25).unwrap(), *hash_data.get(26).unwrap(), *hash_data.get(27).unwrap(), *hash_data.get(28).unwrap(), *hash_data.get(29).unwrap(), *hash_data.get(30).unwrap(), *hash_data.get(31).unwrap(), - FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) - ]; - - let output1 = compress(permutation.clone(), input1.into()); - let output2 = compress(permutation.clone(), input2.into()); - - let input3 = vec![ - output1[0], output1[1], output1[2], output1[3], output1[4], output1[5], output1[6], output1[7], - output2[0], output2[1], output2[2], output2[3], output2[4], output2[5], output2[6], output2[7], - FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0), FpBabyBear::from(0) - ]; - let output_final = compress(permutation.clone(), input3); - - - // // let mut merkle_tree = MerkleTree::new(permutation.clone()); - // let cycles4 = env::get_cycle_count(); - // // let hash_final = merkle_tree.accumulate(&hash_data); - // let cycles5 = env::get_cycle_count(); + let mut merkle_tree = MerkleTree::new(permutation.clone()); + let cycles3 = env::get_cycle_count(); + let hash_final = merkle_tree.accumulate(&hash_data); let cycles4 = env::get_cycle_count(); let mut perm_seralised: Vec> = Vec::new(); for i in 0..8 { let mut temp: Vec = Vec::new(); - output_final.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); + hash_final.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); perm_seralised.push(temp); } let cycles6 = env::get_cycle_count(); @@ -640,7 +126,9 @@ pub fn main() { env::commit(&perm_seralised); eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); - eprintln!("number of cycles for hash permutation builder: {:?}", cycles4 - cycles2); + eprintln!("number of cycles for hash permutation builder: {:?}", cycles3 - cycles2); + eprintln!("number of cycles for hash accumulation: {:?}", cycles4 - cycles3); + eprintln!("number of cycles for permutation seralisation: {:?}", cycles6 - cycles4); } diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256.rs b/hash/risc0/bench/methods/guest/src/bin/sha256.rs index f133700..d67a766 100644 --- a/hash/risc0/bench/methods/guest/src/bin/sha256.rs +++ b/hash/risc0/bench/methods/guest/src/bin/sha256.rs @@ -7,6 +7,7 @@ pub fn main() { let data: Vec = env::read(); let hash = sha::Impl::hash_bytes(&data); + eprintln!("total cycle count for hashing: {:?}",env::get_cycle_count()); env::commit(&hash) } diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs b/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs new file mode 100644 index 0000000..91d7e9c --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs @@ -0,0 +1,20 @@ + +// accelerated sha2 crate +#![no_main] + +use risc0_zkvm::guest::env; +use sha2::{Sha256, Digest}; +// use base16ct::lower::encode_str; +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec = env::read(); + let result = Sha256::digest(data); + let c1 = env::get_cycle_count(); + eprintln!("total cycle count for hashing: {:?}",c1); + let result_bytes: [u8;32] = result.into(); + let c2 = env::get_cycle_count(); + eprintln!("cycle count to convert into bytes array: {:?}",c2-c1); + env::commit(&result_bytes) +} diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index e51695a..3a91834 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -28,7 +28,7 @@ echo "Input Size (KB) = $ZKBENCH_INPUT_SIZE_KB" # Run the benchmarks using cargo run # Check if the environment variable is set to "poseidon2_bn128" -if [ "$ZKBENCH_HASH_TYPE" == "poseidon2_bn128" ]; then +if [[ "$ZKBENCH_HASH_TYPE" == "poseidon2_bn128" || "$ZKBENCH_HASH_TYPE" == "poseidon2_babybear" ]]; then # echo "Running Poseidon2 benchmark over bn128 field" CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_TREE_DEPTH else diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs index 382f34b..d2ede50 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear.rs @@ -1,24 +1,28 @@ #![allow(non_snake_case)] use methods::{ - POSEIDON2_BABYBEAR_ELF, POSEIDON2_BABYBEAR_ID + POSEIDON2_BABYBEAR_ELF, + POSEIDON2_BABYBEAR_ID }; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use zkhash::{fields::{babybear::FpBabyBear, utils::random_scalar} , poseidon2::poseidon2_instance_babybear::POSEIDON2_BABYBEAR_24_PARAMS}; -use zkhash::poseidon2::poseidon2::Poseidon2; -// use std::convert::TryFrom; +use risc0_zkvm::{ + default_prover, + ExecutorEnv +}; +use zkhash::fields::{ + babybear::FpBabyBear, + utils::random_scalar + }; use std::time::Instant; -// use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; -// use std::convert::TryInto; -// use hex::encode_to_slice; -use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; +use ark_serialize::{ + CanonicalSerialize, + CanonicalDeserialize +}; -pub fn poseidon2_babybear_bench() { +pub fn poseidon2_babybear_bench(mt_depth: usize) { type Scalar = FpBabyBear; - let permutation = Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); - // let t = permutation.get_t(); - let t = 32; + + let t = (1 << mt_depth) * 8; let mut input_scalar: Vec> = Vec::new(); for _ in 0..t { @@ -58,50 +62,4 @@ pub fn poseidon2_babybear_bench() { // eprintln!("Hash: {:?}", hash_final); - - - - // let input2:[Scalar;16] = [Scalar::from(1), Scalar::from(2), Scalar::from(3), Scalar::from(4),Scalar::from(5), Scalar::from(6), Scalar::from(7), Scalar::from(8),Scalar::from(9), Scalar::from(10), Scalar::from(11), Scalar::from(12), Scalar::from(13), Scalar::from(14), Scalar::from(15), Scalar::from(16)]; - // let hash = merkle_tree.accumulate(&input2); - - // let hash_string = hash.0.to_string(); - // // eprintln!("merkle hash: {:?}",hex::encode(hash_string)); - // eprintln!("merkle hash: {:?}", hash_string); - - // let x = hash.0.0; - // eprintln!("from: {:x}{:x}{:x}{:x}", x[0],x[1], x[2], x[3]); - // eprintln!("scalar: {:?}", Scalar::from(4)); - - // let a = Scalar::from(4); - // let mut uncompressed_bytes = Vec::new(); - // a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); - // eprintln!("compress: {:?}", uncompressed_bytes); - - // let a_uncompressed = Scalar::deserialize_uncompressed(&*uncompressed_bytes).unwrap(); - // eprintln!("uncompress: {:?}", a_uncompressed); - - // let t = poseidon2.get_t(); - // let input1: Vec = (0..t).map(|_| random_scalar()).collect(); - // let perm = poseidon2.permutation(&input1); - // eprintln!("output: {:?}", perm); - - // let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - // let prover = default_prover(); - - // let start_time = Instant::now(); - // // Produce a receipt by proving the specified ELF binary. - // let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); - // let elapsed_time = start_time.elapsed(); - - // // For example: - // let _output: sha::Digest = receipt.journal.decode().unwrap(); - - // // verify your receipt - // receipt.verify(POSEIDON2_BN128_ID).unwrap(); - - - // eprintln!("Total time: {:?}", elapsed_time); - // eprintln!("Hash: {:?}", _output); } \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/sha256.rs b/hash/risc0/bench/src/benches/sha256.rs index 553623f..46a0489 100644 --- a/hash/risc0/bench/src/benches/sha256.rs +++ b/hash/risc0/bench/src/benches/sha256.rs @@ -1,5 +1,5 @@ use methods::{ - SHA256_ELF, SHA256_ID + SHA256_ELF, SHA256_ID, SHA256_ACCELERATED_ELF, SHA256_ACCELERATED_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; @@ -14,7 +14,7 @@ pub fn sha_bench(input: Vec) { // Obtain the default prover. let prover = default_prover(); - + eprintln!("------risc0_zkvm sha hashing------"); let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. let receipt = prover.prove_elf(env, SHA256_ELF).unwrap(); @@ -26,7 +26,25 @@ pub fn sha_bench(input: Vec) { // verify your receipt receipt.verify(SHA256_ID).unwrap(); - + eprintln!("Total time: {:?}", elapsed_time); + eprintln!("Hash: {:?}", _output); + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + eprintln!("------RustCrypto sha hashing------"); + // Obtain the default prover. + let prover = default_prover(); + + let start_time = Instant::now(); + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, SHA256_ACCELERATED_ELF).unwrap(); + let elapsed_time = start_time.elapsed(); + + // For example: + let _output: [u8;32] = receipt.journal.decode().unwrap(); + + // verify your receipt + receipt.verify(SHA256_ACCELERATED_ID).unwrap(); + eprintln!("Total time: {:?}", elapsed_time); eprintln!("Hash: {:?}", _output); } \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index 140db08..25bfce0 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -58,8 +58,9 @@ fn main() { "poseidon2_babybear" => { println!("Poseidon2 Benchmarking on the BabyBear field: "); - eprintln!("number of inputs {:?}", 32); - poseidon2_babybear_bench(); + eprintln!("Tree Depth: {:?}", size_kb); + eprintln!("number of inputs {:?}", (1 << size_kb) * 8); + poseidon2_babybear_bench(size_kb); } _ => { From ac71b3f2a7fe588f89fba6f5d4bf07d792c918f9 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Wed, 3 Jan 2024 21:07:56 +0530 Subject: [PATCH 11/31] poseidon2 over risc0's native babybear --- hash/risc0/bench/Cargo.lock | 19 +- hash/risc0/bench/Cargo.toml | 3 +- hash/risc0/bench/methods/guest/Cargo.lock | 17 + hash/risc0/bench/methods/guest/Cargo.toml | 4 +- .../src/bin/poseidon2_babybear_native.rs | 1761 +++++++++++++++++ hash/risc0/bench/run.sh | 2 +- hash/risc0/bench/src/benches/mod.rs | 3 +- .../bench/src/benches/poseidon2_babybear.rs | 3 +- .../src/benches/poseidon2_babybear_native.rs | 56 + .../bench/src/benches/poseidon2_bn128.rs | 52 - hash/risc0/bench/src/main.rs | 8 + 11 files changed, 1866 insertions(+), 62 deletions(-) create mode 100644 hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs create mode 100644 hash/risc0/bench/src/benches/poseidon2_babybear_native.rs diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock index e8cd0fd..2135879 100644 --- a/hash/risc0/bench/Cargo.lock +++ b/hash/risc0/bench/Cargo.lock @@ -153,6 +153,7 @@ dependencies = [ "hex", "methods", "rand", + "risc0-core 0.18.0", "risc0-zkvm", "serde", "sha2 0.10.6", @@ -1449,7 +1450,7 @@ dependencies = [ "anyhow", "bytemuck", "log", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkp", "tracing", ] @@ -1462,12 +1463,22 @@ checksum = "1a269d01b18cba24ee1a08f68726fc3623e8705ed79d158377d12e9129dcde2e" dependencies = [ "anyhow", "log", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkp", "risc0-zkvm-platform", "tracing", ] +[[package]] +name = "risc0-core" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08605aec93ea22ed83f7f81f42e2d7287a5b0c749d8671f94de9d5994020045c" +dependencies = [ + "bytemuck", + "rand_core", +] + [[package]] name = "risc0-core" version = "0.19.1" @@ -1492,7 +1503,7 @@ dependencies = [ "log", "paste", "rand_core", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkvm-platform", "serde", "sha2 0.10.8", @@ -1522,7 +1533,7 @@ dependencies = [ "risc0-binfmt", "risc0-circuit-recursion", "risc0-circuit-rv32im", - "risc0-core", + "risc0-core 0.19.1", "risc0-zkp", "risc0-zkvm-platform", "rrs-lib", diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml index 8d484c5..554d145 100644 --- a/hash/risc0/bench/Cargo.toml +++ b/hash/risc0/bench/Cargo.toml @@ -32,4 +32,5 @@ methods = { workspace = true } zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} ark-ff = "0.4.2" hex = "0.4.3" -ark-serialize = "0.4" \ No newline at end of file +ark-serialize = "0.4" +risc0-core = "0.18.0" diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock index 3f2b808..7b5d163 100644 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -485,8 +485,10 @@ dependencies = [ "ark-serialize", "blake3", "lazy_static", + "rand", "risc0-core 0.18.0", "risc0-zkp", + "risc0-zkp-core", "risc0-zkvm", "sha2 0.10.6", "sha3", @@ -748,6 +750,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "risc0-zkp-core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfd3bb0b4f2a4250d7332c3d647418502449e773b176552aae869537c4a96bf" +dependencies = [ + "anyhow", + "bytemuck", + "paste", + "rand", + "rand_core", + "serde", + "sha2 0.10.8", +] + [[package]] name = "risc0-zkvm" version = "0.19.0" diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index ea206a8..8529584 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -16,4 +16,6 @@ zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} ark-serialize = "0.4" ark-ff = "0.4.2" risc0-core = "0.18.0" -lazy_static = "1.4" \ No newline at end of file +lazy_static = "1.4" +risc0-zkp-core = "0.10.0" +rand = "0.8.5" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs new file mode 100644 index 0000000..79cd4a6 --- /dev/null +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs @@ -0,0 +1,1761 @@ +#![no_main] +#![allow(non_snake_case)] +use risc0_core::field::baby_bear::BabyBearElem; +use risc0_zkvm::guest::env; +use std::marker::PhantomData; +use std::sync::Arc; +use risc0_core::field::Elem; +use lazy_static::lazy_static; + +// This code is adapted from https://github.com/HorizenLabs/poseidon2/tree/main +#[derive(Clone, Debug)] +pub struct Poseidon2Params { + pub(crate) t: usize, // statesize + pub(crate) d: usize, // sbox degree + pub(crate) rounds_f_beginning: usize, + pub(crate) rounds_p: usize, + #[allow(dead_code)] + pub(crate) rounds_f_end: usize, + pub(crate) rounds: usize, + pub(crate) mat_internal_diag_m_1: Vec, + pub(crate) _mat_internal: Vec>, + pub(crate) round_constants: Vec>, +} + +impl Poseidon2Params { + #[allow(clippy::too_many_arguments)] + + pub const INIT_SHAKE: &'static str = "Poseidon2"; + + pub fn new( + t: usize, + d: usize, + rounds_f: usize, + rounds_p: usize, + mat_internal_diag_m_1: &[F], + mat_internal: &[Vec], + round_constants: &[Vec], + ) -> Self { + assert!(d == 3 || d == 5 || d == 7 || d == 11); + assert_eq!(rounds_f % 2, 0); + let r = rounds_f / 2; + let rounds = rounds_f + rounds_p; + + Poseidon2Params { + t, + d, + rounds_f_beginning: r, + rounds_p, + rounds_f_end: r, + rounds, + mat_internal_diag_m_1: mat_internal_diag_m_1.to_owned(), + _mat_internal: mat_internal.to_owned(), + round_constants: round_constants.to_owned(), + } + } +} +#[derive(Clone, Debug)] +pub struct Poseidon2 { + pub(crate) params: Arc>, +} + +impl Poseidon2 { + pub fn new(params: &Arc>) -> Self { + Poseidon2 { + params: Arc::clone(params), + } + } + + pub fn get_t(&self) -> usize { + self.params.t + } + + pub fn permutation(&self, input: &[F]) -> Vec { + let t = self.params.t; + assert_eq!(input.len(), t); + + let mut current_state = input.to_owned(); + + // Linear layer at beginning + self.matmul_external(&mut current_state); + + for r in 0..self.params.rounds_f_beginning { + current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); + current_state = self.sbox(¤t_state); + self.matmul_external(&mut current_state); + } + + let p_end = self.params.rounds_f_beginning + self.params.rounds_p; + for r in self.params.rounds_f_beginning..p_end { + current_state[0].add_assign(self.params.round_constants[r][0]); + current_state[0] = self.sbox_p(¤t_state[0]); + self.matmul_internal(&mut current_state, &self.params.mat_internal_diag_m_1); + } + + for r in p_end..self.params.rounds { + current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); + current_state = self.sbox(¤t_state); + self.matmul_external(&mut current_state); + } + current_state + } + + fn sbox(&self, input: &[F]) -> Vec { + input.iter().map(|el| self.sbox_p(el)).collect() + } + + fn sbox_p(&self, input: &F) -> F { + let mut input2 = *input; + input2.mul_assign(input2); + + match self.params.d { + 3 => { + let mut out = input2; + out.mul_assign(*input); + out + } + 5 => { + let mut out = input2; + out.mul_assign(out); + out.mul_assign(*input); + out + } + 7 => { + let mut out = input2; + out.mul_assign(out); + out.mul_assign(input2); + out.mul_assign(*input); + out + } + _ => { + panic!() + } + } + } + + fn matmul_m4(&self, input: &mut[F]) { + let t = self.params.t; + let t4 = t / 4; + for i in 0..t4 { + let start_index = i * 4; + let mut t_0 = input[start_index]; + t_0.add_assign(input[start_index + 1]); + let mut t_1 = input[start_index + 2]; + t_1.add_assign(input[start_index + 3]); + let mut t_2 = input[start_index + 1]; + t_2.add_assign(t_2); + t_2.add_assign(t_1); + let mut t_3 = input[start_index + 3]; + t_3.add_assign(t_3); + t_3.add_assign(t_0); + let mut t_4 = t_1; + t_4.add_assign(t_4); + t_4.add_assign(t_4); + t_4.add_assign(t_3); + let mut t_5 = t_0; + t_5.add_assign(t_5); + t_5.add_assign(t_5); + t_5.add_assign(t_2); + let mut t_6 = t_3; + t_6.add_assign(t_5); + let mut t_7 = t_2; + t_7.add_assign(t_4); + input[start_index] = t_6; + input[start_index + 1] = t_5; + input[start_index + 2] = t_7; + input[start_index + 3] = t_4; + } + } + + fn matmul_external(&self, input: &mut[F]) { + let t = self.params.t; + match t { + 2 => { + // Matrix circ(2, 1) + let mut sum = input[0]; + sum.add_assign(input[1]); + input[0].add_assign(sum); + input[1].add_assign(sum); + } + 3 => { + // Matrix circ(2, 1, 1) + let mut sum = input[0]; + sum.add_assign(input[1]); + sum.add_assign(input[2]); + input[0].add_assign(sum); + input[1].add_assign(sum); + input[2].add_assign(sum); + } + 4 => { + // Applying cheap 4x4 MDS matrix to each 4-element part of the state + self.matmul_m4(input); + } + 8 | 12 | 16 | 20 | 24 => { + // Applying cheap 4x4 MDS matrix to each 4-element part of the state + self.matmul_m4(input); + + // Applying second cheap matrix for t > 4 + let t4 = t / 4; + let mut stored = [F::ZERO; 4]; + for l in 0..4 { + stored[l] = input[l]; + for j in 1..t4 { + stored[l].add_assign(input[4 * j + l]); + } + } + for i in 0..input.len() { + input[i].add_assign(stored[i % 4]); + } + } + _ => { + panic!() + } + } + } + + fn matmul_internal(&self, input: &mut[F], mat_internal_diag_m_1: &[F]) { + let t = self.params.t; + + match t { + 2 => { + // [2, 1] + // [1, 3] + let mut sum = input[0]; + sum.add_assign(input[1]); + input[0].add_assign(sum); + input[1].add_assign(input[1]); + input[1].add_assign(sum); + } + 3 => { + // [2, 1, 1] + // [1, 2, 1] + // [1, 1, 3] + let mut sum = input[0]; + sum.add_assign(input[1]); + sum.add_assign(input[2]); + input[0].add_assign(sum); + input[1].add_assign(sum); + input[2].add_assign(input[2]); + input[2].add_assign(sum); + } + 4 | 8 | 12 | 16 | 20 | 24 => { + // Compute input sum + let mut sum = input[0]; + input + .iter() + .skip(1) + .take(t-1) + .for_each(|el| sum.add_assign(*el)); + // Add sum + diag entry * element to each element + for i in 0..input.len() { + input[i].mul_assign(mat_internal_diag_m_1[i]); + input[i].add_assign(sum); + } + } + _ => { + panic!() + } + } + } + + fn add_rc(&self, input: &[F], rc: &[F]) -> Vec { + input + .iter() + .zip(rc.iter()) + .map(|(a, b)| { + let mut r = *a; + r.add_assign(*b); + r + }) + .collect() + } +} + + +//merkle tree +pub trait MerkleTreeHash { + fn compress(&self, input: &[&F]) -> Vec; +} + +#[derive(Clone, Debug)] +pub struct MerkleTree> { + perm: P, + field: PhantomData, +} + +impl> MerkleTree { + pub fn new(perm: P) -> Self { + MerkleTree { + perm, + field: PhantomData, + } + } + + fn round_up_pow_n(input: usize, n: usize) -> usize { + debug_assert!(n >= 1); + let mut res = 1; + // try powers, starting from n + loop { + res *= n; + if res >= input { + break; + } + } + res + } + + pub fn accumulate(&mut self, set: &[F]) -> Vec { + assert!(set.len()%8 == 0); + let set_size = set.len() / 8; + let mut bound = Self::round_up_pow_n(set_size, 2); + loop { + if bound >= 2 { + break; + } + bound *= 2; + } + let mut nodes: Vec = Vec::with_capacity(bound * 8); + for s in set { + nodes.push(s.to_owned()); + } + // pad + for _ in nodes.len()..bound { + nodes.push(nodes[set_size * 8 - 1].to_owned()); + } + + while nodes.len() > 8 { + let new_len = nodes.len() / 2; + let mut new_nodes: Vec = Vec::with_capacity(new_len); + for i in (0..nodes.len()).step_by(16) { + let inp = [ + &nodes[i], &nodes[i + 1], &nodes[i + 2], &nodes[i + 3], &nodes[i + 4], &nodes[i + 5], &nodes[i + 6], &nodes[i + 7], + &nodes[i + 8], &nodes[i + 9], &nodes[i + 10], &nodes[i + 11], &nodes[i + 12], &nodes[i + 13], &nodes[i + 14], &nodes[i + 15] + ]; + let dig = self.perm.compress(&inp); + + for j in 0..8 { + new_nodes.push(dig[j]); + } + + } + nodes = new_nodes; + } + vec![nodes[0].to_owned(), nodes[1].to_owned(), nodes[2].to_owned(), nodes[3].to_owned(), nodes[4].to_owned(), nodes[5].to_owned(), nodes[6].to_owned(), nodes[7].to_owned()] + } +} + +impl MerkleTreeHash for Poseidon2 { + fn compress(&self, input: &[&F]) -> Vec { + let p = self.permutation(&[ + input[0].to_owned(), input[1].to_owned(),input[2].to_owned(), input[3].to_owned(),input[4].to_owned(), input[5].to_owned(),input[6].to_owned(), input[7].to_owned(), + input[8].to_owned(), input[9].to_owned(),input[10].to_owned(), input[11].to_owned(),input[12].to_owned(), input[13].to_owned(),input[14].to_owned(), input[15].to_owned(), + F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO + ]); + + vec![p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]] + } +} + +//--------------------- +lazy_static!{ +pub static ref MAT_DIAG24_M_1: Vec = vec![ + BabyBearElem::from(0x409133f0 as u32), + BabyBearElem::from(0x1667a8a1 as u32), + BabyBearElem::from(0x06a6c7b6 as u32), + BabyBearElem::from(0x6f53160e as u32), + BabyBearElem::from(0x273b11d1 as u32), + BabyBearElem::from(0x03176c5d as u32), + BabyBearElem::from(0x72f9bbf9 as u32), + BabyBearElem::from(0x73ceba91 as u32), + BabyBearElem::from(0x5cdef81d as u32), + BabyBearElem::from(0x01393285 as u32), + BabyBearElem::from(0x46daee06 as u32), + BabyBearElem::from(0x065d7ba6 as u32), + BabyBearElem::from(0x52d72d6f as u32), + BabyBearElem::from(0x05dd05e0 as u32), + BabyBearElem::from(0x3bab4b63 as u32), + BabyBearElem::from(0x6ada3842 as u32), + BabyBearElem::from(0x2fc5fbec as u32), + BabyBearElem::from(0x770d61b0 as u32), + BabyBearElem::from(0x5715aae9 as u32), + BabyBearElem::from(0x03ef0e90 as u32), + BabyBearElem::from(0x75b6c770 as u32), + BabyBearElem::from(0x242adf5f as u32), + BabyBearElem::from(0x00d0ca4c as u32), + BabyBearElem::from(0x36c0e388 as u32), + ]; + + pub static ref MAT_INTERNAL24: Vec> = vec![ + vec![BabyBearElem::from(0x409133f1 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x1667a8a2 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x06a6c7b7 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x6f53160f as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x273b11d2 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x03176c5e as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x72f9bbfa as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x73ceba92 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x5cdef81e as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x01393286 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x46daee07 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x065d7ba7 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x52d72d70 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x05dd05e1 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x3bab4b64 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x6ada3843 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x2fc5fbed as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x770d61b1 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x5715aaea as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x03ef0e91 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x75b6c771 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x242adf60 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00d0ca4d as u32), + BabyBearElem::from(0x00000001 as u32), + ], + vec![BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x00000001 as u32), + BabyBearElem::from(0x36c0e389 as u32), + ], + ]; + + pub static ref RC24: Vec> = vec![ + vec![BabyBearElem::from(0x0fa20c37 as u32), + BabyBearElem::from(0x0795bb97 as u32), + BabyBearElem::from(0x12c60b9c as u32), + BabyBearElem::from(0x0eabd88e as u32), + BabyBearElem::from(0x096485ca as u32), + BabyBearElem::from(0x07093527 as u32), + BabyBearElem::from(0x1b1d4e50 as u32), + BabyBearElem::from(0x30a01ace as u32), + BabyBearElem::from(0x3bd86f5a as u32), + BabyBearElem::from(0x69af7c28 as u32), + BabyBearElem::from(0x3f94775f as u32), + BabyBearElem::from(0x731560e8 as u32), + BabyBearElem::from(0x465a0ecd as u32), + BabyBearElem::from(0x574ef807 as u32), + BabyBearElem::from(0x62fd4870 as u32), + BabyBearElem::from(0x52ccfe44 as u32), + BabyBearElem::from(0x14772b14 as u32), + BabyBearElem::from(0x4dedf371 as u32), + BabyBearElem::from(0x260acd7c as u32), + BabyBearElem::from(0x1f51dc58 as u32), + BabyBearElem::from(0x75125532 as u32), + BabyBearElem::from(0x686a4d7b as u32), + BabyBearElem::from(0x54bac179 as u32), + BabyBearElem::from(0x31947706 as u32), + ], + vec![BabyBearElem::from(0x29799d3b as u32), + BabyBearElem::from(0x6e01ae90 as u32), + BabyBearElem::from(0x203a7a64 as u32), + BabyBearElem::from(0x4f7e25be as u32), + BabyBearElem::from(0x72503f77 as u32), + BabyBearElem::from(0x45bd3b69 as u32), + BabyBearElem::from(0x769bd6b4 as u32), + BabyBearElem::from(0x5a867f08 as u32), + BabyBearElem::from(0x4fdba082 as u32), + BabyBearElem::from(0x251c4318 as u32), + BabyBearElem::from(0x28f06201 as u32), + BabyBearElem::from(0x6788c43a as u32), + BabyBearElem::from(0x4c6d6a99 as u32), + BabyBearElem::from(0x357784a8 as u32), + BabyBearElem::from(0x2abaf051 as u32), + BabyBearElem::from(0x770f7de6 as u32), + BabyBearElem::from(0x1794b784 as u32), + BabyBearElem::from(0x4796c57a as u32), + BabyBearElem::from(0x724b7a10 as u32), + BabyBearElem::from(0x449989a7 as u32), + BabyBearElem::from(0x64935cf1 as u32), + BabyBearElem::from(0x59e14aac as u32), + BabyBearElem::from(0x0e620bb8 as u32), + BabyBearElem::from(0x3af5a33b as u32), + ], + vec![BabyBearElem::from(0x4465cc0e as u32), + BabyBearElem::from(0x019df68f as u32), + BabyBearElem::from(0x4af8d068 as u32), + BabyBearElem::from(0x08784f82 as u32), + BabyBearElem::from(0x0cefdeae as u32), + BabyBearElem::from(0x6337a467 as u32), + BabyBearElem::from(0x32fa7a16 as u32), + BabyBearElem::from(0x486f62d6 as u32), + BabyBearElem::from(0x386a7480 as u32), + BabyBearElem::from(0x20f17c4a as u32), + BabyBearElem::from(0x54e50da8 as u32), + BabyBearElem::from(0x2012cf03 as u32), + BabyBearElem::from(0x5fe52950 as u32), + BabyBearElem::from(0x09afb6cd as u32), + BabyBearElem::from(0x2523044e as u32), + BabyBearElem::from(0x5c54d0ef as u32), + BabyBearElem::from(0x71c01f3c as u32), + BabyBearElem::from(0x60b2c4fb as u32), + BabyBearElem::from(0x4050b379 as u32), + BabyBearElem::from(0x5e6a70a5 as u32), + BabyBearElem::from(0x418543f5 as u32), + BabyBearElem::from(0x71debe56 as u32), + BabyBearElem::from(0x1aad2994 as u32), + BabyBearElem::from(0x3368a483 as u32), + ], + vec![BabyBearElem::from(0x07a86f3a as u32), + BabyBearElem::from(0x5ea43ff1 as u32), + BabyBearElem::from(0x2443780e as u32), + BabyBearElem::from(0x4ce444f7 as u32), + BabyBearElem::from(0x146f9882 as u32), + BabyBearElem::from(0x3132b089 as u32), + BabyBearElem::from(0x197ea856 as u32), + BabyBearElem::from(0x667030c3 as u32), + BabyBearElem::from(0x2317d5dc as u32), + BabyBearElem::from(0x0c2c48a7 as u32), + BabyBearElem::from(0x56b2df66 as u32), + BabyBearElem::from(0x67bd81e9 as u32), + BabyBearElem::from(0x4fcdfb19 as u32), + BabyBearElem::from(0x4baaef32 as u32), + BabyBearElem::from(0x0328d30a as u32), + BabyBearElem::from(0x6235760d as u32), + BabyBearElem::from(0x12432912 as u32), + BabyBearElem::from(0x0a49e258 as u32), + BabyBearElem::from(0x030e1b70 as u32), + BabyBearElem::from(0x48caeb03 as u32), + BabyBearElem::from(0x49e4d9e9 as u32), + BabyBearElem::from(0x1051b5c6 as u32), + BabyBearElem::from(0x6a36dbbe as u32), + BabyBearElem::from(0x4cff27a5 as u32), + ], + vec![BabyBearElem::from(0x1da78ec2 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x730b0924 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x3eb56cf3 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x5bd93073 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x37204c97 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x51642d89 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x66e943e8 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x1a3e72de as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x70beb1e9 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x30ff3b3f as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x4240d1c4 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x12647b8d as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x65d86965 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x49ef4d7c as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x47785697 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x46b3969f as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x5c7b7a0e as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x7078fc60 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x4f22d482 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x482a9aee as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x6beb839d as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + BabyBearElem::from(0x00000000 as u32), + ], + vec![BabyBearElem::from(0x032959ad as u32), + BabyBearElem::from(0x2b18af6a as u32), + BabyBearElem::from(0x55d3dc8c as u32), + BabyBearElem::from(0x43bd26c8 as u32), + BabyBearElem::from(0x0c41595f as u32), + BabyBearElem::from(0x7048d2e2 as u32), + BabyBearElem::from(0x00db8983 as u32), + BabyBearElem::from(0x2af563d7 as u32), + BabyBearElem::from(0x6e84758f as u32), + BabyBearElem::from(0x611d64e1 as u32), + BabyBearElem::from(0x1f9977e2 as u32), + BabyBearElem::from(0x64163a0a as u32), + BabyBearElem::from(0x5c5fc27b as u32), + BabyBearElem::from(0x02e22561 as u32), + BabyBearElem::from(0x3a2d75db as u32), + BabyBearElem::from(0x1ba7b71a as u32), + BabyBearElem::from(0x34343f64 as u32), + BabyBearElem::from(0x7406b35d as u32), + BabyBearElem::from(0x19df8299 as u32), + BabyBearElem::from(0x6ff4480a as u32), + BabyBearElem::from(0x514a81c8 as u32), + BabyBearElem::from(0x57ab52ce as u32), + BabyBearElem::from(0x6ad69f52 as u32), + BabyBearElem::from(0x3e0c0e0d as u32), + ], + vec![BabyBearElem::from(0x48126114 as u32), + BabyBearElem::from(0x2a9d62cc as u32), + BabyBearElem::from(0x17441f23 as u32), + BabyBearElem::from(0x485762bb as u32), + BabyBearElem::from(0x2f218674 as u32), + BabyBearElem::from(0x06fdc64a as u32), + BabyBearElem::from(0x0861b7f2 as u32), + BabyBearElem::from(0x3b36eee6 as u32), + BabyBearElem::from(0x70a11040 as u32), + BabyBearElem::from(0x04b31737 as u32), + BabyBearElem::from(0x3722a872 as u32), + BabyBearElem::from(0x2a351c63 as u32), + BabyBearElem::from(0x623560dc as u32), + BabyBearElem::from(0x62584ab2 as u32), + BabyBearElem::from(0x382c7c04 as u32), + BabyBearElem::from(0x3bf9edc7 as u32), + BabyBearElem::from(0x0e38fe51 as u32), + BabyBearElem::from(0x376f3b10 as u32), + BabyBearElem::from(0x5381e178 as u32), + BabyBearElem::from(0x3afc61c7 as u32), + BabyBearElem::from(0x5c1bcb4d as u32), + BabyBearElem::from(0x6643ce1f as u32), + BabyBearElem::from(0x2d0af1c1 as u32), + BabyBearElem::from(0x08f583cc as u32), + ], + vec![BabyBearElem::from(0x5d6ff60f as u32), + BabyBearElem::from(0x6324c1e5 as u32), + BabyBearElem::from(0x74412fb7 as u32), + BabyBearElem::from(0x70c0192e as u32), + BabyBearElem::from(0x0b72f141 as u32), + BabyBearElem::from(0x4067a111 as u32), + BabyBearElem::from(0x57388c4f as u32), + BabyBearElem::from(0x351009ec as u32), + BabyBearElem::from(0x0974c159 as u32), + BabyBearElem::from(0x539a58b3 as u32), + BabyBearElem::from(0x038c0cff as u32), + BabyBearElem::from(0x476c0392 as u32), + BabyBearElem::from(0x3f7bc15f as u32), + BabyBearElem::from(0x4491dd2c as u32), + BabyBearElem::from(0x4d1fef55 as u32), + BabyBearElem::from(0x04936ae3 as u32), + BabyBearElem::from(0x58214dd4 as u32), + BabyBearElem::from(0x683c6aad as u32), + BabyBearElem::from(0x1b42f16b as u32), + BabyBearElem::from(0x6dc79135 as u32), + BabyBearElem::from(0x2d4e71ec as u32), + BabyBearElem::from(0x3e2946ea as u32), + BabyBearElem::from(0x59dce8db as u32), + BabyBearElem::from(0x6cee892a as u32), + ], + vec![BabyBearElem::from(0x47f07350 as u32), + BabyBearElem::from(0x7106ce93 as u32), + BabyBearElem::from(0x3bd4a7a9 as u32), + BabyBearElem::from(0x2bfe636a as u32), + BabyBearElem::from(0x430011e9 as u32), + BabyBearElem::from(0x001cd66a as u32), + BabyBearElem::from(0x307faf5b as u32), + BabyBearElem::from(0x0d9ef3fe as u32), + BabyBearElem::from(0x6d40043a as u32), + BabyBearElem::from(0x2e8f470c as u32), + BabyBearElem::from(0x1b6865e8 as u32), + BabyBearElem::from(0x0c0e6c01 as u32), + BabyBearElem::from(0x4d41981f as u32), + BabyBearElem::from(0x423b9d3d as u32), + BabyBearElem::from(0x410408cc as u32), + BabyBearElem::from(0x263f0884 as u32), + BabyBearElem::from(0x5311bbd0 as u32), + BabyBearElem::from(0x4dae58d8 as u32), + BabyBearElem::from(0x30401cea as u32), + BabyBearElem::from(0x09afa575 as u32), + BabyBearElem::from(0x4b3d5b42 as u32), + BabyBearElem::from(0x63ac0b37 as u32), + BabyBearElem::from(0x5fe5bb14 as u32), + BabyBearElem::from(0x5244e9d4 as u32), + ], + ]; + + pub static ref POSEIDON2_BABYBEAR_24_PARAMS: Arc> = Arc::new(Poseidon2Params::new(24, 7, 8, 21, &MAT_DIAG24_M_1, &MAT_INTERNAL24, &RC24)); + +} + +risc0_zkvm::guest::entry!(main); + +pub fn main() { + + let data: Vec = env::read(); + + let cycles1 = env::get_cycle_count(); + let mut hash_data: Vec = Vec::new(); + for i in 0..data.len() { + let a_uncompressed = BabyBearElem::from(*data.get(i).unwrap()); + hash_data.push(a_uncompressed); + } + let cycles2 = env::get_cycle_count(); + + + let permutation = Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); + let mut merkle_tree = MerkleTree::new(permutation.clone()); + let cycles3 = env::get_cycle_count(); + let hash_final = merkle_tree.accumulate(&hash_data); + + let cycles4 = env::get_cycle_count(); + + let mut perm_seralised: Vec = Vec::new(); + for i in 0..8 { + let temp: u32 = hash_final.get(i).unwrap().into(); + perm_seralised.push(temp); + + } + let cycles6 = env::get_cycle_count(); + + env::commit(&perm_seralised); + + eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); + eprintln!("number of cycles for hash permutation builder: {:?}", cycles3 - cycles2); + eprintln!("number of cycles for hash accumulation: {:?}", cycles4 - cycles3); + + eprintln!("number of cycles for permutation seralisation: {:?}", cycles6 - cycles4); + +} diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index 3a91834..b3e6f11 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -28,7 +28,7 @@ echo "Input Size (KB) = $ZKBENCH_INPUT_SIZE_KB" # Run the benchmarks using cargo run # Check if the environment variable is set to "poseidon2_bn128" -if [[ "$ZKBENCH_HASH_TYPE" == "poseidon2_bn128" || "$ZKBENCH_HASH_TYPE" == "poseidon2_babybear" ]]; then +if [[ "$ZKBENCH_HASH_TYPE" == "poseidon2_bn128" || "$ZKBENCH_HASH_TYPE" == "poseidon2_babybear" || "$ZKBENCH_HASH_TYPE" == "poseidon2_babybear_native" ]]; then # echo "Running Poseidon2 benchmark over bn128 field" CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_TREE_DEPTH else diff --git a/hash/risc0/bench/src/benches/mod.rs b/hash/risc0/bench/src/benches/mod.rs index d3382cf..c5bbdea 100644 --- a/hash/risc0/bench/src/benches/mod.rs +++ b/hash/risc0/bench/src/benches/mod.rs @@ -3,4 +3,5 @@ pub mod keccak; pub mod blake2b; pub mod blake3; pub mod poseidon2_bn128; -pub mod poseidon2_babybear; \ No newline at end of file +pub mod poseidon2_babybear; +pub mod poseidon2_babybear_native; \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs index d2ede50..73cf58b 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear.rs @@ -51,8 +51,7 @@ pub fn poseidon2_babybear_bench(mt_depth: usize) { output_deseralised.push(Scalar::deserialize_uncompressed(&**output.get(i).unwrap()).unwrap()); } - eprintln!("size: {:?}", output_deseralised); - // let hash_final = FpBabyBear::deserialize_uncompressed(&*output).unwrap(); + eprintln!("hash: {:?}", output_deseralised); // verify your receipt receipt.verify(POSEIDON2_BABYBEAR_ID).unwrap(); diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs new file mode 100644 index 0000000..d1c7a61 --- /dev/null +++ b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs @@ -0,0 +1,56 @@ +#![allow(non_snake_case)] +use methods::{ + POSEIDON2_BABYBEAR_NATIVE_ELF, + POSEIDON2_BABYBEAR_NATIVE_ID +}; +use risc0_zkvm::{ + default_prover, + ExecutorEnv +}; +use std::time::Instant; +// use risc0_core::field::baby_bear::BabyBearElem; +use rand::Rng; + +pub fn poseidon2_babybear_native_bench(mt_depth: usize) { + + let t = (1 << mt_depth) * 8; + let mut input: Vec = Vec::new(); + + for _ in 0..t { + + let mut rng = rand::thread_rng(); + let random_u32: u32 = rng.gen(); + input.push(random_u32); + } + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + let start_time = Instant::now(); + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove_elf(env, POSEIDON2_BABYBEAR_NATIVE_ELF).unwrap(); + let elapsed_time = start_time.elapsed(); + + // For example: + let output: Vec = receipt.journal.decode().unwrap(); + + // let mut output_deseralised: Vec = Vec::new(); + + // for i in 0..output.len() { + // output_deseralised.push(Scalar::deserialize_uncompressed(&**output.get(i).unwrap()).unwrap()); + // } + + eprintln!("hash: {:?}", output); + // let hash_final = FpBabyBear::deserialize_uncompressed(&*output).unwrap(); + + // verify your receipt + receipt.verify(POSEIDON2_BABYBEAR_NATIVE_ID).unwrap(); + + + eprintln!("Total time: {:?}", elapsed_time); + // eprintln!("Hash: {:?}", hash_final); + + +} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_bn128.rs b/hash/risc0/bench/src/benches/poseidon2_bn128.rs index db28ed6..9583eec 100644 --- a/hash/risc0/bench/src/benches/poseidon2_bn128.rs +++ b/hash/risc0/bench/src/benches/poseidon2_bn128.rs @@ -3,12 +3,7 @@ use methods::{ }; use risc0_zkvm::{default_prover, ExecutorEnv}; use zkhash::{fields::{bn256::FpBN256, utils::random_scalar}/* , poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS*/}; -// use zkhash::poseidon2::poseidon2::Poseidon2; -// use std::convert::TryFrom; use std::time::Instant; -// use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; -// use std::convert::TryInto; -// use hex::encode_to_slice; use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; @@ -47,51 +42,4 @@ pub fn poseidon2_bn128_bench(mt_depth: usize) { eprintln!("Total time: {:?}", elapsed_time); eprintln!("Hash: {:?}", hash_final); - - - - - // let input2:[Scalar;16] = [Scalar::from(1), Scalar::from(2), Scalar::from(3), Scalar::from(4),Scalar::from(5), Scalar::from(6), Scalar::from(7), Scalar::from(8),Scalar::from(9), Scalar::from(10), Scalar::from(11), Scalar::from(12), Scalar::from(13), Scalar::from(14), Scalar::from(15), Scalar::from(16)]; - // let hash = merkle_tree.accumulate(&input2); - - // let hash_string = hash.0.to_string(); - // // eprintln!("merkle hash: {:?}",hex::encode(hash_string)); - // eprintln!("merkle hash: {:?}", hash_string); - - // let x = hash.0.0; - // eprintln!("from: {:x}{:x}{:x}{:x}", x[0],x[1], x[2], x[3]); - // eprintln!("scalar: {:?}", Scalar::from(4)); - - // let a = Scalar::from(4); - // let mut uncompressed_bytes = Vec::new(); - // a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); - // eprintln!("compress: {:?}", uncompressed_bytes); - - // let a_uncompressed = Scalar::deserialize_uncompressed(&*uncompressed_bytes).unwrap(); - // eprintln!("uncompress: {:?}", a_uncompressed); - - // let t = poseidon2.get_t(); - // let input1: Vec = (0..t).map(|_| random_scalar()).collect(); - // let perm = poseidon2.permutation(&input1); - // eprintln!("output: {:?}", perm); - - // let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - // let prover = default_prover(); - - // let start_time = Instant::now(); - // // Produce a receipt by proving the specified ELF binary. - // let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); - // let elapsed_time = start_time.elapsed(); - - // // For example: - // let _output: sha::Digest = receipt.journal.decode().unwrap(); - - // // verify your receipt - // receipt.verify(POSEIDON2_BN128_ID).unwrap(); - - - // eprintln!("Total time: {:?}", elapsed_time); - // eprintln!("Hash: {:?}", _output); } \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index 25bfce0..801e862 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -6,6 +6,7 @@ use benches::{ blake3::blake3_bench, poseidon2_bn128::poseidon2_bn128_bench, poseidon2_babybear::poseidon2_babybear_bench, + poseidon2_babybear_native::poseidon2_babybear_native_bench, }; use rand::Rng; @@ -63,6 +64,13 @@ fn main() { poseidon2_babybear_bench(size_kb); } + "poseidon2_babybear_native" => { + println!("Poseidon2 Benchmarking on the BabyBear field: "); + eprintln!("Tree Depth: {:?}", size_kb); + eprintln!("number of inputs {:?}", (1 << size_kb) * 8); + poseidon2_babybear_native_bench(size_kb); + } + _ => { println!("Wrong Benchmark Name!"); } From 8e0eaa92fb944fb35c311cf5c4ebf45db9bbedf1 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 8 Jan 2024 22:53:37 +0530 Subject: [PATCH 12/31] different .cfg & .sh file for merkle hashing and linear hashing, check for enough argument added and running from executable build from cargo build --- hash/risc0/bench/README.md | 103 ++---------------- hash/risc0/bench/bench.cfg | 11 +- hash/risc0/bench/bench_tree.cfg | 11 ++ hash/risc0/bench/build.sh | 6 +- .../bench/methods/guest/src/bin/sha256.rs | 14 --- hash/risc0/bench/run.sh | 32 +----- hash/risc0/bench/run_tree.sh | 15 +++ .../bench/src/benches/poseidon2_babybear.rs | 12 +- .../src/benches/poseidon2_babybear_native.rs | 23 ++-- .../bench/src/benches/poseidon2_bn128.rs | 13 ++- hash/risc0/bench/src/benches/sha256.rs | 34 +++--- hash/risc0/bench/src/main.rs | 41 ++++--- 12 files changed, 113 insertions(+), 202 deletions(-) create mode 100644 hash/risc0/bench/bench_tree.cfg create mode 100755 hash/risc0/bench/run_tree.sh diff --git a/hash/risc0/bench/README.md b/hash/risc0/bench/README.md index f1d1022..936cb1a 100644 --- a/hash/risc0/bench/README.md +++ b/hash/risc0/bench/README.md @@ -1,101 +1,12 @@ -# RISC Zero Rust Starter Template +Benchmarking different hashes inside risc'0 zkvm +----------------------------------------------- -Welcome to the RISC Zero Rust Starter Template! This template is intended to -give you a starting point for building a project using the RISC Zero zkVM. -Throughout the template (including in this README), you'll find comments -labelled `TODO` in places where you'll need to make changes. To better -understand the concepts behind this template, check out the [zkVM -Overview][zkvm-overview]. +The benchmark is defined by the following shell scripts: -## Quick Start +- `build.sh` - build the code. you can set the number of threads by setting the environment variable `CARGO_BUILD_JOBS` otherwise the code will build using default number of threads. -First, make sure [rustup] is installed. The -[`rust-toolchain.toml`][rust-toolchain] file will be used by `cargo` to -automatically install the correct version. +- `run.sh` and `run2.sh` - run the benchmark itself (`run.sh` for sha256, keccak, blake2b, blake3 and `run2.sh` for poseidon2 over bn128 and babybear) -To build all methods and execute the method within the zkVM, run the following -command: +Benchmarks can be parameterized using environment variables. By convention, we start the names of these environment variables with the `ZKBENCH_` prefix. -```bash -cargo run -``` - -This is an empty template, and so there is no expected output (until you modify -the code). - -### Running proofs remotely on Bonsai - -_Note: The Bonsai proving service is still in early Alpha; an API key is -required for access. [Click here to request access][bonsai access]._ - -If you have access to the URL and API key to Bonsai you can run your proofs -remotely. To prove in Bonsai mode, invoke `cargo run` with two additional -environment variables: - -```bash -BONSAI_API_KEY="YOUR_API_KEY" BONSAI_API_URL="BONSAI_URL" cargo run -``` - -## How to create a project based on this template - -Search this template for the string `TODO`, and make the necessary changes to -implement the required feature described by the `TODO` comment. Some of these -changes will be complex, and so we have a number of instructional resources to -assist you in learning how to write your own code for the RISC Zero zkVM: - -- The [RISC Zero Developer Docs][dev-docs] is a great place to get started. -- Example projects are available in the [examples folder][examples] of - [`risc0`][risc0-repo] repository. -- Reference documentation is available at [https://docs.rs][docs.rs], including - [`risc0-zkvm`][risc0-zkvm], [`cargo-risczero`][cargo-risczero], - [`risc0-build`][risc0-build], and [others][crates]. - -## Directory Structure - -It is possible to organize the files for these components in various ways. -However, in this starter template we use a standard directory structure for zkVM -applications, which we think is a good starting point for your applications. - -```text -project_name -├── Cargo.toml -├── host -│ ├── Cargo.toml -│ └── src -│ └── main.rs <-- [Host code goes here] -└── methods - ├── Cargo.toml - ├── build.rs - ├── guest - │ ├── Cargo.toml - │ └── src - │ └── bin - │ └── method_name.rs <-- [Guest code goes here] - └── src - └── lib.rs -``` - -## Video Tutorial - -For a walk-through of how to build with this template, check out this [excerpt -from our workshop at ZK HACK III][zkhack-iii]. - -## Questions, Feedback, and Collaborations - -We'd love to hear from you on [Discord][discord] or [Twitter][twitter]. - -[bonsai access]: https://bonsai.xyz/apply -[cargo-risczero]: https://docs.rs/cargo-risczero -[crates]: https://github.com/risc0/risc0/blob/main/README.md#rust-binaries -[dev-docs]: https://dev.risczero.com -[discord]: https://discord.gg/risczero -[docs.rs]: https://docs.rs/releases/search?query=risc0 -[examples]: https://github.com/risc0/risc0/tree/main/examples -[risc0-build]: https://docs.rs/risc0-build -[risc0-repo]: https://www.github.com/risc0/risc0 -[risc0-zkvm]: https://docs.rs/risc0-zkvm -[rustup]: https://rustup.rs -[rust-toolchain]: rust-toolchain.toml -[twitter]: https://twitter.com/risczero -[zkvm-overview]: https://dev.risczero.com/zkvm -[zkhack-iii]: https://www.youtube.com/watch?v=Yg_BGqj_6lg&list=PLcPzhUaCxlCgig7ofeARMPwQ8vbuD6hC5&index=5 +Additional files `bench.cfg` and `bench_tree.cfg` specifies the configurations and parameters. diff --git a/hash/risc0/bench/bench.cfg b/hash/risc0/bench/bench.cfg index 5e47ea2..a5a366f 100644 --- a/hash/risc0/bench/bench.cfg +++ b/hash/risc0/bench/bench.cfg @@ -1,12 +1,11 @@ name: "Hashes benchmarking using risc0 prover" author: -timeout: 100 +timeout: 200 params: - [ PROVER: [ risc0 ] - , INPUT_SIZE: [ 256, 512, 1024, 2048 ] - , WHICH: [ LINEAR ] + [ HASH_TYPE: [ "sha256", "keccak", "blake2b", "blake3"] + , INPUT_SIZE_BYTES: [ 256, 512, 1024, 2048 ] ] -tags: CPU, SHA256, KECCAK, BLAKE2B, BLAKE3, POSEIDON2, BN128, BABYBEAR +tags: risc0, $HASH_TYPE comments: - The benchmarks includes for sha256, keccak, blake2b, blake3 & poseidon2(merkle hashing). + The benchmarks includes for sha256, keccak, blake2b, blake3. the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/bench_tree.cfg b/hash/risc0/bench/bench_tree.cfg new file mode 100644 index 0000000..529f0fb --- /dev/null +++ b/hash/risc0/bench/bench_tree.cfg @@ -0,0 +1,11 @@ +name: "Hashes benchmarking using risc0 prover" +author: +timeout: 1000 +params: + [ HASH_TYPE: [ "poseidon2_babybear", "poseidon2_babybear_native", "poseidon2_bn128"] + , TREE_DEPTH: [ 2, 4, 8, 16 ] + ] +tags: risc0, $HASH_TYPE +comments: + The benchmarks includes for poseidon2(merkle hashing) over bn128 and babybear. + the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/build.sh b/hash/risc0/bench/build.sh index 26156ef..d1cf927 100755 --- a/hash/risc0/bench/build.sh +++ b/hash/risc0/bench/build.sh @@ -1,3 +1,7 @@ #!/bin/bash -cargo build --release +if [ -z ${ZKBENCH_NTHREADS} ]; then +ZKBENCH_NTHREADS="default" # https://doc.rust-lang.org/cargo/reference/config.html#buildjobs +fi + +CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo build --release diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256.rs b/hash/risc0/bench/methods/guest/src/bin/sha256.rs index d67a766..d13074c 100644 --- a/hash/risc0/bench/methods/guest/src/bin/sha256.rs +++ b/hash/risc0/bench/methods/guest/src/bin/sha256.rs @@ -11,17 +11,3 @@ pub fn main() { env::commit(&hash) } -// accelerated sha2 crate -// #![no_main] - -// use risc0_zkvm::{guest::env}; -// use sha2::{Sha256, Digest}; -// // use base16ct::lower::encode_str; -// risc0_zkvm::guest::entry!(main); - -// pub fn main() { - -// let data: Vec = env::read(); -// let result: [u8;32] = Sha256::digest(data).into(); -// env::commit(&result) -// } diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh index b3e6f11..79b7df8 100755 --- a/hash/risc0/bench/run.sh +++ b/hash/risc0/bench/run.sh @@ -3,35 +3,13 @@ if [ -z ${ZKBENCH_HASH_TYPE} ]; then ZKBENCH_HASH_TYPE="sha256" fi -if [ -z ${ZKBENCH_WHICH} ]; then -ZKBENCH_WHICH="LINEAR" +if [ -z ${ZKBENCH_INPUT_SIZE_BYTES} ]; then +ZKBENCH_INPUT_SIZE_BYTES=1024 fi -if [ -z ${ZKBENCH_NTHREADS} ]; then -ZKBENCH_NTHREADS=1 -fi - -if [ -z ${ZKBENCH_INPUT_SIZE_KB} ]; then -ZKBENCH_INPUT_SIZE_KB=1024 -fi - -if [ -z ${ZKBENCH_TREE_DEPTH} ]; then -ZKBENCH_TREE_DEPTH=4 -fi - - echo "Running benchmarks with the following configurations:" echo "HASH = $ZKBENCH_HASH_TYPE" -# echo "WHICH = $ZKBENCH_WHICH" -echo "NTHREADS = $ZKBENCH_NTHREADS" -echo "Input Size (KB) = $ZKBENCH_INPUT_SIZE_KB" +echo "Input Size (Bytes) = $ZKBENCH_INPUT_SIZE_BYTES" -# Run the benchmarks using cargo run -# Check if the environment variable is set to "poseidon2_bn128" -if [[ "$ZKBENCH_HASH_TYPE" == "poseidon2_bn128" || "$ZKBENCH_HASH_TYPE" == "poseidon2_babybear" || "$ZKBENCH_HASH_TYPE" == "poseidon2_babybear_native" ]]; then - # echo "Running Poseidon2 benchmark over bn128 field" - CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_TREE_DEPTH -else - CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo run $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_KB - -fi \ No newline at end of file +# Run the benchmarks +./target/release/benchmark $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_BYTES \ No newline at end of file diff --git a/hash/risc0/bench/run_tree.sh b/hash/risc0/bench/run_tree.sh new file mode 100755 index 0000000..cdd865e --- /dev/null +++ b/hash/risc0/bench/run_tree.sh @@ -0,0 +1,15 @@ +#!/bin/bash +if [ -z ${ZKBENCH_HASH_TYPE} ]; then +ZKBENCH_HASH_TYPE="poseidon2_babybear_native" +fi + +if [ -z ${ZKBENCH_TREE_DEPTH} ]; then +ZKBENCH_TREE_DEPTH=2 +fi + +echo "Running benchmarks with the following configurations:" +echo "HASH = $ZKBENCH_HASH_TYPE" +echo "Tree Depth = $ZKBENCH_TREE_DEPTH" + +# Run the benchmarks +./target/release/benchmark $ZKBENCH_HASH_TYPE $ZKBENCH_TREE_DEPTH \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs index 73cf58b..b3ae1f1 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear.rs @@ -42,6 +42,11 @@ pub fn poseidon2_babybear_bench(mt_depth: usize) { let receipt = prover.prove_elf(env, POSEIDON2_BABYBEAR_ELF).unwrap(); let elapsed_time = start_time.elapsed(); + // verify your receipt + receipt.verify(POSEIDON2_BABYBEAR_ID).unwrap(); + + let elapsed_time2 = start_time.elapsed(); + // For example: let output: Vec> = receipt.journal.decode().unwrap(); @@ -52,12 +57,9 @@ pub fn poseidon2_babybear_bench(mt_depth: usize) { } eprintln!("hash: {:?}", output_deseralised); + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - // verify your receipt - receipt.verify(POSEIDON2_BABYBEAR_ID).unwrap(); - - - eprintln!("Total time: {:?}", elapsed_time); // eprintln!("Hash: {:?}", hash_final); diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs index d1c7a61..9b92da3 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs @@ -8,7 +8,6 @@ use risc0_zkvm::{ ExecutorEnv }; use std::time::Instant; -// use risc0_core::field::baby_bear::BabyBearElem; use rand::Rng; pub fn poseidon2_babybear_native_bench(mt_depth: usize) { @@ -33,24 +32,16 @@ pub fn poseidon2_babybear_native_bench(mt_depth: usize) { let receipt = prover.prove_elf(env, POSEIDON2_BABYBEAR_NATIVE_ELF).unwrap(); let elapsed_time = start_time.elapsed(); - // For example: - let output: Vec = receipt.journal.decode().unwrap(); - - // let mut output_deseralised: Vec = Vec::new(); - - // for i in 0..output.len() { - // output_deseralised.push(Scalar::deserialize_uncompressed(&**output.get(i).unwrap()).unwrap()); - // } - - eprintln!("hash: {:?}", output); - // let hash_final = FpBabyBear::deserialize_uncompressed(&*output).unwrap(); - // verify your receipt receipt.verify(POSEIDON2_BABYBEAR_NATIVE_ID).unwrap(); - - eprintln!("Total time: {:?}", elapsed_time); - // eprintln!("Hash: {:?}", hash_final); + let elapsed_time2 = start_time.elapsed(); + let output: Vec = receipt.journal.decode().unwrap(); + + eprintln!("hash: {:?}", output); + + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); } \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_bn128.rs b/hash/risc0/bench/src/benches/poseidon2_bn128.rs index 9583eec..8bb4b25 100644 --- a/hash/risc0/bench/src/benches/poseidon2_bn128.rs +++ b/hash/risc0/bench/src/benches/poseidon2_bn128.rs @@ -30,16 +30,19 @@ pub fn poseidon2_bn128_bench(mt_depth: usize) { let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); let elapsed_time = start_time.elapsed(); + + // verify your receipt + receipt.verify(POSEIDON2_BN128_ID).unwrap(); + + let elapsed_time2 = start_time.elapsed(); + // For example: let output: Vec = receipt.journal.decode().unwrap(); let hash_final = Scalar::deserialize_uncompressed(&*output).unwrap(); - // verify your receipt - receipt.verify(POSEIDON2_BN128_ID).unwrap(); - - - eprintln!("Total time: {:?}", elapsed_time); eprintln!("Hash: {:?}", hash_final); + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); } \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/sha256.rs b/hash/risc0/bench/src/benches/sha256.rs index 46a0489..44527ea 100644 --- a/hash/risc0/bench/src/benches/sha256.rs +++ b/hash/risc0/bench/src/benches/sha256.rs @@ -3,34 +3,35 @@ use methods::{ }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; -// use sha2; -// use rand::RngCore; use std::time::Instant; - +use hex::encode; pub fn sha_bench(input: Vec) { - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); // Obtain the default prover. let prover = default_prover(); - eprintln!("------risc0_zkvm sha hashing------"); + eprintln!("\n------risc0_zkvm sha hashing------\n"); + let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. let receipt = prover.prove_elf(env, SHA256_ELF).unwrap(); let elapsed_time = start_time.elapsed(); - // For example: - let _output: sha::Digest = receipt.journal.decode().unwrap(); - // verify your receipt receipt.verify(SHA256_ID).unwrap(); - eprintln!("Total time: {:?}", elapsed_time); + let elapsed_time2 = start_time.elapsed(); + + let _output: sha::Digest = receipt.journal.decode().unwrap(); + + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); + eprintln!("Hash: {:?}", _output); let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - eprintln!("------RustCrypto sha hashing------"); + eprintln!("\n------RustCrypto sha hashing(accelerated)------\n"); // Obtain the default prover. let prover = default_prover(); @@ -39,12 +40,15 @@ pub fn sha_bench(input: Vec) { let receipt = prover.prove_elf(env, SHA256_ACCELERATED_ELF).unwrap(); let elapsed_time = start_time.elapsed(); - // For example: - let _output: [u8;32] = receipt.journal.decode().unwrap(); - // verify your receipt receipt.verify(SHA256_ACCELERATED_ID).unwrap(); - eprintln!("Total time: {:?}", elapsed_time); - eprintln!("Hash: {:?}", _output); + let elapsed_time2 = start_time.elapsed(); + + let _output: [u8;32] = receipt.journal.decode().unwrap(); + let hash = encode(_output); + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); + + eprintln!("Hash: {:?}", hash); } \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index 801e862..bee3f3a 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -9,6 +9,7 @@ use benches::{ poseidon2_babybear_native::poseidon2_babybear_native_bench, }; use rand::Rng; +use std::process; fn generate_bytes(size: usize) -> Vec { let mut rng = rand::thread_rng(); @@ -19,56 +20,62 @@ fn generate_bytes(size: usize) -> Vec { fn main() { let args: Vec = std::env::args().collect(); + + if args.len() != 3 { + println!("Wrong number of arguments"); + // Exit the program with a non-zero exit code + process::exit(1); + } let hash_type = &args[1]; - let size_kb = args[2].parse::().unwrap(); + let size = args[2].parse::().unwrap(); match hash_type.as_str() { "sha256" => { println!("SHA256 Benchmarking: "); - eprintln!("data size(bytes): {:?}", size_kb); - let input = generate_bytes(size_kb); + eprintln!("data size(bytes): {:?}", size); + let input = generate_bytes(size); sha_bench(input.clone()); } "keccak" => { println!("KECCAK Benchmarking: "); - eprintln!("data size(bytes): {:?}", size_kb); - let input = generate_bytes(size_kb); + eprintln!("data size(bytes): {:?}", size); + let input = generate_bytes(size); keccak_bench(input.clone()); } "blake2b" => { println!("Blake2b Benchmarking: "); - eprintln!("data size(bytes): {:?}", size_kb); - let input = generate_bytes(size_kb); + eprintln!("data size(bytes): {:?}", size); + let input = generate_bytes(size); blake2b_bench(input.clone()); } "blake3" => { println!("Blake3 Benchmarking: "); - eprintln!("data size(bytes): {:?}", size_kb); - let input = generate_bytes(size_kb); + eprintln!("data size(bytes): {:?}", size); + let input = generate_bytes(size); blake3_bench(input.clone()); } "poseidon2_bn128" => { println!("Poseidon2 Benchmarking on the BN128 field: "); - eprintln!("Tree Depth: {:?}", size_kb); - poseidon2_bn128_bench(size_kb); + eprintln!("Tree Depth: {:?}", size); + poseidon2_bn128_bench(size); } "poseidon2_babybear" => { println!("Poseidon2 Benchmarking on the BabyBear field: "); - eprintln!("Tree Depth: {:?}", size_kb); - eprintln!("number of inputs {:?}", (1 << size_kb) * 8); - poseidon2_babybear_bench(size_kb); + eprintln!("Tree Depth: {:?}", size); + eprintln!("number of inputs {:?}", (1 << size) * 8); + poseidon2_babybear_bench(size); } "poseidon2_babybear_native" => { println!("Poseidon2 Benchmarking on the BabyBear field: "); - eprintln!("Tree Depth: {:?}", size_kb); - eprintln!("number of inputs {:?}", (1 << size_kb) * 8); - poseidon2_babybear_native_bench(size_kb); + eprintln!("Tree Depth: {:?}", size); + eprintln!("number of inputs {:?}", (1 << size) * 8); + poseidon2_babybear_native_bench(size); } _ => { From e38c4cf72a5d3c93a109970aae970e4ee819083c Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Thu, 11 Jan 2024 20:27:58 +0530 Subject: [PATCH 13/31] minor changes --- hash/risc0/bench/README.md | 2 +- hash/risc0/bench/build.sh | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/hash/risc0/bench/README.md b/hash/risc0/bench/README.md index 936cb1a..d0bf8ae 100644 --- a/hash/risc0/bench/README.md +++ b/hash/risc0/bench/README.md @@ -3,7 +3,7 @@ Benchmarking different hashes inside risc'0 zkvm The benchmark is defined by the following shell scripts: -- `build.sh` - build the code. you can set the number of threads by setting the environment variable `CARGO_BUILD_JOBS` otherwise the code will build using default number of threads. +- `build.sh` - build the code. - `run.sh` and `run2.sh` - run the benchmark itself (`run.sh` for sha256, keccak, blake2b, blake3 and `run2.sh` for poseidon2 over bn128 and babybear) diff --git a/hash/risc0/bench/build.sh b/hash/risc0/bench/build.sh index d1cf927..0dfa161 100755 --- a/hash/risc0/bench/build.sh +++ b/hash/risc0/bench/build.sh @@ -1,7 +1,3 @@ #!/bin/bash -if [ -z ${ZKBENCH_NTHREADS} ]; then -ZKBENCH_NTHREADS="default" # https://doc.rust-lang.org/cargo/reference/config.html#buildjobs -fi - -CARGO_BUILD_JOBS=$ZKBENCH_NTHREADS cargo build --release + cargo build --release From 3dcd604b5f2f898995233150cc90274732717375 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Fri, 19 Jan 2024 14:39:55 +0530 Subject: [PATCH 14/31] proof composition initial commit, risc0 added as a submodule, changes done according to pre-release version 0.20.0-rc.2 --- .gitmodules | 4 + hash/cpu/external/Blake3 | 2 +- hash/cpu/external/constantine | 2 +- hash/cpu/external/zikkurat-algebra | 2 +- hash/risc0/bench/Cargo.lock | 469 +-- hash/risc0/bench/Cargo.toml | 26 +- hash/risc0/bench/methods/Cargo.toml | 4 +- hash/risc0/bench/methods/guest/Cargo.lock | 259 +- hash/risc0/bench/methods/guest/Cargo.toml | 8 +- .../guest/src/bin/poseidon2_babybear.rs | 11 +- .../src/bin/poseidon2_babybear_native.rs | 11 +- .../methods/guest/src/bin/poseidon2_bn128.rs | 11 +- .../bench/methods/guest/src/bin/sha256.rs | 3 +- .../guest/src/bin/sha256_accelerated.rs | 5 +- hash/risc0/bench/src/benches/blake2b.rs | 4 +- hash/risc0/bench/src/benches/blake3.rs | 4 +- hash/risc0/bench/src/benches/keccak.rs | 4 +- .../bench/src/benches/poseidon2_babybear.rs | 4 +- .../src/benches/poseidon2_babybear_native.rs | 4 +- .../bench/src/benches/poseidon2_bn128.rs | 4 +- hash/risc0/bench/src/benches/sha256.rs | 6 +- hash/risc0/composition/Cargo.lock | 2795 +++++++++++++++++ hash/risc0/composition/Cargo.toml | 16 + hash/risc0/composition/methods/Cargo.toml | 10 + hash/risc0/composition/methods/build.rs | 17 + .../composition/methods/guest/Cargo.lock | 1100 +++++++ .../composition/methods/guest/Cargo.toml | 11 + .../composition/methods/guest/src/main.rs | 26 + hash/risc0/composition/methods/src/lib.rs | 15 + hash/risc0/composition/src/main.rs | 38 + hash/risc0/external/risc0 | 1 + hash/risc0/inner_proof/Cargo.lock | 2778 ++++++++++++++++ hash/risc0/inner_proof/Cargo.toml | 17 + hash/risc0/inner_proof/methods/Cargo.toml | 10 + hash/risc0/inner_proof/methods/build.rs | 17 + .../inner_proof/methods/guest/Cargo.lock | 791 +++++ .../inner_proof/methods/guest/Cargo.toml | 9 + .../inner_proof/methods/guest/src/main.rs | 27 + hash/risc0/inner_proof/methods/src/lib.rs | 15 + hash/risc0/inner_proof/src/lib.rs | 47 + hash/risc0/inner_proof/src/main.rs | 26 + hash/snark/external/hash-circuits | 2 +- 42 files changed, 8309 insertions(+), 306 deletions(-) create mode 100644 hash/risc0/composition/Cargo.lock create mode 100644 hash/risc0/composition/Cargo.toml create mode 100644 hash/risc0/composition/methods/Cargo.toml create mode 100644 hash/risc0/composition/methods/build.rs create mode 100644 hash/risc0/composition/methods/guest/Cargo.lock create mode 100644 hash/risc0/composition/methods/guest/Cargo.toml create mode 100644 hash/risc0/composition/methods/guest/src/main.rs create mode 100644 hash/risc0/composition/methods/src/lib.rs create mode 100644 hash/risc0/composition/src/main.rs create mode 160000 hash/risc0/external/risc0 create mode 100644 hash/risc0/inner_proof/Cargo.lock create mode 100644 hash/risc0/inner_proof/Cargo.toml create mode 100644 hash/risc0/inner_proof/methods/Cargo.toml create mode 100644 hash/risc0/inner_proof/methods/build.rs create mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.lock create mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.toml create mode 100644 hash/risc0/inner_proof/methods/guest/src/main.rs create mode 100644 hash/risc0/inner_proof/methods/src/lib.rs create mode 100644 hash/risc0/inner_proof/src/lib.rs create mode 100644 hash/risc0/inner_proof/src/main.rs diff --git a/.gitmodules b/.gitmodules index 0545ce4..27593ef 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,7 @@ [submodule "hash/snark/src/hash-circuits"] path = hash/snark/external/hash-circuits url = https://github.com/faulhornlabs/hash-circuits +[submodule "hash/risc0/external/risc0"] + path = hash/risc0/external/risc0 + url = https://github.com/risc0/risc0.git + branch = release-0.20 diff --git a/hash/cpu/external/Blake3 b/hash/cpu/external/Blake3 index dd30dcb..4d32708 160000 --- a/hash/cpu/external/Blake3 +++ b/hash/cpu/external/Blake3 @@ -1 +1 @@ -Subproject commit dd30dcb00221591db3a983e0215b81d86cff941d +Subproject commit 4d32708f511fd85c6b0fb131295cc73224246738 diff --git a/hash/cpu/external/constantine b/hash/cpu/external/constantine index 4dd0a02..dbd2630 160000 --- a/hash/cpu/external/constantine +++ b/hash/cpu/external/constantine @@ -1 +1 @@ -Subproject commit 4dd0a02f1afd338f5207e40a47cac6705196b490 +Subproject commit dbd2630daa6d599a9e78ad247e6858baf41664da diff --git a/hash/cpu/external/zikkurat-algebra b/hash/cpu/external/zikkurat-algebra index 96e3497..0fb198a 160000 --- a/hash/cpu/external/zikkurat-algebra +++ b/hash/cpu/external/zikkurat-algebra @@ -1 +1 @@ -Subproject commit 96e349786bd004e64a9cf50e0122f89863b24e92 +Subproject commit 0fb198a9087531f32bb00bd13d4feaf813bc473a diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock index 2135879..4ab16e5 100644 --- a/hash/risc0/bench/Cargo.lock +++ b/hash/risc0/bench/Cargo.lock @@ -17,6 +17,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.2" @@ -32,6 +44,52 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2 0.10.8", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.4.2" @@ -75,17 +133,81 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + [[package]] name = "ark-serialize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ + "ark-serialize-derive", "ark-std", "digest", "num-bigint", ] +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -150,16 +272,23 @@ version = "0.1.0" dependencies = [ "ark-ff", "ark-serialize", + "benchmark_methods", "hex", - "methods", "rand", - "risc0-core 0.18.0", + "risc0-core", "risc0-zkvm", "serde", "sha2 0.10.6", "zkhash", ] +[[package]] +name = "benchmark_methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + [[package]] name = "bincode" version = "1.3.3" @@ -237,9 +366,7 @@ dependencies = [ [[package]] name = "bonsai-sdk" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441d1092e11977985946b6564251df91d80ae36982128e53be52a32548ad8762" +version = "0.6.0-rc.2" dependencies = [ "reqwest", "serde", @@ -525,21 +652,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -695,6 +807,15 @@ dependencies = [ "rayon", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.3" @@ -762,6 +883,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + [[package]] name = "hyper" version = "0.14.27" @@ -787,16 +914,17 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "hyper-rustls" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "bytes", + "futures-util", + "http", "hyper", - "native-tls", + "rustls", "tokio", - "tokio-native-tls", + "tokio-rustls", ] [[package]] @@ -816,7 +944,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", ] [[package]] @@ -887,7 +1015,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -935,13 +1063,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" -[[package]] -name = "methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - [[package]] name = "mime" version = "0.3.17" @@ -974,24 +1095,6 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "num-bigint" version = "0.4.4" @@ -1058,50 +1161,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "openssl" -version = "0.10.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" -dependencies = [ - "bitflags 2.4.1", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.97" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "pairing" version = "0.22.0" @@ -1175,12 +1234,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1387,48 +1440,60 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-tls", + "hyper-rustls", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "system-configuration", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots", "winreg", ] [[package]] -name = "risc0-binfmt" -version = "0.19.1" +name = "ring" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923c85a23cb9a9475b8cd4479ad3a06252604a361626e9ae7dc0dc635af22c22" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted", + "windows-sys", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "elf", - "log", "risc0-zkp", "risc0-zkvm-platform", "serde", + "tracing", ] [[package]] name = "risc0-build" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e58d4cc25e243e52d1ccd75d357b0aa55081736bf3052c65a823fdf169586843" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "cargo_metadata", @@ -1443,27 +1508,21 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97547e10e9fdaaab8b64ffb45dc158b31f023b1a68015c6ce9f12fe3e403012a" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "bytemuck", - "log", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkp", "tracing", ] [[package]] name = "risc0-circuit-rv32im" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a269d01b18cba24ee1a08f68726fc3623e8705ed79d158377d12e9129dcde2e" +version = "0.20.0-rc.2" dependencies = [ "anyhow", - "log", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkp", "risc0-zkvm-platform", "tracing", @@ -1471,19 +1530,7 @@ dependencies = [ [[package]] name = "risc0-core" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08605aec93ea22ed83f7f81f42e2d7287a5b0c749d8671f94de9d5994020045c" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-core" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "477e0bb8d2ec0b7955088b521eb596901e652d0faa2ea73bda0b77e05af5c07d" +version = "0.20.0-rc.2" dependencies = [ "bytemuck", "rand_core", @@ -1491,19 +1538,16 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5abb1a0cf847d3f9aed1e563b76c358107e7ba66dbfab28f7144252c990bd82" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "blake2", "bytemuck", "digest", "hex", - "log", "paste", "rand_core", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkvm-platform", "serde", "sha2 0.10.8", @@ -1512,11 +1556,12 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf80df202c038efc2199be34fda8114b38bfc5b2b51c60cbbdf1f425b07b384" +version = "0.20.0-rc.2" dependencies = [ "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", "bincode", "bonsai-sdk", "bytemuck", @@ -1524,7 +1569,8 @@ dependencies = [ "cfg-if", "getrandom", "hex", - "log", + "human-repr", + "num-bigint", "num-derive", "num-traits", "prost", @@ -1533,20 +1579,19 @@ dependencies = [ "risc0-binfmt", "risc0-circuit-recursion", "risc0-circuit-rv32im", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkp", "risc0-zkvm-platform", "rrs-lib", "semver", "serde", + "sha2 0.10.8", "tracing", ] [[package]] name = "risc0-zkvm-platform" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dcd6b66f7a4972001db0acf3f06d99b7851c8d9f0de1f7e0fb4496c66c5cd02" +version = "0.20.0-rc.2" dependencies = [ "bytemuck", "getrandom", @@ -1591,6 +1636,37 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[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 = "ryu" version = "1.0.15" @@ -1598,35 +1674,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] -name = "schannel" -version = "0.1.22" +name = "sct" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "windows-sys", -] - -[[package]] -name = "security-framework" -version = "2.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" -dependencies = [ - "core-foundation-sys", - "libc", + "ring", + "untrusted", ] [[package]] @@ -1747,6 +1801,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1873,12 +1933,12 @@ dependencies = [ ] [[package]] -name = "tokio-native-tls" -version = "0.3.1" +name = "tokio-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "native-tls", + "rustls", "tokio", ] @@ -1908,6 +1968,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1931,6 +1992,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", ] [[package]] @@ -1966,6 +2037,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.0" @@ -1978,10 +2055,10 @@ dependencies = [ ] [[package]] -name = "vcpkg" -version = "0.2.15" +name = "valuable" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "version_check" @@ -2080,6 +2157,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + [[package]] name = "which" version = "4.4.2" @@ -2199,6 +2282,26 @@ dependencies = [ "tap", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "zeroize" version = "1.7.0" diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml index 554d145..f4f93e0 100644 --- a/hash/risc0/bench/Cargo.toml +++ b/hash/risc0/bench/Cargo.toml @@ -3,34 +3,14 @@ name = "benchmark" version = "0.1.0" edition = "2021" -[workspace] -members = ["methods"] - -[workspace.dependencies] -methods = { path = "methods" } - -# Always optimize; building and running the guest takes much longer without optimization. -[profile.dev] -opt-level = 3 - -[profile.dev.build-override] -opt-level = 3 - -[profile.release] -debug = 1 -lto = true - -[profile.release.build-override] -opt-level = 3 - [dependencies] -risc0-zkvm = { version = "0.19.0" } +risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } serde = "1.0" rand = "0.8.3" sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } -methods = { workspace = true } +benchmark_methods = { path = "methods" } zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} ark-ff = "0.4.2" hex = "0.4.3" ark-serialize = "0.4" -risc0-core = "0.18.0" +risc0-core = { path = "../external/risc0/risc0/core" } diff --git a/hash/risc0/bench/methods/Cargo.toml b/hash/risc0/bench/methods/Cargo.toml index 30d237a..f391ce6 100644 --- a/hash/risc0/bench/methods/Cargo.toml +++ b/hash/risc0/bench/methods/Cargo.toml @@ -1,10 +1,10 @@ [package] -name = "methods" +name = "benchmark_methods" version = "0.1.0" edition = "2021" [build-dependencies] -risc0-build = { version = "0.19.0" } +risc0-build = { path = "../../external/risc0/risc0/build" } [package.metadata.risc0] methods = ["guest"] diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock index 7b5d163..e1880c4 100644 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ b/hash/risc0/bench/methods/guest/Cargo.lock @@ -2,12 +2,70 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "anyhow" version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2 0.10.8", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", + "itertools", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.4.2" @@ -51,17 +109,81 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + [[package]] name = "ark-serialize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ + "ark-serialize-derive", "ark-std", "digest", "num-bigint", ] +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -397,12 +519,27 @@ dependencies = [ "rayon", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + [[package]] name = "itertools" version = "0.10.5" @@ -486,9 +623,8 @@ dependencies = [ "blake3", "lazy_static", "rand", - "risc0-core 0.18.0", + "risc0-core", "risc0-zkp", - "risc0-zkp-core", "risc0-zkvm", "sha2 0.10.6", "sha3", @@ -536,6 +672,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + [[package]] name = "pairing" version = "0.22.0" @@ -669,41 +811,33 @@ dependencies = [ [[package]] name = "risc0-binfmt" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b008c7506a6acb15f14a87e7e57797fd901cdf2f4eb560a032df4e1fc12790" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "elf", - "log", "risc0-zkp", "risc0-zkvm-platform", "serde", + "tracing", ] [[package]] name = "risc0-circuit-recursion" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924bbd4f27070f04556e10565441fbf64e399763a3f244819f84dc645590bca1" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "bytemuck", - "log", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkp", "tracing", ] [[package]] name = "risc0-circuit-rv32im" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac44b6493d73638018d62eccec93f2797795d286c6201e2a79d842a16bbb43f" +version = "0.20.0-rc.2" dependencies = [ "anyhow", - "log", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkp", "risc0-zkvm-platform", "tracing", @@ -711,19 +845,7 @@ dependencies = [ [[package]] name = "risc0-core" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08605aec93ea22ed83f7f81f42e2d7287a5b0c749d8671f94de9d5994020045c" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-core" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "477e0bb8d2ec0b7955088b521eb596901e652d0faa2ea73bda0b77e05af5c07d" +version = "0.20.0-rc.2" dependencies = [ "bytemuck", "rand_core", @@ -731,71 +853,54 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5abb1a0cf847d3f9aed1e563b76c358107e7ba66dbfab28f7144252c990bd82" +version = "0.20.0-rc.2" dependencies = [ "anyhow", "blake2", "bytemuck", "digest", "hex", - "log", "paste", "rand_core", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkvm-platform", "serde", "sha2 0.10.8", "tracing", ] -[[package]] -name = "risc0-zkp-core" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfd3bb0b4f2a4250d7332c3d647418502449e773b176552aae869537c4a96bf" -dependencies = [ - "anyhow", - "bytemuck", - "paste", - "rand", - "rand_core", - "serde", - "sha2 0.10.8", -] - [[package]] name = "risc0-zkvm" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b51d8aa8a4b0a350cca2deb9ead841989ed601ca3091e33a8ee8e6f2453048" +version = "0.20.0-rc.2" dependencies = [ "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", "bytemuck", "cfg-if", "getrandom", "hex", - "log", + "human-repr", + "num-bigint", "num-derive", "num-traits", "risc0-binfmt", "risc0-circuit-recursion", "risc0-circuit-rv32im", - "risc0-core 0.19.1", + "risc0-core", "risc0-zkp", "risc0-zkvm-platform", "rrs-lib", "semver", "serde", + "sha2 0.10.8", "tracing", ] [[package]] name = "risc0-zkvm-platform" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dcd6b66f7a4972001db0acf3f06d99b7851c8d9f0de1f7e0fb4496c66c5cd02" +version = "0.20.0-rc.2" dependencies = [ "bytemuck", "getrandom", @@ -930,6 +1035,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -951,6 +1057,19 @@ name = "tracing-core" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "typenum" @@ -964,6 +1083,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "version_check" version = "0.9.4" @@ -985,6 +1110,26 @@ dependencies = [ "tap", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "zeroize" version = "1.7.0" diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml index 8529584..6d495bb 100644 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ b/hash/risc0/bench/methods/guest/Cargo.toml @@ -7,15 +7,15 @@ edition = "2021" [dependencies] # If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm -risc0-zkvm = { version = "0.19.0", default-features = false, features = [ "std" ] } +risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", default-features = false,features = ["std"] } sha3 = "0.10.8" sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } -risc0-zkp = "0.19.1" +risc0-zkp = {path = "../../../external/risc0/risc0/zkp"} blake3 = "1.5.0" zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} ark-serialize = "0.4" ark-ff = "0.4.2" -risc0-core = "0.18.0" +risc0-core = {path = "../../../external/risc0/risc0/core"} lazy_static = "1.4" -risc0-zkp-core = "0.10.0" +# risc0-zkp-core = "0.10.0" rand = "0.8.5" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs index a00e7ad..3577d02 100644 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs @@ -7,6 +7,7 @@ use zkhash::poseidon2::poseidon2_instance_babybear::{/*POSEIDON2_BABYBEAR_16_PAR use zkhash::fields::babybear::FpBabyBear; use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; use std::marker::PhantomData; +use risc0_zkvm::guest::env::cycle_count; use ark_ff::PrimeField; @@ -99,21 +100,21 @@ pub fn main() { let data: Vec> = env::read(); - let cycles1 = env::get_cycle_count(); + let cycles1 = cycle_count(); let mut hash_data: Vec = Vec::new(); for i in 0..data.len() { let a_uncompressed = FpBabyBear::deserialize_uncompressed(&**data.get(i).unwrap()).unwrap(); hash_data.push(a_uncompressed); } - let cycles2 = env::get_cycle_count(); + let cycles2 = cycle_count(); let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); let mut merkle_tree = MerkleTree::new(permutation.clone()); - let cycles3 = env::get_cycle_count(); + let cycles3 = cycle_count(); let hash_final = merkle_tree.accumulate(&hash_data); - let cycles4 = env::get_cycle_count(); + let cycles4 = cycle_count(); let mut perm_seralised: Vec> = Vec::new(); for i in 0..8 { @@ -121,7 +122,7 @@ pub fn main() { hash_final.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); perm_seralised.push(temp); } - let cycles6 = env::get_cycle_count(); + let cycles6 = cycle_count(); env::commit(&perm_seralised); diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs index 79cd4a6..9b47b7b 100644 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs @@ -6,6 +6,7 @@ use std::marker::PhantomData; use std::sync::Arc; use risc0_core::field::Elem; use lazy_static::lazy_static; +use risc0_zkvm::guest::env::cycle_count; // This code is adapted from https://github.com/HorizenLabs/poseidon2/tree/main #[derive(Clone, Debug)] @@ -1726,21 +1727,21 @@ pub fn main() { let data: Vec = env::read(); - let cycles1 = env::get_cycle_count(); + let cycles1 = cycle_count(); let mut hash_data: Vec = Vec::new(); for i in 0..data.len() { let a_uncompressed = BabyBearElem::from(*data.get(i).unwrap()); hash_data.push(a_uncompressed); } - let cycles2 = env::get_cycle_count(); + let cycles2 = cycle_count(); let permutation = Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); let mut merkle_tree = MerkleTree::new(permutation.clone()); - let cycles3 = env::get_cycle_count(); + let cycles3 = cycle_count(); let hash_final = merkle_tree.accumulate(&hash_data); - let cycles4 = env::get_cycle_count(); + let cycles4 = cycle_count(); let mut perm_seralised: Vec = Vec::new(); for i in 0..8 { @@ -1748,7 +1749,7 @@ pub fn main() { perm_seralised.push(temp); } - let cycles6 = env::get_cycle_count(); + let cycles6 = cycle_count(); env::commit(&perm_seralised); diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs index d83669e..e6bc443 100644 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs +++ b/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs @@ -6,31 +6,32 @@ use zkhash::poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS; use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; use zkhash::fields::bn256::FpBN256; use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; +use risc0_zkvm::guest::env::cycle_count; risc0_zkvm::guest::entry!(main); pub fn main() { let data: Vec> = env::read(); - let cycles1 = env::get_cycle_count(); + let cycles1 = cycle_count(); let mut hash_data: Vec = Vec::new(); for i in 0..data.len() { let a_uncompressed = FpBN256::deserialize_uncompressed(&**data.get(i).unwrap()).unwrap(); hash_data.push(a_uncompressed); } - let cycles2 = env::get_cycle_count(); + let cycles2 = cycle_count(); let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BN256_PARAMS); let mut merkle_tree = MerkleTree::new(permutation.clone()); - let cycles4 = env::get_cycle_count(); + let cycles4 = cycle_count(); let hash_final = merkle_tree.accumulate(&hash_data); - let cycles5 = env::get_cycle_count(); + let cycles5 = cycle_count(); let mut hash_bytes: Vec = Vec::new(); hash_final.serialize_uncompressed(&mut hash_bytes).unwrap(); - let cycles6 = env::get_cycle_count(); + let cycles6 = cycle_count(); env::commit(&hash_bytes); diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256.rs b/hash/risc0/bench/methods/guest/src/bin/sha256.rs index d13074c..185a9d7 100644 --- a/hash/risc0/bench/methods/guest/src/bin/sha256.rs +++ b/hash/risc0/bench/methods/guest/src/bin/sha256.rs @@ -2,12 +2,13 @@ use risc0_zkvm::{guest::env, sha, sha::Sha256}; risc0_zkvm::guest::entry!(main); +use risc0_zkvm::guest::env::cycle_count; pub fn main() { let data: Vec = env::read(); let hash = sha::Impl::hash_bytes(&data); - eprintln!("total cycle count for hashing: {:?}",env::get_cycle_count()); + eprintln!("total cycle count for hashing: {:?}",cycle_count()); env::commit(&hash) } diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs b/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs index 91d7e9c..2162da4 100644 --- a/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs +++ b/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs @@ -4,6 +4,7 @@ use risc0_zkvm::guest::env; use sha2::{Sha256, Digest}; +use risc0_zkvm::guest::env::cycle_count; // use base16ct::lower::encode_str; risc0_zkvm::guest::entry!(main); @@ -11,10 +12,10 @@ pub fn main() { let data: Vec = env::read(); let result = Sha256::digest(data); - let c1 = env::get_cycle_count(); + let c1 = cycle_count(); eprintln!("total cycle count for hashing: {:?}",c1); let result_bytes: [u8;32] = result.into(); - let c2 = env::get_cycle_count(); + let c2 = cycle_count(); eprintln!("cycle count to convert into bytes array: {:?}",c2-c1); env::commit(&result_bytes) } diff --git a/hash/risc0/bench/src/benches/blake2b.rs b/hash/risc0/bench/src/benches/blake2b.rs index c5d7f32..75bbf05 100644 --- a/hash/risc0/bench/src/benches/blake2b.rs +++ b/hash/risc0/bench/src/benches/blake2b.rs @@ -1,4 +1,4 @@ -use methods::{ +use benchmark_methods::{ BLAKE2B_ELF, BLAKE2B_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; @@ -15,7 +15,7 @@ pub fn blake2b_bench(input: Vec) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, BLAKE2B_ELF).unwrap(); + let receipt = prover.prove(env, BLAKE2B_ELF).unwrap(); // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); diff --git a/hash/risc0/bench/src/benches/blake3.rs b/hash/risc0/bench/src/benches/blake3.rs index 204c3a3..2f12a7f 100644 --- a/hash/risc0/bench/src/benches/blake3.rs +++ b/hash/risc0/bench/src/benches/blake3.rs @@ -1,4 +1,4 @@ -use methods::{ +use benchmark_methods::{ BLAKE3_ELF, BLAKE3_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; @@ -17,7 +17,7 @@ pub fn blake3_bench(input: Vec) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, BLAKE3_ELF).unwrap(); + let receipt = prover.prove(env, BLAKE3_ELF).unwrap(); // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); diff --git a/hash/risc0/bench/src/benches/keccak.rs b/hash/risc0/bench/src/benches/keccak.rs index 71c6ff5..73c8506 100644 --- a/hash/risc0/bench/src/benches/keccak.rs +++ b/hash/risc0/bench/src/benches/keccak.rs @@ -1,4 +1,4 @@ -use methods::{ +use benchmark_methods::{ KECCAK_ELF, KECCAK_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; @@ -16,7 +16,7 @@ pub fn keccak_bench(input: Vec) { let prover = default_prover(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, KECCAK_ELF).unwrap(); + let receipt = prover.prove(env, KECCAK_ELF).unwrap(); // For example: let _output: sha::Digest = receipt.journal.decode().unwrap(); diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs index b3ae1f1..7e7a391 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear.rs @@ -1,5 +1,5 @@ #![allow(non_snake_case)] -use methods::{ +use benchmark_methods::{ POSEIDON2_BABYBEAR_ELF, POSEIDON2_BABYBEAR_ID }; @@ -39,7 +39,7 @@ pub fn poseidon2_babybear_bench(mt_depth: usize) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, POSEIDON2_BABYBEAR_ELF).unwrap(); + let receipt = prover.prove(env, POSEIDON2_BABYBEAR_ELF).unwrap(); let elapsed_time = start_time.elapsed(); // verify your receipt diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs index 9b92da3..d630f7f 100644 --- a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs +++ b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs @@ -1,5 +1,5 @@ #![allow(non_snake_case)] -use methods::{ +use benchmark_methods::{ POSEIDON2_BABYBEAR_NATIVE_ELF, POSEIDON2_BABYBEAR_NATIVE_ID }; @@ -29,7 +29,7 @@ pub fn poseidon2_babybear_native_bench(mt_depth: usize) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, POSEIDON2_BABYBEAR_NATIVE_ELF).unwrap(); + let receipt = prover.prove(env, POSEIDON2_BABYBEAR_NATIVE_ELF).unwrap(); let elapsed_time = start_time.elapsed(); // verify your receipt diff --git a/hash/risc0/bench/src/benches/poseidon2_bn128.rs b/hash/risc0/bench/src/benches/poseidon2_bn128.rs index 8bb4b25..3ceb77c 100644 --- a/hash/risc0/bench/src/benches/poseidon2_bn128.rs +++ b/hash/risc0/bench/src/benches/poseidon2_bn128.rs @@ -1,4 +1,4 @@ -use methods::{ +use benchmark_methods::{ POSEIDON2_BN128_ELF, POSEIDON2_BN128_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; @@ -27,7 +27,7 @@ pub fn poseidon2_bn128_bench(mt_depth: usize) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, POSEIDON2_BN128_ELF).unwrap(); + let receipt = prover.prove(env, POSEIDON2_BN128_ELF).unwrap(); let elapsed_time = start_time.elapsed(); diff --git a/hash/risc0/bench/src/benches/sha256.rs b/hash/risc0/bench/src/benches/sha256.rs index 44527ea..cae5b79 100644 --- a/hash/risc0/bench/src/benches/sha256.rs +++ b/hash/risc0/bench/src/benches/sha256.rs @@ -1,4 +1,4 @@ -use methods::{ +use benchmark_methods::{ SHA256_ELF, SHA256_ID, SHA256_ACCELERATED_ELF, SHA256_ACCELERATED_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; @@ -15,7 +15,7 @@ pub fn sha_bench(input: Vec) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, SHA256_ELF).unwrap(); + let receipt = prover.prove(env, SHA256_ELF).unwrap(); let elapsed_time = start_time.elapsed(); // verify your receipt @@ -37,7 +37,7 @@ pub fn sha_bench(input: Vec) { let start_time = Instant::now(); // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove_elf(env, SHA256_ACCELERATED_ELF).unwrap(); + let receipt = prover.prove(env, SHA256_ACCELERATED_ELF).unwrap(); let elapsed_time = start_time.elapsed(); // verify your receipt diff --git a/hash/risc0/composition/Cargo.lock b/hash/risc0/composition/Cargo.lock new file mode 100644 index 0000000..9e5e2c8 --- /dev/null +++ b/hash/risc0/composition/Cargo.lock @@ -0,0 +1,2795 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[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.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "cpp_demangle", + "fallible-iterator", + "gimli", + "memmap2", + "object", + "rustc-demangle", + "smallvec", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools 0.10.5", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "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.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[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 = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[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 = "bonsai-sdk" +version = "0.6.0-rc.2" +dependencies = [ + "reqwest", + "serde", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "composition" +version = "0.1.0" +dependencies = [ + "composition-methods", + "inner_proof", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "composition-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[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-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpp_demangle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +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-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core", + "subtle", +] + +[[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 = "cust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "cust_core", + "cust_derive", + "cust_raw", + "find_cuda_helper", +] + +[[package]] +name = "cust_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" +dependencies = [ + "cust_derive", + "glam", + "mint", + "vek", +] + +[[package]] +name = "cust_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cust_raw" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] + +[[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 = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[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", + "windows-sys 0.48.0", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "downloader" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" +dependencies = [ + "digest", + "futures", + "rand", + "reqwest", + "thiserror", + "tokio", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find_cuda_helper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" +dependencies = [ + "glob", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[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.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "stable_deref_trait", +] + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +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", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "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", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "inner_proof" +version = "0.1.0" +dependencies = [ + "inner_proof-methods", + "rand", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "inner_proof-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "inventory" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy-regex" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.48", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "metal" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", + "rayon", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "flate2", + "memchr", + "ruzstd", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.48", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[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" +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", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-build-kernel" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "directories", + "hex", + "sha2", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "cust", + "downloader", + "metal", + "rand", + "rayon", + "risc0-circuit-recursion-sys", + "risc0-core", + "risc0-zkp", + "sha2", + "tracing", + "zip", +] + +[[package]] +name = "risc0-circuit-recursion-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cust", + "metal", + "rand", + "rayon", + "risc0-circuit-rv32im-sys", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-sppark" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "risc0-sys" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "cust", + "risc0-build-kernel", + "risc0-sppark", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "cust", + "digest", + "ff", + "hex", + "lazy_static", + "metal", + "ndarray", + "paste", + "rand", + "rand_core", + "rayon", + "risc0-core", + "risc0-sys", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "addr2line", + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bincode", + "bonsai-sdk", + "bytemuck", + "bytes", + "cfg-if", + "crypto-bigint", + "elf", + "getrandom", + "hex", + "human-repr", + "lazy-regex", + "num-bigint 0.4.4", + "num-derive", + "num-traits", + "prost", + "prost-build", + "protobuf-src", + "rayon", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "rustc-demangle", + "semver", + "serde", + "sha2", + "tempfile", + "tracing", + "typetag", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[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 = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +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 = "tokio" +version = "1.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typetag" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vek" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[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.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" + +[[package]] +name = "web-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] diff --git a/hash/risc0/composition/Cargo.toml b/hash/risc0/composition/Cargo.toml new file mode 100644 index 0000000..9dd76d2 --- /dev/null +++ b/hash/risc0/composition/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "composition" +version = "0.1.0" +edition = "2021" + +[dependencies] +composition-methods = { path = "methods" } +inner_proof = { path = "../inner_proof" } +risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } +serde = "1.0" + +[features] +cuda = ["risc0-zkvm/cuda"] +default = [] +metal = ["risc0-zkvm/metal"] +prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/composition/methods/Cargo.toml b/hash/risc0/composition/methods/Cargo.toml new file mode 100644 index 0000000..be6e230 --- /dev/null +++ b/hash/risc0/composition/methods/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "composition-methods" +version = "0.1.0" +edition = "2021" + +[build-dependencies] +risc0-build = { path = "../../external/risc0/risc0/build" } + +[package.metadata.risc0] +methods = ["guest"] diff --git a/hash/risc0/composition/methods/build.rs b/hash/risc0/composition/methods/build.rs new file mode 100644 index 0000000..a4aa256 --- /dev/null +++ b/hash/risc0/composition/methods/build.rs @@ -0,0 +1,17 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +fn main() { + risc0_build::embed_methods(); +} diff --git a/hash/risc0/composition/methods/guest/Cargo.lock b/hash/risc0/composition/methods/guest/Cargo.lock new file mode 100644 index 0000000..4077f62 --- /dev/null +++ b/hash/risc0/composition/methods/guest/Cargo.lock @@ -0,0 +1,1100 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", + "itertools", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "composition-method" +version = "0.1.0" +dependencies = [ + "bytemuck", + "inner_proof-methods", + "risc0-zkvm", +] + +[[package]] +name = "const-oid" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +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 = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "inner_proof-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "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" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "digest", + "hex", + "paste", + "rand_core", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bytemuck", + "cfg-if", + "getrandom", + "hex", + "human-repr", + "num-bigint", + "num-derive", + "num-traits", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "semver" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "thiserror" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "zerocopy" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/hash/risc0/composition/methods/guest/Cargo.toml b/hash/risc0/composition/methods/guest/Cargo.toml new file mode 100644 index 0000000..6dd09c0 --- /dev/null +++ b/hash/risc0/composition/methods/guest/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "composition-method" +version = "0.1.0" +edition = "2021" + +[workspace] + +[dependencies] +risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", features = ["std"], default-features = false } +inner_proof-methods = { path = "../../../inner_proof/methods" } +bytemuck = "1.14" diff --git a/hash/risc0/composition/methods/guest/src/main.rs b/hash/risc0/composition/methods/guest/src/main.rs new file mode 100644 index 0000000..3d2cecf --- /dev/null +++ b/hash/risc0/composition/methods/guest/src/main.rs @@ -0,0 +1,26 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use inner_proof_methods::INNER_PROOF_METHOD_ID; +use risc0_zkvm::{guest::env, serde}; +use risc0_zkvm::sha; +fn main() { + + let hash: sha::Digest = env::read(); + + env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash).unwrap()).unwrap(); + + env::commit(&hash); +} + diff --git a/hash/risc0/composition/methods/src/lib.rs b/hash/risc0/composition/methods/src/lib.rs new file mode 100644 index 0000000..ae9d61e --- /dev/null +++ b/hash/risc0/composition/methods/src/lib.rs @@ -0,0 +1,15 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/composition/src/main.rs b/hash/risc0/composition/src/main.rs new file mode 100644 index 0000000..7195a9d --- /dev/null +++ b/hash/risc0/composition/src/main.rs @@ -0,0 +1,38 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use composition_methods::{COMPOSITION_METHOD_ELF, COMPOSITION_METHOD_ID}; +use inner_proof::sha_bench; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::sha; +fn main() { + + let (hash_receipt, hash) = sha_bench(32); + + let env = ExecutorEnv::builder() + // add_assumption makes the receipt to be verified available to the prover. + .add_assumption(hash_receipt) + .write(&hash) + .unwrap() + .build() + .unwrap(); + + let receipt = default_prover().prove(env, COMPOSITION_METHOD_ELF).unwrap(); + + receipt.verify(COMPOSITION_METHOD_ID).unwrap(); + + let hash: sha::Digest = receipt.journal.decode().unwrap(); + eprintln!("hash: {:?}", hash); + +} diff --git a/hash/risc0/external/risc0 b/hash/risc0/external/risc0 new file mode 160000 index 0000000..a4d2b5d --- /dev/null +++ b/hash/risc0/external/risc0 @@ -0,0 +1 @@ +Subproject commit a4d2b5d95685554ee34a39d60b40fa2c5deff57a diff --git a/hash/risc0/inner_proof/Cargo.lock b/hash/risc0/inner_proof/Cargo.lock new file mode 100644 index 0000000..943cc8f --- /dev/null +++ b/hash/risc0/inner_proof/Cargo.lock @@ -0,0 +1,2778 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[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.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "cpp_demangle", + "fallible-iterator", + "gimli", + "memmap2", + "object", + "rustc-demangle", + "smallvec", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools 0.10.5", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "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.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[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 = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[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 = "bonsai-sdk" +version = "0.6.0-rc.2" +dependencies = [ + "reqwest", + "serde", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[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-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpp_demangle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +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-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core", + "subtle", +] + +[[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 = "cust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "cust_core", + "cust_derive", + "cust_raw", + "find_cuda_helper", +] + +[[package]] +name = "cust_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" +dependencies = [ + "cust_derive", + "glam", + "mint", + "vek", +] + +[[package]] +name = "cust_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cust_raw" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] + +[[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 = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[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", + "windows-sys 0.48.0", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "downloader" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" +dependencies = [ + "digest", + "futures", + "rand", + "reqwest", + "thiserror", + "tokio", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find_cuda_helper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" +dependencies = [ + "glob", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[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.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "stable_deref_trait", +] + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +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", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "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", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "inner_proof" +version = "0.1.0" +dependencies = [ + "inner_proof-methods", + "rand", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "inner_proof-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "inventory" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy-regex" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.48", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "metal" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", + "rayon", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "flate2", + "memchr", + "ruzstd", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.48", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[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" +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", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-build-kernel" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "directories", + "hex", + "sha2", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "cust", + "downloader", + "metal", + "rand", + "rayon", + "risc0-circuit-recursion-sys", + "risc0-core", + "risc0-zkp", + "sha2", + "tracing", + "zip", +] + +[[package]] +name = "risc0-circuit-recursion-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cust", + "metal", + "rand", + "rayon", + "risc0-circuit-rv32im-sys", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-sppark" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "risc0-sys" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "cust", + "risc0-build-kernel", + "risc0-sppark", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "cust", + "digest", + "ff", + "hex", + "lazy_static", + "metal", + "ndarray", + "paste", + "rand", + "rand_core", + "rayon", + "risc0-core", + "risc0-sys", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "addr2line", + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bincode", + "bonsai-sdk", + "bytemuck", + "bytes", + "cfg-if", + "crypto-bigint", + "elf", + "getrandom", + "hex", + "human-repr", + "lazy-regex", + "num-bigint 0.4.4", + "num-derive", + "num-traits", + "prost", + "prost-build", + "protobuf-src", + "rayon", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "rustc-demangle", + "semver", + "serde", + "sha2", + "tempfile", + "tracing", + "typetag", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[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 = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +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 = "tokio" +version = "1.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typetag" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vek" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[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.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" + +[[package]] +name = "web-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] diff --git a/hash/risc0/inner_proof/Cargo.toml b/hash/risc0/inner_proof/Cargo.toml new file mode 100644 index 0000000..c935ed6 --- /dev/null +++ b/hash/risc0/inner_proof/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "inner_proof" +version = "0.1.0" +edition = "2021" + +[dependencies] +inner_proof-methods = { path = "methods" } +risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } +serde = "1.0" +rand = "0.8.3" + + +[features] +cuda = ["risc0-zkvm/cuda"] +default = [] +metal = ["risc0-zkvm/metal"] +prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/inner_proof/methods/Cargo.toml b/hash/risc0/inner_proof/methods/Cargo.toml new file mode 100644 index 0000000..b187021 --- /dev/null +++ b/hash/risc0/inner_proof/methods/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "inner_proof-methods" +version = "0.1.0" +edition = "2021" + +[build-dependencies] +risc0-build = { path = "../../external/risc0/risc0/build" } + +[package.metadata.risc0] +methods = ["guest"] diff --git a/hash/risc0/inner_proof/methods/build.rs b/hash/risc0/inner_proof/methods/build.rs new file mode 100644 index 0000000..a4aa256 --- /dev/null +++ b/hash/risc0/inner_proof/methods/build.rs @@ -0,0 +1,17 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +fn main() { + risc0_build::embed_methods(); +} diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.lock b/hash/risc0/inner_proof/methods/guest/Cargo.lock new file mode 100644 index 0000000..da9ea78 --- /dev/null +++ b/hash/risc0/inner_proof/methods/guest/Cargo.lock @@ -0,0 +1,791 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", + "itertools", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytemuck" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +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 = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "inner_proof_method" +version = "0.1.0" +dependencies = [ + "risc0-zkvm", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "libc" +version = "0.2.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "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" + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "digest", + "hex", + "paste", + "rand_core", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bytemuck", + "cfg-if", + "getrandom", + "hex", + "human-repr", + "num-bigint", + "num-derive", + "num-traits", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" + +[[package]] +name = "serde" +version = "1.0.171" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.171" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "zerocopy" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.toml b/hash/risc0/inner_proof/methods/guest/Cargo.toml new file mode 100644 index 0000000..faac96e --- /dev/null +++ b/hash/risc0/inner_proof/methods/guest/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "inner_proof_method" +version = "0.1.0" +edition = "2021" + +[workspace] + +[dependencies] +risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", default-features = false, features = ["std"]} diff --git a/hash/risc0/inner_proof/methods/guest/src/main.rs b/hash/risc0/inner_proof/methods/guest/src/main.rs new file mode 100644 index 0000000..024da98 --- /dev/null +++ b/hash/risc0/inner_proof/methods/guest/src/main.rs @@ -0,0 +1,27 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#![no_main] + +use risc0_zkvm::{guest::env, sha, sha::Sha256}; + +risc0_zkvm::guest::entry!(main); + +fn main() { + let data: Vec = env::read(); + let hash = sha::Impl::hash_bytes(&data); + env::commit(&hash) +} + + diff --git a/hash/risc0/inner_proof/methods/src/lib.rs b/hash/risc0/inner_proof/methods/src/lib.rs new file mode 100644 index 0000000..ae9d61e --- /dev/null +++ b/hash/risc0/inner_proof/methods/src/lib.rs @@ -0,0 +1,15 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/inner_proof/src/lib.rs b/hash/risc0/inner_proof/src/lib.rs new file mode 100644 index 0000000..1421d60 --- /dev/null +++ b/hash/risc0/inner_proof/src/lib.rs @@ -0,0 +1,47 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use inner_proof_methods::INNER_PROOF_METHOD_ELF; +use risc0_zkvm::{default_prover, ExecutorEnv, Receipt}; +use risc0_zkvm::{ sha}; +use rand::Rng; + + +pub fn generate_bytes(size: u32) -> Vec { + let mut rng = rand::thread_rng(); + (0..size).map(|_| rng.gen()).collect() +} + +pub fn sha_bench(size: u32) -> (Receipt, sha::Digest) { + + let input = generate_bytes(size); + + let env = ExecutorEnv::builder() + .write(&input) + .unwrap() + .build() + .unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove(env, INNER_PROOF_METHOD_ELF).unwrap(); + + let _output: sha::Digest = receipt.journal.decode().expect( + "cannot deserialise", + ); + + (receipt, _output) +} \ No newline at end of file diff --git a/hash/risc0/inner_proof/src/main.rs b/hash/risc0/inner_proof/src/main.rs new file mode 100644 index 0000000..40a3668 --- /dev/null +++ b/hash/risc0/inner_proof/src/main.rs @@ -0,0 +1,26 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use inner_proof::sha_bench; +use inner_proof_methods::INNER_PROOF_METHOD_ID; + + +fn main() { + let (receipt, _) = sha_bench(32); + + // Verify receipt, panic if it's wrong + receipt.verify(INNER_PROOF_METHOD_ID).expect( + "cannot verify", + ); +} diff --git a/hash/snark/external/hash-circuits b/hash/snark/external/hash-circuits index e6b99b2..3ae1517 160000 --- a/hash/snark/external/hash-circuits +++ b/hash/snark/external/hash-circuits @@ -1 +1 @@ -Subproject commit e6b99b20f038f27390f590313ce7de227d6dd42a +Subproject commit 3ae1517526f1061a8d37a159270cc15727e6b503 From 5d2d0fc2e9d448a5ed204686d1d8034878fb1177 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 22 Jan 2024 11:38:40 +0530 Subject: [PATCH 15/31] composition removed --- hash/risc0/composition/Cargo.lock | 2795 ----------------- hash/risc0/composition/Cargo.toml | 16 - hash/risc0/composition/methods/Cargo.toml | 10 - hash/risc0/composition/methods/build.rs | 17 - .../composition/methods/guest/Cargo.lock | 1100 ------- .../composition/methods/guest/Cargo.toml | 11 - .../composition/methods/guest/src/main.rs | 26 - hash/risc0/composition/methods/src/lib.rs | 15 - hash/risc0/composition/src/main.rs | 38 - hash/risc0/inner_proof/Cargo.lock | 2778 ---------------- hash/risc0/inner_proof/Cargo.toml | 17 - hash/risc0/inner_proof/methods/Cargo.toml | 10 - hash/risc0/inner_proof/methods/build.rs | 17 - .../inner_proof/methods/guest/Cargo.lock | 791 ----- .../inner_proof/methods/guest/Cargo.toml | 9 - .../inner_proof/methods/guest/src/main.rs | 27 - hash/risc0/inner_proof/methods/src/lib.rs | 15 - hash/risc0/inner_proof/src/lib.rs | 47 - hash/risc0/inner_proof/src/main.rs | 26 - 19 files changed, 7765 deletions(-) delete mode 100644 hash/risc0/composition/Cargo.lock delete mode 100644 hash/risc0/composition/Cargo.toml delete mode 100644 hash/risc0/composition/methods/Cargo.toml delete mode 100644 hash/risc0/composition/methods/build.rs delete mode 100644 hash/risc0/composition/methods/guest/Cargo.lock delete mode 100644 hash/risc0/composition/methods/guest/Cargo.toml delete mode 100644 hash/risc0/composition/methods/guest/src/main.rs delete mode 100644 hash/risc0/composition/methods/src/lib.rs delete mode 100644 hash/risc0/composition/src/main.rs delete mode 100644 hash/risc0/inner_proof/Cargo.lock delete mode 100644 hash/risc0/inner_proof/Cargo.toml delete mode 100644 hash/risc0/inner_proof/methods/Cargo.toml delete mode 100644 hash/risc0/inner_proof/methods/build.rs delete mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.lock delete mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.toml delete mode 100644 hash/risc0/inner_proof/methods/guest/src/main.rs delete mode 100644 hash/risc0/inner_proof/methods/src/lib.rs delete mode 100644 hash/risc0/inner_proof/src/lib.rs delete mode 100644 hash/risc0/inner_proof/src/main.rs diff --git a/hash/risc0/composition/Cargo.lock b/hash/risc0/composition/Cargo.lock deleted file mode 100644 index 9e5e2c8..0000000 --- a/hash/risc0/composition/Cargo.lock +++ /dev/null @@ -1,2795 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[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.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "cpp_demangle", - "fallible-iterator", - "gimli", - "memmap2", - "object", - "rustc-demangle", - "smallvec", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools 0.10.5", - "num-bigint 0.4.4", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "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.4", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint 0.4.4", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "autotools" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" -dependencies = [ - "cc", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "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.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" - -[[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 = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[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 = "bonsai-sdk" -version = "0.6.0-rc.2" -dependencies = [ - "reqwest", - "serde", - "thiserror", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "composition" -version = "0.1.0" -dependencies = [ - "composition-methods", - "inner_proof", - "risc0-zkvm", - "serde", -] - -[[package]] -name = "composition-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[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-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cpp_demangle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -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-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "rand_core", - "subtle", -] - -[[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 = "cust" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" -dependencies = [ - "bitflags 1.3.2", - "bytemuck", - "cust_core", - "cust_derive", - "cust_raw", - "find_cuda_helper", -] - -[[package]] -name = "cust_core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" -dependencies = [ - "cust_derive", - "glam", - "mint", - "vek", -] - -[[package]] -name = "cust_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cust_raw" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" -dependencies = [ - "find_cuda_helper", -] - -[[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 = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[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 = "directories" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" -dependencies = [ - "dirs-sys", -] - -[[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", - "windows-sys 0.48.0", -] - -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "downloader" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" -dependencies = [ - "digest", - "futures", - "rand", - "reqwest", - "thiserror", - "tokio", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" -dependencies = [ - "serde", -] - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" -dependencies = [ - "addchain", - "cfg-if", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find_cuda_helper" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" -dependencies = [ - "glob", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[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.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -dependencies = [ - "fallible-iterator", - "stable_deref_trait", -] - -[[package]] -name = "glam" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -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", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "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", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "inner_proof" -version = "0.1.0" -dependencies = [ - "inner_proof-methods", - "rand", - "risc0-zkvm", - "serde", -] - -[[package]] -name = "inner_proof-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "inventory" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy-regex" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] - -[[package]] -name = "lazy-regex-proc_macros" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.48", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.2", - "libc", - "redox_syscall", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "metal" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", - "rayon", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[package]] -name = "proc-macro2" -version = "1.0.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" -dependencies = [ - "bytes", - "heck", - "itertools 0.11.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.48", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" -dependencies = [ - "anyhow", - "itertools 0.11.0", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "prost-types" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf-src" -version = "1.1.0+21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" -dependencies = [ - "autotools", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[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" -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", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" -dependencies = [ - "cc", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.48.0", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-build-kernel" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "directories", - "hex", - "sha2", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "cust", - "downloader", - "metal", - "rand", - "rayon", - "risc0-circuit-recursion-sys", - "risc0-core", - "risc0-zkp", - "sha2", - "tracing", - "zip", -] - -[[package]] -name = "risc0-circuit-recursion-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cust", - "metal", - "rand", - "rayon", - "risc0-circuit-rv32im-sys", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-sppark" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" -dependencies = [ - "cc", - "which", -] - -[[package]] -name = "risc0-sys" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "cust", - "risc0-build-kernel", - "risc0-sppark", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "cust", - "digest", - "ff", - "hex", - "lazy_static", - "metal", - "ndarray", - "paste", - "rand", - "rand_core", - "rayon", - "risc0-core", - "risc0-sys", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "addr2line", - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bincode", - "bonsai-sdk", - "bytemuck", - "bytes", - "cfg-if", - "crypto-bigint", - "elf", - "getrandom", - "hex", - "human-repr", - "lazy-regex", - "num-bigint 0.4.4", - "num-derive", - "num-traits", - "prost", - "prost-build", - "protobuf-src", - "rayon", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "rustc-demangle", - "semver", - "serde", - "sha2", - "tempfile", - "tracing", - "typetag", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" -dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64", -] - -[[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 = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -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 = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "typetag" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" -dependencies = [ - "erased-serde", - "inventory", - "once_cell", - "serde", - "typetag-impl", -] - -[[package]] -name = "typetag-impl" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vek" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" -dependencies = [ - "approx", - "num-integer", - "num-traits", - "rustc_version", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", - "flate2", -] diff --git a/hash/risc0/composition/Cargo.toml b/hash/risc0/composition/Cargo.toml deleted file mode 100644 index 9dd76d2..0000000 --- a/hash/risc0/composition/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "composition" -version = "0.1.0" -edition = "2021" - -[dependencies] -composition-methods = { path = "methods" } -inner_proof = { path = "../inner_proof" } -risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } -serde = "1.0" - -[features] -cuda = ["risc0-zkvm/cuda"] -default = [] -metal = ["risc0-zkvm/metal"] -prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/composition/methods/Cargo.toml b/hash/risc0/composition/methods/Cargo.toml deleted file mode 100644 index be6e230..0000000 --- a/hash/risc0/composition/methods/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "composition-methods" -version = "0.1.0" -edition = "2021" - -[build-dependencies] -risc0-build = { path = "../../external/risc0/risc0/build" } - -[package.metadata.risc0] -methods = ["guest"] diff --git a/hash/risc0/composition/methods/build.rs b/hash/risc0/composition/methods/build.rs deleted file mode 100644 index a4aa256..0000000 --- a/hash/risc0/composition/methods/build.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -fn main() { - risc0_build::embed_methods(); -} diff --git a/hash/risc0/composition/methods/guest/Cargo.lock b/hash/risc0/composition/methods/guest/Cargo.lock deleted file mode 100644 index 4077f62..0000000 --- a/hash/risc0/composition/methods/guest/Cargo.lock +++ /dev/null @@ -1,1100 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", - "itertools", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "composition-method" -version = "0.1.0" -dependencies = [ - "bytemuck", - "inner_proof-methods", - "risc0-zkvm", -] - -[[package]] -name = "const-oid" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -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 = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "inner_proof-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "libc" -version = "0.2.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "linux-raw-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "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" - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "digest", - "hex", - "paste", - "rand_core", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bytemuck", - "cfg-if", - "getrandom", - "hex", - "human-repr", - "num-bigint", - "num-derive", - "num-traits", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "semver", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" -dependencies = [ - "bitflags 2.4.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "semver" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "serde_json" -version = "1.0.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tempfile" -version = "3.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "thiserror" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "zerocopy" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] diff --git a/hash/risc0/composition/methods/guest/Cargo.toml b/hash/risc0/composition/methods/guest/Cargo.toml deleted file mode 100644 index 6dd09c0..0000000 --- a/hash/risc0/composition/methods/guest/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "composition-method" -version = "0.1.0" -edition = "2021" - -[workspace] - -[dependencies] -risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", features = ["std"], default-features = false } -inner_proof-methods = { path = "../../../inner_proof/methods" } -bytemuck = "1.14" diff --git a/hash/risc0/composition/methods/guest/src/main.rs b/hash/risc0/composition/methods/guest/src/main.rs deleted file mode 100644 index 3d2cecf..0000000 --- a/hash/risc0/composition/methods/guest/src/main.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use inner_proof_methods::INNER_PROOF_METHOD_ID; -use risc0_zkvm::{guest::env, serde}; -use risc0_zkvm::sha; -fn main() { - - let hash: sha::Digest = env::read(); - - env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash).unwrap()).unwrap(); - - env::commit(&hash); -} - diff --git a/hash/risc0/composition/methods/src/lib.rs b/hash/risc0/composition/methods/src/lib.rs deleted file mode 100644 index ae9d61e..0000000 --- a/hash/risc0/composition/methods/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/composition/src/main.rs b/hash/risc0/composition/src/main.rs deleted file mode 100644 index 7195a9d..0000000 --- a/hash/risc0/composition/src/main.rs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use composition_methods::{COMPOSITION_METHOD_ELF, COMPOSITION_METHOD_ID}; -use inner_proof::sha_bench; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::sha; -fn main() { - - let (hash_receipt, hash) = sha_bench(32); - - let env = ExecutorEnv::builder() - // add_assumption makes the receipt to be verified available to the prover. - .add_assumption(hash_receipt) - .write(&hash) - .unwrap() - .build() - .unwrap(); - - let receipt = default_prover().prove(env, COMPOSITION_METHOD_ELF).unwrap(); - - receipt.verify(COMPOSITION_METHOD_ID).unwrap(); - - let hash: sha::Digest = receipt.journal.decode().unwrap(); - eprintln!("hash: {:?}", hash); - -} diff --git a/hash/risc0/inner_proof/Cargo.lock b/hash/risc0/inner_proof/Cargo.lock deleted file mode 100644 index 943cc8f..0000000 --- a/hash/risc0/inner_proof/Cargo.lock +++ /dev/null @@ -1,2778 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[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.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "cpp_demangle", - "fallible-iterator", - "gimli", - "memmap2", - "object", - "rustc-demangle", - "smallvec", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools 0.10.5", - "num-bigint 0.4.4", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "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.4", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint 0.4.4", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "autotools" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" -dependencies = [ - "cc", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "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.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" - -[[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 = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[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 = "bonsai-sdk" -version = "0.6.0-rc.2" -dependencies = [ - "reqwest", - "serde", - "thiserror", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[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-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cpp_demangle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -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-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "rand_core", - "subtle", -] - -[[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 = "cust" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" -dependencies = [ - "bitflags 1.3.2", - "bytemuck", - "cust_core", - "cust_derive", - "cust_raw", - "find_cuda_helper", -] - -[[package]] -name = "cust_core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" -dependencies = [ - "cust_derive", - "glam", - "mint", - "vek", -] - -[[package]] -name = "cust_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cust_raw" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" -dependencies = [ - "find_cuda_helper", -] - -[[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 = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[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 = "directories" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" -dependencies = [ - "dirs-sys", -] - -[[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", - "windows-sys 0.48.0", -] - -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "downloader" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" -dependencies = [ - "digest", - "futures", - "rand", - "reqwest", - "thiserror", - "tokio", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" -dependencies = [ - "serde", -] - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" -dependencies = [ - "addchain", - "cfg-if", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find_cuda_helper" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" -dependencies = [ - "glob", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[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.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -dependencies = [ - "fallible-iterator", - "stable_deref_trait", -] - -[[package]] -name = "glam" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -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", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "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", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "inner_proof" -version = "0.1.0" -dependencies = [ - "inner_proof-methods", - "rand", - "risc0-zkvm", - "serde", -] - -[[package]] -name = "inner_proof-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "inventory" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy-regex" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] - -[[package]] -name = "lazy-regex-proc_macros" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.48", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.2", - "libc", - "redox_syscall", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "metal" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", - "rayon", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[package]] -name = "proc-macro2" -version = "1.0.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" -dependencies = [ - "bytes", - "heck", - "itertools 0.11.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.48", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" -dependencies = [ - "anyhow", - "itertools 0.11.0", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "prost-types" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf-src" -version = "1.1.0+21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" -dependencies = [ - "autotools", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[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" -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", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" -dependencies = [ - "cc", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.48.0", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-build-kernel" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "directories", - "hex", - "sha2", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "cust", - "downloader", - "metal", - "rand", - "rayon", - "risc0-circuit-recursion-sys", - "risc0-core", - "risc0-zkp", - "sha2", - "tracing", - "zip", -] - -[[package]] -name = "risc0-circuit-recursion-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cust", - "metal", - "rand", - "rayon", - "risc0-circuit-rv32im-sys", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-sppark" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" -dependencies = [ - "cc", - "which", -] - -[[package]] -name = "risc0-sys" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "cust", - "risc0-build-kernel", - "risc0-sppark", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "cust", - "digest", - "ff", - "hex", - "lazy_static", - "metal", - "ndarray", - "paste", - "rand", - "rand_core", - "rayon", - "risc0-core", - "risc0-sys", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "addr2line", - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bincode", - "bonsai-sdk", - "bytemuck", - "bytes", - "cfg-if", - "crypto-bigint", - "elf", - "getrandom", - "hex", - "human-repr", - "lazy-regex", - "num-bigint 0.4.4", - "num-derive", - "num-traits", - "prost", - "prost-build", - "protobuf-src", - "rayon", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "rustc-demangle", - "semver", - "serde", - "sha2", - "tempfile", - "tracing", - "typetag", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" -dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64", -] - -[[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 = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -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 = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "typetag" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" -dependencies = [ - "erased-serde", - "inventory", - "once_cell", - "serde", - "typetag-impl", -] - -[[package]] -name = "typetag-impl" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vek" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" -dependencies = [ - "approx", - "num-integer", - "num-traits", - "rustc_version", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", - "flate2", -] diff --git a/hash/risc0/inner_proof/Cargo.toml b/hash/risc0/inner_proof/Cargo.toml deleted file mode 100644 index c935ed6..0000000 --- a/hash/risc0/inner_proof/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "inner_proof" -version = "0.1.0" -edition = "2021" - -[dependencies] -inner_proof-methods = { path = "methods" } -risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } -serde = "1.0" -rand = "0.8.3" - - -[features] -cuda = ["risc0-zkvm/cuda"] -default = [] -metal = ["risc0-zkvm/metal"] -prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/inner_proof/methods/Cargo.toml b/hash/risc0/inner_proof/methods/Cargo.toml deleted file mode 100644 index b187021..0000000 --- a/hash/risc0/inner_proof/methods/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "inner_proof-methods" -version = "0.1.0" -edition = "2021" - -[build-dependencies] -risc0-build = { path = "../../external/risc0/risc0/build" } - -[package.metadata.risc0] -methods = ["guest"] diff --git a/hash/risc0/inner_proof/methods/build.rs b/hash/risc0/inner_proof/methods/build.rs deleted file mode 100644 index a4aa256..0000000 --- a/hash/risc0/inner_proof/methods/build.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -fn main() { - risc0_build::embed_methods(); -} diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.lock b/hash/risc0/inner_proof/methods/guest/Cargo.lock deleted file mode 100644 index da9ea78..0000000 --- a/hash/risc0/inner_proof/methods/guest/Cargo.lock +++ /dev/null @@ -1,791 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", - "itertools", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bytemuck" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -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 = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "inner_proof_method" -version = "0.1.0" -dependencies = [ - "risc0-zkvm", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "libc" -version = "0.2.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "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" - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "digest", - "hex", - "paste", - "rand_core", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bytemuck", - "cfg-if", - "getrandom", - "hex", - "human-repr", - "num-bigint", - "num-derive", - "num-traits", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "semver", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "semver" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" - -[[package]] -name = "serde" -version = "1.0.171" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.171" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "zerocopy" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.toml b/hash/risc0/inner_proof/methods/guest/Cargo.toml deleted file mode 100644 index faac96e..0000000 --- a/hash/risc0/inner_proof/methods/guest/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "inner_proof_method" -version = "0.1.0" -edition = "2021" - -[workspace] - -[dependencies] -risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", default-features = false, features = ["std"]} diff --git a/hash/risc0/inner_proof/methods/guest/src/main.rs b/hash/risc0/inner_proof/methods/guest/src/main.rs deleted file mode 100644 index 024da98..0000000 --- a/hash/risc0/inner_proof/methods/guest/src/main.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#![no_main] - -use risc0_zkvm::{guest::env, sha, sha::Sha256}; - -risc0_zkvm::guest::entry!(main); - -fn main() { - let data: Vec = env::read(); - let hash = sha::Impl::hash_bytes(&data); - env::commit(&hash) -} - - diff --git a/hash/risc0/inner_proof/methods/src/lib.rs b/hash/risc0/inner_proof/methods/src/lib.rs deleted file mode 100644 index ae9d61e..0000000 --- a/hash/risc0/inner_proof/methods/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/inner_proof/src/lib.rs b/hash/risc0/inner_proof/src/lib.rs deleted file mode 100644 index 1421d60..0000000 --- a/hash/risc0/inner_proof/src/lib.rs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use inner_proof_methods::INNER_PROOF_METHOD_ELF; -use risc0_zkvm::{default_prover, ExecutorEnv, Receipt}; -use risc0_zkvm::{ sha}; -use rand::Rng; - - -pub fn generate_bytes(size: u32) -> Vec { - let mut rng = rand::thread_rng(); - (0..size).map(|_| rng.gen()).collect() -} - -pub fn sha_bench(size: u32) -> (Receipt, sha::Digest) { - - let input = generate_bytes(size); - - let env = ExecutorEnv::builder() - .write(&input) - .unwrap() - .build() - .unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, INNER_PROOF_METHOD_ELF).unwrap(); - - let _output: sha::Digest = receipt.journal.decode().expect( - "cannot deserialise", - ); - - (receipt, _output) -} \ No newline at end of file diff --git a/hash/risc0/inner_proof/src/main.rs b/hash/risc0/inner_proof/src/main.rs deleted file mode 100644 index 40a3668..0000000 --- a/hash/risc0/inner_proof/src/main.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use inner_proof::sha_bench; -use inner_proof_methods::INNER_PROOF_METHOD_ID; - - -fn main() { - let (receipt, _) = sha_bench(32); - - // Verify receipt, panic if it's wrong - receipt.verify(INNER_PROOF_METHOD_ID).expect( - "cannot verify", - ); -} From 942166d1bb3f9fd3c1e7cdbd4146b4790bfbbcb7 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 22 Jan 2024 13:12:10 +0530 Subject: [PATCH 16/31] proof composition initial commit --- hash/risc0/composition/Cargo.lock | 2795 +++++++++++++++++ hash/risc0/composition/Cargo.toml | 16 + hash/risc0/composition/methods/Cargo.toml | 10 + hash/risc0/composition/methods/build.rs | 17 + .../composition/methods/guest/Cargo.lock | 1100 +++++++ .../composition/methods/guest/Cargo.toml | 11 + .../composition/methods/guest/src/main.rs | 26 + hash/risc0/composition/methods/src/lib.rs | 15 + hash/risc0/composition/src/main.rs | 50 + hash/risc0/inner_proof/Cargo.lock | 2778 ++++++++++++++++ hash/risc0/inner_proof/Cargo.toml | 17 + hash/risc0/inner_proof/methods/Cargo.toml | 10 + hash/risc0/inner_proof/methods/build.rs | 3 + .../inner_proof/methods/guest/Cargo.lock | 791 +++++ .../inner_proof/methods/guest/Cargo.toml | 9 + .../inner_proof/methods/guest/src/main.rs | 13 + hash/risc0/inner_proof/methods/src/lib.rs | 1 + hash/risc0/inner_proof/src/lib.rs | 33 + hash/risc0/inner_proof/src/main.rs | 24 + 19 files changed, 7719 insertions(+) create mode 100644 hash/risc0/composition/Cargo.lock create mode 100644 hash/risc0/composition/Cargo.toml create mode 100644 hash/risc0/composition/methods/Cargo.toml create mode 100644 hash/risc0/composition/methods/build.rs create mode 100644 hash/risc0/composition/methods/guest/Cargo.lock create mode 100644 hash/risc0/composition/methods/guest/Cargo.toml create mode 100644 hash/risc0/composition/methods/guest/src/main.rs create mode 100644 hash/risc0/composition/methods/src/lib.rs create mode 100644 hash/risc0/composition/src/main.rs create mode 100644 hash/risc0/inner_proof/Cargo.lock create mode 100644 hash/risc0/inner_proof/Cargo.toml create mode 100644 hash/risc0/inner_proof/methods/Cargo.toml create mode 100644 hash/risc0/inner_proof/methods/build.rs create mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.lock create mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.toml create mode 100644 hash/risc0/inner_proof/methods/guest/src/main.rs create mode 100644 hash/risc0/inner_proof/methods/src/lib.rs create mode 100644 hash/risc0/inner_proof/src/lib.rs create mode 100644 hash/risc0/inner_proof/src/main.rs diff --git a/hash/risc0/composition/Cargo.lock b/hash/risc0/composition/Cargo.lock new file mode 100644 index 0000000..9e5e2c8 --- /dev/null +++ b/hash/risc0/composition/Cargo.lock @@ -0,0 +1,2795 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[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.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "cpp_demangle", + "fallible-iterator", + "gimli", + "memmap2", + "object", + "rustc-demangle", + "smallvec", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools 0.10.5", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "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.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[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 = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[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 = "bonsai-sdk" +version = "0.6.0-rc.2" +dependencies = [ + "reqwest", + "serde", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "composition" +version = "0.1.0" +dependencies = [ + "composition-methods", + "inner_proof", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "composition-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[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-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpp_demangle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +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-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core", + "subtle", +] + +[[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 = "cust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "cust_core", + "cust_derive", + "cust_raw", + "find_cuda_helper", +] + +[[package]] +name = "cust_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" +dependencies = [ + "cust_derive", + "glam", + "mint", + "vek", +] + +[[package]] +name = "cust_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cust_raw" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] + +[[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 = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[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", + "windows-sys 0.48.0", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "downloader" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" +dependencies = [ + "digest", + "futures", + "rand", + "reqwest", + "thiserror", + "tokio", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find_cuda_helper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" +dependencies = [ + "glob", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[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.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "stable_deref_trait", +] + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +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", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "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", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "inner_proof" +version = "0.1.0" +dependencies = [ + "inner_proof-methods", + "rand", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "inner_proof-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "inventory" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy-regex" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.48", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "metal" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", + "rayon", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "flate2", + "memchr", + "ruzstd", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.48", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[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" +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", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-build-kernel" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "directories", + "hex", + "sha2", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "cust", + "downloader", + "metal", + "rand", + "rayon", + "risc0-circuit-recursion-sys", + "risc0-core", + "risc0-zkp", + "sha2", + "tracing", + "zip", +] + +[[package]] +name = "risc0-circuit-recursion-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cust", + "metal", + "rand", + "rayon", + "risc0-circuit-rv32im-sys", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-sppark" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "risc0-sys" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "cust", + "risc0-build-kernel", + "risc0-sppark", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "cust", + "digest", + "ff", + "hex", + "lazy_static", + "metal", + "ndarray", + "paste", + "rand", + "rand_core", + "rayon", + "risc0-core", + "risc0-sys", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "addr2line", + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bincode", + "bonsai-sdk", + "bytemuck", + "bytes", + "cfg-if", + "crypto-bigint", + "elf", + "getrandom", + "hex", + "human-repr", + "lazy-regex", + "num-bigint 0.4.4", + "num-derive", + "num-traits", + "prost", + "prost-build", + "protobuf-src", + "rayon", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "rustc-demangle", + "semver", + "serde", + "sha2", + "tempfile", + "tracing", + "typetag", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[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 = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +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 = "tokio" +version = "1.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typetag" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vek" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[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.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" + +[[package]] +name = "web-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] diff --git a/hash/risc0/composition/Cargo.toml b/hash/risc0/composition/Cargo.toml new file mode 100644 index 0000000..9dd76d2 --- /dev/null +++ b/hash/risc0/composition/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "composition" +version = "0.1.0" +edition = "2021" + +[dependencies] +composition-methods = { path = "methods" } +inner_proof = { path = "../inner_proof" } +risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } +serde = "1.0" + +[features] +cuda = ["risc0-zkvm/cuda"] +default = [] +metal = ["risc0-zkvm/metal"] +prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/composition/methods/Cargo.toml b/hash/risc0/composition/methods/Cargo.toml new file mode 100644 index 0000000..be6e230 --- /dev/null +++ b/hash/risc0/composition/methods/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "composition-methods" +version = "0.1.0" +edition = "2021" + +[build-dependencies] +risc0-build = { path = "../../external/risc0/risc0/build" } + +[package.metadata.risc0] +methods = ["guest"] diff --git a/hash/risc0/composition/methods/build.rs b/hash/risc0/composition/methods/build.rs new file mode 100644 index 0000000..a4aa256 --- /dev/null +++ b/hash/risc0/composition/methods/build.rs @@ -0,0 +1,17 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +fn main() { + risc0_build::embed_methods(); +} diff --git a/hash/risc0/composition/methods/guest/Cargo.lock b/hash/risc0/composition/methods/guest/Cargo.lock new file mode 100644 index 0000000..4077f62 --- /dev/null +++ b/hash/risc0/composition/methods/guest/Cargo.lock @@ -0,0 +1,1100 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", + "itertools", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "composition-method" +version = "0.1.0" +dependencies = [ + "bytemuck", + "inner_proof-methods", + "risc0-zkvm", +] + +[[package]] +name = "const-oid" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +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 = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "inner_proof-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "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" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "digest", + "hex", + "paste", + "rand_core", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bytemuck", + "cfg-if", + "getrandom", + "hex", + "human-repr", + "num-bigint", + "num-derive", + "num-traits", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "semver" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "thiserror" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "zerocopy" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/hash/risc0/composition/methods/guest/Cargo.toml b/hash/risc0/composition/methods/guest/Cargo.toml new file mode 100644 index 0000000..6dd09c0 --- /dev/null +++ b/hash/risc0/composition/methods/guest/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "composition-method" +version = "0.1.0" +edition = "2021" + +[workspace] + +[dependencies] +risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", features = ["std"], default-features = false } +inner_proof-methods = { path = "../../../inner_proof/methods" } +bytemuck = "1.14" diff --git a/hash/risc0/composition/methods/guest/src/main.rs b/hash/risc0/composition/methods/guest/src/main.rs new file mode 100644 index 0000000..3d2cecf --- /dev/null +++ b/hash/risc0/composition/methods/guest/src/main.rs @@ -0,0 +1,26 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use inner_proof_methods::INNER_PROOF_METHOD_ID; +use risc0_zkvm::{guest::env, serde}; +use risc0_zkvm::sha; +fn main() { + + let hash: sha::Digest = env::read(); + + env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash).unwrap()).unwrap(); + + env::commit(&hash); +} + diff --git a/hash/risc0/composition/methods/src/lib.rs b/hash/risc0/composition/methods/src/lib.rs new file mode 100644 index 0000000..ae9d61e --- /dev/null +++ b/hash/risc0/composition/methods/src/lib.rs @@ -0,0 +1,15 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/composition/src/main.rs b/hash/risc0/composition/src/main.rs new file mode 100644 index 0000000..470bfe7 --- /dev/null +++ b/hash/risc0/composition/src/main.rs @@ -0,0 +1,50 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use composition_methods::{COMPOSITION_METHOD_ELF, COMPOSITION_METHOD_ID}; +use inner_proof::sha_bench; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use risc0_zkvm::sha; +use std::time::Instant; + +fn main() { + + let (hash_receipt, hash) = sha_bench(32); + + let t0 = Instant::now(); + + let env = ExecutorEnv::builder() + // add_assumption makes the receipt to be verified available to the prover. + .add_assumption(hash_receipt) + .write(&hash) + .unwrap() + .build() + .unwrap(); + + let t1 = t0.elapsed(); + + let receipt = default_prover().prove(env, COMPOSITION_METHOD_ELF).unwrap(); + + let t2 = t0.elapsed(); + + receipt.verify(COMPOSITION_METHOD_ID).unwrap(); + + let t3 = t0.elapsed(); + + let hash: sha::Digest = receipt.journal.decode().unwrap(); + eprintln!("hash: {:?}", hash); + eprintln!("ExecutorEnv Builder time: {:?}", t1); + eprintln!("Proof generation + receiving receipt time: {:?}", t2 - t1); + eprintln!("Verification time: {:?}", t3 - t2); +} diff --git a/hash/risc0/inner_proof/Cargo.lock b/hash/risc0/inner_proof/Cargo.lock new file mode 100644 index 0000000..943cc8f --- /dev/null +++ b/hash/risc0/inner_proof/Cargo.lock @@ -0,0 +1,2778 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[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.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "cpp_demangle", + "fallible-iterator", + "gimli", + "memmap2", + "object", + "rustc-demangle", + "smallvec", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools 0.10.5", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "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.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "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.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[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 = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[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 = "bonsai-sdk" +version = "0.6.0-rc.2" +dependencies = [ + "reqwest", + "serde", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[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-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpp_demangle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +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-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core", + "subtle", +] + +[[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 = "cust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "cust_core", + "cust_derive", + "cust_raw", + "find_cuda_helper", +] + +[[package]] +name = "cust_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" +dependencies = [ + "cust_derive", + "glam", + "mint", + "vek", +] + +[[package]] +name = "cust_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cust_raw" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] + +[[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 = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[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", + "windows-sys 0.48.0", +] + +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "downloader" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" +dependencies = [ + "digest", + "futures", + "rand", + "reqwest", + "thiserror", + "tokio", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find_cuda_helper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" +dependencies = [ + "glob", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[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.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "stable_deref_trait", +] + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +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", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "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", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "inner_proof" +version = "0.1.0" +dependencies = [ + "inner_proof-methods", + "rand", + "risc0-zkvm", + "serde", +] + +[[package]] +name = "inner_proof-methods" +version = "0.1.0" +dependencies = [ + "risc0-build", +] + +[[package]] +name = "inventory" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[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.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy-regex" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.48", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "metal" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", + "rayon", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "flate2", + "memchr", + "ruzstd", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.48", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[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" +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", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cargo_metadata", + "docker-generate", + "risc0-binfmt", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "risc0-build-kernel" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "directories", + "hex", + "sha2", + "tempfile", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "cust", + "downloader", + "metal", + "rand", + "rayon", + "risc0-circuit-recursion-sys", + "risc0-core", + "risc0-zkp", + "sha2", + "tracing", + "zip", +] + +[[package]] +name = "risc0-circuit-recursion-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "cust", + "metal", + "rand", + "rayon", + "risc0-circuit-rv32im-sys", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im-sys" +version = "0.20.0-rc.2" +dependencies = [ + "glob", + "risc0-build-kernel", + "risc0-core", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-sppark" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" +dependencies = [ + "cc", + "which", +] + +[[package]] +name = "risc0-sys" +version = "0.20.0-rc.2" +dependencies = [ + "cc", + "cust", + "risc0-build-kernel", + "risc0-sppark", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "cust", + "digest", + "ff", + "hex", + "lazy_static", + "metal", + "ndarray", + "paste", + "rand", + "rand_core", + "rayon", + "risc0-core", + "risc0-sys", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "addr2line", + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bincode", + "bonsai-sdk", + "bytemuck", + "bytes", + "cfg-if", + "crypto-bigint", + "elf", + "getrandom", + "hex", + "human-repr", + "lazy-regex", + "num-bigint 0.4.4", + "num-derive", + "num-traits", + "prost", + "prost-build", + "protobuf-src", + "rayon", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "rustc-demangle", + "semver", + "serde", + "sha2", + "tempfile", + "tracing", + "typetag", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[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 = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +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 = "tokio" +version = "1.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typetag" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vek" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[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.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" + +[[package]] +name = "web-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] diff --git a/hash/risc0/inner_proof/Cargo.toml b/hash/risc0/inner_proof/Cargo.toml new file mode 100644 index 0000000..c935ed6 --- /dev/null +++ b/hash/risc0/inner_proof/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "inner_proof" +version = "0.1.0" +edition = "2021" + +[dependencies] +inner_proof-methods = { path = "methods" } +risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } +serde = "1.0" +rand = "0.8.3" + + +[features] +cuda = ["risc0-zkvm/cuda"] +default = [] +metal = ["risc0-zkvm/metal"] +prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/inner_proof/methods/Cargo.toml b/hash/risc0/inner_proof/methods/Cargo.toml new file mode 100644 index 0000000..b187021 --- /dev/null +++ b/hash/risc0/inner_proof/methods/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "inner_proof-methods" +version = "0.1.0" +edition = "2021" + +[build-dependencies] +risc0-build = { path = "../../external/risc0/risc0/build" } + +[package.metadata.risc0] +methods = ["guest"] diff --git a/hash/risc0/inner_proof/methods/build.rs b/hash/risc0/inner_proof/methods/build.rs new file mode 100644 index 0000000..08a8a4e --- /dev/null +++ b/hash/risc0/inner_proof/methods/build.rs @@ -0,0 +1,3 @@ +fn main() { + risc0_build::embed_methods(); +} diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.lock b/hash/risc0/inner_proof/methods/guest/Cargo.lock new file mode 100644 index 0000000..da9ea78 --- /dev/null +++ b/hash/risc0/inner_proof/methods/guest/Cargo.lock @@ -0,0 +1,791 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "sha2", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", + "itertools", + "num-traits", + "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", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytemuck" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +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 = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elf" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "human-repr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" + +[[package]] +name = "inner_proof_method" +version = "0.1.0" +dependencies = [ + "risc0-zkvm", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "libc" +version = "0.2.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "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" + +[[package]] +name = "risc0-binfmt" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "elf", + "risc0-zkp", + "risc0-zkvm-platform", + "serde", + "tracing", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "bytemuck", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "rand_core", +] + +[[package]] +name = "risc0-zkp" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "blake2", + "bytemuck", + "digest", + "hex", + "paste", + "rand_core", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "0.20.0-rc.2" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-groth16", + "ark-serialize", + "bytemuck", + "cfg-if", + "getrandom", + "hex", + "human-repr", + "num-bigint", + "num-derive", + "num-traits", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "0.20.0-rc.2" +dependencies = [ + "bytemuck", + "getrandom", + "libm", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "semver" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" + +[[package]] +name = "serde" +version = "1.0.171" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.171" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[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 = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "zerocopy" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.toml b/hash/risc0/inner_proof/methods/guest/Cargo.toml new file mode 100644 index 0000000..faac96e --- /dev/null +++ b/hash/risc0/inner_proof/methods/guest/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "inner_proof_method" +version = "0.1.0" +edition = "2021" + +[workspace] + +[dependencies] +risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", default-features = false, features = ["std"]} diff --git a/hash/risc0/inner_proof/methods/guest/src/main.rs b/hash/risc0/inner_proof/methods/guest/src/main.rs new file mode 100644 index 0000000..2da5528 --- /dev/null +++ b/hash/risc0/inner_proof/methods/guest/src/main.rs @@ -0,0 +1,13 @@ +#![no_main] + +use risc0_zkvm::{guest::env, sha, sha::Sha256}; + +risc0_zkvm::guest::entry!(main); + +fn main() { + let data: Vec = env::read(); + let hash = sha::Impl::hash_bytes(&data); + env::commit(&hash) +} + + diff --git a/hash/risc0/inner_proof/methods/src/lib.rs b/hash/risc0/inner_proof/methods/src/lib.rs new file mode 100644 index 0000000..1bdb308 --- /dev/null +++ b/hash/risc0/inner_proof/methods/src/lib.rs @@ -0,0 +1 @@ +include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/inner_proof/src/lib.rs b/hash/risc0/inner_proof/src/lib.rs new file mode 100644 index 0000000..902f1ad --- /dev/null +++ b/hash/risc0/inner_proof/src/lib.rs @@ -0,0 +1,33 @@ +use inner_proof_methods::INNER_PROOF_METHOD_ELF; +use risc0_zkvm::{default_prover, ExecutorEnv, Receipt}; +use risc0_zkvm::{ sha}; +use rand::Rng; + + +pub fn generate_bytes(size: u32) -> Vec { + let mut rng = rand::thread_rng(); + (0..size).map(|_| rng.gen()).collect() +} + +pub fn sha_bench(size: u32) -> (Receipt, sha::Digest) { + + let input = generate_bytes(size); + + let env = ExecutorEnv::builder() + .write(&input) + .unwrap() + .build() + .unwrap(); + + // Obtain the default prover. + let prover = default_prover(); + + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove(env, INNER_PROOF_METHOD_ELF).unwrap(); + + let _output: sha::Digest = receipt.journal.decode().expect( + "cannot deserialise", + ); + + (receipt, _output) +} \ No newline at end of file diff --git a/hash/risc0/inner_proof/src/main.rs b/hash/risc0/inner_proof/src/main.rs new file mode 100644 index 0000000..50c6f19 --- /dev/null +++ b/hash/risc0/inner_proof/src/main.rs @@ -0,0 +1,24 @@ +// Copyright 2024 RISC Zero, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +use inner_proof::sha_bench; +use inner_proof_methods::INNER_PROOF_METHOD_ID; + +fn main() { + let (receipt, _output) = sha_bench(32); + + // Verify receipt, panic if it's wrong + receipt.verify(INNER_PROOF_METHOD_ID).expect( + "cannot verify", + ); + + eprintln!("hash: {:?}", _output); +} From 79f1d2ae1364a2818965b09aa0720471c979ed60 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Tue, 23 Jan 2024 12:59:50 +0530 Subject: [PATCH 17/31] Cargo.lock ignored --- .gitignore | 1 + hash/risc0/bench/Cargo.lock | 2349 --------------------- hash/risc0/bench/methods/guest/Cargo.lock | 1177 ----------- 3 files changed, 1 insertion(+), 3526 deletions(-) delete mode 100644 hash/risc0/bench/Cargo.lock delete mode 100644 hash/risc0/bench/methods/guest/Cargo.lock diff --git a/.gitignore b/.gitignore index 9479611..0bc5b19 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build target a.out +Cargo.lock \ No newline at end of file diff --git a/hash/risc0/bench/Cargo.lock b/hash/risc0/bench/Cargo.lock deleted file mode 100644 index 4ab16e5..0000000 --- a/hash/risc0/bench/Cargo.lock +++ /dev/null @@ -1,2349 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2 0.10.8", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "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", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "autotools" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" -dependencies = [ - "cc", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" - -[[package]] -name = "benchmark" -version = "0.1.0" -dependencies = [ - "ark-ff", - "ark-serialize", - "benchmark_methods", - "hex", - "rand", - "risc0-core", - "risc0-zkvm", - "serde", - "sha2 0.10.6", - "zkhash", -] - -[[package]] -name = "benchmark_methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "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.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[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 = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" -dependencies = [ - "arrayref", - "arrayvec", - "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 = "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", - "subtle", -] - -[[package]] -name = "bonsai-sdk" -version = "0.6.0-rc.2" -dependencies = [ - "reqwest", - "serde", - "thiserror", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" - -[[package]] -name = "constant_time_eq" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" - -[[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-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "cpufeatures" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" -dependencies = [ - "cfg-if", -] - -[[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 = "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 = "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 = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6e7d85896690fe195447717af8eceae0593ac2196fd42fe88c184e904406ce" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "bitvec", - "rand_core", - "subtle", -] - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "rand_core", - "subtle", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures-channel" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" - -[[package]] -name = "futures-io" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" - -[[package]] -name = "futures-sink" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" - -[[package]] -name = "futures-task" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" - -[[package]] -name = "futures-util" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" -dependencies = [ - "futures-core", - "futures-io", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[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", - "subtle", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff 0.13.0", - "rand_core", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "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", - "rayon", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "hyper" -version = "0.14.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.4.10", - "tokio", - "tower-service", - "tracing", - "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", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" - -[[package]] -name = "js-sys" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" -dependencies = [ - "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", - "subtle", -] - -[[package]] -name = "keccak" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin 0.5.2", -] - -[[package]] -name = "libc" -version = "0.2.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "linux-raw-sys" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memchr" -version = "2.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memuse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[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 = "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", - "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.0", - "group 0.13.0", - "lazy_static", - "rand", - "static_assertions", - "subtle", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" -dependencies = [ - "proc-macro2", - "syn 2.0.39", -] - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" -dependencies = [ - "bytes", - "heck", - "itertools 0.11.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.39", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" -dependencies = [ - "anyhow", - "itertools 0.11.0", - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "prost-types" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf-src" -version = "1.1.0+21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" -dependencies = [ - "autotools", -] - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[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" -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", -] - -[[package]] -name = "rayon" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "reqwest" -version = "0.11.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" -dependencies = [ - "cc", - "getrandom", - "libc", - "spin 0.9.8", - "untrusted", - "windows-sys", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "digest", - "hex", - "paste", - "rand_core", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2 0.10.8", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bincode", - "bonsai-sdk", - "bytemuck", - "bytes", - "cfg-if", - "getrandom", - "hex", - "human-repr", - "num-bigint", - "num-derive", - "num-traits", - "prost", - "prost-build", - "protobuf-src", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "semver", - "serde", - "sha2 0.10.8", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" -dependencies = [ - "bitflags 2.4.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64", -] - -[[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 = "ryu" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.192" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.192" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "serde_json" -version = "1.0.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.6-risczero.0#7fd6900c4f637bd15ee2642dfa77110f8f1ad065" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys", -] - -[[package]] -name = "thiserror" -version = "1.0.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -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 = "tokio" -version = "1.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2 0.5.5", - "windows-sys", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-bidi" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.39", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" - -[[package]] -name = "web-sys" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zkhash" -version = "0.2.0" -source = "git+https://github.com/HorizenLabs/poseidon2.git#bb476b9ca38198cf5092487283c8b8c5d4317c4e" -dependencies = [ - "ark-ff", - "ark-std", - "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", - "serde", - "sha2 0.10.8", - "sha3", - "subtle", -] diff --git a/hash/risc0/bench/methods/guest/Cargo.lock b/hash/risc0/bench/methods/guest/Cargo.lock deleted file mode 100644 index e1880c4..0000000 --- a/hash/risc0/bench/methods/guest/Cargo.lock +++ /dev/null @@ -1,1177 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "anyhow" -version = "1.0.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2 0.10.8", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", - "itertools", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "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", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[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 = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "blake2b_simd" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" -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 = "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", - "subtle", -] - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" - -[[package]] -name = "constant_time_eq" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" - -[[package]] -name = "cpufeatures" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" -dependencies = [ - "cfg-if", -] - -[[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 = "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 = "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 = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6e7d85896690fe195447717af8eceae0593ac2196fd42fe88c184e904406ce" - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "bitvec", - "rand_core", - "subtle", -] - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "rand_core", - "subtle", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[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", - "subtle", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff 0.13.0", - "rand_core", - "subtle", -] - -[[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", - "rayon", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[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", - "subtle", -] - -[[package]] -name = "keccak" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memuse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" - -[[package]] -name = "method" -version = "0.1.0" -dependencies = [ - "ark-ff", - "ark-serialize", - "blake3", - "lazy_static", - "rand", - "risc0-core", - "risc0-zkp", - "risc0-zkvm", - "sha2 0.10.6", - "sha3", - "zkhash", -] - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[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 = "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", - "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.0", - "group 0.13.0", - "lazy_static", - "rand", - "static_assertions", - "subtle", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[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" -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", -] - -[[package]] -name = "rayon" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "digest", - "hex", - "paste", - "rand_core", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2 0.10.8", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bytemuck", - "cfg-if", - "getrandom", - "hex", - "human-repr", - "num-bigint", - "num-derive", - "num-traits", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "semver", - "serde", - "sha2 0.10.8", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "semver" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" - -[[package]] -name = "serde" -version = "1.0.192" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.192" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.6-risczero.0#7fd6900c4f637bd15ee2642dfa77110f8f1ad065" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zkhash" -version = "0.2.0" -source = "git+https://github.com/HorizenLabs/poseidon2.git#bb476b9ca38198cf5092487283c8b8c5d4317c4e" -dependencies = [ - "ark-ff", - "ark-std", - "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", - "serde", - "sha2 0.10.8", - "sha3", - "subtle", -] From 193737eabd26c41eab95a808d80a9e58100b9e4d Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Tue, 23 Jan 2024 13:50:41 +0530 Subject: [PATCH 18/31] seperated accelerated and non-accelerated versions of sha256 --- hash/risc0/bench/bench_tree.cfg | 4 +-- hash/risc0/bench/run_tree.sh | 8 ++--- hash/risc0/bench/src/benches/mod.rs | 1 + hash/risc0/bench/src/benches/sha256.rs | 24 +-------------- .../bench/src/benches/sha256_accelerated.rs | 30 +++++++++++++++++++ hash/risc0/bench/src/main.rs | 9 +++++- 6 files changed, 46 insertions(+), 30 deletions(-) create mode 100644 hash/risc0/bench/src/benches/sha256_accelerated.rs diff --git a/hash/risc0/bench/bench_tree.cfg b/hash/risc0/bench/bench_tree.cfg index 529f0fb..f6d767e 100644 --- a/hash/risc0/bench/bench_tree.cfg +++ b/hash/risc0/bench/bench_tree.cfg @@ -2,10 +2,10 @@ name: "Hashes benchmarking using risc0 prover" author: timeout: 1000 params: - [ HASH_TYPE: [ "poseidon2_babybear", "poseidon2_babybear_native", "poseidon2_bn128"] + [ HASH_TYPE_TREE: [ "poseidon2_babybear", "poseidon2_babybear_native", "poseidon2_bn128"] , TREE_DEPTH: [ 2, 4, 8, 16 ] ] -tags: risc0, $HASH_TYPE +tags: risc0, $HASH_TYPE_TREE comments: The benchmarks includes for poseidon2(merkle hashing) over bn128 and babybear. the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/run_tree.sh b/hash/risc0/bench/run_tree.sh index cdd865e..81a0750 100755 --- a/hash/risc0/bench/run_tree.sh +++ b/hash/risc0/bench/run_tree.sh @@ -1,6 +1,6 @@ #!/bin/bash -if [ -z ${ZKBENCH_HASH_TYPE} ]; then -ZKBENCH_HASH_TYPE="poseidon2_babybear_native" +if [ -z ${ZKBENCH_HASH_TYPE_TREE} ]; then +ZKBENCH_HASH_TYPE_TREE="poseidon2_babybear_native" fi if [ -z ${ZKBENCH_TREE_DEPTH} ]; then @@ -8,8 +8,8 @@ ZKBENCH_TREE_DEPTH=2 fi echo "Running benchmarks with the following configurations:" -echo "HASH = $ZKBENCH_HASH_TYPE" +echo "HASH = $ZKBENCH_HASH_TYPE_TREE" echo "Tree Depth = $ZKBENCH_TREE_DEPTH" # Run the benchmarks -./target/release/benchmark $ZKBENCH_HASH_TYPE $ZKBENCH_TREE_DEPTH \ No newline at end of file +./target/release/benchmark $ZKBENCH_HASH_TYPE_TREE $ZKBENCH_TREE_DEPTH \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/mod.rs b/hash/risc0/bench/src/benches/mod.rs index c5bbdea..adeeccf 100644 --- a/hash/risc0/bench/src/benches/mod.rs +++ b/hash/risc0/bench/src/benches/mod.rs @@ -1,4 +1,5 @@ pub mod sha256; +pub mod sha256_accelerated; pub mod keccak; pub mod blake2b; pub mod blake3; diff --git a/hash/risc0/bench/src/benches/sha256.rs b/hash/risc0/bench/src/benches/sha256.rs index cae5b79..1777f56 100644 --- a/hash/risc0/bench/src/benches/sha256.rs +++ b/hash/risc0/bench/src/benches/sha256.rs @@ -1,10 +1,9 @@ use benchmark_methods::{ - SHA256_ELF, SHA256_ID, SHA256_ACCELERATED_ELF, SHA256_ACCELERATED_ID + SHA256_ELF, SHA256_ID }; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::{ sha}; use std::time::Instant; -use hex::encode; pub fn sha_bench(input: Vec) { let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); @@ -30,25 +29,4 @@ pub fn sha_bench(input: Vec) { eprintln!("Hash: {:?}", _output); - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - eprintln!("\n------RustCrypto sha hashing(accelerated)------\n"); - // Obtain the default prover. - let prover = default_prover(); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, SHA256_ACCELERATED_ELF).unwrap(); - let elapsed_time = start_time.elapsed(); - - // verify your receipt - receipt.verify(SHA256_ACCELERATED_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - let _output: [u8;32] = receipt.journal.decode().unwrap(); - let hash = encode(_output); - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - - eprintln!("Hash: {:?}", hash); } \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/sha256_accelerated.rs b/hash/risc0/bench/src/benches/sha256_accelerated.rs new file mode 100644 index 0000000..6233cae --- /dev/null +++ b/hash/risc0/bench/src/benches/sha256_accelerated.rs @@ -0,0 +1,30 @@ +use benchmark_methods::{ + SHA256_ACCELERATED_ELF, SHA256_ACCELERATED_ID +}; +use risc0_zkvm::{default_prover, ExecutorEnv}; +use std::time::Instant; +use hex::encode; +pub fn sha_accelerated_bench(input: Vec) { + + let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); + eprintln!("\n------RustCrypto sha hashing(accelerated)------\n"); + // Obtain the default prover. + let prover = default_prover(); + + let start_time = Instant::now(); + // Produce a receipt by proving the specified ELF binary. + let receipt = prover.prove(env, SHA256_ACCELERATED_ELF).unwrap(); + let elapsed_time = start_time.elapsed(); + + // verify your receipt + receipt.verify(SHA256_ACCELERATED_ID).unwrap(); + + let elapsed_time2 = start_time.elapsed(); + + let _output: [u8;32] = receipt.journal.decode().unwrap(); + let hash = encode(_output); + eprintln!("Total time: {:?}", elapsed_time2); + eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); + + eprintln!("Hash: {:?}", hash); +} \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs index bee3f3a..c5ba0f7 100644 --- a/hash/risc0/bench/src/main.rs +++ b/hash/risc0/bench/src/main.rs @@ -1,6 +1,7 @@ mod benches; use benches::{ sha256::sha_bench, + sha256_accelerated::sha_accelerated_bench, keccak::keccak_bench, blake2b::blake2b_bench, blake3::blake3_bench, @@ -22,7 +23,7 @@ fn main() { let args: Vec = std::env::args().collect(); if args.len() != 3 { - println!("Wrong number of arguments"); + println!("Wrong number of arguments! The program expects two arguments: and "); // Exit the program with a non-zero exit code process::exit(1); } @@ -37,6 +38,12 @@ fn main() { let input = generate_bytes(size); sha_bench(input.clone()); } + "sha256_accelerated" => { + println!("Accelerated SHA256 Benchmarking: "); + eprintln!("data size(bytes): {:?}", size); + let input = generate_bytes(size); + sha_accelerated_bench(input.clone()); + } "keccak" => { println!("KECCAK Benchmarking: "); eprintln!("data size(bytes): {:?}", size); From d0dda87066ea08fd8dff60d12c5d49120ea79bf6 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Tue, 23 Jan 2024 14:15:53 +0530 Subject: [PATCH 19/31] build.sh and run.sh added in composition/ --- hash/risc0/composition/build.sh | 1 + hash/risc0/composition/run.sh | 1 + 2 files changed, 2 insertions(+) create mode 100755 hash/risc0/composition/build.sh create mode 100755 hash/risc0/composition/run.sh diff --git a/hash/risc0/composition/build.sh b/hash/risc0/composition/build.sh new file mode 100755 index 0000000..7f1b114 --- /dev/null +++ b/hash/risc0/composition/build.sh @@ -0,0 +1 @@ +cargo build --release \ No newline at end of file diff --git a/hash/risc0/composition/run.sh b/hash/risc0/composition/run.sh new file mode 100755 index 0000000..7acdd03 --- /dev/null +++ b/hash/risc0/composition/run.sh @@ -0,0 +1 @@ +./target/release/composition \ No newline at end of file From f4b4d6e6e6c12cc951d217f933e84efca98d554e Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Thu, 25 Jan 2024 23:35:41 +0530 Subject: [PATCH 20/31] data size passed as environment variable argument in composition --- .gitmodules | 1 - hash/risc0/README.md | 7 +++++++ hash/risc0/composition/Cargo.lock | 4 ++-- .../risc0/composition/methods/guest/src/main.rs | 3 ++- hash/risc0/composition/run.sh | 2 +- hash/risc0/composition/src/main.rs | 17 ++++++++++++++++- hash/risc0/external/risc0 | 2 +- hash/risc0/inner_proof/src/main.rs | 14 +++++++++++++- 8 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 hash/risc0/README.md diff --git a/.gitmodules b/.gitmodules index 27593ef..e579aae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,4 +16,3 @@ [submodule "hash/risc0/external/risc0"] path = hash/risc0/external/risc0 url = https://github.com/risc0/risc0.git - branch = release-0.20 diff --git a/hash/risc0/README.md b/hash/risc0/README.md new file mode 100644 index 0000000..edaa9ab --- /dev/null +++ b/hash/risc0/README.md @@ -0,0 +1,7 @@ +Benchmarking inside risc'0 zkvm +-------------------------------- + +- `external` folder contains risc0 as a git submodule. +- `bench` folder contains the benchmarking for different hash functions. Go to the `bench/README.md` for more details. +- `inner_proof` folder contains methods for generating the Receipt for sha256 which is being used as an inner proof in `composition` +- `composition` folder contains methods of proof composition which uses `inner_proof`. diff --git a/hash/risc0/composition/Cargo.lock b/hash/risc0/composition/Cargo.lock index 9e5e2c8..d2dff75 100644 --- a/hash/risc0/composition/Cargo.lock +++ b/hash/risc0/composition/Cargo.lock @@ -398,9 +398,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] diff --git a/hash/risc0/composition/methods/guest/src/main.rs b/hash/risc0/composition/methods/guest/src/main.rs index 3d2cecf..1f30186 100644 --- a/hash/risc0/composition/methods/guest/src/main.rs +++ b/hash/risc0/composition/methods/guest/src/main.rs @@ -18,8 +18,9 @@ use risc0_zkvm::sha; fn main() { let hash: sha::Digest = env::read(); - + let hash2: sha::Digest = env::read(); env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash).unwrap()).unwrap(); + env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash2).unwrap()).unwrap(); env::commit(&hash); } diff --git a/hash/risc0/composition/run.sh b/hash/risc0/composition/run.sh index 7acdd03..bd6dfec 100755 --- a/hash/risc0/composition/run.sh +++ b/hash/risc0/composition/run.sh @@ -1 +1 @@ -./target/release/composition \ No newline at end of file +./target/release/composition 32 \ No newline at end of file diff --git a/hash/risc0/composition/src/main.rs b/hash/risc0/composition/src/main.rs index 470bfe7..9a6a17b 100644 --- a/hash/risc0/composition/src/main.rs +++ b/hash/risc0/composition/src/main.rs @@ -17,18 +17,33 @@ use inner_proof::sha_bench; use risc0_zkvm::{default_prover, ExecutorEnv}; use risc0_zkvm::sha; use std::time::Instant; +use std::process; fn main() { - let (hash_receipt, hash) = sha_bench(32); + let args: Vec = std::env::args().collect(); + if args.len() != 2 { + println!("Wrong number of arguments! The program expects one arguments: "); + // Exit the program with a non-zero exit code + process::exit(1); + } + + let data_size = args[1].parse::().unwrap(); + let t0 = Instant::now(); + let (hash_receipt, hash) = sha_bench(data_size.try_into().unwrap()); + let (hash_receipt2, hash2) = sha_bench(data_size.try_into().unwrap()); + let env = ExecutorEnv::builder() // add_assumption makes the receipt to be verified available to the prover. .add_assumption(hash_receipt) .write(&hash) .unwrap() + .add_assumption(hash_receipt2) + .write(&hash2) + .unwrap() .build() .unwrap(); diff --git a/hash/risc0/external/risc0 b/hash/risc0/external/risc0 index a4d2b5d..1742ef8 160000 --- a/hash/risc0/external/risc0 +++ b/hash/risc0/external/risc0 @@ -1 +1 @@ -Subproject commit a4d2b5d95685554ee34a39d60b40fa2c5deff57a +Subproject commit 1742ef8098d246871055501a0559811c9a8fece4 diff --git a/hash/risc0/inner_proof/src/main.rs b/hash/risc0/inner_proof/src/main.rs index 50c6f19..0bb1c0d 100644 --- a/hash/risc0/inner_proof/src/main.rs +++ b/hash/risc0/inner_proof/src/main.rs @@ -11,9 +11,21 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. use inner_proof::sha_bench; use inner_proof_methods::INNER_PROOF_METHOD_ID; +use std::process; fn main() { - let (receipt, _output) = sha_bench(32); + + let args: Vec = std::env::args().collect(); + + if args.len() != 2 { + println!("Wrong number of arguments! The program expects two arguments: and "); + // Exit the program with a non-zero exit code + process::exit(1); + } + + let data_size = args[1].parse::().unwrap(); + + let (receipt, _output) = sha_bench(data_size.try_into().unwrap()); // Verify receipt, panic if it's wrong receipt.verify(INNER_PROOF_METHOD_ID).expect( From 09bfd1b8c0954e28141bcc1d5c02874114a94f50 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Wed, 31 Jan 2024 13:01:11 +0530 Subject: [PATCH 21/31] passing string to env::read() --- hash/risc0/composition/methods/guest/src/main.rs | 8 ++++++-- hash/risc0/inner_proof/methods/guest/src/main.rs | 4 ++-- hash/risc0/inner_proof/src/lib.rs | 13 +++++++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/hash/risc0/composition/methods/guest/src/main.rs b/hash/risc0/composition/methods/guest/src/main.rs index 1f30186..c575ece 100644 --- a/hash/risc0/composition/methods/guest/src/main.rs +++ b/hash/risc0/composition/methods/guest/src/main.rs @@ -16,12 +16,16 @@ use inner_proof_methods::INNER_PROOF_METHOD_ID; use risc0_zkvm::{guest::env, serde}; use risc0_zkvm::sha; fn main() { - + let c1 = env::cycle_count(); let hash: sha::Digest = env::read(); let hash2: sha::Digest = env::read(); + let c2 = env::cycle_count(); + env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash).unwrap()).unwrap(); env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash2).unwrap()).unwrap(); - + let c3 = env::cycle_count(); + eprintln!("cycles for input builder: {:?}", c2 - c1); + eprintln!("cycles for inner_proof verification inside guest: {:?}", c3 - c2); env::commit(&hash); } diff --git a/hash/risc0/inner_proof/methods/guest/src/main.rs b/hash/risc0/inner_proof/methods/guest/src/main.rs index 2da5528..28fc0ac 100644 --- a/hash/risc0/inner_proof/methods/guest/src/main.rs +++ b/hash/risc0/inner_proof/methods/guest/src/main.rs @@ -5,8 +5,8 @@ use risc0_zkvm::{guest::env, sha, sha::Sha256}; risc0_zkvm::guest::entry!(main); fn main() { - let data: Vec = env::read(); - let hash = sha::Impl::hash_bytes(&data); + let data: String = env::read(); + let hash = sha::Impl::hash_bytes(&data.as_bytes()); env::commit(&hash) } diff --git a/hash/risc0/inner_proof/src/lib.rs b/hash/risc0/inner_proof/src/lib.rs index 902f1ad..6c6ab88 100644 --- a/hash/risc0/inner_proof/src/lib.rs +++ b/hash/risc0/inner_proof/src/lib.rs @@ -4,9 +4,18 @@ use risc0_zkvm::{ sha}; use rand::Rng; -pub fn generate_bytes(size: u32) -> Vec { +pub fn generate_bytes(size: u32) -> String { let mut rng = rand::thread_rng(); - (0..size).map(|_| rng.gen()).collect() + let random_bytes: Vec = (0..(size/2)).map(|_| rng.gen()).collect(); + + let random_string: String = random_bytes + .iter() + .map(|byte| format!("{:02X}", byte)) // Convert each byte to a two-digit hexadecimal string + .collect(); + + // eprintln!("bytes: {:?}", random_string.as_bytes().len()); + random_string + } pub fn sha_bench(size: u32) -> (Receipt, sha::Digest) { From b1061b8daadad21d5f2f42286c3db79d12df38e9 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Thu, 8 Feb 2024 00:47:08 +0530 Subject: [PATCH 22/31] initial commit for hash benchmarking using plonky2 --- hash/plonky2/Cargo.toml | 10 +++++++++ hash/plonky2/src/main.rs | 47 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 hash/plonky2/Cargo.toml create mode 100644 hash/plonky2/src/main.rs diff --git a/hash/plonky2/Cargo.toml b/hash/plonky2/Cargo.toml new file mode 100644 index 0000000..e68c003 --- /dev/null +++ b/hash/plonky2/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "plonky2" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.79" +plonky2 = "0.1.4" diff --git a/hash/plonky2/src/main.rs b/hash/plonky2/src/main.rs new file mode 100644 index 0000000..241b63e --- /dev/null +++ b/hash/plonky2/src/main.rs @@ -0,0 +1,47 @@ +use anyhow::Result; +use plonky2::field::types::Field; +use plonky2::hash::hash_types::RichField; +use plonky2::field::goldilocks_field::GoldilocksField; +use plonky2::hash::keccak; +use plonky2::hash::keccak::KeccakHash; +use plonky2::hash::poseidon::PoseidonHash; +use plonky2::iop::witness::{PartialWitness, WitnessWrite}; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::plonk::circuit_data::CircuitConfig; +use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, PoseidonGoldilocksConfig}; + +fn main() -> Result<()> { + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + let config = CircuitConfig::standard_recursion_config(); + let mut builder = CircuitBuilder::::new(config); + + // The arithmetic circuit. + let initial = builder.add_virtual_target(); + let hash = builder.hash_or_noop::(vec![initial]); + + // Public inputs are the initial value (provided below) and the result (which is generated). + builder.register_public_input(initial); + builder.register_public_input(hash.elements[0]); + builder.register_public_input(hash.elements[1]); + builder.register_public_input(hash.elements[2]); + builder.register_public_input(hash.elements[3]); + + // Provide initial values. + let mut pw = PartialWitness::new(); + pw.set_target(initial, F::ONE); + + + let data = builder.build::(); + let proof = data.prove(pw)?; + + println!( + "hash of {} is: {}", + proof.public_inputs[0], proof.public_inputs[1] + ); + + data.verify(proof) + +} From cd8dfedacead778db152bf4273c5c008c1968cc0 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Fri, 9 Feb 2024 01:17:56 +0530 Subject: [PATCH 23/31] poseidon hash bench --- hash/plonky2/Cargo.toml | 2 + hash/plonky2/src/bench/mod.rs | 1 + hash/plonky2/src/bench/poseidon.rs | 64 ++++++++++++++++++++++++++++ hash/plonky2/src/main.rs | 67 ++++++++++++------------------ 4 files changed, 93 insertions(+), 41 deletions(-) create mode 100644 hash/plonky2/src/bench/mod.rs create mode 100644 hash/plonky2/src/bench/poseidon.rs diff --git a/hash/plonky2/Cargo.toml b/hash/plonky2/Cargo.toml index e68c003..c7e4e43 100644 --- a/hash/plonky2/Cargo.toml +++ b/hash/plonky2/Cargo.toml @@ -8,3 +8,5 @@ edition = "2021" [dependencies] anyhow = "1.0.79" plonky2 = "0.1.4" +rand = "0.8.3" + diff --git a/hash/plonky2/src/bench/mod.rs b/hash/plonky2/src/bench/mod.rs new file mode 100644 index 0000000..af26fd2 --- /dev/null +++ b/hash/plonky2/src/bench/mod.rs @@ -0,0 +1 @@ +pub mod poseidon; \ No newline at end of file diff --git a/hash/plonky2/src/bench/poseidon.rs b/hash/plonky2/src/bench/poseidon.rs new file mode 100644 index 0000000..706f040 --- /dev/null +++ b/hash/plonky2/src/bench/poseidon.rs @@ -0,0 +1,64 @@ +use anyhow::Result; +use plonky2::field::types::Field; +// use plonky2::hash::hash_types::{HashOutTarget, RichField}; +use plonky2::field::goldilocks_field::GoldilocksField; +// use plonky2::hash::keccak; +// use plonky2::hash::keccak::KeccakHash; +use plonky2::hash::poseidon::PoseidonHash; +use plonky2::iop::witness::{PartialWitness, WitnessWrite}; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::plonk::circuit_data::CircuitConfig; +use plonky2::plonk::config::{/*AlgebraicHasher,*/ GenericConfig, PoseidonGoldilocksConfig}; +use rand::Rng; + +fn generate_data(size: usize) -> Vec { + // let mut rng = rand::thread_rng(); + // (0..size).map(|_| rng.gen()).collect() + + let mut data: Vec = Vec::new(); + for _ in 0..(1< Result<()> { + + let data = generate_data(depth); + + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + let config = CircuitConfig::standard_recursion_config(); + let mut builder = CircuitBuilder::::new(config); + + // The arithmetic circuit. + let initial = builder.add_virtual_targets(data.len()); + + let hash = builder.hash_or_noop::(initial.clone()); + + // Public inputs are the initial value (provided below) and the result (which is generated). + builder.register_public_inputs(initial.clone().as_slice()); + builder.register_public_input(hash.elements[0]); + builder.register_public_input(hash.elements[1]); + builder.register_public_input(hash.elements[2]); + builder.register_public_input(hash.elements[3]); + + // Provide initial values. + let mut pw = PartialWitness::new(); + pw.set_target_arr(initial.as_slice(), data.as_slice()); + + + let data = builder.build::(); + let proof = data.prove(pw)?; + + + data.verify(proof) + +} diff --git a/hash/plonky2/src/main.rs b/hash/plonky2/src/main.rs index 241b63e..a08de49 100644 --- a/hash/plonky2/src/main.rs +++ b/hash/plonky2/src/main.rs @@ -1,47 +1,32 @@ -use anyhow::Result; -use plonky2::field::types::Field; -use plonky2::hash::hash_types::RichField; -use plonky2::field::goldilocks_field::GoldilocksField; -use plonky2::hash::keccak; -use plonky2::hash::keccak::KeccakHash; -use plonky2::hash::poseidon::PoseidonHash; -use plonky2::iop::witness::{PartialWitness, WitnessWrite}; -use plonky2::plonk::circuit_builder::CircuitBuilder; -use plonky2::plonk::circuit_data::CircuitConfig; -use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, PoseidonGoldilocksConfig}; +use std::process; +mod bench; +use bench::poseidon::poseidon_bench; -fn main() -> Result<()> { - const D: usize = 2; - type C = PoseidonGoldilocksConfig; - type F = >::F; +fn main() { + let args: Vec = std::env::args().collect(); - let config = CircuitConfig::standard_recursion_config(); - let mut builder = CircuitBuilder::::new(config); + if args.len() != 3 { + println!("Wrong number of arguments! The program expects two arguments: and "); + // Exit the program with a non-zero exit code + process::exit(1); + } + + let hash_type = &args[1]; + let size = args[2].parse::().unwrap(); - // The arithmetic circuit. - let initial = builder.add_virtual_target(); - let hash = builder.hash_or_noop::(vec![initial]); + match hash_type.as_str() { - // Public inputs are the initial value (provided below) and the result (which is generated). - builder.register_public_input(initial); - builder.register_public_input(hash.elements[0]); - builder.register_public_input(hash.elements[1]); - builder.register_public_input(hash.elements[2]); - builder.register_public_input(hash.elements[3]); + "poseidon" => { + println!("Running Poseidon: "); + eprintln!("Tree Depth: {:?}", size); + let _ = poseidon_bench(size); + } - // Provide initial values. - let mut pw = PartialWitness::new(); - pw.set_target(initial, F::ONE); + _ => { + println!("Wrong Benchmark Name!"); + } + } - - let data = builder.build::(); - let proof = data.prove(pw)?; - - println!( - "hash of {} is: {}", - proof.public_inputs[0], proof.public_inputs[1] - ); - - data.verify(proof) - -} + println!("All Done!"); + +} \ No newline at end of file From 8f98119c3bad49e45a24401214682264e32c3ade Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Fri, 23 Feb 2024 22:22:00 +0530 Subject: [PATCH 24/31] sha256 plonky2 currenlty uses https://github.com/polymerdao/plonky2-sha256 codebase --- hash/plonky2/Cargo.toml | 7 +- hash/plonky2/src/bench/keccak.rs | 25 +++ hash/plonky2/src/bench/mod.rs | 1 - hash/plonky2/src/bench/sha256/ch.rs | 29 +++ hash/plonky2/src/bench/sha256/constants.rs | 24 ++ hash/plonky2/src/bench/sha256/maj.rs | 32 +++ hash/plonky2/src/bench/sha256/rotate.rs | 11 + hash/plonky2/src/bench/sha256/sha.rs | 241 +++++++++++++++++++++ hash/plonky2/src/bench/sha256/shift.rs | 12 + hash/plonky2/src/bench/sha256/sigma.rs | 115 ++++++++++ hash/plonky2/src/bench/sha256/xor3.rs | 26 +++ hash/plonky2/src/main.rs | 30 ++- 12 files changed, 550 insertions(+), 3 deletions(-) create mode 100644 hash/plonky2/src/bench/keccak.rs delete mode 100644 hash/plonky2/src/bench/mod.rs create mode 100644 hash/plonky2/src/bench/sha256/ch.rs create mode 100644 hash/plonky2/src/bench/sha256/constants.rs create mode 100644 hash/plonky2/src/bench/sha256/maj.rs create mode 100644 hash/plonky2/src/bench/sha256/rotate.rs create mode 100644 hash/plonky2/src/bench/sha256/sha.rs create mode 100644 hash/plonky2/src/bench/sha256/shift.rs create mode 100644 hash/plonky2/src/bench/sha256/sigma.rs create mode 100644 hash/plonky2/src/bench/sha256/xor3.rs diff --git a/hash/plonky2/Cargo.toml b/hash/plonky2/Cargo.toml index c7e4e43..615fea1 100644 --- a/hash/plonky2/Cargo.toml +++ b/hash/plonky2/Cargo.toml @@ -6,7 +6,12 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = "1.0.79" +plonky2_u32 ={ git = "https://github.com/0xPolygonZero/plonky2-u32"} +plonky2_field ={ git = "https://github.com/0xPolygonZero/plonky2"} plonky2 = "0.1.4" rand = "0.8.3" +anyhow = "1.0.79" +sha2 = "0.10" + + diff --git a/hash/plonky2/src/bench/keccak.rs b/hash/plonky2/src/bench/keccak.rs new file mode 100644 index 0000000..785e853 --- /dev/null +++ b/hash/plonky2/src/bench/keccak.rs @@ -0,0 +1,25 @@ +// use anyhow::Result; +// use plonky2::field::types::Field; +// use plonky2::gates::poseidon::PoseidonGate; +// use plonky2::hash::hash_types::{HashOutTarget, RichField}; +// use plonky2::field::goldilocks_field::GoldilocksField; +// use plonky2::hash::keccak::{KeccakHash, KeccakPermutation}; +// use plonky2::hash::keccak; +// use plonky2::hash::keccak::KeccakHash; +// use plonky2::hash::poseidon::PoseidonHash; +// use plonky2::iop::witness::{PartialWitness, WitnessWrite}; +// use plonky2::plonk::circuit_builder::CircuitBuilder; +// use plonky2::plonk::circuit_data::CircuitConfig; +// use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, PoseidonGoldilocksConfig, KeccakGoldilocksConfig}; +// use rand::Rng; +// use plonky2::iop::target::Target; +// use plonky2::iop::target::BoolTarget; +// use plonky2::field::extension::Extendable; +// use std::marker::PhantomData; + + + +pub fn keccak_bench(size: usize) { + + +} diff --git a/hash/plonky2/src/bench/mod.rs b/hash/plonky2/src/bench/mod.rs deleted file mode 100644 index af26fd2..0000000 --- a/hash/plonky2/src/bench/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod poseidon; \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/ch.rs b/hash/plonky2/src/bench/sha256/ch.rs new file mode 100644 index 0000000..ce26f53 --- /dev/null +++ b/hash/plonky2/src/bench/sha256/ch.rs @@ -0,0 +1,29 @@ +// use plonky2::{hash::hash_types::HashOutTarget, iop::target::Target, iop::target::BoolTarget}; +use plonky2::iop::target::BoolTarget; + +use plonky2::hash::hash_types::RichField; +use plonky2::plonk::circuit_builder::CircuitBuilder; +// use plonky2_field::extension; +use plonky2::field::extension::Extendable; +use plonky2_u32::gadgets::arithmetic_u32::U32Target; +use super::sigma::bits_to_u32_target; +use super::sigma::u32_to_bits_target; + +pub fn ch, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, + b: &U32Target, + c: &U32Target, +) -> U32Target { + let a_bits = u32_to_bits_target::(builder, a); + let b_bits = u32_to_bits_target::(builder, b); + let c_bits = u32_to_bits_target::(builder, c); + let mut res_bits = Vec::new(); + for i in 0..32 { + let b_sub_c = builder.sub(b_bits[i].target, c_bits[i].target); + let a_mul_b_sub_c = builder.mul(a_bits[i].target, b_sub_c); + let a_mul_b_sub_c_add_c = builder.add(a_mul_b_sub_c, c_bits[i].target); + res_bits.push(BoolTarget::new_unsafe(a_mul_b_sub_c_add_c)); + } + bits_to_u32_target(builder, res_bits) +} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/constants.rs b/hash/plonky2/src/bench/sha256/constants.rs new file mode 100644 index 0000000..e652bff --- /dev/null +++ b/hash/plonky2/src/bench/sha256/constants.rs @@ -0,0 +1,24 @@ + +pub const H: [u32; 8] = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 +]; + +pub const K: [u32; 64] = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +]; \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/maj.rs b/hash/plonky2/src/bench/sha256/maj.rs new file mode 100644 index 0000000..6876f4e --- /dev/null +++ b/hash/plonky2/src/bench/sha256/maj.rs @@ -0,0 +1,32 @@ +use plonky2::iop::target::BoolTarget; +use plonky2::hash::hash_types::RichField; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::field::extension::Extendable; +use plonky2_u32::gadgets::arithmetic_u32::U32Target; + +use super::sigma::u32_to_bits_target; +use super::sigma::bits_to_u32_target; + +pub fn maj, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, + b: &U32Target, + c: &U32Target, +) -> U32Target { + let a_bits = u32_to_bits_target::(builder, a); + let b_bits = u32_to_bits_target::(builder, b); + let c_bits = u32_to_bits_target::(builder, c); + let mut res_bits = Vec::new(); + for i in 0..32 { + let m = builder.mul(b_bits[i].target, c_bits[i].target); + let two = builder.two(); + let two_m = builder.mul(two, m); + let b_add_c = builder.add(b_bits[i].target, c_bits[i].target); + let b_add_c_sub_two_m = builder.sub(b_add_c, two_m); + let a_mul_b_add_c_sub_two_m = builder.mul(a_bits[i].target, b_add_c_sub_two_m); + let res = builder.add(a_mul_b_add_c_sub_two_m, m); + + res_bits.push(BoolTarget::new_unsafe(res)); + } + bits_to_u32_target(builder, res_bits) +} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/rotate.rs b/hash/plonky2/src/bench/sha256/rotate.rs new file mode 100644 index 0000000..fec8361 --- /dev/null +++ b/hash/plonky2/src/bench/sha256/rotate.rs @@ -0,0 +1,11 @@ +// define ROTATE(x, y) (((x)>>(y)) | ((x)<<(32-(y)))) +pub fn rotate32(y: usize) -> Vec { + let mut res = Vec::new(); + for i in 32 - y..32 { + res.push(i); + } + for i in 0..32 - y { + res.push(i); + } + res +} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/sha.rs b/hash/plonky2/src/bench/sha256/sha.rs new file mode 100644 index 0000000..7d092e9 --- /dev/null +++ b/hash/plonky2/src/bench/sha256/sha.rs @@ -0,0 +1,241 @@ +use plonky2::iop::target::BoolTarget; +use plonky2::hash::hash_types::RichField; +use plonky2::iop::target::Target; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::field::extension::Extendable; +use plonky2_u32::gadgets::arithmetic_u32::{CircuitBuilderU32, U32Target}; +use anyhow::Result; +use plonky2::plonk::config::PoseidonGoldilocksConfig; +use plonky2::plonk::config::GenericConfig; +use plonky2::plonk::circuit_data::CircuitConfig; +use plonky2::iop::witness::{PartialWitness, WitnessWrite}; +// use rand::Rng; +use sha2::{Digest, Sha256}; +use super::sigma::big_sigma0; +use super::sigma::big_sigma1; +use super::sigma::sigma0; +use super::sigma::sigma1; +use super::maj::maj; +use super::constants::*; +use super::ch::ch; + +fn add_u32, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, + b: &U32Target, +) -> U32Target { + let (res, _carry) = builder.add_u32(*a, *b); + res +} + +pub struct Sha256Targets { + pub message: Vec, + pub digest: Vec, +} + +pub fn array_to_bits(bytes: &[u8]) -> Vec { + let len = bytes.len(); + let mut ret = Vec::new(); + for i in 0..len { + for j in 0..8 { + let b = (bytes[i] >> (7 - j)) & 1; + ret.push(b == 1); + } + } + ret +} + + +pub fn make_circuits, const D: usize>( + builder: &mut CircuitBuilder, + msg_len_in_bits: u64, + +) -> Sha256Targets { + + + let mut message = Vec::new(); + let mut digest = Vec::new(); + + let block_count = (msg_len_in_bits + 65 + 511) / 512; + let padded_msg_len = 512 * block_count; + let p = padded_msg_len - 64 - msg_len_in_bits; + assert!(p > 1); + + //msg + for _ in 0..msg_len_in_bits { + message.push(builder.add_virtual_bool_target_unsafe()); + } + + //append a single bit '1' + message.push(builder.constant_bool(true)); + + //append '0' bit so that total length become multiple of 512 + for _ in 0..p - 1 { + message.push(builder.constant_bool(false)); + } + + //append the msg length as 64bit big-endian integer + for i in 0..64 { + let b = ((msg_len_in_bits as u64) >> (63 - i)) & 1; + message.push(builder.constant_bool(b == 1)); + } + + // init states + let mut state = Vec::new(); + for i in 0..8 { + state.push(builder.constant_u32(H[i])); + } + + let mut k256 = Vec::new(); + for i in 0..64 { + k256.push(builder.constant_u32(K[i])); + } + + for blk in 0..block_count { + let mut x = Vec::new(); + let mut a = state[0].clone(); + let mut b = state[1].clone(); + let mut c = state[2].clone(); + let mut d = state[3].clone(); + let mut e = state[4].clone(); + let mut f = state[5].clone(); + let mut g = state[6].clone(); + let mut h = state[7].clone(); + + for i in 0..16 { + let index = blk as usize * 512 + i * 32; + let u32_target = builder.le_sum(message[index..index + 32].iter().rev()); + + x.push(U32Target(u32_target)); + let mut t1 = h.clone(); + let big_sigma1_e = big_sigma1(builder, &e); + t1 = add_u32(builder, &t1, &big_sigma1_e); + let ch_e_f_g = ch(builder, &e, &f, &g); + t1 = add_u32(builder, &t1, &ch_e_f_g); + t1 = add_u32(builder, &t1, &k256[i]); + t1 = add_u32(builder, &t1, &x[i]); + + let mut t2 = big_sigma0(builder, &a); + let maj_a_b_c = maj(builder, &a, &b, &c); + t2 = add_u32(builder, &t2, &maj_a_b_c); + + h = g; + g = f; + f = e; + e = add_u32(builder, &d, &t1); + d = c; + c = b; + b = a; + a = add_u32(builder, &t1, &t2); + } + + for i in 16..64 { + let s0 = sigma0(builder, &x[(i + 1) & 0x0f]); + let s1 = sigma1(builder, &x[(i + 14) & 0x0f]); + + let s0_add_s1 = add_u32(builder, &s0, &s1); + let s0_add_s1_add_x = add_u32(builder, &s0_add_s1, &x[(i + 9) & 0xf]); + x[i & 0xf] = add_u32(builder, &x[i & 0xf], &s0_add_s1_add_x); + + let big_sigma0_a = big_sigma0(builder, &a); + let big_sigma1_e = big_sigma1(builder, &e); + let ch_e_f_g = ch(builder, &e, &f, &g); + let maj_a_b_c = maj(builder, &a, &b, &c); + + let h_add_sigma1 = add_u32(builder, &h, &big_sigma1_e); + let h_add_sigma1_add_ch_e_f_g = add_u32(builder, &h_add_sigma1, &ch_e_f_g); + let h_add_sigma1_add_ch_e_f_g_add_k256 = + add_u32(builder, &h_add_sigma1_add_ch_e_f_g, &k256[i]); + + let t1 = add_u32(builder, &x[i & 0xf], &h_add_sigma1_add_ch_e_f_g_add_k256); + let t2 = add_u32(builder, &big_sigma0_a, &maj_a_b_c); + + h = g; + g = f; + f = e; + e = add_u32(builder, &d, &t1); + d = c; + c = b; + b = a; + a = add_u32(builder, &t1, &t2); + } + + state[0] = add_u32(builder, &state[0], &a); + state[1] = add_u32(builder, &state[1], &b); + state[2] = add_u32(builder, &state[2], &c); + state[3] = add_u32(builder, &state[3], &d); + state[4] = add_u32(builder, &state[4], &e); + state[5] = add_u32(builder, &state[5], &f); + state[6] = add_u32(builder, &state[6], &g); + state[7] = add_u32(builder, &state[7], &h); + } + + for i in 0..8 { + let bit_targets = builder.split_le_base::<2>(state[i].0, 32); + for j in (0..32).rev() { + digest.push(BoolTarget::new_unsafe(bit_targets[j])); + } + } + + Sha256Targets { message, digest } +} + + +fn generate_random_bytes() -> Vec { + const MSG_SIZE: usize = 64; + let mut msg = vec![0; MSG_SIZE as usize]; + for i in 0..MSG_SIZE - 1 { + msg[i] = i as u8; + } + + msg + +} + +pub fn sha256_bench() -> Result<()> { + let msg = generate_random_bytes(); + + let mut hasher = Sha256::new(); + hasher.update(msg.clone()); + let hash = hasher.finalize(); + // println!("Hash: {:#04X}", hash); + + let msg_bits = array_to_bits(&msg.clone()); + let len = msg.len() * 8; + println!("block count: {}", (len + 65 + 511) / 512); + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + let mut builder = CircuitBuilder::::new(CircuitConfig::standard_recursion_config()); + let targets = make_circuits(&mut builder, len as u64); + let mut pw = PartialWitness::new(); + + for i in 0..len { + pw.set_bool_target(targets.message[i], msg_bits[i]); + } + + let expected_res = array_to_bits(hash.as_slice()); + for i in 0..expected_res.len() { + if expected_res[i] { + builder.assert_one(targets.digest[i].target); + } else { + builder.assert_zero(targets.digest[i].target); + } + } + + println!( + "Constructing inner proof with {} gates", + builder.num_gates() + ); + let data = builder.build::(); + // let timing = TimingTree::new("prove", Level::Debug); + let proof = data.prove(pw).unwrap(); + // timing.print(); + + // let timing = TimingTree::new("verify", Level::Debug); + let res = data.verify(proof); + // timing.print(); + + res + +} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/shift.rs b/hash/plonky2/src/bench/sha256/shift.rs new file mode 100644 index 0000000..a52d4e2 --- /dev/null +++ b/hash/plonky2/src/bench/sha256/shift.rs @@ -0,0 +1,12 @@ +// x>>y +// Assume: 0 at index 32 +pub fn shift32(y: usize) -> Vec { + let mut res = Vec::new(); + for _ in 32 - y..32 { + res.push(32); + } + for i in 0..32 - y { + res.push(i); + } + res +} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/sigma.rs b/hash/plonky2/src/bench/sha256/sigma.rs new file mode 100644 index 0000000..6a16c9c --- /dev/null +++ b/hash/plonky2/src/bench/sha256/sigma.rs @@ -0,0 +1,115 @@ +// use plonky2::{hash::hash_types::HashOutTarget, iop::target::Target, iop::target::BoolTarget}; +use plonky2::iop::target::BoolTarget; + +use plonky2::hash::hash_types::RichField; +use plonky2::plonk::circuit_builder::CircuitBuilder; +// use plonky2_field::extension; +use plonky2::field::extension::Extendable; +use plonky2_u32::gadgets::arithmetic_u32::U32Target; +use super::shift::shift32; +use super::rotate::rotate32; +use super::xor3::xor3; + +pub fn u32_to_bits_target, const D: usize, const B: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, +) -> Vec { + let mut res = Vec::new(); + let bit_targets = builder.split_le_base::(a.0, 32); + for i in (0..32).rev() { + res.push(BoolTarget::new_unsafe(bit_targets[i])); + } + res +} + +pub fn bits_to_u32_target, const D: usize>( + builder: &mut CircuitBuilder, + bits_target: Vec, +) -> U32Target { + let bit_len = bits_target.len(); + assert_eq!(bit_len, 32); + U32Target(builder.le_sum(bits_target[0..32].iter().rev())) +} + +pub fn sigma0, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, +) -> U32Target { + let mut a_bits = u32_to_bits_target::(builder, a); + a_bits.push(builder.constant_bool(false)); + let rotate7 = rotate32(7); + let rotate18 = rotate32(18); + let shift3 = shift32(3); + let mut res_bits = Vec::new(); + for i in 0..32 { + res_bits.push(xor3( + builder, + a_bits[rotate7[i]], + a_bits[rotate18[i]], + a_bits[shift3[i]], + )); + } + bits_to_u32_target(builder, res_bits) +} + +pub fn sigma1, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, +) -> U32Target { + let mut a_bits = u32_to_bits_target::(builder, a); + a_bits.push(builder.constant_bool(false)); + let rotate17 = rotate32(17); + let rotate19 = rotate32(19); + let shift10 = shift32(10); + let mut res_bits = Vec::new(); + for i in 0..32 { + res_bits.push(xor3( + builder, + a_bits[rotate17[i]], + a_bits[rotate19[i]], + a_bits[shift10[i]], + )); + } + bits_to_u32_target(builder, res_bits) +} + +//#define Sigma0(x) (ROTATE((x), 2) ^ ROTATE((x),13) ^ ROTATE((x),22)) +pub fn big_sigma0, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, +) -> U32Target { + let a_bits = u32_to_bits_target::(builder, a); + let rotate2 = rotate32(2); + let rotate13 = rotate32(13); + let rotate22 = rotate32(22); + let mut res_bits = Vec::new(); + for i in 0..32 { + res_bits.push(xor3( + builder, + a_bits[rotate2[i]], + a_bits[rotate13[i]], + a_bits[rotate22[i]], + )); + } + bits_to_u32_target(builder, res_bits) +} + +pub fn big_sigma1, const D: usize>( + builder: &mut CircuitBuilder, + a: &U32Target, +) -> U32Target { + let a_bits = u32_to_bits_target::(builder, a); + let rotate6 = rotate32(6); + let rotate11 = rotate32(11); + let rotate25 = rotate32(25); + let mut res_bits = Vec::new(); + for i in 0..32 { + res_bits.push(xor3( + builder, + a_bits[rotate6[i]], + a_bits[rotate11[i]], + a_bits[rotate25[i]], + )); + } + bits_to_u32_target(builder, res_bits) +} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/xor3.rs b/hash/plonky2/src/bench/sha256/xor3.rs new file mode 100644 index 0000000..4a176ac --- /dev/null +++ b/hash/plonky2/src/bench/sha256/xor3.rs @@ -0,0 +1,26 @@ +use plonky2::iop::target::BoolTarget; +use plonky2::hash::hash_types::RichField; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::field::extension::Extendable; + +pub fn xor3, const D: usize>( + builder: &mut CircuitBuilder, + a: BoolTarget, + b: BoolTarget, + c: BoolTarget, +) -> BoolTarget { + let m = builder.mul(b.target, c.target); + let two_b = builder.add(b.target, b.target); + let two_c = builder.add(c.target, c.target); + let two_m = builder.add(m, m); + let four_m = builder.add(two_m, two_m); + let one = builder.one(); + let one_sub_two_b = builder.sub(one, two_b); + let one_sub_two_b_sub_two_c = builder.sub(one_sub_two_b, two_c); + let one_sub_two_b_sub_two_c_add_four_m = builder.add(one_sub_two_b_sub_two_c, four_m); + let mut res = builder.mul(a.target, one_sub_two_b_sub_two_c_add_four_m); + res = builder.add(res, b.target); + res = builder.add(res, c.target); + + BoolTarget::new_unsafe(builder.sub(res, two_m)) +} \ No newline at end of file diff --git a/hash/plonky2/src/main.rs b/hash/plonky2/src/main.rs index a08de49..0eaa9fb 100644 --- a/hash/plonky2/src/main.rs +++ b/hash/plonky2/src/main.rs @@ -1,6 +1,23 @@ use std::process; -mod bench; +mod bench{ + pub mod keccak; + pub mod poseidon; + pub mod sha256{ + pub mod constants; + pub mod shift; + pub mod rotate; + pub mod sigma; + pub mod sha; + pub mod xor3; + pub mod maj; + pub mod ch; + + } +} + use bench::poseidon::poseidon_bench; +use bench::keccak::keccak_bench; +use bench::sha256::sha::sha256_bench; fn main() { let args: Vec = std::env::args().collect(); @@ -22,6 +39,17 @@ fn main() { let _ = poseidon_bench(size); } + "keccak" => { + println!("Running keccak: "); + eprintln!("input size: {:?}", size); + let _ = keccak_bench(size); + } + + "sha256" => { + println!("Running sha256: "); + let _ = sha256_bench(); + } + _ => { println!("Wrong Benchmark Name!"); } From de7edef3829a082cac27585057ed377e762e34b1 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Tue, 5 Mar 2024 14:18:30 +0530 Subject: [PATCH 25/31] sha256 and keccak benchmark --- hash/sp1/bench/.gitignore | 16 +++++++ hash/sp1/bench/keccak/Cargo.toml | 9 ++++ .../keccak/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 119608 bytes hash/sp1/bench/keccak/src/main.rs | 20 ++++++++ hash/sp1/bench/script/Cargo.toml | 10 ++++ hash/sp1/bench/script/rust-toolchain | 3 ++ hash/sp1/bench/script/src/benches/keccak.rs | 42 +++++++++++++++++ hash/sp1/bench/script/src/benches/sha256.rs | 43 ++++++++++++++++++ hash/sp1/bench/script/src/main.rs | 37 +++++++++++++++ hash/sp1/bench/sha256/Cargo.toml | 10 ++++ .../sha256/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 113704 bytes hash/sp1/bench/sha256/src/main.rs | 22 +++++++++ 12 files changed, 212 insertions(+) create mode 100644 hash/sp1/bench/.gitignore create mode 100644 hash/sp1/bench/keccak/Cargo.toml create mode 100755 hash/sp1/bench/keccak/elf/riscv32im-succinct-zkvm-elf create mode 100644 hash/sp1/bench/keccak/src/main.rs create mode 100644 hash/sp1/bench/script/Cargo.toml create mode 100644 hash/sp1/bench/script/rust-toolchain create mode 100644 hash/sp1/bench/script/src/benches/keccak.rs create mode 100644 hash/sp1/bench/script/src/benches/sha256.rs create mode 100644 hash/sp1/bench/script/src/main.rs create mode 100644 hash/sp1/bench/sha256/Cargo.toml create mode 100755 hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf create mode 100644 hash/sp1/bench/sha256/src/main.rs diff --git a/hash/sp1/bench/.gitignore b/hash/sp1/bench/.gitignore new file mode 100644 index 0000000..0be6e72 --- /dev/null +++ b/hash/sp1/bench/.gitignore @@ -0,0 +1,16 @@ +# Cargo build +**/target + +# Cargo config +.cargo + +# Profile-guided optimization +/tmp +pgo-data.profdata + +# MacOS nuisances +.DS_Store + +# Proofs +**/proof-with-pis.json +**/proof-with-io.json diff --git a/hash/sp1/bench/keccak/Cargo.toml b/hash/sp1/bench/keccak/Cargo.toml new file mode 100644 index 0000000..2d61e41 --- /dev/null +++ b/hash/sp1/bench/keccak/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] +[package] +version = "0.1.0" +name = "keccak-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +sha3 = "0.10.8" \ No newline at end of file diff --git a/hash/sp1/bench/keccak/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/keccak/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..9c17edc2b012c2734645477791bd145393a73a9c GIT binary patch literal 119608 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 literal 0 HcmV?d00001 diff --git a/hash/sp1/bench/keccak/src/main.rs b/hash/sp1/bench/keccak/src/main.rs new file mode 100644 index 0000000..b7fd57e --- /dev/null +++ b/hash/sp1/bench/keccak/src/main.rs @@ -0,0 +1,20 @@ + +#![no_main] +sp1_zkvm::entrypoint!(main); +use sha3::{Digest, Keccak256}; + +pub fn main() { + + let input = sp1_zkvm::io::read::>(); + + // create a keccak object + let mut hasher = Keccak256::new(); + + // write input message + hasher.update(input); + + // read hash digest + let result: [u8;32] = hasher.finalize().into(); + + sp1_zkvm::io::write(&result); +} diff --git a/hash/sp1/bench/script/Cargo.toml b/hash/sp1/bench/script/Cargo.toml new file mode 100644 index 0000000..0b5f047 --- /dev/null +++ b/hash/sp1/bench/script/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] +[package] +version = "0.1.0" +name = "bench-script" +edition = "2021" + +[dependencies] +sp1-core = { git = "https://github.com/succinctlabs/sp1.git" } +rand = "0.8" +hex = "0.4" \ No newline at end of file diff --git a/hash/sp1/bench/script/rust-toolchain b/hash/sp1/bench/script/rust-toolchain new file mode 100644 index 0000000..f7ee87e --- /dev/null +++ b/hash/sp1/bench/script/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-01-25" +components = ["llvm-tools", "rustc-dev"] \ No newline at end of file diff --git a/hash/sp1/bench/script/src/benches/keccak.rs b/hash/sp1/bench/script/src/benches/keccak.rs new file mode 100644 index 0000000..2ede7ca --- /dev/null +++ b/hash/sp1/bench/script/src/benches/keccak.rs @@ -0,0 +1,42 @@ + +use sp1_core::{SP1Prover, SP1Stdin, SP1Verifier}; +use rand::Rng; +use hex::encode; + +const KECCAK_ELF: &[u8] = include_bytes!("../../../keccak/elf/riscv32im-succinct-zkvm-elf"); + +pub fn generate_random_bytes(length: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..length).map(|_| rng.gen::()).collect() +} + + +pub fn keccak_benchmark(size: usize) { + // Generate proof. + let mut stdin = SP1Stdin::new(); + let data = generate_random_bytes(size); + + stdin.write(&data); + + let t0 = std::time::Instant::now(); + let mut proof = SP1Prover::prove(KECCAK_ELF, stdin).expect("proving failed"); + let t1 = t0.elapsed(); + // Read output. + let hash_bytes = proof.stdout.read::<[u8;32]>(); + let hash = encode(hash_bytes); + println!("hash: {}", hash); + + // Verify proof. + let t2 = std::time::Instant::now(); + SP1Verifier::verify(KECCAK_ELF, &proof).expect("verification failed"); + let t3 = t2.elapsed(); + + // Save proof. + proof + .save("proof-with-io.json") + .expect("saving proof failed"); + + println!("succesfully generated and verified proof for the program!"); + println!("Proof Generation Time: {:?}", t1); + println!("Proof verification Time: {:?}", t3); +} diff --git a/hash/sp1/bench/script/src/benches/sha256.rs b/hash/sp1/bench/script/src/benches/sha256.rs new file mode 100644 index 0000000..eff61f3 --- /dev/null +++ b/hash/sp1/bench/script/src/benches/sha256.rs @@ -0,0 +1,43 @@ + +use sp1_core::{SP1Prover, SP1Stdin, SP1Verifier}; +use rand::Rng; +use hex::encode; + +const SHA256_ELF: &[u8] = include_bytes!("../../../sha256/elf/riscv32im-succinct-zkvm-elf"); + +pub fn generate_random_bytes(length: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..length).map(|_| rng.gen::()).collect() +} + + +pub fn sha256_benchmark(size: usize) { + + // Generate proof. + let mut stdin = SP1Stdin::new(); + let data = generate_random_bytes(size); + + stdin.write(&data); + + let t0 = std::time::Instant::now(); + let mut proof = SP1Prover::prove(SHA256_ELF, stdin).expect("proving failed"); + let t1 = t0.elapsed(); + // Read output. + let hash_bytes = proof.stdout.read::<[u8;32]>(); + let hash = encode(hash_bytes); + println!("hash: {}", hash); + + // Verify proof. + let t2 = std::time::Instant::now(); + SP1Verifier::verify(SHA256_ELF, &proof).expect("verification failed"); + let t3 = t2.elapsed(); + + // Save proof. + proof + .save("proof-with-io.json") + .expect("saving proof failed"); + + println!("succesfully generated and verified proof for the program!"); + println!("Proof Generation Time: {:?}", t1); + println!("Proof verification Time: {:?}", t3); +} diff --git a/hash/sp1/bench/script/src/main.rs b/hash/sp1/bench/script/src/main.rs new file mode 100644 index 0000000..267dc58 --- /dev/null +++ b/hash/sp1/bench/script/src/main.rs @@ -0,0 +1,37 @@ +pub mod benches{ + pub mod keccak; + pub mod sha256; +} +use crate::benches::keccak::keccak_benchmark; +use crate::benches::sha256::sha256_benchmark; +use std::process; + +fn main() { + let args: Vec = std::env::args().collect(); + + if args.len() != 3 { + println!("Wrong number of arguments! The program expects two arguments: and "); + // Exit the program with a non-zero exit code + process::exit(1); + } + + let bench_type = &args[1]; + let size = args[2].parse::().unwrap(); + + match bench_type.as_str() { + + "sha256" => { + println!("Running sha256: "); + let _ = sha256_benchmark(size); + } + + "keccak" => { + println!("Running keccak benchmark: "); + let _ = keccak_benchmark(size); + } + + _ => { + println!("Wrong Benchmark Name!"); + } + } +} diff --git a/hash/sp1/bench/sha256/Cargo.toml b/hash/sp1/bench/sha256/Cargo.toml new file mode 100644 index 0000000..9973ccb --- /dev/null +++ b/hash/sp1/bench/sha256/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] +[package] +version = "0.1.0" +name = "sha256-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", branch = "patch-v0.10.8" } + diff --git a/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..d5f80e9ab85b37b6d884dabd77169d6b5d96de86 GIT binary patch literal 113704 zcmeF44VV{>c6*e@n3!mypf@)g8H)yqI78+K zC7Ww{YnfrdH zs^=GwB;LKxbMNvzMfFsjpYMF~m&wnO|MYtvniMbp#o*f+{FF=D z*RTz~`j21#fr0OhK z+vUoS+RE8rDJNh%il{=I6W*N%+R#erg>==h~!=B$BEplsBBkd6oR)uEDbRv>m1G;uv;I8+C`zIwEjTSDBRt zaBOExk28j+fLBG_*^F`SV;ZJl?Aev>Ov)spDwpVtnBX=yt2$!NF(SD+orXEL*#Ph6 zimajz@aKVlslcC_+EA`KPBka)+|L;9>>9(Z{1P~&9p=T$+NJ(F=85_7Wv)t7$}eRu z#>|WOW9BKREFpN;xRbF-e~w+E{FZ1q&eWygO?hVuzN?iNw`}i~?WKiv+f&Jsos9q6 z$Go3Es>h$}$}4YU#-KgZo3_}@rN=ApzKq#(L(|(*H&>Ac=a$N~S&YY`?mvUi6mz*9 z7-SBl3^>&Id0gN!94n#Uhji2|?@ord+}vuz{2=rA!A@nK)2xbkY!@1A>B{?g#&nma zh2w%tfo00oO07`2r_CK*j1M|qV;kN#z}Ff(;!U&Fl$^XbOQ(3cTzEGpzDxNrVfpt5 z_dT=pxYNwXJys-_PJ`ol%6qU2eB=l4Vs5jfFQw<+Fn+_@o5(y)WbI9K6Eh~U_8iup z!#q38v%@?)dcDlvYP)j{+dapyeXBF(So4&79?xbPW8H)?R_4{Qjj_I+4cCJDh0LiB z?!Ae-t}`pE$AWjtRZj@l=XuP<1hcYvf;ZK=PSb^D#DaCC{vKLYUTMja+$?Y$ZH_p0 zdDO9@w5LLv$v#|lpyZ2=)wJAAY*kgeR{Wh~Eq=wF$?x9Uk2+RGmCJgq>b6>}MRS_iR}&RZZ469jj}-JD1-Fa%VZ#u5Y;K@O$4&|JkuN{g|;qBL@74HFJ5h z?N}7*jdUIX(H9)EZ$&j8@ILGSzKbc`o2MJ8@sjK9Xn&Z zvu~ZT?F`=SiyE%JuT$H~cvp6Jd59m{E7v^1oqcziJ9owzqx(%w18*@Ws+14!uCiqw z?ZbuMF6A%D8-)Y=RACLj?`u)!+0`-dVvSLW=_n7cay~@q3j{Emh_m#LV>%4foO5REv zFWzn>Z=7lrjy|b)uS~Z&?%#8}QFvv7F6&>HQw7@aKbzy(b*fOmNAX_e+|Ib;@a%@G zm6Y{=Lb*4dRL=7}`}GYf*|$eQ3(EI%M)Keum0Z3AI^H_go%z^Uch--`x|P2g>&||C zEPQ61d(QZA?s=VK{V059=G_yV5_k)8Kaedd637;jD=Co~F=Xx-CpuAik!wnl)&}$f zOKmf@P6+0;dV*tLFu`YT1KLmh3f>g!iKgFinvlgm-wA)Ljt$C|j)*sLzQ~rCcNemy zcGFwZ$7tDdJt4b~xq-4F}mV0l6_r zc(6Ckii+Ivt^9f|hcuskOw)S+YsYKwE4yl!)^YwzJ9ob&-6VIXHGdoY6+HyLxmwGd zxgv7{S(M)3BijR6r0xr3QBn56+Y(w|DDu*Sj*YBTS@er)<<9O5`^(o4?=Sro-})ZB zc%VO5+O6sa7JJb~pEeu|xz>VAb3~Ty*%Hc`nMZ9IR&^6$>=nf)d9UH!>b*}6Zc?Ql6aBhHe1DqS+Tx4@Z z`Zp^rWT4F*+H0Y|B8&|h#_v*2!~v?zyd} znjaTjYW-Vuy!BSp`%yG%wk?wRuyZ?G;NK-t^HF=q+_63fWTI;JY|D0-Ki@*GiC!Me z*GHhUs5>*tSnt*PCu_!%zeP5(o}(w$>j&ohFQrX%M9M38!z|=(hpwx2I@)v-T7Mfw z53IofngD;p><&LaNyZo#ebz*W^e6K7(M=JNLEc;3yMEX2@9Qi1&; z`b^&=<%@J1(qQ%QwwwI0?|bQ+wo|ci{cUpWEhFmYJ{G*oY?ie)yxlz?3EuVcZs~}6 z=EcMNT>L=T=L3`t*4R?bNB>i?O<5mPF4cVE*IubTR`iyFy@T~VPi_0F-N(J92gh#X znQL(Iw-Z~fw%y6|We3Z)@yw6irCj-YRbOer-jZ^TETH}Ym9!70oHgD3esAx%s+eIo zu_@(+{DFwOWw%PUc0*U~$Gsc+;_gGcmAjp5Zu@cC!Y=0d@;=+$!LvuW9_9KD*Ua|g z?kuiK${ksx{6pvoc3;YgE9^t+tg_8QOCN9_Hl&Y%c1O1J-QCcHecW%cBR#A39+UC= zee;#Sd$Mw>CM(fLya(;Ee(NOVum*GMp(TF%_Ec;r^g+9iF;%I;{O_scMIGn~mf^Qf zVO_+Ov);xQjvw=T7bx#`tIUt7h*#S;(+8JcOYa0fmf(5sG(U!Ye^2ks+}SbZX8V-C zuT^c!0@sT%!_O~JZnI54`}=(x-87~Q^N~gUqLccf(>&DDUpRDBxm$X*UgX@5Uh+tH zzvx2lL%p0Cu`hjd}}-;ig-}q z!5D!Dbotwj5qLmnqug*jpzlF9C&j~L@Q{rc=f!yuIP;ZiTUO@dU^pM;Aso!r)c6QE z;)Zj7WCR=$=7Vy>;D|FH=&2`#qmsE{9-6SD@3G<q}iHc6K;MnVXrP~a&PZb+itgwT|y1u1KxGKx7wAP zmuGu<|AN|a>%4qyMTn|}pAXzpA)WvfD#HXkr&80z0tO6026VKyJ`@5c}JRv_zBw$=~DPgl{^ z?zi;zBiEG3cWm#!E3Db4oOXCheqYLo9qBJLwQJipiJglqEYq^^*4_M`q1^9w?G{{z z{(-ZkT|YwmN)`2wt-|-6mh_{@;7Fh=WiK8o4`nP)jO)5e<=+AiQt_w{Px2#I;nQFY z%&D~JW*-sT&e+!c1b54Dxr?7}8_%8i(SCpZ$5qeN_%UyNETVZh^`)+#59{N1Nanjm zX9S*D5$5j|FgG`Jmq$_%GzWfo?LvkE{m1YCSeTY~RTb=u;12+mwrbVOBJk ziwe!M$ZzaQ_Oqu)<(&(pfr1a$8Sxmnm*h%zlRB1`q$ z$Ztp1jl~sN{byq12#!Pgcv;U6dYmp7-ld$Bk!Mvhr|T>z!_; z_>`(m=!1Jg=tF!$_@_FJ%_*Uu)B?wPoxhnFyQ7HrTv5jc7T%>)xNcp1=Fxx-vl?Gc zej@nnr0(IcO!ljyhX#Hujn63fjDk+bD0_adYB9_Tlp-q$Za9npXM&B$_OY!aP9{4j1} zKkXo&t=@h=pH@8+tz%Bf`*iyu4gRCn{Rh`vhrgjD+Ec#aXfDw?o^g!_f8()R$78pa z1OEiUWAPHdgSS!a68Hl)$CNkw`?0M{HLgd{uA7))h)+Z8L9wm98+M?dpkHBA(ANO% z)7Jp~n{yU|*C@J(*w<0*H_ugE9`sqcK|c%dBfho{V4!V_@+W97fXx(Jca+T!UyF;4 zB~#|L_DW z;_O?doQzfG+N_CQ@g-XEZT$A5V!w36#Mg(9g>p|xxv{$3riH{^+Kgh^Vm&t|_2yA8 z6?HZ}4$t2wWyS?{Ugqy1b%wMd^@?q5(`}@bIVTuf(yFNTmTrm)59hb6OZXwYH;|K` zC`2D%T(X|fBS!czz@gSh0>5|YZ`L@<{wHal*v4BY!n5|RfMat`9^9p+-)diIpV*9d zL)RcILgxdps7p=-%TRyH3E;UZfalvMg~!F0AoQ5q$y#npBlG81YyVGauqM4%_JwfG z2S@k|h!2G{cTr)(9AZru8ty~*fCl-v!MYjd?-^#_L!ZSsQ$Sa#MY#ZHzXxZ-Y=73w zK+JJyd`r{mMq*pwPGXS0@QrU`zl~V~9E(^lmMUxj-j+V%gL!Nl`?xt5-y>@$X{D>Z z#`%_G;jb$CKlI#nd`!v&v8WO$$9Tsu52eNN&PkSj&hXbE<7ZuNcy~0K(q8V-h06RJ zp`mnjPvhcu2HT~cZZ~z2ZWo#mINg~S0wXd{X&!yT7$E-0fmjwe8Hfjld}Y-76}o!Y zc|3Tsc~sMrdLI9jIaG6lIXvqvky&DkYgk!3A)|Xz_ zkrV{y!g@Iz*NidJ=J5 z13yr8Bv;vKR89HeJJ|0xCKnx4RWCf$>BRPKD0JhuKiI9>`|ugIEb1$C?NjY7XZ}yW zW%3V`=^!4E%yfyL2l`kje9aE~;qQTdpfM(aex1HGLDY~CqoFh)G>Nf-Z zbkF!l`q``dsl4Q8eoN(&Vf{>#euO8%x7)0q4>FALWV#qqC?pWzv$kifF zW{A&A;}U$~`%7rNwZM-P!2hh35S;~Ili?{FS!3gaxABK%Bg6`|F5_FfeklF5qs#gE zT|e|Diw<;`tO4Oq&}nbKd){Nj+O|fKlcLMWotyx49(4a)deRg4oK3f~GwRrso81}3 zUpCff?(n@lA-pq;X_>$}Q}hZq!8P~psCQ?yG}lF(r$l_}`0Lhf7dvm7)_*GUPe^Rb zn{G|?^G^l3rk(z8=u^=^Zg*4^%LTr<-u`40zPV}EM0Z_O+c8BL+;h~trJPg}~C!cXbL&x5}NaBZZIifYTBKZ!U}UU_#}(P8iJXCAHUuuoOXobY$E8Ni?# zht};`hmD))jKO1Lxmm=q3?nXUEL=Y=Iq1lH5P6z_zW{?1(nHVBtzU{BCRZrWzaq4A z68w(qDUXU>`J0f3twncwRpx0M^Mri+mw;x{R|*c%dy6{oC!rOIJ=^Xq!`5_cTUY9P zEPb`$3O_5nw@4S+>jfUOEgIq<8W@iMztDB9rkiwsE!JweJFQlOZ!Lx9!2MFqH|~{o zg0krhbkCeaQ@}L&*xXk`o%9D(RPEtZ&}@} zYw|GQm2+#b1;tiqjvz}Y$MaHbi1U!kVyD_-Gl=e23eRj-BJaK0zlnHdY2?o{I-aKW zNVTinxA4=I?y`mUz4BdR!$f@aQmHTc1oS(`{2SnXl(Mw@&*)w(5QTR!`UHk~$7V90HXWO12cf!{5mAC#UwpB#qBjh>A zQ)df*fO z0nZ0dfo>nbkzF{@PgMH3cSJuOsi2>c&r^R6Z;FiUM|iTVNpQ$GnoV$Mfdvna3D%Nh&U*&mC)xAZqU;5K=ot=JST&wrLH@MFBkH)o{a%xkE9r1VZ2>e|(1b^D!mm@Dua^*sK{(X@pPD}oON{&My z@3Z@*j#=3S?|BSf1P_|k$vP%KQ`3LSm-i$2bf7Dzk=+YL&xlIASo1Svw~N2don6$6 z^FMNsoq?ZD{V#Mnc!pt`mGC>^eF5St__Iy*KBaA}y} z;rMP{WP?k8T5r{UwT>Zjq2qw)@)|GNABj(>vYC4L+Zj7?ujkyvzG3{i$eRQC(oxj^ zn!<4p*ofkza-wO8r7&LMb-+^ze6tO74@2wLz9r*@Pp7n>=SOBmCptkj_KhKaYG4-} zcXDUEGZ}AUdsxqU&atpt5}gKeV<3+L*oOOUk&Wi8^pLSYo=kQ^T4e0M=x+k=z^8nPp3LHUMbemaQHEz)HeiGoByj<*gx2&0*Hgapk zuMAEDzj7Bjt;O=`{X9pGCcrWD2rUXdi(aYaSS2)v9p*>T8O!bt?YI2pv}d9thP0ac z+g!R?Y^}I=C;mBpo3lFc4QgE}9_mVQfmbfcMP;3p1@chrM$t8(kI1fIt}45J;LaWn zzjujUu5$}`N37@vIeb~UwkYE&(YmCJUufUEr-ar>{|S(ou+pX{~bD8&$rt8 zPG1+xV)u58;B~3Ti{l7!|MLKUvfcvx4Ve?YzBN8sn;M7FyNk3hI21j*xZb}74wbCO zo;xtxce#qLA7~q~au>KP(q8tFo~ZSr8?k^v_*0Nq71+Hhh}#K2w5(sg`*@p~ zdm|WIxz-DQovY|Hg)RagUXXt#cyvOYHnce(7TOh_Ai8=$tHe4a9uoBZYvF^MRz?4t zrD@e13JdxZ)32uu%Be5mO?Rs4D-b4=;zr_?6Ka$E_ zbi(|ptL2?}!IY%jFI^bibDt8ub(DX;NBigRl6P`3=3#uwP0TQI>3~-WU-fR-#TvxE zxU+2-KSDQ_x|%1QJ`JbH`x~U;q5Q4b-jo2o7U9#m%DmXQ;23_DhhN#TFyH0Uj}_<2 z9cq6p0$132UUzr7ccwjA{L7-R>-nO|%PQF=5%Gmsz*pcd1e0tM- z-br8d=~3U%aZYV#sh<*yi@399;76Ka24%Wl3E)cqi({`An3xA_Fb$XbUU>gW4!JCS z;$N9yR#1lV2YqJi;Wy-!Vh>N-U#ew~(5;=uhf$49d{u~tY_D&xEAoLNE)Gc<8DrSb z&S3n&)J+?)?pFht2H<%(EcXoSzZAbF{JDtt^tXflXe%W+O~v%M>@MAh&zuBxvp)*% z9S5;}ZJ9eime+htm$&k-315}A;BDNmQUZ$~>Hdwr+bzM|#JdmazvGp!IrdUuWnCd_ z^g7B%ievswFi%=;pU~cOm_MI+40u8IaL6Bq#ZFl(7JCv*_nc~cVxKYH*)`1HmrQq7 zGk(Img%{wve@yES-W~STqI_*1qZ0nt-Xh+rF?@b;#>cZ* zYro&xs(L2Jjtl(W%R6Q!H|$7xcF9C%(tMR9*Gqht-h(C6*o%^4Pr?L8Vku>dbUeVx zmobJConu-kSwKI%VJyHpZa#{?6^@Q{%F(L9Y@yRGv zu+|#Iv70-}l=s_bh*vz5(&Ikk>;3*6cMz*QBN+G6on^ir@8hbcbm!q@^l|ta`s+*c z$LA{H3+S>EvnjMJ0N4AO@5hzkqi0&lZ?zwB03Lie0X+XTgy%48m9`A=*$97&qQgaV z#EaoaQT!(+{u47dx7x&iV&*>B88P8ExpS%`=D9{BcW$TXdtqETG0;vxuhv`cLv4D@ zvUZ%7^uNhmgf!kQ^c0lqdLy7`WH$6&)JO3(91L_PBV3#5H=+Gd-|Cn!P~T1;ksRZo z-BhPMALtLB8TR-0A^i^M#Q1EGYcup7Dba1=Rmh(i+V75E@Ga330@_b~K;qqc57hLE zm}4b$+$MlM{f_AM;5a7l!5i;p8Q$`p%s(#Tx!9{eltwGD~i@+{<6 zXAj5*<|}xXs)QHleOG#p=u767c``)Trazre%^XBTmPuZ{=1+EuD|w}|K1}GNUHC*x z_qoaZ4rEFwQ^8G;JDGc^J%87?{rsjWZsjiYZ(!sznh#Ret!OM+?o8YAa0Sb zSR(qN^cD1De^}=rS^07L&zHFhqaveKcu(madiCa zz}f_FtiJ)fbU<$l==(QC+AhMS<*eO8e#(NP?z7ap(}q`cql>h#E?fG0)<=)$Ds1>j z7Q2M?0guu168NBZ201;#pSBO{o4!WnNNHW@4%Q=Wh~6ygGVlv^Y!_ZXw2dM4NBLrj zc_7EDk>j5+b(<~Ne8{c#5@h#=--oiB`1#2LV3r*YY!eA@Vcq-~I%Ajo4=G&yagROX)pp8#nd~ zetYgM4P@v`+d~=p19DonXTYYD?hpF>(~;|jM4gp zcTa4rFM9xmN3Wwje5IQH2JX zhlml1ZYTTqBxWdaZQ(n@(+*|f-(y4HIDHJu={S=(0JQHK))Ob=p+)`~=5*GI%!01_ z!oP3sDYuSE8?q+Y`|||v-VR~BQu9pqp9OzgpLFqS2@iFFS3et;zaYA)zzv^2EWVBG z)hD7c2b|>=2L2BC|B@5)XYdp9XX2*d30^i&)A*}FUX=R^9@@<8NqZU?&9jxO|bd`)*8 zls!jL;{DN}eEJ&U!`=itYVM$Hg^ljEhv6MRd$luZVteGI6H45$a_6GT^^4l)vvsz(3E4Yz- zR(ZFH9I9e&>X3S_CG~XP8~Loe2J=~UodbjUtRvdc^@@G#Hd4&1=pfBSd1cEyGsmJM z7xlx@vK+g~t(38LDc5GKtb0Ay{W4ZN;_PRv%WZOZJK0m!YZ8AVcUQ`VW8E)fm2!-A zIeYIY=iJ9wm+T-EIvqW2T47pZNl}p2e1g6 z&`hY`^b~1D=w|3z$F~gM#=Phg4vTObX`!8R#|A2WE{bHXO zF8&Yf6GP4(a>&6Ko-bqYxg5I`+X|gl>qzRS>;vrg;^al?GV_)Hxe9!u_~-Qd>`z3# zi48KmUiLZcm8kbrG+xxbM1E+$buhkCpL&`%@LcQWTJOmIweTXz^<_;(^w|h`$u$n` zZC$rxndmQ~uepf}WiRY7`ouO+*ar9(s|Rf4FfMtwv|XG>fs35b-7@BYep8Sljfc=OndG#uefyIt+)%Imhn$qWBkm z`+H$|)u{cADa{i;ITVjYdJOQHUVCEyCAo%`TNzW)_Uc+Y*j|VBf6~qjaYEduk~L79Uw7a^U*%JXj`ENaEcCtUWRX;*s;Wm<3r=cyT z+Z>$hpAF?v!Te`m1gBAWRWuj+o56?nB}+V2kLAR1$FGhaw?X`2aNLrsMm|Hc)(!Oh zb^KSE?)cdUPC4`#SfmlXVvO zJ@;harR<&}-3VXR^IVbsfzZGA4{hWxTIk07F5gw|L^a(r01ka%#^RfzTiuw9XndEZz zU`=5!>}K{abLLHQ`Ciq&X4NXcW%-iiBHmp%nOp$tDDm>Qf;_`auAMm~-=`HDD~!o! zH_Lpq_nMFU`NiwBez*AWo%pBE(fVEQ{8{*?$7%g;*Xum*!bS{y)kEg!+2TA8mCgT0 z_GD?irr7V=0iIK=#Z$@VJr4(QU(*G?6WVFQPc=^$o=R@HIY($1`uNKCWo_D{a!qyr z*)5}T%Jg&fZQ7Vj&c?7@(}6a>_6;t4;JbDwoquR2W_)8W%r)4jsf? zw2pqnHX`?b{uX^Num>Q?8BZt2N$RgojFXP9i#$3JPGsCYlXns;lXa zr^b;x>-*@@&z#W5$DC^4UO?OA(2lT)9jiIWDZ}REH}l#|?75gD(Xltjx;E43_e$G_ zKP~bm@k45vTdto^mgn^KN6=4)HHv<|r)}G>jKYm}hK9e+83z6SRIX#O=o zU(bg8EAZ9gPt^MIbJ9j?qO1jIU+h=yuL^i+*Vj&)mugs4!vHLYHGli+0Ie5&#KZc{ zy6;WD*_(#D>p)cvYM?@hni&kyfctsK(tfZeF~%WyshHX^#s zQ-MCJ`EJK#N9^^|?L1!?@Izu7tO;$;ihlz-(6%1>A-<&H`jxz!QqcJZa^}Ub{*VC% zYgqIL!&T@~MLk&en;Q3r^_vB@LA`FU-#w-L9u{*D+erNA+HZ<37vx4_Gb#L|=<2zO zX2WE^Y7X7~Pua67Hh*D$ma{&QAJZ+pZ`HqWqV$Kn9q5noHzSuiv4^Vvq`j-6cO?%n zH`8TI_|25yWFhT?+XsU+%X|&A*r4LWDV}d=Hqq`Vzmd#=>~R-g5p%D7hYo%k$4=`Qa&kkZq4UHfc6`5e zJlFP=_%PTvlvXlUe}0MKcOkP6v?(9E*Y8626kM}cSlU6Ch&u0kA9h$t#QStfY0>xL zqbo|RBh+^e3Evl8L3~1?UiW2<3(+YP_zh;xz`up>Ah2ccmif~;0b18nKb3P6Oy)3G zQO!IW=noPPBR4EDIE!S{+@CY)*v;v+rzII>gT z1A3Y9{}H{seJWg^9M1|K6U0j>Gfd|F--)wl9j$wuEQcVV@ec@Ja})29L!ircXn**~ zvHf4lkFef-Y^ialKQ^WF4H(;ijwHEs1Gy{6J+B+Pxowg5D-O?FL3RQhX!R92 zD;b{)`C?IIk(?zi@x+cO-((p07KE08`C^@pHC}n(^Ax#7Sz2JD4U%Zy5UEk8SMMC^0>eGU+L0zKj+YT{+;kv}7 zhl@BG8V?C%c}nXrzUZJfI>pO7=r4s%vWEQIj#RR*o8K+{-WT^r3Kr*w?q)xqt+Iud z9jU@@{>JwArrYF$v+s)h^rXEdCFhWbd{oa%Ft(;Gq1@gU$Zcy!aNaX<8$FH=9p3=X zBW~sRxa0ym=(c`L0aqvczP5m4e7iBu!{OX>XK|NNXn9d>8@K0_|RWR<4*#NBU;xV!!|afiKhO5Alk{~p5z z-cA>`j?bPNHl^+MkX}d0ecxWK&tBI0_RG5?&Zb$KHpna4ExFj@(_VocRy7|wwYn_q zhqD}uz0mhu zJZ74+W-_*;tz%T-TItgrY6WbDBU0m{GB`!-pQ{5;!_a^cOSS#&a=*)R5 zD&KdIwS}XeHS=6-TdY%Ui*BVH_ABLz@16UiarRGA?MoIf_FI-LPOjNc-o}CcLcS|iwIG>v>;=g}ALaJZ4*W&NP{{8N+RJyT zs>$Oxm#$BLD}nDOU{g=#%;T3PJ6=jFO9 z*!zV|WNjk9xQjfkeRB2>yu1b+ZNV<$vWk2^)#O_DGFHiPOhv-^YSOZJBC^Bbnh=$_ zNVt=>pW2qO)8`9clh|XJH?>vPiR`f?503bk%qh4g2YQMrdTUPf#ZfWW6YXJ=eMGK& z6U0{d<~te3JaU3M$<>W&yG-J`lEWtZz`bng1amI?f#Ri8b916PN5Zk*g3m67CKe-4 zCvm>p<;t1%IpuFGHJmZ!dhf44#(LY_Q9?|GeDF#Gdk*`*?V0}Ej&5j@e7I@WWV5YQ z$8ycCXX$?{{^5q6F-T*9yQ z9&Y4duC0{1pZLS-&L(G%7%TNSvwS}CYA3&Gdq2byx>6uXa z1~A0Lx5N6fMNjnKN8OSS8|GY@WAz02QU-U4pXE$+RL@3w3jf@|h#2fm6TzBRpw z{*e{>6WSXVpT^!8wI2$43idypB<|u8GnX8CH&Mf0xG!-AY%_bo@8&yATMgp-oV&*! z81|$Wb1fwXLe4Pf)jVVPUwOZ3FC9;ej(u#U--{I36XrB=PEVXMlWXA}+bMU&cWvzA zId-`g=6Z*H%Yo@1D+64oGXl9S`K4){9~vJS{QpuaJK>rrtH@?UgrJbTX~xes<4Cb-M- z?J@IQ!(i{3tYsbdFx_Y10rUeOkZ(`?(QUD>gmJRIx61sRxlfhQFXK381M{_$vzk~# zYNZ*Bsq6$}Qclk_>y1LmUswAZ-p8E&zMr`nYgU%YdersA-^bqW|F{$zd~bT;1_*_V9Br6*z?Pk!WHgZ^GVVOvwJ zUpr%jrkaU)?F47vN8kA8Updfm^6ws`-dVq5?ndbf;!|pmjmI~~dXRkl4e)PS52`Pc z+W`)sBgxShc!PXa=;uNB-}-38+y)KE`#~BQ<^vn>6)?xLW}uN1zejgH8EmX&oo~ik zHUuu=t2xg7O0Hm?Nj~^GV2#J7dmHVE=Go5xBl|pC){!SWMd@+H51)Z%ZcWzx8|8A=wx?oo@;1s%lQ!$$9M|)C^O$)lvBEdsFr3@oG`-c=Ma@eq zm2+k-2HcxwvbL7}qZ7>BCG4T~pEsQ63;Lb^#v5kghA$}jzK@rEqs%cENlx_d9kY^h z9?$p4TpV>wskcWJZn#a}AMr}}$8$FF=jV3R@9P`q#MD^t<%3b~FiO8$N`AD+mab?nn zZ>wY8=g0vep6*Q(nUytqzL7sJIMR8~;8g5UY!f>-=W>}l!~4p1cn0O8(a6AjpMvjs zx6KDe;ZutK%2jeBdxf9uw$TX#z6t-MUt9DD@sWo*;*y@_^WPzE3-5ymZ0kBDZ54C% z;8lT7O4AwZd+H9(DW8UX;`-b)&ThNh$jzlqS<_z|vZi;S7vzP$IYT4l5n=JZ75bv;fB_3|;`OL|$e^XV-{G5SJ zQ^xlKH;f?<7rmBshh4&6$;V{xS|mBiI(VVL2&oPDOYe{GRP&qmEf zti?(D@MrBB_P+3H8*n0XS{|M5lwMBT9fng%JCic1z&BmBo;9gUNjZFhhR*$NIV0TD z)A6R6uI3z=*9~*guh2WJqdKmNtd?&AiJz`WYdw>#H@sI@&M4$>BCb3JTjQI`Wd4z7 z$Gjzyhn79doA%8!(E}siu?JK#{}IEq_1CHe=EAO1IF|K7z z=%8Eh8$1?Cp7EE}1*@q#IUn7X^;h^W+{>t2_7%hb+WVoEGa|0_CDT)9jLoItqeEbE z&UmNa|N1-qP8s?xWqV33*?+iS>!t_4@xPpXKS0k-s2*kg!r519BtJs`V?HAA{F4_S z6Y*~QCOEuFiNu|hCp~q^?lQ>8C zC~F*gM88@%!!XkqV9Rcg%l9nYlC6AyVBr{vMdiAr-y!vEp_PCBUG5V>9l^W54qo!| zV#c^dB{y6HT`nG^%eByDX|vL2wr`vUU6w@LlFzVCOQN|nd}B!4P6>P3vDZXT^C=tB z7xh-{Yw5hKB3~X`GYW6PxG8Q3GKTQ ze&owOhV$?t>GSR2w|tW)Trax?H}tFZlz{d-bPfW~eorjJ_BjW{ohdMv^X;1-EAL=e zG#9tZo%rFm;j`u5B~#5@T)wMuc${~|RKtuP80YJEFOBn_;=5M%bK?XjF8I(f?YRAn z$X|FT?}#z!caN#67r}A->AjpmV(Z8znj`dLw+>U6=XT2fgIe&U<(C*wJ z?b4QR_dMQn)^^Zt`q`k}l#DBpTyR(=pWvHK@;z&O-$}by+gp5d?wGd_o*?J0ocB6> z5nbhtcH3!rp}(*j{fzG=B#(A;pQ60Owi)oauAfPqN1sU$(DSu2XGz;K3N|=u=}r}5 z;6`K~edX4p-{{U zCyk&RL(azz>89&_!JI>1GUsiw?(=^y^rPuZ&RH+g7jv)aVCG{sd?BQR{7(WpxC(mT z%9_)At~ty6G0h`r1KbtAdzHFP@b$;+sbFoMQfD=HV(*FknTsC;+d}AwbCrJX*x(Po zcu2v2(Z9(X!^ce-&ir5x)+in$a1X38c$|A)C-V;ug1ByXz-REy%bx9#e1>!E0-GMW z8_29I_CR^=(GB=iOEtde_n*Z6D#FD3vG};rW4DqURx01>!sm|foxZj29eyW1aKWwi z&C6Q0J0k=A1bL=k#!f*u>nJhXE@!`L34Febc|>mx?R!(~!ir{|ccQ0|gZHO=r-JVi z1o#~>7IMsT71H&CPBHvg$}aFbY4xV~-UN08<@jD=`wP%(YwXcv{$YGw zlXSeyiGM~V<4+UY;(L|q5pW2fi=jK;c0ltxC&v5OUY=W~s~#5qZpt?-q`fNI<9mRQ zCas5w_XX|wlrOaIRok+Ml$(8+_d$I>wmQP|RLFb($w4=OTRnYE&aFh8c)-8#+> z{}Ub**prtYFe@$iPhWKb`+_sSQqCe`{!99dK$m15;lH8n`D^iEiVPT1UwpHtT-)vm z>{0yOa+SH=eHr|nI4QJa zr)=WA&{Ed`E%_T??GN(kZ03FkvEXp-?Yr>}FEO@dyP5kPfewg1>)nP7+4vUmR^I0q zi|uL3*?dJ>lJ+!?@)oq&Cf{EPXn^*THtnh1z)yQI{*GNseP}7RxO$M50w3oPdb$RB zIw>D8`EEjPgm0k88*-sOi(ZBwjCs;@${D5F*J1vGa$2Wzpk03w6CY?ZTT-wmEU{=b+#(pzJ%|_M)>`=Dp~kjRd|x?LszM! zxinSaTlPKcetpd8dt;n8tq&TZUi|4)&ryUpKs3<>=%$B zc9gYxuBycT6cg|M>BPd2e~eTfaM!jPF+F#~EWQddH2u;7Ve0?Z-tHJH70g z#IFXvbWVFPSLuKDt<~qs+7EP_?0AvY;k#ctR=Mavk>Fj2&iRtH3@&x<&`_UTNPm-E z&LtlBjod+op}&j2tz5a&w{pj}3-Y;UOJBef*qFqd1Kp)s^pv2y)Wx>Y@L1Mlk;8J% zl;|kp*A3uG9Ua<^kKZFKKNTIQXg6q^CU~BoIX(;iD<79dx-D&xwC&IzFy5c ziQ|R(SLXeqBZhswzu1@1n~VV;u#LWtO)zBq=oZ=rkZ(!`y4`%yKQ!z!(eY;$^&RU> z>O~!GJ7h~koP~X?)-)}B^kl8K%(lz0`C<}hX3ic%SJ}(^R^r{45$^_;(4XWYOWgCc zeRl$wI<@{&)r9P_@?!)h4X5a@ML2;?!x`Et;kXk4oGBSI-`O-oPnEM^wY@?cmOqd; zrt~@f;P|xiGTd3s!_Jm<@FNGlPk0P5Q}I!@Tm8qKjlKWYKB=_S-`KXr{9qnE$O4wf zu)ovL12mjpsO`RBFMZb*SquIdTU1p(n{_xlUHEO%V$G)I%-Br7`2Sq>H`K2t_R+O#KJ=$YL3dx>q4pY{8mRS&$Kv>xF3y~viV^6I-HUgUxC!n>0#`*dEB7ukIV z-!0>txBDc%Kh|lPPYz#qf3jtFs?ZIu+C6#j+u(QFQO%3(e7|{iC-PylQE0`sdN_t& zvzKpV!=IkM)+nt1xZ&?bzdFJZmQ9BDPY`}n@D?2$O!eGFVh zlC8jlT=h!Z%>W+q3hAfkSocvcz9U*_p&#TdypXX7yj?mULG;Q(%YBA_2hWaHzFuhg zDf@(pM^D)Gy3D2Xb^M3KjRlAJF*$qv+yCm9p$n8Cb3z>V-1WiVXq*Yp4}4nhnzwvF@~u>pTKycQYdTf`Q~J<7F}7-l#5 z7(1AQhuKg2@CMF`en!@^mQ8LMeC!;2Tj%`>yZm+Wft!x@p}sx_X}uYF}fnTP@E4TbcxS}TqRe!^PG7j{(E4YXid;(`=Ec5UkA^8*6<~!$G)=Uf~(j!SXvg~S?Eoj;oV!x z7&a2C{=^V^OB2Tn<^^9vnQnu&x1k?%-lt(!Zj_jn_AmO@>&QiDt)i5;4{ec)W}eO2 zqGxY}H$E%!Li?WFIJAaO)SU~hokN}T4Azt(KD>x2{Gdp0$XFkpMDkLEZs$vLz^j#P_%ZrYPMr8coLIyo@nineQ&rNML@Z+p^fHw* zzhcJ=ktKS}l4s`hi5~nUu><&Im=jxQeE~U&PA@v>z1Hz|_%pV6d6nJIob-)rXAVVw z6~7<6&eT4L$aN~&I;Glw^CFeJZI5!U&Z%U>9()jcjHLN|#JSoulGZlmeakHKN@Hct zdi)hJ?E080^NEFcFCUUUHRRv1240x0dhFO+&Xmj0zhB||9dVW07E#WR-t2e2aGUa< z_f+n?m#Bhwn<~6nP|2L9{5{9}{pTB$`Q6)<|I1oc=y~3dcmAh&{>$5x^MzWK{Oym7 z+;^V@zW=TYIf1KTpq``a>Y>#L5cs^6J77e5gmNh^?H>H@3*Diho@BPaf^}e^Rgf7jIOBS0)&Rqfg*V z-P@mReT8$LV#f+id-1Wf5}Vqq3fNeM{673=mLdKu-B+l)_!C$=W#s6^@liqp&hxh$ z&Sd5WTf%?y=s0+bk(~d$k^E7Ya{la0m8^w7<>TZrkB#PjgslA0B*syJPpHf2d9e1F zckq$1-qI=K(DDNN zBqGRGz5~1$U3d!i&$HZ#p(X8uDQ}5{NLB;qk=YCWJob9)B_4`5vf~{%}yI`_FTikbJx1`EBJQf}f9uB& z2#&0?3X&%i;t!of=RG^nj*h8l-@DKuzPG@)g)Nc1pZe7_+#kEFTXMZ{$Gdi za~}o&$ak|<0r;I4f&W9a^W+5bmbk}+FF{N9ObEwtC>+BZxT+pNO=Gl6!Tgk#=RWOMy7*Knqp6pMh28`)?;9FAk;(k*iZZ9g*XO{G{sSE6`vI z?QoHgb4>e`1lAV>))zFa$s6%K&f-kZgoRJG3)`qS;3-0{*RmIO{R@$#J-OPO8jm_J zSnzdt`XZVJx($Fd-{y_xXS8r%N#k3n>o_s1`omf9@O*OlQJ3i z;*_i#k2#fjEsmS}VXtP@s?4&)($8iZnpQPld~s9lE%i04XU|!hsH;uX)Fzgu>+6>$ z*3_(O%BU;IZHuzb<+^54LY=?3AyeOQ{>?SDD;sWXSnZvEo>x=9qVD_^D;v-EZp?T$ z)ipIXoZqnef^$DK&-?I27hRaFxnTKn@1h0s&d)4gaM49oH=O_Fo7UWX{_6USS9kO3 zm8&w8uJ_JgS$AH21AQ!OPpH4(em)oOQAKYnYgVoNa!un(fLmTeg=NJuALjizT*1>s zV_jnT%2lfpx7=8_DwDXOY5DR@y*f&J@25-!R|tE3Q*CXg{`_0&>Tf!~zNw*c$bYL= z-cVmtzxMow#$_Q?=igknOdv}}#-SAIEj#mbvkHeQ|iQd6eZ%X|u)e!ON)=88=1ipCo+<*&M%hqbp1SoJ{a z>+9j%nZ!pwmT0VR z%6z)6Hk06=iYC;`+Qv+MZOy8LZtUVjM*fEQn`-MbHQtRiH$W=V&U;1Iv|qn=bsgPm z0%};>Agit6{2OalH3}Vl^alyGg7FA#<1Q}Jsv$OX6B1^)R?-GjCUG*{UGr3>S-QYfQ)vSg& zcudL)x-IgWD_6?`9?5GGOJ%M?UUNy^tsh;swl)EM{n;(Klk#FCe(9(mQV@G$v=VT7mE_=!b_o9%B;F5p&sG)D_qCY2?gaY zs%xrUcFjs!zp|+@G5dzKjhTkT!c5JwRdwD?jWRYq2zOMFWW()obXA|-RwaZpEtX@^K7KGnW0}S;wUWN{{wEJn=y%jtQKUqg-XL28k zla!lKFV5h7DlzQ&D}T;2o(sH!yT`8>j-z{*Bvk3(5SOzmf)QVQam}h*YSuPfUvmS? zd-j}j68eYCrr#@2A-^eIwvTQpx!Ig zXWRb3e4VhJ`dfqy67nBFEw8Ij2!jWtQZ?_tBmby>C4#C0x)Qv~buYhP;u0E=>wDn- zW`lvYSGz3Hcw=T|eFAn0S60!#PpGpgU##CmeOcQh z`+|W50{gu4&Tp!1C^G#4dA*Q!WKLu~2pogcFj_9IqwI9bOyPQY2wsj}nNUxEig(;W z_{}wqLX80~o}$h;%FpJSgOttG>QTu6m)0~OleAv2bX8_~W1_yMb_MjnP$8nst%<8L z^*67C3hQbYW@=YvmQ^oXR?qscUV|2)S6=J>rfOt>EN@OnGDgXODbF=dv~d-yDX=JHz9 zsj%L{x?5^5sjs^!Q+w6Q)tTy5!iUzTZ(Z5Y*l=xK)2d~c2uTX~3s<5$HNw>|Zy5YN z@Q@Pen^!lk{Vdh5tX;Ksk*HW}8yYh=5B|EMu5R_!tf6Ap^5)|;waZpzLXmKJ?dqn+ z@b^Mi+qI(Od@fU8cQyS&){B}}t)io=GntzNk%KLNrm3#6CVi`y$t=q(lgHQ8)m?#t zm_gU9YpVA$mozmnsEpUtSga^dF0HR)E*lnR)(F8;=TkMcYp+;Yds9OQgft}rp}KxW zlW@-~K#Me8SG(eJk?8eJt3mJLK>}S|o4Iv0Xv!>0*DZ(7U%C8KS`uE#DyUyv>%kvZ z)YT*SmMOgsNz+o}xrEl_nh^e7l+*H_ZAD~(2J57Fm-kXn%F7zS1)$fvl$G@@GG2bm zC3G+4<&yI9Uh2r-(x<~!EGuhKezPp~x}1e9DDOz9tGH^oR&#xo>u#=xxW3Dk;A-c3 zlItJ1e#X_qb(rfI*BPA&br#pTT$gfP$#o9xevZ4xRm-)O>n^SbxgO#ADDQv3{b{bB za`kZaaT!l0R2kR%xMp$9;kqa_$P;J5(>}`IGB)9TN2_Uy5 z_}NdXC;Y5f|BvNo6Q4SLes&FIi~MXP-}(ygihS$AO9t`q+?D7eS0oT3qMHhr!eC0& zEl=DaT1msj!li{rCssBjyqenDI@lVkrM_Y1n#?K`1n)~tEPu4L#>}k@S3O5Rv^EN- zC*#|~L@?i^x>gF0QGWsTCvpj`F6>J1Kk}pzMPyJLxmf7^3f>8=0~C6W*0`5t8eygl zi5g(4!vHc8g4{Nvz4#-%!_pomNzM&MUo<_OGM;?UxVAM$ub_{{7Jl z6958jQbyLK(AHBQN~j+up+9gsKyUmm%9NqchvL6(b*4VBD;t_T(N}=4J|miR4f>g= z5#Xac(DhE=cJ%7%Gg|leGOJddUxz^?i2gk7{5i1xjO!AvYTcpM2Eu8s(NDn4HGv9x zMIE|xB4oIMHJ(`3R4HGdc1zr=fK zb0qw_aT(~-2}O#xy1@u&e7IhIx)$Qd*0px2*U%Tj_Iv3=`1%R;$`DH$`Gd9vK8
iV5n4oqrp2Pee4Nt?`S^S)Bi5+T>#{$s{H@zo}SEP@*qJT0Rl7_F+ynS{otWN5(pB>K*CFdlYUf_kx6Ep znLt3)3B(lzAt)d!D!BP6Dy!(CqO!ocsGz90;)*VRjV`+Uc3F+Pxbj=so&V=l)$OjS z>6vcAx?380zW1Cu_tt&ibI(0@n2$HX`gXqiTOw27v0k!|77gfb=}ZS z-O_E{(OuoseLXOA!!S(4GHk;!T*EVbBQSN-Fiq1kZPPJb(=&ZDuyo6?Ov|!t%duR` zvwSPCb=$B_+p=xjv0dAV0@O01c zOwaOc&+%N(^L#Jxb>Hw!-|}tW@m=5ZeLo0DVnFl(q61zF2pZZ-`L+3XJ@ngBJiAkW zw|lo!`rR#LK1A3G{;9e)^uD6@+|7(3A8MBEl+seY+Yn>XV{v&obL0L{;S%_0%I`$} zZGuN0`IR=Heorj2zDsEGOSRPASSpn+u7sDMNkKCu>yqW0ZhQU|!t4NxS%EcWC<` zTs(4qanq5%U2(^8$Lhru!=Ko*B7fJWGtroOQ!To%@md?>txgetCWPgFDx2KRs%Lw&xe; zefF2-3!Z)YsEZzd=FW?X+HWq}n|sF_v=OaG!{<{j&;N33=IIA6%7s1oIr)69@bcUd zhrMy$iF4=XmK1WB2pHpj*d@85#|wqtLawW)FMoLMM0vf?3rk=A&|E$rsw9a> z^MaS=1Jb8rIXt%}SI8ke*PA;hm+zV1Tgm0;&g(fde;D#|Id5T(7`x}?md(x83%NNY zDt}16(6y+rfIsKt_REp?U5Dq7;D0Ogxt`u!e%{>N@yOejKRS0=S0O()H>d0G$pli{ zBNFqybNcc*{YayrgS&If=g!X;`N&+C50MwUPVCL+Z|lk}$n{8sUHNaW)N+4wl-Bj$ z+$O5(U|uWa`ilAfyv8>ba);!*b05eby8nXQF};V(D|P97TR#8F+-c-|K0lxD;>;FO z^VquPa>wR-bH9;n%h8Y*Em}mA&HXZW3)}E~Wnp<&A@_ffujTu@PM>EK-kNjwdllc= z*JU8HCwB^lwYlC`=jP|_xqXFvZlFuDl1#~cg!8-yMmd|y9h6(x)7AYqz49>!ORiE@ z!k5ecGijT{?_v4#dL`t|k{?jRE(*1qW|IFsB~OjW?IONHuGqJHPE=A{xl$s-wH`7g zckV$X1u0j~Ap-K8+9pxuG)mX*##DrFo3o$ReNvB>drjdS!nIQVV2wN|boch=dyXjF zj9Y+$*_&IKJE%LiA5s@b61!`;J9y`m0y)sLrAON|v6r@XV^LaI)bBm>F7)%;M^G@) z#YBynHvNORZ`;JLJnX@YN9&n*p+j$iZtUTr#*elO9+@kha>`MsFa=@jXskFz9n)82 z8B`xXvDg=f)4}dd`pO4+SH{!7rUHYjFj-?&4efR`k8C z__pQC`&PW_KE7){?@E819xq~j5-XumSq;cqO?8JcMHVuVicR{(Sg%&>|J(SxD*Vcr zp(W{1IOdO~MUq)NjTfVwVt|N%wwrgQFZ(LL3nWd6{;$zDhB7sZmKEBQ@W|ZV=AZQG z8@Ii+5mo`eoPVVfYl9!gW73NlU#3N?y5tcSA(8rq{&*d7UqKv_2A6*d%X;xR{%O=w z+Gf7HrzhXrJ2&6gJuknou!w55fA`B4ACNmRe{lYg1xvdR?>#cNEcfQZrTNcweLjDG z{`>hKV|8f4Oxjo&#$p2&Enfz~xdkfF!|D)@Vx%sa=>D6biyYZtR{n%Tt zd;hH;|H4=Q?DKPa=DMf6`uu-;{0D^tmbl*e7rf)spZ(llIeYeh*Sl}{Xko#^#rwa? zuuoil`kAjgdtEKu_@yr&wzQ|WZ{7h1yTOTfed@`d%=LENbXQN`Nw2OC-uS-7!vhcg z=C^OCJom!n`VAlYaOs3sEchK?{gxJ%%{`*~xb9Vjg~v{Odd{-K zvcmFSd*0cn?eOLv)YrS@q}4%JwRf(5Q1?+?hjr&x`h~N)Pbl>D%zlLSWhc(*b5|4&p7_eiwe|DY%x?tKu7$mQbAq0}9qu7LCv`17KewN`;F=HDx6PY)_&sZ@ z3wG*@4!ZHvSD$g`SFR3vjxB7Qb4=gqeapLFcJ)1P49_YAJ&RXLmH5E(y*vNz*tsA7 z#~s#wxx?oyEcEWU{@sO3yBBoL?OF7`O=rv_2kOoQWSD*Zu0FawErg9a_lmSb5~)6T5Re9zXW#Ur+quRci}$(bp_q zwf2;Wub(_8S2(ZxFgw3v;fg|S{`q|qpY;!4u%a-xC%w<+v&z#<#xr_Uj&O2oOp$ir* zoWEaTQP=+azijS7xq}N!a))#s+H+WLY5vHAie1Nb9Y3#>)4Pnknfqk^Q~6I9KGXXj z`9F65Xa2vsCg=Xe_A9P?@5l8EF1+sgT}%JJh5Mbg_Kz==PI%46iwAzW^Sw9R^uAAh z{;Oa6#y21R_RpUF)udL4DztavNvE9ox{G(-0P)_he(jsz{@(YW{*~6K?k7ooe^V{o zdDDkK^62-zzhLpJPCRM#nHRiqruRgODPVD@`{SQ3& zqaW}6-8JvLZuci1c<>wF`uEQ!!d;4cU_l~dKf6&249C`W~XRnj`|Mqu$ z@f%P4=&8NG`~B$HjpN&HJ*ITRCqMV)2fy|GAOHMAD?f0Xe&dmU`^5Jq&tCV2H}>@I zx9F88{N}e?hrLr?^V-$BZd!lIwnrX){0C3|(e(>LePIT!UD*L`~5iUM_`%b2&KaOj+QT@!ahI>C5-*TnALle_loI=RR1 zJ+Axe$;C^0Pgs0>*HQZ&wco_`g{wbs$h-ruy}A1Y2IKs~C37bpIC^~k#NQn{zk6b` zd*bKw|MeqX-rOA<516>Gcj7zUeM?U2>YL;Dp58lu&iK3|y53N@Xzs){OP2N>G?@bj-MXWGrzlg;uDK@{JtkwJa!J$_ZB7|=sK)xzXgk=|K-VDd9Ieb zDwjKKem+`jh%RLNDU*{j=a)zLR`BnsGbSfx43tO0R`Tz$OxOm(?k7yv-tx%rX8t`) z*liN9YT=^(9l2}s@9uh^$P)Us{5yHgy>5vdzOFWuOnS?9C|Iyb4$;yy&sqxebWKZH=ot~_9E|LBCTyC z><<2x__OjQFV@2IBs}wlheyIT5%zdWmgMU=VGk2_mwf!Hg%i28aY7`GyP);=PfjkE z#o?-jn>Jwu>++CV7NUCu}0~?kd8rP4S7`3ln**>buC<4t+206!}{odFOh< zULb6o^kvIb(seiV{(;HKhhlpF_|$xm`g>d72j_ig{)ZPt@}7c!PkC~35APyxN}G~2 zya4@<%H*UkbRG#?#K%5Nn9LRBk+5ZiJxy3TzkI@;B`lpcYXMKC_@tg}O5Tm)Na~5m z*-m(&I&*u!4f@(z>-H{bx)1vO&?OFeMCM~jSgSl=0{vO&c1Zrp3#3KWF`;3Otz8do zWkOSRvj|=W?H*_cB;}H=e-if^c<#8QbzY17&CoY(o}66E-|4vJ-JQ^OL3=o%rQ5Q+ zyBoSaI63)LOxM%tehAugEohQQPeHr)%~Q*0FJZe0TPCu2iu^0kK?F5FC<*z zkw?OI6Sj#ks&Dj2dE7@>KVhoQs5&9CpMdr}G+(%r@{sUn312cwKN^Qec`xx4digxU zN8!l2vcP)VKu_;OYuqiw-fd-VXKln zQteInZ-(~lc(X1@*jAs(^0%5JnPu_V7`c=^Ri5_`pFJOeQl}TGp&m)As z2xY;p%PE%`=sNVruV_t|Jno0S=&H%d?GhvHMC!MMZzg=CMfilsYY~1M;riRA%8`7# zhwxp5kHqp9seBXKW6+*%zB7gP478PRXMBtEdrJGob+Xp~j-<||+V4`rH>hyrOP=b4 zZ6r+9MG0F)*xD4IMC&#r^xL363%%8RP~yA~x_$N3cJdfu zC#S+h&K|;65w?rJvu#!Aq7bhE!Pv`9&gq=)Slva4;{d);pMOcx))9w4QDd8`OoOewRKY+&j7~!{P_*W3#f9=%psQd|kf^d~?N$Z7#Jxo|M z!D})1*baTgbdXeh9w%&r1fG8>Q+;^O@V>J>VAVW+ErshVF;H5qfXZ#?pP6r0pr_t8Q)fqbms8OIVGt zrBYbTrDw}Kkx^tLs{ccilk#2i6!~Wpwt=vFlfEQ7zR7zR!t?Zpr{>iVVS5NuvZM}9 zBz#x#x0I#oFK;7!&Fzi;uMvI^;dc=(?@Hb({znMkP59=x3`Znf(y@o|=RVfVgCb$i z5q1DRfu4!e-*P>%WIxt&chWYJZ&dPh!Z-bS5y~`;J%n9FSTa^O<_(V!{=_GmW1XboDZ(BhOtni1+e_Ge zsW6er(RJ-E!dCJ(c^b_NBz!61j}yKo4sVQQwg~zp?KBgaW;Mch5nhY) zGAbL%kE;lO>aIo~(RMv^H~jWz8vWI@cKjIhd!eiRtxeD0sC_;se19=Hd2^ip#yD97 zFT!wO#b+lcuaDE(pRL={x7qOA{JF`=N0Rr`?Gn-22Iwc>)9l+MFExBXK`1VPB*z#oyGZGcORn=SxYs zB)p5*aMAB;%pIe;Aaa)z-cR`L(!Ns9_?wCmdTJp4eKx_hG(N9_9rm_jbqM2IG3pX? z+oEBY^pbo0amQiGVCpXa9LyJtz7im3poBTE<+Pjlz4pF%zeu*z z?gu~d|25Y@V?PlZ%{e!QkZzVnQu)V3RJDc>) zEk^n-p&!&wJyYKc{Q~etm45KgzT1WW#31>OlBN$|tqr@qq6&)B2;;D+Hb*+@ckq^O5Y)@;U81^OXz9fJ5u~>!B0VdS;BuAcyEgT z4)8-M{!f85(y#b`2;P&TiymQFiq4VX=u8@K@#M7qz#jDdBb3(y@Y+;{XnK(tqO@Vd`bb=$g z3BDb?D8cWb{%${@s67Ra>NoXG&Mo#Q_5EV_)g$#w{@$IEzcoX@A%kzv;7^0^Ijoq7 z%xPZ&-L>D-lLBc^KLPIsNBIF>e-Yyq_>zP!Yhd-r_aC3Zugl;|GI(bO-K?E@HrX0J%c}%!Qaf_f5_m- z&>$7x;qz7OaesGW249fD;~9KY27fk#zmvhwWbjF zgTI@>|2KoXnZK(?(sNV>pOV2BW$?BPzA1zMB7+~z;9q4hHZhGy(sOtQ2N`@`249)M zAIso}GWZu6Jek3VOT$hcNzX|cd{G8pp24?d@V($o^e;=0DgDXM!0Mc*;9lmDr$9eC zp_^cJ?o;R+!RnFpY|r3ZGx*CH{6p~4qnhKV$PyesIcRJaX1HesbC)@C%l1M8%(`zlMQZ&fTWt6Rh699J)F~D)mR6 zwJG|Y&>y6}iF~0y2L29Mh7G}g06zha#yjxQ2Qyzg7K|uK&p7yn6kX&CJ$~ZvN#l>f zzv=#>CLALF+u(^m7WrFnw{{#2<8kQnJu1CRj~8xvVtHA-u~dwxik`)foG_K1#kMh( zp2g$lRC*epPkL|W`;Q|9lHMKQCrLlex{-c4FB3m;`qTJs_@9BFpNRj*^2c9IeP7Pn z#83Qw7Ds1vB8Hfr#`!}uZBa(vUG`LYX?#5V#T5UA;93e_1HKEa%ICA-O%F8jPr!Rp zbV=4;Z)$vLTsV~Ycwgn$3E&}rYJC?RKRNA2=<0m7U_B1r@`u+xZwQ`V}4Bj zO3nyA5v%URmEaN)uD?4;m-0j~ldPXvOO9LahXEX5}HG_agOm0?`)R(LL7P{*1N5FEXRi@D*|HEK8-zw91 z!QTYSSy!1x3jQ5f&b=!7(xbHK46LG`0haTyD!x&$oQ+lK`3QKyUpLeH2>3{_ObbQ+ zzk!bjGYm!eh@-XWEUl7vCU_lmmELji8^G#&J_fF)=-&o!P2t~zuK+U)Me>U;XZ!{$ z`DcM|PvOhJcY#&@-UoZCG_ z-A#Rq#vj(N3rFJqVMRi}1}yzUA;H00(0_rYe#-kF1xtUR=slz8zreR8^bdih{TCD5 zH-`T90YQ8x@qH`7Brn1}!@0{(FH~AUWAL#D` zOMl^$9?7q*SCW6wqxt~-bKrFT=HEIMucJKGBjbVmExtzLCl~$58E=Izg@4!IH0Ki% zF6YGKC#T&CUCxO|8shKJ`d`|6>Msy;4y%;)u&5onE2J`SbY6ML*&jXErSUa?VJ&pez`N}7N z^xsDMqbdQ^Q_env3~iu3Q;Hu#Y>Q~9%4&f~{VPP=&%`hMg+MSy(YFTldD@Z!ta z-+=ybLVqBWzMq0O{!!JBf_6)V{8u<%(4MW)|M9)Oyf68ELP-AwmPhbgz=9>F5j+^uH-AFFc!hKaJPHKYwjey9+)^|6O45mmvMW z`X0gYlha;x9OZ?4)gC2W-jAQ0wgLK+(51dgdfowkHid;xd^E&QPWv=;|pDy*~V}tScsP^zO%I9jzpXNe&c5ByOP5(fA@<@5T_L>++`2&tNVj^m@ z|4XMwNRhvdh$qf(@e2_@t+Dv#NYm4J=?YC-^3AE^nfNVI{HH^gNomwS@D(Fq@jnr@ zZ*ou`!SNGg@kucoelkOUz74*%f2zDJzWtmgy|OhfKbr(ddHe<(O{)2k{Jw?utMffk z`Gaqz|C0El@e=;NE2%%^r`T)C`=@{jI0R{l5y{|v1BZwQ`y0*u73>i#Xm{pVLJ?^=kyI z5#OQ&|0P&Y;eQ8jfM2zL{}TEGusrhqmEhaK>itLQFK$!yh4MXYXPp0Q;FtIZ-U%i> zlK+CuKVyDQd`kW{@a?~d2_y0S2Uz)b5q$Eyw1!_5!S4XC}$ z`2KWy5u-hlO26PIGI;2Mq6G8A`IE)t8T!2!6(erNpT!4koJ!APWf!B~Pvd{#d+z6Z zqxwU8kVo0gDE=%~_B4u~#mfFh(X)8Nre=DV==8V5ZxOGw$H@x)JKwvBq(tSrInGa2 zp4WnVA8pq6Z-XU&qw$LRaM#wj{@BQq_w`|ovp7w8e+`!J-=5Havjct8Kog&Ib^QH` zK1}rRq=RvT1uc9Ax9qR|uf10G9`f(cHqaM{h(%&nzhg09*3ZGmqN-z)hCsq0n z_(wqUJwYvgU&TL=iSKH#yuTs`e^S5F@P4zVB$&Rhcoj2DT5ao(JRq^)(jP#N`m=;TO}`%c?ueH-A98hBAce-HTj6c%~ngD8G-+83b<-bH}Q-!xtLB7a5E3+%^H z5e28$_i1{>Rxd_B@&#k?D_=zNJs*{doII*Ni65f)$!TAMetYWsegziaMd|z(toY?u z{29d$y4!6wGH5B!KyyI9jtsf zNqKyo_Ac>11;4b%{rEmfufl_1iU0nD{%f%Kev(J}hgZHg#!^0l@5+4tHza=2n{E%v z=aZ!WaF6*Dba`LZKf&>XJ`(y1#5a!s)gIQ!xFr!#rLG;{{?iN_^y@l zBl#Y|@q@dQfd2P83g@*x@KB1rKUn-rDgML2*QfBy!Q!_{(T@X*?<$2Y@ZBkV5?Fjr zDZ2dLH&TpYlD;f{B12y>HkCh(S0R7nWkv0FB&zQf96xb+X7TeGdKULyIraT4UXr2v z8GL;PKm69I^0IivRa5Eq+h)g`GxRjRj{N9J8H{vr4z=+XEJe&+pr5AvlykpAz=o9Pe0^1k4CC-O(~sQ!F=Dm~x2h4D5OU*D~~ z50*#bdwqiCO9d~_$Xg9oe#=z<_FPK-F!TxJHTo;$4DBrPUwPvEn@Hgg!M{s=A2s$H z;LYD{&KLHAcSA2mZ|AkcPGY=;uH>H%ei-_33H>eL<*4i55-STyB)gnwYnOjgk7XvqgMq zetB#6bw&B%iOVaC@5|7i&fw=WxOhV`lBVRP@kgo868{}UCF#?t&+>j`p96ji=@*}E z@<@HWvqkz>X5`;r9I{4=KMS$y*?Q|VcJ{|Bbh zv$+4Zsq`#<>Vs41S-ks0Q|W1Z;!5WGe6Pw6jpv~he+Ydi^hJbA`O35W!^P-VLUyfW zeVw82O3}Xt{gD*?*I?ymP2?>)mHw9e-yeyBPXsIfXo5qq@_idZw0l$2yw72hob#N}h3mE_0 z6kZ4RQutQJGs)kjiM-d-UZs7h@%7{2SEl4Y4L%OsmB>HlL)aUn=$pZ%6#g`LS&IKz zu$`ipKCEdLSf%$8zE?fcpFeSLLbG*MONzZ}rXFdR3;SuCN z3H{K7zB42LPViFrB|jy9zXM(dmPfEW&wscW{Yr>DwT~8~-u2DIfI3omUj_!NuL_8cY?>&_agsu;GHQf@9({{C_g-L`m=b$ zpBE#l(0|JN%BP&9_Y35o#4qRFB)z%YSwH+;G4cm0^=%dS>)<1y3w{^)7eB@xF2Uah z-%NTgl-Qv!_z3Gm@WTo22jBBVQTuwr-@PhH3O|w`dIrBSga0gpKcB%*WpK~xsqzJ- zzyCWMW9$?f``2dhUuN*nGI;Lkv1IwL z7X48A#oAI#u? z0$(++sI8f!F-CFT4gAPqasMv(58(Mn#QmM%p0(7g6y6{F^x;LVNV0^!6np^m`3XJ- zTw7Yym}W+F3;aBIPlC?^Kgs)wzYI>lKMWT8>HdU&`|Gj4`(u%qG;9L9wV#8ZCcV;M zNc@kT&HVdF^mPe->pIeZX)}F)3ARa}lJ`OWkokb(Kjs|fLl-o^_nTmuj~|f8TYhe= zzqup9?*fayM&Z(W(v#wUKUnlNbZb%ieh(J?jKUXefUt}FPv|?rPmn&@kCpHFI{5B` zirVuD{Za7lgUPQ#On)5QUo2{mCG^~R^yjJXtAk~|xILl2?R?gIZ=-yZ_x}bg`U2S> zmiYQEV7+`5-=E-qu;?FTd=&aS!J3u-(LCyU7C3t(PeEKLDb^dMHyBFr)t9p02^Rly68{5WS${v1 z$lDB~*#BRZ@Q;CI|7K}|e*+eKvb70*-5BW$irRRR{}*3QdfwX1?yI~alpZGr!c{Vs*A3g|9*UvwK)AivC@1eb2)6Aa> zuOq&l&Hm~-u*^TjzD?x+(|f1(U+=kLYX9|r!J^+3|1QG+psCz@{ge0x5xQ35W}9)XG&(E}d8M;MM`|_^XD?)^1o9 z-%L`f3~vu>r4kn(N?>JBF7^ydC9bm?9xauk%Pi!6%VlS5SSJ4rZ?oalY;J+jeb+E+ zZs@JnN^8s9oLBOyc8$wc1HV?rJwiRK8r+i_gpOHt{JIyEONP}ktJ^VW=Q6#HWg2$J ztY*iYPRE>`$8MM%RR$xf4Ca6o@v?JIU$$Y{Hd9|#9*cgYj+9DrWlCvPSlM=o6te}S zsCBDSu9y|e@B`fo0&Dd?%CY@2*V@&&Yb0>E2gGeu8NcF{tuW9nZuRi=vgKAn*EGsr z)hgQ+$DzvjD%aYxHnOcfYojdMvo>mCdsc5>v!_Dquq&=(>sH+enk}krluomiQ(_j^ zzBq9y%OyIkOIJ!BukjHvx>_|=-o8;T*Q;jDaGbDil>NB8RVQM)(>jrc04j@TTe{0t z%RZMZ*G#7pz3fEYjF()fV;FU=v>MwyaLMTK<-EeBGeKbZH9xd<&$9xl7q8oJreP20 z{Po(`@`urJ`O7O&Kh!qYL}nzs(Rkaw(mAK}N0IPG$JAE1RNUy5&TFvL%IKBOYjUIe zYnvWvbCK}Q>wchK={y#rQN}N#jW>!;BJ8lVJ1;v1C}Z?W>(Z^ka8R$?hVG4P+#^09 z*M*lnpR0@Nl}gPwEUV^O$uP@h#X|#JCB|i(rK+Y-b>s?AY3)dLG#nb(JSg9){*HQM zU&*yac(8s0ck~WySl3UhaLR@gSY9RYWSBSUEfsI;G)$G}tNWha_J8Mi(9>6R?sf`{YQ0_#!mwPfl`CZ~hblG4U%xG@C3jP7DRCE7 z)o_El<%YUnv5mNNjM<3#Y(#T5;;eDnv%TreMs#N*db1Jz*@(d`L>l4D*=Nj_eM~)O zd2_ZLqI73@)6uxuq&C1MQvAPUhptl%T}!VRPPI~2jZPZG2$xb0ZyAxhWlLt2JIyMA zS+3TYb((SMTT#1d%f=L{6KO_gY<6dCj&>x>>g>Ro(E)o@uIDI}1^t?M-Vo zqB$GUo{czbYJ*wcqz29WDb%1@h?XYzRt{9T!Lk(El}cEt*uKd`(W<*i*E_}%qZGQ; zTBTmI!m3@i%JsPDDXbZ3`Ybf+!i?`xoo1xjS}hzcIhIwfSyqVuIM*?QdYnvs7Md{& z&76g1%|e?kEzT_OxwFu`S!n(&v|wf$Jk2@0znxty!t|tW-x+nghFH zx_ZqFjJo5Q6~CM$I+?6lcEzf2d1O!y%0@YK!b;t!1XZt6@xrnmR7#B*a9hsC!k{f@ zWB%8clO~R8rDT{vt!@W~ho4BZVkm{m*tW{}P*^H650pzW8E`C_IVE3M9o{-NJ}^93 zD+SE346jzL)XNTDCu<4A*m$kP0=I0`Ez_;ks-_nv@0!h39J(6QpSH}BH9Jb6L;+I| zs!R>t3YTgIwOZN8tkQz%udnTA+0VaNf#Zc0*E4L-b69Byjx+Ur+nn}(qADT<+|pVq zt&e_{uv)-;E3|`ZB`DW?CV6SSlRsVW6ssFX!?A5cXdJkco!>|=p%Qr-pNd9maCoW~ zO5#i6bb_Ev)3J?E=LXYqveNV;^+xNowpMpUSIS2+^~>dUd6{&KGI4dix>>8)R^2yj z8wE(bl6?vCgIGKnDAL`!=hfUQx1kb?u1C@>zS$fcc4XZ?=GoDwG}iEq{D>2rUco1y zE0@)l&JU}Sk=y)br!6~GWtS60O|&+5sRmroTK8+Tyn6gmf3j!|JN{%6HcnSqBLV0H zOi!!+E z(ekH_+Nlq18{15@<)F&KPIt`Es+PUFJtf+xKFyRR7X7C>G(5I#H01A^1k^;u9n!lqc8d-mteRCat>bhy^f7JIX+|pg zmyk~5^fS+0zhR*N)U(e#P1+Z;W2fd+EiVYmM%9p&e5c7aUqneX2Hy5x*m7?CwK#9f?v_Yj(q|hpXWt3e% z&ZIe32q#+t5u=cz4nl^KMt>3pHP;R*1``;&TCX-$`EB!}^9(j#1ZzWg*fxHn^9(jS zFE+FD1X!K7N2~MpXmwu4Enkz8Z9NIKRIe%1kf>%D_PX;n^q;q3;IvcwH=K9wYHwhG zrOV*BGca)0>Wk=cxWGMdEx*E&m%HK}wufdG-)P^ggX*=A*)szn7r*-zz2cOaKe}$M zT&o%NQZq-}vo^}9J!_-Qv}b)0X_d?$yL^z#gG=#sv38iN5)joS0&7eJNqZzbkZHx-- zSsUF;TUNW#xZ1P62&s)eqrKEdr`49#={#SZ&f85?z2fctb`96*yxlmRmzL9c5jdR} zfzx>rIGq=P+j$Xi$T}JB+ZL?bc`I-`@8#UiOUv!NwA{{%!0o&U+|G-@>%0iO&Wph7 zya>F`i@@tVU%k#-f!BEvc%2u4*Le~6ofm=Mc@g-X7lGe-5%}!a%s3@#6pw}dl&hCR zH>g!AY*@N1uzXbg7+lp*0flWF1=4HMEU4n%z4uK{I9i?`png&UE!)BYH08#H)0QM*V3!R$)a}p;ow|>LZ|1ZFQ`+oHRJ)_n&01JW%%#XQ zLR3(tQYB<>X&|62a|tXBCx)&aV2S3Rp-HFVe49j8*Ry6g$~C9_cl+OtL$WEmw?&?2R6b!JA@2{4hV z8>jhQ zuIkiWR->KfS94+BHouw*o%XDa0jn)*Q~lPSb(R4uvZ#vY>P}FxP}_#K;hCXn`*xs{ zE0*sDQk5!3bDym(XKXvFYykb~n^RHYHk3uBQmk~3>`70pl}ErOj$ZLA#~IBnf|XK$F+S)knY z?Q*T|*BKkEIxTGG_!@=D2A*DLRIx%o)Y-|gxB<=yjj$SE-N^O^yN4=ivGJq5X5G58 zsGqWB<#^b1F$OU~2og&xX?roFX)7gllvx9j-XKy~^R{g}727px6&~xV2mv z3Txi#vrm2P+SRM1TMj)o26Rzf)%n{@6{Dexshybg4{vqj(JI(Nmp?X+JnQvmp3UnO z=5#Jq$gFvFCX`iqedb!%$c~yr_g3|#=jY-=HqC2#Sa!Xj>Q<|^5ro*DsP3*kD^@Nu zwkt=A8&SD3JUU)-JZyno`iL6FzwCx4TiN88kubl*;7Y@==(m~V!GwqOtzzV%#OH>j<|F!?tto* zI+Jz_EA-H317GdU^FfWX60&8V9m-QZ*wh0PwJWx!%&gOzK7uRD;?3?Y9eOlDH;Kh&SCoi$3#^aGQ2?&(#dBKy*A;A3coJ&;wSbF*y9Hr*m$ zxQXU!!WE>bw(}v zVwOi(XoXd;%ssV90k`FB)cLlY&TL6bom*iYN3mx++_*Q1Kdv-XzG8SAz2MsDH{Bss zYt$AFp1^qmEq-+1K+D>pguoqA?q> zY1w9rZI!nr9N#=#8#A+ql%PdJl^c##%OfEZ0}i5bmO$2Zu2Zu}QrWLLe$~?JQUG#D zNSzTHkf}MxRR$t+68S^Ad-;`WEx(ex@+(;M_|!R@5PG%ek+vE9KO(+_IRIXG8A2NvzgG0QsE+$7bnm&$FH(6&;WZL>XVW2M!WwP`lcp0zP2YR}pj9@?|M zh=Og_^L7Pm&sx#3-40VgV*+%!77}P_%O5^maj#*(Ysh3^7UN1GZvF%y? z*`oAjBhLEfY@IN=otZx~-Jvm_wouZ%;-<)_eQsthgiX4 z$~?MFEH_J~vxifvHabBxlJs%)a-E~ztUQ})HmpG`%Qms-MuTIs;HYvQ!n951?+zoR z-Rw%*ayHt0Th3+j7pDG<&v>YGe-H z3YgB9>kj@aNI9x=SunY_T{CKRukNIr60~J)b`b4Z8%?<_D}70F^l@~cvTbl^d~oYn zNfO9$N!twBn6|v+EFrV9j#*{O7#*l=FI5J)&RCfgb;=rz^PNf6J5Q@ErQV^`&RK1l zc625cYpae~rTTUzRhJ1tXRKITb<8U5zC)=pm+6d^?yO_h&Z`TiKAlSSIxkpkVmg(o zcV4iV&vYsko0yJSJ8uOTx^yhH^Xj5^USES3!P@y}1)YCZ(0SDkI`7_sjtiDOpH7Q_ zZII4cJ1#9l@3?9kdgq@NtxP)V2MpFJ9achoMs&{Fc@AKm({Tbit^+7mJC@2hmrfJF zDqu@_aH}>T`-h`AB5AnsxO{lDHWpzlAHuDdMSn(%y6CS+YbAeG(Vq^8%}fI%p2H*w zoWP7^L`+FI3OBZ>8r-p<(QTY-jV(g9ZM_^{V5BGti?p)})WRu{SVb`{YJ9`>Vk3}n zR6L8xzvz@>sU$mE%|nh&@~Utw938}2$(0<-O1UeFM3zeF!;TxGjk9R;tJZugItzLJ z;MgE5ScxR&O6hx%uhOE}kP%!audsvp7S_3j?{I!QFax_<^Qxx!zKTD4>u};tWo+}{ zmH|!~Zez79yTsAQ+Ebmg+2U#iX_nyyXb;(d^J+|i-NcyR^E}gI5p6rR<6y?ae?*F} z$2q24&y+TYcP znL)*?$D1Q!gTS#5`&{aZp+{C$;r4P>w6Ev`O)MStx?9H3F^o0r8Lv*kx#i1~!>1e6 z*;B)%f`y}(g#$R78W@QWBcfck%bY9Zys%zj_aU+o@{*(DPPBW<+3V=r8}%aATuj>u zl^yKXXM|hSn5lcV>ZtmRPVQ{kN9Ef&C|a(vCtYW=inGnhc4w5)Nq+jV9amBz;txPi zY=?Huu{lC+T7J!}MW5-$R+?E~BhfdkkK3wbKh`qodaAxsNK(~pDIAhkt6%}9KiIWIS!KU?Pj##=b=x%A^F#SmsiK-EG0B!_>#CB<<+zHq+@AJ5 z%dXnkd*EAyJu^&_Ba>aQn>S%XZZ%Tb>=(LR{?x zX{Q72#h*7a(oVeYxt3S=+1@t{PWA6=K3D8ofQbW6x;zdjm(%VDl4M5toH<~ht^lp_ zc}zy4W>(|E!N$RzPt(&)c7j@DwKHQuw$AEI40W@Dp&qBI*^|LuIcXMC3UlTdTIY5q z2E%v#kaJ{urQ+z-#2r9XA)BYBooG%$D@BJ(<>IV2-I^X+aVt>$woBh!AH2jueQaR7 z$7Ep}=S}gY5;+ItZM*8@m{eLfXW0TVWR2aW$q#cu3-P&g!%8 zhh2bMcI)iMM!B8r@y^zpULYbTPw8`C{}y6R=TZ?Xf6N6gSKhk<9J zIqS5K_h;^*JM822nI%Z~m&{IZNYYs+TE+PdXFcnN=~v9U9_Lh}^J{LuVq+HV`^K9O z1NFghsAlpbE+eHL)oOVA2wm*NLcMCnQ)~xIv6)#s)M;OCgsiiXm$jNgFo_zV!&7yGh*zE$p;U=zPuod zhNx<_ch{FxEyKdaAzRFbV;J}X2^`bLL{FwL?M0Yz?QAJRO+lJzH|!{{(vAshdIh({ z(w*Q&r!3}h9mbr@eL9UfD337(9#6UqCO=y-F~GZoW1AlHH~K{%)2B@5KCK4ExsLnY zDkCEefb|28Hk!pG)wa=(u`O3YWoe_8tr*+5NP0Jj?dEHgFw8MK4Y zqQL4H<5_x(sZ3%Kn3=+pOiXxMPBf;-uT*ry*Rhi|y()(Msjj#&k%=u1Tgh)d_DzwG zVLaA^p;M_bImb6joRe{m(DTgHrzQE)oCVZv%dg`E0c%9uZ3M9&pQt;UGXJ&X`7cdm z`s}xcNtTXJ7*n^6iV5q2X9jp^`^EZsq#bCoOqfIbq+HbHF2}9`nD<6%Z#g6 zys$zq6ppH;RT(oLIr4#jNyD*xQDCqnisvV(Sx3Y8X@-j5m@7>g5OLo|op&*XuhE_o z!@HL*Jnrj)s$Ze+VnpI-h3jQH$bGCGOiELo7``SvoKRG2IL!~x^u(DHP1~fGaZy@u zEDOiA(Ql*cMu&@=>X326cNoFqnM~&N6m7NXYKU5obenBtR6AwdPX%#*HuW8KM5JcB z%=b7MK#i^9-7QMhR90(z^a_OPq3!B=jny;rRo9LSwC+S7%7-cqc)6|GgdZ<>)2Q)LnfiOv#?fo@kEH95wDp^;^HK#*GZj@tDSft zeNGg#K=Em?Yh@aJ!2$AjA{3+LA%A#mAo{~F&kC<-sDG1Ff}UHi1~zvLFnnX6G)4cJxV;Icy1f}V zZ+&#|2Va~ubZ!=>3o%uvHkFdOY=DDM`d3q$xMSkn5tkK7BHQ}XAunC@upFo0{sTFk zM_$I$+Zm+B4I?@sYq+P5Mjrnf3(MH`qf{g0GJ(R%9w(Mzh4Z0y-0yV$xsAAlA5o&F??-Eo+*mnuD1T+0Ef8-E}h{Cubp@5ssS4vcKYT6i_!Sk`PX!vKbOp zt@fu4lX^i1Z*b8IR_1tB#=T;I<)Gw7q|_9n)&Ch+v2i`0Au%%WnWN)gbto)v-8SN# zws!TYXP+ngcidEBGd1Htn&?5D4hGQH*=f3o{zuk>=yK2wG_sm#IC)V+8^VN<6&||3 zXk2B|8E*&5W>B=SdXfGFrfKOSA=3}i`{U(H!vU0*qy$An-4Ah`fx?z!4e>bnKbDeY zu$Cz%hq%~qh&uXsYWP3mQy`rctXJ7;;{cF2m9X6AWT)8^n|ib(9>RufObg<1m(L?bSK9 z?8kbmsGYT(gEJ*#pR9&bGB9;AE_9%IQJ;o$at-c|i-{9ZZ30&+(ao!#TZgUmajH7j4SuDG7--@E#KsD*4rd*MZ zZ~BUby>wh~;;EiHRt(RLwSATw^%gDe_`)}QsdVbrD`Xw)jbFhzt3laIW@T7mJfNLh zY;33^da+WNV{&7SFQ&cKs#Q-`PcK#q*WNJMq^Y4{asqKX9987DUMke6&E;a;5fN}* z8TK0}$!Gy;F20WohS2pK8zl*l_r ztg)xxnAXx5LEW$@1zfLKj-%Vy%VT!n*E{=~7AJlh5k=j`f2&)T*}i=rj-kiZvZ+`{ zQ-dJ`XO{78RKcz9%vsQ3OPnpesvD1Ncl=ot&e7(q%%oJ?X=HHpYN<3Dj*Map#vb6M za--(Cz?8yK4iED|wJ@+a=U!%J*ID9|B~goBq_g*v&ES20KUtCP^ZQ29Gw-{AWYcZm z1te?2eHUQOSb;h#10$Jb?RyH`mzsiPO}g(Xc**tPrB-BP=9sd7^QMcV3Td;8u8@#ZN`GH*170v(m zK~BI*ouk9-%%QHtSwbX7ne8g0%~?m@X*S8JJ-O&b89Xw3ZedW>Yra#d+T6C0vealU z4>F!ysv)-!;e!C(zJr};YLB}4%9K5js#g!G+`h?9lw%sIVz-^`S~GX^>A4~<&a$39 zk|`*SidkF~5B3ZAfx%8}#!hdF$mt&G+FX~^nb_%0kwk24a!F!w;uc`f>G^0|IVGqJ zx@D_^?Enn6*s)+|C9pXlLULuAAq$Y$Q`Yd98(Z!p2wQ0G6m^-n23Ec9q)OGp)1}s=cN{I?0ZJrpb z8z#F>O+=R_7rj)_9muIis~Q_S?@P;Y%k{E_g+W>Fa<<}@(a`eIV6qh;nn%g5SE+Ow z=Msju;_FlDJ|E=O@pe~6wSjk)3VXFljhHEuo3YGPCzzMj>w~2dTSTm@N~LvU*hVCg zVHU<_HW`QIXi&!7F0LnSBXg!t^5Y6fWDVUOH>@j->iR3TRECFCqy}!UDjYMwKN^ig zZT_^4G?>2TYRpGx?RFwADq`z9K*;taVOWQ%lT;i$Y*_Rmp<#p-JbbAI z>`WPM$GXtUFim2bo|-urm(owuc9wnAsazw7jhMrFs;R_lt#h~84ZhUI9jJKWhnRgDvzRIFQ zPm#_p383b&$YB2n+u5>bXr`r@=wKLw-n)$Z&ZujX3LV))*jq-nRGrJ&!@|lo<1~D*=BzsJ z^{>BZn&pXI=Rg&S(=kNgtY4hI#zexIVVI5WO-iN6&IFx0n=WHxt5Y5~%Um3ZvAYcG zbc1XeG$s=*GguuCla<3PvS;WZvum7y8$OvqV?0|G8~3EXx81>S46m(fR@7wLi%|PX z`z}J+Sns<8HN@|`1Vi=dFF}M_>F>LU#$2V92wHk$642CBSop7_%V3p=DWQ(#563y} zR=WiIa0-gEu~SY#Rq0mgkgOWF(dwa*ETyCEe8%nQz}d`alv>(>XJZI)L~r3yuf|Qa z?CYe~GqQSZ6GLkg+srp$cSa;ErbVzU+Fq$wu%)krb+kNOSIlgUn8igHO*sSi$7<96g5DkGH2y1UG z%K_SY*{%ARiH6*K9Gfa+Bxm%h<*J-+GA*hxJL-%y@hE4x4D}}W*Kv@;bzR@W?LxZ0 zYGHfJWp*Y`;;@3`oD^pglk#lqWj1L#tzwKSL|Xw#t({STU#obPY8^khY-?8yt}6G) zr#dq@%$RBnnaaEgqdN|JVZMN2for2nR_B@82}s&5ecUtw=}e2dyP5Z=T6d`F1HxQ) z?9gVgWYYC2w-zN?-1Y+-6Zn^uzSiAwI(=ML5!4Kv>Du^u4b$goq_=O5aTzDAn0e#T zoWnCHin#08@>O5Z_QM*}`&mAW6?2O@U`kc1j@pPdRZZP@k!Y`67QkVdYlqk^a4>97 z=70{SWNaL8PcP#M3PfL36^x4sG2Du6VuUY7CuPn|h6Yz;VlZpVHB+$&+vP5Axn>3H zd&V7xdL!=t+DcGsnwKCUsSm9rP+y(2^W|v$e(LBY+qR(78|%1pM|Tn8K)K9e3$%X8 zk%hQx9v&I<>)Wr!GS047(7JL-wTWdwlIM=D`}`l3zr#Uu z5628ihPCyvtH$OT3$3k(Kuc|%&6I}r64ch$K1;CG9_YSHNIJ@W&q*~Qo-rremW5K2 z%qXFK^-p^187i+GYa_%}^-PsDv(_rtacYRIT8Pyq`)O%qTQWtJnYPE@1KTW`E5=sX z*%@>QI4)<(*;vhU2ua6UAJ+<)8=)e_0i*Q(FMfy1$Njy|F#_==BWKf6>c43zVw|G; zWX!F?te2gN8~{??)C?)w7n@`BMODtA;R?kmbE8O{OUatIU0>RI&D(m1jC+G@->I|x z!3d{w%ti9>zbBrIR+h7mX2A4@e5=q$rFLy**jVFKE+ah0WyNU#=NZ)KiyD({FAKGl zUAH*zhvLBHXlEHMdpWSV8AYwA#bR1|FNaBzsdJz{;I4(}z;rtihFYxby9lmiNHp&) zQqh>D$hDjTN;W`*jBA+Wi za-`(U+V)7b+`1BE4TmTX*?Z$aTCG-R8W~0MqRk=e9B=hF-^_}Rd2G3{Ce-nOK752i~{rKGk3+w3YD9t+oVHw>&h{q*&#Hw>J6-r4IZ zM(m7hs0{0D6W3WKDD8Qx6u-#$yf`9>gpR_)13hayj@7!2!(go<=`drH2GB}^N~Y|M znA0!*iH3rBI)@J|Q^%T{qN;MuL&G|9pNG_jLB+mHXg4UgpIW@+iGk`GW}FzbPeU@t z+II=IGELd%oV44eq3zT{nfA;ywUBX6wY}yxyra&>C`C9nM^S! zaJUZ7F*u`%f8V$>XzL`naUSg@h-m0R_dOMA@OcTTP};4RAVPJ{FF}MF0$Yio7h%gG z>kT(@i4=^Dgw@!YVQm0s2OL%2Vi@8gNdfe=>E z9Re1>(); + + // create a Sha256 object + let mut hasher = Sha256::new(); + + // write input message + hasher.update(input); + + // read hash digest + let result: [u8;32] = hasher.finalize().into(); + + sp1_zkvm::io::write(&result); +} From 1c7f257feadb77676a3f1bf91422eb4de705c333 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Fri, 8 Mar 2024 00:24:34 +0530 Subject: [PATCH 26/31] blake2 bench added, build.sh and run.sh added --- hash/sp1/bench/blake2/Cargo.toml | 10 ++++ .../blake2/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 143412 bytes hash/sp1/bench/blake2/src/main.rs | 23 ++++++++++ hash/sp1/bench/build.sh | 9 ++++ hash/sp1/bench/keccak/Cargo.toml | 2 +- .../keccak/elf/riscv32im-succinct-zkvm-elf | Bin 119608 -> 114172 bytes hash/sp1/bench/keccak/src/main.rs | 11 +++-- hash/sp1/bench/run.sh | 15 ++++++ hash/sp1/bench/script/src/benches/blake2.rs | 43 ++++++++++++++++++ hash/sp1/bench/script/src/main.rs | 5 ++ 10 files changed, 112 insertions(+), 6 deletions(-) create mode 100644 hash/sp1/bench/blake2/Cargo.toml create mode 100755 hash/sp1/bench/blake2/elf/riscv32im-succinct-zkvm-elf create mode 100644 hash/sp1/bench/blake2/src/main.rs create mode 100755 hash/sp1/bench/build.sh create mode 100755 hash/sp1/bench/run.sh create mode 100644 hash/sp1/bench/script/src/benches/blake2.rs diff --git a/hash/sp1/bench/blake2/Cargo.toml b/hash/sp1/bench/blake2/Cargo.toml new file mode 100644 index 0000000..31c4ebb --- /dev/null +++ b/hash/sp1/bench/blake2/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] +[package] +version = "0.1.0" +name = "blake2-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +blake2 = "0.10.6" + diff --git a/hash/sp1/bench/blake2/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/blake2/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..422ae58de4938a6633498f96706f6c0c9119d168 GIT binary patch literal 143412 zcmeFadwf;Zng74m*=L`Vgxp}uMMp8@gb*XfwyTJCrY)zMKxd|Q7{$x9)oKL1Q>Mk* z&V1V(4!Hmd+Ec`KW@;nit*sT8Ay}<)#1qg~DOON>Q;Y$;VQB^NQuw`}wa+D>^xN0# z``_<1zFv{!>}RjN_FB*7^L(CX@AK`}e{R!StHOT~^=Bo2tvjYpeVl*KZi%=o(R^bx(KNwN zG=9`iG$j2*{Y*bmcafiHneTDj3!=UXDryzSbfQtKM3YvTXi{e?KB5xMGj*a_NBArf zly|61x%Pq)(^O`}M%GFBZ_0A6UNv~B$+Q-k< z-o#|2UHJ{|SKifN%I}(H7vH7k{qdIf+rN0XN^{H`=v3{;T;mO1KI=Wk)a^&Ldg<1Y zk@g!FcyfI3>RIo2x3?;9wU2y^v3)szzc-QVF4$WW#HOkC@8=r5#w7C0(NF1c4(mVV zO-yO;gsg5K=hsd3Yq^JV)qcrcs=vHewJ$6mHFd!R<+ZNZId#ee75J@>WRQ{j2+!|0 zrakJ{CF*)3iTaOvi3aW`QeK`53=XB~+(QPfW39?;Ol@ zj%IDwMB1a}6^TmCHJD#4r86<+!kUHGnbyo&dF|0wKj41ae|MLxi|5v*_8fn3&g{Rq zbvb5=tc%xv(=1sR)@$~AA6%E?-}N}wUNJ?_Q>ubFd9p_B-*2svIdLrF{c}nWet-2_ zvTrM~fSn!Fu99Q({&@Ubau41K?AK9#WS&}I6|f$|?|*Pq`5!ZYx?nNuSnXFN>TXks z`Uah7xL>8~vcA`l^3&*KhwkBJnT)2tz`hDK{>X?^-FrBM2{kQ zJraA-?c=A6$SgWawJ$om-1y%`M}4&_-Yfc}Gk!`1u|3!tYvgQg+6eSV4@O)6GE9GT zXjgN*!8sE{{W;3%k8ZzVw&;%@ynNyj^oMJpGlLzi?}!|F6lHHc_SR!>J@(dPZzJq& zguRWhw-NSMvkuYxzD8wjGroV9>?`Y!FInT}p0}$p@>#h4x&JwI{ry`q{xluLw9c>p zjk4BmZ@O}KmGolT`)*&fKET?m^d$UPC+pieT_q;3QEtpm{~>ITd89NtqcV{j3ZFkP z^%Uk8yUG0idoUCGifaGb zHYJ}A{=h$wZf)hBKcWV2&K>Y3cH-ag=g51je3`r4qgxj@r&i`MdZOx=J?a{`!T4KM znz_mv&h6k>tZmrZ*x-%W;soOSNAcH5or$uR_@wq8 zKid9OH0rHxQ^e_5`mQe3eqDLgyE~S*(L!7-#4B}Id(4lCAI1E zr13=xUnDx@Y?Ochf{jHI4fx~w8^I={98rx=*!_@gw;-a*z11Fou3t?kmE5MYyjB_u$DsivJB|)qQz? z_j~TGo_nk3-s%%|6B3D*k4{KTPEL?Hto-A_gT(VMPj&vc^^pMI7nBiSAWFo>gE;^4 zllQ}qWuiL9y_N-F5sB;J+&iXvtgXzSeJE@HN@rPc&0Fzc$`}=#{WWF$+olERPWw@! zKdLNq^a5oTPtoW^)SH;{y~eB`Eb+@SF~7|8-H!b2tm&3$qNO+L<|A|A=g_&VFUu@0 z-!J+!_=ECy!}*juj48hdvBJ7e`(#3;su`y`Bli|lRr&S)`yi?VK0l7nqNRIT-<)pM zf5*H=F|ScJ)~AYdYS=Og*|J1q@2K|ca?JC7WnycmmCjX@5@q@rxmFNQ9hdQC9^u@> z^;3WJT4x@gZcQHVwOw?4x^4dP!RSt9X7{OJOiX8P>e6P%0Dp7;&ArEh-H_ABO*r10 z{?X$zD>{`O%BjpvF&&KU)^^Ub{Jj<%U30A0wq<;}Ej!+uzI}Xp`kwK@m@Z}JY*WG5 zxX!HX)@J8U{@zGzxe=KZGQH!y8EeLKO=WlNP??o+9gOSIX6}9^<9gF?JT5&wb(}Y& z_qgFF~WCpkVnBR8Hg#jFPIQ$oe=wRzB1PK2)c+aqpuR*oNwIlMLCY#hx*50F|uOw z_zbb7FgFO#&+FTH8Sz!hkF;OX0JbY9K9T<%qN^RFmeBn0cM$)ITD6SNFWFJKiqA6f8&pF6zH(oMjs0+1 z@b)R3KZFkNm=;_!a4@rXZ_U)W)za3`+vu(Gu@+AKnzItuxI?9 ziH#$t8i%d#^+6N&acGBMcS|4SD#@m z+q?FT%EasVeD5)tc&%#x&ffa;q_|3S>{FSo-D*__^Lh>)?>t2%QrKc_8~6qLi7V~h z*>*7VY`4y!-|1Vs4%(gjRpN(xRp#6t9o)Q7rSBX#DE5%JbuVKqME{YyBc{x*h)&$* z>)^Q_YzJFI{}Z<}-%dV@#SXFtdhp_n?*`qc93(~_?ew!7ePjNE-|^qV2kG`J*Ak=t z2)2zYuW7nUH+8FY{YI|8kL$%4e+*-u!@4uq!kDk--p?!`elKJFCdN4zJnZ&_d+q8% zwp(Qu5a$>AW8}CT%XGEz`E-fZqvcwe&M|In+!4T%eb_oE)mIxc9GbNP3SYQM>M_Fgz&&JE&|^7klv6Uq%P^WPU4IWG25kpHmjrMaG0cCNc# z+MlZu3-_s23u8JR|GG+~*K%$*$5*OVY33NeLnRh5-$fkv`&FV-KHJFgXVt1sk=>~h z*zhX!G97Q$+A z{Ojuk{|2)<)ha#@%Jv`3^vqC$oiuVdfeFy4D$;wa;h zd)ycmoS$gSk}s@L?c<2qE|<7p{99$fx`81gQ+@W+Zv~g~yW3;`=it-)=bgWUUyA0} z;u$_i_9HGANHl7ArzE_Na7uMt!*NS+GFiRyUde&h|9jx?;cwz@Y<*$fzf;J2mei9mLe?wjJc_-`a_%1s`nW7nALdf|+$YLe@=u*9 ztBtn5HFioSTBh2+GH$Bu6M3O-|K{zd1Ql`Be$5@H28+>k!Cu6@_Alq)ueIZ(S$F28 z$qi$*vWKBB==jfcGdb3Y%=5&g_9nCD5;rfsyMn#0^>VY6H^6-l%vRpU1#k+TVDa3c zc>C4cm6schoR8c@0I9-a$tUKhqfy7 z`fBcxx&G(fAH2tCh2%HbJeV?8k-yjVS9#=P>4_=$8gjEn9da3!V5kw`Sbj1U{L7ew zm)`xZmph+pf0lV%#yq}}p96C_EH6ptjz$KII&cE_becL+PT~zbkIdu9yrR+@-(j31 zu#X2~8v9i;@r=~vl^FIY;JvZ2m zaXocc`Q<^`wR6mLe(%}wlb~$eNoK|f-G5&7%uLVzNp{mQy8qulbz)}WpR)EdUsO}S z>i<{ZZRjx@u2B6OlJ8~GcAL#DQ2m4H>3n&k7( zuMXmOoRw(d_o>HS2;olAD7l25W5VIcfL?MuDm>_=y=oo@s~=+zg#%~-O~9( zFPDzrP&mFnZ}*4!TP0%eI;y?f7pe5^!m;#9o{LRq zS??{>b{^yS861C%<7bega2(Fq`SE%=9*uB3!ugT(?W`UAzpDc@WFv{jEfJ1;9QQcx zaoiKm-*NwwIo`4b9IZvyqJa;O;5d@?r>5(&AM~YKzd|e-lW0hdA(o6u)J+%*zcLzr zWi<7$(TS#uMkgBQkLLJjj*n&@qZ2J_0*UoO89$zXh(Ad`dZ<5fIrNUFmAM*Dpdni| z+()G!U2v$ckbGNY=ONp;9ob=i<Tq0|hlKCRritKD;7ksF!71^d6kzIjoC$g)N?fXz! zH(&T7=8J3&*&$^29$B`*&6ir9?=fGG`FbBZ-^-apT~hP`*;Zs{BfH?kWv@WC{vy!_ zsSzT(8ri-Nmz6zk>8)VC$mWn8LU!+wW$Sun&7#a9${eE1A^M^7m2oHcR-!w|`p8a1 zcFK`uTSRs%vN>djkllM^*+$Wa707lXyBgWPBg;+}*;zjG^_j2FeElQNw?*!4G_pRj z6OogZ;biIm~ZTe^R1VA8;vZS z{J=zHryNPC2q{lhX%ebI1-MyZ6Yl%}yVX?L>BU987hnY#vjk8&4O%Q{gq99x+3!#kbX_ z>plF|%nH-FLmNLw?KQ^V*|MO9&s#1kOE-EE+xe(AYiGIK&@SKV@MofFOPP825%AUq ziBlEn#tqc=2Q;=sFi+!KE~+56)cmN-62@%YQkJe?9x-H%_LMowc5PL*3U21Q2(~)2 z%s%)exb5@QU9uJF`pxefFV0XR5nzu*;s-Q+I;l;$NR*;zP>zUm)uhH$FT=Gjd-Cuf;d^*bT2Sr}_N- zsT0ZBvv%Vfto@#t;IEA8|Elc>inz>l?_`{>s9=dwR``m^d!lyQQ99#Al{w=k);tvx ze3mKeUuYNA>H=;v@t2jk|0reP!4l2eqjr<8&E_3?>ZxG15##2WrI+fd`@wQ$cb;X+ zYP9+I-)Zajhz>-}jEUMj_9-xGkIJ0CNZZR!)4_T0fJZG-=8~v3o6gndvrBZQxxyukFCp{l z-RyJHE6Q9>GftBZyq2tQs;l`u8JHgCJ7qt5evdNMZnxAvDrQl)KZcujVfb1=`AssVqPbu3r3$7#v zKgam5z?Ifbh`Zcm8-HKEjj?pxv^|Nwr($+sYf;v|glyBySW)(Bkxeq@M#c=_W#J2N zj%j-poNU9I;+S^cHf080({>=x0Wz7DTxZwLFdvd@&fNyjT!BwW`d)K3W|p*R#*LfU z69%W~ILTCPUpANn|PMIstmRRluW5%e=bNi_Q!Rgj*iI{<Ewd5-_mv$yft{#Mpr1)cbjlFRcZQn%p!Ewzm1=qvK?R3 z_Msb;tpwLi%#IX3%}(i)^J+}h|0wJK9KSM4*=VOWKj)n5S0k6IHU28(X5*`pwO)gc z8t)QhEwZDvEuW=L-(AWq!e7%r<4x36rc>k>h|{*(56q`8XH53jAHoiMqiOWgocTLtHol8b-yXBE z190t0PkfPiWIzYxLW%kecci@ZRo?suj=6VE|qzqTibaDId6{_oYN)sJY`QaHo4ZS3Dj1=VT;70N9j5k{LAY!NA4JXf-Ps6Rhe4Z-EnOBi( zN_yB4x-=kjL-y^Wtld$PwY%Vf8&e}q*Lr2C!!T~Gz3#`#cE8WhByDQ;;RDd!PR48? z{x#}Rrt2|eZ=xQN9A&D$gb)4;vR_xWX00-7k?r27(vwrwrt5p!PCZ3?Cnc-X^(oIT zyj9!oKOs9E-@v>_M3Kk0EMe?MH(%!Q1Y@6rZYM{Y$}cju%ww#!(QU-j81h`Z3;D_9 zeT`Yqw4s}=HCk*x^Bo_%{uB4EL)+i#cQX3Bd{Em@e;ePG ztxY#Fk40VRBff3tN{!?Dtj1 ze_7kloR8i-#9FM0*`+Tj(}QmHe*youi}koM&i?x546Dqh&uSZgi}l~c@oq2)d(^xq zYN~dNZ}LT7%u`^=Nm*=rA8WKHX5!$0(eoV{G+*!NcEJN;ei$oLegQSL6&;!iTq z^82p6$}apWww;XIPW)N_zvC0p8Srs>GJd4;yBs6F`RMxE>y+d%iN-zBf9l)oU!``O z@@*M=)%PWBd)6sC;<-FF+0ADo(Dz4V-#wGNL)qLyojC{Jv2wIBJD){gx5ICYrdGa} zx%Y98S@a5<&HYr_fn%v-iR>73t{fTD)WbZI&;fdWrkjm z_!`OFGzLHWwzfN{MNUe2PVZZio_*@KI`hKYI`jSU%D(w7V^ib*!vTEivpU_94D7OJ zw7vfaD&4FDZ*n$jE54}hqVIzV?njq6=iz6xsr((XsY+Y@yfzQC=yY?ok~jrM0H2jV zuk4b0koyh#^Ss1!FWsU?*<~X8Df-EXX(Rp~xfA($2OT<~&4U~paT&Up9c9X!wf)p* zwbz^)<#fmUHF|?>R==X;TBaObJ@c1flc=*3TlKKEWux&8PwJqjiuGI*w>{!RM#hO> zF?0Hp#2m48?q$SR*^3?E#Vgpq`M#;xj1K{m3J&?)FO=P|7(YS$k9~>Qi_R=OOIdR} z_KQDQ^zV$BBBw)t@mIHt(%EXmq8#0P;JJHcvG;5-|XwWjiyV8Dk2GlIp3 zbWm9XP9+v~F>XCP?!;t`>AV~HSzxwQ4e`LUF=B++O6L%9U;*;zYa026`RFgXO6Oh3 zPeEQ+n-RZd{0EW6$43_sZ@KnjWa;C^E|?4YGG(ib9XS2*A3(NG2g~tW(Y^G;gDt?# zriXJT%YEvoX}uj=+Jr4(!z&qAY^iBGTnm41^|igaPi(|DIqW_+PZi|`MeZUvuTai7 zxfF8DxAivgN;sa~u~9HkN$zqP4?Q79+Z?$<;kw|vM4cv{=f}GW8wMYzPfEq?^$(*L zNw5ia-}ifM=}!c=#?#;r8$ZB!#5kY%^=$;V$a$>wBy1mSl5WQDEIG$v6T5`9_x=aW zhVDi1jeV;$SPzVZJ?5?_PsT_5fW3Q>T(o{<$)B_{X5B@yA7G2y(TgOyh9Akxo7bxy zb`alVFGIG)?FW8}>$QSI3gaS|Xt}W{D}Ku4ULr?GXy>2CkE6E^j3XH6y#3nD_O;if zN12{7Y#IN1a&lC!3fnaXuFL4juAT^0RxgNcunXd`L+GjesD;#HZ8GlIr-W$ zk-b`3H4fWX#HJQx@eyTFWXY*cPK`=8VRuE@PvI+w)u(ydF8-9vVWjC1*_)9~j$~Y~ zB>NO~y%>1oW^LA0a-C`o_V&$;&G-vAp=S1|Y!|qNJ?JM^EGk2{N5<`vSFz8T_!e~L zjK`6khOK8~*85t>C-oEam%XI$H~1ADwVRP?TgCb@-qJ_3Hwhhz?SOxJ5C3=$_NU`! z<5T?07@K~{d0c}$hrgq?XA^Qexi0+6_2;1<;#1h0-2LPl_<^UfZSoTEQqf=7SFw?% znPMXm+j@`aY{YI_Mb8jE=np+`9gm_TNk6l-(_tAiv@Y~Pt>l-RmV)u~a<3ydIpr1Q zcC3@Q8nwBri1k_Ra_79P-T5ds7mjD&aN|`u->_~geiVFBb0L1^cw*yu#F7>0JF%pT z@fx>8@l}{a<>w;{HtD&OnyXLmYpXV&en6S!yCgo>SjlbI&6aU%>|$gE z$H+P@W-a=VlW|+J5yq{yo%pnMD5xMcm?H5*c=v4Z892D{B5HK(SLHR@T>n#T*ZxwOs^3$~PZ0hixYworS$%(`}Cx zWx)`k4?xb&k(^KCr@_aKDaQOI`4M9VW56BlqSIjxBxAPc@F(|b;bk%+Gai}U-ztrD zxr~*C6Cnnivchp9=>+$-D8qg~26wj2#R&^9Vyo5)-h&sp3t4XJ1Y%0f$@o|7IyMJC zx)+XvI9=Jr{E1Ut*yof}1g}-6PtJNS|M7oHel$zlnr&bO&Vz5_9!8qj6XZ&5(i2~6 zs_`||@Ep~<;hxBGPuon+gwGM4u=Ca0OvR@N9;t$NZSI9PNyf}S z{+Rp1j}W60jlJy4H?>vZ!v25KrW@{M^7bg>#q2a+Nd)-N&9=ag;lKmKX(D(VA zbIb4pO(T8Q$+wT*#kfg)8Qe<)^I5u3)-NJCuKD;E@OeGh$c?^j`#rk1j~+w#kY~EV zpL|Ykm)X`uOzj3s3O?VUlv(p2C(ssTj2>AQ{=8f zuDRDM$XUiD7DVj8@4%%RT>4&V%=Sycx8b#|)4P!#dR=9^o&l5JM82M^ve%OrbPFFs zOucRZJPuFP#kJ9OWGijguaUh*WGhW2emySyMz^xdb|8y=EOFNlY}X6K(S4dZfH~fQ zgF|2ZK9yOH&slW4wx@7SAN!iTM&f6+K_~1f)K4dA{0_La>v?{_{L$Gw_vkr%Vta1K zN6H?s=EPfcKEx+uiE|8SW~GjL{6&LSsR!to}~hLSO{OVf4~{41Z2 zL)T{SXP?$MY~secO2$ed$NmnGS0R@Xxt++>?%qrcyXzU27K-OCEVT^ev0YS8CpY`=}wV z{7IS9{*9P*GIGS9$l1tYdkye&lTy@_&_l>Nsn;J!TjES}*~e zYc^`mz<2!9-P*?P*Cu@hdfJ7|mZ(+uoXI2cFUgqQj1K1DQk!MG&Fm$*dyiL9| z8^5wW)alcI#Qtc9fyKAksz7-3h~!_^UIiz8t@sOKDbIQgJVj4(r^=kwMU3S0`YjGi zNNlWxAiHA|xMNF1@Pw27@>;Pe=9y(5S%RN(oZ|YcuA(n@Vrr!A1T(B9PiYcf_E>GYh?B8v z@E2Rb6A!~XF=l<%PfsK__Q4BlTZQYuXTW>Jh#fp@XcliJe?dPX~GQRG{0L>}J` zUN8d}IQ$We$Hp%Pe>BVtaf~s(PTi9vEF4j!@w&!>_*9wOL&5{R2 zAEU;*8h`Umd<*`Helzq2zmmruqXefs%|7WvaZ1Z}nL9rA4$%dNK^(3@-oEs7315VM z7W{+15^i(g3G^0UAvmP{Tg-nxzBcqhb~f{+wrg4g*7sE%T!7s1T>oln$CIx-{- zc{9B6Dde^%r)tvpPrDqO>Hg?R zIYBd~_RQi*)FrWVg}%fGz$_b;!*q@0KcY{k%@N*Zq_d&&DS5y4iZUb6gVW$W%1@J6 z;G4$POe#vX@ z2Xm}&Sj6F$F7Oup24?vJ>S*}>De#F)MSed11rE1U_{F{2Yl6cS>=MI1y6_vz@vnUx z>v8^taq%yG_?O0PrS13?wWA+`U51Deos0?R6vyT!?-ATmW&9uU*=)JTD!cf3at8cV zCq5!Ni(ZUKh+7t}W*=s?Fi18$J@^l^@_|<`7F6H}h-iOG695U&JjBe*NJ=c-U;MM;%;v z6|?Lq@)7dM#T%5h-vAeUOYq((vuraQ$N_Sk)F@L!ogP`o!PH!!?aw&2AA5x!gL3w0f=}+o*b_p`@;SJsP1Kp-RZPX_oSq1` zU_W*@^$_g5aZQL<+BSuFIKFxHX6N4=778&7 z_Fu#-mDG5M6B~#p=fKbV_zAFAnalx9i$4K}2wtfkjzcmvzF-!x1>^Wm7Otd#S#(Va zhiofi78_%(;4<_RKlKpf!mBhTN1E#K*x^%Le=R!I3Z|`~CIm(qF$Z6Htq!Woz!xuv zyb3j6J4g+xVSW*>*cTlRfmi9{y)Vq`uV5DQrpW5BK0LsFKkJA2(476)Ql6_34211@ zf?0?qCU;M+?l@Uw6yD)cFxw|};jX|eLw`aiB|psj zqKk82HyiRR$T++*?;zLRUc@UFUWYZKKP1nwoJ_7=b0CjFt|4AvV0Z zp@TK}=^|Fql_ji_ti*SMRVF&DV#@b|t#{D-fbKYc1RFroHA=U`G5C{VRVD zkNb-F80teJ3szbDxUx_EM8m;j(`zE8vl@Id8h&Lfex)~7z$#oTX8#fXFL%7yINU4P zF+Ce@PQPz#R&jX@U;DCo&4{%)^{7Qd=t4EtVs8@hdnyC9Yj3TlrF!O`5 zz9B{dFG@TWjFM=$k=`Xgk5jHywry*O5q^#BUw$pelg{=XRvE&c>U+t7{zdqZs2%ui z2~Qk`RqTsviJ@;vymvSyvy%MhIegDcad6no5>9zp{7Fh|6#v6H1Fys56`0LFlW zDAa!HwfJ;b%dolM6>*1sNifRH5~gr99c)jqNAALs+-{NEg3kM4jmTjXY`Ycge0c4L ze5D{4Vw7Yoto@WQirKM|JX2~;*>jGeaDmDjq=GMR`KSrZi^jO;e7U2xcwBdXcfFZb}!t@YmbX> zEn*gjDeAYNV`u6x7Hurbnpcr+Nm2vP`-t86waHt=*MV1VWo+>&V7&a;X6NHYSpycb zt%KBIFLM|rbM$y+c7&WtaKQmEN=`dGu?!6G=^v1Lkoz=aH;X?3_LV*quxvTD{?Oyv z`PUZw1Q^A9`he7bD%12h*yZ??<@A$CFG}oN;FJMvD=uW*RHdnY4B2JWbh4FRL&_W0 zx59dolROCS7%>n00q5~)YS|}aU(1iDh9KkpRAs7sYV^B_H*ql3FW4J657Dd5lG_{| zVvDjGZ6mWj1h1ek4zExbhJUfDfjz;m^mV|mgHtB=qNB-}{k+7UWe(Gr?r#$x&_^E} z|1t8v%2|Q~@|=p>M`}OhJ+AiiXVxD3l^Am0Tztl!s9Ag-$0q!ZI7M_rdQwC;ei-5i zI2iK={->_@5S)^LH^#P!(+?4svfy9hqu?5me;xVBsUlV}U==V8b)V_xYYR*`o34r5AASV-79dL;ss0wS z~U;API$kl?&vyT7BNT10Yqcw94>qCXQPf!MbA~+_G zIjH-XmpjE~z$V!B@VXCuCg8(xJbFzmy(U~Y#3rqm=P``$-uuB`M?Qd0%Bq-WlAMQe zr{EXz_{3HoC3}n?!Cy;Hino<@1($S|u?{1B+aX*^5=;U<>-(X@Bx$Mr5C^@4c3kan zT*A5$Tk;s6XK)XBYt%iu}D)7_+5xizB88hON4xi>p5vBw&ymX zQzA!<+*) z*-GuFz@xy8bQO3MxRI8uXUbcSfK8Ht)PC$~ZD12U44Z(TN9^EwAueG*usM301e*v) zeZUa&72G`r!cM;1gH-Nr6wepVnn!yD?jV zE(kU$^Xap?JH#gRq=?>y{0Vvr=H=RX{v=!CPw2gH{;Cx_YkQ%HOYE1ib9x4fT*s@# zaBzxkg_j=qEp;4h9iGL^JrBLwUX-(NEt2&)(Dwa9koi7Ti1aKEWl&7jcPseW1vjm{10+fy^*W;`r8vY>^MK^k8sJcoXuLVZ4dM zB=E2W>|(#1$0X7#oBoE_Z^+H|8T5>MZQ4#R=2zz=vdgBbcP`IP!HXxR|&DF9J3>1d}+NG4oJf1V1N!#KJXs;0@FE zlOoP=7^c32VFYWSw=#a7N748c)_52$!B+5_c^tC?`6e(=EBNH8tNsc;Nm0Yy1U{%1 zZnV~u{;={>kAP3G|78VyLSLNpoYd^kboj(npOMEVNqSA-Wb&B9RD6s2 z%@Yon;A^UdKMAo3K27qEn!P2w12!q(68qG3^x2$1{33=$sQ>go2e*%pZyY(CLx~C| zVI1_~4(BUO4cJF;$&}?_ZNVkNhonMW(s~Rw-WzkcM0#Eve*!M?XQBIG0_jOP{ST6t zfJ=VMdX9{{UQqZ6+k*~#>?(8sf6%lhk4eZ;#ZSPUNbh@sXNC(k8R1Ss-4H$mooU-# z#2EHPd=KyTEXW#q$rJSx#HK?(;W++bm}Cff>N`bwFiBeC7Tig?DdpK2#}%=OdHrx~ zB7UNPP2krL!6xLk(vx!CI@aYzt}h%%KNw;!*d#f!giV^@&c**QP8YK18TVE#bs@X1 zRj>)YZo{$3YQ`l-bRs)hxWg>t7O)8%?;+Tv6a5HriOp4lvz{qp5-XUb5snG&!eNr# zf=P79gB*@Y3Oq<2lQ2KWtsH_$c7aL22yQ&VBya8&-T5FUxpMyp_!9CR;!idHB8eXn zOtLBDTj`ax>gCXnI84$JViNiR6Louh)BUFS2Ji^@ZVG*=f^V1JoyQ{Z`$dlAT=o?E z8iqwIxB+Yz_Mg%JYOdNU>nU@<=YmD>A$H@v{}(Kh#Lu8hd5*-$nAG)(SmQ(Rh@A~b z(zwQ9AlLiiYC7Z}MLd$NOvC?_YC6{(&XZJ@@CbR$B#lqN&RqRR@JMbL9wFWo@d!Qk zlTyXHjwv4^M_CKbC~zh4`b9iKeqH2B?!v!p8^)9TPso!{Pcfal^H^jn*aX`z;1KCE z`{!R`o5`3N*o;o|_tO8wcg(@p{8tH!G-|L2+{<*qB75j-$zze8xHjf?o#EXC@FiLLmjeDyMJ$}7S$8RQZ^0xp!4QH;ww5qSJ9b__zlb$lt){LQ zpMI{)6Rh!zB3I&Y3Gup!Uv}U_=>H1qI{Z8EYzb$)1YgoHvm`5g3B88QiFNv!@GCsS z_8go>S@9gRD}E?%(k#5{+4NJbkp7in*aRGY{Q~U$=k&ocZo~X2_dbj_Ar~oPlL2Zv zAvQ7BIWC62HaJtkCG^)y4{QOK*q&L8N!?6hb)(=C4fj^$OGX`vOUPkHz_$utvUs)l zeE5}Y9wYp|h&K+$CC2d}+BdB~Rzb89JaJ1=b~rW>EW!0-4x8le3}sgO^wMucC$c;@ zjDOn7-(igiIe3-Bu?and1v$Ym31Uq;fsgX875|XOCLZ+yj=_hR#a{`1io+&H6Knar zWe@#G=vr9Y39*UvqJT|;PV|tzJ=+CVFJhG29Y$g9=*69KokKB-@Fv4ChxDY>X>v*Y zO3q;#e8*iS%psU&awI}%-oal#fC}!D($O(UfPSRr%;*J_}1h|t=P^$^KlUnI_G@l+X zJd0qSVK|1G&@k@AYk`j~Vw4n^Cq*t*z&!LqjW`fulnUxco3GP$JsjV1sqy>^oXJ7z z05#aa_F)(Wy^%f>Fs)z=6Mum{5qz?fwb?$b#-pR=bAk(#=q;5iAncdG5Od z8-^1Rtm2*(ByN3b6918wbaDZ?r=&=?U-eunYIdzv&Zoo=eH1yH}U+ zOY1p;NA%x@U$WG11ivJ~FFdbt&R+Vj8UKx^(W^DCHdEkJJbX*opA!0(0*-OD9=L|# zIEH(Sm{$5^2A1;N=3ZCtv2(yOb;4=q^Q4el8CAkEsZpNrq%{YJ)qMK&u$m9~FuAhp zPk}Ev85=3e3YO^`R`&s)6tN7?I!n!Tc-^OF8{=#yFL_*StY#RNq4rp)`y7sC@Popu zH1)axW3I!<6=)rdJ?@OMP7yY*ptI1 zz!_c6M@7^0yq0(sO+QMp=2PTVjN?_nB$MfN@t4D^3`tFx9)9ZmqASCA6&JUgCGXD; z=T+#XeLmllf?h7?eG|iKJ|%7i8*9a8TgiRT0b?AITSZQK*J9sh^V#ix)b z_1#MhM!s$)-wm@RYObe`oaZoXcnZ{ z;$N@(nCc$zg>WkP)Wzt*hu3?mN_-0MWjX|hz|WSQ31%U$beILaTdeoc7c0JU7*`^^ zN^so>RpM62&x*K(`p_ZV3izaeTd4Wir+$Y|c>p`cr(AzeSnuiQIjzHbQ}8M1)twHD zn3{aOM|c&f_wWodd+c}>=7yf$9r}wjHJ?In%6)(4odq82H=q3#+#+0zhGTKh=M1a; z1o#qNto>v<;^-xM)O{YfgMVFLZP?FRVbu49o8>fr~^rlO2Xj~@+r8Mum_iXs@N|}-kpE` z$5tRad8S}@o8ssd z>{F4xTI3ui`KvuDFXtp45EsC@!~1Fv>rs)MfxRwrE``2YyAxjomomH#WXgW7(08<2+m7ABiGf+@N$LBQ<6F{_Ke+l& z^04|3&%2VB8{u38gYevs-7U{^Y$^7K6#7!oD|GxGg61%9`PS9q0^V2C1KS-{!~UMX@f z?m3{a7L*-^SMb%txEI-5vA=wu3jOrlQ@$3IXzVTWFI+2TXGot4{cpSn$<=|}y+ zAlA_JsaUB4N#99z6*|zzbBp)zeuXOXsZ>;S(`+d8vcR`U4X7$3d5|y9iJ5h9w!*j6 z%|z$k72ia?Z)*`Nm{;LOB$niRY3=K4;bh=jq~CGlkH9uv)PcIgI#AvAXyG}X{4+vP z+x9itYh)iT%G!4ETktrA=ZWMQp+bMk0DOyZLA;NpFt)w;ywdYO^6U})J>-2gw(FVv z^FMGSH8sRnIQQ}&-9d@0qUej(^ z1IzoRemDHS;1D;KdzL5#URljpmz19W8QL#v==c^lo?w3Pi}(pM;wknv8S*Wsf{$aP z*?;_2&sW8E@GI1e@4J?GNxY&KWa2#YFL-6)IpCFU$F3M!}44<{EU0vM|zFXTYT@jqO83F+)+2*@v_BtBJf=?>;bs` zR?#tPll>+6E0J%$G0c_ZIcDLMz%}ea=u@8hqiZwog{za+l z?3Q;A)TB?qpU5*mHLtin5nB!?_weKVzFA})X0dQA9`DTXPRd5)eFx#QKf;|<>!7NP zXNaDnMsPBGEgT^|DqaJ=BzgvNZ-JZfQ&I=|6m_6wn}vf3>~gr8`)}cyMjem~MQ!vZ z^luUGOhMxMUw#8!e-W(sML3pmqVpwwMK~w-Jn}N)7W){H`p+Ev z$U^jZQ1m$JVI%hQPhr>ZN-h{POXq2>88cl2JU99teJT5}*OZT3+&=k)=!!2~D|HTJ zj*~u8unFsDgNxK5t=>*Sea`TWM>Gs$MhYUY~7j*{f1g3oW| z`Ls~h>_WCd`-S%%SY+92Eq38_13fCrzK$%YMWi~^P!Ru?j^S0!8G zR|esS9F{@9H@#EhVWc;=Zhk1oGtc&QU$7DJf?C-0pA~tS;qOkdukK|}dZS?YnDiyE zw&C;1r%>M^?%;oTCW!B=X-xSxwhcYIgtbM_;KfY$m69)lQ3CwbSfj>9IJ zyq4TWo)P6;1J16y1eb8n(Y?cZXQ}fPaf$Tqd<%Lfyo$|z*Vch|F5j{_INY`aAx?Rwi+8AW z^ZE87PLXGRh-c(HC2mFd57)D@^IVQ?FYz!^@2N*OTEV4Y0Nb|Bjq9Ex+J$V>$kMnw zkmdc>wzZXbm@M|IIN6uZEj@GO_!_AdXzZE1#?^(Aqe|S$0KR?*KY<@9)rH7S9&yk5 zq$ee-O592pwm+1&dzq``QYmUkd?!!eXy#1sZLv0#BTkHFT&^iK5#d%Qll%Hh`E0iK zPK4iK-<_YM_eXF_usnR;$H;qB>SPbFE8#d=|4`yf1_xM&`9+SyUfjpNV2|RrTmP*n z=bj5{-0m=ltNFOTmE;Gw755$$d{lum32R6xFb)3U@Y)cy$D$nE3h@}MGBauye@ylO ztioLT&W9i1e&t!^vO?bqbL*ovFY7RQyGoywC7-`ndVGAl3>%?G#Xaw`a3wW*O|9t~ zT&wLrRM4xNK~`6q9+ABn*`(uFOwCYU zmS^ur?Be;45!9jESu6C5_oJEI$#6-%QQr9iPTGp!h-q?v-o3UPz1>1D9C{-?wXMgZ z^Sv=sb2hyL3-Ei(!8)sunMsUC2RDF~$z2k4$W$BNrGg&u+?zF5s~}#DPGsq2S%Ch+ zYfM5vKKC9q+N^IkzQ<>KVzxstOo})&mgke;;}&gV9yfwNiGu?Jjw>lXgFKv9xm5TM z^u#^Kg`Tu+R>2SOF+8tqF8c#D>?m9Q(9A#2Dl_<~51y$s(^( zkh2#fS3k2P2d~1tz^nAD%+fgf)lRMm4wBqTxQAiSEL*rr))Cwy`T}kdxiQ!cTyT+B z*^LiuxyTQ3%Lwuq{EIgiox2oW#?Lr@B}pE1tK(N}Bu88%f0K7aPTmtulXKf8=SuEK zPya#uGwr z-T@b!`!>%*k^8oN65Y?bcM4{n-p4!j#wmN*g{;9xJ@>9Sc|Y!sF(Sje0gux5zMJL! zN>$jns|neK7dnpGF5e}eu;i2!Nd18fq8fi@MP_Ctaz7M}>;dOl-5O`dZq?}qz3@}_#^s9~0YgYUy{HA`$HhmU*_x%ZtcFzjgslTOu{%33>&##>BI16es53zS#HzNKp8*}e9 zTX!-0?-Mij5Cf?Xy1e#hdp1g;!8%#xYUoxZ{S~%tv2Pa!1+?^;d}DjdubQpPXxOxM80LFQnVu@oU&O;}5LY!L#_5oAD)AVZ2B`{o->ZVrZ>u{moWCZacpCVvCyej zF!aVth~xMaWb8|2*jnCCiQF4Q_=)*3({mO!pNvaik3IET-pK^N(tJ@2o8etO$8rq4 zbR2mP@A|>FP@9xo&MbjH;n_o5N$=Ja?*BU0r28*mAsrJOWc&KT^W>bZg4=e1$G|I@ z(aK)DfqS1B`Ul}bcwZg<%J-x%8N9-Jg*;1M-durv!$n1&#qlQ8hYjzJ;6CA4(A~n= zB0G70kz;XnFJh865x$x7;&90}#c+{M{vv_Xr0{E5n?j4X`g4}6hHZMy~m9G(n zvfz-4tBLW%I&XvaS|lGzMoo22uu!#G{xaOmE%3VVK=S^k5#Q!IugUL%?|ifQ9xzK9 zTkegSiqC_4Rv`Z>oY(u<+ss<>9FdFJU&4`%_zSg%e}HrR5nSv$ta*xSp(meZe>VOM z|Foytc9n~K+{K4=r=SO0Ds4Bm+pq^&9XB)XVV$zBhLmXBLw-0;{4jYjzVp-QU!~99 z_R@E_AB@>s?ew(m37%uB2InT}Dhn<_mPHPJ}iowQA?k4hw+e$Kn$TVM6lo2~* zteUXr|KmkDy9>Fdks}LZS)Lu_o@-4`?7BRZTj}$BIoJ`N*S%ALoXA%FOx6e;k(}pq zVV~S&d}r4;`5YXNo!P!~curaDe|~Km`;+IjIfv(H?gY!MfIk2q@m?*{#e2l-lGV0j zJbWS;58rR5pQk)@&upsVow{$63lZ=6zTrgU$eLj6*zo<1SE0Mjy;a_%B=0U9L>?X9 z6f4PJd=}rOoR^&&*Nn$|dVTFBQq(AB!?*0`-70~y@(zTi`8C0~aqivOru|aJO2*74 zrS0i+c()32w;*@fX0YQp_x=Nkqg;<(%1XwiZqq|Oz<^!6|77n5vFY=u1rxuQw##)Z z(+Tvc$CGElD&0F8A4!ux?sw157`Se0@Xb+b7d%&%J{jzjrfz#OaSmSA!pquphMMId z@45Q4wvYUoSo9WHhxbmNh(0fWPxJ36JK`JQ7x2vTlll26@7n{*oc4dhzt8-ww$l%Y z4iXQ^GdkI~{;e9^LQP>Wy3#u;Jqeqb{ubQc41CT=zDHssdohl^dXIRw9zUJsJ(tOm zb`!YkiLXYE13ToK($-p}SJ$UkDzT4t|$QdRCw&VALBOPa8A0pq0 zeGeb8rPfRz;(b`~0Y`W9zUqbAUdiVTH`WB_cEhW|7Z1H8d04fXK1bq4jeYb%6$ITX zczz-IPJ(zC%JKeu>~Ia^;Tu2m59kUqFCa5#kn3k_3v%XFS&zDI-jEjg{cbH<;fGk!Vmz8eBZ`0RHNYnrO{qL z2WQ3M7I~-jj;qCIjdI^HF7LQ*KUe(1DEpb)lsWw!6>N=A_w;ygEgW0jmcV^)_gVD8 zz6P#*^lWWTA4eXOm$_^+@AKq$IX-x?_>EC!GquLe4`G8fI{1DK@5lZ(6&zo~yPo-d z-a#-GHp4xpPfl_l5-1HtR3Q;L~5`9s0)|2POt5TrK?ydZc;Mz5fj#cxOrOrIMVPi!rAFY}81sibgPt5=&ZPeHk6)tSa=i9h^azgEnlqo|yA!e%=CgP4 zEHizwZO@aNq$<)UCTq>(Ct};l3NzzcZ9o5xHq&>B->L9U(6wd;@%)5Txp{mt-#0S@ z`+kS>vgL`oqp`#Dv8Ctnm(-=2UctWK0W*LLTFT+2b-5jwL*7DcZcLW5C!_2D{RrF# zf0uC#oVu31%9fewQ@Lh0`DHe4H}2$}iYvK(s?5yjf!lvh@~ODpbS?ds=gD*9WnKdP zeDq@S;z!ZfyLjf}0lvHM72d1$JnsQ5=R5n};k)`C=X(*4_R@9PF&^K+mu^Uo;eN)X zPsol&2S&5!qrDULX!iLiZ*uCW^yK7G-bwnX^hw!(??xOe--lZGNl$E5?Mr<2%~wIJ zR*g*`JUCZ*6XZCu?t6Q&F|i%=d4diW?5zo6)A(*%U$tL+dnChmzP5w^n2TaA)W4Ff zp)P)pt#`s1d=|z3l+)84RXaO;e*bKE&Bn#oEiB70C;7hA_5*z9+{8uP(;2G$`>Wk}E9>NYU)2TS=TUqKaaFBAW)a6n z<411eyKg(Hg01(n=UTOo@*}}k@`KraWg^zAg1v8ff$x{C;`dCn4%zkbU~5#jA0u*) ziCndlTX6>OC0VTtvW4>!aXIfJoHs2RthgV0*(x$M;W;n!_poz@jUne1##rUXn8x~s z_h$Tw$@VX=hVg?B$}ofC~8)w0Ik37xE6t6VpkiN;iBvFJmtG?&i&m~Jl9 zj{0kJL2pH0jx?Wt3FmXm5$BWOo(IMMKNow&7u{g_txKITK#O6G@M9Xdz3KN-iZ*|fHFxMuHgAAbR3VXrB^ zd-F!@cY>E_`6#|4Nqn1$FS&>qIp3{e`;u6NtX;s`Wy+Px{MRYuA=faEHf+QvCNkfy zeFp=-Qw`o6JK!}hX3am#nzts~zc$4W*f)1SU4?n9|D?#Eo8)xFNxzl*g=gsE`*A}X zdr#s*hPrg3;j_B^y01~c|Ex;ieTMRWBs$cZ9Q@j>zm&%1yzu@`b>pHFGS5Uk_*d3S z-6nb!L9Zg{RRq0?uvQX>B<@hV(1NRE-8|<{{95OCj-*%r*L~b^q2lM$&(tiY0g_r?Y|9(Yl>_n0)Uwb{$#y5%=BJ>)Olw zX|jKOZ?kHj)2G7EJ6>Pq_p&dK;SbNi$M8FTQNGJH@Kfv)zEQ>4U)GKqhQ~7tX`X$U zI`*Nz@IASgnzkKk>a(|I`3|_nF4pWAQ2qPXs7zPeKAYRB`n$$IndutykZIk@_cxQz z%+4wKuJ??826O9(<*&ov#p|GBY>fM!wGl`E35ub$LUhQ)|rNi&e-TRvO^aPxAg73x&zjwZMD8riO*JMI_ zCH_Gwj_e)wfH0=gL|aJ3QuEFW(QIsN<*k#%TMpXhk}=NUbVg6O+A8EV@m# z-{c?TzQ=sx|3}`tfJarGd*f?gXEF&%U_%lx!VZ&!fLsET8>sC>7%oZ`~GZMRKhC>>406UgO z6_fP%cO%SrP?3A&Z^k+*rFNgJ8f${Tn- z55BEz!yh=%6aL@ib(O~NwxA8OS=mBwZLPA+RLX#JfPERqhmF*ZRW`5*c#ky)PGMYp z98^aMY;?v(Q%ao-GhwgTF!ct>8Zcy-tcp*u;m zw#0kZ&^pgz5@a##39-0cr+#iF`UKrpY&oa{zU}L2|9as^$9VX@gY0q&`TLdpbIi!2?F?R4}e4`!v%c5@~50e6r5y4N5>K}?mQULtt6{HdUfE>y8q?(G( z49^~waNkJXlSFNrkV}bfk&FWTO_Y9!@jjJ+af7#kpIb8JHMUH7A5VL*M?E$k=lR^u*nQ{f2L{V!s3Cp&ciTVXA83hw?dm1dzc251ZzIA0M}98qFE9 zl!`H8e8>6xKvN-)5I^8!x5sU&z!#mb^P7MHXnz~(_?hwE4!kjUb&rTWp1!1}~MtOJ(puIbuOuuOi2mbU)XN!zv#T}-)z$q;P`m|*`>H(ghAE5bw zlO@|*?X=$1)lUQUv$0n{>_)4f-sz$Fpnv$zdCz``Cexk-3^9);2{4oZLwu>q{uVsn zKao~1eEEEh>D%ffY5m#=r!hwU8{=#fHMLZ*Y5tv@M+Vv)ezlJFn7z;bS@_L55Bz2t zvXaz$UJm@YE+Z2SUPF8m`b`{d-b`~}V~^2)Y2P(x(=H5azrTN2w|?b+4%Yr)7p$#) za_hei>()vA!`eUb%Yk($))&_PaTkVlXmtOuW_kZ}unt|@6V~h-|2nK$X8*7b4ZAR1 z2zBZFHhmiU1@Iek9{3IZAB5kOUhta{2S08z3FkmYdRVb}Wq`{XT65%cQ+Zaj_yS=#A#f#Wpl37e8 za!v#9eALfn*Z+k4N4{A}$_2e6+NXo3As*Yi9rlhNyv%8}v||nAcj$sUWs=#UqhMTo zOlW`PcKk*<`r~qIU=!$dEBbNx0y|5xJcmmz+RcVdD7Ojq+L_Hq(dWS)^x2`!7Jq4V zf7yl)E@K}y-fh$=(daWvVD=+dZA*gv z2QnSOv{=c)e3UJOyH?$RigfT)9WVwy0v8FN2{$<(!yPQhmrWTmW70zoo~}lF5@bXh zSN%T@2bxINavKl8K8N2@cAG?a23g5%%SvtDBJ`>=4;%I#3x2fUEcnH(3E$rwp4gilhVnx;4o3)vBxgJO z{RzO3(SGdMu<3ok5O~e^ z<+MX*h=4YbO{t07Dkv|U)BYaU5p(wdmJaTPc6G?g+g?$@7>GW>P8EUt$vCd5-MB_N z9^uP{=G%m|7p%E)J-qcV;hZ*!@WNUb_J{*R&6a6xo%2b;UC4Lb{$Sy1R=HceIr z5gp{XO7dSe$5q^w);%7;8gqRPxY^{$ga5&4NA8S0=v4&sRb4E7Dxc$(&RTin^^fU*6?8pg-@a61xSB@xWs=u9uBwqVO=%KL zRd;AS*Ue2O@N=H;YUlZ+W0)krml3Xoeqt&iahm`=mUv>M{pZC+SpIYzK{Q`u*dY(+J!n@`1H)iv zflfTfhC}G2sjji<0Om(!TVo^v zt^UxKpJ3{D@jg_m4-;!*)eXIFy<3k#_f=`_Ojm@{F5~=7N0%Uc>iMM0Do-S8JU(-|ko6Bbs7j9W7cA>ZE-Nocj#6 zdDv5$5Tga#h@PduHji`srLc)z58qlj*6&sc`LGi{M6>|5`{%g)U~Et`9RAvp$aM3* z&thieR4jV3Q7|Jz5Sv$o`A%ojE*ETmZp;s9uC*}}-z@7$bDg8{8%KAJ^xeDDZ>R}_ zwIPLwv)##UrN-k4!w@UuH#`Z0H1ee+P3QgqEs}&eB)~QUUqC_;`Z;O)0+e&oQ?R!} zRwJ9eQC66uT{;;tCEF2W#BC%Z$>3YjIM#T6WRIs4dlhX7WV0dqCPRjk!`Y=W=#dQji3IzJ6dqG5!G0ozFKeT- z6=Ha7sVI#T=zepO_Y_V?A+tE`Soo@p@%~^3pEK5{Oyv7VY2~W%i?|{ zl5Ih&z<;v1-5s=N49N)=?)xt_MA!`i0`M}&rIBpLEZG-!zHubi1I8}O2i%aCEf`C8 zWBtK1GWW>RZs-HsvCneg?^62l-y-c%3%9Q9;tg0YD=l;dXaU6+Sg=K3w6<6$0qfMq z7fE(NPM_4~x!RB%zCR@3M+?!3=6&C!JAJ~~3l=Q^-{ia`{DYRrgWoqJo6^0xdss_5 zd=-(ve$qc$8nx4Ar0}oak@%ehzeOZx0m+B7-c~8qeK2{fo-G}@u z|G)NIb36)7ypXRLFckS30Pko&a=$f)5v%@E{ni#v=Ur$lpf4mtoo_rr$8Sxxb}2W& zZSInHAIW-DuTN~ne~aA4=fUKzy$QHs|8?o5U2>a+-$W04jEnPGwK--!Qsl@!4;uKM zPdIxYWRYg<%jQ_eI{92UM+F^$PArp-t6S@0!LZ6Zl41~uK5g&OH~O-4;MR!ahS_q~6&c{lv)7tgx~Mc06L z-y^vHIbhyD~XE!$zAPe_Wc+3xRnLOuohE%`ij zrr~PDI^?8qp6a<8JT(VAHP_~;IL}PwACW(C;7IjsdG%(j;_%Q~(&y~@PjuB+0}Z5O+Wk3xu)eewa&}){NxHMcD??A6pI5f8 z`to=s>$U|DJS@C`?0xaPvd=zU1Gy1=%)}h6{YSC`m-!03KUjk_?7z?#??1@B;L%w) zqfT-eWYz~1(Rfu>DMm%wF`e5K!aJIov5tJsC8vS(w%K($G8E7o0WfVNJ}-3hpw_>_Hi7;Gfqe3oUmyJJ@Z4X1@zr^&_6}_Ey?kg-88U<=n?6X zoDRW9NU|N`1;{UtF$$<_*|v^{K);i1+c^5@5z{doegO3C6_gX_qoEG{wBsveKF#_Y@e8nP5q^3xUY@4L$1jj~OMGKCp)9urWxLrJX1Xxkk#Jj`PO>ZWH$AVSn#j%WYfIewPs5pDxgxOeJzZ z=S`NaI86O_*AdQBr~QHMIxNJ;JmkgCLA#c7UFIa>yCQ*8T$efcgErW&?&Z2n1hHO` zAul?*j5Bw@#|=9s=-dwGm7x=Yo?$K??I7q6k7o^9@vJg%_vA?{o|S&X#)P;E#Iq`P zJS$*B@vM}$2{BYoY-(IRuR`^B+#BLq_jJdz@;dK!$FufogV%HV=56?~t|aRZ}R5ST-%vf#ayxP`CJdtTvbs!gt;zN5xd*QO!Q|)D0Y|1*>lBN zVyrpJVXjM6#O|WMM=;j~I}xX#qHK3PuZ!y0bA1GJU2urXAa;@j}Ly4%>s z+kmYiJHn*hj_roxcO$Z8tI2__2JNXN9}!<<_dI|3w`A4`c3w zzce0ib}9UX*9#`j#A=AaCz?-lF!5+A&ID3iFPGs$kD5wn%y1(vikB&5=1n=UgTOw= z^VuWB-$)1PS&wamz9Jhh%Wls5AbS!2;C5?ke!7WzoHihx%jP<_H++w15ykpqPl;v% z)d8P#^lb}2i%EVVdCjXA;A}=)5B!8~z$EY_=muRnvMv8SL~T3kNaF$zJ4SQ1Xt#e6 z$pI4Rw1!wiXKiU+E#7fHU*>ZT@6kCOC0-c`9P8nOk+|<+fsG?Q^<2n87=tZ$g}%+< zyaupYuc!{}h`(_dS@R!&I2@JWNpzU#vNunG%_$4CKJs7To$dccK1QuL4d)zjHe}f$ z#ICwz@6+ukyw4mw;mro!%H{s>F4-0^vFIJ-YBNUqkb z=&=kQ4?7ZIZp9JyI-6pxb!R+{vgmW`2Y{(8#o3zy4{l5L!k^0Lg1G0dd6VCf!&UiF z-+2r0KXlLAf_LOOE*to1Keqme*1LEmVV@ef)^oOx0vg zH#{b2v=z$vKqhz1nIYahH}XfH&*XC9HCxH#KE2-=nbY!(WZHx9Jw< z#_f30bkH31BhAQxPEm;a#+q?&&mo+H#reNS*W&E(as0iXwXCeFGMkq!@J&ZvK^kHK zlr!*`e`>99Fxodr&G9m zx93Bow?jv?Y}IjV^s2MY@x1xJMS2JKOM5ZCer<6? zPdQB|nu^$RX*B89z>hnBLVHu~6Kl%*Z{6D`ri`ci_n?h5#BB74HSKEiTXcUa_Hi?C zMB(RQ2BEx%=!%iNJJ}eX5J%G)zS3u}$< zX+FL_>HZ(0zdo^?UOh)JMA=Pt{4it?Y5E%UL%I=S{|mS9cNAv;d@I|D@16%Hp&k9h zgl#8&)E`V}-W_SX;VYwk$*@mJzQ99tcI0jjBX9OkAV=dnKmFMFu%>c1|3wUKFP&IZ znyi>IPQ#n9u1)Yg3wDe|>;5qIwG@DS&$w>*mP4D!CWW!su@(L_O8@8Zr&T!*{yf}2 zto#pQeKPuk701b?HvVi@1|zP^!W(yQylKVQ9lY^xp!O~vZ~XW6k2kGr5i6P8dt4lE zl4SVQExh441KEh<4e$kPdLCS9z2`jhZ^C%{#A?(2;kc6N;EG=%oRM;IMl1)q2y|bZ z0{{&sy!k!Tiqe?5cL=AC-t66o*H>W^q&DKup}>~K*S&Qv?Zy8F{My~%gzBK%@+FN?j_+^zh`rwx}-tsREzpVBaooD{v_`iT( zxnDYd9pP(yM=$*9J_Eq%R~LTqSU%7%%T_y**FD?0t%1`+_%^U72nVCh5kM$cmPrp)D7aqem0UMA= zx)J$9xZM=8oE01CoFx_Lt|>vndDSpv_kZQgD(U>u!VvSFgievE@N=tX!C>kS{I;t< z%)beIsSUbK>A!S#mEoajEu3fzxp$#u7LSddJqL!Td+ zC6F!J*7e$G{kWejm1IEn7Tud5VGZHy!a54DBauH0vHAMTv`2c_k^l#;n^`ndd5Lr@ zvpKMj-rCys1E!J>d%%Z|J%H=Jmdp|Qmc2fG;7Im2g5gEqW5DO#>iXyHfuSiEvIjyQ zzwrGP9L8+g{}XXQ*53N?La=slg4^UAyQBr9Yzxkg{d?alJ#5_8-g>(KeHs2O?aBW3 z-9L#hM=vx7vXP#D9-;Iv0bjEIAHtW{F9hrJ!$Zz{2rM ziLQC|FNh)FWm~yDy!YJxFU3bFUpzN|%Eix(@puEwtxHBCe^poP3izI}4|;RIaVy|m z@Jm~K-2X865!s;-FD8Q*Z3JH>I{p5j(G4~#f<*!@PTW%DGyg|hJFP+SZ5 zL&CpKype&YVU4(tgvY&h+0QWM9==VBw*_85k1hV!-k!Gj*ST(?b6$Ea!K+)AX#b4{ zA3#r8Vrr)Yqj-OaHTTeZs&A4EszRnXx)XdIb{Tag^QoH50-5fK%bx4dVxHEMx z&hx1(gu7z>(Y^Q^woxNfWl`LxL~@5u-Qtg)Y9TmBX}7rmADEZpSWF3%SFM z{u2n6e2mS?@2ReRhTu5C=}R7;^bd@0=@*ReKYNT1@@rrCF$;e41Mo>*0CpcZuv>hQ zu!FvILD;pv`6Z7HaJ$&Cwcc>yu`#ZVK8H>

r?#h3Z|A2m%14dh*7vWI|*4*YY!>eq>Tq(xU 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 bZ(ZnJZva0HziartPWLc$Z~TQZp`rVKxi%U5 literal 0 HcmV?d00001 diff --git a/hash/sp1/bench/blake2/src/main.rs b/hash/sp1/bench/blake2/src/main.rs new file mode 100644 index 0000000..fa8ca27 --- /dev/null +++ b/hash/sp1/bench/blake2/src/main.rs @@ -0,0 +1,23 @@ + +#![no_main] +sp1_zkvm::entrypoint!(main); + +//The patched sha2 rust crate https://github.com/sp1-patches/RustCrypto-hashes +use blake2::Digest; +use blake2::Blake2b; +pub fn main() { + + let input = sp1_zkvm::io::read::>(); + +// create a Blake2b512 object + let mut hasher = Blake2b::new(); + + // write input message + hasher.update(input); + + // read hash digest + let result: [u8;32] = hasher.finalize().into(); + + sp1_zkvm::io::write(&result); + +} diff --git a/hash/sp1/bench/build.sh b/hash/sp1/bench/build.sh new file mode 100755 index 0000000..b5838cf --- /dev/null +++ b/hash/sp1/bench/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash +cd blake2 +cargo prove build +cd ../keccak +cargo prove build +cd ../sha256 +cargo prove build +cd ../script +cargo build --release diff --git a/hash/sp1/bench/keccak/Cargo.toml b/hash/sp1/bench/keccak/Cargo.toml index 2d61e41..970a3be 100644 --- a/hash/sp1/bench/keccak/Cargo.toml +++ b/hash/sp1/bench/keccak/Cargo.toml @@ -6,4 +6,4 @@ edition = "2021" [dependencies] sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } -sha3 = "0.10.8" \ No newline at end of file +tiny-keccak = { git = "https://github.com/succinctlabs/tiny-keccak-private", branch = "patch-v2.0.2", features = ["keccak"] } \ No newline at end of file diff --git a/hash/sp1/bench/keccak/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/keccak/elf/riscv32im-succinct-zkvm-elf index 9c17edc2b012c2734645477791bd145393a73a9c..846880b94567b2c070bb0bdc75518d5e2f71a9ef 100755 GIT binary patch delta 36772 zcmb__3wRVo)^_z|W)fn6$Uq1ogeH?0+CWtQbq2gs%R{0iGRCZ-oR90Q{zo)7@(`iunp69RUX}aHY zPMtb+>eQ*~%Y>$Fkw5=rZ-|dx*i&WMjIqRhYm!Tcsv8-j!v+eAWlX_I-G<|NRUFwl zjL~5=@QXiYtoSFDjy136SmKZE`q3U46On3TJ#S%b28;NdmqqvUx2lW>y$|LcP?;n0 zK)_-5FmA75p=!py2(XM=bw6_`iZUa>*j^!PYap4P3rNT7og%iiDx{Mywky6z?aZ;* zZt*49SNw5l<|v*Poth^N=&c!$F3-bqBKq4{ zM5>)d^si^U9){asbUh4~9dhwA(LHVzbzhIu>Rh22@0tN8P-knsFuwk~Hg2zGzJ(t! zqMz7k`=!?FWe&TGomk)cOGIjr)uwude8iJBaya9gauaz|@6;>dNQW)hz-_V6V`U)> z=@$X^7oXi`cXT3~qCxMZ(F2^vB=+lT>&GIzJ(}_^SU2zP zQNZu)u*VtrL4P<@1phJ_7OgcTuZN5DX6>PN-LTrvgWoNel}FT}aVYmh%F5oL!@kK> z`SpX6_gOs+aYw}wZ%E#v6%PA!Q@vrW#zuMY{gqmq{`(+o4DQc#r8IsB%uk*DFISx@ zHL5dtjp|hU^>b#p`#RGL`#J}X>+4J_>Fex2uP^w0!SBmE#Uke1mphY{SZ9h7>#**R zbwsGX4ih^v)W=#e81)Axvcpb-(R0bVC`qMtwH9yzZ_m{w)nc|MAUlM zFkeG?#EA;;PgF+_zS^xe1ecA?^`DvcpNLd6w&**Ixrh1IwnjztFYHpAs&s)7eY7Zi z88UrpQ}*}q#oD6sC_?YIGT+H9EH641hD0akT__Um(RviGrwI0Svn4oCmm)bdoub>b z&rd;_M?q$@EpXV#69Lf^Xa8LYu+5kf$UAZ>9N<<=u}+Nnx^!|G=zo^p>SUN6&2Kw1 z;O=xB197C`=#L`>hc*ljn-a@yHGa4_&^g4&n�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 delta 41982 zcmbq+3tUvy_WwTfVn9@K5Yb4F3?L$o!0;?9P=>V3sIaUog<((&6%owrF+;;xmX*0t ztm`c;G%G7@eAUnHg#q^7hNjX71R_%`wcjAd)r9jD79%t#%vCeeCioW>3tN>`4-HKVf3Cn6HNo za^2|nnxbrxZ$f_|_=N^zvc#O`O0$ZJe4VqYv@{p&2&N{S_aa*<@4`(tl+T&|ff z4M?^L0p`4QQ%H8n>XXn7eJ)XpJW?|2_@JN35M*Y?6bXj3pjI1Ei*{Jd4E9viGHrt} zN~wL}8}>xV$R>VMQvU>-BpIjr82B(Y0Ap)}v938Wtd&<=`}gCFO=bSleskz)ELWbR zZ{;hj{jY#`c_8qPJ!u0f+925z@iZ)ETNL_Rc?ZC^#O88AXmzlYjm<@iHi`gt0%)O!m^Z=T`CHTgt&EzUZ^02AXo^l?V#>~7%7YgZ{ z%(jqU7A$zuY2MHLVAul4-~-Q6g7$0ED)5?8*#)oJEHbra@9zA--xU6izrzR#{GK*T zoGyPyYsguG@9m*@#=M;}XdY8Mv2 z>orCyyiMR;J|!&U=!oux_T8lxy31ynqHo?Ino@G9n_23(ToTLo%r|-cNpPRpXLUxd zF*p|{OGZ~2+NYQqODdVaqz>*zAM$Kswm6H#mo1Q-U+n;11DROJm>`qHjF)9I^fwm# zvV-wu7RlD{KFPQSyl0A8u<8TQH?yE?Gjn!4!|YF?>#W>}!KDd08of}`0wo*IQP4if zv_s|y3OaFyg1~#G@$`aPP|zAGC|2^jOp>uAN%EIuOWiBv)z_#DLd6iOl#G|vNvGEc zyk|_(X*F7lf}RsKLP3qt(E=SC!wS-uvkx-ukU1h5y_cOhLqT9Z(|CG8>rl{(qDJUC zCIf0@K#dIDYosrz3^K)#sWhNMhBH*i;6;rLr`2d>i^2ZXMg!Ui1vNrR3zTd;M?w1_ z(+-&@GpK`m5JnHe=Qqef=b$b8lsxndz>f=rSb6{2}Kd|WW2LT0r> z-q67C912=1YJ`H?q2vgZoH$28O^|7XObZIyc!q+&d!}70C{)giC}*9hkj3xv7F$pw z3u(!ME7#M-GfhLMTg(6U)h;vj3GA76*MR-x8h%?kE0yT;_twztGptYh# zD5xDujzGzYa}?ABnMTO8M4&=vD5uejg4$0n=tUH?PSnVX8d*^zD{5ptM~xt3f=rSX z6|$b8LRPAb@tI;PO-9a=&CI{LG1}=GC}t$9ePz4V7BFecTZ7HiX#Jv3(xbe!q`y~^ z-o*+e!=BWTVNZNC!!8fbv^z3K*wc$f*wd~aVNWd|VNaPoLS6dC+Y_aDEQ#Z}xh>vi z&S3VGRYZ%k%TgSzK5Z5$j$3@JnbE?Hm19+l#a|(F$88#KOeu=xi}U@o{(itT&Y0A|Y>^UHF+Qs;3Lh+;IkpRmBKD9{ zxGy?HYkd$?Ki2Q7qV3UAtj%0wwac0P-O~bC5+E-ef~B?BnD^uH<5;8jcILJiY}d_Y z!N?M$)0ABVh4Cb$7}9!&&Aiy^u4x$)3}Bjt0-FUqv3755vPU~27xvRG=v1wA>beZX{bNBXs9uzD8Zj1C3Go}S0!LKkpKh0Zvejm z{I(E31^gu97p1{~G#GFJ47i{xe;W9yBEJ^`4G?I6KwC(_0fBU(U>Fn(gMxujFtAHO z;;Mo0z(5!PegpUo;J1bNDc~m&zbGB~(~*A=@(=3Dp9X#^@x5&jXn;Ti1lmFZ4hW}Dtb zO10xq^2NQbUq}gdHYUH^mSMyI=1(fhFb7wC{KMKD*lJ~p z{lNgUDUY^`=8i2kvy8pEjA&2XfYA(YRQmJVL?a;_4g|#xWkJXD^t9b)-h|N%`*+A< zvw;!r6WR(3-U8P)I!I_6Xw6d267Bf#7-Rpu{lt^W-=CHH^{6S1^CkGYq5j3n^I%=%x9Yp|b2VEB_Q zYH&P>^N&Idqb)SBfjH~&x|FP+ZLEV6yv>UKPL0z z#qmp;O#D#f&=E=~sOLnek21McyDesmEfStIM=9q=g6>P<`B8%ho$-uG%j>J+^P>J` zU?#r!vSiy7amW!t4cqTpaq{qVu%=Ixxuj@PKOBl7bT=3WOYD1A*mYu{&PuV0DTNjh z6jWq#hlMZrvC|!g#sx+MNAcEvLodR2`t8=? zH5_a<_qM06GN{gf*Y3b~L3jNV9ZvL0$oz}P4;bn!rJ{XioB0QcivzP(t+XZD>7C8Y zz$;WIXkRg}8<1!ye3&mEFf?L{=!5t2odYiDr#3`)aW;~l8sPNaNj`vozsDLV#-7v= zgEdf$T^@WM)<7_}s5jO?y|D)BZBLoq8~onj_lB{(F;>!2MEYXp<}#;cbD=FR7e^8- z`U~rUQh%b0`BTlznABk~rUVS=+!kYs%WO|=GvTDiY){8Cy(7Y(?hQm3?XD=}aC4MD zr31snUW-2^fJN0_%3!oR+N{W6w5PNY-)wj6g@S+?3Zucdf=&vtt^wcP5#>({K+YvW z4tmUzJ)NE%Mtj;`$OrIjGl6fhClNMV?A{bApu>uSqWIDr3`GGegslEyt{(oO<{ro_ z*;9p45|luh%LE(^%raAyQQE_3I_>H!*wCqXyt;qrEN4xqT`! zRxs!G7Z{J|#o#$KPm$3$tj&zoK%{g0^UOJVJDMO9Pv@>W7Ti8oLU1x*Yw*q6Ay*UyV#$%Y%eJ$fl`Z50TaVhxiHB#{PFEOe# z^bBr)7Ve$HoNs&yj~uodhZLE__r${{=MDs~+-7j@_z^+ZWTE}l%MB)P@Xh^_vtubTL9k=Bgsx?Q8zY>>FEOLNA;LL+CgXhv zGJf3&Dfs1nJb#yL@v%4$`w&g{9t*xTS2CuyMLKs{;BqN4xT{KX?%a$*qzKen3hp5K zUQ^Jug$3V9mi*{R!5#alhau)9Z?yAGI%Gv#zfI2~$w|*tDZ-!J#)9wmm5gac_%2Do z-7bmmKZR4mLE^-ZFH2yy4?CscR~8h4Q@}UYBjBnKKN~F0oy#yQwONB5n^DjPYA!UZ zpur2E$s3}@X<>?Yl@*2dBn5D>Ld1Rr9_ZnG_ZiTN3_>t%RW$Dx$87KaM+$yDmD#TQ zN#fkboL_Bc&f<3L_t1SK@h^fnd0<(1n2Z2(ZKTWw=M^oC+xjuvzJE)>FZ|4Q{m&9#(uX;}{+u~4`x#Bf zC4VYnVq8CZMg_<8Lld6Y)1QhUqwi_w^)Mz$MrZMT@Me)QII5o%937C1LyDrDmwgE@ z9gZ?0NWB6i5oj|8uR@>=k*q|s?f*^U%Lg*&muqS96m8r8yTt!;KJfEYt0>$4k0ifC zGVtY>C^D%e^ACwXRsj4gZA*dINIZU;#<$ugtVQ!x0mCyXs|>aY)4d=(rx4OsS#A4o zm2CZ=#R)JJ$W%zI#N#>@ek$;UK@x8|0Su3&ll&H(2v3ll->hML|0c$pua}%hw=mm; z5(Mpb$@%?id>@U|V;tP7>MEFw{{0@rt1NS|^g5QwR$5FsNl8~2S$b=`DZNPlV>3NR4gPMJZLfXu{ zZ;GN5v#V{wSI9qH!HI;2NZh*=?RkupqyP8)ngx&2_espQEC^+AQxcTz$9S+}8wy)T zUNQKS8;rL7_2^0sX4|r5;=CO31G%}9ZP`)3c#zqeeUfwLGtlW{w(}p9oHL%s z_eUh&4@cTxKf}DXvPOwN`3M5*5xA!<0!nBF7y(6+vuX{5>*3;M=w^s&dmFrREnb8* zMDrz^P?M(^e{X_hvjy=Y>{^U~4H5i3JM&|xwejzzpyyh|&ISX2Zv?aPFBI(9KqIAv zzxM^ok-TObPnLqn%-{PGLUt*L(GLdn;O{M!j7beqHXDZ6S>RvOgwe5{1uL#)#$iQ0 zZP#8z3Zi)v2Cy$G8Q+(K8h#=LEC0g$=?y(?pX>&|p$A{=lAQmXBJn*P@ZvZrcqjow zZ(Afkcm*orZHuxsbuedTlf(~VfceW?EcnmANPOIh&S3rH=u&uNHtv_s;9V;)0FA>) z_GpCd@?Sfh^T$HwR3{3s22a6LZ>D387#v}H^S4gt9m(i^gC*P8lbz0AQYGhD1amrg zt{*#{^=p~!&6Az}bPUhGq)Sfkm`Dgq5zY>DtCUq1TgRzR=Z~1d#uSSo)V33u=9wht znEPQ21`QX+?)33+3_=sdKE@? zK!%L`33!W_*>?Qe=}&Fz;rwYQhQ^;T5@PjYmm+N?u>PkVj9-R~KmP~g`v>sQ4_3Yd z8Rve$_#6L$2Qb>*eiAd{*J4C-mh8l{4YOetdP-ZgtprUl7ejOh1~JTpd_gaK-;ZWQ z_v--fNAHWUdIC*}IIWvYLRO4wMzR`XK%^6vW6U+#ktdNN_I3krGrQZLgJ=pi*-`WZZk%e>;u# z21D@n|DYBTXye1y;5ZDCJL2GW1Sh-@glB9Ky_s{|my!)Nz_JQWvB6|>p(%bu1;%tp z&Ue;G{^4yf9I@~trtTp{Mw{zrGS1|ze~AUJ_))TTbfQp<1;~f4EII3+M*A0I%ukW5 zHnfNH=cmwj8=$1K)9)xUk@Dc!2{a*@_#6L5GjuY(^Y>1FVv!+uvXA84by9L(c|8m6 zdV|@BfBRQ3)QF{-2fMMJSQ%}WIEY{T=6{mgwLczvBg6N`p1H z<8^vsrLzOiBFx(z*sKKTI|8u-XP4%WjmmBkOXp1nJJ$66U7nC)qsO!oAp z5q3u)!Y;4wVNdi#`IFm7mc|l`J%yfaQIJQzwn)h1DMj1Uy`-QG>w2Lm$}VrR0%I|{ z2`kzOJ?ts3`B#(j{EGU?s zQIJReqA292XEfxIU!wdLyMy)u9g+6LFQe`9kNEUOz)zqz!7-H>Vq^SCMKQ*qQjC9S zTW@1pLvMdtQE%fgsW*nnUdHr>UjFo=UdG{4F9cXmY}L-AEv&MKoFFON)qoiXFDB(~ zg716U()IgKXD99@B#|u7xU_G?7lcPo;(M0&=U2*Q5r^n>nN8p;#}8I`{%eAJzrXKuQ%J2wmQ2nmH5nLY9-)P-r;UkCSjG#?x zasV$M`Z9NdIhF_7l{#Bo(KtRgDLe1hWU&{99A7!4Zx7_51E{A-N9&LY5oC|0qZdy| zeN*}Fisr{shdaNdJ(TMS%q}K7hN3)R?7JVgW9@BEln}O(MbIqfC&V+t^%NgBH0LHE zSO4l3%D=$;cY5ML>~(IQV#0A>M6=j*w>FXgMLx4@qaEvd@#+BObm=v_f?8Q5hm*Li z{NT{5ht&%^e0HqOa5!q%0*t-hW8_B+s|MJro*kI`@`-6r#kIafuC`eUaYX`GQ$&;c zUgR;u`U>~$Fh_`@?_X`fy$y@9bu`n#FnTbGNSCyu2n#P8wkEFi$u4ztqNb>Og2$u} z9nl}H;d%_`T7|F{Ck}$wy4*d`daC)v%+4-#DVTVvBFuxov5!JhLr@?$d1PlW`VX3a>x2Ev*yKEJIa0 z%KpHP(zDoc)oFHIlQ~Q|`f^#-!6<<*%Jfi&J74%3R_^}gnt(8y99X?3Z);#=drtyur zS1aDZX(+Z+ig(PJJU&l&ga~k@*?O7hrkLOK@P~7mbn9UUahrBNT z${|#yC6I$^N!%hcwOZodBSzhKMHvwtIs9n;1zyNvR#30d?Z~BJm0L0m&09(2&h&KwNCCx7*za(BdD|{OcPI2@%7>8wpjZ`km z&r`~G<=ZSZxGGsNe2|c3?U*6^kiG5!2cnEgE^X#3;Cl-C(pfw=!%jSH5goah4e@pa zW3pnW^7bSE-3N%jqkzX=m@Is6G4CN+PO_qT3nPRMOGhrBc;Qg--5j`xqL$<+LT%HRYn<)(fwZ4D6d=^hoR{$tbgVto^Cgc%kvxuUiN&a9twq zc?tttcZA}!qev+PuYOS|_F-z52;@+ALEH+A%8r6TY8Pwm)0N-iDiQOZ&|BC>baeD{n(?^M1+-!b{myQ}CeawBME|d22oul56-sFo%Ka{3K z(@QopTERr+Vq8)p>TmSETp5?l%jiYUOLH#pVtr_$p0Ne_;P?l5z@m*!W#pg`9d%aT zFQe(0c=4T-QDe!%dKn2Nm5;$9Nbi__~q4D(`G$57w3WQ-Zx-{uk3{!9$jqN=W^ z`N*-E;^h^Vm0QfrM}wHNeiL5YnZgBR%h=@67!+tAcsg>E1y_xKQ{086 zrMOnypf%6qSOyArVk>VDGWw-u^yQg@MA_!mXLdhqn$#up{8?qzU4EsQMgoE7ms~Ma z`HHL=S7eIs=D<2W?Fx0K>3AWy;)gc@S`f(Wb3*X^euPjo+d%^l8NUQ48e<0qDe8@LaM#p;h!aK7)vEk|r z(Gx5kukfQ+XO2)}ZRcs@pF$6Ijeo$HD0cEO*Cf+~Yjg!Hh{Ikuf505xMuT+d6(Z(# zCH~C2`SNSDMqkeNTr=Z*;ibZ1T|Lj-<+(II@!I5W6R)tr{0?7y?O?H0G6yhmpu3An zqxB`x-Q&>LQY=>OrKo!uCVdZVwV2)f$hEV@5+>Od$tRU*qrqOjyv(HpQQ>*~NZDYU zu&K3|%^WLSYJYCE6)U?~o<5)dtvab3(Iw@42n41Gi-8w$zF*iH- zuA4`9!=rBLj$aMKS(7h{SSfa=)A+H;4*t|+Tg201DdFbZCJ$A3ty91&Qs|>61+%9N zk)&_ zq?*sJ>B_&s)0O`s${!pw^>^ta#j>|?^U;KBRYrTF2@Am{F`?oDiwQp%5)&?s%U#30 z;YCK->csF zx8fc1k9_&9^`fCI=AU@%ZOZayf%zmKdE4wR`bHi7;B7Oy=%v*m`FYhL`Y|0ncE-gd zk8>Y0pE%shZE6dD)xi;8{cPGO{37%RTE~wE`>1!W;9~Otr`07T*M6gR0J7oG`h>Ju!xtHY?65P(&_zT$fXj_gMIlqGS5*%qAQ zdt2%f%D(sNVM}S@Wp*nY(zehfhPQt>p~vBrHkrBl^7Z%LJVcWRpC%)*LsV!LAz5=j zzUPrdex3hzJFU^JmUx?`RJr(sb+Zx=8(7{^;_Zy%$Nj^d@E6t!|AZYTp%-r>^Fn1| zxl%+gb#T0`of8IwI1v_~xc=RGY7TYz+k?9 z!BQ$03y7h7+PK9I zG+)7YT*M!p$#%u)bi~~aHnPd=xfNrVy6|`1%117~;4)1oy%feqR-EH1v zpf}&SR2g8*OK0E@9h|IGElYv%H@$@+V_pPHx2A+mZ$@ulR;4W20#(=C3*8JEo!F zxWA4yUMiHh8n)1LfolQXpH;3)vM;HBsPy}Iz^e6|6{6peyv21N-?y@;AHMTI@@6WS zTT=c{JR{=X=IN_0Pl^6hC#3vRX-uu<`o-)cc0nn$E z-@V3d*u9H?z9zBfZb;t@VgWwseBn!jBB#71vjm`iynOR;e)PpY-upqh2$Y*KZ6x72 z7AJBEI)z7~WHxr@-16$_l@sc!@?A6Cvnr?0oZ3yMJ+ez?)T~+6XOzhf=@~t(yjGLp zBi8oqsV}dIU%htpcs->ZIYrU6wXpUMNntNKM%;L{59 zsdAbjRz{blGWnXTCX6qhJR1L&$PG+%? z8F_`w=HdHRe0ERdY3nXY&fbgc5F3eSFFY^D6H&m%;YrzHndd_O$fg1OnRS`B)POo3 z)Mw3ct(?wtU&xIj)s*D-_}mvR zG*rIFUw$Fiu<||r?F*Om{O~=Q<$x)yqW%OK%CA|tZ>r2j*Uzb&HAD2aZn`Hqh+ zqPD#D4*vCveGNO`=fA(08+8Jv41pTJOJ2IfkiC!J^HN%F-9B|70%xPH;GGpRTRsJD zDVJH*tlAmnbrdN|VH@`a|M8N==#7QT*?yT7;&U}VQ}CIEPXj(n@Oc8C7<`_==Vg4h z;qxXw@8fd_pJVv^7oXk-WOe~QPJAxKCjojd$MafzZoy|dK0bUF;j1kBnD3^~nu!kWc6<0`oBJBFKjF7*E-{Szgs<6L(d%fX4E;(- zuJ`b`Er|wpkYBi^BI?S6GRp%e;~-zNC2RN!z`lSR@T9&eSKNV#R941zV2!^A{GK#O zM3q-#LdDE^{2))_c|}?4-Td-b2O6?J z&1c~E0R9%w6g-pAgJ~#>`CP`kTOlXPr3q(NeVsh3O0J-Z3aCn+f~owllD`o0aYCNo z`&y!*=5xO0wUR#TK&AdziVr>4eIES%wOftj7d<5dDb2d|aV$*c)l^S+Pp^|}%4be@ zGdATb#p+T#DPa{-hsn?*i^U(z*h|RL4_S8LNgX>%ma9Eg zb>uIm$;kT^CmdB}G+CTjrOOw}@|{uXQFqICr=~`w54|6zYF#-6n-tUJ}BoJJgEVXt2SNpHDB|3T2vFrql&5UJuFs`MWtI#QWucMl(xbtLx34izC>_z+Ni9Z+S~eY@ZMarQ z;}IpI72>llj8+EP3eXbpq(skY__TnwoWFLUA7A;V$&gUO2kwjG+upPqDlg-|zaPgB z;_JT4_*ZWx8p_7-s9h;>W5$Lokf8y46gF}!FWHq?vK1`y9wjnl3RvrP;_;x>fz|@r zTC%vfmrokkAl+|RXiNfJ3|_`~{^G6_Lq;h-uxp^9^lJVS9xJZlac>PY9KDw3zBO=w zbwXz+#Tc^36gNm>uqid5-V^xDw+0vzuHz59HDI9cy3WpORZ1;`$-pg;+;bg&{jEgr zi5ogQ?@~kxNfFt62<(YBcCW_?&`LqmoJVq2qasHQK#6Dxpw&Q5-xwL7O$p0e4BE6C zJ8fNpqV-l%y;d^5#VJ0>+XS7zA2rZ z`9e%FA_k?mfJT8vi402utsOLd1@b}L4VvEAaRA$NaPy0@){ z^a>Fk#}AnJp0`bLD=IoWNthB9vKyIJRPb-#9%zVl^Qd)EbU-HbSxnymtQG+x;vpK(SN#CHvwmt@yfc zD*wkj1JatNb+6EIuo^*2B7I0QJ|+vM?rA*n-NeiHOz-S$1qnrEXhl&qiXl>Wt6C*B z%E*tCK(7H^3v!aJ0d3l?{NZ=wGEah)4H6|{tpF?jw$9E&L{QaGO*Vpl2=shDcprXu z^tQ>d50sPD-5cmAXlzD^MmbM`W}U$Y>=`(~2NsR8Y>d(ih@Bk)XU?FOiIM@!0NG4l zyC>0md}e3o6d=tEs?B1s^Jj$$AX*D(g`lDRM4~Rc6|@Y{+KHlT6sqDr@IC}jM4(zl zq8|hOBLCo}{S>o{1Yb9k@!1{!MWxdV^&xAXCM9KVCld@pW5>HN;ld5}YWGsq8A zPameM_4D}?V8`6qolPdM2fOA@{?2;?%8?(sd1oi-r6l8%jfH6Ta(>MRiD~VR zbvLIPtX9x8adM{*wD!mN6CcD4NPWDkKZt3W*z3W*|8f4#2XT%@u%}@*gwZu!vo_fK z{u;7P2KxkPC;rO&e3*FM)+f<^YOm3M}7 z5GQ&9=<7jOL%(Y%$p-xp=o1xrjh@HGfg!Jkw-iQ~Gb=%_0liXjiSQy->n_l@t>KS< zQC%fJ07Wnk0uot;gJu5NR94EAu*>$v0NM04E>ot-=Rr+fQlm4TS> zVkm^E2Gc-G0xjGiALw;2@+Ury8_*ucrp~b*?AVw1J0A}mHDv=@jMffFr11z?Q*b3@ zo>G+fKJadxyc_tSPX1wF zIw;o4J0LMHs{~;R6p#S};R;!&U@S1556de5QQ#xM(JKB3n9hc&wJCo-e4w2T6RroQ z<8!UR&wxvTOJNA{3r$|k>u-{JN(Od0g8428C`n@10`GfE21lvkJ-{CV$Ef&O;1xRg zmw}IhZ&Uf70-w^!Td{!KrjtL<3qmw%tYsJpd{8Ig0?yF!Yk=uRgpwq72k>a{Y3D{w zLhHzhIuE`JOfM}o`454oflnJTlJ^?11fw?^nm{!0y%5maI1iZKc4+)U;0M8{y&x&L z4Y*pzuLE8MJ|2SqB)+T#);zWgcqQbEv7$l~c-c+(au-}gZAuCQz$1aFI}m;ec-yX! zf{%bp!PgWTt%wmFb^tGi{4h2DMBsEC|6X8Ump-q7tph=O@j?Y20M=fu5GGe>FIEVr z0c)>S2-jbQ`Le$(mV*X^#O?*&35=#^gdYXo4eV3#N?>M{SrY}J7XlBJ!hpABP*G!p zflVOatI5QE=)4nn#rZf}292V2^wl^I9-u}s^3MfcoFKD<#0S0%BWFJJ36DbG{lGq8 z;W1#t4N7_EL*7dTjs`({BSQGaFayYz>I-CgAW7_RVf=rD;bUR=S77=p!Ag=CZbUMl zg38iek zH)3H7{i%de!QH?~LLTK4q2wk683d-P0#l$sOJu;^VfgVdyd@0p3&THz;a<_IcB(%W zFiaz;cuW}fgyDO`@RMP9TNwT*4F9BJDqk32>q*~~LJV3PgnhwUhqbk zz?Wgzgn9bVJF?hu&_Lw?)?N@3o(QbHC?6qc^ZhlGswn6J890Ca>p{9KA|bl2>B?K?WkUfTCpx2`Dw7_s&X^ z*sc9ATLLHO4AS#Sj^0r#Nn-zmym)5~f~LQV?}f`|#bZr|3@dd4gq5TiKrg&C{4L}O z(-5vH)bq>xV>1Ch)-hdt!b+0ZW8iBqol$>U+hReW6W9)cmk@MR0P+6?{C~hStrPB# z)nhxbm`;I<3118hRb{61Zq$mu>=|wUzkraM7UOq|&PsE=hpb$bCOvNNXN#Td%VwWtq8efm+ z!Qe)CV3^2lU{3?@L^3s4{wXa!ykOxHQ|QBPP&659a2c1wd|p?gZ zc-&sEELxWclR(g}dl0@4Scb)!s)Cn+D}l3A{3-BC;NdE^4nmUw=cw2TtX&fY*@UD{|og+aNl5 zFQdCCI>KqVI*d5UYBNg!xJ7Jxvd4pTvN zzeq`n2f{I3veEPPcs*FDA1HGR#ej1#_JTV6iWh{Pun;3GBY`8p+Lao@y%VvMfk9f3 zT?njQt|7h$m@dkkr{-S_OqXV8ZAtw91Evc!8vY8HF4Oc;`QG#FOx&!|6pRF>TQ=I* zKNXm6+-PI}5@5P{LmL_@;5A^ng%hRXqrh|{r>BZ-Nle_%(fF4D(@hYaVRlc)U z87E9C{sx%F1#O@iKL@L1V2!^8n8tzSH2zQlm)Bt|9w#$dRq!hC#Pj(z`Nig z2#A<~0h57gDAru~au}YCHr0|gl+*n~B}w8z_Y*bz5afLyV*ZZ@h59ii>$S3Y5@jm{ z=u(?#LtsjTm89U*b71pO%%&(n8(BvH)1^55G9H-fPf1ZoH|LZju}6@B@L~|ORj!^- za&#wANfLWzDu!AVpn32wvoMaJ#-al7=x$*0NH#K%ha>N%3VTB?opO)j0nNob!mtyz zl7}?@cQ8;(DiK{o5aJ5%g10vAHRV67N3CDDqRnHH{TXp;*7%=4{ zb)bO{tARJ_nxq-ndkh3CG*S$_4#EkYz<0peP@uIT6|66S@a~B+J&+WG!!g~)Rg%Kj zHZlwngu_e z_~%La^M}n+FefKA8zQLza16OlIW%s|0i#dRhr_WZ8x49FTbffKOECVPbEpL z7#<>h2SK0;J_=0o8uqr$Qw(TV1rCK-cnWx&ZjtG#L=$M(U}7t(u*8A~L=2(Ep8?bD zHcI4y!RVHUfT?PPD}j?f?i#ASEZ&ce00d-J;3i=0f-7YxrCCNzhbxA#!}Qk>oq07>vfniY`aAk z`Lz6cJR9-{!Cwmr1MUBJfk2mWDTp+S2`forS2z%)n#&+Ti4-Ua=l|gE1fPPIdc`W> zgE~xdbOBgN7zx222|lf`#Qgs=2->Y-F&EsbxM&J0PeF6lZAy)_Ua|dN#%d7*WQv51 zMSdg32`HpQP4;gUYcY{HLa@X?BI@x?HONa@1cR!~sZm^(4GJ~M6TnmhO5}3a9gNASv4{cSk~#d8!-TjVpW022J~YnNLBfF15*KU^^I^J97~r z>isk%Kp9s~m6iOeh2gk0j8DJVP?E%+gF@|wJXK&nuy&JPR45Bg1_OE`1L0x7-s2#| ztAru%2V(_gh|0r-a zFeS>LHXZT5NT=YA0OoHkXfUw61x!sa1{uhJ-uEeOOie)ebKpi4s1=ZWKel2z1Ev8} zfxXlMp93BTe5s0$-B0}w83w6@5ew0#z!#{v7Fhd@0$F?=T&5*$B-1wm@#yCuN>YN1 zO$*^#8@1B(~|{?8dapf?z5*m7M32)Bgc zk+;f3MpDoJbp$~!4haa{SS^buGMo_~nc1Bmjv%Cm|VOZ`AL3ajS@pzH$DVR9?|s8o{erfTW0eh@1+b+_~C(Cg+Tb9z*J)rAUtRR zGN4HcRfA>$Q;jwL4#bG|BO8h#4=SW3t(SDwSZ%^4#RJs;lr~ifT{yZR~E3gHa^3&B)ZD`i(BgOgkGXACVRRa`)g1-t=7)`!Z6V)gy3{MQh z^}zHqqXgv93?Qr|rNZL3MxuNeP?dx2G6clPrW&OE7>Nvg5&XI^g@iSQQZByzBXq_? z^u;>1rIaMG55On97zC|`dOpd~ z537`f*LZmf*6;tp_jU=;mp$|3F1!>OwBKHlfvvz=(t=7a|0(#3V6axhhx#HQ+zUILsDWw zkG({upZO^Xzdm{d0|zYL2?Djz4ZuEN5d*-#08arXXA=KCbe9U?^Hu!v87idL|1R+x zWJbT3L6eE{1p#CviP=YDBXURc2}7ZQM%>+r?ElXTbxJWYqM1g_KJ3BY%C zVa)$GgRr=Zpt$IMzs!_$X513SKNaXMug6u;pT1CLE1*ydQomV3sJr|m6~q6E0Zk8g7YN6v!uY1e-Q~k^ei&bmUw}sn4~v+h`Wx7X zAY>>6ff-U+lS~gJ#lUb}9mbcJ$wFF_562lgzVTwF{$N$q-@t5-D!o8VzZl7WUViPEwc2;z^W8!LK>27^v|_He>!* zBor5yf}r7T$lyC1T2OoqJn{3;^xEeVEWyB+k%1Im47><@F-`za1KtR}Hga;{c<@tI zc{~_?J*$=v6@P;O)qrd#h2H=NfW^)QIQG)e4|<7zDe!0D_fX|;1^yN|Ma4^jwI2eL zd@Hc_Ltn!G1g`nqtBzbC#1$f^ny8JOg&Ja5mML$?>G!@$QapA{hf52w{YDL=AwUJ( z3A`3qs}SYew?d`|lEgk)4i9*tARCZ^W=$b6l%y4?&p@2ICuBtc3Mhr+`@{Gf!|={9 z>^;6x7K+FsN_spVQB4M{1d9wj1WXFVJs;q~k73_{8d9R5++HZYihr~U#H^B4qN3mT zR0vl*hWI-I1tMsmpalx|>F`&;Cx9EFf(p3qamMC-A+rzQQ^NlTOa_Rc0zOozmW2ly z@ZT^zpr|`v^gq2t#HJrjD+zzD2pQ=2-eO!(J*55qTl3gro&3v?*M9d+F>p}DTCX6z zdvx-m|HVHoE9Id8%P2(USD__X2Jk!`Cczq={Egr@fv+#%LmfW={u=NN$VUdP2X4_} z?3OOA?;6=}M z37iqj&v)mC<8|x0^TTo73mPBuKcx^sVv|tg)UQJxA^zg73=+E!{5tUUEYwn-z}jB} zAp9w?_G^B^R#)g({e+#s+Ryn>e*?P(gy&#UPqo0OG5b-kumV%RFW`&~244gby4jt; zGBEj$y5VcUDLUK4gmMp z@#C?U8mPlJ0>|p)R{$sJ`2PU518W8^M1_@v_@jZM5%Yh>{?I_Q1Nekap%orE0;~;G z9hm=5>ahG*jEukoRD;)a6`<(f4jg?n)UCe*js+I|pPGQuPF;`?&fXx?14#+ea6Bd` z3oh~dl`#CRg-}1Ai^+xbRYNs-xCneLQH5_&vFLx=SgluhCj`hsZT?;ZTnVg2{a)ZY z9VX?i8)dZ&#o%z9v^m5-h5Y!d5MJ?TA;<$2a3L8m4|&Pr4Zs!ul*OOlpddQ|{4($$ z@CoNV!Pwqo_&Z1{o)6pzgC@cR5tP6Of!kHgp2XqyH!^!&l^=2$*{X~`A_lGz1R^SJ zc6S(F8;0Kx!@q~&p<@(Xnm&5!J#gnOw6%jv^1+}Qmz^QQB%RAh!O2%-dLZF6d?$-y4?yxiGvx470Ia^;c><3tr7Vi^7?44ba#UciVjd}A06gyHp9sO?W`$be761T5pa7myi-Cxzkr!tl#s_|q_K z^-W-MxhvDd}Ff!U?w$scoVM**f z;Khl`SWmb=@KL)m@(~^id?tGO#3#5Ph)z}#&2^CQFZ3eEpKxQXZ`PYD} z2g1Y9=Ou;hAWT69&4oj+S2mCH)C`k=X$7RXOk%5mX~m=ABfv4b{BOe7bgno?&EI$f z3WNcg!E1r1DNW=RZL|jj?FWJ}Fz5r|k@$}sQHnvw{010*iCC=j$>5Y5m1VS6z_q}% z3@?N{@f(5Hp#VxT%))x#gw5yEp%_>QOsnKdI)9=J9U#z=iHr<{e+6#wBZEP~gC}*5 ziAG?3OdJ8$$3*eX$^k~as&5f69l@aKmGXdT(VL3WI(IlCRLyinAZ84ivz&4 zw@X*~M}hSQjG5fsfVG5Q4CVg@SRYd*Qt6JDF$8)OurGK zKXgPMnhm@HE~X$o4=x_yMiT;qEt<3(xVlniP%GqnRWiIUmRYf?@2|IE5$eMHe^M0~ zQVkE3$jqnWb-?tC1w4d;tQjZ(c#KiOGl6OQeN9M6=w&4y?5g%R3&U%fPn-qv;v<8NBZtlZY<=h{7nn7 zrduep7}Wzufb}sk_JQs(@jS3TC@U6Wg|#f?A?riv|8xixs}^t(2(-wg+i+B)#~I`**YxPs;a6o+@9=QXL)(H z;)RiU1-Y5o1-a!Fl?CMm+3xH=?}f}fMX}rC&Ma_dIV;O6s`B!)^A*LtJrxDca!;i* zBReO@lkaTayFs!wXRMRXZ;p|r$uU{wITiW%e{Oz8Rz-eAZnIaGZj5nPR8(YDIo(y2 z&dN+QL-Vr1($(Jb@`9@J%Bl=cd3j}aMMeSHczM~_%&f`O5Ti!nOXi>UM`qTa7j+8t zUg-ZHGG+gH{W(HE)KfucjXiI-;LD_l5_SF`3Zifkd8ov*7Sz3*0!`HWhaDoTs~yf7 z?x%+^HJPyKkHX#?>Umkz4kFY4&;gWIgqOQ&^v4y_`__Bz(I6{_O}=q_e%9oqab-!B z)2Djo)HxjPS+$fQ>%9Extb8`7CUf%q z+vY+|elDiPii*noOsBIl52JR9bi=S5{3ZGVXI@1?UU^ndZWdzi>>0|2NTX~8*%_4? zD&-A`&`U(np<#=oSB(tFsZ9h%*|)4%$A|)(p*Dx zt3!Hl%k&Y_osw4xe}~(hQ*A21r?QD zVgHAPBed!(>Z(1Ca&*tEoUGi8=9@-Hy_%nJNQ1XXPU-dwn;)4WT{|)}H&0ALb3C<` z9*2WI(`VFF&v7_t!lAEXqS3L7Jpj}3Uvik=T$n2jzD=2wF!fMwjRiH=dED1cpEJE~ zR_z(5E}ceA3_1$tQkKbcJhM@IPp-4VlUuxV%*)Np$1swWgB5tDv!I~)zS+{`(FJJ4%<}94PkB~BMP5~f zi#+a}Q&*WaeO6|ErKhUAzPfHQ{*wZglRfjw-E}BF&y6L1PJXsKvpg@uU6Io~cCd7D zj58}gzo0xP*OQIyK}JSFbH*HLWAmh1DZhEsOsP+^ca7v|{#%U{(_CF6ecXItmNaq8 z8#ARusd@ZNX2=DzC`M%Fe|)y0S7mBg37A|JZ_X zVIKB3a9qAKCpV`6<4J+D;7=-W3I(x_GiYcYR4ZNR{d0C?{QugKbruB%XF>C~_1H}u zu9xPXhk?5)Gq)fww>-y_os)q*$kn%FyK(1S={oNpPZg?>nNG}d8BVlZW@aAtg*jQ- z8H%_5ScPil8B}1_gDn?d{Kq=fHamk3p(3{Vv)iSInqQqM^=y{!L||s!AsuOcex6ji zW#D`%X;gFZHYwI{azpct+oXXG`U`a@U%?4d686bzqC)~oz45{JT6u-^FBz9WoB!XI z?O{}6104)t^I`fq5F0esmhxfxHxL^%W&>o)?PXMB0@7|En&IR0JRr@g@{xhTVfxIy cjLJ+YhST=}g(Qv`GBQk=4>TVNKvsbO04VG+Q2+n{ diff --git a/hash/sp1/bench/keccak/src/main.rs b/hash/sp1/bench/keccak/src/main.rs index b7fd57e..da0a147 100644 --- a/hash/sp1/bench/keccak/src/main.rs +++ b/hash/sp1/bench/keccak/src/main.rs @@ -1,20 +1,21 @@ #![no_main] sp1_zkvm::entrypoint!(main); -use sha3::{Digest, Keccak256}; - +use tiny_keccak::{Hasher, Keccak}; pub fn main() { let input = sp1_zkvm::io::read::>(); // create a keccak object - let mut hasher = Keccak256::new(); + let mut hasher = Keccak::v256(); // write input message - hasher.update(input); + hasher.update(&input); // read hash digest - let result: [u8;32] = hasher.finalize().into(); + let mut result: [u8;32] = [0;32]; + + hasher.finalize(&mut result); sp1_zkvm::io::write(&result); } diff --git a/hash/sp1/bench/run.sh b/hash/sp1/bench/run.sh new file mode 100755 index 0000000..d39a51f --- /dev/null +++ b/hash/sp1/bench/run.sh @@ -0,0 +1,15 @@ +#!/bin/bash +if [ -z ${ZKBENCH_HASH_TYPE} ]; then +ZKBENCH_HASH_TYPE="sha256" +fi + +if [ -z ${ZKBENCH_INPUT_SIZE_BYTES} ]; then +ZKBENCH_INPUT_SIZE_BYTES=1024 +fi +cd script +echo "Running benchmarks with the following configurations:" +echo "HASH = $ZKBENCH_HASH_TYPE" +echo "Input Size (Bytes) = $ZKBENCH_INPUT_SIZE_BYTES" + +# Run the benchmarks +./target/release/bench-script $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_BYTES \ No newline at end of file diff --git a/hash/sp1/bench/script/src/benches/blake2.rs b/hash/sp1/bench/script/src/benches/blake2.rs new file mode 100644 index 0000000..622e24a --- /dev/null +++ b/hash/sp1/bench/script/src/benches/blake2.rs @@ -0,0 +1,43 @@ + +use sp1_core::{SP1Prover, SP1Stdin, SP1Verifier}; +use rand::Rng; +use hex::encode; + +const BLAKE2_ELF: &[u8] = include_bytes!("../../../blake2/elf/riscv32im-succinct-zkvm-elf"); + +pub fn generate_random_bytes(length: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..length).map(|_| rng.gen::()).collect() +} + + +pub fn blake2_benchmark(size: usize) { + + // Generate proof. + let mut stdin = SP1Stdin::new(); + let data = generate_random_bytes(size); + + stdin.write(&data); + + let t0 = std::time::Instant::now(); + let mut proof = SP1Prover::prove(BLAKE2_ELF, stdin).expect("proving failed"); + let t1 = t0.elapsed(); + // Read output. + let hash_bytes = proof.stdout.read::<[u8;64]>(); + let hash = encode(hash_bytes); + println!("hash: {}", hash); + + // Verify proof. + let t2 = std::time::Instant::now(); + SP1Verifier::verify(BLAKE2_ELF, &proof).expect("verification failed"); + let t3 = t2.elapsed(); + + // Save proof. + proof + .save("proof-with-io.json") + .expect("saving proof failed"); + + println!("succesfully generated and verified proof for the program!"); + println!("Proof Generation Time: {:?}", t1); + println!("Proof verification Time: {:?}", t3); +} diff --git a/hash/sp1/bench/script/src/main.rs b/hash/sp1/bench/script/src/main.rs index 267dc58..146de3f 100644 --- a/hash/sp1/bench/script/src/main.rs +++ b/hash/sp1/bench/script/src/main.rs @@ -30,6 +30,11 @@ fn main() { let _ = keccak_benchmark(size); } + "blake2" => { + println!("Running blake2 benchmark: "); + let _ = keccak_benchmark(size); + } + _ => { println!("Wrong Benchmark Name!"); } From e2701150c0018a2e99427f18462a9d63697acefa Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Mon, 11 Mar 2024 23:52:27 +0530 Subject: [PATCH 27/31] blake3 and poseidon2 bench, script for running merkle hash --- hash/sp1/bench/blake2/src/main.rs | 4 +- hash/sp1/bench/blake3/Cargo.toml | 9 ++++ .../blake3/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 135336 bytes hash/sp1/bench/blake3/src/main.rs | 22 ++++++++ hash/sp1/bench/build.sh | 4 ++ hash/sp1/bench/keccak/src/main.rs | 2 + hash/sp1/bench/poseidon2/Cargo.toml | 12 +++++ .../poseidon2/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 235916 bytes hash/sp1/bench/poseidon2/src/main.rs | 35 ++++++++++++ hash/sp1/bench/run_tree.sh | 16 ++++++ hash/sp1/bench/script/Cargo.toml | 4 +- hash/sp1/bench/script/src/benches/blake2.rs | 2 +- hash/sp1/bench/script/src/benches/blake3.rs | 43 +++++++++++++++ .../sp1/bench/script/src/benches/poseidon2.rs | 50 ++++++++++++++++++ hash/sp1/bench/script/src/benches/sha256.rs | 1 - hash/sp1/bench/script/src/main.rs | 26 +++++++-- 16 files changed, 222 insertions(+), 8 deletions(-) create mode 100644 hash/sp1/bench/blake3/Cargo.toml create mode 100755 hash/sp1/bench/blake3/elf/riscv32im-succinct-zkvm-elf create mode 100644 hash/sp1/bench/blake3/src/main.rs create mode 100644 hash/sp1/bench/poseidon2/Cargo.toml create mode 100755 hash/sp1/bench/poseidon2/elf/riscv32im-succinct-zkvm-elf create mode 100644 hash/sp1/bench/poseidon2/src/main.rs create mode 100755 hash/sp1/bench/run_tree.sh create mode 100644 hash/sp1/bench/script/src/benches/blake3.rs create mode 100644 hash/sp1/bench/script/src/benches/poseidon2.rs diff --git a/hash/sp1/bench/blake2/src/main.rs b/hash/sp1/bench/blake2/src/main.rs index fa8ca27..d1c3a43 100644 --- a/hash/sp1/bench/blake2/src/main.rs +++ b/hash/sp1/bench/blake2/src/main.rs @@ -2,14 +2,14 @@ #![no_main] sp1_zkvm::entrypoint!(main); -//The patched sha2 rust crate https://github.com/sp1-patches/RustCrypto-hashes +// blake2 of RustCrypto use blake2::Digest; use blake2::Blake2b; pub fn main() { let input = sp1_zkvm::io::read::>(); -// create a Blake2b512 object + // create a Blake2b object let mut hasher = Blake2b::new(); // write input message diff --git a/hash/sp1/bench/blake3/Cargo.toml b/hash/sp1/bench/blake3/Cargo.toml new file mode 100644 index 0000000..6e51f20 --- /dev/null +++ b/hash/sp1/bench/blake3/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] +[package] +version = "0.1.0" +name = "blake3-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +blake3 = "1.5.0" \ No newline at end of file diff --git a/hash/sp1/bench/blake3/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/blake3/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..c3755868313377386f9d0f5309fb57bd196031a6 GIT binary patch literal 135336 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 literal 0 HcmV?d00001 diff --git a/hash/sp1/bench/blake3/src/main.rs b/hash/sp1/bench/blake3/src/main.rs new file mode 100644 index 0000000..e44992d --- /dev/null +++ b/hash/sp1/bench/blake3/src/main.rs @@ -0,0 +1,22 @@ + +#![no_main] +sp1_zkvm::entrypoint!(main); + +// blake3 of https://github.com/BLAKE3-team/BLAKE3 (official implementation) +use blake3::Hasher; +pub fn main() { + + let input = sp1_zkvm::io::read::>(); + + // create a Blake3 object + let mut hasher = Hasher::new(); + + // write input message + hasher.update(&input); + + // read hash digest + let result: [u8;32] = hasher.finalize().into(); + + sp1_zkvm::io::write(&result); + +} diff --git a/hash/sp1/bench/build.sh b/hash/sp1/bench/build.sh index b5838cf..d05e9b0 100755 --- a/hash/sp1/bench/build.sh +++ b/hash/sp1/bench/build.sh @@ -5,5 +5,9 @@ cd ../keccak cargo prove build cd ../sha256 cargo prove build +cd ../blake3 +cargo prove build +cd ../poseidon2 +cargo prove build cd ../script cargo build --release diff --git a/hash/sp1/bench/keccak/src/main.rs b/hash/sp1/bench/keccak/src/main.rs index da0a147..ba94ff2 100644 --- a/hash/sp1/bench/keccak/src/main.rs +++ b/hash/sp1/bench/keccak/src/main.rs @@ -1,6 +1,8 @@ #![no_main] sp1_zkvm::entrypoint!(main); + +// patched keccak rust crate https://github.com/sp1-patches/tiny-keccak use tiny_keccak::{Hasher, Keccak}; pub fn main() { diff --git a/hash/sp1/bench/poseidon2/Cargo.toml b/hash/sp1/bench/poseidon2/Cargo.toml new file mode 100644 index 0000000..9a7b28e --- /dev/null +++ b/hash/sp1/bench/poseidon2/Cargo.toml @@ -0,0 +1,12 @@ +[workspace] +[package] +version = "0.1.0" +name = "poseidon2-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +zkhash = {git = "https://github.com/HorizenLabs/poseidon2"} +ark-serialize = "0.4" + + diff --git a/hash/sp1/bench/poseidon2/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/poseidon2/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..742a2c8eb9df5cfde75940a18a5fc05c0fa092ff GIT binary patch literal 235916 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 z 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�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 + + //build input + let mut hash_data: Vec = Vec::new(); + for i in 0..input.len() { + let a_uncompressed = FpBN256::deserialize_uncompressed(&**input.get(i).unwrap()).unwrap(); + hash_data.push(a_uncompressed); + } + + // create a poseidon2 merkle object + let perm = Poseidon2::new(&POSEIDON2_BN256_PARAMS); + let mut mt = MerkleTree::new(perm.clone()); + + let hash_final = mt.accumulate(&hash_data); + + + let mut hash_bytes: Vec = Vec::new(); + hash_final.serialize_uncompressed(&mut hash_bytes).unwrap(); + + sp1_zkvm::io::write(&hash_bytes); + +} diff --git a/hash/sp1/bench/run_tree.sh b/hash/sp1/bench/run_tree.sh new file mode 100755 index 0000000..094983c --- /dev/null +++ b/hash/sp1/bench/run_tree.sh @@ -0,0 +1,16 @@ +#!/bin/bash +if [ -z ${ZKBENCH_HASH_TYPE_TREE} ]; then +ZKBENCH_HASH_TYPE_TREE="poseidon2" +fi + +if [ -z ${ZKBENCH_TREE_DEPTH} ]; then +ZKBENCH_TREE_DEPTH=4 +fi + +cd script +echo "Running benchmarks with the following configurations:" +echo "HASH = $ZKBENCH_HASH_TYPE_TREE" +echo "Tree Depth = $ZKBENCH_TREE_DEPTH" + +# Run the benchmarks +./target/release/bench-script $ZKBENCH_HASH_TYPE_TREE $ZKBENCH_TREE_DEPTH \ No newline at end of file diff --git a/hash/sp1/bench/script/Cargo.toml b/hash/sp1/bench/script/Cargo.toml index 0b5f047..aa82847 100644 --- a/hash/sp1/bench/script/Cargo.toml +++ b/hash/sp1/bench/script/Cargo.toml @@ -7,4 +7,6 @@ edition = "2021" [dependencies] sp1-core = { git = "https://github.com/succinctlabs/sp1.git" } rand = "0.8" -hex = "0.4" \ No newline at end of file +hex = "0.4" +zkhash = {git = "https://github.com/HorizenLabs/poseidon2"} +ark-serialize = "0.4" diff --git a/hash/sp1/bench/script/src/benches/blake2.rs b/hash/sp1/bench/script/src/benches/blake2.rs index 622e24a..7b497f7 100644 --- a/hash/sp1/bench/script/src/benches/blake2.rs +++ b/hash/sp1/bench/script/src/benches/blake2.rs @@ -23,7 +23,7 @@ pub fn blake2_benchmark(size: usize) { let mut proof = SP1Prover::prove(BLAKE2_ELF, stdin).expect("proving failed"); let t1 = t0.elapsed(); // Read output. - let hash_bytes = proof.stdout.read::<[u8;64]>(); + let hash_bytes = proof.stdout.read::<[u8;32]>(); let hash = encode(hash_bytes); println!("hash: {}", hash); diff --git a/hash/sp1/bench/script/src/benches/blake3.rs b/hash/sp1/bench/script/src/benches/blake3.rs new file mode 100644 index 0000000..5c45776 --- /dev/null +++ b/hash/sp1/bench/script/src/benches/blake3.rs @@ -0,0 +1,43 @@ + +use sp1_core::{SP1Prover, SP1Stdin, SP1Verifier}; +use rand::Rng; +use hex::encode; + +const BLAKE3_ELF: &[u8] = include_bytes!("../../../blake3/elf/riscv32im-succinct-zkvm-elf"); + +pub fn generate_random_bytes(length: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..length).map(|_| rng.gen::()).collect() +} + + +pub fn blake3_benchmark(size: usize) { + + // Generate proof. + let mut stdin = SP1Stdin::new(); + let data = generate_random_bytes(size); + + stdin.write(&data); + + let t0 = std::time::Instant::now(); + let mut proof = SP1Prover::prove(BLAKE3_ELF, stdin).expect("proving failed"); + let t1 = t0.elapsed(); + // Read output. + let hash_bytes = proof.stdout.read::<[u8;32]>(); + let hash = encode(hash_bytes); + println!("hash: {}", hash); + + // Verify proof. + let t2 = std::time::Instant::now(); + SP1Verifier::verify(BLAKE3_ELF, &proof).expect("verification failed"); + let t3 = t2.elapsed(); + + // Save proof. + proof + .save("proof-with-io.json") + .expect("saving proof failed"); + + println!("succesfully generated and verified proof for the program!"); + println!("Proof Generation Time: {:?}", t1); + println!("Proof verification Time: {:?}", t3); +} diff --git a/hash/sp1/bench/script/src/benches/poseidon2.rs b/hash/sp1/bench/script/src/benches/poseidon2.rs new file mode 100644 index 0000000..7a831d1 --- /dev/null +++ b/hash/sp1/bench/script/src/benches/poseidon2.rs @@ -0,0 +1,50 @@ + +use sp1_core::{SP1Prover, SP1Stdin, SP1Verifier}; +use zkhash::fields::{bn256::FpBN256, utils::random_scalar}; +use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; + +const POSEIDON2_ELF: &[u8] = include_bytes!("../../../poseidon2/elf/riscv32im-succinct-zkvm-elf"); + +pub fn poseidon2_benchmark(mt_depth: usize) { + + // Generate proof. + let mut stdin = SP1Stdin::new(); + + type Scalar = FpBN256; + + // generating data and serialize + let mut input_scalar: Vec> = Vec::new(); + let number_of_leaves: u32 = 1 << mt_depth; + for _ in 0..number_of_leaves { + let mut uncompressed_bytes = Vec::new(); + let a: Scalar = random_scalar(); + a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); + input_scalar.push(uncompressed_bytes); + } + + stdin.write(&input_scalar); + + let t0 = std::time::Instant::now(); + let mut proof = SP1Prover::prove(POSEIDON2_ELF, stdin).expect("proving failed"); + let t1 = t0.elapsed(); + + // Read output. + let hash_bytes = proof.stdout.read::>(); + let hash_final = Scalar::deserialize_uncompressed(&*hash_bytes).unwrap(); + + println!("hash: {}", hash_final); + + // Verify proof. + let t2 = std::time::Instant::now(); + SP1Verifier::verify(POSEIDON2_ELF, &proof).expect("verification failed"); + let t3 = t2.elapsed(); + + // Save proof. + proof + .save("proof-with-io.json") + .expect("saving proof failed"); + + println!("succesfully generated and verified proof for the program!"); + println!("Proof Generation Time: {:?}", t1); + println!("Proof verification Time: {:?}", t3); +} diff --git a/hash/sp1/bench/script/src/benches/sha256.rs b/hash/sp1/bench/script/src/benches/sha256.rs index eff61f3..39e53f0 100644 --- a/hash/sp1/bench/script/src/benches/sha256.rs +++ b/hash/sp1/bench/script/src/benches/sha256.rs @@ -10,7 +10,6 @@ pub fn generate_random_bytes(length: usize) -> Vec { (0..length).map(|_| rng.gen::()).collect() } - pub fn sha256_benchmark(size: usize) { // Generate proof. diff --git a/hash/sp1/bench/script/src/main.rs b/hash/sp1/bench/script/src/main.rs index 146de3f..b75a413 100644 --- a/hash/sp1/bench/script/src/main.rs +++ b/hash/sp1/bench/script/src/main.rs @@ -1,9 +1,19 @@ pub mod benches{ pub mod keccak; pub mod sha256; + pub mod blake2; + pub mod blake3; + pub mod poseidon2; } -use crate::benches::keccak::keccak_benchmark; -use crate::benches::sha256::sha256_benchmark; + +use crate::benches::{ + keccak::keccak_benchmark, + sha256::sha256_benchmark, + blake2::blake2_benchmark, + blake3::blake3_benchmark, + poseidon2::poseidon2_benchmark +}; + use std::process; fn main() { @@ -32,7 +42,17 @@ fn main() { "blake2" => { println!("Running blake2 benchmark: "); - let _ = keccak_benchmark(size); + let _ = blake2_benchmark(size); + } + + "blake3" => { + println!("Running blake3 benchmark: "); + let _ = blake3_benchmark(size); + } + + "poseidon2" => { + println!("Running poseidon2 benchmark: "); + let _ = poseidon2_benchmark(size); } _ => { From 9d6723bf03cf3320505016d02e027fc433470901 Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Tue, 12 Mar 2024 12:25:00 +0530 Subject: [PATCH 28/31] added tracer for logging --- hash/sp1/bench/run.sh | 2 +- hash/sp1/bench/script/src/main.rs | 5 ++++- .../sha256/elf/riscv32im-succinct-zkvm-elf | Bin 113704 -> 113712 bytes 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hash/sp1/bench/run.sh b/hash/sp1/bench/run.sh index d39a51f..2cde35d 100755 --- a/hash/sp1/bench/run.sh +++ b/hash/sp1/bench/run.sh @@ -12,4 +12,4 @@ echo "HASH = $ZKBENCH_HASH_TYPE" echo "Input Size (Bytes) = $ZKBENCH_INPUT_SIZE_BYTES" # Run the benchmarks -./target/release/bench-script $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_BYTES \ No newline at end of file +RUST_LOG=info ./target/release/bench-script $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_BYTES \ No newline at end of file diff --git a/hash/sp1/bench/script/src/main.rs b/hash/sp1/bench/script/src/main.rs index b75a413..3c4ded1 100644 --- a/hash/sp1/bench/script/src/main.rs +++ b/hash/sp1/bench/script/src/main.rs @@ -13,7 +13,7 @@ use crate::benches::{ blake3::blake3_benchmark, poseidon2::poseidon2_benchmark }; - +use sp1_core::utils; use std::process; fn main() { @@ -28,6 +28,9 @@ fn main() { let bench_type = &args[1]; let size = args[2].parse::().unwrap(); + // Setup a tracer for logging. + utils::setup_logger(); + match bench_type.as_str() { "sha256" => { diff --git a/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf index d5f80e9ab85b37b6d884dabd77169d6b5d96de86..3e19cb15ad5e1944444886d8de7e39fb22becb0a 100755 GIT binary patch delta 23965 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 b9HCpA$OYU|EAY=UKiP(Zf?BYnm&^YFwuMUD delta 24448 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 Date: Mon, 18 Mar 2024 11:48:14 +0530 Subject: [PATCH 29/31] readme and .cfg files added --- hash/sp1/bench/README.md | 10 ++++++++++ hash/sp1/bench/bench.cfg | 11 +++++++++++ hash/sp1/bench/bench_tree.cfg | 10 ++++++++++ hash/sp1/bench/run_tree.sh | 2 +- .../sha256/elf/riscv32im-succinct-zkvm-elf | Bin 113712 -> 113704 bytes 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 hash/sp1/bench/README.md create mode 100644 hash/sp1/bench/bench.cfg create mode 100644 hash/sp1/bench/bench_tree.cfg diff --git a/hash/sp1/bench/README.md b/hash/sp1/bench/README.md new file mode 100644 index 0000000..55f09f8 --- /dev/null +++ b/hash/sp1/bench/README.md @@ -0,0 +1,10 @@ +Benchmarking inside sp1 ZKVM +-------------------------------- + +- The `sp1/benches` contains the following hash `program`(the source code that will be proven inside the zkVM): sha256, keccak, blake2, blake3, and poseidon2 ober BN256. +- `script` folder contains the benchmarking code that contains proof generation and verification code for each hash program. +- The `build.sh` script builds the whole code. +- `run.sh` and `run_tree.sh` runs the benchmark. (`run.sh` for sha256, keccak, blake2, blake3 and `run_tree.sh` for poseidon2 over BN256) +- Benchmarks can be parameterized using environment variables. By convention, we start the names of these environment variables with the `ZKBENCH_` prefix. +- By default the `run.sh` will run the sha256 benchmark over 1KB of data. other hashes can be run by settig the environment variables accordingly. +- Additional files `bench.cfg` and `bench_tree.cfg` specifies the configurations and parameters. diff --git a/hash/sp1/bench/bench.cfg b/hash/sp1/bench/bench.cfg new file mode 100644 index 0000000..0aa0b9d --- /dev/null +++ b/hash/sp1/bench/bench.cfg @@ -0,0 +1,11 @@ +name: "Hashes benchmarking using sp1 prover" +author: +timeout: 200 +params: + [ HASH_TYPE: [ "sha256", "keccak", "blake2", "blake3"] + , INPUT_SIZE_BYTES: [ 256, 512, 1024, 2048 ] + ] +tags: sp1, $HASH_TYPE + +comments: + The benchmarks includes for sha256, keccak, blake2, blake3 using sp1. diff --git a/hash/sp1/bench/bench_tree.cfg b/hash/sp1/bench/bench_tree.cfg new file mode 100644 index 0000000..c09e4bc --- /dev/null +++ b/hash/sp1/bench/bench_tree.cfg @@ -0,0 +1,10 @@ +name: "Hashes benchmarking using sp1 prover" +author: +timeout: 500 +params: + [ HASH_TYPE_TREE: [ "poseidon2"] + , TREE_DEPTH: [ 2, 4, 8, 16 ] + ] +tags: sp1, $HASH_TYPE_TREE +comments: + The benchmarks includes for poseidon2(merkle hashing) over BN256. \ No newline at end of file diff --git a/hash/sp1/bench/run_tree.sh b/hash/sp1/bench/run_tree.sh index 094983c..c8db6c6 100755 --- a/hash/sp1/bench/run_tree.sh +++ b/hash/sp1/bench/run_tree.sh @@ -13,4 +13,4 @@ echo "HASH = $ZKBENCH_HASH_TYPE_TREE" echo "Tree Depth = $ZKBENCH_TREE_DEPTH" # Run the benchmarks -./target/release/bench-script $ZKBENCH_HASH_TYPE_TREE $ZKBENCH_TREE_DEPTH \ No newline at end of file +RUST_LOG=info ./target/release/bench-script $ZKBENCH_HASH_TYPE_TREE $ZKBENCH_TREE_DEPTH \ No newline at end of file diff --git a/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf index 3e19cb15ad5e1944444886d8de7e39fb22becb0a..5c22e41a4268a0dd74ded1017877f1e2ba03a8c8 100755 GIT binary patch delta 7447 zcmbuDdvp}l9mjunLl88=CPDE5G89Ct5azivQ_%nlMCC0ADs3{e4}v5R0VM@=KoI32 z1Q!`pXtCv-0^*T2v=NGeiY--XbE>WO6e+FLqerc%v|@$Q@14E7vjlRIp3Xn)=l&k| zcYlvN6Ly~Lxbq<^}t zoSkU=eB0fcH)agcy3P`fVnmS$qf5pS^>{&|A|hgu2u%Vfz)`_}1|PjJBj@@H#uI%4 zmLcc-{sh=x6!KS-Ab|aq!rr`ts6Y7n45#0C?{ZJV?+7tk7$I6(B2k^-1K?x3#oo~P z47>~6ncIS|C?I+fe39Vc;DdSkb>MgN^q&Twfd4At|9xQ8XhZM? zf!vGGFf44$Q&*We&EBs?TY$5f?>3X@ zINa*O?f3;mLmFVO4 zpx|tJu1%jl;q_isg^3#(PSl^k%@rYcPH+0>Am=fcXex%FQ{cP<9ZR5=@Ri{RU6Vv9 z!2IFOGaY;q%mnWM4}L9dwyMRL7RV(b|8e8Me|cyX>NP&*)uuTBx|L$o8nJlbk-r(cJ;d=_lw@jt** zp`WddJPk<#^M~8d25$k2!T0FpCFsmtaSN$*DUo!$L=`aL>6rX57y)$<{Ox5Jd~BHA zpccFZoV`hQg87DB#D-sh6X0^e`XjhHq2DXu(g@ANLIoCj3WYuC=T5Ehc1^>%CS`hr zhw&ebdr=-&VGaj?d4F^Hq~%2N!Ejq2yaUJLVe^ao82CoWd6jq``mG>Z1kQ$C4NieC z%g7sldD>y#S7`jbccLTFazPLXs`-v^(?!)p(cgr*cm;eI^6XS@M(b?^>mtbhcrEmp z8v5G}UidwUaJInz2k7u)l{r>PLyMotQ<#S0ES!vMLIl(Vt_cmOOZw26%Hl8Z(wbT& z-qXm9^79+m^AYx(|7nE%Zs?wsMBS!`Gk(D;WV$+J2Yejzy&|Y1;Jr8`e|YA4HJvVC zYnW2?7}3_(B|0e9p8;gc{gg(ez>=+ZP#s_ZlL7X4p{WYmvk^bD5{* zkE7Cguc9}=H$h$~{2WaaO<9uJhZkkGf2b21)O+6(NJXBT$ahQ-0)osng$lJu?6184Y(rLWIBZhy%>kKe;+32Rj>s{G=W_q4t--Dj|7+J z@oJoQ$5Y{LGWcP`X-85u|LdD7o4-`t#F%h;8QTmHpRthqA289uJ)gcqM2UuZzyKZJKLYe zP;N&5i=uoDp8rRQ#)+T@Z^TCdxEJI+yB_$XcO)7l_!aO*c%PEZ;wFp__<-OFe{>0U zd)0rhgq5?EO+8Cld4YFiG(NVj%vhD60&k4L0Q8cm8djX=kHx^ukVq2zGw|T6GEs5) zdW3fnwaDuC8INx(3~48!|0;OL%FGLg>t8(q0|kGZGjflXVqt1cZh@}59Zi;J&;ULK zIZhV@^aXfBZO9WR5_M|GT-khs#o)sTkiVfg?*s3+RHBo@{#W2F-6bkQx0H~_=nxjB zND{p%6#fHVm3PAUBm{tws~7V6JMgvn0J<-5!009Ly7^M@%H$gsPR58YL~ z`-mId3O?XVv`)w$1#iU(vQ2jgydOO?K*;6qo*hsFI6t7{oPz+o%!bPMkO2gctmFo4lW399KLNg3#~*Bh=g&ZofGcpt@r?Zf-1kw5 zJ{10{pm@@hXra)b0j|RVydGlV11uaHfj_kc51WGsZG5APnopXCfEI))Zw61wP&AgVyd>V&)xc0Tz`*ki9O!aeeUvQm*4I-e&8xRntD4X%IX=Hf7 zVu^N%6zxTO&wU&x78~@%Ywpy#@Me6}KYb0Yn(Mf#t0|T(o3^bD50*XMa#T%ES+Z>#F(nqu)zorLM@!nWW}CJtJ6g<5 z##F^I$phJl(|*+aFhnmbiX)#>ND&E=}4?zyVDUTIs^432xf?xG!aH)iOvmQw7n zh1>LC`1KN788vlHj%ki!B~!74YPf#$R@TQ;70tF4D`6#d*)%nqXYtmFwckUxBdLnN z<{H-BY`Gd71Xn3CQ#U&qpH*8oy(T%QtfiX&UaQ7>o5oGo^=C&qc)F{`(HEp8@EH5D6PR#Ss6Q#D+MmK~Ed zlv~qHQ}J)ThgC*xSxqXAZYLepcFmOQ@4kmg(UfVbPC}DYF-MbeW`4JJ^SeI4u8q2C zLU)o%!o>yaTBhp9X0RVd4KwD%Ek#bLmhL31xc~PVY^9fQ^`s%Aw_PVLE4DG5+V_!S zw-$3d?G+_(Pe{a154e}Di<+vDGIY&U z6G*&csDAUkY^kSNF5cit%Sqa%8gnpt?MsRE|E5F^99({$lu+eeV|3ZyH;+mFU)Hcf zzxj4{p}%1co9a(`mX-QvX0vMl4_jGRzhEwFil&S>t_>AmooZZ3BsBl!I`qbox$Ii6 ztt$bSbLJQpF1MI2tEyoex*9WOOUvY;Z4YYe9{gqZvBB53?IP11W#hVu%Od?7{P2KD8m6 delta 7467 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 odNME=pGzVPR Date: Mon, 18 Mar 2024 11:52:16 +0530 Subject: [PATCH 30/31] risc0 benchmark and plonky2 benchmark removed from sp1 branch --- hash/plonky2/Cargo.toml | 17 - hash/plonky2/src/bench/keccak.rs | 25 - hash/plonky2/src/bench/poseidon.rs | 64 - hash/plonky2/src/bench/sha256/ch.rs | 29 - hash/plonky2/src/bench/sha256/constants.rs | 24 - hash/plonky2/src/bench/sha256/maj.rs | 32 - hash/plonky2/src/bench/sha256/rotate.rs | 11 - hash/plonky2/src/bench/sha256/sha.rs | 241 -- hash/plonky2/src/bench/sha256/shift.rs | 12 - hash/plonky2/src/bench/sha256/sigma.rs | 115 - hash/plonky2/src/bench/sha256/xor3.rs | 26 - hash/plonky2/src/main.rs | 60 - hash/risc0/README.md | 7 - hash/risc0/bench/.vscode/settings.json | 5 - hash/risc0/bench/Cargo.toml | 16 - hash/risc0/bench/LICENSE | 201 -- hash/risc0/bench/README.md | 12 - hash/risc0/bench/bench.cfg | 11 - hash/risc0/bench/bench_tree.cfg | 11 - hash/risc0/bench/build.sh | 3 - hash/risc0/bench/methods/Cargo.toml | 10 - hash/risc0/bench/methods/build.rs | 3 - hash/risc0/bench/methods/guest/Cargo.toml | 21 - .../bench/methods/guest/src/bin/blake2b.rs | 15 - .../bench/methods/guest/src/bin/blake3.rs | 15 - .../bench/methods/guest/src/bin/keccak.rs | 15 - .../guest/src/bin/poseidon2_babybear.rs | 135 - .../src/bin/poseidon2_babybear_native.rs | 1762 ----------- .../methods/guest/src/bin/poseidon2_bn128.rs | 43 - .../bench/methods/guest/src/bin/sha256.rs | 14 - .../guest/src/bin/sha256_accelerated.rs | 21 - hash/risc0/bench/methods/src/lib.rs | 1 - hash/risc0/bench/run.sh | 15 - hash/risc0/bench/run_tree.sh | 15 - hash/risc0/bench/rust-toolchain.toml | 4 - hash/risc0/bench/src/benches/blake2b.rs | 32 - hash/risc0/bench/src/benches/blake3.rs | 34 - hash/risc0/bench/src/benches/keccak.rs | 33 - hash/risc0/bench/src/benches/mod.rs | 8 - .../bench/src/benches/poseidon2_babybear.rs | 66 - .../src/benches/poseidon2_babybear_native.rs | 47 - .../bench/src/benches/poseidon2_bn128.rs | 48 - hash/risc0/bench/src/benches/sha256.rs | 32 - .../bench/src/benches/sha256_accelerated.rs | 30 - hash/risc0/bench/src/main.rs | 95 - hash/risc0/composition/Cargo.lock | 2795 ----------------- hash/risc0/composition/Cargo.toml | 16 - hash/risc0/composition/build.sh | 1 - hash/risc0/composition/methods/Cargo.toml | 10 - hash/risc0/composition/methods/build.rs | 17 - .../composition/methods/guest/Cargo.lock | 1100 ------- .../composition/methods/guest/Cargo.toml | 11 - .../composition/methods/guest/src/main.rs | 31 - hash/risc0/composition/methods/src/lib.rs | 15 - hash/risc0/composition/run.sh | 1 - hash/risc0/composition/src/main.rs | 65 - hash/risc0/external/risc0 | 1 - hash/risc0/inner_proof/Cargo.lock | 2778 ---------------- hash/risc0/inner_proof/Cargo.toml | 17 - hash/risc0/inner_proof/methods/Cargo.toml | 10 - hash/risc0/inner_proof/methods/build.rs | 3 - .../inner_proof/methods/guest/Cargo.lock | 791 ----- .../inner_proof/methods/guest/Cargo.toml | 9 - .../inner_proof/methods/guest/src/main.rs | 13 - hash/risc0/inner_proof/methods/src/lib.rs | 1 - hash/risc0/inner_proof/src/lib.rs | 42 - hash/risc0/inner_proof/src/main.rs | 36 - 67 files changed, 11199 deletions(-) delete mode 100644 hash/plonky2/Cargo.toml delete mode 100644 hash/plonky2/src/bench/keccak.rs delete mode 100644 hash/plonky2/src/bench/poseidon.rs delete mode 100644 hash/plonky2/src/bench/sha256/ch.rs delete mode 100644 hash/plonky2/src/bench/sha256/constants.rs delete mode 100644 hash/plonky2/src/bench/sha256/maj.rs delete mode 100644 hash/plonky2/src/bench/sha256/rotate.rs delete mode 100644 hash/plonky2/src/bench/sha256/sha.rs delete mode 100644 hash/plonky2/src/bench/sha256/shift.rs delete mode 100644 hash/plonky2/src/bench/sha256/sigma.rs delete mode 100644 hash/plonky2/src/bench/sha256/xor3.rs delete mode 100644 hash/plonky2/src/main.rs delete mode 100644 hash/risc0/README.md delete mode 100644 hash/risc0/bench/.vscode/settings.json delete mode 100644 hash/risc0/bench/Cargo.toml delete mode 100644 hash/risc0/bench/LICENSE delete mode 100644 hash/risc0/bench/README.md delete mode 100644 hash/risc0/bench/bench.cfg delete mode 100644 hash/risc0/bench/bench_tree.cfg delete mode 100755 hash/risc0/bench/build.sh delete mode 100644 hash/risc0/bench/methods/Cargo.toml delete mode 100644 hash/risc0/bench/methods/build.rs delete mode 100644 hash/risc0/bench/methods/guest/Cargo.toml delete mode 100644 hash/risc0/bench/methods/guest/src/bin/blake2b.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/blake3.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/keccak.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/sha256.rs delete mode 100644 hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs delete mode 100644 hash/risc0/bench/methods/src/lib.rs delete mode 100755 hash/risc0/bench/run.sh delete mode 100755 hash/risc0/bench/run_tree.sh delete mode 100644 hash/risc0/bench/rust-toolchain.toml delete mode 100644 hash/risc0/bench/src/benches/blake2b.rs delete mode 100644 hash/risc0/bench/src/benches/blake3.rs delete mode 100644 hash/risc0/bench/src/benches/keccak.rs delete mode 100644 hash/risc0/bench/src/benches/mod.rs delete mode 100644 hash/risc0/bench/src/benches/poseidon2_babybear.rs delete mode 100644 hash/risc0/bench/src/benches/poseidon2_babybear_native.rs delete mode 100644 hash/risc0/bench/src/benches/poseidon2_bn128.rs delete mode 100644 hash/risc0/bench/src/benches/sha256.rs delete mode 100644 hash/risc0/bench/src/benches/sha256_accelerated.rs delete mode 100644 hash/risc0/bench/src/main.rs delete mode 100644 hash/risc0/composition/Cargo.lock delete mode 100644 hash/risc0/composition/Cargo.toml delete mode 100755 hash/risc0/composition/build.sh delete mode 100644 hash/risc0/composition/methods/Cargo.toml delete mode 100644 hash/risc0/composition/methods/build.rs delete mode 100644 hash/risc0/composition/methods/guest/Cargo.lock delete mode 100644 hash/risc0/composition/methods/guest/Cargo.toml delete mode 100644 hash/risc0/composition/methods/guest/src/main.rs delete mode 100644 hash/risc0/composition/methods/src/lib.rs delete mode 100755 hash/risc0/composition/run.sh delete mode 100644 hash/risc0/composition/src/main.rs delete mode 160000 hash/risc0/external/risc0 delete mode 100644 hash/risc0/inner_proof/Cargo.lock delete mode 100644 hash/risc0/inner_proof/Cargo.toml delete mode 100644 hash/risc0/inner_proof/methods/Cargo.toml delete mode 100644 hash/risc0/inner_proof/methods/build.rs delete mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.lock delete mode 100644 hash/risc0/inner_proof/methods/guest/Cargo.toml delete mode 100644 hash/risc0/inner_proof/methods/guest/src/main.rs delete mode 100644 hash/risc0/inner_proof/methods/src/lib.rs delete mode 100644 hash/risc0/inner_proof/src/lib.rs delete mode 100644 hash/risc0/inner_proof/src/main.rs diff --git a/hash/plonky2/Cargo.toml b/hash/plonky2/Cargo.toml deleted file mode 100644 index 615fea1..0000000 --- a/hash/plonky2/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "plonky2" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -plonky2_u32 ={ git = "https://github.com/0xPolygonZero/plonky2-u32"} -plonky2_field ={ git = "https://github.com/0xPolygonZero/plonky2"} -plonky2 = "0.1.4" -rand = "0.8.3" -anyhow = "1.0.79" -sha2 = "0.10" - - - diff --git a/hash/plonky2/src/bench/keccak.rs b/hash/plonky2/src/bench/keccak.rs deleted file mode 100644 index 785e853..0000000 --- a/hash/plonky2/src/bench/keccak.rs +++ /dev/null @@ -1,25 +0,0 @@ -// use anyhow::Result; -// use plonky2::field::types::Field; -// use plonky2::gates::poseidon::PoseidonGate; -// use plonky2::hash::hash_types::{HashOutTarget, RichField}; -// use plonky2::field::goldilocks_field::GoldilocksField; -// use plonky2::hash::keccak::{KeccakHash, KeccakPermutation}; -// use plonky2::hash::keccak; -// use plonky2::hash::keccak::KeccakHash; -// use plonky2::hash::poseidon::PoseidonHash; -// use plonky2::iop::witness::{PartialWitness, WitnessWrite}; -// use plonky2::plonk::circuit_builder::CircuitBuilder; -// use plonky2::plonk::circuit_data::CircuitConfig; -// use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, PoseidonGoldilocksConfig, KeccakGoldilocksConfig}; -// use rand::Rng; -// use plonky2::iop::target::Target; -// use plonky2::iop::target::BoolTarget; -// use plonky2::field::extension::Extendable; -// use std::marker::PhantomData; - - - -pub fn keccak_bench(size: usize) { - - -} diff --git a/hash/plonky2/src/bench/poseidon.rs b/hash/plonky2/src/bench/poseidon.rs deleted file mode 100644 index 706f040..0000000 --- a/hash/plonky2/src/bench/poseidon.rs +++ /dev/null @@ -1,64 +0,0 @@ -use anyhow::Result; -use plonky2::field::types::Field; -// use plonky2::hash::hash_types::{HashOutTarget, RichField}; -use plonky2::field::goldilocks_field::GoldilocksField; -// use plonky2::hash::keccak; -// use plonky2::hash::keccak::KeccakHash; -use plonky2::hash::poseidon::PoseidonHash; -use plonky2::iop::witness::{PartialWitness, WitnessWrite}; -use plonky2::plonk::circuit_builder::CircuitBuilder; -use plonky2::plonk::circuit_data::CircuitConfig; -use plonky2::plonk::config::{/*AlgebraicHasher,*/ GenericConfig, PoseidonGoldilocksConfig}; -use rand::Rng; - -fn generate_data(size: usize) -> Vec { - // let mut rng = rand::thread_rng(); - // (0..size).map(|_| rng.gen()).collect() - - let mut data: Vec = Vec::new(); - for _ in 0..(1< Result<()> { - - let data = generate_data(depth); - - const D: usize = 2; - type C = PoseidonGoldilocksConfig; - type F = >::F; - - let config = CircuitConfig::standard_recursion_config(); - let mut builder = CircuitBuilder::::new(config); - - // The arithmetic circuit. - let initial = builder.add_virtual_targets(data.len()); - - let hash = builder.hash_or_noop::(initial.clone()); - - // Public inputs are the initial value (provided below) and the result (which is generated). - builder.register_public_inputs(initial.clone().as_slice()); - builder.register_public_input(hash.elements[0]); - builder.register_public_input(hash.elements[1]); - builder.register_public_input(hash.elements[2]); - builder.register_public_input(hash.elements[3]); - - // Provide initial values. - let mut pw = PartialWitness::new(); - pw.set_target_arr(initial.as_slice(), data.as_slice()); - - - let data = builder.build::(); - let proof = data.prove(pw)?; - - - data.verify(proof) - -} diff --git a/hash/plonky2/src/bench/sha256/ch.rs b/hash/plonky2/src/bench/sha256/ch.rs deleted file mode 100644 index ce26f53..0000000 --- a/hash/plonky2/src/bench/sha256/ch.rs +++ /dev/null @@ -1,29 +0,0 @@ -// use plonky2::{hash::hash_types::HashOutTarget, iop::target::Target, iop::target::BoolTarget}; -use plonky2::iop::target::BoolTarget; - -use plonky2::hash::hash_types::RichField; -use plonky2::plonk::circuit_builder::CircuitBuilder; -// use plonky2_field::extension; -use plonky2::field::extension::Extendable; -use plonky2_u32::gadgets::arithmetic_u32::U32Target; -use super::sigma::bits_to_u32_target; -use super::sigma::u32_to_bits_target; - -pub fn ch, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, - b: &U32Target, - c: &U32Target, -) -> U32Target { - let a_bits = u32_to_bits_target::(builder, a); - let b_bits = u32_to_bits_target::(builder, b); - let c_bits = u32_to_bits_target::(builder, c); - let mut res_bits = Vec::new(); - for i in 0..32 { - let b_sub_c = builder.sub(b_bits[i].target, c_bits[i].target); - let a_mul_b_sub_c = builder.mul(a_bits[i].target, b_sub_c); - let a_mul_b_sub_c_add_c = builder.add(a_mul_b_sub_c, c_bits[i].target); - res_bits.push(BoolTarget::new_unsafe(a_mul_b_sub_c_add_c)); - } - bits_to_u32_target(builder, res_bits) -} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/constants.rs b/hash/plonky2/src/bench/sha256/constants.rs deleted file mode 100644 index e652bff..0000000 --- a/hash/plonky2/src/bench/sha256/constants.rs +++ /dev/null @@ -1,24 +0,0 @@ - -pub const H: [u32; 8] = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 -]; - -pub const K: [u32; 64] = [ - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 -]; \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/maj.rs b/hash/plonky2/src/bench/sha256/maj.rs deleted file mode 100644 index 6876f4e..0000000 --- a/hash/plonky2/src/bench/sha256/maj.rs +++ /dev/null @@ -1,32 +0,0 @@ -use plonky2::iop::target::BoolTarget; -use plonky2::hash::hash_types::RichField; -use plonky2::plonk::circuit_builder::CircuitBuilder; -use plonky2::field::extension::Extendable; -use plonky2_u32::gadgets::arithmetic_u32::U32Target; - -use super::sigma::u32_to_bits_target; -use super::sigma::bits_to_u32_target; - -pub fn maj, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, - b: &U32Target, - c: &U32Target, -) -> U32Target { - let a_bits = u32_to_bits_target::(builder, a); - let b_bits = u32_to_bits_target::(builder, b); - let c_bits = u32_to_bits_target::(builder, c); - let mut res_bits = Vec::new(); - for i in 0..32 { - let m = builder.mul(b_bits[i].target, c_bits[i].target); - let two = builder.two(); - let two_m = builder.mul(two, m); - let b_add_c = builder.add(b_bits[i].target, c_bits[i].target); - let b_add_c_sub_two_m = builder.sub(b_add_c, two_m); - let a_mul_b_add_c_sub_two_m = builder.mul(a_bits[i].target, b_add_c_sub_two_m); - let res = builder.add(a_mul_b_add_c_sub_two_m, m); - - res_bits.push(BoolTarget::new_unsafe(res)); - } - bits_to_u32_target(builder, res_bits) -} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/rotate.rs b/hash/plonky2/src/bench/sha256/rotate.rs deleted file mode 100644 index fec8361..0000000 --- a/hash/plonky2/src/bench/sha256/rotate.rs +++ /dev/null @@ -1,11 +0,0 @@ -// define ROTATE(x, y) (((x)>>(y)) | ((x)<<(32-(y)))) -pub fn rotate32(y: usize) -> Vec { - let mut res = Vec::new(); - for i in 32 - y..32 { - res.push(i); - } - for i in 0..32 - y { - res.push(i); - } - res -} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/sha.rs b/hash/plonky2/src/bench/sha256/sha.rs deleted file mode 100644 index 7d092e9..0000000 --- a/hash/plonky2/src/bench/sha256/sha.rs +++ /dev/null @@ -1,241 +0,0 @@ -use plonky2::iop::target::BoolTarget; -use plonky2::hash::hash_types::RichField; -use plonky2::iop::target::Target; -use plonky2::plonk::circuit_builder::CircuitBuilder; -use plonky2::field::extension::Extendable; -use plonky2_u32::gadgets::arithmetic_u32::{CircuitBuilderU32, U32Target}; -use anyhow::Result; -use plonky2::plonk::config::PoseidonGoldilocksConfig; -use plonky2::plonk::config::GenericConfig; -use plonky2::plonk::circuit_data::CircuitConfig; -use plonky2::iop::witness::{PartialWitness, WitnessWrite}; -// use rand::Rng; -use sha2::{Digest, Sha256}; -use super::sigma::big_sigma0; -use super::sigma::big_sigma1; -use super::sigma::sigma0; -use super::sigma::sigma1; -use super::maj::maj; -use super::constants::*; -use super::ch::ch; - -fn add_u32, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, - b: &U32Target, -) -> U32Target { - let (res, _carry) = builder.add_u32(*a, *b); - res -} - -pub struct Sha256Targets { - pub message: Vec, - pub digest: Vec, -} - -pub fn array_to_bits(bytes: &[u8]) -> Vec { - let len = bytes.len(); - let mut ret = Vec::new(); - for i in 0..len { - for j in 0..8 { - let b = (bytes[i] >> (7 - j)) & 1; - ret.push(b == 1); - } - } - ret -} - - -pub fn make_circuits, const D: usize>( - builder: &mut CircuitBuilder, - msg_len_in_bits: u64, - -) -> Sha256Targets { - - - let mut message = Vec::new(); - let mut digest = Vec::new(); - - let block_count = (msg_len_in_bits + 65 + 511) / 512; - let padded_msg_len = 512 * block_count; - let p = padded_msg_len - 64 - msg_len_in_bits; - assert!(p > 1); - - //msg - for _ in 0..msg_len_in_bits { - message.push(builder.add_virtual_bool_target_unsafe()); - } - - //append a single bit '1' - message.push(builder.constant_bool(true)); - - //append '0' bit so that total length become multiple of 512 - for _ in 0..p - 1 { - message.push(builder.constant_bool(false)); - } - - //append the msg length as 64bit big-endian integer - for i in 0..64 { - let b = ((msg_len_in_bits as u64) >> (63 - i)) & 1; - message.push(builder.constant_bool(b == 1)); - } - - // init states - let mut state = Vec::new(); - for i in 0..8 { - state.push(builder.constant_u32(H[i])); - } - - let mut k256 = Vec::new(); - for i in 0..64 { - k256.push(builder.constant_u32(K[i])); - } - - for blk in 0..block_count { - let mut x = Vec::new(); - let mut a = state[0].clone(); - let mut b = state[1].clone(); - let mut c = state[2].clone(); - let mut d = state[3].clone(); - let mut e = state[4].clone(); - let mut f = state[5].clone(); - let mut g = state[6].clone(); - let mut h = state[7].clone(); - - for i in 0..16 { - let index = blk as usize * 512 + i * 32; - let u32_target = builder.le_sum(message[index..index + 32].iter().rev()); - - x.push(U32Target(u32_target)); - let mut t1 = h.clone(); - let big_sigma1_e = big_sigma1(builder, &e); - t1 = add_u32(builder, &t1, &big_sigma1_e); - let ch_e_f_g = ch(builder, &e, &f, &g); - t1 = add_u32(builder, &t1, &ch_e_f_g); - t1 = add_u32(builder, &t1, &k256[i]); - t1 = add_u32(builder, &t1, &x[i]); - - let mut t2 = big_sigma0(builder, &a); - let maj_a_b_c = maj(builder, &a, &b, &c); - t2 = add_u32(builder, &t2, &maj_a_b_c); - - h = g; - g = f; - f = e; - e = add_u32(builder, &d, &t1); - d = c; - c = b; - b = a; - a = add_u32(builder, &t1, &t2); - } - - for i in 16..64 { - let s0 = sigma0(builder, &x[(i + 1) & 0x0f]); - let s1 = sigma1(builder, &x[(i + 14) & 0x0f]); - - let s0_add_s1 = add_u32(builder, &s0, &s1); - let s0_add_s1_add_x = add_u32(builder, &s0_add_s1, &x[(i + 9) & 0xf]); - x[i & 0xf] = add_u32(builder, &x[i & 0xf], &s0_add_s1_add_x); - - let big_sigma0_a = big_sigma0(builder, &a); - let big_sigma1_e = big_sigma1(builder, &e); - let ch_e_f_g = ch(builder, &e, &f, &g); - let maj_a_b_c = maj(builder, &a, &b, &c); - - let h_add_sigma1 = add_u32(builder, &h, &big_sigma1_e); - let h_add_sigma1_add_ch_e_f_g = add_u32(builder, &h_add_sigma1, &ch_e_f_g); - let h_add_sigma1_add_ch_e_f_g_add_k256 = - add_u32(builder, &h_add_sigma1_add_ch_e_f_g, &k256[i]); - - let t1 = add_u32(builder, &x[i & 0xf], &h_add_sigma1_add_ch_e_f_g_add_k256); - let t2 = add_u32(builder, &big_sigma0_a, &maj_a_b_c); - - h = g; - g = f; - f = e; - e = add_u32(builder, &d, &t1); - d = c; - c = b; - b = a; - a = add_u32(builder, &t1, &t2); - } - - state[0] = add_u32(builder, &state[0], &a); - state[1] = add_u32(builder, &state[1], &b); - state[2] = add_u32(builder, &state[2], &c); - state[3] = add_u32(builder, &state[3], &d); - state[4] = add_u32(builder, &state[4], &e); - state[5] = add_u32(builder, &state[5], &f); - state[6] = add_u32(builder, &state[6], &g); - state[7] = add_u32(builder, &state[7], &h); - } - - for i in 0..8 { - let bit_targets = builder.split_le_base::<2>(state[i].0, 32); - for j in (0..32).rev() { - digest.push(BoolTarget::new_unsafe(bit_targets[j])); - } - } - - Sha256Targets { message, digest } -} - - -fn generate_random_bytes() -> Vec { - const MSG_SIZE: usize = 64; - let mut msg = vec![0; MSG_SIZE as usize]; - for i in 0..MSG_SIZE - 1 { - msg[i] = i as u8; - } - - msg - -} - -pub fn sha256_bench() -> Result<()> { - let msg = generate_random_bytes(); - - let mut hasher = Sha256::new(); - hasher.update(msg.clone()); - let hash = hasher.finalize(); - // println!("Hash: {:#04X}", hash); - - let msg_bits = array_to_bits(&msg.clone()); - let len = msg.len() * 8; - println!("block count: {}", (len + 65 + 511) / 512); - const D: usize = 2; - type C = PoseidonGoldilocksConfig; - type F = >::F; - let mut builder = CircuitBuilder::::new(CircuitConfig::standard_recursion_config()); - let targets = make_circuits(&mut builder, len as u64); - let mut pw = PartialWitness::new(); - - for i in 0..len { - pw.set_bool_target(targets.message[i], msg_bits[i]); - } - - let expected_res = array_to_bits(hash.as_slice()); - for i in 0..expected_res.len() { - if expected_res[i] { - builder.assert_one(targets.digest[i].target); - } else { - builder.assert_zero(targets.digest[i].target); - } - } - - println!( - "Constructing inner proof with {} gates", - builder.num_gates() - ); - let data = builder.build::(); - // let timing = TimingTree::new("prove", Level::Debug); - let proof = data.prove(pw).unwrap(); - // timing.print(); - - // let timing = TimingTree::new("verify", Level::Debug); - let res = data.verify(proof); - // timing.print(); - - res - -} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/shift.rs b/hash/plonky2/src/bench/sha256/shift.rs deleted file mode 100644 index a52d4e2..0000000 --- a/hash/plonky2/src/bench/sha256/shift.rs +++ /dev/null @@ -1,12 +0,0 @@ -// x>>y -// Assume: 0 at index 32 -pub fn shift32(y: usize) -> Vec { - let mut res = Vec::new(); - for _ in 32 - y..32 { - res.push(32); - } - for i in 0..32 - y { - res.push(i); - } - res -} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/sigma.rs b/hash/plonky2/src/bench/sha256/sigma.rs deleted file mode 100644 index 6a16c9c..0000000 --- a/hash/plonky2/src/bench/sha256/sigma.rs +++ /dev/null @@ -1,115 +0,0 @@ -// use plonky2::{hash::hash_types::HashOutTarget, iop::target::Target, iop::target::BoolTarget}; -use plonky2::iop::target::BoolTarget; - -use plonky2::hash::hash_types::RichField; -use plonky2::plonk::circuit_builder::CircuitBuilder; -// use plonky2_field::extension; -use plonky2::field::extension::Extendable; -use plonky2_u32::gadgets::arithmetic_u32::U32Target; -use super::shift::shift32; -use super::rotate::rotate32; -use super::xor3::xor3; - -pub fn u32_to_bits_target, const D: usize, const B: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, -) -> Vec { - let mut res = Vec::new(); - let bit_targets = builder.split_le_base::(a.0, 32); - for i in (0..32).rev() { - res.push(BoolTarget::new_unsafe(bit_targets[i])); - } - res -} - -pub fn bits_to_u32_target, const D: usize>( - builder: &mut CircuitBuilder, - bits_target: Vec, -) -> U32Target { - let bit_len = bits_target.len(); - assert_eq!(bit_len, 32); - U32Target(builder.le_sum(bits_target[0..32].iter().rev())) -} - -pub fn sigma0, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, -) -> U32Target { - let mut a_bits = u32_to_bits_target::(builder, a); - a_bits.push(builder.constant_bool(false)); - let rotate7 = rotate32(7); - let rotate18 = rotate32(18); - let shift3 = shift32(3); - let mut res_bits = Vec::new(); - for i in 0..32 { - res_bits.push(xor3( - builder, - a_bits[rotate7[i]], - a_bits[rotate18[i]], - a_bits[shift3[i]], - )); - } - bits_to_u32_target(builder, res_bits) -} - -pub fn sigma1, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, -) -> U32Target { - let mut a_bits = u32_to_bits_target::(builder, a); - a_bits.push(builder.constant_bool(false)); - let rotate17 = rotate32(17); - let rotate19 = rotate32(19); - let shift10 = shift32(10); - let mut res_bits = Vec::new(); - for i in 0..32 { - res_bits.push(xor3( - builder, - a_bits[rotate17[i]], - a_bits[rotate19[i]], - a_bits[shift10[i]], - )); - } - bits_to_u32_target(builder, res_bits) -} - -//#define Sigma0(x) (ROTATE((x), 2) ^ ROTATE((x),13) ^ ROTATE((x),22)) -pub fn big_sigma0, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, -) -> U32Target { - let a_bits = u32_to_bits_target::(builder, a); - let rotate2 = rotate32(2); - let rotate13 = rotate32(13); - let rotate22 = rotate32(22); - let mut res_bits = Vec::new(); - for i in 0..32 { - res_bits.push(xor3( - builder, - a_bits[rotate2[i]], - a_bits[rotate13[i]], - a_bits[rotate22[i]], - )); - } - bits_to_u32_target(builder, res_bits) -} - -pub fn big_sigma1, const D: usize>( - builder: &mut CircuitBuilder, - a: &U32Target, -) -> U32Target { - let a_bits = u32_to_bits_target::(builder, a); - let rotate6 = rotate32(6); - let rotate11 = rotate32(11); - let rotate25 = rotate32(25); - let mut res_bits = Vec::new(); - for i in 0..32 { - res_bits.push(xor3( - builder, - a_bits[rotate6[i]], - a_bits[rotate11[i]], - a_bits[rotate25[i]], - )); - } - bits_to_u32_target(builder, res_bits) -} \ No newline at end of file diff --git a/hash/plonky2/src/bench/sha256/xor3.rs b/hash/plonky2/src/bench/sha256/xor3.rs deleted file mode 100644 index 4a176ac..0000000 --- a/hash/plonky2/src/bench/sha256/xor3.rs +++ /dev/null @@ -1,26 +0,0 @@ -use plonky2::iop::target::BoolTarget; -use plonky2::hash::hash_types::RichField; -use plonky2::plonk::circuit_builder::CircuitBuilder; -use plonky2::field::extension::Extendable; - -pub fn xor3, const D: usize>( - builder: &mut CircuitBuilder, - a: BoolTarget, - b: BoolTarget, - c: BoolTarget, -) -> BoolTarget { - let m = builder.mul(b.target, c.target); - let two_b = builder.add(b.target, b.target); - let two_c = builder.add(c.target, c.target); - let two_m = builder.add(m, m); - let four_m = builder.add(two_m, two_m); - let one = builder.one(); - let one_sub_two_b = builder.sub(one, two_b); - let one_sub_two_b_sub_two_c = builder.sub(one_sub_two_b, two_c); - let one_sub_two_b_sub_two_c_add_four_m = builder.add(one_sub_two_b_sub_two_c, four_m); - let mut res = builder.mul(a.target, one_sub_two_b_sub_two_c_add_four_m); - res = builder.add(res, b.target); - res = builder.add(res, c.target); - - BoolTarget::new_unsafe(builder.sub(res, two_m)) -} \ No newline at end of file diff --git a/hash/plonky2/src/main.rs b/hash/plonky2/src/main.rs deleted file mode 100644 index 0eaa9fb..0000000 --- a/hash/plonky2/src/main.rs +++ /dev/null @@ -1,60 +0,0 @@ -use std::process; -mod bench{ - pub mod keccak; - pub mod poseidon; - pub mod sha256{ - pub mod constants; - pub mod shift; - pub mod rotate; - pub mod sigma; - pub mod sha; - pub mod xor3; - pub mod maj; - pub mod ch; - - } -} - -use bench::poseidon::poseidon_bench; -use bench::keccak::keccak_bench; -use bench::sha256::sha::sha256_bench; - -fn main() { - let args: Vec = std::env::args().collect(); - - if args.len() != 3 { - println!("Wrong number of arguments! The program expects two arguments: and "); - // Exit the program with a non-zero exit code - process::exit(1); - } - - let hash_type = &args[1]; - let size = args[2].parse::().unwrap(); - - match hash_type.as_str() { - - "poseidon" => { - println!("Running Poseidon: "); - eprintln!("Tree Depth: {:?}", size); - let _ = poseidon_bench(size); - } - - "keccak" => { - println!("Running keccak: "); - eprintln!("input size: {:?}", size); - let _ = keccak_bench(size); - } - - "sha256" => { - println!("Running sha256: "); - let _ = sha256_bench(); - } - - _ => { - println!("Wrong Benchmark Name!"); - } - } - - println!("All Done!"); - -} \ No newline at end of file diff --git a/hash/risc0/README.md b/hash/risc0/README.md deleted file mode 100644 index edaa9ab..0000000 --- a/hash/risc0/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Benchmarking inside risc'0 zkvm --------------------------------- - -- `external` folder contains risc0 as a git submodule. -- `bench` folder contains the benchmarking for different hash functions. Go to the `bench/README.md` for more details. -- `inner_proof` folder contains methods for generating the Receipt for sha256 which is being used as an inner proof in `composition` -- `composition` folder contains methods of proof composition which uses `inner_proof`. diff --git a/hash/risc0/bench/.vscode/settings.json b/hash/risc0/bench/.vscode/settings.json deleted file mode 100644 index 4545fa6..0000000 --- a/hash/risc0/bench/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rust-analyzer.linkedProjects": [ - "./methods/guest/Cargo.toml" - ] -} \ No newline at end of file diff --git a/hash/risc0/bench/Cargo.toml b/hash/risc0/bench/Cargo.toml deleted file mode 100644 index f4f93e0..0000000 --- a/hash/risc0/bench/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "benchmark" -version = "0.1.0" -edition = "2021" - -[dependencies] -risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } -serde = "1.0" -rand = "0.8.3" -sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } -benchmark_methods = { path = "methods" } -zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} -ark-ff = "0.4.2" -hex = "0.4.3" -ark-serialize = "0.4" -risc0-core = { path = "../external/risc0/risc0/core" } diff --git a/hash/risc0/bench/LICENSE b/hash/risc0/bench/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/hash/risc0/bench/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/hash/risc0/bench/README.md b/hash/risc0/bench/README.md deleted file mode 100644 index d0bf8ae..0000000 --- a/hash/risc0/bench/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Benchmarking different hashes inside risc'0 zkvm ------------------------------------------------ - -The benchmark is defined by the following shell scripts: - -- `build.sh` - build the code. - -- `run.sh` and `run2.sh` - run the benchmark itself (`run.sh` for sha256, keccak, blake2b, blake3 and `run2.sh` for poseidon2 over bn128 and babybear) - -Benchmarks can be parameterized using environment variables. By convention, we start the names of these environment variables with the `ZKBENCH_` prefix. - -Additional files `bench.cfg` and `bench_tree.cfg` specifies the configurations and parameters. diff --git a/hash/risc0/bench/bench.cfg b/hash/risc0/bench/bench.cfg deleted file mode 100644 index a5a366f..0000000 --- a/hash/risc0/bench/bench.cfg +++ /dev/null @@ -1,11 +0,0 @@ -name: "Hashes benchmarking using risc0 prover" -author: -timeout: 200 -params: - [ HASH_TYPE: [ "sha256", "keccak", "blake2b", "blake3"] - , INPUT_SIZE_BYTES: [ 256, 512, 1024, 2048 ] - ] -tags: risc0, $HASH_TYPE -comments: - The benchmarks includes for sha256, keccak, blake2b, blake3. - the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/bench_tree.cfg b/hash/risc0/bench/bench_tree.cfg deleted file mode 100644 index f6d767e..0000000 --- a/hash/risc0/bench/bench_tree.cfg +++ /dev/null @@ -1,11 +0,0 @@ -name: "Hashes benchmarking using risc0 prover" -author: -timeout: 1000 -params: - [ HASH_TYPE_TREE: [ "poseidon2_babybear", "poseidon2_babybear_native", "poseidon2_bn128"] - , TREE_DEPTH: [ 2, 4, 8, 16 ] - ] -tags: risc0, $HASH_TYPE_TREE -comments: - The benchmarks includes for poseidon2(merkle hashing) over bn128 and babybear. - the hashing is done inside the guest and receipt is received which is verified. diff --git a/hash/risc0/bench/build.sh b/hash/risc0/bench/build.sh deleted file mode 100755 index 0dfa161..0000000 --- a/hash/risc0/bench/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - - cargo build --release diff --git a/hash/risc0/bench/methods/Cargo.toml b/hash/risc0/bench/methods/Cargo.toml deleted file mode 100644 index f391ce6..0000000 --- a/hash/risc0/bench/methods/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "benchmark_methods" -version = "0.1.0" -edition = "2021" - -[build-dependencies] -risc0-build = { path = "../../external/risc0/risc0/build" } - -[package.metadata.risc0] -methods = ["guest"] diff --git a/hash/risc0/bench/methods/build.rs b/hash/risc0/bench/methods/build.rs deleted file mode 100644 index 08a8a4e..0000000 --- a/hash/risc0/bench/methods/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - risc0_build::embed_methods(); -} diff --git a/hash/risc0/bench/methods/guest/Cargo.toml b/hash/risc0/bench/methods/guest/Cargo.toml deleted file mode 100644 index 6d495bb..0000000 --- a/hash/risc0/bench/methods/guest/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "method" -version = "0.1.0" -edition = "2021" - -[workspace] - -[dependencies] -# If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm -risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", default-features = false,features = ["std"] } -sha3 = "0.10.8" -sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } -risc0-zkp = {path = "../../../external/risc0/risc0/zkp"} -blake3 = "1.5.0" -zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"} -ark-serialize = "0.4" -ark-ff = "0.4.2" -risc0-core = {path = "../../../external/risc0/risc0/core"} -lazy_static = "1.4" -# risc0-zkp-core = "0.10.0" -rand = "0.8.5" \ No newline at end of file diff --git a/hash/risc0/bench/methods/guest/src/bin/blake2b.rs b/hash/risc0/bench/methods/guest/src/bin/blake2b.rs deleted file mode 100644 index 4d6c3e5..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/blake2b.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![no_main] - -use risc0_zkvm::{guest::env, sha::Digest}; -use risc0_zkp::core::hash::blake2b::{Blake2b, Blake2bCpuImpl}; - -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec = env::read(); - let hash = Blake2bCpuImpl::blake2b(&data); - let digest: Digest = hash.into(); - env::commit(&digest) - -} diff --git a/hash/risc0/bench/methods/guest/src/bin/blake3.rs b/hash/risc0/bench/methods/guest/src/bin/blake3.rs deleted file mode 100644 index fc78b7a..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/blake3.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![no_main] - -use risc0_zkvm::{guest::env, sha::Digest}; -use blake3::hash; - -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec = env::read(); - let result = hash(&data); - let digest = Digest::try_from(*result.as_bytes()).unwrap(); - env::commit(&digest) - -} diff --git a/hash/risc0/bench/methods/guest/src/bin/keccak.rs b/hash/risc0/bench/methods/guest/src/bin/keccak.rs deleted file mode 100644 index c28e7e0..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/keccak.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![no_main] - -use risc0_zkvm::{guest::env, sha::Digest}; -use sha3::{Digest as _, Keccak256}; - -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec = env::read(); - let hash: [u8;32] = Keccak256::digest(data).into(); - let digest = Digest::try_from(hash).unwrap(); - env::commit(&digest) - -} diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs deleted file mode 100644 index 3577d02..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear.rs +++ /dev/null @@ -1,135 +0,0 @@ -#![no_main] -#![allow(non_snake_case)] -use risc0_zkvm::guest::env; -use zkhash::poseidon2::poseidon2; -use zkhash::poseidon2::poseidon2::Poseidon2; -use zkhash::poseidon2::poseidon2_instance_babybear::{/*POSEIDON2_BABYBEAR_16_PARAMS , */POSEIDON2_BABYBEAR_24_PARAMS}; -use zkhash::fields::babybear::FpBabyBear; -use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; -use std::marker::PhantomData; -use risc0_zkvm::guest::env::cycle_count; - -use ark_ff::PrimeField; - -pub trait MerkleTreeHash { - fn compress(&self, input: &[&F]) -> Vec; -} - -#[derive(Clone, Debug)] -pub struct MerkleTree> { - perm: P, - field: PhantomData, -} - -impl> MerkleTree { - pub fn new(perm: P) -> Self { - MerkleTree { - perm, - field: PhantomData, - } - } - - fn round_up_pow_n(input: usize, n: usize) -> usize { - debug_assert!(n >= 1); - let mut res = 1; - // try powers, starting from n - loop { - res *= n; - if res >= input { - break; - } - } - res - } - - pub fn accumulate(&mut self, set: &[F]) -> Vec { - assert!(set.len()%8 == 0); - let set_size = set.len() / 8; - let mut bound = Self::round_up_pow_n(set_size, 2); - loop { - if bound >= 2 { - break; - } - bound *= 2; - } - let mut nodes: Vec = Vec::with_capacity(bound * 8); - for s in set { - nodes.push(s.to_owned()); - } - // pad - for _ in nodes.len()..bound { - nodes.push(nodes[set_size * 8 - 1].to_owned()); - } - - while nodes.len() > 8 { - let new_len = nodes.len() / 2; - let mut new_nodes: Vec = Vec::with_capacity(new_len); - for i in (0..nodes.len()).step_by(16) { - let inp = [ - &nodes[i], &nodes[i + 1], &nodes[i + 2], &nodes[i + 3], &nodes[i + 4], &nodes[i + 5], &nodes[i + 6], &nodes[i + 7], - &nodes[i + 8], &nodes[i + 9], &nodes[i + 10], &nodes[i + 11], &nodes[i + 12], &nodes[i + 13], &nodes[i + 14], &nodes[i + 15] - ]; - let dig = self.perm.compress(&inp); - - for j in 0..8 { - new_nodes.push(dig[j]); - } - - } - nodes = new_nodes; - } - vec![nodes[0].to_owned(), nodes[1].to_owned(), nodes[2].to_owned(), nodes[3].to_owned(), nodes[4].to_owned(), nodes[5].to_owned(), nodes[6].to_owned(), nodes[7].to_owned()] - } -} - -impl MerkleTreeHash for Poseidon2 { - fn compress(&self, input: &[&F]) -> Vec { - let p = self.permutation(&[ - input[0].to_owned(), input[1].to_owned(),input[2].to_owned(), input[3].to_owned(),input[4].to_owned(), input[5].to_owned(),input[6].to_owned(), input[7].to_owned(), - input[8].to_owned(), input[9].to_owned(),input[10].to_owned(), input[11].to_owned(),input[12].to_owned(), input[13].to_owned(),input[14].to_owned(), input[15].to_owned(), - F::zero(), F::zero(), F::zero(), F::zero(), F::zero(), F::zero(), F::zero(), F::zero() - ]); - - vec![p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]] - } -} - -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec> = env::read(); - - let cycles1 = cycle_count(); - let mut hash_data: Vec = Vec::new(); - for i in 0..data.len() { - let a_uncompressed = FpBabyBear::deserialize_uncompressed(&**data.get(i).unwrap()).unwrap(); - hash_data.push(a_uncompressed); - } - let cycles2 = cycle_count(); - - - let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); - let mut merkle_tree = MerkleTree::new(permutation.clone()); - let cycles3 = cycle_count(); - let hash_final = merkle_tree.accumulate(&hash_data); - - let cycles4 = cycle_count(); - - let mut perm_seralised: Vec> = Vec::new(); - for i in 0..8 { - let mut temp: Vec = Vec::new(); - hash_final.get(i).unwrap().serialize_uncompressed(&mut temp).unwrap(); - perm_seralised.push(temp); - } - let cycles6 = cycle_count(); - - env::commit(&perm_seralised); - - eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); - eprintln!("number of cycles for hash permutation builder: {:?}", cycles3 - cycles2); - eprintln!("number of cycles for hash accumulation: {:?}", cycles4 - cycles3); - - eprintln!("number of cycles for permutation seralisation: {:?}", cycles6 - cycles4); - -} diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs deleted file mode 100644 index 9b47b7b..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_babybear_native.rs +++ /dev/null @@ -1,1762 +0,0 @@ -#![no_main] -#![allow(non_snake_case)] -use risc0_core::field::baby_bear::BabyBearElem; -use risc0_zkvm::guest::env; -use std::marker::PhantomData; -use std::sync::Arc; -use risc0_core::field::Elem; -use lazy_static::lazy_static; -use risc0_zkvm::guest::env::cycle_count; - -// This code is adapted from https://github.com/HorizenLabs/poseidon2/tree/main -#[derive(Clone, Debug)] -pub struct Poseidon2Params { - pub(crate) t: usize, // statesize - pub(crate) d: usize, // sbox degree - pub(crate) rounds_f_beginning: usize, - pub(crate) rounds_p: usize, - #[allow(dead_code)] - pub(crate) rounds_f_end: usize, - pub(crate) rounds: usize, - pub(crate) mat_internal_diag_m_1: Vec, - pub(crate) _mat_internal: Vec>, - pub(crate) round_constants: Vec>, -} - -impl Poseidon2Params { - #[allow(clippy::too_many_arguments)] - - pub const INIT_SHAKE: &'static str = "Poseidon2"; - - pub fn new( - t: usize, - d: usize, - rounds_f: usize, - rounds_p: usize, - mat_internal_diag_m_1: &[F], - mat_internal: &[Vec], - round_constants: &[Vec], - ) -> Self { - assert!(d == 3 || d == 5 || d == 7 || d == 11); - assert_eq!(rounds_f % 2, 0); - let r = rounds_f / 2; - let rounds = rounds_f + rounds_p; - - Poseidon2Params { - t, - d, - rounds_f_beginning: r, - rounds_p, - rounds_f_end: r, - rounds, - mat_internal_diag_m_1: mat_internal_diag_m_1.to_owned(), - _mat_internal: mat_internal.to_owned(), - round_constants: round_constants.to_owned(), - } - } -} -#[derive(Clone, Debug)] -pub struct Poseidon2 { - pub(crate) params: Arc>, -} - -impl Poseidon2 { - pub fn new(params: &Arc>) -> Self { - Poseidon2 { - params: Arc::clone(params), - } - } - - pub fn get_t(&self) -> usize { - self.params.t - } - - pub fn permutation(&self, input: &[F]) -> Vec { - let t = self.params.t; - assert_eq!(input.len(), t); - - let mut current_state = input.to_owned(); - - // Linear layer at beginning - self.matmul_external(&mut current_state); - - for r in 0..self.params.rounds_f_beginning { - current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); - current_state = self.sbox(¤t_state); - self.matmul_external(&mut current_state); - } - - let p_end = self.params.rounds_f_beginning + self.params.rounds_p; - for r in self.params.rounds_f_beginning..p_end { - current_state[0].add_assign(self.params.round_constants[r][0]); - current_state[0] = self.sbox_p(¤t_state[0]); - self.matmul_internal(&mut current_state, &self.params.mat_internal_diag_m_1); - } - - for r in p_end..self.params.rounds { - current_state = self.add_rc(¤t_state, &self.params.round_constants[r]); - current_state = self.sbox(¤t_state); - self.matmul_external(&mut current_state); - } - current_state - } - - fn sbox(&self, input: &[F]) -> Vec { - input.iter().map(|el| self.sbox_p(el)).collect() - } - - fn sbox_p(&self, input: &F) -> F { - let mut input2 = *input; - input2.mul_assign(input2); - - match self.params.d { - 3 => { - let mut out = input2; - out.mul_assign(*input); - out - } - 5 => { - let mut out = input2; - out.mul_assign(out); - out.mul_assign(*input); - out - } - 7 => { - let mut out = input2; - out.mul_assign(out); - out.mul_assign(input2); - out.mul_assign(*input); - out - } - _ => { - panic!() - } - } - } - - fn matmul_m4(&self, input: &mut[F]) { - let t = self.params.t; - let t4 = t / 4; - for i in 0..t4 { - let start_index = i * 4; - let mut t_0 = input[start_index]; - t_0.add_assign(input[start_index + 1]); - let mut t_1 = input[start_index + 2]; - t_1.add_assign(input[start_index + 3]); - let mut t_2 = input[start_index + 1]; - t_2.add_assign(t_2); - t_2.add_assign(t_1); - let mut t_3 = input[start_index + 3]; - t_3.add_assign(t_3); - t_3.add_assign(t_0); - let mut t_4 = t_1; - t_4.add_assign(t_4); - t_4.add_assign(t_4); - t_4.add_assign(t_3); - let mut t_5 = t_0; - t_5.add_assign(t_5); - t_5.add_assign(t_5); - t_5.add_assign(t_2); - let mut t_6 = t_3; - t_6.add_assign(t_5); - let mut t_7 = t_2; - t_7.add_assign(t_4); - input[start_index] = t_6; - input[start_index + 1] = t_5; - input[start_index + 2] = t_7; - input[start_index + 3] = t_4; - } - } - - fn matmul_external(&self, input: &mut[F]) { - let t = self.params.t; - match t { - 2 => { - // Matrix circ(2, 1) - let mut sum = input[0]; - sum.add_assign(input[1]); - input[0].add_assign(sum); - input[1].add_assign(sum); - } - 3 => { - // Matrix circ(2, 1, 1) - let mut sum = input[0]; - sum.add_assign(input[1]); - sum.add_assign(input[2]); - input[0].add_assign(sum); - input[1].add_assign(sum); - input[2].add_assign(sum); - } - 4 => { - // Applying cheap 4x4 MDS matrix to each 4-element part of the state - self.matmul_m4(input); - } - 8 | 12 | 16 | 20 | 24 => { - // Applying cheap 4x4 MDS matrix to each 4-element part of the state - self.matmul_m4(input); - - // Applying second cheap matrix for t > 4 - let t4 = t / 4; - let mut stored = [F::ZERO; 4]; - for l in 0..4 { - stored[l] = input[l]; - for j in 1..t4 { - stored[l].add_assign(input[4 * j + l]); - } - } - for i in 0..input.len() { - input[i].add_assign(stored[i % 4]); - } - } - _ => { - panic!() - } - } - } - - fn matmul_internal(&self, input: &mut[F], mat_internal_diag_m_1: &[F]) { - let t = self.params.t; - - match t { - 2 => { - // [2, 1] - // [1, 3] - let mut sum = input[0]; - sum.add_assign(input[1]); - input[0].add_assign(sum); - input[1].add_assign(input[1]); - input[1].add_assign(sum); - } - 3 => { - // [2, 1, 1] - // [1, 2, 1] - // [1, 1, 3] - let mut sum = input[0]; - sum.add_assign(input[1]); - sum.add_assign(input[2]); - input[0].add_assign(sum); - input[1].add_assign(sum); - input[2].add_assign(input[2]); - input[2].add_assign(sum); - } - 4 | 8 | 12 | 16 | 20 | 24 => { - // Compute input sum - let mut sum = input[0]; - input - .iter() - .skip(1) - .take(t-1) - .for_each(|el| sum.add_assign(*el)); - // Add sum + diag entry * element to each element - for i in 0..input.len() { - input[i].mul_assign(mat_internal_diag_m_1[i]); - input[i].add_assign(sum); - } - } - _ => { - panic!() - } - } - } - - fn add_rc(&self, input: &[F], rc: &[F]) -> Vec { - input - .iter() - .zip(rc.iter()) - .map(|(a, b)| { - let mut r = *a; - r.add_assign(*b); - r - }) - .collect() - } -} - - -//merkle tree -pub trait MerkleTreeHash { - fn compress(&self, input: &[&F]) -> Vec; -} - -#[derive(Clone, Debug)] -pub struct MerkleTree> { - perm: P, - field: PhantomData, -} - -impl> MerkleTree { - pub fn new(perm: P) -> Self { - MerkleTree { - perm, - field: PhantomData, - } - } - - fn round_up_pow_n(input: usize, n: usize) -> usize { - debug_assert!(n >= 1); - let mut res = 1; - // try powers, starting from n - loop { - res *= n; - if res >= input { - break; - } - } - res - } - - pub fn accumulate(&mut self, set: &[F]) -> Vec { - assert!(set.len()%8 == 0); - let set_size = set.len() / 8; - let mut bound = Self::round_up_pow_n(set_size, 2); - loop { - if bound >= 2 { - break; - } - bound *= 2; - } - let mut nodes: Vec = Vec::with_capacity(bound * 8); - for s in set { - nodes.push(s.to_owned()); - } - // pad - for _ in nodes.len()..bound { - nodes.push(nodes[set_size * 8 - 1].to_owned()); - } - - while nodes.len() > 8 { - let new_len = nodes.len() / 2; - let mut new_nodes: Vec = Vec::with_capacity(new_len); - for i in (0..nodes.len()).step_by(16) { - let inp = [ - &nodes[i], &nodes[i + 1], &nodes[i + 2], &nodes[i + 3], &nodes[i + 4], &nodes[i + 5], &nodes[i + 6], &nodes[i + 7], - &nodes[i + 8], &nodes[i + 9], &nodes[i + 10], &nodes[i + 11], &nodes[i + 12], &nodes[i + 13], &nodes[i + 14], &nodes[i + 15] - ]; - let dig = self.perm.compress(&inp); - - for j in 0..8 { - new_nodes.push(dig[j]); - } - - } - nodes = new_nodes; - } - vec![nodes[0].to_owned(), nodes[1].to_owned(), nodes[2].to_owned(), nodes[3].to_owned(), nodes[4].to_owned(), nodes[5].to_owned(), nodes[6].to_owned(), nodes[7].to_owned()] - } -} - -impl MerkleTreeHash for Poseidon2 { - fn compress(&self, input: &[&F]) -> Vec { - let p = self.permutation(&[ - input[0].to_owned(), input[1].to_owned(),input[2].to_owned(), input[3].to_owned(),input[4].to_owned(), input[5].to_owned(),input[6].to_owned(), input[7].to_owned(), - input[8].to_owned(), input[9].to_owned(),input[10].to_owned(), input[11].to_owned(),input[12].to_owned(), input[13].to_owned(),input[14].to_owned(), input[15].to_owned(), - F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO, F::ZERO - ]); - - vec![p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]] - } -} - -//--------------------- -lazy_static!{ -pub static ref MAT_DIAG24_M_1: Vec = vec![ - BabyBearElem::from(0x409133f0 as u32), - BabyBearElem::from(0x1667a8a1 as u32), - BabyBearElem::from(0x06a6c7b6 as u32), - BabyBearElem::from(0x6f53160e as u32), - BabyBearElem::from(0x273b11d1 as u32), - BabyBearElem::from(0x03176c5d as u32), - BabyBearElem::from(0x72f9bbf9 as u32), - BabyBearElem::from(0x73ceba91 as u32), - BabyBearElem::from(0x5cdef81d as u32), - BabyBearElem::from(0x01393285 as u32), - BabyBearElem::from(0x46daee06 as u32), - BabyBearElem::from(0x065d7ba6 as u32), - BabyBearElem::from(0x52d72d6f as u32), - BabyBearElem::from(0x05dd05e0 as u32), - BabyBearElem::from(0x3bab4b63 as u32), - BabyBearElem::from(0x6ada3842 as u32), - BabyBearElem::from(0x2fc5fbec as u32), - BabyBearElem::from(0x770d61b0 as u32), - BabyBearElem::from(0x5715aae9 as u32), - BabyBearElem::from(0x03ef0e90 as u32), - BabyBearElem::from(0x75b6c770 as u32), - BabyBearElem::from(0x242adf5f as u32), - BabyBearElem::from(0x00d0ca4c as u32), - BabyBearElem::from(0x36c0e388 as u32), - ]; - - pub static ref MAT_INTERNAL24: Vec> = vec![ - vec![BabyBearElem::from(0x409133f1 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x1667a8a2 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x06a6c7b7 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x6f53160f as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x273b11d2 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x03176c5e as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x72f9bbfa as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x73ceba92 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x5cdef81e as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x01393286 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x46daee07 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x065d7ba7 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x52d72d70 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x05dd05e1 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x3bab4b64 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x6ada3843 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x2fc5fbed as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x770d61b1 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x5715aaea as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x03ef0e91 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x75b6c771 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x242adf60 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00d0ca4d as u32), - BabyBearElem::from(0x00000001 as u32), - ], - vec![BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x00000001 as u32), - BabyBearElem::from(0x36c0e389 as u32), - ], - ]; - - pub static ref RC24: Vec> = vec![ - vec![BabyBearElem::from(0x0fa20c37 as u32), - BabyBearElem::from(0x0795bb97 as u32), - BabyBearElem::from(0x12c60b9c as u32), - BabyBearElem::from(0x0eabd88e as u32), - BabyBearElem::from(0x096485ca as u32), - BabyBearElem::from(0x07093527 as u32), - BabyBearElem::from(0x1b1d4e50 as u32), - BabyBearElem::from(0x30a01ace as u32), - BabyBearElem::from(0x3bd86f5a as u32), - BabyBearElem::from(0x69af7c28 as u32), - BabyBearElem::from(0x3f94775f as u32), - BabyBearElem::from(0x731560e8 as u32), - BabyBearElem::from(0x465a0ecd as u32), - BabyBearElem::from(0x574ef807 as u32), - BabyBearElem::from(0x62fd4870 as u32), - BabyBearElem::from(0x52ccfe44 as u32), - BabyBearElem::from(0x14772b14 as u32), - BabyBearElem::from(0x4dedf371 as u32), - BabyBearElem::from(0x260acd7c as u32), - BabyBearElem::from(0x1f51dc58 as u32), - BabyBearElem::from(0x75125532 as u32), - BabyBearElem::from(0x686a4d7b as u32), - BabyBearElem::from(0x54bac179 as u32), - BabyBearElem::from(0x31947706 as u32), - ], - vec![BabyBearElem::from(0x29799d3b as u32), - BabyBearElem::from(0x6e01ae90 as u32), - BabyBearElem::from(0x203a7a64 as u32), - BabyBearElem::from(0x4f7e25be as u32), - BabyBearElem::from(0x72503f77 as u32), - BabyBearElem::from(0x45bd3b69 as u32), - BabyBearElem::from(0x769bd6b4 as u32), - BabyBearElem::from(0x5a867f08 as u32), - BabyBearElem::from(0x4fdba082 as u32), - BabyBearElem::from(0x251c4318 as u32), - BabyBearElem::from(0x28f06201 as u32), - BabyBearElem::from(0x6788c43a as u32), - BabyBearElem::from(0x4c6d6a99 as u32), - BabyBearElem::from(0x357784a8 as u32), - BabyBearElem::from(0x2abaf051 as u32), - BabyBearElem::from(0x770f7de6 as u32), - BabyBearElem::from(0x1794b784 as u32), - BabyBearElem::from(0x4796c57a as u32), - BabyBearElem::from(0x724b7a10 as u32), - BabyBearElem::from(0x449989a7 as u32), - BabyBearElem::from(0x64935cf1 as u32), - BabyBearElem::from(0x59e14aac as u32), - BabyBearElem::from(0x0e620bb8 as u32), - BabyBearElem::from(0x3af5a33b as u32), - ], - vec![BabyBearElem::from(0x4465cc0e as u32), - BabyBearElem::from(0x019df68f as u32), - BabyBearElem::from(0x4af8d068 as u32), - BabyBearElem::from(0x08784f82 as u32), - BabyBearElem::from(0x0cefdeae as u32), - BabyBearElem::from(0x6337a467 as u32), - BabyBearElem::from(0x32fa7a16 as u32), - BabyBearElem::from(0x486f62d6 as u32), - BabyBearElem::from(0x386a7480 as u32), - BabyBearElem::from(0x20f17c4a as u32), - BabyBearElem::from(0x54e50da8 as u32), - BabyBearElem::from(0x2012cf03 as u32), - BabyBearElem::from(0x5fe52950 as u32), - BabyBearElem::from(0x09afb6cd as u32), - BabyBearElem::from(0x2523044e as u32), - BabyBearElem::from(0x5c54d0ef as u32), - BabyBearElem::from(0x71c01f3c as u32), - BabyBearElem::from(0x60b2c4fb as u32), - BabyBearElem::from(0x4050b379 as u32), - BabyBearElem::from(0x5e6a70a5 as u32), - BabyBearElem::from(0x418543f5 as u32), - BabyBearElem::from(0x71debe56 as u32), - BabyBearElem::from(0x1aad2994 as u32), - BabyBearElem::from(0x3368a483 as u32), - ], - vec![BabyBearElem::from(0x07a86f3a as u32), - BabyBearElem::from(0x5ea43ff1 as u32), - BabyBearElem::from(0x2443780e as u32), - BabyBearElem::from(0x4ce444f7 as u32), - BabyBearElem::from(0x146f9882 as u32), - BabyBearElem::from(0x3132b089 as u32), - BabyBearElem::from(0x197ea856 as u32), - BabyBearElem::from(0x667030c3 as u32), - BabyBearElem::from(0x2317d5dc as u32), - BabyBearElem::from(0x0c2c48a7 as u32), - BabyBearElem::from(0x56b2df66 as u32), - BabyBearElem::from(0x67bd81e9 as u32), - BabyBearElem::from(0x4fcdfb19 as u32), - BabyBearElem::from(0x4baaef32 as u32), - BabyBearElem::from(0x0328d30a as u32), - BabyBearElem::from(0x6235760d as u32), - BabyBearElem::from(0x12432912 as u32), - BabyBearElem::from(0x0a49e258 as u32), - BabyBearElem::from(0x030e1b70 as u32), - BabyBearElem::from(0x48caeb03 as u32), - BabyBearElem::from(0x49e4d9e9 as u32), - BabyBearElem::from(0x1051b5c6 as u32), - BabyBearElem::from(0x6a36dbbe as u32), - BabyBearElem::from(0x4cff27a5 as u32), - ], - vec![BabyBearElem::from(0x1da78ec2 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x730b0924 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x3eb56cf3 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x5bd93073 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x37204c97 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x51642d89 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x66e943e8 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x1a3e72de as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x70beb1e9 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x30ff3b3f as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x4240d1c4 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x12647b8d as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x65d86965 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x49ef4d7c as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x47785697 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x46b3969f as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x5c7b7a0e as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x7078fc60 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x4f22d482 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x482a9aee as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x6beb839d as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - BabyBearElem::from(0x00000000 as u32), - ], - vec![BabyBearElem::from(0x032959ad as u32), - BabyBearElem::from(0x2b18af6a as u32), - BabyBearElem::from(0x55d3dc8c as u32), - BabyBearElem::from(0x43bd26c8 as u32), - BabyBearElem::from(0x0c41595f as u32), - BabyBearElem::from(0x7048d2e2 as u32), - BabyBearElem::from(0x00db8983 as u32), - BabyBearElem::from(0x2af563d7 as u32), - BabyBearElem::from(0x6e84758f as u32), - BabyBearElem::from(0x611d64e1 as u32), - BabyBearElem::from(0x1f9977e2 as u32), - BabyBearElem::from(0x64163a0a as u32), - BabyBearElem::from(0x5c5fc27b as u32), - BabyBearElem::from(0x02e22561 as u32), - BabyBearElem::from(0x3a2d75db as u32), - BabyBearElem::from(0x1ba7b71a as u32), - BabyBearElem::from(0x34343f64 as u32), - BabyBearElem::from(0x7406b35d as u32), - BabyBearElem::from(0x19df8299 as u32), - BabyBearElem::from(0x6ff4480a as u32), - BabyBearElem::from(0x514a81c8 as u32), - BabyBearElem::from(0x57ab52ce as u32), - BabyBearElem::from(0x6ad69f52 as u32), - BabyBearElem::from(0x3e0c0e0d as u32), - ], - vec![BabyBearElem::from(0x48126114 as u32), - BabyBearElem::from(0x2a9d62cc as u32), - BabyBearElem::from(0x17441f23 as u32), - BabyBearElem::from(0x485762bb as u32), - BabyBearElem::from(0x2f218674 as u32), - BabyBearElem::from(0x06fdc64a as u32), - BabyBearElem::from(0x0861b7f2 as u32), - BabyBearElem::from(0x3b36eee6 as u32), - BabyBearElem::from(0x70a11040 as u32), - BabyBearElem::from(0x04b31737 as u32), - BabyBearElem::from(0x3722a872 as u32), - BabyBearElem::from(0x2a351c63 as u32), - BabyBearElem::from(0x623560dc as u32), - BabyBearElem::from(0x62584ab2 as u32), - BabyBearElem::from(0x382c7c04 as u32), - BabyBearElem::from(0x3bf9edc7 as u32), - BabyBearElem::from(0x0e38fe51 as u32), - BabyBearElem::from(0x376f3b10 as u32), - BabyBearElem::from(0x5381e178 as u32), - BabyBearElem::from(0x3afc61c7 as u32), - BabyBearElem::from(0x5c1bcb4d as u32), - BabyBearElem::from(0x6643ce1f as u32), - BabyBearElem::from(0x2d0af1c1 as u32), - BabyBearElem::from(0x08f583cc as u32), - ], - vec![BabyBearElem::from(0x5d6ff60f as u32), - BabyBearElem::from(0x6324c1e5 as u32), - BabyBearElem::from(0x74412fb7 as u32), - BabyBearElem::from(0x70c0192e as u32), - BabyBearElem::from(0x0b72f141 as u32), - BabyBearElem::from(0x4067a111 as u32), - BabyBearElem::from(0x57388c4f as u32), - BabyBearElem::from(0x351009ec as u32), - BabyBearElem::from(0x0974c159 as u32), - BabyBearElem::from(0x539a58b3 as u32), - BabyBearElem::from(0x038c0cff as u32), - BabyBearElem::from(0x476c0392 as u32), - BabyBearElem::from(0x3f7bc15f as u32), - BabyBearElem::from(0x4491dd2c as u32), - BabyBearElem::from(0x4d1fef55 as u32), - BabyBearElem::from(0x04936ae3 as u32), - BabyBearElem::from(0x58214dd4 as u32), - BabyBearElem::from(0x683c6aad as u32), - BabyBearElem::from(0x1b42f16b as u32), - BabyBearElem::from(0x6dc79135 as u32), - BabyBearElem::from(0x2d4e71ec as u32), - BabyBearElem::from(0x3e2946ea as u32), - BabyBearElem::from(0x59dce8db as u32), - BabyBearElem::from(0x6cee892a as u32), - ], - vec![BabyBearElem::from(0x47f07350 as u32), - BabyBearElem::from(0x7106ce93 as u32), - BabyBearElem::from(0x3bd4a7a9 as u32), - BabyBearElem::from(0x2bfe636a as u32), - BabyBearElem::from(0x430011e9 as u32), - BabyBearElem::from(0x001cd66a as u32), - BabyBearElem::from(0x307faf5b as u32), - BabyBearElem::from(0x0d9ef3fe as u32), - BabyBearElem::from(0x6d40043a as u32), - BabyBearElem::from(0x2e8f470c as u32), - BabyBearElem::from(0x1b6865e8 as u32), - BabyBearElem::from(0x0c0e6c01 as u32), - BabyBearElem::from(0x4d41981f as u32), - BabyBearElem::from(0x423b9d3d as u32), - BabyBearElem::from(0x410408cc as u32), - BabyBearElem::from(0x263f0884 as u32), - BabyBearElem::from(0x5311bbd0 as u32), - BabyBearElem::from(0x4dae58d8 as u32), - BabyBearElem::from(0x30401cea as u32), - BabyBearElem::from(0x09afa575 as u32), - BabyBearElem::from(0x4b3d5b42 as u32), - BabyBearElem::from(0x63ac0b37 as u32), - BabyBearElem::from(0x5fe5bb14 as u32), - BabyBearElem::from(0x5244e9d4 as u32), - ], - ]; - - pub static ref POSEIDON2_BABYBEAR_24_PARAMS: Arc> = Arc::new(Poseidon2Params::new(24, 7, 8, 21, &MAT_DIAG24_M_1, &MAT_INTERNAL24, &RC24)); - -} - -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec = env::read(); - - let cycles1 = cycle_count(); - let mut hash_data: Vec = Vec::new(); - for i in 0..data.len() { - let a_uncompressed = BabyBearElem::from(*data.get(i).unwrap()); - hash_data.push(a_uncompressed); - } - let cycles2 = cycle_count(); - - - let permutation = Poseidon2::new(&POSEIDON2_BABYBEAR_24_PARAMS); - let mut merkle_tree = MerkleTree::new(permutation.clone()); - let cycles3 = cycle_count(); - let hash_final = merkle_tree.accumulate(&hash_data); - - let cycles4 = cycle_count(); - - let mut perm_seralised: Vec = Vec::new(); - for i in 0..8 { - let temp: u32 = hash_final.get(i).unwrap().into(); - perm_seralised.push(temp); - - } - let cycles6 = cycle_count(); - - env::commit(&perm_seralised); - - eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); - eprintln!("number of cycles for hash permutation builder: {:?}", cycles3 - cycles2); - eprintln!("number of cycles for hash accumulation: {:?}", cycles4 - cycles3); - - eprintln!("number of cycles for permutation seralisation: {:?}", cycles6 - cycles4); - -} diff --git a/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs b/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs deleted file mode 100644 index e6bc443..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/poseidon2_bn128.rs +++ /dev/null @@ -1,43 +0,0 @@ -#![no_main] -use risc0_zkvm::{guest::env/* , sha::Digest*/}; -// use sha3::{Digest as _, Keccak256}; -use zkhash::poseidon2::poseidon2; -use zkhash::poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS; -use zkhash::merkle_tree::merkle_tree_fp::MerkleTree; -use zkhash::fields::bn256::FpBN256; -use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; -use risc0_zkvm::guest::env::cycle_count; - -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec> = env::read(); - let cycles1 = cycle_count(); - let mut hash_data: Vec = Vec::new(); - for i in 0..data.len() { - let a_uncompressed = FpBN256::deserialize_uncompressed(&**data.get(i).unwrap()).unwrap(); - hash_data.push(a_uncompressed); - } - let cycles2 = cycle_count(); - - let permutation = poseidon2::Poseidon2::new(&POSEIDON2_BN256_PARAMS); - let mut merkle_tree = MerkleTree::new(permutation.clone()); - let cycles4 = cycle_count(); - let hash_final = merkle_tree.accumulate(&hash_data); - let cycles5 = cycle_count(); - - - let mut hash_bytes: Vec = Vec::new(); - hash_final.serialize_uncompressed(&mut hash_bytes).unwrap(); - - let cycles6 = cycle_count(); - - env::commit(&hash_bytes); - - eprintln!("number of cycles for input builder: {:?}", cycles2 - cycles1); - eprintln!("number of cycles for hash builder: {:?}", cycles4 - cycles2); - eprintln!("number of cycles for hash calculation: {:?}", cycles5 - cycles4); - eprintln!("number of cycles for hash serealisation: {:?}", cycles6 - cycles5); - -} diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256.rs b/hash/risc0/bench/methods/guest/src/bin/sha256.rs deleted file mode 100644 index 185a9d7..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/sha256.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![no_main] - -use risc0_zkvm::{guest::env, sha, sha::Sha256}; -risc0_zkvm::guest::entry!(main); -use risc0_zkvm::guest::env::cycle_count; - -pub fn main() { - - let data: Vec = env::read(); - let hash = sha::Impl::hash_bytes(&data); - eprintln!("total cycle count for hashing: {:?}",cycle_count()); - env::commit(&hash) -} - diff --git a/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs b/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs deleted file mode 100644 index 2162da4..0000000 --- a/hash/risc0/bench/methods/guest/src/bin/sha256_accelerated.rs +++ /dev/null @@ -1,21 +0,0 @@ - -// accelerated sha2 crate -#![no_main] - -use risc0_zkvm::guest::env; -use sha2::{Sha256, Digest}; -use risc0_zkvm::guest::env::cycle_count; -// use base16ct::lower::encode_str; -risc0_zkvm::guest::entry!(main); - -pub fn main() { - - let data: Vec = env::read(); - let result = Sha256::digest(data); - let c1 = cycle_count(); - eprintln!("total cycle count for hashing: {:?}",c1); - let result_bytes: [u8;32] = result.into(); - let c2 = cycle_count(); - eprintln!("cycle count to convert into bytes array: {:?}",c2-c1); - env::commit(&result_bytes) -} diff --git a/hash/risc0/bench/methods/src/lib.rs b/hash/risc0/bench/methods/src/lib.rs deleted file mode 100644 index 1bdb308..0000000 --- a/hash/risc0/bench/methods/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/bench/run.sh b/hash/risc0/bench/run.sh deleted file mode 100755 index 79b7df8..0000000 --- a/hash/risc0/bench/run.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -if [ -z ${ZKBENCH_HASH_TYPE} ]; then -ZKBENCH_HASH_TYPE="sha256" -fi - -if [ -z ${ZKBENCH_INPUT_SIZE_BYTES} ]; then -ZKBENCH_INPUT_SIZE_BYTES=1024 -fi - -echo "Running benchmarks with the following configurations:" -echo "HASH = $ZKBENCH_HASH_TYPE" -echo "Input Size (Bytes) = $ZKBENCH_INPUT_SIZE_BYTES" - -# Run the benchmarks -./target/release/benchmark $ZKBENCH_HASH_TYPE $ZKBENCH_INPUT_SIZE_BYTES \ No newline at end of file diff --git a/hash/risc0/bench/run_tree.sh b/hash/risc0/bench/run_tree.sh deleted file mode 100755 index 81a0750..0000000 --- a/hash/risc0/bench/run_tree.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -if [ -z ${ZKBENCH_HASH_TYPE_TREE} ]; then -ZKBENCH_HASH_TYPE_TREE="poseidon2_babybear_native" -fi - -if [ -z ${ZKBENCH_TREE_DEPTH} ]; then -ZKBENCH_TREE_DEPTH=2 -fi - -echo "Running benchmarks with the following configurations:" -echo "HASH = $ZKBENCH_HASH_TYPE_TREE" -echo "Tree Depth = $ZKBENCH_TREE_DEPTH" - -# Run the benchmarks -./target/release/benchmark $ZKBENCH_HASH_TYPE_TREE $ZKBENCH_TREE_DEPTH \ No newline at end of file diff --git a/hash/risc0/bench/rust-toolchain.toml b/hash/risc0/bench/rust-toolchain.toml deleted file mode 100644 index 36614c3..0000000 --- a/hash/risc0/bench/rust-toolchain.toml +++ /dev/null @@ -1,4 +0,0 @@ -[toolchain] -channel = "stable" -components = ["rustfmt", "rust-src"] -profile = "minimal" diff --git a/hash/risc0/bench/src/benches/blake2b.rs b/hash/risc0/bench/src/benches/blake2b.rs deleted file mode 100644 index 75bbf05..0000000 --- a/hash/risc0/bench/src/benches/blake2b.rs +++ /dev/null @@ -1,32 +0,0 @@ -use benchmark_methods::{ - BLAKE2B_ELF, BLAKE2B_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::{ sha}; -// use rand::RngCore; -use std::time::Instant; - -pub fn blake2b_bench(input: Vec) { - - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, BLAKE2B_ELF).unwrap(); - - // For example: - let _output: sha::Digest = receipt.journal.decode().unwrap(); - - let elapsed_time1 = start_time.elapsed(); - // verify your receipt - receipt.verify(BLAKE2B_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("verification time: {:?}", elapsed_time2 - elapsed_time1); - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/blake3.rs b/hash/risc0/bench/src/benches/blake3.rs deleted file mode 100644 index 2f12a7f..0000000 --- a/hash/risc0/bench/src/benches/blake3.rs +++ /dev/null @@ -1,34 +0,0 @@ -use benchmark_methods::{ - BLAKE3_ELF, BLAKE3_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::{ sha}; -// use rand::RngCore; -use std::time::Instant; - -pub fn blake3_bench(input: Vec) { - - - - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - let start_time = Instant::now(); - - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, BLAKE3_ELF).unwrap(); - - // For example: - let _output: sha::Digest = receipt.journal.decode().unwrap(); - - let elapsed_time1 = start_time.elapsed(); - // verify your receipt - receipt.verify(BLAKE3_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("verification time: {:?}", elapsed_time2 - elapsed_time1); - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/keccak.rs b/hash/risc0/bench/src/benches/keccak.rs deleted file mode 100644 index 73c8506..0000000 --- a/hash/risc0/bench/src/benches/keccak.rs +++ /dev/null @@ -1,33 +0,0 @@ -use benchmark_methods::{ - KECCAK_ELF, KECCAK_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::{ sha}; -// use rand::RngCore; -use std::time::Instant; - -pub fn keccak_bench(input: Vec) { - - let start_time = Instant::now(); - - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, KECCAK_ELF).unwrap(); - - // For example: - let _output: sha::Digest = receipt.journal.decode().unwrap(); - - let elapsed_time1 = start_time.elapsed(); - // verify your receipt - receipt.verify(KECCAK_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("verification time: {:?}", elapsed_time2 - elapsed_time1); - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/mod.rs b/hash/risc0/bench/src/benches/mod.rs deleted file mode 100644 index adeeccf..0000000 --- a/hash/risc0/bench/src/benches/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod sha256; -pub mod sha256_accelerated; -pub mod keccak; -pub mod blake2b; -pub mod blake3; -pub mod poseidon2_bn128; -pub mod poseidon2_babybear; -pub mod poseidon2_babybear_native; \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear.rs b/hash/risc0/bench/src/benches/poseidon2_babybear.rs deleted file mode 100644 index 7e7a391..0000000 --- a/hash/risc0/bench/src/benches/poseidon2_babybear.rs +++ /dev/null @@ -1,66 +0,0 @@ -#![allow(non_snake_case)] -use benchmark_methods::{ - POSEIDON2_BABYBEAR_ELF, - POSEIDON2_BABYBEAR_ID -}; -use risc0_zkvm::{ - default_prover, - ExecutorEnv -}; -use zkhash::fields::{ - babybear::FpBabyBear, - utils::random_scalar - }; -use std::time::Instant; -use ark_serialize::{ - CanonicalSerialize, - CanonicalDeserialize -}; - - -pub fn poseidon2_babybear_bench(mt_depth: usize) { - - type Scalar = FpBabyBear; - - let t = (1 << mt_depth) * 8; - let mut input_scalar: Vec> = Vec::new(); - - for _ in 0..t { - let mut uncompressed_bytes = Vec::new(); - let a: Scalar = random_scalar(); - a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); - input_scalar.push(uncompressed_bytes); - } - - let env = ExecutorEnv::builder().write(&input_scalar).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, POSEIDON2_BABYBEAR_ELF).unwrap(); - let elapsed_time = start_time.elapsed(); - - // verify your receipt - receipt.verify(POSEIDON2_BABYBEAR_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - // For example: - let output: Vec> = receipt.journal.decode().unwrap(); - - let mut output_deseralised: Vec = Vec::new(); - - for i in 0..output.len() { - output_deseralised.push(Scalar::deserialize_uncompressed(&**output.get(i).unwrap()).unwrap()); - } - - eprintln!("hash: {:?}", output_deseralised); - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - - // eprintln!("Hash: {:?}", hash_final); - - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs b/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs deleted file mode 100644 index d630f7f..0000000 --- a/hash/risc0/bench/src/benches/poseidon2_babybear_native.rs +++ /dev/null @@ -1,47 +0,0 @@ -#![allow(non_snake_case)] -use benchmark_methods::{ - POSEIDON2_BABYBEAR_NATIVE_ELF, - POSEIDON2_BABYBEAR_NATIVE_ID -}; -use risc0_zkvm::{ - default_prover, - ExecutorEnv -}; -use std::time::Instant; -use rand::Rng; - -pub fn poseidon2_babybear_native_bench(mt_depth: usize) { - - let t = (1 << mt_depth) * 8; - let mut input: Vec = Vec::new(); - - for _ in 0..t { - - let mut rng = rand::thread_rng(); - let random_u32: u32 = rng.gen(); - input.push(random_u32); - } - - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, POSEIDON2_BABYBEAR_NATIVE_ELF).unwrap(); - let elapsed_time = start_time.elapsed(); - - // verify your receipt - receipt.verify(POSEIDON2_BABYBEAR_NATIVE_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - let output: Vec = receipt.journal.decode().unwrap(); - - eprintln!("hash: {:?}", output); - - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/poseidon2_bn128.rs b/hash/risc0/bench/src/benches/poseidon2_bn128.rs deleted file mode 100644 index 3ceb77c..0000000 --- a/hash/risc0/bench/src/benches/poseidon2_bn128.rs +++ /dev/null @@ -1,48 +0,0 @@ -use benchmark_methods::{ - POSEIDON2_BN128_ELF, POSEIDON2_BN128_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use zkhash::{fields::{bn256::FpBN256, utils::random_scalar}/* , poseidon2::poseidon2_instance_bn256::POSEIDON2_BN256_PARAMS*/}; -use std::time::Instant; -use ark_serialize::{CanonicalSerialize, CanonicalDeserialize}; - - -pub fn poseidon2_bn128_bench(mt_depth: usize) { - - type Scalar = FpBN256; - - let mut input_scalar: Vec> = Vec::new(); - let number_of_leaves: u32 = 1 << mt_depth; - for _ in 0..number_of_leaves { - let mut uncompressed_bytes = Vec::new(); - let a: Scalar = random_scalar(); - a.serialize_uncompressed(&mut uncompressed_bytes).unwrap(); - input_scalar.push(uncompressed_bytes); - } - - let env = ExecutorEnv::builder().write(&input_scalar).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, POSEIDON2_BN128_ELF).unwrap(); - let elapsed_time = start_time.elapsed(); - - - // verify your receipt - receipt.verify(POSEIDON2_BN128_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - // For example: - let output: Vec = receipt.journal.decode().unwrap(); - - let hash_final = Scalar::deserialize_uncompressed(&*output).unwrap(); - - eprintln!("Hash: {:?}", hash_final); - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/sha256.rs b/hash/risc0/bench/src/benches/sha256.rs deleted file mode 100644 index 1777f56..0000000 --- a/hash/risc0/bench/src/benches/sha256.rs +++ /dev/null @@ -1,32 +0,0 @@ -use benchmark_methods::{ - SHA256_ELF, SHA256_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::{ sha}; -use std::time::Instant; -pub fn sha_bench(input: Vec) { - - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - eprintln!("\n------risc0_zkvm sha hashing------\n"); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, SHA256_ELF).unwrap(); - let elapsed_time = start_time.elapsed(); - - // verify your receipt - receipt.verify(SHA256_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - let _output: sha::Digest = receipt.journal.decode().unwrap(); - - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - - eprintln!("Hash: {:?}", _output); - -} \ No newline at end of file diff --git a/hash/risc0/bench/src/benches/sha256_accelerated.rs b/hash/risc0/bench/src/benches/sha256_accelerated.rs deleted file mode 100644 index 6233cae..0000000 --- a/hash/risc0/bench/src/benches/sha256_accelerated.rs +++ /dev/null @@ -1,30 +0,0 @@ -use benchmark_methods::{ - SHA256_ACCELERATED_ELF, SHA256_ACCELERATED_ID -}; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use std::time::Instant; -use hex::encode; -pub fn sha_accelerated_bench(input: Vec) { - - let env = ExecutorEnv::builder().write(&input).unwrap().build().unwrap(); - eprintln!("\n------RustCrypto sha hashing(accelerated)------\n"); - // Obtain the default prover. - let prover = default_prover(); - - let start_time = Instant::now(); - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, SHA256_ACCELERATED_ELF).unwrap(); - let elapsed_time = start_time.elapsed(); - - // verify your receipt - receipt.verify(SHA256_ACCELERATED_ID).unwrap(); - - let elapsed_time2 = start_time.elapsed(); - - let _output: [u8;32] = receipt.journal.decode().unwrap(); - let hash = encode(_output); - eprintln!("Total time: {:?}", elapsed_time2); - eprintln!("Verification time: {:?}", elapsed_time2 - elapsed_time); - - eprintln!("Hash: {:?}", hash); -} \ No newline at end of file diff --git a/hash/risc0/bench/src/main.rs b/hash/risc0/bench/src/main.rs deleted file mode 100644 index c5ba0f7..0000000 --- a/hash/risc0/bench/src/main.rs +++ /dev/null @@ -1,95 +0,0 @@ -mod benches; -use benches::{ - sha256::sha_bench, - sha256_accelerated::sha_accelerated_bench, - keccak::keccak_bench, - blake2b::blake2b_bench, - blake3::blake3_bench, - poseidon2_bn128::poseidon2_bn128_bench, - poseidon2_babybear::poseidon2_babybear_bench, - poseidon2_babybear_native::poseidon2_babybear_native_bench, -}; -use rand::Rng; -use std::process; - -fn generate_bytes(size: usize) -> Vec { - let mut rng = rand::thread_rng(); - (0..size).map(|_| rng.gen()).collect() -} - - - -fn main() { - let args: Vec = std::env::args().collect(); - - if args.len() != 3 { - println!("Wrong number of arguments! The program expects two arguments: and "); - // Exit the program with a non-zero exit code - process::exit(1); - } - - let hash_type = &args[1]; - let size = args[2].parse::().unwrap(); - - match hash_type.as_str() { - "sha256" => { - println!("SHA256 Benchmarking: "); - eprintln!("data size(bytes): {:?}", size); - let input = generate_bytes(size); - sha_bench(input.clone()); - } - "sha256_accelerated" => { - println!("Accelerated SHA256 Benchmarking: "); - eprintln!("data size(bytes): {:?}", size); - let input = generate_bytes(size); - sha_accelerated_bench(input.clone()); - } - "keccak" => { - println!("KECCAK Benchmarking: "); - eprintln!("data size(bytes): {:?}", size); - let input = generate_bytes(size); - keccak_bench(input.clone()); - } - - "blake2b" => { - println!("Blake2b Benchmarking: "); - eprintln!("data size(bytes): {:?}", size); - let input = generate_bytes(size); - blake2b_bench(input.clone()); - } - - "blake3" => { - println!("Blake3 Benchmarking: "); - eprintln!("data size(bytes): {:?}", size); - let input = generate_bytes(size); - blake3_bench(input.clone()); - } - - "poseidon2_bn128" => { - println!("Poseidon2 Benchmarking on the BN128 field: "); - eprintln!("Tree Depth: {:?}", size); - poseidon2_bn128_bench(size); - } - - "poseidon2_babybear" => { - println!("Poseidon2 Benchmarking on the BabyBear field: "); - eprintln!("Tree Depth: {:?}", size); - eprintln!("number of inputs {:?}", (1 << size) * 8); - poseidon2_babybear_bench(size); - } - - "poseidon2_babybear_native" => { - println!("Poseidon2 Benchmarking on the BabyBear field: "); - eprintln!("Tree Depth: {:?}", size); - eprintln!("number of inputs {:?}", (1 << size) * 8); - poseidon2_babybear_native_bench(size); - } - - _ => { - println!("Wrong Benchmark Name!"); - } - } - - println!("All Done!"); - -} diff --git a/hash/risc0/composition/Cargo.lock b/hash/risc0/composition/Cargo.lock deleted file mode 100644 index d2dff75..0000000 --- a/hash/risc0/composition/Cargo.lock +++ /dev/null @@ -1,2795 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[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.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "cpp_demangle", - "fallible-iterator", - "gimli", - "memmap2", - "object", - "rustc-demangle", - "smallvec", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools 0.10.5", - "num-bigint 0.4.4", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "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.4", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint 0.4.4", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "autotools" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" -dependencies = [ - "cc", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "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.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" - -[[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 = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[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 = "bonsai-sdk" -version = "0.6.0-rc.2" -dependencies = [ - "reqwest", - "serde", - "thiserror", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "composition" -version = "0.1.0" -dependencies = [ - "composition-methods", - "inner_proof", - "risc0-zkvm", - "serde", -] - -[[package]] -name = "composition-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[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-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cpp_demangle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -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-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "rand_core", - "subtle", -] - -[[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 = "cust" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" -dependencies = [ - "bitflags 1.3.2", - "bytemuck", - "cust_core", - "cust_derive", - "cust_raw", - "find_cuda_helper", -] - -[[package]] -name = "cust_core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" -dependencies = [ - "cust_derive", - "glam", - "mint", - "vek", -] - -[[package]] -name = "cust_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cust_raw" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" -dependencies = [ - "find_cuda_helper", -] - -[[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 = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[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 = "directories" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" -dependencies = [ - "dirs-sys", -] - -[[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", - "windows-sys 0.48.0", -] - -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "downloader" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" -dependencies = [ - "digest", - "futures", - "rand", - "reqwest", - "thiserror", - "tokio", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" -dependencies = [ - "serde", -] - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" -dependencies = [ - "addchain", - "cfg-if", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find_cuda_helper" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" -dependencies = [ - "glob", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[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.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -dependencies = [ - "fallible-iterator", - "stable_deref_trait", -] - -[[package]] -name = "glam" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -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", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "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", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "inner_proof" -version = "0.1.0" -dependencies = [ - "inner_proof-methods", - "rand", - "risc0-zkvm", - "serde", -] - -[[package]] -name = "inner_proof-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "inventory" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy-regex" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] - -[[package]] -name = "lazy-regex-proc_macros" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.48", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.2", - "libc", - "redox_syscall", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "metal" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", - "rayon", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[package]] -name = "proc-macro2" -version = "1.0.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" -dependencies = [ - "bytes", - "heck", - "itertools 0.11.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.48", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" -dependencies = [ - "anyhow", - "itertools 0.11.0", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "prost-types" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf-src" -version = "1.1.0+21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" -dependencies = [ - "autotools", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[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" -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", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" -dependencies = [ - "cc", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.48.0", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-build-kernel" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "directories", - "hex", - "sha2", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "cust", - "downloader", - "metal", - "rand", - "rayon", - "risc0-circuit-recursion-sys", - "risc0-core", - "risc0-zkp", - "sha2", - "tracing", - "zip", -] - -[[package]] -name = "risc0-circuit-recursion-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cust", - "metal", - "rand", - "rayon", - "risc0-circuit-rv32im-sys", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-sppark" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" -dependencies = [ - "cc", - "which", -] - -[[package]] -name = "risc0-sys" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "cust", - "risc0-build-kernel", - "risc0-sppark", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "cust", - "digest", - "ff", - "hex", - "lazy_static", - "metal", - "ndarray", - "paste", - "rand", - "rand_core", - "rayon", - "risc0-core", - "risc0-sys", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "addr2line", - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bincode", - "bonsai-sdk", - "bytemuck", - "bytes", - "cfg-if", - "crypto-bigint", - "elf", - "getrandom", - "hex", - "human-repr", - "lazy-regex", - "num-bigint 0.4.4", - "num-derive", - "num-traits", - "prost", - "prost-build", - "protobuf-src", - "rayon", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "rustc-demangle", - "semver", - "serde", - "sha2", - "tempfile", - "tracing", - "typetag", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" -dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64", -] - -[[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 = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -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 = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "typetag" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" -dependencies = [ - "erased-serde", - "inventory", - "once_cell", - "serde", - "typetag-impl", -] - -[[package]] -name = "typetag-impl" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vek" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" -dependencies = [ - "approx", - "num-integer", - "num-traits", - "rustc_version", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", - "flate2", -] diff --git a/hash/risc0/composition/Cargo.toml b/hash/risc0/composition/Cargo.toml deleted file mode 100644 index 9dd76d2..0000000 --- a/hash/risc0/composition/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "composition" -version = "0.1.0" -edition = "2021" - -[dependencies] -composition-methods = { path = "methods" } -inner_proof = { path = "../inner_proof" } -risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } -serde = "1.0" - -[features] -cuda = ["risc0-zkvm/cuda"] -default = [] -metal = ["risc0-zkvm/metal"] -prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/composition/build.sh b/hash/risc0/composition/build.sh deleted file mode 100755 index 7f1b114..0000000 --- a/hash/risc0/composition/build.sh +++ /dev/null @@ -1 +0,0 @@ -cargo build --release \ No newline at end of file diff --git a/hash/risc0/composition/methods/Cargo.toml b/hash/risc0/composition/methods/Cargo.toml deleted file mode 100644 index be6e230..0000000 --- a/hash/risc0/composition/methods/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "composition-methods" -version = "0.1.0" -edition = "2021" - -[build-dependencies] -risc0-build = { path = "../../external/risc0/risc0/build" } - -[package.metadata.risc0] -methods = ["guest"] diff --git a/hash/risc0/composition/methods/build.rs b/hash/risc0/composition/methods/build.rs deleted file mode 100644 index a4aa256..0000000 --- a/hash/risc0/composition/methods/build.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -fn main() { - risc0_build::embed_methods(); -} diff --git a/hash/risc0/composition/methods/guest/Cargo.lock b/hash/risc0/composition/methods/guest/Cargo.lock deleted file mode 100644 index 4077f62..0000000 --- a/hash/risc0/composition/methods/guest/Cargo.lock +++ /dev/null @@ -1,1100 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", - "itertools", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "composition-method" -version = "0.1.0" -dependencies = [ - "bytemuck", - "inner_proof-methods", - "risc0-zkvm", -] - -[[package]] -name = "const-oid" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -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 = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "inner_proof-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "libc" -version = "0.2.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "linux-raw-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "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" - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "digest", - "hex", - "paste", - "rand_core", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bytemuck", - "cfg-if", - "getrandom", - "hex", - "human-repr", - "num-bigint", - "num-derive", - "num-traits", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "semver", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" -dependencies = [ - "bitflags 2.4.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "semver" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "serde_json" -version = "1.0.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tempfile" -version = "3.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "thiserror" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "zerocopy" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] diff --git a/hash/risc0/composition/methods/guest/Cargo.toml b/hash/risc0/composition/methods/guest/Cargo.toml deleted file mode 100644 index 6dd09c0..0000000 --- a/hash/risc0/composition/methods/guest/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "composition-method" -version = "0.1.0" -edition = "2021" - -[workspace] - -[dependencies] -risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", features = ["std"], default-features = false } -inner_proof-methods = { path = "../../../inner_proof/methods" } -bytemuck = "1.14" diff --git a/hash/risc0/composition/methods/guest/src/main.rs b/hash/risc0/composition/methods/guest/src/main.rs deleted file mode 100644 index c575ece..0000000 --- a/hash/risc0/composition/methods/guest/src/main.rs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use inner_proof_methods::INNER_PROOF_METHOD_ID; -use risc0_zkvm::{guest::env, serde}; -use risc0_zkvm::sha; -fn main() { - let c1 = env::cycle_count(); - let hash: sha::Digest = env::read(); - let hash2: sha::Digest = env::read(); - let c2 = env::cycle_count(); - - env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash).unwrap()).unwrap(); - env::verify(INNER_PROOF_METHOD_ID, &serde::to_vec(&hash2).unwrap()).unwrap(); - let c3 = env::cycle_count(); - eprintln!("cycles for input builder: {:?}", c2 - c1); - eprintln!("cycles for inner_proof verification inside guest: {:?}", c3 - c2); - env::commit(&hash); -} - diff --git a/hash/risc0/composition/methods/src/lib.rs b/hash/risc0/composition/methods/src/lib.rs deleted file mode 100644 index ae9d61e..0000000 --- a/hash/risc0/composition/methods/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/composition/run.sh b/hash/risc0/composition/run.sh deleted file mode 100755 index bd6dfec..0000000 --- a/hash/risc0/composition/run.sh +++ /dev/null @@ -1 +0,0 @@ -./target/release/composition 32 \ No newline at end of file diff --git a/hash/risc0/composition/src/main.rs b/hash/risc0/composition/src/main.rs deleted file mode 100644 index 9a6a17b..0000000 --- a/hash/risc0/composition/src/main.rs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use composition_methods::{COMPOSITION_METHOD_ELF, COMPOSITION_METHOD_ID}; -use inner_proof::sha_bench; -use risc0_zkvm::{default_prover, ExecutorEnv}; -use risc0_zkvm::sha; -use std::time::Instant; -use std::process; - -fn main() { - - let args: Vec = std::env::args().collect(); - - if args.len() != 2 { - println!("Wrong number of arguments! The program expects one arguments: "); - // Exit the program with a non-zero exit code - process::exit(1); - } - - let data_size = args[1].parse::().unwrap(); - - let t0 = Instant::now(); - - let (hash_receipt, hash) = sha_bench(data_size.try_into().unwrap()); - let (hash_receipt2, hash2) = sha_bench(data_size.try_into().unwrap()); - - let env = ExecutorEnv::builder() - // add_assumption makes the receipt to be verified available to the prover. - .add_assumption(hash_receipt) - .write(&hash) - .unwrap() - .add_assumption(hash_receipt2) - .write(&hash2) - .unwrap() - .build() - .unwrap(); - - let t1 = t0.elapsed(); - - let receipt = default_prover().prove(env, COMPOSITION_METHOD_ELF).unwrap(); - - let t2 = t0.elapsed(); - - receipt.verify(COMPOSITION_METHOD_ID).unwrap(); - - let t3 = t0.elapsed(); - - let hash: sha::Digest = receipt.journal.decode().unwrap(); - eprintln!("hash: {:?}", hash); - eprintln!("ExecutorEnv Builder time: {:?}", t1); - eprintln!("Proof generation + receiving receipt time: {:?}", t2 - t1); - eprintln!("Verification time: {:?}", t3 - t2); -} diff --git a/hash/risc0/external/risc0 b/hash/risc0/external/risc0 deleted file mode 160000 index 1742ef8..0000000 --- a/hash/risc0/external/risc0 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1742ef8098d246871055501a0559811c9a8fece4 diff --git a/hash/risc0/inner_proof/Cargo.lock b/hash/risc0/inner_proof/Cargo.lock deleted file mode 100644 index 943cc8f..0000000 --- a/hash/risc0/inner_proof/Cargo.lock +++ /dev/null @@ -1,2778 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[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.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "cpp_demangle", - "fallible-iterator", - "gimli", - "memmap2", - "object", - "rustc-demangle", - "smallvec", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools 0.10.5", - "num-bigint 0.4.4", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "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.4", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint 0.4.4", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "autotools" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" -dependencies = [ - "cc", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "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.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" - -[[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 = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[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 = "bonsai-sdk" -version = "0.6.0-rc.2" -dependencies = [ - "reqwest", - "serde", - "thiserror", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[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-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cpp_demangle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -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-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "rand_core", - "subtle", -] - -[[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 = "cust" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" -dependencies = [ - "bitflags 1.3.2", - "bytemuck", - "cust_core", - "cust_derive", - "cust_raw", - "find_cuda_helper", -] - -[[package]] -name = "cust_core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" -dependencies = [ - "cust_derive", - "glam", - "mint", - "vek", -] - -[[package]] -name = "cust_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cust_raw" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" -dependencies = [ - "find_cuda_helper", -] - -[[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 = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[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 = "directories" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" -dependencies = [ - "dirs-sys", -] - -[[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", - "windows-sys 0.48.0", -] - -[[package]] -name = "docker-generate" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "downloader" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" -dependencies = [ - "digest", - "futures", - "rand", - "reqwest", - "thiserror", - "tokio", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" -dependencies = [ - "serde", -] - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core", - "subtle", -] - -[[package]] -name = "ff_derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" -dependencies = [ - "addchain", - "cfg-if", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "find_cuda_helper" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" -dependencies = [ - "glob", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[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.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -dependencies = [ - "fallible-iterator", - "stable_deref_trait", -] - -[[package]] -name = "glam" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -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", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "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", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "inner_proof" -version = "0.1.0" -dependencies = [ - "inner_proof-methods", - "rand", - "risc0-zkvm", - "serde", -] - -[[package]] -name = "inner_proof-methods" -version = "0.1.0" -dependencies = [ - "risc0-build", -] - -[[package]] -name = "inventory" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy-regex" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d12be4595afdf58bd19e4a9f4e24187da2a66700786ff660a418e9059937a4c" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] - -[[package]] -name = "lazy-regex-proc_macros" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bcd58e6c97a7fcbaffcdc95728b393b8d98933bfadad49ed4097845b57ef0b" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.48", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.2", - "libc", - "redox_syscall", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "metal" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550b24b0cd4cf923f36bae78eca457b3a10d8a6a14a9c84cb2687b527e6a84af" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", - "rayon", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[package]] -name = "proc-macro2" -version = "1.0.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" -dependencies = [ - "bytes", - "heck", - "itertools 0.11.0", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.48", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" -dependencies = [ - "anyhow", - "itertools 0.11.0", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "prost-types" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" -dependencies = [ - "prost", -] - -[[package]] -name = "protobuf-src" -version = "1.1.0+21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" -dependencies = [ - "autotools", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[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" -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", -] - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" -dependencies = [ - "cc", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.48.0", -] - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-build" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cargo_metadata", - "docker-generate", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "serde_json", - "tempfile", -] - -[[package]] -name = "risc0-build-kernel" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "directories", - "hex", - "sha2", - "tempfile", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "cust", - "downloader", - "metal", - "rand", - "rayon", - "risc0-circuit-recursion-sys", - "risc0-core", - "risc0-zkp", - "sha2", - "tracing", - "zip", -] - -[[package]] -name = "risc0-circuit-recursion-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "cust", - "metal", - "rand", - "rayon", - "risc0-circuit-rv32im-sys", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im-sys" -version = "0.20.0-rc.2" -dependencies = [ - "glob", - "risc0-build-kernel", - "risc0-core", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-sppark" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be1d1ff7fe501c9f420654bc1ff7461909b85e7f8fb3698a8812c0a8a787306" -dependencies = [ - "cc", - "which", -] - -[[package]] -name = "risc0-sys" -version = "0.20.0-rc.2" -dependencies = [ - "cc", - "cust", - "risc0-build-kernel", - "risc0-sppark", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "cust", - "digest", - "ff", - "hex", - "lazy_static", - "metal", - "ndarray", - "paste", - "rand", - "rand_core", - "rayon", - "risc0-core", - "risc0-sys", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "addr2line", - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bincode", - "bonsai-sdk", - "bytemuck", - "bytes", - "cfg-if", - "crypto-bigint", - "elf", - "getrandom", - "hex", - "human-repr", - "lazy-regex", - "num-bigint 0.4.4", - "num-derive", - "num-traits", - "prost", - "prost-build", - "protobuf-src", - "rayon", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "rustc-demangle", - "semver", - "serde", - "sha2", - "tempfile", - "tracing", - "typetag", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" -dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64", -] - -[[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 = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -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 = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "typetag" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43148481c7b66502c48f35b8eef38b6ccdc7a9f04bd4cc294226d901ccc9bc7" -dependencies = [ - "erased-serde", - "inventory", - "once_cell", - "serde", - "typetag-impl", -] - -[[package]] -name = "typetag-impl" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291db8a81af4840c10d636e047cac67664e343be44e24dfdbd1492df9a5d3390" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vek" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" -dependencies = [ - "approx", - "num-integer", - "num-traits", - "rustc_version", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", - "flate2", -] diff --git a/hash/risc0/inner_proof/Cargo.toml b/hash/risc0/inner_proof/Cargo.toml deleted file mode 100644 index c935ed6..0000000 --- a/hash/risc0/inner_proof/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "inner_proof" -version = "0.1.0" -edition = "2021" - -[dependencies] -inner_proof-methods = { path = "methods" } -risc0-zkvm = { path = "../external/risc0/risc0/zkvm" } -serde = "1.0" -rand = "0.8.3" - - -[features] -cuda = ["risc0-zkvm/cuda"] -default = [] -metal = ["risc0-zkvm/metal"] -prove = ["risc0-zkvm/prove"] diff --git a/hash/risc0/inner_proof/methods/Cargo.toml b/hash/risc0/inner_proof/methods/Cargo.toml deleted file mode 100644 index b187021..0000000 --- a/hash/risc0/inner_proof/methods/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "inner_proof-methods" -version = "0.1.0" -edition = "2021" - -[build-dependencies] -risc0-build = { path = "../../external/risc0/risc0/build" } - -[package.metadata.risc0] -methods = ["guest"] diff --git a/hash/risc0/inner_proof/methods/build.rs b/hash/risc0/inner_proof/methods/build.rs deleted file mode 100644 index 08a8a4e..0000000 --- a/hash/risc0/inner_proof/methods/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - risc0_build::embed_methods(); -} diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.lock b/hash/risc0/inner_proof/methods/guest/Cargo.lock deleted file mode 100644 index da9ea78..0000000 --- a/hash/risc0/inner_proof/methods/guest/Cargo.lock +++ /dev/null @@ -1,791 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", -] - -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-snark", - "ark-std", - "blake2", - "derivative", - "digest", - "sha2", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", - "itertools", - "num-traits", - "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", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown", -] - -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff", - "ark-std", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff", - "ark-relations", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bytemuck" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -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 = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elf" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b183d6ce6ca4cf30e3db37abf5b52568b5f9015c97d9fbdd7026aa5dcdd758" - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "human-repr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" - -[[package]] -name = "inner_proof_method" -version = "0.1.0" -dependencies = [ - "risc0-zkvm", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "libc" -version = "0.2.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "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" - -[[package]] -name = "risc0-binfmt" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "elf", - "risc0-zkp", - "risc0-zkvm-platform", - "serde", - "tracing", -] - -[[package]] -name = "risc0-circuit-recursion" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "bytemuck", - "risc0-core", - "risc0-zkp", - "tracing", -] - -[[package]] -name = "risc0-circuit-rv32im" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "tracing", -] - -[[package]] -name = "risc0-core" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "rand_core", -] - -[[package]] -name = "risc0-zkp" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "blake2", - "bytemuck", - "digest", - "hex", - "paste", - "rand_core", - "risc0-core", - "risc0-zkvm-platform", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "0.20.0-rc.2" -dependencies = [ - "anyhow", - "ark-bn254", - "ark-groth16", - "ark-serialize", - "bytemuck", - "cfg-if", - "getrandom", - "hex", - "human-repr", - "num-bigint", - "num-derive", - "num-traits", - "risc0-binfmt", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-zkp", - "risc0-zkvm-platform", - "rrs-lib", - "semver", - "serde", - "sha2", - "tracing", -] - -[[package]] -name = "risc0-zkvm-platform" -version = "0.20.0-rc.2" -dependencies = [ - "bytemuck", - "getrandom", - "libm", -] - -[[package]] -name = "rrs-lib" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" -dependencies = [ - "downcast-rs", - "paste", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "semver" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" - -[[package]] -name = "serde" -version = "1.0.171" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.171" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[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 = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "zerocopy" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] diff --git a/hash/risc0/inner_proof/methods/guest/Cargo.toml b/hash/risc0/inner_proof/methods/guest/Cargo.toml deleted file mode 100644 index faac96e..0000000 --- a/hash/risc0/inner_proof/methods/guest/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "inner_proof_method" -version = "0.1.0" -edition = "2021" - -[workspace] - -[dependencies] -risc0-zkvm = { path = "../../../external/risc0/risc0/zkvm", default-features = false, features = ["std"]} diff --git a/hash/risc0/inner_proof/methods/guest/src/main.rs b/hash/risc0/inner_proof/methods/guest/src/main.rs deleted file mode 100644 index 28fc0ac..0000000 --- a/hash/risc0/inner_proof/methods/guest/src/main.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![no_main] - -use risc0_zkvm::{guest::env, sha, sha::Sha256}; - -risc0_zkvm::guest::entry!(main); - -fn main() { - let data: String = env::read(); - let hash = sha::Impl::hash_bytes(&data.as_bytes()); - env::commit(&hash) -} - - diff --git a/hash/risc0/inner_proof/methods/src/lib.rs b/hash/risc0/inner_proof/methods/src/lib.rs deleted file mode 100644 index 1bdb308..0000000 --- a/hash/risc0/inner_proof/methods/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -include!(concat!(env!("OUT_DIR"), "/methods.rs")); diff --git a/hash/risc0/inner_proof/src/lib.rs b/hash/risc0/inner_proof/src/lib.rs deleted file mode 100644 index 6c6ab88..0000000 --- a/hash/risc0/inner_proof/src/lib.rs +++ /dev/null @@ -1,42 +0,0 @@ -use inner_proof_methods::INNER_PROOF_METHOD_ELF; -use risc0_zkvm::{default_prover, ExecutorEnv, Receipt}; -use risc0_zkvm::{ sha}; -use rand::Rng; - - -pub fn generate_bytes(size: u32) -> String { - let mut rng = rand::thread_rng(); - let random_bytes: Vec = (0..(size/2)).map(|_| rng.gen()).collect(); - - let random_string: String = random_bytes - .iter() - .map(|byte| format!("{:02X}", byte)) // Convert each byte to a two-digit hexadecimal string - .collect(); - - // eprintln!("bytes: {:?}", random_string.as_bytes().len()); - random_string - -} - -pub fn sha_bench(size: u32) -> (Receipt, sha::Digest) { - - let input = generate_bytes(size); - - let env = ExecutorEnv::builder() - .write(&input) - .unwrap() - .build() - .unwrap(); - - // Obtain the default prover. - let prover = default_prover(); - - // Produce a receipt by proving the specified ELF binary. - let receipt = prover.prove(env, INNER_PROOF_METHOD_ELF).unwrap(); - - let _output: sha::Digest = receipt.journal.decode().expect( - "cannot deserialise", - ); - - (receipt, _output) -} \ No newline at end of file diff --git a/hash/risc0/inner_proof/src/main.rs b/hash/risc0/inner_proof/src/main.rs deleted file mode 100644 index 0bb1c0d..0000000 --- a/hash/risc0/inner_proof/src/main.rs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2024 RISC Zero, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -use inner_proof::sha_bench; -use inner_proof_methods::INNER_PROOF_METHOD_ID; -use std::process; - -fn main() { - - let args: Vec = std::env::args().collect(); - - if args.len() != 2 { - println!("Wrong number of arguments! The program expects two arguments: and "); - // Exit the program with a non-zero exit code - process::exit(1); - } - - let data_size = args[1].parse::().unwrap(); - - let (receipt, _output) = sha_bench(data_size.try_into().unwrap()); - - // Verify receipt, panic if it's wrong - receipt.verify(INNER_PROOF_METHOD_ID).expect( - "cannot verify", - ); - - eprintln!("hash: {:?}", _output); -} From ccb9568e7eea9be10865e3dbfe2b830637d33baa Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Fri, 24 May 2024 12:57:22 +0530 Subject: [PATCH 31/31] specific commit added for sp1 crate to avoid future compilation error due to change in sp1_zkvm codebase --- hash/sp1/bench/blake2/Cargo.toml | 2 +- .../blake2/elf/riscv32im-succinct-zkvm-elf | Bin 143412 -> 143420 bytes hash/sp1/bench/blake3/Cargo.toml | 2 +- .../blake3/elf/riscv32im-succinct-zkvm-elf | Bin 135336 -> 135356 bytes hash/sp1/bench/keccak/Cargo.toml | 2 +- .../keccak/elf/riscv32im-succinct-zkvm-elf | Bin 114172 -> 114180 bytes hash/sp1/bench/poseidon2/Cargo.toml | 2 +- .../poseidon2/elf/riscv32im-succinct-zkvm-elf | Bin 235916 -> 235984 bytes hash/sp1/bench/script/Cargo.toml | 2 +- hash/sp1/bench/sha256/Cargo.toml | 2 +- .../sha256/elf/riscv32im-succinct-zkvm-elf | Bin 113704 -> 113720 bytes 11 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hash/sp1/bench/blake2/Cargo.toml b/hash/sp1/bench/blake2/Cargo.toml index 31c4ebb..8c830ea 100644 --- a/hash/sp1/bench/blake2/Cargo.toml +++ b/hash/sp1/bench/blake2/Cargo.toml @@ -5,6 +5,6 @@ name = "blake2-program" edition = "2021" [dependencies] -sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git", rev = "4528b7861c60ef5e25c2d0b328fc6d244e2ac98e"} blake2 = "0.10.6" diff --git a/hash/sp1/bench/blake2/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/blake2/elf/riscv32im-succinct-zkvm-elf index 422ae58de4938a6633498f96706f6c0c9119d168..54aee86a26fcd9287274c49962f226a8c2b0c6be 100755 GIT binary patch delta 25749 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 delta 26147 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 B2hsol diff --git a/hash/sp1/bench/blake3/Cargo.toml b/hash/sp1/bench/blake3/Cargo.toml index 6e51f20..eae6595 100644 --- a/hash/sp1/bench/blake3/Cargo.toml +++ b/hash/sp1/bench/blake3/Cargo.toml @@ -5,5 +5,5 @@ name = "blake3-program" edition = "2021" [dependencies] -sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git", rev = "4528b7861c60ef5e25c2d0b328fc6d244e2ac98e" } blake3 = "1.5.0" \ No newline at end of file diff --git a/hash/sp1/bench/blake3/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/blake3/elf/riscv32im-succinct-zkvm-elf index c3755868313377386f9d0f5309fb57bd196031a6..8d75bf2603c8fe492f887c9bf54ae9d32b34b230 100755 GIT binary patch delta 31624 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 delta 31404 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 T9gX2;YTFf$oY5a%7E=E|K9yhu diff --git a/hash/sp1/bench/poseidon2/Cargo.toml b/hash/sp1/bench/poseidon2/Cargo.toml index 9a7b28e..54b67d4 100644 --- a/hash/sp1/bench/poseidon2/Cargo.toml +++ b/hash/sp1/bench/poseidon2/Cargo.toml @@ -5,7 +5,7 @@ name = "poseidon2-program" edition = "2021" [dependencies] -sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" , rev = "4528b7861c60ef5e25c2d0b328fc6d244e2ac98e"} zkhash = {git = "https://github.com/HorizenLabs/poseidon2"} ark-serialize = "0.4" diff --git a/hash/sp1/bench/poseidon2/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/poseidon2/elf/riscv32im-succinct-zkvm-elf index 742a2c8eb9df5cfde75940a18a5fc05c0fa092ff..eb5740f1d3d270e1799f3e02511df73d72923904 100755 GIT binary patch delta 47232 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 diff --git a/hash/sp1/bench/script/Cargo.toml b/hash/sp1/bench/script/Cargo.toml index aa82847..f8cba27 100644 --- a/hash/sp1/bench/script/Cargo.toml +++ b/hash/sp1/bench/script/Cargo.toml @@ -5,7 +5,7 @@ name = "bench-script" edition = "2021" [dependencies] -sp1-core = { git = "https://github.com/succinctlabs/sp1.git" } +sp1-core = { git = "https://github.com/succinctlabs/sp1.git", rev = "4528b7861c60ef5e25c2d0b328fc6d244e2ac98e" } rand = "0.8" hex = "0.4" zkhash = {git = "https://github.com/HorizenLabs/poseidon2"} diff --git a/hash/sp1/bench/sha256/Cargo.toml b/hash/sp1/bench/sha256/Cargo.toml index 9973ccb..81b1556 100644 --- a/hash/sp1/bench/sha256/Cargo.toml +++ b/hash/sp1/bench/sha256/Cargo.toml @@ -5,6 +5,6 @@ name = "sha256-program" edition = "2021" [dependencies] -sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" } +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git" , rev = "4528b7861c60ef5e25c2d0b328fc6d244e2ac98e"} sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", branch = "patch-v0.10.8" } diff --git a/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf b/hash/sp1/bench/sha256/elf/riscv32im-succinct-zkvm-elf index 5c22e41a4268a0dd74ded1017877f1e2ba03a8c8..c5498709935e68d81f20299a9bcddd100292b30c 100755 GIT binary patch delta 8544 zcmbuDdz4kxeaC-$cm!c0cL0S3&_g?k7~yi>k0p;m)IbBGyhMTw=XIF@=Hbln5TOT^ zROBI}0~{1kyTV$*Rj6bQafl_A7F1$DXwp=hr4h4it5I4|Ye|J=zx&>O=Um3QGt<@c z&)m=cJ@#+^e!soXKC}N)-y@g$HcM>&PevW<-*UeH$U##E4E2eY&~fp1%5^QD^uOVT zDWzg~MDA~|@AUe19~wHFtM)qHI(@+Qy(JX`T7JL(PIj*4<`*oMYIR@uSc~qyi)i~b z5>01BB_)i8-c2;(h(x7C#7au&K5zg|34R}ZuD?VwnCnlQMU)zl@XMI70?h5X{K{PX zfcQBzi{}?P(c#?!8gF=OdJtB^oVEe+NDQ&WAF; zb>#bBU87vABq|>(QH5B+@WqHYEzxqpcYx21OSrCO#>bP&<{*iWe<=}^u+Bd8LhIg- z2lkFOFDDu{UZP_qx$sYb-<~MZIjHgF{IHJb@GBAx%bJzY;CiAxwnSrud?WZIxVPYm z4-lOKj}ZJL@P`HR(gvbWz`Jtth@Qj121g=E7z}JAs{cDqxq6%ujQFzkDQzOU^t0TA zyk676P0-ILX$zQ;G#(I_p9XIzkYBq3^#^|=E00QOCIMK?POWQU4UO*_+9i6Iu-JKseZclY97AsYTnp- z`qOPJs&I*V-vj1j-ihPw8z8Y{!JzgdtzUBUBWe&yU%1<@0FN(~F5d|6a1C{tbL~ zYQopI?ESBC?lT_ILhOQmS?9g!Vt``8SB^_a4^ay+e|Yz-1YZI(!9N3!e>Lg0nuoDn zAeV&vQ0v$)A~tz$712LUlV~yQcuw|JBe?G;YaRx(O$Y-i$!^B2j}T3VTmJBAzt?*H zzh|;&2`YGWdQ!p9!2MoJ)Sg*IWP^Dsx!G={mhP6Q8Grb+1JOBWXP`qw7`K7TXC@u; z5;~$8`a^_#5ipoeClnwx799>xHaskDG=uo1_Ad4qGg z_c)P!GMRQC_yCs0!{$f#Mesz(d6{?~v`s|o!TGRPfHUA>IeF{fUU6B}8|VMg`_Pi; zxoi+s=#6>Fq+7wMUnIFW1AYhc{I)!Z-rED#MUVzw3?mjM{$2yGT_n+JA^!|5{y}9s zt5ks=|GYq<3B_4^FU|=O&??%5aIr-7!tKPLPGB#Vu$SZWCG5=P z*EbUlsZKWekS)k`Rl>F43y>cb)*pk9Vv+penH$q~r5D@Al$xzX``?i0q!|Aj@GfvZ zqjx=l_ca)yX63(e7s8c(TiUKzScM?^B`NPAW)i&}Pc7`!IKHr}`H|j_5Qo2c^=fyTQ zwnJ|V`a@)PWqfb|n>4vC##whdS=1lFpA_(|D0S(Z5}^*+S^gT_41No4_^he6v88Ng zujo=U&d6=KPT@g6fkivNN|JLHY=aR^)@~3MJ+Xl2fF~93ZmjmeGs$T(>uI86@Xy(3nBnngmHVgPg@R$Pqi{SAEaxI>bVmD6y7Zh{qu_Qmk zvCh(8C)3;yz6`T`Q+%t1CubqhvvrHmM@L}-y8*))``5uIK61B+d-+T{hvpM&M z;quMkqp*Ko*#7~%aCtjN^yDlwRe`}5;LA|JYO(>$pN*YWlW@r#T;FgC^b_(0;C{`y zBb!h782B9o$X`*MUj-kyUZP7v{}g!NP>D*>ErTdx^lJ>vmn1qR6nf9aUMN^$HTW{N z+-f0zWFGFD>(G5!2aHaFx37`1?@T`7zz+7+&a$a>V-vmCeR0JGh;5Y{M zU7xJz-@)s@%x#Apc7*PJzQVaaxa3rqF| zxUgjNet?WVoIB*W{j*?sceZDuti$&)P=N_ii7bC>AzFDy?mXfK_kvHv5^Wdq9pL>~ zLB8pJ3qFP(8YAQr?!P*qz2L%tu5iu<5alMExCj|Q0Qnm21{Y@F5_t3zQhP>zP>B?K zsG-Q%Q{Xw@k!Zi@iPyk~zs&h7L(1!1oQzCM3fvXZJV&|9!*ko|7J|MAvwvK!ONco zi;Vo|)~ippZBJZvveAEl^+tU6i-4YMMnKp_`HU}YL59aXEYV?+qF4Gq zyRH?w87<>$zNLD8plg8{sHUnKnvqtt9;=!~HKUGRd+yXK>a?RzMK7xQwfWVesvW%= zJ=QEfy=Qeys!EMju4AI$&IEw4IJzuU7H`lT;vAl!zjo;hGO52VslNp`z+zg*!ws%&r3Zf$z5$+ulL^!EK%%z4z_ExZG=Hbq8tawHHOp4kq*cZDHCYa2UA7h3i9h`_w&1ᰩo1*VF_K=E<# z7u8=`&ZZ3Z4Nq20_%LNJGy?yQv>dN1$Cu&dayBf`1JiLr#qm@ho5obzH=&{WGCIbv z+>9@Wnr`B}F--*G+p?K4y>xOocc&U(dlS2%ZRfYyKQK$NeA`rH)v`22l^rE}D$3a< z)Hj5FT}^%U@~|=O8KJ5>s_JAy&({ny-gXlkYIPjV8sp$azPdDi7sgSi#(KBL**Oea zhNC?lsJ5j!$h@s7NLr8!Ug=6G=Y>&crdnRwnNaOYsCOmoEZha{@j6|YDqSr`DH2gU z{brVq0>yM(&(Fw8prc{UY;qK841FctsSH&wDnn6=%Ct^pQEoz=g0La&d#2_YzGG{d z&{Z;`%j7O(N*6M<3z?ReMV(C8RWL^0uoFA83z=0!7U6aw+eL(2<`kFVU@V$7bVPAk zL1wBurW@DH;)Y#hMlr~5c(A^yuF|VsQeE4WR!!YkG~1Ld)i(`GkKen6T^Ds6&Fw{M zaBG7~zpf!nXDrnXd_}f1njKiO*sQc9Y~ng~HR(_`16K<@hhLRLH6uK@wGUR+tx79O z#`PUFu-w2hyio2SjXD!6)RnQ?rBv%us&|w|SH)$JS6%DZ1!3CJoQz|6xC4c_^JjDs zws>`AG}jGHS##|mW5||ed0K#j)<=RZ!w%GR`;DMG%{l4zyHaGs!QcbaXlj%D8* zp9-ANcU4t49M!aR#fX1j%_iRBWx%eYdY-4an(y3^UcMafNX61M%XD;E<-c^*k##$s zwv<(-LPhueFbEYlFfhTNW=s2~EU59zCz|#~3S5jYg zZ7(*KvFB1&sD_3i+enk^xn>xDu#9bv9LrTKQ`JJ#&;s4ZWwK`@~6jJYuKXrL_M3Ea#VbJpwCPPA0N6E#5X^{wx=9FFcscW zZpO2;(2q|)z&1pdf=?CQ4joO^EZxHeqi2b-|Nn`S;i9}qqNsAgUAkOZK7CGkV^dr< zlZ|d0*2wm<6hbx8G@jVOdc_=tWkcXfIDKqEXdk!huKKu9Bzy16D_T%#UE8`M-mm}2Lb~HoqQ%tfr_E>k4IQ|y-yO*` z_Rsvgt|T)ou-D+s@ckoOr}y8!yWniU=1=xcV;7o7?=#upR%hRNEqLS+qU|?JG@TI@ z6fnAN7SZ6>B`P8!R!~6mz$tJ{@V|l2_RGk*{>s@z7r-*)oPRS1_WdLNavlV*zf0Jg zj}eUme>20a?|wYFp!it?v8+U*Gs4M^<{@W)HGJEAxH=-yC}H{m_y9N?%JkMDzrJ>} za;}VM#8`D9zNpNq$%2Pz|fd>oT z0sbsUehqv9yfY&Y=%ogt^|nNkFeq3;RR0F2Og)YXMtte|TmxS|oSBfDgKtX9g94g@fn7NY>%a%Vg~GuJ@Sz-e;WI>6asrqJKAj_f z9()4aN7$bPzmwzdp=Cs8kkKM8HxS`Q47@&3A`1gN<^Bq!5DK>n2Y&<3P4ORAv@ZIu z0nGWGM^rv3vinU9`U0FyeMv3RMflZ)-`OjPCPAJp)!tRt^MKXY^UBs!m$tG%bBKCR zi#lQmI%Lm@s3WFf+VS^G#PgosAmD@GNrLx-FM>-7GV*E5iJGQ>h5RC>Z2|8Tyy02c zza@dv1^hF57X#ZdVLD;R*MI;O1!wa!y7}rC!SK!HL|;4@ZK;0+pDvB~=H}i1GtPO@ zC0dAG&^PV8H=RqNnDCY10=m~jEx`Qa-BSs^3}%84fXBZbbzAvbY!}ESA^+>vvHu&e z$)y!UA3h{eIqY~&!b$}9aJ1(BFx!YQkdpLfT=N{!bhzaopZ3pNKmT$j3l^Y)N2f;> z{1n{xCz0BVONlHnPbD|og4EJ1iJI^apSA#AN@935j∋)CR7O3}`^}scU7$mvC(@ESIQWxK;jP0{dYBdoBFDfW1HY$R?ta%4n0{ zv>BPMh}Z#Ng#4(m{w4S*7Rf)JxnXTrd$FxdDSwe@?>iEm6yrYt?*wNvI(ZB3YcN7h z+kLI=p9oW83qBMl3 z`m%Auk9`-Z$Z=D!gQx<`KOXkfwjnpO_Zho8{JbA~b@&c=DcUH}9t@XypQstJ??Y8;_#NatxZlS0Kmg(g9rp@2rVf!igzEbM;*Zn;CEB6Q0@3K*Tjz%033K z`6{y=im~$xQPG1a5&vS)F9Of)HC%9S8Va5?ICHx537!C-#CDhj4bGdvC*Y5NF}yNw z`!?=;WDLU;aD^=xh;5T7B_e(YEFoeE3S52-e5M`-*w>uzS#W)cHh^8Gr&je|QA7Wq@m5jXf2_(Uktb|HTOyca9THr*-k zarDd>A(#K+`hc3ixdC0|oDLw!OsFhE1`t5DMq9wS88{CfwMA;r$RlM)v5OjtjC}_@ z_a2G%ik>(OKJ-<_UoledIyf1@5EC!yK5)xy+=ZAwz2e7QG~qmn9uN-yy%JA)HR{^B zCy@b7qBTPQ3-ALvezFN(QH34>m*R-y8T%1<#0wIACj6B{@vJ$AUJ%?HPq9X%kRL3?NaRWIXLGRa zg#7CB_+u$jE;29%hPgel4V>Gg{|(+*6GR8e{*Bmn>!K9R+Jp($M<>@haP{}WA|s!? zc-=`x&uzK>Ap12~UxMHHBA}O=5D<1zHsdp!k>N3GB|0QhbQJB~_!3quCK!Qh?#lM) zWPBmKdKU{~n(r!_qByo~CS_Z*!_9+PS)dpxUDY(%N+@b7;h9q@KHaIUtBspUJ!R>d zZKWLBaD6YSc&U`_8EVq7eA9N~iq>P*L|)CHqt~80HS;>{=u^@2s@^canpd@>SEI+8 z`KMPpI#pC!QsJmZqO885ZgGQC6ThKsFArrCie=4pT-DVS%a%>s)~1H94rOMbTaK#f zz9rkXkx&we_G((L>1duUYqn{dvZEzjFQF=qnbaKJH4IeK$}XpS)%NvtRIR+xZF`nF z>fWf@-X-0un(5_!Q+Lsbx|=X`S@RV;YTj-=7~z8bY)p7`H7TjxS_I_m4p}evReaH(QI3>QkJL7rm5LHv)`KgkfN8#_-o1({Gs$XgWM#& z$-0e``{d4pvi8R8)~4s0e6yuPZ{KzKoCocV!i%4_$=d}tRF)SuZPN2*Xy4o-pdf$e z^2SYj?|J{&S(A>_;2O^wUp>Jdy1uZ&=KrX0(6RmD#zit58%wEt|?)K%S3O~*1U98apJ8lLYb zbl;U#Q`O?pk=&hXIN)A3v~9;o_9ioRFJUCTgeJR+k#rqxY;y6_aXGz&`UWpqS5seE z?JbF`Nfqa#tvbmRZY@;_x8BR{FguQ>jd9!}UtJo14CA0vW4&AB^c)6NAvtkPbA8p< z+@!3Sj;X4d;FYd~a#k30W~ybSoe9;hgnC!P&ca>L9P|J@ejRqF+4lBWcFXvfVi_o& zt=f7rWhPZE{G^iIH(FCnTh(M)OPVQD^%GO$)z!EoRSi!$%TCA|ZZAzYO(lHzNmdrK zWz|z0-S!;Sc1_<6k37kwm~WaYHk|Ay98JcW`SWl>%vDpm<0&Z@FGJTd)zGYBuf}k8 zI7v&9ebv&Pl$8uWtzw&kl&gD&j7!;da1GeTR8*!XzqRaq;r7s8QPK_ub++J}YS`*q z4O`Y#)$>zH$8nQhSY6K+g)Kvw8gnc;;rXg#cuB*x5?=V~L3VrFz8W@##aumQt4SG8 z3{y+!4qoMug@;?%xNuS(`;YLQdNwbnCoTNo#Isu0RM&QmaNJXDd(2b~-_SKvO`!me zp@ttk#nuO!g=xV~0Exu(@`tCib`8|YeIU5x2d76zL-@Ttq3&cB# hWXEz=()P7ySn`3kHAh$rD><_p|0g0o{3k>D`#&VISKt5u