Merge branch 'master' of github.com:spesmilo/electrum
This commit is contained in:
@@ -2269,25 +2269,38 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
private_keys = {}
|
private_keys = {}
|
||||||
addresses = self.wallet.get_addresses()
|
addresses = self.wallet.get_addresses()
|
||||||
done = False
|
done = False
|
||||||
|
cancelled = False
|
||||||
def privkeys_thread():
|
def privkeys_thread():
|
||||||
for addr in addresses:
|
for addr in addresses:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
if done:
|
if done or cancelled:
|
||||||
break
|
break
|
||||||
privkey = self.wallet.export_private_key(addr, password)[0]
|
privkey = self.wallet.export_private_key(addr, password)[0]
|
||||||
private_keys[addr] = privkey
|
private_keys[addr] = privkey
|
||||||
self.computing_privkeys_signal.emit()
|
self.computing_privkeys_signal.emit()
|
||||||
self.computing_privkeys_signal.disconnect()
|
if not cancelled:
|
||||||
self.show_privkeys_signal.emit()
|
self.computing_privkeys_signal.disconnect()
|
||||||
|
self.show_privkeys_signal.emit()
|
||||||
|
|
||||||
def show_privkeys():
|
def show_privkeys():
|
||||||
s = "\n".join( map( lambda x: x[0] + "\t"+ x[1], private_keys.items()))
|
s = "\n".join( map( lambda x: x[0] + "\t"+ x[1], private_keys.items()))
|
||||||
e.setText(s)
|
e.setText(s)
|
||||||
b.setEnabled(True)
|
b.setEnabled(True)
|
||||||
self.show_privkeys_signal.disconnect()
|
self.show_privkeys_signal.disconnect()
|
||||||
|
nonlocal done
|
||||||
|
done = True
|
||||||
|
|
||||||
|
def on_dialog_closed(*args):
|
||||||
|
nonlocal done
|
||||||
|
nonlocal cancelled
|
||||||
|
if not done:
|
||||||
|
cancelled = True
|
||||||
|
self.computing_privkeys_signal.disconnect()
|
||||||
|
self.show_privkeys_signal.disconnect()
|
||||||
|
|
||||||
self.computing_privkeys_signal.connect(lambda: e.setText("Please wait... %d/%d"%(len(private_keys),len(addresses))))
|
self.computing_privkeys_signal.connect(lambda: e.setText("Please wait... %d/%d"%(len(private_keys),len(addresses))))
|
||||||
self.show_privkeys_signal.connect(show_privkeys)
|
self.show_privkeys_signal.connect(show_privkeys)
|
||||||
|
d.finished.connect(on_dialog_closed)
|
||||||
threading.Thread(target=privkeys_thread).start()
|
threading.Thread(target=privkeys_thread).start()
|
||||||
|
|
||||||
if not d.exec_():
|
if not d.exec_():
|
||||||
|
|||||||
@@ -60,6 +60,21 @@ class Ledger_Client():
|
|||||||
def versiontuple(self, v):
|
def versiontuple(self, v):
|
||||||
return tuple(map(int, (v.split("."))))
|
return tuple(map(int, (v.split("."))))
|
||||||
|
|
||||||
|
def test_pin_unlocked(func):
|
||||||
|
"""Function decorator to test the Ledger for being unlocked, and if not,
|
||||||
|
raise a human-readable exception.
|
||||||
|
"""
|
||||||
|
def catch_exception(self, *args, **kwargs):
|
||||||
|
try:
|
||||||
|
return func(self, *args, **kwargs)
|
||||||
|
except BTChipException as e:
|
||||||
|
if e.sw == 0x6982:
|
||||||
|
raise Exception(_('Your Ledger is locked. Please unlock it.'))
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
return catch_exception
|
||||||
|
|
||||||
|
@test_pin_unlocked
|
||||||
def get_xpub(self, bip32_path, xtype):
|
def get_xpub(self, bip32_path, xtype):
|
||||||
self.checkDevice()
|
self.checkDevice()
|
||||||
# bip32_path is of the form 44'/0'/1'
|
# bip32_path is of the form 44'/0'/1'
|
||||||
@@ -80,7 +95,7 @@ class Ledger_Client():
|
|||||||
if len(splitPath) > 1:
|
if len(splitPath) > 1:
|
||||||
prevPath = "/".join(splitPath[0:len(splitPath) - 1])
|
prevPath = "/".join(splitPath[0:len(splitPath) - 1])
|
||||||
nodeData = self.dongleObject.getWalletPublicKey(prevPath)
|
nodeData = self.dongleObject.getWalletPublicKey(prevPath)
|
||||||
publicKey = compress_public_key(nodeData['publicKey'])#
|
publicKey = compress_public_key(nodeData['publicKey'])
|
||||||
h = hashlib.new('ripemd160')
|
h = hashlib.new('ripemd160')
|
||||||
h.update(hashlib.sha256(publicKey).digest())
|
h.update(hashlib.sha256(publicKey).digest())
|
||||||
fingerprint = unpack(">I", h.digest()[0:4])[0]
|
fingerprint = unpack(">I", h.digest()[0:4])[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user