diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index 1fef5c28..a73c7040 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] @@ -62,9 +62,9 @@ dependencies = [ [[package]] name = "byte-slice-cast" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "c-kzg" @@ -95,9 +95,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", @@ -112,16 +112,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "constantine-core" -version = "0.1.0" -source = "git+https://github.com/mratsim/constantine#65147ed815d96fa94a05d307c1d9980877b7d0e8" +version = "0.2.0" +source = "git+https://github.com/mratsim/constantine#74faa5f6fed6cfabfdda76bd45bf492f2015877e" dependencies = [ "constantine-sys", ] [[package]] name = "constantine-ethereum-kzg" -version = "0.1.0" -source = "git+https://github.com/mratsim/constantine#65147ed815d96fa94a05d307c1d9980877b7d0e8" +version = "0.2.0" +source = "git+https://github.com/mratsim/constantine#74faa5f6fed6cfabfdda76bd45bf492f2015877e" dependencies = [ "constantine-core", "constantine-sys", @@ -129,22 +129,22 @@ dependencies = [ [[package]] name = "constantine-sys" -version = "0.1.0" -source = "git+https://github.com/mratsim/constantine#65147ed815d96fa94a05d307c1d9980877b7d0e8" +version = "0.2.0" +source = "git+https://github.com/mratsim/constantine#74faa5f6fed6cfabfdda76bd45bf492f2015877e" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crate_crypto_internal_eth_kzg_bls12_381" -version = "0.5.1" -source = "git+https://github.com/crate-crypto/rust-eth-kzg#27760b1744713fb6f8d854295b1d3522f2b425fa" +version = "0.5.4" +source = "git+https://github.com/crate-crypto/rust-eth-kzg#ca7a9e4002c1328abf80ba66838daefaa825dd89" dependencies = [ "blst", "blstrs", @@ -156,8 +156,8 @@ dependencies = [ [[package]] name = "crate_crypto_internal_eth_kzg_erasure_codes" -version = "0.5.1" -source = "git+https://github.com/crate-crypto/rust-eth-kzg#27760b1744713fb6f8d854295b1d3522f2b425fa" +version = "0.5.4" +source = "git+https://github.com/crate-crypto/rust-eth-kzg#ca7a9e4002c1328abf80ba66838daefaa825dd89" dependencies = [ "crate_crypto_internal_eth_kzg_bls12_381", "crate_crypto_internal_eth_kzg_polynomial", @@ -165,21 +165,21 @@ dependencies = [ [[package]] name = "crate_crypto_internal_eth_kzg_maybe_rayon" -version = "0.5.1" -source = "git+https://github.com/crate-crypto/rust-eth-kzg#27760b1744713fb6f8d854295b1d3522f2b425fa" +version = "0.5.4" +source = "git+https://github.com/crate-crypto/rust-eth-kzg#ca7a9e4002c1328abf80ba66838daefaa825dd89" [[package]] name = "crate_crypto_internal_eth_kzg_polynomial" -version = "0.5.1" -source = "git+https://github.com/crate-crypto/rust-eth-kzg#27760b1744713fb6f8d854295b1d3522f2b425fa" +version = "0.5.4" +source = "git+https://github.com/crate-crypto/rust-eth-kzg#ca7a9e4002c1328abf80ba66838daefaa825dd89" dependencies = [ "crate_crypto_internal_eth_kzg_bls12_381", ] [[package]] name = "crate_crypto_kzg_multi_open_fk20" -version = "0.5.1" -source = "git+https://github.com/crate-crypto/rust-eth-kzg#27760b1744713fb6f8d854295b1d3522f2b425fa" +version = "0.5.4" +source = "git+https://github.com/crate-crypto/rust-eth-kzg#ca7a9e4002c1328abf80ba66838daefaa825dd89" dependencies = [ "crate_crypto_internal_eth_kzg_bls12_381", "crate_crypto_internal_eth_kzg_maybe_rayon", @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", @@ -221,9 +221,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "bitvec", "rand_core", @@ -248,9 +248,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "group" @@ -279,9 +279,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" @@ -300,19 +300,18 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libfuzzer-sys" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" dependencies = [ "arbitrary", "cc", - "once_cell", ] [[package]] @@ -333,9 +332,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" [[package]] name = "pairing" @@ -348,18 +347,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" dependencies = [ "proc-macro2", ] @@ -396,8 +395,8 @@ dependencies = [ [[package]] name = "rust_eth_kzg" -version = "0.5.1" -source = "git+https://github.com/crate-crypto/rust-eth-kzg#27760b1744713fb6f8d854295b1d3522f2b425fa" +version = "0.5.4" +source = "git+https://github.com/crate-crypto/rust-eth-kzg#ca7a9e4002c1328abf80ba66838daefaa825dd89" dependencies = [ "crate_crypto_internal_eth_kzg_bls12_381", "crate_crypto_internal_eth_kzg_erasure_codes", @@ -409,24 +408,24 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -435,9 +434,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -470,9 +469,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.77" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -496,15 +495,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "version_check" diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 8de543e0..86f1c958 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -61,6 +61,12 @@ path = "fuzz_targets/fuzz_verify_blob_kzg_proof_batch.rs" test = false doc = false +[[bin]] +name = "fuzz_compute_cells" +path = "fuzz_targets/fuzz_compute_cells.rs" +test = false +doc = false + [[bin]] name = "fuzz_compute_cells_and_kzg_proofs" path = "fuzz_targets/fuzz_compute_cells_and_kzg_proofs.rs" diff --git a/fuzz/README.md b/fuzz/README.md index 504f27b3..9adbd6a1 100644 --- a/fuzz/README.md +++ b/fuzz/README.md @@ -58,6 +58,7 @@ List available targets like this: $ cargo fuzz list fuzz_blob_to_kzg_commitment fuzz_compute_blob_kzg_proof +fuzz_compute_cells fuzz_compute_cells_and_kzg_proofs fuzz_compute_kzg_proof fuzz_recover_cells_and_kzg_proofs diff --git a/fuzz/fuzz_targets/fuzz_compute_cells.rs b/fuzz/fuzz_targets/fuzz_compute_cells.rs new file mode 100644 index 00000000..55a11aa8 --- /dev/null +++ b/fuzz/fuzz_targets/fuzz_compute_cells.rs @@ -0,0 +1,46 @@ +// Run with the following command: +// cargo fuzz run fuzz_compute_cells_and_kzg_proofs + +#![no_main] +extern crate core; + +use c_kzg::Blob; +use c_kzg::KzgSettings; +use lazy_static::lazy_static; +use libfuzzer_sys::fuzz_target; +use rust_eth_kzg::DASContext; +use std::path::PathBuf; + +lazy_static! { + static ref KZG_SETTINGS: KzgSettings = { + let root_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); + let trusted_setup_file = root_dir.join("..").join("src").join("trusted_setup.txt"); + KzgSettings::load_trusted_setup_file(&trusted_setup_file, 8).unwrap() + }; + static ref DAS_CONTEXT: DASContext = DASContext::default(); +} + +fuzz_target!(|blob: Blob| { + let ckzg_result = KZG_SETTINGS.compute_cells(&blob); + let rkzg_result = DAS_CONTEXT.compute_cells(&blob.into_inner()); + + match (&ckzg_result, &rkzg_result) { + (Ok(ckzg_cells), Ok(rkzg_cells)) => { + // Ensure the results are the same. + for (ckzg_cell, rkzg_cell) in ckzg_cells.iter().zip(rkzg_cells.iter()) { + assert_eq!(ckzg_cell.to_bytes().as_slice(), rkzg_cell.as_slice()) + } + } + (Err(_), Err(_)) => { + // Cannot compare errors, they are unique. + } + _ => { + // There is a disagreement. + panic!( + "mismatch {:?} and {:?}", + &ckzg_result.is_ok(), + &rkzg_result.is_ok() + ); + } + } +}); diff --git a/fuzz/fuzz_targets/fuzz_recover_cells_and_kzg_proofs.rs b/fuzz/fuzz_targets/fuzz_recover_cells_and_kzg_proofs.rs index 823fef7f..60e8d7aa 100644 --- a/fuzz/fuzz_targets/fuzz_recover_cells_and_kzg_proofs.rs +++ b/fuzz/fuzz_targets/fuzz_recover_cells_and_kzg_proofs.rs @@ -35,7 +35,7 @@ fuzz_target!(|input: Input| { let ckzg_result = KZG_SETTINGS .recover_cells_and_kzg_proofs(input.cell_indices.as_slice(), input.cells.as_slice()); - let rkzg_result = DAS_CONTEXT.recover_cells_and_proofs(input.cell_indices, cells_bytes); + let rkzg_result = DAS_CONTEXT.recover_cells_and_kzg_proofs(input.cell_indices, cells_bytes); match (&ckzg_result, &rkzg_result) { (Ok((ckzg_cells, ckzg_proofs)), Ok((rkzg_cells, rkzg_proofs))) => {