mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 14:47:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			997 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			997 B
		
	
	
	
		
			Go
		
	
	
	
	
	
//
 | 
						|
// 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
 | 
						|
}
 |