electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 576a74a48a88c92a30b480c10a83eb9283cb2926
parent f0e19ffdfd52ceb675bb9ce6fd1e0a96ea03b93e
Author: SomberNight <somber.night@protonmail.com>
Date:   Thu, 19 Apr 2018 19:08:35 +0200

get_per_commitment_secret_from_seed (not working yet)

Diffstat:
Mlib/lnbase.py | 29+++++++++++++++++++++++++++++
Mlib/tests/test_lnbase.py | 16+++++++++++++++-
2 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/lib/lnbase.py b/lib/lnbase.py @@ -316,6 +316,35 @@ def derive_blinded_pubkey(basepoint, per_commitment_point): k2 = ser_to_point(per_commitment_point) * bitcoin.string_to_number(bitcoin.sha256(per_commitment_point + basepoint)) return point_to_ser(k1 + k2) + +def get_per_commitment_secret_from_seed(seed: int, i: int) -> int: + """Generate per commitment secret.""" + + + #seed ^= 1 + #pcs_bytes = seed.to_bytes(byteorder="big", length=32) + #print(bh2u(pcs_bytes)) + #return int.from_bytes(hashlib.sha256(pcs_bytes[::-1]).digest(), byteorder="big") + + #tmp = seed.to_bytes(byteorder="big", length=32) + #seed = int.from_bytes(tmp[::-1], byteorder="big") + + per_commitment_secret = seed + print('get_per_commitment_secret_from_seed() per_commitment_secret', per_commitment_secret) + print('get_per_commitment_secret_from_seed() i', i) + for bitindex in range(47, -1, -1): # 47, 46, ..., 0 + mask = 1 << bitindex + if i & mask: + print('get_per_commitment_secret_from_seed() bitindex, mask', bitindex, mask) + print('get_per_commitment_secret_from_seed() branch entered') + per_commitment_secret ^= mask + print('get_per_commitment_secret_from_seed() per_commitment_secret br1', per_commitment_secret) + pcs_bytes = per_commitment_secret.to_bytes(byteorder="big", length=32) + per_commitment_secret = int.from_bytes(bitcoin.sha256(pcs_bytes[::-1]), byteorder="big") + print('get_per_commitment_secret_from_seed() per_commitment_secret br2', per_commitment_secret) + return per_commitment_secret + + def overall_weight(num_htlc): return 500 + 172 * num_htlc + 224 diff --git a/lib/tests/test_lnbase.py b/lib/tests/test_lnbase.py @@ -5,7 +5,7 @@ import unittest from lib.util import bh2u, bfh from lib.lnbase import make_commitment, get_obscured_ctn, Peer, make_offered_htlc, make_received_htlc, make_htlc_tx from lib.lnbase import secret_to_pubkey, derive_pubkey, derive_privkey, derive_blinded_pubkey, overall_weight -from lib.lnbase import make_htlc_tx_output, make_htlc_tx_inputs +from lib.lnbase import make_htlc_tx_output, make_htlc_tx_inputs, get_per_commitment_secret_from_seed from lib.transaction import Transaction from lib import bitcoin import ecdsa.ellipticcurve @@ -231,3 +231,17 @@ class Test_LNBase(unittest.TestCase): self.assertEqual(revocation_basepoint, bfh('036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2')) revocationpubkey = derive_blinded_pubkey(revocation_basepoint, per_commitment_point) self.assertEqual(revocationpubkey, bfh('02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0')) + + def test_per_commitment_secret_from_seed(self): + self.assertEqual(bh2u(0x915c75942a26bb3a433a8ce2cb0427c29ec6c1775cfc78328b57f6ba7bfeaa9c.to_bytes(byteorder="big", length=32)), + bh2u(get_per_commitment_secret_from_seed(0x0101010101010101010101010101010101010101010101010101010101010101, 1).to_bytes(byteorder="big", length=32))) + + self.assertEqual(bh2u(0x02a40c85b6f28da08dfdbe0926c53fab2de6d28c10301f8f7c4073d5e42e3148.to_bytes(byteorder="big", length=32)), + bh2u(get_per_commitment_secret_from_seed(0x0000000000000000000000000000000000000000000000000000000000000000, 281474976710655).to_bytes(byteorder="big", length=32))) + #self.assertEqual(0x7cc854b54e3e0dcdb010d7a3fee464a9687be6e8db3be6854c475621e007a5dc, + # get_per_commitment_secret_from_seed(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 281474976710655)) + #self.assertEqual(0x56f4008fb007ca9acf0e15b054d5c9fd12ee06cea347914ddbaed70d1c13a528, + # get_per_commitment_secret_from_seed(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0xaaaaaaaaaaa)) + #self.assertEqual(0x9015daaeb06dba4ccc05b91b2f73bd54405f2be9f217fbacd3c5ac2e62327d31, + # get_per_commitment_secret_from_seed(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x555555555555)) +