mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 12:07:27 +00:00 
			
		
		
		
	
		
			
	
	
		
			43 lines
		
	
	
		
			857 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
		
			857 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"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type MinaTSchnorrHandler struct{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (m MinaTSchnorrHandler) DeriveChallenge(msg []byte, pubKey curves.Point, r curves.Point) (curves.Scalar, error) {
							 | 
						||
| 
								 | 
							
									txn := new(Transaction)
							 | 
						||
| 
								 | 
							
									err := txn.UnmarshalBinary(msg)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									input := new(roinput).Init(3, 75)
							 | 
						||
| 
								 | 
							
									txn.addRoInput(input)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									pt, ok := pubKey.(*curves.PointPallas)
							 | 
						||
| 
								 | 
							
									if !ok {
							 | 
						||
| 
								 | 
							
										return nil, fmt.Errorf("invalid point")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									R, ok := r.(*curves.PointPallas)
							 | 
						||
| 
								 | 
							
									if !ok {
							 | 
						||
| 
								 | 
							
										return nil, fmt.Errorf("invalid point")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									pk := new(PublicKey)
							 | 
						||
| 
								 | 
							
									pk.value = pt.GetEp()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									sc := msgHash(pk, R.X(), input, ThreeW, MainNet)
							 | 
						||
| 
								 | 
							
									s := new(curves.ScalarPallas)
							 | 
						||
| 
								 | 
							
									s.SetFq(sc)
							 | 
						||
| 
								 | 
							
									return s, nil
							 | 
						||
| 
								 | 
							
								}
							 |