merge
[electrum-nvc.git] / upgrade.py
1 import electrum, getpass, base64,ast,sys,os
2 from version import SEED_VERSION
3
4
5
6
7 if __name__ == "__main__":
8     try:
9         path = sys.argv[1]
10     except:
11         # backward compatibility: look for wallet file in the default data directory
12         if "HOME" in os.environ:
13             wallet_dir = os.path.join( os.environ["HOME"], '.electrum')
14         elif "LOCALAPPDATA" in os.environ:
15             wallet_dir = os.path.join( os.environ["LOCALAPPDATA"], 'Electrum' )
16         elif "APPDATA" in os.environ:
17             wallet_dir = os.path.join( os.environ["APPDATA"],  'Electrum' )
18         else:
19             raise BaseException("No home directory found in environment variables.")
20         path = os.path.join( wallet_dir, 'electrum.dat')
21
22     try:
23         f = open(path,"r")
24         data = f.read()
25         f.close()
26     except:
27         print "file not found", path
28         exit(1)
29
30     try:
31         x = ast.literal_eval(data)
32     except:
33         print "error: could not parse wallet"
34         exit(1)
35
36     # version <= 0.33 uses a tuple
37     if type(x) == tuple:
38         seed_version, use_encryption, fee, host, port, blocks, seed, all_addresses, private_keys, change_indexes, status, history, labels, addressbook = x
39
40         print "walet path =",path
41         print "seed version =", seed_version
42
43         if seed_version == 1 and use_encryption:
44             # version 1 used pycrypto for wallet encryption
45             import Crypto
46             from Crypto.Cipher import AES
47             BLOCK_SIZE = 32
48             PADDING = '{'
49             pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
50             EncodeAES = lambda secret, s: base64.b64encode(AES.new(secret).encrypt(pad(s)))
51             DecodeAES = lambda secret, e: AES.new(secret).decrypt(base64.b64decode(e)).rstrip(PADDING)
52
53             print "please enter your password"
54             password = getpass.getpass("Password:")
55             secret = electrum.Hash(password)
56             try:
57                 seed = DecodeAES( secret, wallet.seed )
58                 private_keys = ast.literal_eval( DecodeAES( secret, wallet.private_keys ) )
59             except:
60                 print "sorry"
61                 exit(1)
62             seed_version = 2
63             s = repr( (seed_version, use_encryption, fee, host, port, blocks, seed, all_addresses, private_keys, change_indexes, status, history, labels, addressbook ))
64             f = open(path,"w")
65             data = f.read()
66             f.close()
67             print "Wallet is now unencrypted."
68
69         print """This wallet is deprecated.
70 Please create a new wallet, open the old wallet with Electrum 0.33, and send your coins to your new wallet.
71 We apologize for the inconvenience. We try to keep this kind of upgrades as rare as possible."""
72
73     
74         
75