Update Compute*KZGProof in go bindings (#181)

This commit is contained in:
Justin Traglia 2023-03-08 04:45:54 -07:00 committed by GitHub
parent ccf1a4fdf0
commit b71746df74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 11 deletions

View File

@ -141,22 +141,25 @@ func BlobToKZGCommitment(blob Blob) (KZGCommitment, CKzgRet) {
ComputeKZGProof is the binding for:
C_KZG_RET compute_kzg_proof(
KZGProof *out,
KZGProof *proof_out,
Bytes32 *y_out,
const Blob *blob,
const Bytes32 *z_bytes,
const KZGSettings *s);
*/
func ComputeKZGProof(blob Blob, zBytes Bytes32) (KZGProof, CKzgRet) {
func ComputeKZGProof(blob Blob, zBytes Bytes32) (KZGProof, Bytes32, CKzgRet) {
if !loaded {
panic("trusted setup isn't loaded")
}
proof := KZGProof{}
y := Bytes32{}
ret := C.compute_kzg_proof(
(*C.KZGProof)(unsafe.Pointer(&proof)),
(*C.Bytes32)(unsafe.Pointer(&y)),
(*C.Blob)(unsafe.Pointer(&blob)),
(*C.Bytes32)(unsafe.Pointer(&zBytes)),
&settings)
return proof, CKzgRet(ret)
return proof, y, CKzgRet(ret)
}
/*
@ -165,9 +168,10 @@ ComputeBlobKZGProof is the binding for:
C_KZG_RET compute_blob_kzg_proof(
KZGProof *out,
const Blob *blob,
const Bytes48 *commitment_bytes,
const KZGSettings *s);
*/
func ComputeBlobKZGProof(blob Blob) (KZGProof, CKzgRet) {
func ComputeBlobKZGProof(blob Blob, commitmentBytes Bytes48) (KZGProof, CKzgRet) {
if !loaded {
panic("trusted setup isn't loaded")
}
@ -175,6 +179,7 @@ func ComputeBlobKZGProof(blob Blob) (KZGProof, CKzgRet) {
ret := C.compute_blob_kzg_proof(
(*C.KZGProof)(unsafe.Pointer(&proof)),
(*C.Blob)(unsafe.Pointer(&blob)),
(*C.Bytes48)(unsafe.Pointer(&commitmentBytes)),
&settings)
return proof, CKzgRet(ret)
}

View File

@ -153,7 +153,7 @@ func TestComputeKZGProof(t *testing.T) {
Blob Blob `yaml:"blob"`
Z Bytes32 `yaml:"z"`
}
Output *Bytes48 `yaml:"output"`
Output *[]string `yaml:"output"`
}
tests, err := filepath.Glob(computeKZGProofTests)
@ -167,10 +167,17 @@ func TestComputeKZGProof(t *testing.T) {
require.NoError(t, testFile.Close())
require.NoError(t, err)
proof, ret := ComputeKZGProof(test.Input.Blob, test.Input.Z)
proof, y, ret := ComputeKZGProof(test.Input.Blob, test.Input.Z)
if ret == C_KZG_OK {
require.NotNil(t, test.Output)
require.Equal(t, test.Output[:], proof[:])
var expectedProof Bytes48
err = expectedProof.UnmarshalText([]byte((*test.Output)[0]))
require.NoError(t, err)
require.Equal(t, expectedProof[:], proof[:])
var expectedY Bytes32
err = expectedY.UnmarshalText([]byte((*test.Output)[1]))
require.NoError(t, err)
require.Equal(t, expectedY[:], y[:])
} else {
require.Nil(t, test.Output)
}
@ -180,7 +187,8 @@ func TestComputeKZGProof(t *testing.T) {
func TestComputeBlobKZGProof(t *testing.T) {
type Test struct {
Input struct {
Blob Blob `yaml:"blob"`
Blob Blob `yaml:"blob"`
Commitment Bytes48 `yaml:"commitment"`
}
Output *Bytes48 `yaml:"output"`
}
@ -196,7 +204,7 @@ func TestComputeBlobKZGProof(t *testing.T) {
require.NoError(t, testFile.Close())
require.NoError(t, err)
proof, ret := ComputeBlobKZGProof(test.Input.Blob)
proof, ret := ComputeBlobKZGProof(test.Input.Blob, test.Input.Commitment)
if ret == C_KZG_OK {
require.NotNil(t, test.Output)
require.Equal(t, test.Output[:], proof[:])
@ -324,7 +332,7 @@ func Benchmark(b *testing.B) {
blob := GetRandBlob(int64(i))
commitment, ret := BlobToKZGCommitment(blob)
require.Equal(b, ret, C_KZG_OK)
proof, ret := ComputeBlobKZGProof(blob)
proof, ret := ComputeBlobKZGProof(blob, Bytes48(commitment))
require.Equal(b, ret, C_KZG_OK)
blobs[i] = blob
@ -351,7 +359,7 @@ func Benchmark(b *testing.B) {
b.Run("ComputeBlobKZGProof", func(b *testing.B) {
for n := 0; n < b.N; n++ {
ComputeBlobKZGProof(blobs[0])
ComputeBlobKZGProof(blobs[0], commitments[0])
}
})