lnwallet: update state hint derivation to match BOLT-0003
This commit is contained in:
parent
ca45ae7524
commit
7b002175f4
@ -1339,22 +1339,24 @@ func (l *LightningWallet) deriveMasterRevocationRoot() (*btcec.PrivateKey, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// deriveStateHintObfuscator derives the bytes to be used for obfuscating the
|
// deriveStateHintObfuscator derives the bytes to be used for obfuscating the
|
||||||
// state hints from the root to be used for a new channel. The
|
// state hints from the root to be used for a new channel. The obsfucsator is
|
||||||
// obfuscator is generated by performing an additional sha256 hash of the first
|
// generated via the following computation:
|
||||||
// child derived from the revocation root. The leading 4 bytes are used for the
|
//
|
||||||
// obfuscator.
|
// * sha256(initiatorKey || responderKey)[:6]
|
||||||
func deriveStateHintObfuscator(producer shachain.Producer) ([StateHintSize]byte, error) {
|
// * where both keys are the multi-sig keys of the respective parties
|
||||||
|
//
|
||||||
|
// The first 6 bytes of the resulting hash are used as the state hint.
|
||||||
|
func deriveStateHintObfuscator(key1, key2 *btcec.PublicKey) [StateHintSize]byte {
|
||||||
|
h := sha256.New()
|
||||||
|
h.Write(key1.SerializeCompressed())
|
||||||
|
h.Write(key2.SerializeCompressed())
|
||||||
|
|
||||||
|
sha := h.Sum(nil)
|
||||||
|
|
||||||
var obfuscator [StateHintSize]byte
|
var obfuscator [StateHintSize]byte
|
||||||
|
copy(obfuscator[:], sha[:])
|
||||||
|
|
||||||
firstChild, err := producer.AtIndex(0)
|
return obfuscator
|
||||||
if err != nil {
|
|
||||||
return obfuscator, err
|
|
||||||
}
|
|
||||||
|
|
||||||
grandChild := sha256.Sum256(firstChild[:])
|
|
||||||
copy(obfuscator[:], grandChild[:])
|
|
||||||
|
|
||||||
return obfuscator, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// initStateHints properly sets the obsfucated state hints on both commitment
|
// initStateHints properly sets the obsfucated state hints on both commitment
|
||||||
@ -1408,8 +1410,8 @@ func selectInputs(amt btcutil.Amount, coins []*Utxo) (btcutil.Amount, []*wire.Ou
|
|||||||
return satSelected, selectedUtxos, nil
|
return satSelected, selectedUtxos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// coinSelect attemps to select a sufficient amount of coins, including a
|
// coinSelect attempts to select a sufficient amount of coins, including a
|
||||||
// change output to fund amt satoshis, adhearing to the specified fee rate. The
|
// change output to fund amt satoshis, adhering to the specified fee rate. The
|
||||||
// specified fee rate should be expressed in sat/byte for coin selection to
|
// specified fee rate should be expressed in sat/byte for coin selection to
|
||||||
// function properly.
|
// function properly.
|
||||||
func coinSelect(feeRate uint64, amt btcutil.Amount,
|
func coinSelect(feeRate uint64, amt btcutil.Amount,
|
||||||
|
Loading…
Reference in New Issue
Block a user