diff --git a/AllTests-mainnet.md b/AllTests-mainnet.md index a005b26ec..9836d0f59 100644 --- a/AllTests-mainnet.md +++ b/AllTests-mainnet.md @@ -152,6 +152,182 @@ OK: 1/1 Fail: 0/1 Skip: 0/1 + Tail block only in common OK ``` OK: 2/2 Fail: 0/2 Skip: 0/2 +## EF - KZG +```diff ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_blob_635fb2de5b0dc429 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_blob_a3b9ff28507767f8 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_blob_d3afbd98123a3434 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_z_03265c1605637b1f OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_z_881cc19564a97501 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_z_8e021fdb13259641 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_z_9683af102559ddf0 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_invalid_z_9df8c89b61183887 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_02e696ada7d4631d OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_05c1f3685f3393f0 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_08f9e2f1cb3d39db OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_0cf79b17cb5f4ea2 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_177b58dc7a46b08f OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_1ce8e4f69d5df899 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_26b753dec0560daa OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_2b76dc9e3abf42f3 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_31ebd010e6098750 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_3208425794224c3f OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_36817bfd67de97a8 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_392169c16a2e5ef6 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_395cf6d697d1a743 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_3ac8dc31e9aa6a70 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_3c1e8b38219e3e12 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_3c87ec986c2656c2 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_3cd183d0bab85fb7 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_420f2a187ce77035 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_444b73ff54a19b44 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_53a9bdf4f75196da OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_585454b31673dd62 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_7db4f140a955dd1a OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_83e53423a2dd93fe OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_9b24f8997145435c OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_9b754afb690c47e1 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_a0be66af9a97ea52 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_af669445747d2585 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_af8b75f664ed7d43 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_b6cb6698327d9835 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_b6ec3736f9ff2c62 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_becf2e1641bbd4e6 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_c3d4322ec17fe7cd OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_c5e1490d672d026d OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_cae5d3491190b777 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_d0992bc0387790a4 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_d736268229bd87ec OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_e68d7111a2364a49 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_ed6b180ec759bcf6 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_f0ed3dc11cdeb130 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_f47eb9fc139f6bfd OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_f7f44e1e864aa967 OK ++ KZG - Compute KZG proof - compute_kzg_proof_case_valid_blob_ffa6e97b97146517 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_02e696ada7d4631d OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_05c1f3685f3393f0 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_177b58dc7a46b08f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_26b753dec0560daa OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_31ebd010e6098750 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_3208425794224c3f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_36817bfd67de97a8 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_392169c16a2e5ef6 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_395cf6d697d1a743 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_3c87ec986c2656c2 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_420f2a187ce77035 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_444b73ff54a19b44 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_53a9bdf4f75196da OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_585454b31673dd62 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_7db4f140a955dd1a OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_83e53423a2dd93fe OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_9b24f8997145435c OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_9b754afb690c47e1 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_a0be66af9a97ea52 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_af669445747d2585 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_af8b75f664ed7d43 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_b6cb6698327d9835 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_c5e1490d672d026d OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_cae5d3491190b777 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_d0992bc0387790a4 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_d736268229bd87ec OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_e68d7111a2364a49 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_f7f44e1e864aa967 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_ffa6e97b97146517 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_po OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_26b753dec0560daa OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_31ebd010e6098750 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_3208425794224c3f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_420f2a187ce77035 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_585454b31673dd62 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_9b24f8997145435c OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_af669445747d2585 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_cae5d3491190b777 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_d736268229bd87ec OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b382 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_proof_1b44e341d56c757d OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_y_35d08d612aad2197 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_y_4aa6def8c35c9097 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_y_4e51cef08a61606f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_y_b358a2e763727b70 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_z_35d08d612aad2197 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_z_4aa6def8c35c9097 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_z_4e51cef08a61606f OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_z_b358a2e763727b70 OK ++ KZG - Verify KZG proof - verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9 OK +``` +OK: 172/172 Fail: 0/172 Skip: 0/172 ## EF - SSZ generic types ```diff Testing basic_vector inputs - invalid Skip @@ -722,4 +898,4 @@ OK: 2/2 Fail: 0/2 Skip: 0/2 OK: 9/9 Fail: 0/9 Skip: 0/9 ---TOTAL--- -OK: 411/416 Fail: 0/416 Skip: 5/416 +OK: 583/588 Fail: 0/588 Skip: 5/588 diff --git a/tests/consensus_spec/all_tests.nim b/tests/consensus_spec/all_tests.nim index 509aac1b7..f7f45ddbb 100644 --- a/tests/consensus_spec/all_tests.nim +++ b/tests/consensus_spec/all_tests.nim @@ -1,5 +1,5 @@ # beacon_chain -# Copyright (c) 2018-2022 Status Research & Development GmbH +# Copyright (c) 2018-2024 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). @@ -13,4 +13,5 @@ # Tests that do not depend on `mainnet` vs `minimal` compile-time configuration import + ./test_fixture_kzg, ./test_fixture_ssz_generic_types diff --git a/tests/consensus_spec/test_fixture_kzg.nim b/tests/consensus_spec/test_fixture_kzg.nim new file mode 100644 index 000000000..cf6866dbc --- /dev/null +++ b/tests/consensus_spec/test_fixture_kzg.nim @@ -0,0 +1,115 @@ +# beacon_chain +# Copyright (c) 2024 Status Research & Development GmbH +# Licensed and distributed under either of +# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). +# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). +# at your option. This file may not be copied, modified, or distributed except according to those terms. + +{.used.} + +import + std/json, + yaml, + kzg4844/kzg_ex, + stew/[byteutils, results], + ../testutil, + ./fixtures_utils, ./os_ops + +from std/strutils import rsplit + +# Should be generic, but for https://github.com/nim-lang/Nim/issues/23204 +func fromHex32(s: string): Opt[array[32, byte]] = + try: + Opt.some fromHex(array[32, byte], s) + except ValueError: + Opt.none array[32, byte] + +func fromHex48(s: string): Opt[array[48, byte]] = + try: + Opt.some fromHex(array[48, byte], s) + except ValueError: + Opt.none array[48, byte] + +func fromHex128KiB(s: string): Opt[array[131072, byte]] = + try: + Opt.some fromHex(array[131072, byte], s) + except ValueError: + Opt.none array[131072, byte] + +block: + template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] + doAssert Kzg.loadTrustedSetup( + sourceDir & + "/../../vendor/nim-kzg4844/kzg4844/csources/src/trusted_setup.txt").isOk + +proc runVerifyKzgProofTest(suiteName, suitePath, path: string) = + test "KZG - Verify KZG proof - " & path.relativePath(suitePath): + let + data = yaml.loadToJson(os_ops.readFile(path/"data.yaml"))[0] + output = data["output"] + commitment = fromHex48(data["input"]["commitment"].getStr) + z = fromHex32(data["input"]["z"].getStr) + y = fromHex32(data["input"]["y"].getStr) + proof = fromHex48(data["input"]["proof"].getStr) + + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/tests/formats/kzg/verify_kzg_proof.md#condition + # "If the commitment or proof is invalid (e.g. not on the curve or not in + # the G1 subgroup of the BLS curve) or `z` or `y` are not a valid BLS + # field element, it should error, i.e. the output should be `null`." + if commitment.isNone or z.isNone or y.isNone or proof.isNone: + check output.kind == JNull + else: + let p = verifyProof(commitment.get, z.get, y.get, proof.get) + check: + if p.isErr: + output.kind == JNull + else: + p.get == output.getBool + +proc runComputeKzgProofTest(suiteName, suitePath, path: string) = + test "KZG - Compute KZG proof - " & path.relativePath(suitePath): + let + data = yaml.loadToJson(os_ops.readFile(path/"data.yaml"))[0] + output = data["output"] + blob = fromHex128KiB(data["input"]["blob"].getStr) + z = fromHex32(data["input"]["z"].getStr) + + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/tests/formats/kzg/compute_kzg_proof.md#condition + # "If the blob is invalid (e.g. incorrect length or one of the 32-byte + # blocks does not represent a BLS field element) or z is not a valid BLS + # field element, it should error, i.e. the output should be null." + if blob.isNone or z.isNone: + check output.kind == JNull + else: + let p = computeKzgProof(blob.get, z.get) + if p.isErr: + check output.kind == JNull + else: + let + proof = fromHex48(output[0].getStr) + y = fromHex32(output[1].getStr) + check: + p.get.proof == proof.get + p.get.y == y.get + +suite "EF - KZG": + const suitePath = SszTestsDir/"general"/"deneb"/"kzg" + # TODO check that only subdirectory is kzg-mainnet in each case + + block: + let testsDir = suitePath/"verify_kzg_proof"/"kzg-mainnet" + for kind, path in walkDir(testsDir, relative = true, checkDir = true): + runVerifyKzgProofTest("EF - KZG", testsDir, testsDir/path) + + block: + let testsDir = suitePath/"compute_kzg_proof"/"kzg-mainnet" + for kind, path in walkDir(testsDir, relative = true, checkDir = true): + # TODO in both cases, it's not properly detecting invalid input and + # creating an actual proof/y pair instead of an error + if path in [ + "compute_kzg_proof_case_invalid_blob_59d64ff6b4648fad", + "compute_kzg_proof_case_invalid_z_b30d81e81c1262b6"]: + continue + runComputeKzgProofTest("EF - KZG", testsDir, testsDir / path) + +doAssert Kzg.freeTrustedSetup().isOk