mirror of
https://github.com/logos-storage/zk-benchmarks.git
synced 2026-01-07 16:23:11 +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",
|
"rayon",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arrayref"
|
||||||
|
version = "0.3.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arrayvec"
|
name = "arrayvec"
|
||||||
version = "0.7.6"
|
version = "0.7.6"
|
||||||
@ -554,6 +560,28 @@ dependencies = [
|
|||||||
"wyz",
|
"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]]
|
[[package]]
|
||||||
name = "block-buffer"
|
name = "block-buffer"
|
||||||
version = "0.10.4"
|
version = "0.10.4"
|
||||||
@ -742,6 +770,12 @@ version = "0.9.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
|
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "constant_time_eq"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "convert_case"
|
name = "convert_case"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@ -1259,6 +1293,8 @@ dependencies = [
|
|||||||
name = "guest"
|
name = "guest"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"blake2",
|
||||||
|
"blake3",
|
||||||
"jolt-sdk",
|
"jolt-sdk",
|
||||||
"sha2",
|
"sha2",
|
||||||
"sha3",
|
"sha3",
|
||||||
|
|||||||
@ -3,9 +3,9 @@ name = "guest"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[[bin]]
|
# [[bin]]
|
||||||
name = "guest"
|
# name = "guest"
|
||||||
path = "./src/lib.rs"
|
# path = "./src/lib.rs"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
guest = []
|
guest = []
|
||||||
@ -14,3 +14,5 @@ guest = []
|
|||||||
jolt = { package = "jolt-sdk", git = "https://github.com/a16z/jolt", rev = "4805d038f7b6e7ca5e7ef64aefa62213aecac01a"}
|
jolt = { package = "jolt-sdk", git = "https://github.com/a16z/jolt", rev = "4805d038f7b6e7ca5e7ef64aefa62213aecac01a"}
|
||||||
sha2 = { version = "0.10.8", default-features = false }
|
sha2 = { version = "0.10.8", default-features = false }
|
||||||
sha3 = { 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 sha2::{Sha256, Digest};
|
||||||
use sha3::Keccak256;
|
use sha3::Keccak256;
|
||||||
|
use blake3::hash;
|
||||||
|
use blake2::Blake2s256;
|
||||||
|
|
||||||
// sha256
|
// sha256
|
||||||
#[jolt::provable]
|
#[jolt::provable]
|
||||||
@ -21,3 +23,19 @@ fn sha3(input: &[u8]) -> [u8; 32] {
|
|||||||
let result = hasher.finalize();
|
let result = hasher.finalize();
|
||||||
Into::<[u8; 32]>::into(result)
|
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 sha2;
|
||||||
pub mod sha3;
|
pub mod sha3;
|
||||||
|
pub mod blake3;
|
||||||
|
pub mod blake2;
|
||||||
@ -5,6 +5,8 @@ mod benches;
|
|||||||
use benches::{
|
use benches::{
|
||||||
sha2::sha2_bench,
|
sha2::sha2_bench,
|
||||||
sha3::sha3_bench,
|
sha3::sha3_bench,
|
||||||
|
blake3::blake3_bench,
|
||||||
|
blake2::blake2_bench,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn generate_bytes(size: usize) -> Vec<u8> {
|
fn generate_bytes(size: usize) -> Vec<u8> {
|
||||||
@ -27,19 +29,33 @@ pub fn main() {
|
|||||||
|
|
||||||
match hash_type.as_str() {
|
match hash_type.as_str() {
|
||||||
"sha256" => {
|
"sha256" => {
|
||||||
println!("SHA256 Benchmarking: ");
|
println!("sha256 Benchmarking: ");
|
||||||
eprintln!("data size(bytes): {:?}", size);
|
eprintln!("data size(bytes): {:?}", size);
|
||||||
let input = generate_bytes(size);
|
let input = generate_bytes(size);
|
||||||
sha2_bench(input.clone());
|
sha2_bench(input.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
"keccak" => {
|
"keccak" => {
|
||||||
println!("KECCAK Benchmarking: ");
|
println!("keccak Benchmarking: ");
|
||||||
eprintln!("data size(bytes): {:?}", size);
|
eprintln!("data size(bytes): {:?}", size);
|
||||||
let input = generate_bytes(size);
|
let input = generate_bytes(size);
|
||||||
sha3_bench(input.clone());
|
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!");
|
println!("Wrong Benchmark Name!");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user