electrum

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

commit 5666188e9e75ff4b697acb3015b46ffb8d265f30
parent 1d8c7714400b2e5bb986ed35f44d9d5f1809511a
Author: ThomasV <thomasv@electrum.org>
Date:   Sat, 26 May 2018 17:04:55 +0200

update lnbase after crypto refactoring

Diffstat:
Melectrum/crypto.py | 2+-
Mlib/lnbase.py | 41++++++++++++++++++++---------------------
2 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/electrum/crypto.py b/electrum/crypto.py @@ -198,7 +198,7 @@ def sha256d(x: Union[bytes, str]) -> bytes: def hash_160(x: bytes) -> bytes: - return ripemd(sha256(public_key)) + return ripemd(sha256(x)) def ripemd(x): try: diff --git a/lib/lnbase.py b/lib/lnbase.py @@ -23,11 +23,13 @@ import cryptography.hazmat.primitives.ciphers.aead as AEAD from cryptography.hazmat.primitives.ciphers import Cipher, algorithms from cryptography.hazmat.backends import default_backend -from .bitcoin import (public_key_from_private_key, ser_to_point, point_to_ser, - string_to_number, deserialize_privkey, EC_KEY, rev_hex, int_to_hex, +from .ecc import ser_to_point, point_to_ser, string_to_number +from .bitcoin import (deserialize_privkey, rev_hex, int_to_hex, push_script, script_num_to_hex, add_number_to_script, var_int) from . import bitcoin +from . import ecc +from . import crypto from . import constants from . import transaction from .util import PrintError, bh2u, print_error, bfh, profiler, xor_bytes @@ -242,10 +244,8 @@ def get_bolt8_hkdf(salt, ikm): return T1, T2 def get_ecdh(priv: bytes, pub: bytes) -> bytes: - s = string_to_number(priv) - pk = ser_to_point(pub) - pt = point_to_ser(pk * s) - return H256(pt) + pt = ecc.ECPubkey(pub) * string_to_number(priv) + return H256(pt.get_public_key_bytes()) def act1_initiator_message(hs, my_privkey): #Get a new ephemeral key @@ -262,8 +262,7 @@ def act1_initiator_message(hs, my_privkey): return msg def privkey_to_pubkey(priv): - pub = public_key_from_private_key(priv[:32], True) - return bytes.fromhex(pub) + return ecc.ECPrivkey(priv[:32]).get_public_key_bytes() def create_ephemeral_key(privkey): pub = privkey_to_pubkey(privkey) @@ -303,20 +302,20 @@ def secret_to_pubkey(secret): return point_to_ser(SECP256k1.generator * secret) def derive_pubkey(basepoint, per_commitment_point): - p = ser_to_point(basepoint) + SECP256k1.generator * bitcoin.string_to_number(bitcoin.sha256(per_commitment_point + basepoint)) - return point_to_ser(p) + p = ecc.ECPubkey(basepoint) + ecc.generator() * ecc.string_to_number(bitcoin.sha256(per_commitment_point + basepoint)) + return p.get_public_key_bytes() def derive_privkey(secret, per_commitment_point): assert type(secret) is int basepoint = point_to_ser(SECP256k1.generator * secret) - basepoint = secret + bitcoin.string_to_number(bitcoin.sha256(per_commitment_point + basepoint)) + basepoint = secret + ecc.string_to_number(bitcoin.sha256(per_commitment_point + basepoint)) basepoint %= SECP256k1.order return basepoint def derive_blinded_pubkey(basepoint, per_commitment_point): - k1 = ser_to_point(basepoint) * bitcoin.string_to_number(bitcoin.sha256(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) + k1 = ecc.ECPubkey(basepoint) * ecc.string_to_number(bitcoin.sha256(basepoint + per_commitment_point)) + k2 = ecc.ECPubkey(per_commitment_point) * ecc.string_to_number(bitcoin.sha256(per_commitment_point + basepoint)) + return (k1 + k2).get_public_key_bytes() def shachain_derive(element, toIndex): return ShachainElement(get_per_commitment_secret_from_seed(element.secret, toIndex, count_trailing_zeros(element.index)), toIndex) @@ -407,7 +406,7 @@ def make_offered_htlc(revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, pa + bytes([opcodes.OP_SWAP, opcodes.OP_SIZE]) + bitcoin.add_number_to_script(32) + bytes([opcodes.OP_EQUAL, opcodes.OP_NOTIF, opcodes.OP_DROP])\ + bitcoin.add_number_to_script(2) + bytes([opcodes.OP_SWAP]) + bfh(push_script(bh2u(local_htlcpubkey))) + bitcoin.add_number_to_script(2)\ + bytes([opcodes.OP_CHECKMULTISIG, opcodes.OP_ELSE, opcodes.OP_HASH160])\ - + bfh(push_script(bh2u(bitcoin.ripemd(payment_hash)))) + bytes([opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG, opcodes.OP_ENDIF, opcodes.OP_ENDIF]) + + bfh(push_script(bh2u(crypto.ripemd(payment_hash)))) + bytes([opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG, opcodes.OP_ENDIF, opcodes.OP_ENDIF]) def make_received_htlc(revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, payment_hash, cltv_expiry): for i in [revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, payment_hash]: @@ -421,7 +420,7 @@ def make_received_htlc(revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, p + bytes([opcodes.OP_SWAP, opcodes.OP_SIZE]) \ + bitcoin.add_number_to_script(32) \ + bytes([opcodes.OP_EQUAL, opcodes.OP_IF, opcodes.OP_HASH160]) \ - + bfh(push_script(bh2u(bitcoin.ripemd(payment_hash)))) \ + + bfh(push_script(bh2u(crypto.ripemd(payment_hash)))) \ + bytes([opcodes.OP_EQUALVERIFY]) \ + bitcoin.add_number_to_script(2) \ + bytes([opcodes.OP_SWAP]) \ @@ -1062,7 +1061,7 @@ class Peer(PrintError): height = wallet.get_local_height() assert amount_msat > 0, "amount_msat is not greater zero" - our_pubkey = bfh(EC_KEY(self.privkey).get_public_key(True)) + our_pubkey = ecc.ECPrivkey(self.privkey).get_public_key_bytes() sorted_keys = list(sorted([self.pubkey, our_pubkey])) self.channel_db.on_channel_announcement({"short_channel_id": chan.short_channel_id, "node_id_1": sorted_keys[0], "node_id_2": sorted_keys[1]}) self.channel_db.on_channel_update({"short_channel_id": chan.short_channel_id, 'flags': b'\x01', 'cltv_expiry_delta': b'\x90', 'htlc_minimum_msat': b'\x03\xe8', 'fee_base_msat': b'\x03\xe8', 'fee_proportional_millionths': b'\x01'}) @@ -1737,7 +1736,7 @@ def get_shared_secrets_along_route(payment_path_pubkeys: Sequence[bytes], # compute shared key for each hop for i in range(0, num_hops): hop_shared_secrets[i] = get_ecdh(ephemeral_key, payment_path_pubkeys[i]) - ephemeral_pubkey = bfh(EC_KEY(ephemeral_key).get_public_key()) + ephemeral_pubkey = ecc.ECPrivkey(ephemeral_key).get_public_key_bytes() blinding_factor = H256(ephemeral_pubkey + hop_shared_secrets[i]) blinding_factor_int = int.from_bytes(blinding_factor, byteorder="big") ephemeral_key_int = int.from_bytes(ephemeral_key, byteorder="big") @@ -1770,7 +1769,7 @@ def new_onion_packet(payment_path_pubkeys: Sequence[bytes], session_key: bytes, next_hmac = hmac.new(mu_key, msg=packet, digestmod=hashlib.sha256).digest() return OnionPacket( - public_key=bfh(EC_KEY(session_key).get_public_key()), + public_key=ecc.ECPrivkey(session_key).get_public_key_bytes(), hops_data=mix_header, hmac=next_hmac) @@ -1821,8 +1820,8 @@ def process_onion_packet(onion_packet: OnionPacket, associated_data: bytes, # calc next ephemeral key blinding_factor = H256(onion_packet.public_key + shared_secret) blinding_factor_int = int.from_bytes(blinding_factor, byteorder="big") - next_public_key_int = ser_to_point(onion_packet.public_key) * blinding_factor_int - next_public_key = point_to_ser(next_public_key_int) + next_public_key_int = ecc.ECPubkey(onion_packet.public_key) * blinding_factor_int + next_public_key = next_public_key_int.get_public_key_bytes() hop_data = OnionHopsDataSingle.from_bytes(next_hops_data[:PER_HOP_FULL_SIZE]) next_onion_packet = OnionPacket(