Browse Source

make add_signature_to_txin an instance method

3.2.x
ThomasV 7 years ago
parent
commit
5a5502303f
  1. 15
      lib/transaction.py
  2. 3
      plugins/digitalbitbox/digitalbitbox.py
  3. 2
      plugins/ledger/ledger.py

15
lib/transaction.py

@ -700,17 +700,18 @@ class Transaction:
continue continue
j = pubkeys.index(pubkey_hex) j = pubkeys.index(pubkey_hex)
print_error("adding sig", i, j, pubkey_hex, sig) print_error("adding sig", i, j, pubkey_hex, sig)
self.add_signature_to_txin(self._inputs[i], j, sig) self.add_signature_to_txin(i, j, sig)
#self._inputs[i]['x_pubkeys'][j] = pubkey #self._inputs[i]['x_pubkeys'][j] = pubkey
break break
# redo raw # redo raw
self.raw = self.serialize() self.raw = self.serialize()
@classmethod def add_signature_to_txin(self, i, signingPos, sig):
def add_signature_to_txin(cls, txin, signingPos, sig): txin = self._inputs[i]
txin['signatures'][signingPos] = sig txin['signatures'][signingPos] = sig
txin['scriptSig'] = None # force re-serialization txin['scriptSig'] = None # force re-serialization
txin['witness'] = None # force re-serialization txin['witness'] = None # force re-serialization
self.raw = None
def deserialize(self, force_full_parse=False): def deserialize(self, force_full_parse=False):
if self.raw is None: if self.raw is None:
@ -1164,13 +1165,9 @@ class Transaction:
continue continue
print_error("adding signature for", _pubkey) print_error("adding signature for", _pubkey)
sec, compressed = keypairs.get(_pubkey) sec, compressed = keypairs.get(_pubkey)
# pubkey might not actually be a 02-04 pubkey for fd keys; so:
pubkey = ecc.ECPrivkey(sec).get_public_key_hex(compressed=compressed)
# add signature
sig = self.sign_txin(i, sec) sig = self.sign_txin(i, sec)
self.add_signature_to_txin(txin, j, sig) self.add_signature_to_txin(i, j, sig)
txin['pubkeys'][j] = pubkey # needed for fd keys
self._inputs[i] = txin
print_error("is_complete", self.is_complete()) print_error("is_complete", self.is_complete())
self.raw = self.serialize() self.raw = self.serialize()

3
plugins/digitalbitbox/digitalbitbox.py

@ -647,8 +647,7 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
sig_s = int(signed['sig'][64:], 16) sig_s = int(signed['sig'][64:], 16)
sig = ecc.der_sig_from_r_and_s(sig_r, sig_s) sig = ecc.der_sig_from_r_and_s(sig_r, sig_s)
sig = to_hexstr(sig) + '01' sig = to_hexstr(sig) + '01'
Transaction.add_signature_to_txin(txin, ii, sig) tx.add_signature_to_txin(i, ii, sig)
tx._inputs[i] = txin
except UserCancelled: except UserCancelled:
raise raise
except BaseException as e: except BaseException as e:

2
plugins/ledger/ledger.py

@ -514,7 +514,7 @@ class Ledger_KeyStore(Hardware_KeyStore):
for i, txin in enumerate(tx.inputs()): for i, txin in enumerate(tx.inputs()):
signingPos = inputs[i][4] signingPos = inputs[i][4]
Transaction.add_signature_to_txin(txin, signingPos, bh2u(signatures[i])) tx.add_signature_to_txin(i, signingPos, bh2u(signatures[i]))
tx.raw = tx.serialize() tx.raw = tx.serialize()
@test_pin_unlocked @test_pin_unlocked

Loading…
Cancel
Save