// // Copyright Coinbase, Inc. All Rights Reserved. // // SPDX-License-Identifier: Apache-2.0 // package mina import ( "fmt" "source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves/native/pasta/fp" "source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves/native/pasta/fq" ) // Signature is a Mina compatible signature either for payment or delegation type Signature struct { R *fp.Fp S *fq.Fq } func (sig Signature) MarshalBinary() ([]byte, error) { var buf [64]byte rx := sig.R.Bytes() s := sig.S.Bytes() copy(buf[:32], rx[:]) copy(buf[32:], s[:]) return buf[:], nil } func (sig *Signature) UnmarshalBinary(input []byte) error { if len(input) != 64 { return fmt.Errorf("invalid byte sequence") } var buf [32]byte copy(buf[:], input[:32]) rx, err := new(fp.Fp).SetBytes(&buf) if err != nil { return err } copy(buf[:], input[32:]) s, err := new(fq.Fq).SetBytes(&buf) if err != nil { return err } sig.R = rx sig.S = s return nil }