diff --git a/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs b/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs index d9c06b978fd..758a5fe86e2 100644 --- a/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs +++ b/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs @@ -91,17 +91,29 @@ public static bool VerifyProof(ReadOnlySpan commitment, ReadOnlySpan public static bool AreProofsValid(byte[][] blobs, byte[][] commitments, byte[][] proofs) { - var length = blobs.Length * Ckzg.Ckzg.BytesPerBlob; + if (blobs.Length is 1 && commitments.Length is 1 && proofs.Length is 1) + { + try + { + return Ckzg.Ckzg.VerifyBlobKzgProof(blobs[0], commitments[0], proofs[0], _ckzgSetup); + } + catch (Exception e) when (e is ArgumentException or ApplicationException or InsufficientMemoryException) + { + return false; + } + } + + int length = blobs.Length * Ckzg.Ckzg.BytesPerBlob; byte[] flatBlobsArray = ArrayPool.Shared.Rent(length); - var flatBlobs = new Span(flatBlobsArray, 0, length); + Span flatBlobs = new(flatBlobsArray, 0, length); length = blobs.Length * Ckzg.Ckzg.BytesPerCommitment; byte[] flatCommitmentsArray = ArrayPool.Shared.Rent(length); - var flatCommitments = new Span(flatCommitmentsArray, 0, length); + Span flatCommitments = new(flatCommitmentsArray, 0, length); length = blobs.Length * Ckzg.Ckzg.BytesPerProof; byte[] flatProofsArray = ArrayPool.Shared.Rent(length); - var flatProofs = new Span(flatProofsArray, 0, length); + Span flatProofs = new(flatProofsArray, 0, length); for (int i = 0; i < blobs.Length; i++) {