URI: 
       tafter rebase clean-up - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit c0ae7b5534853459e43265545d23e4a8adfaeeee
   DIR parent 7e76e821522eb0fcb6aef0fcbd9897d77606b382
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Thu, 25 Oct 2018 23:30:36 +0200
       
       after rebase clean-up
       
       Diffstat:
         M electrum/lnbase.py                  |       4 ++--
         M electrum/lnchan.py                  |       8 ++++----
         M electrum/lnchannelverifier.py       |       5 +++--
         M electrum/lnrouter.py                |       4 ++--
         M electrum/lnwatcher.py               |       1 +
         M electrum/lnworker.py                |       7 ++++---
         M electrum/tests/test_lnchan.py       |      22 +++++++++++-----------
       
       7 files changed, 27 insertions(+), 24 deletions(-)
       ---
   DIR diff --git a/electrum/lnbase.py b/electrum/lnbase.py
       t@@ -16,7 +16,7 @@ import sys
        
        import aiorpcx
        
       -from .crypto import sha256
       +from .crypto import sha256, sha256d
        from . import bitcoin
        from . import ecc
        from .ecc import sig_string_from_r_and_s, get_r_and_s_from_sig_string
       t@@ -868,7 +868,7 @@ class Peer(PrintError):
                    bitcoin_key_2=bitcoin_keys[1]
                )
                to_hash = chan_ann[256+2:]
       -        h = bitcoin.Hash(to_hash)
       +        h = sha256d(to_hash)
                bitcoin_signature = ecc.ECPrivkey(chan.config[LOCAL].multisig_key.privkey).sign(h, sig_string_from_r_and_s, get_r_and_s_from_sig_string)
                node_signature = ecc.ECPrivkey(self.privkey).sign(h, sig_string_from_r_and_s, get_r_and_s_from_sig_string)
                self.send_message("announcement_signatures",
   DIR diff --git a/electrum/lnchan.py b/electrum/lnchan.py
       t@@ -29,9 +29,9 @@ from enum import Enum, auto
        from typing import Optional, Dict, List, Tuple
        
        from .util import bfh, PrintError, bh2u
       -from .bitcoin import Hash, TYPE_SCRIPT, TYPE_ADDRESS
       +from .bitcoin import TYPE_SCRIPT, TYPE_ADDRESS
        from .bitcoin import redeem_script_to_address
       -from .crypto import sha256
       +from .crypto import sha256, sha256d
        from . import ecc
        from .lnutil import Outpoint, LocalConfig, RemoteConfig, Keypair, OnlyPubkeyKeypair, ChannelConstraints, RevocationStore, EncumberedTransaction
        from .lnutil import get_per_commitment_secret_from_seed
       t@@ -328,7 +328,7 @@ class Channel(PrintError):
        
                pending_local_commitment = self.pending_local_commitment
                preimage_hex = pending_local_commitment.serialize_preimage(0)
       -        pre_hash = Hash(bfh(preimage_hex))
       +        pre_hash = sha256d(bfh(preimage_hex))
                if not ecc.verify_signature(self.config[REMOTE].multisig_key.pubkey, sig, pre_hash):
                    raise Exception('failed verifying signature of our updated commitment transaction: ' + bh2u(sig) + ' preimage is ' + preimage_hex)
        
       t@@ -357,7 +357,7 @@ class Channel(PrintError):
            def verify_htlc(self, htlc, htlc_sigs, we_receive):
                _, this_point, _ = self.points
                _script, htlc_tx = make_htlc_tx_with_open_channel(self, this_point, True, we_receive, self.pending_local_commitment, htlc)
       -        pre_hash = Hash(bfh(htlc_tx.serialize_preimage(0)))
       +        pre_hash = sha256d(bfh(htlc_tx.serialize_preimage(0)))
                remote_htlc_pubkey = derive_pubkey(self.config[REMOTE].htlc_basepoint.pubkey, this_point)
                for idx, sig in enumerate(htlc_sigs):
                    if ecc.verify_signature(remote_htlc_pubkey, sig, pre_hash):
   DIR diff --git a/electrum/lnchannelverifier.py b/electrum/lnchannelverifier.py
       t@@ -38,6 +38,7 @@ from .lnutil import invert_short_channel_id, funding_output_script_from_keys
        from .verifier import verify_tx_is_in_block, MerkleVerificationFailure
        from .transaction import Transaction
        from .interface import GracefulDisconnect
       +from .crypto import sha256d
        
        if TYPE_CHECKING:
            from .network import Network
       t@@ -185,7 +186,7 @@ class LNChannelVerifier(NetworkJobOnDefaultServer):
        def verify_sigs_for_channel_announcement(chan_ann: dict) -> bool:
            msg_bytes = lnbase.gen_msg('channel_announcement', **chan_ann)
            pre_hash = msg_bytes[2+256:]
       -    h = bitcoin.Hash(pre_hash)
       +    h = sha256d(pre_hash)
            pubkeys = [chan_ann['node_id_1'], chan_ann['node_id_2'], chan_ann['bitcoin_key_1'], chan_ann['bitcoin_key_2']]
            sigs = [chan_ann['node_signature_1'], chan_ann['node_signature_2'], chan_ann['bitcoin_signature_1'], chan_ann['bitcoin_signature_2']]
            for pubkey, sig in zip(pubkeys, sigs):
       t@@ -197,7 +198,7 @@ def verify_sigs_for_channel_announcement(chan_ann: dict) -> bool:
        def verify_sig_for_channel_update(chan_upd: dict, node_id: bytes) -> bool:
            msg_bytes = lnbase.gen_msg('channel_update', **chan_upd)
            pre_hash = msg_bytes[2+64:]
       -    h = bitcoin.Hash(pre_hash)
       +    h = sha256d(pre_hash)
            sig = chan_upd['signature']
            if not ecc.verify_signature(node_id, sig, h):
                return False
   DIR diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py
       t@@ -37,7 +37,7 @@ from . import constants
        from .util import PrintError, bh2u, profiler, get_headers_dir, bfh, is_ip_address, list_enabled_bits
        from .storage import JsonDB
        from .lnchannelverifier import LNChannelVerifier, verify_sig_for_channel_update
       -from .crypto import Hash
       +from .crypto import sha256d
        from . import ecc
        from .lnutil import LN_GLOBAL_FEATURES_KNOWN_SET, LNPeerAddr, NUM_MAX_EDGES_IN_PAYMENT_PATH
        
       t@@ -416,7 +416,7 @@ class ChannelDB(JsonDB):
            def on_node_announcement(self, msg_payload):
                pubkey = msg_payload['node_id']
                signature = msg_payload['signature']
       -        h = Hash(msg_payload['raw'][66:])
       +        h = sha256d(msg_payload['raw'][66:])
                if not ecc.verify_signature(pubkey, signature, h):
                    return
                old_node_info = self.nodes.get(pubkey, None)
   DIR diff --git a/electrum/lnwatcher.py b/electrum/lnwatcher.py
       t@@ -7,6 +7,7 @@ from typing import NamedTuple, Iterable, TYPE_CHECKING
        import os
        from collections import defaultdict
        import asyncio
       +
        import jsonrpclib
        
        from .util import PrintError, bh2u, bfh, log_exceptions, ignore_exceptions
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -17,9 +17,10 @@ import dns.exception
        
        from . import constants
        from . import keystore
       -from . import bitcoin
        from .keystore import BIP32_KeyStore
       -from .bitcoin import sha256, COIN
       +from .bitcoin import COIN
       +from .crypto import sha256
       +from .bip32 import bip32_root
        from .util import bh2u, bfh, PrintError, InvoiceError, resolve_dns_srv, is_ip_address, log_exceptions
        from .lntransport import LNResponderTransport
        from .lnbase import Peer
       t@@ -84,7 +85,7 @@ class LNWorker(PrintError):
                    # TODO derive this deterministically from wallet.keystore at keystore generation time
                    # probably along a hardened path ( lnd-equivalent would be m/1017'/coinType'/ )
                    seed = os.urandom(32)
       -            xprv, xpub = bitcoin.bip32_root(seed, xtype='standard')
       +            xprv, xpub = bip32_root(seed, xtype='standard')
                    self.wallet.storage.put('lightning_privkey2', xprv)
                    self.wallet.storage.write()
                return keystore.from_xprv(xprv)
   DIR diff --git a/electrum/tests/test_lnchan.py b/electrum/tests/test_lnchan.py
       t@@ -20,14 +20,14 @@
        # THE SOFTWARE.
        
        import unittest
       -import electrum.bitcoin as bitcoin
       -import electrum.lnbase as lnbase
       -import electrum.lnchan as lnchan
       -import electrum.lnutil as lnutil
       -import electrum.util as util
        import os
        import binascii
        
       +from electrum import bitcoin
       +from electrum import lnbase
       +from electrum import lnchan
       +from electrum import lnutil
       +from electrum import bip32 as bip32_utils
        from electrum.lnutil import SENT, LOCAL, REMOTE, RECEIVED
        
        one_bitcoin_in_msat = bitcoin.COIN * 1000
       t@@ -96,9 +96,9 @@ def create_channel_state(funding_txid, funding_index, funding_sat, local_feerate
            }
        
        def bip32(sequence):
       -    xprv, xpub = bitcoin.bip32_root(b"9dk", 'standard')
       -    xprv, xpub = bitcoin.bip32_private_derivation(xprv, "m/", sequence)
       -    xtype, depth, fingerprint, child_number, c, k = bitcoin.deserialize_xprv(xprv)
       +    xprv, xpub = bip32_utils.bip32_root(b"9dk", 'standard')
       +    xprv, xpub = bip32_utils.bip32_private_derivation(xprv, "m/", sequence)
       +    xtype, depth, fingerprint, child_number, c, k = bip32_utils.deserialize_xprv(xprv)
            assert len(k) == 32
            assert type(k) is bytes
            return k
       t@@ -536,13 +536,13 @@ class TestChanReserve(unittest.TestCase):
                force_state_transition(self.alice_channel, self.bob_channel)
                self.check_bals(one_bitcoin_in_msat*3\
                        - self.alice_channel.pending_local_fee,
       -                  one_bitocin_in_msat*5)
       +                  one_bitcoin_in_msat*5)
                self.bob_channel.settle_htlc(paymentPreimage, bob_idx)
                self.alice_channel.receive_htlc_settle(paymentPreimage, alice_idx)
                force_state_transition(self.alice_channel, self.bob_channel)
                self.check_bals(one_bitcoin_in_msat*3\
                        - self.alice_channel.pending_local_fee,
       -                  one_bitocin_in_msat*7)
       +                  one_bitcoin_in_msat*7)
                # And now let Bob add an HTLC of 1 BTC. This will take Bob's balance
                # all the way down to his channel reserve, but since he is not paying
                # the fee this is okay.
       t@@ -552,7 +552,7 @@ class TestChanReserve(unittest.TestCase):
                force_state_transition(self.alice_channel, self.bob_channel)
                self.check_bals(one_bitcoin_in_msat*3\
                        - self.alice_channel.pending_local_fee,
       -                  one_bitocin_in_msat*6)
       +                  one_bitcoin_in_msat*6)
        
            def check_bals(self, amt1, amt2):
                self.assertEqual(self.alice_channel.available_to_spend(LOCAL), amt1)