From 3fd521825209103e632a2c962361f0f19c8e9bdd Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 23 Mar 2022 00:11:32 +0100 Subject: [PATCH] lnd: fix key derivation for good --- lnd/hdkeychain.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lnd/hdkeychain.go b/lnd/hdkeychain.go index 6957343..ba57942 100644 --- a/lnd/hdkeychain.go +++ b/lnd/hdkeychain.go @@ -28,7 +28,7 @@ func DeriveChildren(key *hdkeychain.ExtendedKey, path []uint32) ( *hdkeychain.ExtendedKey, error) { var currentKey = key - for _, pathPart := range path { + for idx, pathPart := range path { derivedKey, err := currentKey.DeriveNonStandard(pathPart) if err != nil { return nil, err @@ -45,7 +45,11 @@ func DeriveChildren(key *hdkeychain.ExtendedKey, path []uint32) ( // derived directly. depth := derivedKey.Depth() keyID := pathPart - hdkeychain.HardenedKeyStart - if (depth == 3 && keyID != 0) || (depth == 2 && keyID != 0) { + nextID := uint32(0) + if depth == 2 && len(path) > 2 { + nextID = path[idx+1] - hdkeychain.HardenedKeyStart + } + if (depth == 2 && nextID != 0) || (depth == 3 && keyID != 0) { currentKey, err = hdkeychain.NewKeyFromString( derivedKey.String(), )