Skip to content

Commit

Permalink
Merge pull request #54 from kevaundray/kw/hash-to-field
Browse files Browse the repository at this point in the history
Modifies HashToBlsField to not use codec.NewWriter
  • Loading branch information
kevaundray authored Nov 18, 2022
2 parents a720ac1 + 3ef8a4d commit c4dbf02
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions crypto/kzg/kzg.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ package kzg

import (
"crypto/sha256"
"encoding/binary"
"encoding/json"
"errors"
"fmt"
Expand All @@ -16,7 +17,6 @@ import (

"github.com/ethereum/go-ethereum/params"
"github.com/protolambda/go-kzg/bls"
"github.com/protolambda/ztyp/codec"
)

const (
Expand Down Expand Up @@ -157,6 +157,10 @@ func BytesToBLSField(h [32]byte) *bls.Fr {
func ComputeAggregatedPolyAndCommitment(blobs Polynomials, commitments KZGCommitmentSequence) ([]bls.Fr, *bls.G1Point, *bls.Fr, error) {
// create challenges
r, err := HashToBLSField(blobs, commitments)
if err != nil {
return nil, nil, nil, err
}

powers := ComputePowers(r, len(blobs))
if len(powers) == 0 {
return nil, nil, nil, errors.New("powers can't be 0 length")
Expand Down Expand Up @@ -238,28 +242,32 @@ func EvaluatePolynomialInEvaluationForm(poly []bls.Fr, x *bls.Fr) *bls.Fr {
// https://github.com/ethereum/consensus-specs/blob/dev/specs/eip4844/polynomial-commitments.md#hash_to_bls_field
func HashToBLSField(polys Polynomials, comms KZGCommitmentSequence) (*bls.Fr, error) {
sha := sha256.New()
w := codec.NewEncodingWriter(sha)
if err := w.Write([]byte(FIAT_SHAMIR_PROTOCOL_DOMAIN)); err != nil {
return nil, err
}
if err := w.WriteUint64(params.FieldElementsPerBlob); err != nil {
return nil, err
}
if err := w.WriteUint64(uint64(len(polys))); err != nil {

_, err := sha.Write([]byte(FIAT_SHAMIR_PROTOCOL_DOMAIN))
if err != nil {
return nil, err
}

bytes := make([]byte, 8)
binary.LittleEndian.PutUint64(bytes, uint64(params.FieldElementsPerBlob))

bytes = make([]byte, 8)
binary.LittleEndian.PutUint64(bytes, uint64(len(polys)))

for _, poly := range polys {
for _, fe := range poly {
b32 := bls.FrTo32(&fe)
if err := w.Write(b32[:]); err != nil {
_, err := sha.Write(b32[:])
if err != nil {
return nil, err
}
}
}
l := comms.Len()
for i := 0; i < l; i++ {
c := comms.At(i)
if err := w.Write(c[:]); err != nil {
_, err := sha.Write(c[:])
if err != nil {
return nil, err
}
}
Expand Down

0 comments on commit c4dbf02

Please sign in to comment.