-WIP-electrum-btcp/client/upgrade.py

56 lines
1.8 KiB
Python

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 generation 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.
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)