electrum-bitcoinprivate/client/upgrade.py

85 lines
2.9 KiB
Python
Raw Normal View History

2011-12-15 06:41:50 -08:00
import electrum, getpass, base64,ast,sys,os
from version import SEED_VERSION
2011-11-29 01:26:47 -08:00
2011-11-29 05:52:13 -08:00
2011-12-06 07:29:53 -08:00
2011-12-06 06:40:04 -08:00
def upgrade_wallet(wallet):
2011-12-15 06:41:50 -08:00
print "walet path:",wallet.path
print "seed version:", wallet.seed_version
if wallet.seed_version == 1 and wallet.use_encryption:
2011-11-29 01:26:47 -08:00
# 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)
2011-11-29 05:52:13 -08:00
print "please enter your password"
2011-11-29 01:26:47 -08:00
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()
2011-12-06 06:40:04 -08:00
print "upgraded to version 2"
2011-12-15 06:41:50 -08:00
exit(1)
2011-12-06 06:40:04 -08:00
2011-12-15 06:41:50 -08:00
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."""
2011-12-06 06:40:04 -08:00
if __name__ == "__main__":
try:
path = sys.argv[1]
except:
2011-12-15 06:41:50 -08:00
# backward compatibility: look for wallet file in the default data directory
if "HOME" in os.environ:
wallet_dir = os.path.join( os.environ["HOME"], '.electrum')
elif "LOCALAPPDATA" in os.environ:
wallet_dir = os.path.join( os.environ["LOCALAPPDATA"], 'Electrum' )
elif "APPDATA" in os.environ:
wallet_dir = os.path.join( os.environ["APPDATA"], 'Electrum' )
else:
raise BaseException("No home directory found in environment variables.")
path = os.path.join( wallet_dir, 'electrum.dat')
try:
f = open(path,"r")
data = f.read()
f.close()
except:
print "file not found", path
exit(1)
try:
x = ast.literal_eval(data)
except:
print "error: could not parse wallet"
exit(1)
if type(x) == tuple:
2011-12-16 00:37:13 -08:00
seed_version, use_encryption, fee, host, port, blocks, seed, all_addresses, private_keys, change_indexes, status, history, labels, addressbook = x
2011-12-16 06:40:05 -08:00
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"""
2011-12-15 06:41:50 -08:00
exit(1)
2011-12-06 06:40:04 -08:00
wallet = electrum.Wallet(path)
try:
found = wallet.read()
if found:
print wallet.path
else:
print "wallet not found."
except BaseException:
upgrade_wallet(wallet)