mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 21:38:05 -05:00
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package peerdas_test
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"encoding/binary"
|
|
|
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/kzg"
|
|
"github.com/consensys/gnark-crypto/ecc/bls12-381/fr"
|
|
GoKZG "github.com/crate-crypto/go-kzg-4844"
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func generateCommitment(blob *kzg.Blob) (*kzg.Commitment, error) {
|
|
commitment, err := kzg.BlobToKZGCommitment(blob)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "blob to kzg commitment")
|
|
}
|
|
|
|
return &commitment, nil
|
|
}
|
|
|
|
func generateCommitmentAndProof(blob *kzg.Blob) (*kzg.Commitment, *kzg.Proof, error) {
|
|
commitment, err := kzg.BlobToKZGCommitment(blob)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
proof, err := kzg.ComputeBlobKZGProof(blob, commitment)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
return &commitment, &proof, err
|
|
}
|
|
|
|
// Returns a random blob using the passed seed as entropy
|
|
func getRandBlob(seed int64) kzg.Blob {
|
|
var blob kzg.Blob
|
|
bytesPerBlob := GoKZG.ScalarsPerBlob * GoKZG.SerializedScalarSize
|
|
for i := 0; i < bytesPerBlob; i += GoKZG.SerializedScalarSize {
|
|
fieldElementBytes := getRandFieldElement(seed + int64(i))
|
|
copy(blob[i:i+GoKZG.SerializedScalarSize], fieldElementBytes[:])
|
|
}
|
|
return blob
|
|
}
|
|
|
|
// Returns a serialized random field element in big-endian
|
|
func getRandFieldElement(seed int64) [32]byte {
|
|
bytes := deterministicRandomness(seed)
|
|
var r fr.Element
|
|
r.SetBytes(bytes[:])
|
|
|
|
return GoKZG.SerializeScalar(r)
|
|
}
|
|
|
|
func deterministicRandomness(seed int64) [32]byte {
|
|
// Converts an int64 to a byte slice
|
|
buf := new(bytes.Buffer)
|
|
err := binary.Write(buf, binary.BigEndian, seed)
|
|
if err != nil {
|
|
logrus.WithError(err).Error("Failed to write int64 to bytes buffer")
|
|
return [32]byte{}
|
|
}
|
|
bytes := buf.Bytes()
|
|
|
|
return sha256.Sum256(bytes)
|
|
}
|