From b9eda1dd35f0487ab5e1263d194037e6357c3adc Mon Sep 17 00:00:00 2001 From: thomasv Date: Fri, 16 Dec 2011 16:00:30 +0100 Subject: [PATCH] upgrade with 0.33 --- client/upgrade.py | 74 ++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/client/upgrade.py b/client/upgrade.py index 10f6e27e5..07c3b6b14 100644 --- a/client/upgrade.py +++ b/client/upgrade.py @@ -3,38 +3,6 @@ from version import SEED_VERSION -def upgrade_wallet(wallet): - print "walet path:",wallet.path - print "seed version:", wallet.seed_version - if wallet.seed_version == 1 and wallet.use_encryption: - # version 1 used pycrypto for wallet encryption - import Crypto - from Crypto.Cipher import AES - BLOCK_SIZE = 32 - PADDING = '{' - pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING - EncodeAES = lambda secret, s: base64.b64encode(AES.new(secret).encrypt(pad(s))) - DecodeAES = lambda secret, e: AES.new(secret).decrypt(base64.b64decode(e)).rstrip(PADDING) - - print "please enter your password" - password = getpass.getpass("Password:") - secret = electrum.Hash(password) - try: - seed = DecodeAES( secret, wallet.seed ) - private_keys = ast.literal_eval( DecodeAES( secret, wallet.private_keys ) ) - except: - print "sorry" - exit(1) - wallet.version = 2 - wallet.seed = wallet.pw_encode( seed, password) - wallet.private_keys = wallet.pw_encode( repr( private_keys ), password) - wallet.save() - print "upgraded to version 2" - exit(1) - - if wallet.seed_version < SEED_VERSION: - print """Note: your wallet seed is deprecated. Please create a new wallet, and move your coins to the new wallet.""" - if __name__ == "__main__": try: @@ -65,21 +33,43 @@ if __name__ == "__main__": print "error: could not parse wallet" exit(1) + # version <= 0.33 uses a tuple if type(x) == tuple: seed_version, use_encryption, fee, host, port, blocks, seed, all_addresses, private_keys, change_indexes, status, history, labels, addressbook = x + + print "walet path =",path + print "seed version =", seed_version + + if seed_version == 1 and use_encryption: + # version 1 used pycrypto for wallet encryption + import Crypto + from Crypto.Cipher import AES + BLOCK_SIZE = 32 + PADDING = '{' + pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING + EncodeAES = lambda secret, s: base64.b64encode(AES.new(secret).encrypt(pad(s))) + DecodeAES = lambda secret, e: AES.new(secret).decrypt(base64.b64decode(e)).rstrip(PADDING) + + print "please enter your password" + password = getpass.getpass("Password:") + secret = electrum.Hash(password) + try: + seed = DecodeAES( secret, wallet.seed ) + private_keys = ast.literal_eval( DecodeAES( secret, wallet.private_keys ) ) + except: + print "sorry" + exit(1) + seed_version = 2 + s = repr( (seed_version, use_encryption, fee, host, port, blocks, seed, all_addresses, private_keys, change_indexes, status, history, labels, addressbook )) + f = open(path,"w") + data = f.read() + f.close() + print "Wallet is now unencrypted." + print """This wallet is deprecated. Please create a new wallet, open the old wallet with Electrum 0.33, and send your coins to your new wallet. We apologize for the inconvenience. We try to keep this kind of upgrades as rare as possible.""" - exit(1) + - wallet = electrum.Wallet(path) - try: - found = wallet.read() - if found: - print wallet.path - else: - print "wallet not found." - except BaseException: - upgrade_wallet(wallet)