EIP-7594: Add asserts for public functions (#3684)

* Add length asserts for public PeerDAS functions

* Fix cell asserts

* Rename field variable to satisfy linter

* Add asserts for row/column indices

* Use CELLS_PER_EXT_BLOB

* Update to work with new spec changes

* Fix indentation

* Add explict check for cell_id
This commit is contained in:
Justin Traglia 2024-04-23 04:12:26 -05:00 committed by GitHub
parent e51f7df77d
commit 73637c84b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 22 additions and 0 deletions

View File

@ -426,6 +426,8 @@ def compute_cells_and_proofs(blob: Blob) -> Tuple[
Public method. Public method.
""" """
assert len(blob) == BYTES_PER_BLOB
polynomial = blob_to_polynomial(blob) polynomial = blob_to_polynomial(blob)
polynomial_coeff = polynomial_eval_to_coeff(polynomial) polynomial_coeff = polynomial_eval_to_coeff(polynomial)
@ -450,6 +452,8 @@ def compute_cells(blob: Blob) -> Vector[Cell, CELLS_PER_EXT_BLOB]:
Public method. Public method.
""" """
assert len(blob) == BYTES_PER_BLOB
polynomial = blob_to_polynomial(blob) polynomial = blob_to_polynomial(blob)
polynomial_coeff = polynomial_eval_to_coeff(polynomial) polynomial_coeff = polynomial_eval_to_coeff(polynomial)
@ -478,6 +482,11 @@ def verify_cell_proof(commitment_bytes: Bytes48,
Public method. Public method.
""" """
assert len(commitment_bytes) == BYTES_PER_COMMITMENT
assert cell_id < CELLS_PER_EXT_BLOB
assert len(cell) == BYTES_PER_CELL
assert len(proof_bytes) == BYTES_PER_PROOF
coset = coset_for_cell(cell_id) coset = coset_for_cell(cell_id)
return verify_kzg_proof_multi_impl( return verify_kzg_proof_multi_impl(
@ -510,6 +519,16 @@ def verify_cell_proof_batch(row_commitments_bytes: Sequence[Bytes48],
Public method. Public method.
""" """
assert len(cells) == len(proofs_bytes) == len(row_indices) == len(column_indices) assert len(cells) == len(proofs_bytes) == len(row_indices) == len(column_indices)
for commitment_bytes in row_commitments_bytes:
assert len(commitment_bytes) == BYTES_PER_COMMITMENT
for row_index in row_indices:
assert row_index < len(row_commitments_bytes)
for column_index in column_indices:
assert column_index < CELLS_PER_EXT_BLOB
for cell in cells:
assert len(cell) == BYTES_PER_CELL
for proof_bytes in proofs_bytes:
assert len(proof_bytes) == BYTES_PER_PROOF
# Get commitments via row IDs # Get commitments via row IDs
commitments_bytes = [row_commitments_bytes[row_index] for row_index in row_indices] commitments_bytes = [row_commitments_bytes[row_index] for row_index in row_indices]
@ -655,6 +674,9 @@ def recover_all_cells(cell_ids: Sequence[CellID], cells: Sequence[Cell]) -> Sequ
assert CELLS_PER_EXT_BLOB / 2 <= len(cell_ids) <= CELLS_PER_EXT_BLOB assert CELLS_PER_EXT_BLOB / 2 <= len(cell_ids) <= CELLS_PER_EXT_BLOB
# Check for duplicates # Check for duplicates
assert len(cell_ids) == len(set(cell_ids)) assert len(cell_ids) == len(set(cell_ids))
# Check that each cell is the correct length
for cell in cells:
assert len(cell) == BYTES_PER_CELL
# Get the extended domain # Get the extended domain
roots_of_unity_extended = compute_roots_of_unity(FIELD_ELEMENTS_PER_EXT_BLOB) roots_of_unity_extended = compute_roots_of_unity(FIELD_ELEMENTS_PER_EXT_BLOB)