import electrum, getpass, base64,ast,sys def upgrade_wallet(wallet): if wallet.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" if wallet.version < 3: print """ Your wallet is deprecated; its regeneration seed will not work with versions 0.31 and above. In order to upgrade, you need to create a new wallet (you may use your current seed), and to send your bitcoins to the new wallet, using a compatible version of Electrum ( http://ecdsa.org/electrum/Electrum-0.30.zip ) We apologize for the inconvenience. We try to keep this kind of upgrades as rare as possible. """ if __name__ == "__main__": try: path = sys.argv[1] except: path = None wallet = electrum.Wallet(path) try: found = wallet.read() if found: print wallet.path else: print "wallet not found." except BaseException: upgrade_wallet(wallet)