github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/ledger/discover_mock.go (about)

     1  //go:build ledger_suite
     2  // +build ledger_suite
     3  
     4  package ledger
     5  
     6  import (
     7  	btcec "github.com/btcsuite/btcd/btcec/v2"
     8  	"github.com/gnolang/gno/tm2/pkg/crypto/secp256k1"
     9  )
    10  
    11  // discoverLedger defines a function to be invoked at runtime for discovering
    12  // a connected Ledger device.
    13  var discoverLedger discoverLedgerFn = func() (LedgerSECP256K1, error) {
    14  	privateKey := secp256k1.GenPrivKey()
    15  
    16  	_, pubKeyObject := btcec.PrivKeyFromBytes(privateKey[:])
    17  
    18  	return &MockLedger{
    19  		GetAddressPubKeySECP256K1Fn: func(data []uint32, str string) ([]byte, string, error) {
    20  			return pubKeyObject.SerializeCompressed(), privateKey.PubKey().Address().String(), nil
    21  		},
    22  	}, nil
    23  }
    24  
    25  type (
    26  	closeDelegate                     func() error
    27  	getPublicKeySECP256K1Delegate     func([]uint32) ([]byte, error)
    28  	getAddressPubKeySECP256K1Delegate func([]uint32, string) ([]byte, string, error)
    29  	signSECP256K1Delegate             func([]uint32, []byte, byte) ([]byte, error)
    30  )
    31  
    32  type MockLedger struct {
    33  	CloseFn                     closeDelegate
    34  	GetPublicKeySECP256K1Fn     getPublicKeySECP256K1Delegate
    35  	GetAddressPubKeySECP256K1Fn getAddressPubKeySECP256K1Delegate
    36  	SignSECP256K1Fn             signSECP256K1Delegate
    37  }
    38  
    39  func (m *MockLedger) Close() error {
    40  	if m.CloseFn != nil {
    41  		return m.CloseFn()
    42  	}
    43  
    44  	return nil
    45  }
    46  
    47  func (m *MockLedger) GetPublicKeySECP256K1(data []uint32) ([]byte, error) {
    48  	if m.GetPublicKeySECP256K1Fn != nil {
    49  		return m.GetPublicKeySECP256K1Fn(data)
    50  	}
    51  
    52  	return nil, nil
    53  }
    54  
    55  func (m *MockLedger) GetAddressPubKeySECP256K1(data []uint32, str string) ([]byte, string, error) {
    56  	if m.GetAddressPubKeySECP256K1Fn != nil {
    57  		return m.GetAddressPubKeySECP256K1Fn(data, str)
    58  	}
    59  
    60  	return nil, "", nil
    61  }
    62  
    63  func (m *MockLedger) SignSECP256K1(d1 []uint32, d2 []byte, d3 byte) ([]byte, error) {
    64  	if m.SignSECP256K1Fn != nil {
    65  		return m.SignSECP256K1Fn(d1, d2, d3)
    66  	}
    67  
    68  	return nil, nil
    69  }