// // 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 }