keychain/interface_test: test btc and ltc key derivation

This commit is contained in:
Conner Fromknecht 2018-03-12 16:38:23 -07:00
parent cb7f34895c
commit 99a2ce00d6
No known key found for this signature in database
GPG Key ID: 39DE78FBE6ACB0EF
1 changed files with 70 additions and 10 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash" "github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcwallet/waddrmgr"
"github.com/roasbeef/btcwallet/wallet" "github.com/roasbeef/btcwallet/wallet"
"github.com/roasbeef/btcwallet/walletdb" "github.com/roasbeef/btcwallet/walletdb"
@ -36,7 +37,7 @@ var (
} }
) )
func createTestBtcWallet() (func(), *wallet.Wallet, error) { func createTestBtcWallet(coinType uint32) (func(), *wallet.Wallet, error) {
tempDir, err := ioutil.TempDir("", "keyring-lnwallet") tempDir, err := ioutil.TempDir("", "keyring-lnwallet")
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
@ -54,16 +55,23 @@ func createTestBtcWallet() (func(), *wallet.Wallet, error) {
return nil, nil, err return nil, nil, err
} }
// We'll now ensure that the KeyScope: (201, 1) exists within the // Construct the key scope required to derive keys for the chose
// internal waddrmgr. We'll need this in order to properly generate the // coinType.
// keys required for signing various contracts. chainKeyScope := waddrmgr.KeyScope{
_, err = baseWallet.Manager.FetchScopedKeyManager(lightningKeyScope) Purpose: BIP0043Purpose,
Coin: coinType,
}
// We'll now ensure that the KeyScope: (1017, coinType) exists within
// the internal waddrmgr. We'll need this in order to properly generate
// the keys required for signing various contracts.
_, err = baseWallet.Manager.FetchScopedKeyManager(chainKeyScope)
if err != nil { if err != nil {
err := walletdb.Update(baseWallet.Database(), func(tx walletdb.ReadWriteTx) error { err := walletdb.Update(baseWallet.Database(), func(tx walletdb.ReadWriteTx) error {
addrmgrNs := tx.ReadWriteBucket(waddrmgrNamespaceKey) addrmgrNs := tx.ReadWriteBucket(waddrmgrNamespaceKey)
_, err := baseWallet.Manager.NewScopedKeyManager( _, err := baseWallet.Manager.NewScopedKeyManager(
addrmgrNs, lightningKeyScope, lightningAddrSchema, addrmgrNs, chainKeyScope, lightningAddrSchema,
) )
return err return err
}) })
@ -93,15 +101,41 @@ func TestKeyRingDerivation(t *testing.T) {
keyRingImplementations := []keyRingConstructor{ keyRingImplementations := []keyRingConstructor{
func() (string, func(), KeyRing, error) { func() (string, func(), KeyRing, error) {
cleanUp, wallet, err := createTestBtcWallet() cleanUp, wallet, err := createTestBtcWallet(
CoinTypeBitcoin,
)
if err != nil { if err != nil {
t.Fatalf("unable to create wallet: %v", err) t.Fatalf("unable to create wallet: %v", err)
} }
keyRing := NewBtcWalletKeyRing(wallet) keyRing := NewBtcWalletKeyRing(wallet, CoinTypeBitcoin)
return "btcwallet", cleanUp, keyRing, nil return "btcwallet", cleanUp, keyRing, nil
}, },
func() (string, func(), KeyRing, error) {
cleanUp, wallet, err := createTestBtcWallet(
CoinTypeLitecoin,
)
if err != nil {
t.Fatalf("unable to create wallet: %v", err)
}
keyRing := NewBtcWalletKeyRing(wallet, CoinTypeLitecoin)
return "ltcwallet", cleanUp, keyRing, nil
},
func() (string, func(), KeyRing, error) {
cleanUp, wallet, err := createTestBtcWallet(
CoinTypeTestnet,
)
if err != nil {
t.Fatalf("unable to create wallet: %v", err)
}
keyRing := NewBtcWalletKeyRing(wallet, CoinTypeTestnet)
return "testwallet", cleanUp, keyRing, nil
},
} }
// For each implementation constructor registered above, we'll execute // For each implementation constructor registered above, we'll execute
@ -182,15 +216,41 @@ func TestSecretKeyRingDerivation(t *testing.T) {
secretKeyRingImplementations := []secretKeyRingConstructor{ secretKeyRingImplementations := []secretKeyRingConstructor{
func() (string, func(), SecretKeyRing, error) { func() (string, func(), SecretKeyRing, error) {
cleanUp, wallet, err := createTestBtcWallet() cleanUp, wallet, err := createTestBtcWallet(
CoinTypeBitcoin,
)
if err != nil { if err != nil {
t.Fatalf("unable to create wallet: %v", err) t.Fatalf("unable to create wallet: %v", err)
} }
keyRing := NewBtcWalletKeyRing(wallet) keyRing := NewBtcWalletKeyRing(wallet, CoinTypeBitcoin)
return "btcwallet", cleanUp, keyRing, nil return "btcwallet", cleanUp, keyRing, nil
}, },
func() (string, func(), SecretKeyRing, error) {
cleanUp, wallet, err := createTestBtcWallet(
CoinTypeLitecoin,
)
if err != nil {
t.Fatalf("unable to create wallet: %v", err)
}
keyRing := NewBtcWalletKeyRing(wallet, CoinTypeLitecoin)
return "ltcwallet", cleanUp, keyRing, nil
},
func() (string, func(), SecretKeyRing, error) {
cleanUp, wallet, err := createTestBtcWallet(
CoinTypeTestnet,
)
if err != nil {
t.Fatalf("unable to create wallet: %v", err)
}
keyRing := NewBtcWalletKeyRing(wallet, CoinTypeTestnet)
return "testwallet", cleanUp, keyRing, nil
},
} }
// For each implementation constructor registered above, we'll execute // For each implementation constructor registered above, we'll execute