package vdf import ( "bytes" "encoding/binary" "slices" "github.com/iden3/go-iden3-crypto/poseidon" "github.com/pkg/errors" "go.uber.org/zap" "golang.org/x/crypto/sha3" "source.quilibrium.com/quilibrium/monorepo/consensus/models" "source.quilibrium.com/quilibrium/monorepo/consensus/verification" "source.quilibrium.com/quilibrium/monorepo/protobufs" qcrypto "source.quilibrium.com/quilibrium/monorepo/types/crypto" ) type WesolowskiFrameProver struct { logger *zap.Logger } func NewCachedWesolowskiFrameProver(logger *zap.Logger) qcrypto.FrameProver { return qcrypto.NewCachedFrameProver(NewWesolowskiFrameProver(logger)) } func NewWesolowskiFrameProver(logger *zap.Logger) *WesolowskiFrameProver { return &WesolowskiFrameProver{ logger, } } // SetBitAtIndex sets the bit at the given index in a copy of the mask and // returns it. func SetBitAtIndex(mask []byte, index uint8) []byte { byteIndex := index / 8 bitPos := index % 8 newMask := make([]byte, 32) copy(newMask, mask) newMask[byteIndex] |= 1 << bitPos return newMask } // GetSetBitIndices returns a slice of indices where bits are set in the mask. func GetSetBitIndices(mask []byte) []uint8 { var indices []uint8 for byteIdx, b := range mask { for bitPos := 0; bitPos < 8; bitPos++ { if b&(1<