github.com/decred/dcrlnd@v0.7.6/lntest/mock/secretkeyring.go (about)

     1  package mock
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/decred/dcrd/chaincfg/chainhash"
     7  	"github.com/decred/dcrd/dcrec/secp256k1/v4"
     8  	"github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa"
     9  
    10  	"github.com/decred/dcrlnd/keychain"
    11  )
    12  
    13  // SecretKeyRing is a mock implementation of the SecretKeyRing interface.
    14  type SecretKeyRing struct {
    15  	RootKey *secp256k1.PrivateKey
    16  }
    17  
    18  // DeriveNextKey currently returns dummy values.
    19  func (s *SecretKeyRing) DeriveNextKey(
    20  	_ keychain.KeyFamily) (keychain.KeyDescriptor, error) {
    21  
    22  	return keychain.KeyDescriptor{
    23  		PubKey: s.RootKey.PubKey(),
    24  	}, nil
    25  }
    26  
    27  // DeriveKey currently returns dummy values.
    28  func (s *SecretKeyRing) DeriveKey(
    29  	_ keychain.KeyLocator) (keychain.KeyDescriptor, error) {
    30  
    31  	return keychain.KeyDescriptor{
    32  		PubKey: s.RootKey.PubKey(),
    33  	}, nil
    34  }
    35  
    36  // DerivePrivKey currently returns dummy values.
    37  func (s *SecretKeyRing) DerivePrivKey(
    38  	_ keychain.KeyDescriptor) (*secp256k1.PrivateKey, error) {
    39  
    40  	return s.RootKey, nil
    41  }
    42  
    43  // ECDH currently returns dummy values.
    44  func (s *SecretKeyRing) ECDH(_ keychain.KeyDescriptor,
    45  	_ *secp256k1.PublicKey) ([32]byte, error) {
    46  
    47  	return [32]byte{}, nil
    48  }
    49  
    50  // SignMessage signs the passed message and ignores the KeyDescriptor.
    51  func (s *SecretKeyRing) SignMessage(_ keychain.KeyLocator,
    52  	msg []byte, doubleHash bool) (*ecdsa.Signature, error) {
    53  
    54  	var digest []byte
    55  	if doubleHash {
    56  		return nil, fmt.Errorf("dcrlnd does not do doubleHash signing")
    57  	} else {
    58  		digest = chainhash.HashB(msg)
    59  	}
    60  	return ecdsa.Sign(s.RootKey, digest), nil
    61  }
    62  
    63  // SignMessageCompact signs the passed message.
    64  func (s *SecretKeyRing) SignMessageCompact(_ keychain.KeyLocator,
    65  	msg []byte, doubleHash bool) ([]byte, error) {
    66  
    67  	var digest []byte
    68  	if doubleHash {
    69  		digest1 := chainhash.HashB(msg)
    70  		digest = chainhash.HashB(digest1)
    71  	} else {
    72  		digest = chainhash.HashB(msg)
    73  	}
    74  	return ecdsa.SignCompact(s.RootKey, digest[:], true), nil
    75  }