poseidon2 benchmark over bn128(merkle) and baby_bear

This commit is contained in:
Manish Kumar 2023-12-18 23:56:55 +05:30
parent 8115ec38b3
commit ad841ce04d
12 changed files with 1328 additions and 26 deletions

View File

@ -0,0 +1,5 @@
{
"rust-analyzer.linkedProjects": [
"./methods/guest/Cargo.toml"
]
}

View File

@ -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",
]

View File

@ -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 }
methods = { workspace = true }
zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"}
ark-ff = "0.4.2"
hex = "0.4.3"
ark-serialize = "0.4"

View File

@ -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",
]

View File

@ -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"
blake3 = "1.5.0"
zkhash = { git = "https://github.com/HorizenLabs/poseidon2.git"}
ark-serialize = "0.4"

View File

@ -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<Vec<u8>> = env::read();
let cycles1 = env::get_cycle_count();
let mut hash_data: Vec<FpBabyBear> = 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<FpBabyBear> = permutation.permutation(&hash_data);
let cycles4 = env::get_cycle_count();
let mut perm_seralised: Vec<Vec<u8>> = Vec::new();
for i in 0..data.len() {
let mut temp: Vec<u8> = 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);
}

View File

@ -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<Vec<u8>> = env::read();
let cycles1 = env::get_cycle_count();
let mut hash_data: Vec<FpBN256> = 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<u8> = 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);
}

View File

@ -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

View File

@ -1,4 +1,6 @@
pub mod sha256;
pub mod keccak;
pub mod blake2b;
pub mod blake3;
pub mod blake3;
pub mod poseidon2_bn128;
pub mod poseidon2_babybear;

View File

@ -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<u8>> = 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<Vec<u8>> = receipt.journal.decode().unwrap();
let mut output_deseralised: Vec<Scalar> = 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<Scalar> = (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);
}

View File

@ -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<u8>> = 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<u8> = 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<Scalar> = (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);
}

View File

@ -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::<usize>().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!");
}