mirror of
https://github.com/logos-storage/zk-benchmarks.git
synced 2026-01-05 23:33:07 +00:00
benchmark for blake2b, blake3, cfg file added
This commit is contained in:
parent
0318e18032
commit
d14c0f827e
13
hash/risc0/bench/Cargo.lock
generated
13
hash/risc0/bench/Cargo.lock
generated
@ -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"
|
||||
|
||||
@ -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 }
|
||||
12
hash/risc0/bench/bench.cfg
Normal file
12
hash/risc0/bench/bench.cfg
Normal file
@ -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.
|
||||
@ -1,4 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Run the 'cargo bench' command.
|
||||
cargo build --release
|
||||
|
||||
67
hash/risc0/bench/methods/guest/Cargo.lock
generated
67
hash/risc0/bench/methods/guest/Cargo.lock
generated
@ -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"
|
||||
|
||||
@ -9,3 +9,6 @@ edition = "2021"
|
||||
# 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"
|
||||
sha2 ={ git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" }
|
||||
risc0-zkp = "0.19.1"
|
||||
blake3 = "1.5.0"
|
||||
@ -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<u8> = 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)
|
||||
|
||||
}
|
||||
|
||||
@ -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<u8> = 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)
|
||||
|
||||
}
|
||||
|
||||
@ -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<u8> = env::read();
|
||||
// let result: [u8;32] = Sha256::digest(data).into();
|
||||
// env::commit(&result)
|
||||
// }
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<u8>) {
|
||||
|
||||
let start_time = Instant::now();
|
||||
pub fn blake2b_bench(input: Vec<u8>) {
|
||||
|
||||
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();
|
||||
|
||||
|
||||
@ -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<u8>) {
|
||||
pub fn blake3_bench(input: Vec<u8>) {
|
||||
|
||||
|
||||
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();
|
||||
|
||||
|
||||
@ -1,2 +1,4 @@
|
||||
pub mod sha256;
|
||||
pub mod keccak;
|
||||
pub mod blake2b;
|
||||
pub mod blake3;
|
||||
@ -3,22 +3,22 @@ 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<u8>) {
|
||||
|
||||
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();
|
||||
@ -26,6 +26,7 @@ pub fn sha_bench(input: Vec<u8>) {
|
||||
// verify your receipt
|
||||
receipt.verify(SHA256_ID).unwrap();
|
||||
|
||||
let elapsed_time = start_time.elapsed();
|
||||
|
||||
eprintln!("Total time: {:?}", elapsed_time);
|
||||
eprintln!("Hash: {:?}", _output);
|
||||
}
|
||||
@ -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<u8> {
|
||||
fn main() {
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
|
||||
let mut flag = 0;
|
||||
// let mut flag = 0;
|
||||
|
||||
let hash_type = &args[1];
|
||||
let size_kb = args[2].parse::<usize>().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" {
|
||||
match hash_type.as_str() {
|
||||
"sha256" => {
|
||||
println!("SHA256 Benchmarking: ");
|
||||
sha_bench(input.clone());
|
||||
println!("");
|
||||
flag = 1;
|
||||
}
|
||||
|
||||
if hash_type == "all" || hash_type == "keccak" {
|
||||
"keccak" => {
|
||||
println!("KECCAK Benchmarking: ");
|
||||
keccak_bench(input.clone());
|
||||
println!("");
|
||||
flag = 1;
|
||||
}
|
||||
|
||||
if flag == 0 {
|
||||
println!("Wrong Benchmarking Name");
|
||||
"blake2b" => {
|
||||
println!("Blake2b Benchmarking: ");
|
||||
blake2b_bench(input.clone());
|
||||
}
|
||||
|
||||
"blake3" => {
|
||||
println!("Blake3 Benchmarking: ");
|
||||
blake3_bench(input.clone());
|
||||
}
|
||||
_ => {
|
||||
println!("Wrong Benchmark Name!");
|
||||
}
|
||||
}
|
||||
|
||||
println!("All Done!");
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user