ceremonyclient/node/protobufs/clock.go
Cassandra Heart 0cd6b41f5d
v1.2.4 (#43)
2024-02-13 01:04:56 -06:00

86 lines
1.9 KiB
Go

package protobufs
import (
"math/big"
"github.com/iden3/go-iden3-crypto/poseidon"
"github.com/pkg/errors"
)
func (frame *ClockFrame) GetParentAndSelector() (
*big.Int,
*big.Int,
error,
) {
outputBytes := [516]byte{}
copy(outputBytes[:], frame.Output[:516])
selector, err := poseidon.HashBytes(outputBytes[:])
if err != nil {
return nil, nil, errors.Wrap(err, "get parent selector and distance")
}
if frame.FrameNumber == 0 {
return big.NewInt(0), selector, nil
}
parentSelector := new(big.Int).SetBytes(frame.ParentSelector)
return parentSelector, selector, nil
}
func (frame *ClockFrame) GetSelector() (*big.Int, error) {
outputBytes := [516]byte{}
copy(outputBytes[:], frame.Output[:516])
selector, err := poseidon.HashBytes(outputBytes[:])
if err != nil {
return nil, errors.Wrap(err, "get selector")
}
return selector, nil
}
func (frame *ClockFrame) GetPublicKey() ([]byte, error) {
if frame.FrameNumber == 0 {
return make([]byte, 32), nil
}
var pubkey []byte
ed448PublicKey := frame.GetPublicKeySignatureEd448()
if ed448PublicKey != nil {
pubkey = ed448PublicKey.PublicKey.KeyValue
} else {
return nil, errors.Wrap(
errors.New("no valid signature provided"),
"get address",
)
}
return pubkey, nil
}
func (frame *ClockFrame) GetAddress() ([]byte, error) {
if frame.FrameNumber == 0 {
return make([]byte, 32), nil
}
var pubkey []byte
ed448PublicKey := frame.GetPublicKeySignatureEd448()
if ed448PublicKey != nil {
pubkey = ed448PublicKey.PublicKey.KeyValue
} else {
return nil, errors.Wrap(
errors.New("no valid signature provided"),
"get address",
)
}
address, err := poseidon.HashBytes(pubkey)
if err != nil {
return nil, errors.Wrap(err, "get parent selector and distance")
}
addressBytes := address.Bytes()
addressBytes = append(make([]byte, 32-len(addressBytes)), addressBytes...)
return addressBytes, nil
}