mirror of
https://github.com/logos-storage/zk-benchmarks.git
synced 2026-01-03 14:23:12 +00:00
blake3 and blake2s hash benchmark
This commit is contained in:
parent
20210448a2
commit
739f15ef9e
36
hash/jolt/bench/Cargo.lock
generated
36
hash/jolt/bench/Cargo.lock
generated
@ -386,6 +386,12 @@ dependencies = [
|
||||
"rayon",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arrayref"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a"
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.7.6"
|
||||
@ -554,6 +560,28 @@ dependencies = [
|
||||
"wyz",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "blake2"
|
||||
version = "0.10.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
|
||||
dependencies = [
|
||||
"digest 0.10.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "blake3"
|
||||
version = "1.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"arrayvec",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"constant_time_eq",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.4"
|
||||
@ -742,6 +770,12 @@ version = "0.9.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
|
||||
|
||||
[[package]]
|
||||
name = "constant_time_eq"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.4.0"
|
||||
@ -1259,6 +1293,8 @@ dependencies = [
|
||||
name = "guest"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"blake2",
|
||||
"blake3",
|
||||
"jolt-sdk",
|
||||
"sha2",
|
||||
"sha3",
|
||||
|
||||
@ -3,9 +3,9 @@ name = "guest"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[[bin]]
|
||||
name = "guest"
|
||||
path = "./src/lib.rs"
|
||||
# [[bin]]
|
||||
# name = "guest"
|
||||
# path = "./src/lib.rs"
|
||||
|
||||
[features]
|
||||
guest = []
|
||||
@ -14,3 +14,5 @@ guest = []
|
||||
jolt = { package = "jolt-sdk", git = "https://github.com/a16z/jolt", rev = "4805d038f7b6e7ca5e7ef64aefa62213aecac01a"}
|
||||
sha2 = { version = "0.10.8", default-features = false }
|
||||
sha3 = { version = "0.10.8", default-features = false }
|
||||
blake3 = { version = "1.5.4", default-features = false }
|
||||
blake2 = { version = "0.10.6", default-features = false }
|
||||
@ -3,6 +3,8 @@
|
||||
|
||||
use sha2::{Sha256, Digest};
|
||||
use sha3::Keccak256;
|
||||
use blake3::hash;
|
||||
use blake2::Blake2s256;
|
||||
|
||||
// sha256
|
||||
#[jolt::provable]
|
||||
@ -21,3 +23,19 @@ fn sha3(input: &[u8]) -> [u8; 32] {
|
||||
let result = hasher.finalize();
|
||||
Into::<[u8; 32]>::into(result)
|
||||
}
|
||||
|
||||
// blake3
|
||||
#[jolt::provable]
|
||||
fn blake3(input: &[u8]) -> [u8; 32] {
|
||||
let result = hash(input);
|
||||
Into::<[u8; 32]>::into(result)
|
||||
}
|
||||
|
||||
// blake2
|
||||
#[jolt::provable]
|
||||
fn blake2(input: &[u8]) -> [u8; 32] {
|
||||
let mut hasher = Blake2s256::new();
|
||||
hasher.update(input);
|
||||
let result = hasher.finalize();
|
||||
Into::<[u8; 32]>::into(result)
|
||||
}
|
||||
|
||||
42
hash/jolt/bench/src/benches/blake2.rs
Normal file
42
hash/jolt/bench/src/benches/blake2.rs
Normal file
@ -0,0 +1,42 @@
|
||||
use std::time::Instant;
|
||||
use ark_serialize::CanonicalSerialize;
|
||||
|
||||
pub fn blake2_bench(input: Vec<u8>) {
|
||||
|
||||
let (prove_blake2, verify_blake2, guest_build_time) = {
|
||||
|
||||
let start = Instant::now();
|
||||
let (prove, verify) = guest::build_blake2();
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
(prove, verify, elapsed)
|
||||
};
|
||||
|
||||
let (output, proof, proving_time) = {
|
||||
|
||||
let start = Instant::now();
|
||||
let (output, proof) = prove_blake2(input.as_slice());
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
(output, proof, elapsed)
|
||||
};
|
||||
|
||||
let mut proof_bytes = Vec::new();
|
||||
proof.serialize_compressed(&mut proof_bytes).unwrap();
|
||||
|
||||
let (is_valid, verification_time) = {
|
||||
|
||||
let start = Instant::now();
|
||||
let is_valid = verify_blake2(proof);
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
(is_valid, elapsed)
|
||||
};
|
||||
|
||||
assert!(is_valid);
|
||||
println!("output: {:?}", hex::encode(output));
|
||||
println!("guest build time: {:?}", guest_build_time);
|
||||
println!("proving time: {:?}", proving_time);
|
||||
println!("verification time: {:?}", verification_time);
|
||||
println!("proof size: {:?} bytes", proof_bytes.len());
|
||||
}
|
||||
42
hash/jolt/bench/src/benches/blake3.rs
Normal file
42
hash/jolt/bench/src/benches/blake3.rs
Normal file
@ -0,0 +1,42 @@
|
||||
use std::time::Instant;
|
||||
use ark_serialize::CanonicalSerialize;
|
||||
|
||||
pub fn blake3_bench(input: Vec<u8>) {
|
||||
|
||||
let (prove_blake3, verify_blake3, guest_build_time) = {
|
||||
|
||||
let start = Instant::now();
|
||||
let (prove, verify) = guest::build_blake3();
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
(prove, verify, elapsed)
|
||||
};
|
||||
|
||||
let (output, proof, proving_time) = {
|
||||
|
||||
let start = Instant::now();
|
||||
let (output, proof) = prove_blake3(input.as_slice());
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
(output, proof, elapsed)
|
||||
};
|
||||
|
||||
let mut proof_bytes = Vec::new();
|
||||
proof.serialize_compressed(&mut proof_bytes).unwrap();
|
||||
|
||||
let (is_valid, verification_time) = {
|
||||
|
||||
let start = Instant::now();
|
||||
let is_valid = verify_blake3(proof);
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
(is_valid, elapsed)
|
||||
};
|
||||
|
||||
assert!(is_valid);
|
||||
println!("output: {:?}", hex::encode(output));
|
||||
println!("guest build time: {:?}", guest_build_time);
|
||||
println!("proving time: {:?}", proving_time);
|
||||
println!("verification time: {:?}", verification_time);
|
||||
println!("proof size: {:?} bytes", proof_bytes.len());
|
||||
}
|
||||
@ -1,2 +1,4 @@
|
||||
pub mod sha2;
|
||||
pub mod sha3;
|
||||
pub mod sha3;
|
||||
pub mod blake3;
|
||||
pub mod blake2;
|
||||
@ -5,6 +5,8 @@ mod benches;
|
||||
use benches::{
|
||||
sha2::sha2_bench,
|
||||
sha3::sha3_bench,
|
||||
blake3::blake3_bench,
|
||||
blake2::blake2_bench,
|
||||
};
|
||||
|
||||
fn generate_bytes(size: usize) -> Vec<u8> {
|
||||
@ -27,18 +29,32 @@ pub fn main() {
|
||||
|
||||
match hash_type.as_str() {
|
||||
"sha256" => {
|
||||
println!("SHA256 Benchmarking: ");
|
||||
println!("sha256 Benchmarking: ");
|
||||
eprintln!("data size(bytes): {:?}", size);
|
||||
let input = generate_bytes(size);
|
||||
sha2_bench(input.clone());
|
||||
}
|
||||
|
||||
"keccak" => {
|
||||
println!("KECCAK Benchmarking: ");
|
||||
println!("keccak Benchmarking: ");
|
||||
eprintln!("data size(bytes): {:?}", size);
|
||||
let input = generate_bytes(size);
|
||||
sha3_bench(input.clone());
|
||||
}
|
||||
|
||||
"blake3" => {
|
||||
println!("blake3 Benchmarking: ");
|
||||
eprintln!("data size(bytes): {:?}", size);
|
||||
let input = generate_bytes(size);
|
||||
blake3_bench(input.clone());
|
||||
}
|
||||
|
||||
"blake2" => {
|
||||
println!("blake2 Benchmarking: ");
|
||||
eprintln!("data size(bytes): {:?}", size);
|
||||
let input = generate_bytes(size);
|
||||
blake2_bench(input.clone());
|
||||
}
|
||||
|
||||
_ => {
|
||||
println!("Wrong Benchmark Name!");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user