electrum

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

commit bdb8220a1aef0ddeea28c0c56bbda4c5bc041edb
parent b4b862b0cc7930396f1350783019f61db8bf7a12
Author: ThomasV <thomasv@electrum.org>
Date:   Wed, 18 Jul 2018 14:49:36 +0200

Merge pull request #4563 from spesmilo/remove_pbkdf2

remove pbkdf2 dependency, use stdlib instead
Diffstat:
Mcontrib/requirements/requirements.txt | 1-
Melectrum/keystore.py | 7+++----
Melectrum/mnemonic.py | 3+--
Melectrum/plugins/digitalbitbox/digitalbitbox.py | 4++--
Melectrum/storage.py | 6+++---
Mrun_electrum | 1-
6 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/contrib/requirements/requirements.txt b/contrib/requirements/requirements.txt @@ -1,6 +1,5 @@ pyaes>=0.1a1 ecdsa>=0.9 -pbkdf2 requests qrcode protobuf diff --git a/electrum/keystore.py b/electrum/keystore.py @@ -552,13 +552,12 @@ def bip39_normalize_passphrase(passphrase): return normalize('NFKD', passphrase or '') def bip39_to_seed(mnemonic, passphrase): - import pbkdf2, hashlib, hmac + import hashlib, hmac PBKDF2_ROUNDS = 2048 mnemonic = normalize('NFKD', ' '.join(mnemonic.split())) passphrase = bip39_normalize_passphrase(passphrase) - return pbkdf2.PBKDF2(mnemonic, 'mnemonic' + passphrase, - iterations = PBKDF2_ROUNDS, macmodule = hmac, - digestmodule = hashlib.sha512).read(64) + return hashlib.pbkdf2_hmac('sha512', mnemonic.encode('utf-8'), + b'mnemonic' + passphrase.encode('utf-8'), iterations = PBKDF2_ROUNDS) # returns tuple (is_checksum_valid, is_wordlist_valid) def bip39_is_checksum_valid(mnemonic): diff --git a/electrum/mnemonic.py b/electrum/mnemonic.py @@ -30,7 +30,6 @@ import unicodedata import string import ecdsa -import pbkdf2 from .util import print_error from .bitcoin import is_old_seed, is_new_seed @@ -131,7 +130,7 @@ class Mnemonic(object): PBKDF2_ROUNDS = 2048 mnemonic = normalize_text(mnemonic) passphrase = normalize_text(passphrase) - return pbkdf2.PBKDF2(mnemonic, 'electrum' + passphrase, iterations = PBKDF2_ROUNDS, macmodule = hmac, digestmodule = hashlib.sha512).read(64) + return hashlib.pbkdf2_hmac('sha512', mnemonic.encode('utf-8'), b'electrum' + passphrase.encode('utf-8'), iterations = PBKDF2_ROUNDS) def mnemonic_encode(self, i): n = len(self.wordlist) diff --git a/electrum/plugins/digitalbitbox/digitalbitbox.py b/electrum/plugins/digitalbitbox/digitalbitbox.py @@ -120,8 +120,8 @@ class DigitalBitbox_Client(): def stretch_key(self, key): - import pbkdf2, hmac - return to_hexstr(pbkdf2.PBKDF2(key, b'Digital Bitbox', iterations = 20480, macmodule = hmac, digestmodule = hashlib.sha512).read(64)) + import hmac + return to_hexstr(hashlib.pbkdf2_hmac('sha512', key.encode('utf-8'), b'Digital Bitbox', iterations = 20480)) def backup_password_dialog(self): diff --git a/electrum/storage.py b/electrum/storage.py @@ -29,7 +29,7 @@ import json import copy import re import stat -import pbkdf2, hmac, hashlib +import hmac, hashlib import base64 import zlib from collections import defaultdict @@ -165,7 +165,7 @@ class WalletStorage(PrintError): @staticmethod def get_eckey_from_password(password): - secret = pbkdf2.PBKDF2(password, '', iterations=1024, macmodule=hmac, digestmodule=hashlib.sha512).read(64) + secret = hashlib.pbkdf2_hmac('sha512', password.encode('utf-8'), b'', iterations=1024) ec_key = ecc.ECPrivkey.from_arbitrary_size_secret(secret) return ec_key @@ -637,7 +637,7 @@ class WalletStorage(PrintError): # version 1.9.8 created v6 wallets when an incorrect seed was entered in the restore dialog msg += '\n\nThis file was created because of a bug in version 1.9.8.' if self.get('master_public_keys') is None and self.get('master_private_keys') is None and self.get('imported_keys') is None: - # pbkdf2 was not included with the binaries, and wallet creation aborted. + # pbkdf2 (at that time an additional dependency) was not included with the binaries, and wallet creation aborted. msg += "\nIt does not contain any keys, and can safely be removed." else: # creation was complete if electrum was run from source diff --git a/run_electrum b/run_electrum @@ -46,7 +46,6 @@ def check_imports(): import ecdsa import requests import qrcode - import pbkdf2 import google.protobuf import jsonrpclib except ImportError as e: