From ff340068079a26a28e1695beb43e75b5dc011110 Mon Sep 17 00:00:00 2001 From: George Kadianakis Date: Wed, 9 Nov 2022 14:01:47 +0200 Subject: [PATCH] Refactor `verify_kzg_proof()` to receive bytes (used in precompile) This way, client devs don't need to convert to field elements themselves, and the KZG library takes care fo it. --- specs/eip4844/polynomial-commitments.md | 23 ++++++++++++++++--- .../test_polynomial_commitments.py | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/specs/eip4844/polynomial-commitments.md b/specs/eip4844/polynomial-commitments.md index 2c142c04b..05e19c22a 100644 --- a/specs/eip4844/polynomial-commitments.md +++ b/specs/eip4844/polynomial-commitments.md @@ -32,6 +32,7 @@ - [KZG](#kzg) - [`blob_to_kzg_commitment`](#blob_to_kzg_commitment) - [`verify_kzg_proof`](#verify_kzg_proof) + - [`verify_kzg_proof_impl`](#verify_kzg_proof_impl) - [`compute_kzg_proof`](#compute_kzg_proof) - [`compute_aggregated_poly_and_commitment`](#compute_aggregated_poly_and_commitment) - [`compute_aggregate_kzg_proof`](#compute_aggregate_kzg_proof) @@ -296,11 +297,27 @@ def blob_to_kzg_commitment(blob: Blob) -> KZGCommitment: ```python def verify_kzg_proof(polynomial_kzg: KZGCommitment, - z: BLSFieldElement, - y: BLSFieldElement, + z: Bytes32, + y: Bytes32, kzg_proof: KZGProof) -> bool: """ Verify KZG proof that ``p(z) == y`` where ``p(z)`` is the polynomial represented by ``polynomial_kzg``. + Receives inputs as bytes. + Public method. + """ + return verify_kzg_proof_impl(polynomial_kzg, bytes_to_bls_field(z), bytes_to_bls_field(y), kzg_proof) +``` + + +#### `verify_kzg_proof_impl` + +```python +def verify_kzg_proof_impl(polynomial_kzg: KZGCommitment, + z: BLSFieldElement, + y: BLSFieldElement, + kzg_proof: KZGProof) -> bool: + """ + Verify KZG proof that ``p(z) == y`` where ``p(z)`` is the polynomial represented by ``polynomial_kzg``. """ # Verify: P - y = Q * (X - z) X_minus_z = bls.add(bls.bytes96_to_G2(KZG_SETUP_G2[1]), bls.multiply(bls.G2, BLS_MODULUS - z)) @@ -390,5 +407,5 @@ def verify_aggregate_kzg_proof(blobs: Sequence[Blob], y = evaluate_polynomial_in_evaluation_form(aggregated_poly, evaluation_challenge) # Verify aggregated proof - return verify_kzg_proof(aggregated_poly_commitment, evaluation_challenge, y, kzg_aggregated_proof) + return verify_kzg_proof_impl(aggregated_poly_commitment, evaluation_challenge, y, kzg_aggregated_proof) ``` diff --git a/tests/core/pyspec/eth2spec/test/eip4844/unittests/polynomial_commitments/test_polynomial_commitments.py b/tests/core/pyspec/eth2spec/test/eip4844/unittests/polynomial_commitments/test_polynomial_commitments.py index dea6aeb8c..3e9e2cb63 100644 --- a/tests/core/pyspec/eth2spec/test/eip4844/unittests/polynomial_commitments/test_polynomial_commitments.py +++ b/tests/core/pyspec/eth2spec/test/eip4844/unittests/polynomial_commitments/test_polynomial_commitments.py @@ -17,4 +17,4 @@ def test_verify_kzg_proof(spec, state): proof = spec.compute_kzg_proof(polynomial, x) y = spec.evaluate_polynomial_in_evaluation_form(polynomial, x) - assert spec.verify_kzg_proof(commitment, x, y, proof) + assert spec.verify_kzg_proof_impl(commitment, x, y, proof)