Browse Source

flake8: enable more mandatory tests

master
SomberNight 3 years ago
parent
commit
01b5e3f8e0
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 5
      .cirrus.yml
  2. 4
      contrib/android/apkdiff.py
  3. 2
      electrum/coinchooser.py
  4. 2
      electrum/contacts.py
  5. 2
      electrum/gui/kivy/nfc_scanner/__init__.py
  6. 8
      electrum/gui/kivy/nfc_scanner/scanner_android.py
  7. 1
      electrum/gui/kivy/uix/__init__.py
  8. 4
      electrum/gui/kivy/uix/drawer.py
  9. 4
      electrum/gui/kivy/util.py
  10. 4
      electrum/gui/qml/__init__.py
  11. 2
      electrum/gui/qml/qeaddressdetails.py
  12. 16
      electrum/gui/qml/qedaemon.py
  13. 2
      electrum/gui/qml/qeqr.py
  14. 2
      electrum/gui/qml/qetransactionlistmodel.py
  15. 2
      electrum/gui/qt/qrreader/qtmultimedia/validator.py
  16. 2
      electrum/gui/stdio.py
  17. 2
      electrum/lnaddr.py
  18. 14
      electrum/pem.py
  19. 6
      electrum/plugins/coldcard/coldcard.py
  20. 2
      electrum/plugins/coldcard/qt.py
  21. 6
      electrum/plugins/digitalbitbox/digitalbitbox.py
  22. 26
      electrum/plugins/ledger/auth2fa.py
  23. 2
      electrum/plugins/ledger/ledger.py
  24. 2
      electrum/plugins/revealer/qt.py
  25. 184
      electrum/ripemd.py
  26. 4
      electrum/rsakey.py
  27. 2
      electrum/scripts/ln_features.py
  28. 4
      electrum/tests/test_commands.py
  29. 10
      electrum/tests/test_lnutil.py
  30. 6
      electrum/tests/test_util.py
  31. 8
      electrum/transaction.py
  32. 6
      electrum/wizard.py

5
.cirrus.yml

@ -149,7 +149,10 @@ task:
matrix:
- name: Flake8 Mandatory
env:
ELECTRUM_LINTERS: E9,F63,F7,F82,W191
# list of error codes:
# - https://flake8.pycqa.org/en/latest/user/error-codes.html
# - https://pycodestyle.pycqa.org/en/latest/intro.html#error-codes
ELECTRUM_LINTERS: E9,E101,E129,E273,E274,E703,E71,F63,F7,F82,W191,W29
- name: Flake8 Non-Mandatory
env:
ELECTRUM_LINTERS: E,F,W,C90

4
contrib/android/apkdiff.py

@ -11,7 +11,7 @@ class ApkDiff:
sourceZip = ZipFile(sourceApk, 'r')
destinationZip = ZipFile(destinationApk, 'r')
if self.compareManifests(sourceZip, destinationZip) and self.compareEntries(sourceZip, destinationZip) == True:
if self.compareManifests(sourceZip, destinationZip) and self.compareEntries(sourceZip, destinationZip):
print("APKs match!")
return True
else:
@ -50,7 +50,7 @@ class ApkDiff:
sourceEntry = sourceZip.open(sourceEntryInfo, 'r')
destinationEntry = destinationZip.open(destinationEntryInfo, 'r')
if self.compareFiles(sourceEntry, destinationEntry) != True:
if not self.compareFiles(sourceEntry, destinationEntry):
print("APK entry %s does not match %s!" % (sourceEntryInfo.filename, destinationEntryInfo.filename))
return False

2
electrum/coinchooser.py

@ -482,7 +482,7 @@ COIN_CHOOSERS = {
def get_name(config):
kind = config.get('coin_chooser')
if not kind in COIN_CHOOSERS:
if kind not in COIN_CHOOSERS:
kind = 'Privacy'
return kind

2
electrum/contacts.py

@ -134,7 +134,7 @@ class Contacts(dict, Logger):
return regex.search(haystack).groups()[0]
except AttributeError:
return None
def _validate(self, data):
for k, v in list(data.items()):
if k == 'contacts':

2
electrum/gui/kivy/nfc_scanner/__init__.py

@ -12,7 +12,7 @@ class NFCBase(Widget):
'''
payload = ObjectProperty(None)
'''This is the data gotten from the tag.
'''This is the data gotten from the tag.
'''
def nfc_init(self):

8
electrum/gui/kivy/nfc_scanner/scanner_android.py

@ -46,7 +46,7 @@ class ScannerAndroid(NFCBase):
global app
app = App.get_running_app()
# Make sure we are listening to new intent
# Make sure we are listening to new intent
activity.bind(on_new_intent=self.on_new_intent)
# Configure nfc
@ -55,7 +55,7 @@ class ScannerAndroid(NFCBase):
# Check if adapter exists
if not self.nfc_adapter:
return False
# specify that we want our activity to remain on top when a new intent
# is fired
self.nfc_pending_intent = PendingIntent.getActivity(context, 0,
@ -131,7 +131,7 @@ class ScannerAndroid(NFCBase):
''' This function is called when the application receives a
new intent, for the ones the application has registered previously,
either in the manifest or in the foreground dispatch setup in the
nfc_init function above.
nfc_init function above.
'''
action_list = (NfcAdapter.ACTION_NDEF_DISCOVERED,)
@ -214,7 +214,7 @@ class ScannerAndroid(NFCBase):
ndef_record = NdefRecord(
NdefRecord.TNF_MIME_MEDIA,
'org.electrum.kivy', '', data)
# Create message
ndef_message = NdefMessage([ndef_record])

1
electrum/gui/kivy/uix/__init__.py

@ -1 +0,0 @@

4
electrum/gui/kivy/uix/drawer.py

@ -135,7 +135,7 @@ class Drawer(Factory.RelativeLayout):
return
def on_touch_move(self, touch):
if not touch.grab_current is self:
if touch.grab_current is not self:
return
self._touch = False
# skip on tablet mode
@ -175,7 +175,7 @@ class Drawer(Factory.RelativeLayout):
return
def on_touch_up(self, touch):
if not touch.grab_current is self:
if touch.grab_current is not self:
return
self._triigger_gc()

4
electrum/gui/kivy/util.py

@ -3,12 +3,12 @@ from kivy.utils import get_color_from_hex, platform
def address_colors(wallet, addr):
"""
Chooses the appropriate text color and background color to
Chooses the appropriate text color and background color to
mark receiving, change and billing addresses.
Returns: color, background_color
"""
# modified colors (textcolor, background_color) from electrum/gui/qt/util.py
GREEN = ("#000000", "#8af296")
YELLOW = ("#000000", "#ffff00")

4
electrum/gui/qml/__init__.py

@ -52,9 +52,9 @@ class ElectrumGui(Logger):
if hasattr(QGuiApplication, 'setDesktopFileName'):
QGuiApplication.setDesktopFileName('electrum.desktop')
if hasattr(QtCore.Qt, "AA_EnableHighDpiScaling"):
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling);
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
if not "QT_QUICK_CONTROLS_STYLE" in os.environ:
if "QT_QUICK_CONTROLS_STYLE" not in os.environ:
os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
self.gui_thread = threading.current_thread()

2
electrum/gui/qml/qeaddressdetails.py

@ -125,5 +125,5 @@ class QEAddressDetails(QObject):
if self._wallet.derivationPrefix:
self._derivationPath = self._derivationPath.replace('m', self._wallet.derivationPrefix)
self._numtx = self._wallet.wallet.adb.get_address_history_len(self._address)
assert(self._numtx == self.historyModel.rowCount(0))
assert self._numtx == self.historyModel.rowCount(0)
self.detailsChanged.emit()

16
electrum/gui/qml/qedaemon.py

@ -44,25 +44,25 @@ class QEWalletListModel(QAbstractListModel):
if role_name == 'path':
return wallet_path
if role_name == 'active':
return wallet != None
return wallet is not None
def add_wallet(self, wallet_path = None, wallet: Abstract_Wallet = None):
if wallet_path == None and wallet == None:
if wallet_path is None and wallet is None:
return
# only add wallet instance if instance not yet in model
if wallet:
for name,path,w in self.wallets:
if w == wallet:
return
self.beginInsertRows(QModelIndex(), len(self.wallets), len(self.wallets));
if wallet == None:
self.beginInsertRows(QModelIndex(), len(self.wallets), len(self.wallets))
if wallet is None:
wallet_name = os.path.basename(wallet_path)
else:
wallet_name = wallet.basename()
wallet_path = standardize_path(wallet_path)
item = (wallet_name, wallet_path, wallet)
self.wallets.append(item);
self.endInsertRows();
self.wallets.append(item)
self.endInsertRows()
def remove_wallet(self, path):
i = 0
@ -148,7 +148,7 @@ class QEDaemon(AuthMixin, QObject):
@pyqtSlot(str)
@pyqtSlot(str, str)
def load_wallet(self, path=None, password=None):
if path == None:
if path is None:
self._path = self.daemon.config.get('wallet_path') # command line -w option
if self._path is None:
self._path = self.daemon.config.get('gui_last_wallet')
@ -175,7 +175,7 @@ class QEDaemon(AuthMixin, QObject):
try:
wallet = self.daemon.load_wallet(self._path, password)
if wallet != None:
if wallet is not None:
self._current_wallet = QEWallet.getInstanceFor(wallet)
if not wallet_already_open:
self._loaded_wallets.add_wallet(wallet_path=self._path, wallet=wallet)

2
electrum/gui/qml/qeqr.py

@ -37,7 +37,7 @@ class QEQRParser(QObject):
self._logger.warning("Already processing an image. Check 'busy' property before calling scanImage")
return
if image == None:
if image is None:
self._logger.warning("No image to decode")
return

2
electrum/gui/qml/qetransactionlistmodel.py

@ -59,7 +59,7 @@ class QETransactionListModel(QAbstractListModel):
item['key'] = item['txid'] if 'txid' in item else item['payment_hash']
if not 'lightning' in item:
if 'lightning' not in item:
item['lightning'] = False
if item['lightning']:

2
electrum/gui/qt/qrreader/qtmultimedia/validator.py

@ -79,7 +79,7 @@ class QrReaderValidatorCounting(AbstractQrReaderValidator):
for result in results:
# Increment the detection count
if not result in self.result_counts:
if result not in self.result_counts:
self.result_counts[result] = 0
self.result_counts[result] += 1

2
electrum/gui/stdio.py

@ -138,7 +138,7 @@ class ElectrumGui(BaseElectrumGui, EventListener):
else:
msg = _("Not connected")
return(msg)
return msg
def print_contacts(self):

2
electrum/lnaddr.py

@ -246,7 +246,7 @@ def lnencode(addr: 'LnAddr', privkey) -> str:
# both.
if 'd' in tags_set and 'h' in tags_set:
raise ValueError("Cannot include both 'd' and 'h'")
if not 'd' in tags_set and not 'h' in tags_set:
if 'd' not in tags_set and 'h' not in tags_set:
raise ValueError("Must include either 'd' or 'h'")
# We actually sign the hrp, then data (padded to 8 bits with zeroes).

14
electrum/pem.py

@ -46,7 +46,7 @@ def b2a_base64(b):
def dePem(s, name):
"""Decode a PEM string into a bytearray of its payload.
The input must contain an appropriate PEM prefix and postfix
based on the input name string, e.g. for name="CERTIFICATE":
@ -54,13 +54,13 @@ def dePem(s, name):
MIIBXDCCAUSgAwIBAgIBADANBgkqhkiG9w0BAQUFADAPMQ0wCwYDVQQDEwRUQUNL
...
KoZIhvcNAQEFBQADAwA5kw==
-----END CERTIFICATE-----
-----END CERTIFICATE-----
The first such PEM block in the input will be found, and its
payload will be base64 decoded and returned.
"""
prefix = "-----BEGIN %s-----" % name
postfix = "-----END %s-----" % name
postfix = "-----END %s-----" % name
start = s.find(prefix)
if start == -1:
raise SyntaxError("Missing PEM prefix")
@ -90,7 +90,7 @@ def dePemList(s, name):
YMEBdw69PUP8JB4AdqA3K6BVCWfcjN36lx6JwxmZQncS6sww7DecFO/qjSePCxwM
+kdDqX/9/183nmjx6bf0ewhPXkA0nVXsDYZaydN8rJU1GaMlnjcIYxY= -----END TACK
BREAK SIG----- "
All such PEM blocks will be found, decoded, and return in an ordered list
of bytearrays, which may have zero elements if not PEM blocks are found.
"""
@ -111,15 +111,15 @@ def dePemList(s, name):
def pem(b, name):
"""Encode a payload bytearray into a PEM string.
The input will be base64 encoded, then wrapped in a PEM prefix/postfix
based on the name string, e.g. for name="CERTIFICATE":
-----BEGIN CERTIFICATE-----
MIIBXDCCAUSgAwIBAgIBADANBgkqhkiG9w0BAQUFADAPMQ0wCwYDVQQDEwRUQUNL
...
KoZIhvcNAQEFBQADAwA5kw==
-----END CERTIFICATE-----
-----END CERTIFICATE-----
"""
s1 = b2a_base64(b)[:-1] # remove terminating \n
s2 = b""

6
electrum/plugins/coldcard/coldcard.py

@ -241,7 +241,7 @@ class CKCCClient(HardwareClientBase):
# get a file
return self.dev.download_file(length, checksum, file_number=file_number)
class Coldcard_KeyStore(Hardware_KeyStore):
hw_type = 'coldcard'
@ -311,7 +311,7 @@ class Coldcard_KeyStore(Hardware_KeyStore):
except (UnicodeError, AssertionError):
# there are other restrictions on message content,
# but let the device enforce and report those
self.handler.show_error('Only short (%d max) ASCII messages can be signed.'
self.handler.show_error('Only short (%d max) ASCII messages can be signed.'
% MSG_SIGNING_MAX_LENGTH)
return b''
@ -382,7 +382,7 @@ class Coldcard_KeyStore(Hardware_KeyStore):
break
rlen, rsha = resp
# download the resulting txn.
raw_resp = client.download_file(rlen, rsha)

2
electrum/plugins/coldcard/qt.py

@ -233,7 +233,7 @@ class CKCCSettingsDialog(WindowModalDialog):
self.window.show_error("Does not appear to be a Coldcard firmware file.\n\n%s" % exc)
return
# TODO:
# TODO:
# - detect if they are trying to downgrade; aint gonna work
# - warn them about the reboot?
# - length checks

6
electrum/plugins/digitalbitbox/digitalbitbox.py

@ -350,8 +350,8 @@ class DigitalBitbox_Client(HardwareClientBase):
HWW_CID = 0xFF000000
HWW_CMD = 0x80 + 0x40 + 0x01
data_len = len(data)
seq = 0;
idx = 0;
seq = 0
idx = 0
write = []
while idx < data_len:
if idx == 0:
@ -373,7 +373,7 @@ class DigitalBitbox_Client(HardwareClientBase):
cmd = read[4]
data_len = read[5] * 256 + read[6]
data = read[7:]
idx = len(read) - 7;
idx = len(read) - 7
while idx < data_len:
# CONT response
read = bytearray(self.dbb_hid.read(self.usbReportSize))

26
electrum/plugins/ledger/auth2fa.py

@ -44,14 +44,14 @@ class LedgerAuthDialog(QDialog):
self.cfg = copy.deepcopy(self.handler.win.wallet.get_keystore().cfg)
self.dongle = client.dongleObject.dongle
self.pin = ''
self.devmode = self.getDevice2FAMode()
if self.devmode == 0x11 or self.txdata['confirmationType'] == 1:
self.cfg['mode'] = 0
vbox = QVBoxLayout()
self.setLayout(vbox)
def on_change_mode(idx):
self.cfg['mode'] = 0 if self.devmode == 0x11 else idx if idx > 0 else 1
if self.cfg['mode'] > 0:
@ -59,11 +59,11 @@ class LedgerAuthDialog(QDialog):
self.handler.win.wallet.save_keystore()
self.update_dlg()
def return_pin():
self.pin = self.pintxt.text() if self.txdata['confirmationType'] == 1 else self.cardtxt.text()
self.pin = self.pintxt.text() if self.txdata['confirmationType'] == 1 else self.cardtxt.text()
if self.cfg['mode'] == 1:
self.pin = ''.join(chr(int(str(i),16)) for i in self.pin)
self.accept()
self.modebox = QWidget()
modelayout = QHBoxLayout()
self.modebox.setLayout(modelayout)
@ -73,7 +73,7 @@ class LedgerAuthDialog(QDialog):
modelayout.addStretch(1)
self.modebox.setMaximumHeight(50)
vbox.addWidget(self.modebox)
self.populate_modes()
self.modes.currentIndexChanged.connect(on_change_mode)
@ -81,7 +81,7 @@ class LedgerAuthDialog(QDialog):
self.helpmsg.setStyleSheet("QTextEdit { color:black; background-color: lightgray; }")
self.helpmsg.setReadOnly(True)
vbox.addWidget(self.helpmsg)
self.pinbox = QWidget()
pinlayout = QHBoxLayout()
self.pinbox.setLayout(pinlayout)
@ -94,7 +94,7 @@ class LedgerAuthDialog(QDialog):
pinlayout.addStretch(1)
self.pinbox.setVisible(self.cfg['mode'] == 0)
vbox.addWidget(self.pinbox)
self.cardbox = QWidget()
card = QVBoxLayout()
self.cardbox.setLayout(card)
@ -107,7 +107,7 @@ class LedgerAuthDialog(QDialog):
self.addrtext.setReadOnly(True)
self.addrtext.setMaximumHeight(130)
card.addWidget(self.addrtext)
def pin_changed(s):
if len(s) < len(self.idxs):
i = self.idxs[len(s)]
@ -122,8 +122,8 @@ class LedgerAuthDialog(QDialog):
self.addrtext.setHtml(str(text))
else:
self.addrtext.setHtml(_("Press Enter"))
pin_changed('')
pin_changed('')
cardpin = QHBoxLayout()
cardpin.addWidget(QLabel(_("Enter PIN:")))
self.cardtxt = PasswordLineEdit()
@ -136,7 +136,7 @@ class LedgerAuthDialog(QDialog):
card.addLayout(cardpin)
self.cardbox.setVisible(self.cfg['mode'] == 1)
vbox.addWidget(self.cardbox)
self.update_dlg()
def populate_modes(self):
@ -146,7 +146,7 @@ class LedgerAuthDialog(QDialog):
if self.txdata['confirmationType'] > 1:
self.modes.addItem(_("Security Card Challenge"))
self.modes.blockSignals(False)
def update_dlg(self):
self.modes.setCurrentIndex(self.cfg['mode'])
self.modebox.setVisible(True)

2
electrum/plugins/ledger/ledger.py

@ -333,7 +333,7 @@ class Ledger_KeyStore(Hardware_KeyStore):
# Pad r and s points with 0x00 bytes when the point is small to get valid signature.
r_padded = bytes([0x00]) * (32 - len(r)) + r
s_padded = bytes([0x00]) * (32 - len(s)) + s
return bytes([27 + 4 + (signature[0] & 0x01)]) + r_padded + s_padded
@runs_in_hwd_thread

2
electrum/plugins/revealer/qt.py

@ -330,7 +330,7 @@ class Plugin(RevealerPlugin):
painter.end()
img = bitmap.toImage()
if (self.rawnoise == False):
if not self.rawnoise:
self.make_rawnoise()
self.make_cypherseed(img, self.rawnoise, False, is_seed)

184
electrum/ripemd.py

@ -159,96 +159,96 @@ def RMD160Transform(state, block): #uint32 state[5], uchar block[64]
e = state[4]
#/* Round 1 */
a, c = R(a, b, c, d, e, F0, K0, 11, 0, x);
e, b = R(e, a, b, c, d, F0, K0, 14, 1, x);
d, a = R(d, e, a, b, c, F0, K0, 15, 2, x);
c, e = R(c, d, e, a, b, F0, K0, 12, 3, x);
b, d = R(b, c, d, e, a, F0, K0, 5, 4, x);
a, c = R(a, b, c, d, e, F0, K0, 8, 5, x);
e, b = R(e, a, b, c, d, F0, K0, 7, 6, x);
d, a = R(d, e, a, b, c, F0, K0, 9, 7, x);
c, e = R(c, d, e, a, b, F0, K0, 11, 8, x);
b, d = R(b, c, d, e, a, F0, K0, 13, 9, x);
a, c = R(a, b, c, d, e, F0, K0, 14, 10, x);
e, b = R(e, a, b, c, d, F0, K0, 15, 11, x);
d, a = R(d, e, a, b, c, F0, K0, 6, 12, x);
c, e = R(c, d, e, a, b, F0, K0, 7, 13, x);
b, d = R(b, c, d, e, a, F0, K0, 9, 14, x);
a, c = R(a, b, c, d, e, F0, K0, 8, 15, x); #/* #15 */
a, c = R(a, b, c, d, e, F0, K0, 11, 0, x)
e, b = R(e, a, b, c, d, F0, K0, 14, 1, x)
d, a = R(d, e, a, b, c, F0, K0, 15, 2, x)
c, e = R(c, d, e, a, b, F0, K0, 12, 3, x)
b, d = R(b, c, d, e, a, F0, K0, 5, 4, x)
a, c = R(a, b, c, d, e, F0, K0, 8, 5, x)
e, b = R(e, a, b, c, d, F0, K0, 7, 6, x)
d, a = R(d, e, a, b, c, F0, K0, 9, 7, x)
c, e = R(c, d, e, a, b, F0, K0, 11, 8, x)
b, d = R(b, c, d, e, a, F0, K0, 13, 9, x)
a, c = R(a, b, c, d, e, F0, K0, 14, 10, x)
e, b = R(e, a, b, c, d, F0, K0, 15, 11, x)
d, a = R(d, e, a, b, c, F0, K0, 6, 12, x)
c, e = R(c, d, e, a, b, F0, K0, 7, 13, x)
b, d = R(b, c, d, e, a, F0, K0, 9, 14, x)
a, c = R(a, b, c, d, e, F0, K0, 8, 15, x) #/* #15 */
#/* Round 2 */
e, b = R(e, a, b, c, d, F1, K1, 7, 7, x);
d, a = R(d, e, a, b, c, F1, K1, 6, 4, x);
c, e = R(c, d, e, a, b, F1, K1, 8, 13, x);
b, d = R(b, c, d, e, a, F1, K1, 13, 1, x);
a, c = R(a, b, c, d, e, F1, K1, 11, 10, x);
e, b = R(e, a, b, c, d, F1, K1, 9, 6, x);
d, a = R(d, e, a, b, c, F1, K1, 7, 15, x);
c, e = R(c, d, e, a, b, F1, K1, 15, 3, x);
b, d = R(b, c, d, e, a, F1, K1, 7, 12, x);
a, c = R(a, b, c, d, e, F1, K1, 12, 0, x);
e, b = R(e, a, b, c, d, F1, K1, 15, 9, x);
d, a = R(d, e, a, b, c, F1, K1, 9, 5, x);
c, e = R(c, d, e, a, b, F1, K1, 11, 2, x);
b, d = R(b, c, d, e, a, F1, K1, 7, 14, x);
a, c = R(a, b, c, d, e, F1, K1, 13, 11, x);
e, b = R(e, a, b, c, d, F1, K1, 12, 8, x); #/* #31 */
e, b = R(e, a, b, c, d, F1, K1, 7, 7, x)
d, a = R(d, e, a, b, c, F1, K1, 6, 4, x)
c, e = R(c, d, e, a, b, F1, K1, 8, 13, x)
b, d = R(b, c, d, e, a, F1, K1, 13, 1, x)
a, c = R(a, b, c, d, e, F1, K1, 11, 10, x)
e, b = R(e, a, b, c, d, F1, K1, 9, 6, x)
d, a = R(d, e, a, b, c, F1, K1, 7, 15, x)
c, e = R(c, d, e, a, b, F1, K1, 15, 3, x)
b, d = R(b, c, d, e, a, F1, K1, 7, 12, x)
a, c = R(a, b, c, d, e, F1, K1, 12, 0, x)
e, b = R(e, a, b, c, d, F1, K1, 15, 9, x)
d, a = R(d, e, a, b, c, F1, K1, 9, 5, x)
c, e = R(c, d, e, a, b, F1, K1, 11, 2, x)
b, d = R(b, c, d, e, a, F1, K1, 7, 14, x)
a, c = R(a, b, c, d, e, F1, K1, 13, 11, x)
e, b = R(e, a, b, c, d, F1, K1, 12, 8, x) #/* #31 */
#/* Round 3 */
d, a = R(d, e, a, b, c, F2, K2, 11, 3, x);
c, e = R(c, d, e, a, b, F2, K2, 13, 10, x);
b, d = R(b, c, d, e, a, F2, K2, 6, 14, x);
a, c = R(a, b, c, d, e, F2, K2, 7, 4, x);
e, b = R(e, a, b, c, d, F2, K2, 14, 9, x);
d, a = R(d, e, a, b, c, F2, K2, 9, 15, x);
c, e = R(c, d, e, a, b, F2, K2, 13, 8, x);
b, d = R(b, c, d, e, a, F2, K2, 15, 1, x);
a, c = R(a, b, c, d, e, F2, K2, 14, 2, x);
e, b = R(e, a, b, c, d, F2, K2, 8, 7, x);
d, a = R(d, e, a, b, c, F2, K2, 13, 0, x);
c, e = R(c, d, e, a, b, F2, K2, 6, 6, x);
b, d = R(b, c, d, e, a, F2, K2, 5, 13, x);
a, c = R(a, b, c, d, e, F2, K2, 12, 11, x);
e, b = R(e, a, b, c, d, F2, K2, 7, 5, x);
d, a = R(d, e, a, b, c, F2, K2, 5, 12, x); #/* #47 */
d, a = R(d, e, a, b, c, F2, K2, 11, 3, x)
c, e = R(c, d, e, a, b, F2, K2, 13, 10, x)
b, d = R(b, c, d, e, a, F2, K2, 6, 14, x)
a, c = R(a, b, c, d, e, F2, K2, 7, 4, x)
e, b = R(e, a, b, c, d, F2, K2, 14, 9, x)
d, a = R(d, e, a, b, c, F2, K2, 9, 15, x)
c, e = R(c, d, e, a, b, F2, K2, 13, 8, x)
b, d = R(b, c, d, e, a, F2, K2, 15, 1, x)
a, c = R(a, b, c, d, e, F2, K2, 14, 2, x)
e, b = R(e, a, b, c, d, F2, K2, 8, 7, x)
d, a = R(d, e, a, b, c, F2, K2, 13, 0, x)
c, e = R(c, d, e, a, b, F2, K2, 6, 6, x)
b, d = R(b, c, d, e, a, F2, K2, 5, 13, x)
a, c = R(a, b, c, d, e, F2, K2, 12, 11, x)
e, b = R(e, a, b, c, d, F2, K2, 7, 5, x)
d, a = R(d, e, a, b, c, F2, K2, 5, 12, x) #/* #47 */
#/* Round 4 */
c, e = R(c, d, e, a, b, F3, K3, 11, 1, x);
b, d = R(b, c, d, e, a, F3, K3, 12, 9, x);
a, c = R(a, b, c, d, e, F3, K3, 14, 11, x);
e, b = R(e, a, b, c, d, F3, K3, 15, 10, x);
d, a = R(d, e, a, b, c, F3, K3, 14, 0, x);
c, e = R(c, d, e, a, b, F3, K3, 15, 8, x);
b, d = R(b, c, d, e, a, F3, K3, 9, 12, x);
a, c = R(a, b, c, d, e, F3, K3, 8, 4, x);
e, b = R(e, a, b, c, d, F3, K3, 9, 13, x);
d, a = R(d, e, a, b, c, F3, K3, 14, 3, x);
c, e = R(c, d, e, a, b, F3, K3, 5, 7, x);
b, d = R(b, c, d, e, a, F3, K3, 6, 15, x);
a, c = R(a, b, c, d, e, F3, K3, 8, 14, x);
e, b = R(e, a, b, c, d, F3, K3, 6, 5, x);
d, a = R(d, e, a, b, c, F3, K3, 5, 6, x);
c, e = R(c, d, e, a, b, F3, K3, 12, 2, x); #/* #63 */
c, e = R(c, d, e, a, b, F3, K3, 11, 1, x)
b, d = R(b, c, d, e, a, F3, K3, 12, 9, x)
a, c = R(a, b, c, d, e, F3, K3, 14, 11, x)
e, b = R(e, a, b, c, d, F3, K3, 15, 10, x)
d, a = R(d, e, a, b, c, F3, K3, 14, 0, x)
c, e = R(c, d, e, a, b, F3, K3, 15, 8, x)
b, d = R(b, c, d, e, a, F3, K3, 9, 12, x)
a, c = R(a, b, c, d, e, F3, K3, 8, 4, x)
e, b = R(e, a, b, c, d, F3, K3, 9, 13, x)
d, a = R(d, e, a, b, c, F3, K3, 14, 3, x)
c, e = R(c, d, e, a, b, F3, K3, 5, 7, x)
b, d = R(b, c, d, e, a, F3, K3, 6, 15, x)
a, c = R(a, b, c, d, e, F3, K3, 8, 14, x)
e, b = R(e, a, b, c, d, F3, K3, 6, 5, x)
d, a = R(d, e, a, b, c, F3, K3, 5, 6, x)
c, e = R(c, d, e, a, b, F3, K3, 12, 2, x) #/* #63 */
#/* Round 5 */
b, d = R(b, c, d, e, a, F4, K4, 9, 4, x);
a, c = R(a, b, c, d, e, F4, K4, 15, 0, x);
e, b = R(e, a, b, c, d, F4, K4, 5, 5, x);
d, a = R(d, e, a, b, c, F4, K4, 11, 9, x);
c, e = R(c, d, e, a, b, F4, K4, 6, 7, x);
b, d = R(b, c, d, e, a, F4, K4, 8, 12, x);
a, c = R(a, b, c, d, e, F4, K4, 13, 2, x);
e, b = R(e, a, b, c, d, F4, K4, 12, 10, x);
d, a = R(d, e, a, b, c, F4, K4, 5, 14, x);
c, e = R(c, d, e, a, b, F4, K4, 12, 1, x);
b, d = R(b, c, d, e, a, F4, K4, 13, 3, x);
a, c = R(a, b, c, d, e, F4, K4, 14, 8, x);
e, b = R(e, a, b, c, d, F4, K4, 11, 11, x);
d, a = R(d, e, a, b, c, F4, K4, 8, 6, x);
c, e = R(c, d, e, a, b, F4, K4, 5, 15, x);
b, d = R(b, c, d, e, a, F4, K4, 6, 13, x); #/* #79 */
aa = a;
bb = b;
cc = c;
dd = d;
ee = e;
b, d = R(b, c, d, e, a, F4, K4, 9, 4, x)
a, c = R(a, b, c, d, e, F4, K4, 15, 0, x)
e, b = R(e, a, b, c, d, F4, K4, 5, 5, x)
d, a = R(d, e, a, b, c, F4, K4, 11, 9, x)
c, e = R(c, d, e, a, b, F4, K4, 6, 7, x)
b, d = R(b, c, d, e, a, F4, K4, 8, 12, x)
a, c = R(a, b, c, d, e, F4, K4, 13, 2, x)
e, b = R(e, a, b, c, d, F4, K4, 12, 10, x)
d, a = R(d, e, a, b, c, F4, K4, 5, 14, x)
c, e = R(c, d, e, a, b, F4, K4, 12, 1, x)
b, d = R(b, c, d, e, a, F4, K4, 13, 3, x)
a, c = R(a, b, c, d, e, F4, K4, 14, 8, x)
e, b = R(e, a, b, c, d, F4, K4, 11, 11, x)
d, a = R(d, e, a, b, c, F4, K4, 8, 6, x)
c, e = R(c, d, e, a, b, F4, K4, 5, 15, x)
b, d = R(b, c, d, e, a, F4, K4, 6, 13, x) #/* #79 */
aa = a
bb = b
cc = c
dd = d
ee = e
a = state[0]
b = state[1]
@ -342,12 +342,12 @@ def RMD160Transform(state, block): #uint32 state[5], uchar block[64]
c, e = R(c, d, e, a, b, F0, KK4, 11, 9, x)
b, d = R(b, c, d, e, a, F0, KK4, 11, 11, x) #/* #79 */
t = (state[1] + cc + d) % 0x100000000;
state[1] = (state[2] + dd + e) % 0x100000000;
state[2] = (state[3] + ee + a) % 0x100000000;
state[3] = (state[4] + aa + b) % 0x100000000;
state[4] = (state[0] + bb + c) % 0x100000000;
state[0] = t % 0x100000000;
t = (state[1] + cc + d) % 0x100000000
state[1] = (state[2] + dd + e) % 0x100000000
state[2] = (state[3] + ee + a) % 0x100000000
state[3] = (state[4] + aa + b) % 0x100000000
state[4] = (state[0] + bb + c) % 0x100000000
state[0] = t % 0x100000000
pass

4
electrum/rsakey.py

@ -49,11 +49,11 @@ def SHA1(x):
# Check that os.urandom works
import zlib
length = len(zlib.compress(os.urandom(1000)))
assert(length > 900)
assert length > 900
def getRandomBytes(howMany):
b = bytearray(os.urandom(howMany))
assert(len(b) == howMany)
assert len(b) == howMany
return b
prngName = "os.urandom"

2
electrum/scripts/ln_features.py

@ -69,7 +69,7 @@ async def worker(work_queue: asyncio.Queue, results_queue: asyncio.Queue, flag):
# only check non-onion addresses
addr = None
for a in work['addrs']:
if not "onion" in a[0]:
if "onion" not in a[0]:
addr = a
if not addr:
await results_queue.put(None)

4
electrum/tests/test_commands.py

@ -305,8 +305,8 @@ class TestCommandsTestnet(TestCaseForTestnet):
cmds = Commands(config=self.config)
tx = "02000000000101b9723dfc69af058ef6613539a000d2cd098a2c8a74e802b6d8739db708ba8c9a0100000000fdffffff02a00f00000000000016001429e1fd187f0cac845946ae1b11dc136c536bfc0fe8b2000000000000160014100611bcb3aee7aad176936cf4ed56ade03027aa02473044022063c05e2347f16251922830ccc757231247b3c2970c225f988e9204844a1ab7b802204652d2c4816707e3d3bea2609b83b079001a435bad2a99cc2e730f276d07070c012102ee3f00141178006c78b0b458aab21588388335078c655459afe544211f15aee050721f00"
self.assertEqual("02000000000101b9723dfc69af058ef6613539a000d2cd098a2c8a74e802b6d8739db708ba8c9a0100000000fdffffff02a00f00000000000016001429e1fd187f0cac845946ae1b11dc136c536bfc0f84b2000000000000160014100611bcb3aee7aad176936cf4ed56ade03027aa0247304402203aa63539b673a3bd70a76482b17f35f8843974fab28f84143a00450789010bc40220779c2ce2d0217f973f1f6c9f718e19fc7ebd14dd8821a962f002437cda3082ec012102ee3f00141178006c78b0b458aab21588388335078c655459afe544211f15aee000000000",
self.assertEqual("02000000000101b9723dfc69af058ef6613539a000d2cd098a2c8a74e802b6d8739db708ba8c9a0100000000fdffffff02a00f00000000000016001429e1fd187f0cac845946ae1b11dc136c536bfc0f84b2000000000000160014100611bcb3aee7aad176936cf4ed56ade03027aa0247304402203aa63539b673a3bd70a76482b17f35f8843974fab28f84143a00450789010bc40220779c2ce2d0217f973f1f6c9f718e19fc7ebd14dd8821a962f002437cda3082ec012102ee3f00141178006c78b0b458aab21588388335078c655459afe544211f15aee000000000",
cmds._run('bumpfee', (), tx=tx, new_fee_rate='1.6', wallet=wallet))
self.assertEqual("02000000000101b9723dfc69af058ef6613539a000d2cd098a2c8a74e802b6d8739db708ba8c9a0100000000fdffffff02a00f00000000000016001429e1fd187f0cac845946ae1b11dc136c536bfc0f84b2000000000000160014100611bcb3aee7aad176936cf4ed56ade03027aa0247304402203aa63539b673a3bd70a76482b17f35f8843974fab28f84143a00450789010bc40220779c2ce2d0217f973f1f6c9f718e19fc7ebd14dd8821a962f002437cda3082ec012102ee3f00141178006c78b0b458aab21588388335078c655459afe544211f15aee000000000",
self.assertEqual("02000000000101b9723dfc69af058ef6613539a000d2cd098a2c8a74e802b6d8739db708ba8c9a0100000000fdffffff02a00f00000000000016001429e1fd187f0cac845946ae1b11dc136c536bfc0f84b2000000000000160014100611bcb3aee7aad176936cf4ed56ade03027aa0247304402203aa63539b673a3bd70a76482b17f35f8843974fab28f84143a00450789010bc40220779c2ce2d0217f973f1f6c9f718e19fc7ebd14dd8821a962f002437cda3082ec012102ee3f00141178006c78b0b458aab21588388335078c655459afe544211f15aee000000000",
cmds._run('bumpfee', (), tx=tx, new_fee_rate='1.6', from_coins="9a8cba08b79d73d8b602e8748a2c8a09cdd200a0393561f68e05af69fc3d72b9:1", wallet=wallet))

10
electrum/tests/test_lnutil.py

@ -504,10 +504,10 @@ class TestLNUtil(ElectrumTestCase):
htlc_obj = {}
for num, msat in [(0, 1000 * 1000),
(2, 2000 * 1000),
(1, 2000 * 1000),
(3, 3000 * 1000),
(4, 4000 * 1000)]:
(2, 2000 * 1000),
(1, 2000 * 1000),
(3, 3000 * 1000),
(4, 4000 * 1000)]:
htlc_obj[num] = UpdateAddHtlc(amount_msat=msat, payment_hash=bitcoin.sha256(htlc_payment_preimage[num]), cltv_expiry=0, htlc_id=None, timestamp=0)
htlcs = [ScriptHtlc(htlc[x], htlc_obj[x]) for x in range(5)]
@ -901,4 +901,4 @@ class TestLNUtil(ElectrumTestCase):
# ignore unknown channel types
channel_type = ChannelType(0b10000000001000000000010).discard_unknown_and_check()
self.assertEqual(ChannelType(0b10000000001000000000000), channel_type)
self.assertEqual(ChannelType(0b10000000001000000000000), channel_type)

6
electrum/tests/test_util.py

@ -71,14 +71,14 @@ class TestUtil(ElectrumTestCase):
def test_format_satoshis_diff_negative(self):
self.assertEqual("-0.00001234", format_satoshis(-1234, is_diff=True))
self.assertEqual("-456789.00001234", format_satoshis(-45678900001234, is_diff=True))
def test_format_satoshis_add_thousands_sep(self):
self.assertEqual("178 890 000.", format_satoshis(Decimal(178890000), decimal_point=0, add_thousands_sep=True))
self.assertEqual("458 312.757 48", format_satoshis(Decimal("45831275.748"), decimal_point=2, add_thousands_sep=True, precision=5))
# is_diff
self.assertEqual("+4 583 127.574 8", format_satoshis(Decimal("45831275.748"), decimal_point=1, is_diff=True, add_thousands_sep=True, precision=4))
self.assertEqual("+456 789 112.004 56", format_satoshis(Decimal("456789112.00456"), decimal_point=0, is_diff=True, add_thousands_sep=True, precision=5))
self.assertEqual("-0.000 012 34", format_satoshis(-1234, is_diff=True, add_thousands_sep=True))
self.assertEqual("+456 789 112.004 56", format_satoshis(Decimal("456789112.00456"), decimal_point=0, is_diff=True, add_thousands_sep=True, precision=5))
self.assertEqual("-0.000 012 34", format_satoshis(-1234, is_diff=True, add_thousands_sep=True))
self.assertEqual("-456 789.000 012 34", format_satoshis(-45678900001234, is_diff=True, add_thousands_sep=True))
# num_zeros
self.assertEqual("-456 789.123 400", format_satoshis(-45678912340000, num_zeros=6, add_thousands_sep=True))

8
electrum/transaction.py

@ -1931,17 +1931,17 @@ class PartialTransaction(Transaction):
if txin.is_segwit():
if bip143_shared_txdigest_fields is None:
bip143_shared_txdigest_fields = self._calc_bip143_shared_txdigest_fields()
if not(sighash & Sighash.ANYONECANPAY):
if not (sighash & Sighash.ANYONECANPAY):
hashPrevouts = bip143_shared_txdigest_fields.hashPrevouts
else:
hashPrevouts = '00' * 32
if (not(sighash & Sighash.ANYONECANPAY) and (sighash & 0x1f) != Sighash.SINGLE and (sighash & 0x1f) != Sighash.NONE):
if not (sighash & Sighash.ANYONECANPAY) and (sighash & 0x1f) != Sighash.SINGLE and (sighash & 0x1f) != Sighash.NONE:
hashSequence = bip143_shared_txdigest_fields.hashSequence
else:
hashSequence = '00' * 32
if ((sighash & 0x1f) != Sighash.SINGLE and (sighash & 0x1f) != Sighash.NONE):
if (sighash & 0x1f) != Sighash.SINGLE and (sighash & 0x1f) != Sighash.NONE:
hashOutputs = bip143_shared_txdigest_fields.hashOutputs
elif ((sighash & 0x1f) == Sighash.SINGLE and txin_index < len(outputs)):
elif (sighash & 0x1f) == Sighash.SINGLE and txin_index < len(outputs):
hashOutputs = bh2u(sha256d(outputs[txin_index].serialize_to_network()))
else:
hashOutputs = '00' * 32

6
electrum/wizard.py

@ -61,7 +61,7 @@ class AbstractWizard:
else:
self._logger.error(f'accept handler for view {view} not callable')
if not 'next' in nav:
if 'next' not in nav:
# finished
self.finished(wizard_data)
return (None, wizard_data, {})
@ -107,7 +107,7 @@ class AbstractWizard:
nav = self.navmap[view]
if not 'last' in nav:
if 'last' not in nav:
return False
lastnav = nav['last']
@ -219,7 +219,7 @@ class NewWalletWizard(AbstractWizard):
storage = WalletStorage(path)
k = None
if not 'keystore_type' in data:
if 'keystore_type' not in data:
assert data['wallet_type'] == 'imported'
addresses = {}
if 'private_key_list' in data:

Loading…
Cancel
Save