mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-30 08:51:32 +00:00
simplify previous commit (revert changes on transaction.py)
This commit is contained in:
parent
e85fb25146
commit
6833adf8b6
2 changed files with 26 additions and 28 deletions
|
@ -1398,6 +1398,11 @@ class Peer(Logger):
|
|||
def send_closing_signed():
|
||||
our_sig, closing_tx = chan.make_closing_tx(our_scriptpubkey, their_scriptpubkey, fee_sat=our_fee, drop_remote=drop_remote)
|
||||
self.send_message('closing_signed', channel_id=chan.channel_id, fee_satoshis=our_fee, signature=our_sig)
|
||||
def verify_signature(tx, sig):
|
||||
their_pubkey = chan.config[REMOTE].multisig_key.pubkey
|
||||
preimage_hex = tx.serialize_preimage(0)
|
||||
pre_hash = sha256d(bfh(preimage_hex))
|
||||
return ecc.verify_signature(their_pubkey, sig, pre_hash)
|
||||
# the funder sends the first 'closing_signed' message
|
||||
if chan.constraints.is_initiator:
|
||||
send_closing_signed()
|
||||
|
@ -1411,11 +1416,11 @@ class Peer(Logger):
|
|||
their_sig = cs_payload['signature']
|
||||
# verify their sig: they might have dropped their output
|
||||
our_sig, closing_tx = chan.make_closing_tx(our_scriptpubkey, their_scriptpubkey, fee_sat=their_fee, drop_remote=False)
|
||||
if closing_tx.verify_signature(0, their_sig):
|
||||
if not verify_signature(closing_tx, their_sig):
|
||||
drop_remote = False
|
||||
else:
|
||||
our_sig, closing_tx = chan.make_closing_tx(our_scriptpubkey, their_scriptpubkey, fee_sat=their_fee, drop_remote=True)
|
||||
if closing_tx.verify_signature(0, their_sig):
|
||||
if not verify_signature(closing_tx, their_sig):
|
||||
drop_remote = True
|
||||
else:
|
||||
raise Exception('failed to verify their signature')
|
||||
|
|
|
@ -1822,38 +1822,31 @@ class PartialTransaction(Transaction):
|
|||
if len(self.inputs()) != len(signatures):
|
||||
raise Exception('expected {} signatures; got {}'.format(len(self.inputs()), len(signatures)))
|
||||
for i, txin in enumerate(self.inputs()):
|
||||
pubkeys = [pk.hex() for pk in txin.pubkeys]
|
||||
sig = signatures[i]
|
||||
if bfh(sig) in list(txin.part_sigs.values()):
|
||||
continue
|
||||
sig_bytes = ecc.sig_string_from_der_sig(bfh(sig[:-2]))
|
||||
signing_pubkey = self.verify_signature(i, sig_bytes)
|
||||
if signing_pubkey:
|
||||
_logger.info(f"adding sig: txin_idx={i}, signing_pubkey={signing_pubkey.hex()}, sig={sig}")
|
||||
self.add_signature_to_txin(txin_idx=i, signing_pubkey=signing_pubkey.hex(), sig=sig)
|
||||
pre_hash = sha256d(bfh(self.serialize_preimage(i)))
|
||||
sig_string = ecc.sig_string_from_der_sig(bfh(sig[:-2]))
|
||||
for recid in range(4):
|
||||
try:
|
||||
public_key = ecc.ECPubkey.from_sig_string(sig_string, recid, pre_hash)
|
||||
except ecc.InvalidECPointException:
|
||||
# the point might not be on the curve for some recid values
|
||||
continue
|
||||
pubkey_hex = public_key.get_public_key_hex(compressed=True)
|
||||
if pubkey_hex in pubkeys:
|
||||
try:
|
||||
public_key.verify_message_hash(sig_string, pre_hash)
|
||||
except Exception:
|
||||
_logger.exception('')
|
||||
continue
|
||||
_logger.info(f"adding sig: txin_idx={i}, signing_pubkey={pubkey_hex}, sig={sig}")
|
||||
self.add_signature_to_txin(txin_idx=i, signing_pubkey=pubkey_hex, sig=sig)
|
||||
break
|
||||
# redo raw
|
||||
self.invalidate_ser_cache()
|
||||
|
||||
def verify_signature(self, i: int, sig: bytes) -> bytes:
|
||||
# returns the signing pubkey if verification passes
|
||||
txin = self.inputs()[i]
|
||||
pubkeys = [pk for pk in txin.pubkeys]
|
||||
pre_hash = sha256d(bfh(self.serialize_preimage(i)))
|
||||
for recid in range(4):
|
||||
try:
|
||||
public_key = ecc.ECPubkey.from_sig_string(sig, recid, pre_hash)
|
||||
except ecc.InvalidECPointException:
|
||||
# the point might not be on the curve for some recid values
|
||||
continue
|
||||
pubkey = public_key.get_public_key_bytes(compressed=True)
|
||||
if pubkey in pubkeys:
|
||||
try:
|
||||
public_key.verify_message_hash(sig, pre_hash)
|
||||
except Exception:
|
||||
_logger.exception('')
|
||||
continue
|
||||
return pubkey
|
||||
return False
|
||||
|
||||
def add_signature_to_txin(self, *, txin_idx: int, signing_pubkey: str, sig: str):
|
||||
txin = self._inputs[txin_idx]
|
||||
txin.part_sigs[bfh(signing_pubkey)] = bfh(sig)
|
||||
|
|
Loading…
Add table
Reference in a new issue