diff --git a/beacon-chain/core/peerdas/p2p_interface.go b/beacon-chain/core/peerdas/p2p_interface.go index 46b49fdd9f04..942c278de111 100644 --- a/beacon-chain/core/peerdas/p2p_interface.go +++ b/beacon-chain/core/peerdas/p2p_interface.go @@ -79,10 +79,30 @@ func VerifyDataColumnsSidecarKZGProofs(sidecars []blocks.RODataColumn) error { for _, sidecar := range sidecars { for i := range sidecar.Column { - commitments = append(commitments, kzg.Bytes48(sidecar.KzgCommitments[i])) + var ( + commitment kzg.Bytes48 + cell kzg.Cell + proof kzg.Bytes48 + ) + + commitmentBytes := sidecar.KzgCommitments[i] + cellBytes := sidecar.Column[i] + proofBytes := sidecar.KzgProofs[i] + + if len(commitmentBytes) != len(commitment) || + len(cellBytes) != len(cell) || + len(proofBytes) != len(proof) { + return ErrMismatchLength + } + + copy(commitment[:], commitmentBytes) + copy(cell[:], cellBytes) + copy(proof[:], proofBytes) + + commitments = append(commitments, commitment) indices = append(indices, sidecar.Index) - cells = append(cells, kzg.Cell(sidecar.Column[i])) - proofs = append(proofs, kzg.Bytes48(sidecar.KzgProofs[i])) + cells = append(cells, cell) + proofs = append(proofs, proof) } } diff --git a/beacon-chain/core/peerdas/p2p_interface_test.go b/beacon-chain/core/peerdas/p2p_interface_test.go index 3b4c20e35c4e..882690af712d 100644 --- a/beacon-chain/core/peerdas/p2p_interface_test.go +++ b/beacon-chain/core/peerdas/p2p_interface_test.go @@ -68,6 +68,14 @@ func TestVerifyDataColumnSidecarKZGProofs(t *testing.T) { err := kzg.Start() require.NoError(t, err) + t.Run("size mismatch", func(t *testing.T) { + sidecars := generateRandomSidecars(t, seed, blobCount) + sidecars[0].Column[0] = sidecars[0].Column[0][:len(sidecars[0].Column[0])-1] // Remove one byte to create size mismatch + + err := peerdas.VerifyDataColumnsSidecarKZGProofs(sidecars) + require.ErrorIs(t, err, peerdas.ErrMismatchLength) + }) + t.Run("invalid proof", func(t *testing.T) { sidecars := generateRandomSidecars(t, seed, blobCount) sidecars[0].Column[0][0]++ // It is OK to overflow diff --git a/changelog/manu-verify-data-column-sidecar-kzg-proofs.md b/changelog/manu-verify-data-column-sidecar-kzg-proofs.md new file mode 100644 index 000000000000..9f54a3f97afb --- /dev/null +++ b/changelog/manu-verify-data-column-sidecar-kzg-proofs.md @@ -0,0 +1,2 @@ +### Fixed +- `VerifyDataColumnsSidecarKZGProofs`: Check if sizes match.