tfix derive_secret - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit b523085fa33b35cf59288bb996a3f7fa2def25cd DIR parent 576a74a48a88c92a30b480c10a83eb9283cb2926 HTML Author: Janus <ysangkok@gmail.com> Date: Thu, 19 Apr 2018 19:36:10 +0200 fix derive_secret Diffstat: M lib/lnbase.py | 25 +++++-------------------- M lib/tests/test_lnbase.py | 16 ++++++++-------- 2 files changed, 13 insertions(+), 28 deletions(-) --- DIR diff --git a/lib/lnbase.py b/lib/lnbase.py t@@ -317,31 +317,16 @@ def derive_blinded_pubkey(basepoint, per_commitment_point): return point_to_ser(k1 + k2) -def get_per_commitment_secret_from_seed(seed: int, i: int) -> int: +def get_per_commitment_secret_from_seed(seed: int, bits: 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 + for bitindex in range(bits, -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) + pcs_bytes = bytearray(per_commitment_secret.to_bytes(byteorder="big", length=32)) + pcs_bytes[bitindex // 8] ^= 1 << (bitindex % 8) + per_commitment_secret = int.from_bytes(bitcoin.sha256(pcs_bytes), byteorder="big") return per_commitment_secret DIR diff --git a/lib/tests/test_lnbase.py b/lib/tests/test_lnbase.py t@@ -234,14 +234,14 @@ class Test_LNBase(unittest.TestCase): 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))) + bh2u(get_per_commitment_secret_from_seed(0x0101010101010101010101010101010101010101010101010101010101010101, 47, 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)) + bh2u(get_per_commitment_secret_from_seed(0x0000000000000000000000000000000000000000000000000000000000000000, 47, 281474976710655).to_bytes(byteorder="big", length=32))) + self.assertEqual(0x7cc854b54e3e0dcdb010d7a3fee464a9687be6e8db3be6854c475621e007a5dc, + get_per_commitment_secret_from_seed(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 47, 281474976710655)) + self.assertEqual(0x56f4008fb007ca9acf0e15b054d5c9fd12ee06cea347914ddbaed70d1c13a528, + get_per_commitment_secret_from_seed(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 47, 0xaaaaaaaaaaa)) + self.assertEqual(0x9015daaeb06dba4ccc05b91b2f73bd54405f2be9f217fbacd3c5ac2e62327d31, + get_per_commitment_secret_from_seed(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 47, 0x555555555555))