1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package mock
- import (
- "github.com/btcsuite/btcd/btcec/v2"
- "github.com/btcsuite/btcd/btcec/v2/ecdsa"
- "github.com/btcsuite/btcd/btcec/v2/schnorr"
- "github.com/btcsuite/btcd/chaincfg/chainhash"
- "github.com/btcsuite/btcd/txscript"
- "github.com/lightningnetwork/lnd/keychain"
- )
- // SecretKeyRing is a mock implementation of the SecretKeyRing interface.
- type SecretKeyRing struct {
- RootKey *btcec.PrivateKey
- }
- // DeriveNextKey currently returns dummy values.
- func (s *SecretKeyRing) DeriveNextKey(
- _ keychain.KeyFamily) (keychain.KeyDescriptor, error) {
- return keychain.KeyDescriptor{
- PubKey: s.RootKey.PubKey(),
- }, nil
- }
- // DeriveKey currently returns dummy values.
- func (s *SecretKeyRing) DeriveKey(
- _ keychain.KeyLocator) (keychain.KeyDescriptor, error) {
- return keychain.KeyDescriptor{
- PubKey: s.RootKey.PubKey(),
- }, nil
- }
- // DerivePrivKey currently returns dummy values.
- func (s *SecretKeyRing) DerivePrivKey(
- _ keychain.KeyDescriptor) (*btcec.PrivateKey, error) {
- return s.RootKey, nil
- }
- // ECDH currently returns dummy values.
- func (s *SecretKeyRing) ECDH(_ keychain.KeyDescriptor,
- _ *btcec.PublicKey) ([32]byte, error) {
- return [32]byte{}, nil
- }
- // SignMessage signs the passed message and ignores the KeyDescriptor.
- func (s *SecretKeyRing) SignMessage(_ keychain.KeyLocator,
- msg []byte, doubleHash bool) (*ecdsa.Signature, error) {
- var digest []byte
- if doubleHash {
- digest = chainhash.DoubleHashB(msg)
- } else {
- digest = chainhash.HashB(msg)
- }
- return ecdsa.Sign(s.RootKey, digest), nil
- }
- // SignMessageCompact signs the passed message.
- func (s *SecretKeyRing) SignMessageCompact(_ keychain.KeyLocator,
- msg []byte, doubleHash bool) ([]byte, error) {
- var digest []byte
- if doubleHash {
- digest = chainhash.DoubleHashB(msg)
- } else {
- digest = chainhash.HashB(msg)
- }
- return ecdsa.SignCompact(s.RootKey, digest, true)
- }
- // SignMessageSchnorr signs the passed message and ignores the KeyDescriptor.
- func (s *SecretKeyRing) SignMessageSchnorr(_ keychain.KeyLocator,
- msg []byte, doubleHash bool, taprootTweak []byte,
- tag []byte) (*schnorr.Signature, error) {
- var digest []byte
- switch {
- case len(tag) > 0:
- taggedHash := chainhash.TaggedHash(tag, msg)
- digest = taggedHash[:]
- case doubleHash:
- digest = chainhash.DoubleHashB(msg)
- default:
- digest = chainhash.HashB(msg)
- }
- privKey := s.RootKey
- if len(taprootTweak) > 0 {
- privKey = txscript.TweakTaprootPrivKey(*privKey, taprootTweak)
- }
- return schnorr.Sign(privKey, digest)
- }
|