use 'seed' instead of 'passphrase'

This commit is contained in:
ThomasV 2011-11-05 15:06:43 +01:00
parent 89d6971b8c
commit 4d3159a74a
2 changed files with 25 additions and 25 deletions

View File

@ -171,7 +171,7 @@ oid_secp256k1 = (1,3,132,0,10)
SECP256k1 = ecdsa.curves.Curve("SECP256k1", curve_secp256k1, generator_secp256k1, oid_secp256k1 ) SECP256k1 = ecdsa.curves.Curve("SECP256k1", curve_secp256k1, generator_secp256k1, oid_secp256k1 )
no_wallet_message = "Wallet file not found.\nPlease provide a passphrase and a password. The passphrase will be used as a seed to generate Bitcoin addresses. It should be long and random, and nobody should be able to guess it. Memorize it, or write it down and keep it in a vault. The password will be used to encrypt your local wallet file. You will need to enter your password everytime you use your wallet. If you lose your password, you can still recover your wallet with the passphrase." no_wallet_message = "Wallet file not found.\nPlease provide a seed and a password. The seed will be to generate Bitcoin addresses. It should be long and random, and nobody should be able to guess it. Memorize it, or write it down and keep it in a vault. The password will be used to encrypt your local wallet file. You will need to enter your password everytime you use your wallet. If you lose your password, you can still recover your wallet with the seed."
def filter(s): def filter(s):
out = re.sub('( [^\n]*|)\n','',s) out = re.sub('( [^\n]*|)\n','',s)
@ -229,7 +229,7 @@ class Wallet:
# saved fields # saved fields
self.use_encryption = False self.use_encryption = False
self.addresses = [] self.addresses = []
self.passphrase = '' # encrypted self.seed = '' # encrypted
self.private_keys = repr([]) # encrypted self.private_keys = repr([]) # encrypted
self.change_addresses = [] # index of addresses used as change self.change_addresses = [] # index of addresses used as change
self.status = {} # current status of addresses self.status = {} # current status of addresses
@ -256,9 +256,9 @@ class Wallet:
return ADDRESS_RE.match(addr) return ADDRESS_RE.match(addr)
def create_new_address(self, for_change, password): def create_new_address(self, for_change, password):
passphrase = self.pw_decode( self.passphrase, password) seed = self.pw_decode( self.seed, password)
i = len( self.addresses ) - len(self.change_addresses) if not for_change else len(self.change_addresses) i = len( self.addresses ) - len(self.change_addresses) if not for_change else len(self.change_addresses)
seed = Hash( "%d:%d:"%(i,for_change) + passphrase ) seed = Hash( "%d:%d:"%(i,for_change) + seed )
order = generator_secp256k1.order() order = generator_secp256k1.order()
secexp = ecdsa.util.randrange_from_seed__trytryagain( seed, order ) secexp = ecdsa.util.randrange_from_seed__trytryagain( seed, order )
secret = SecretToASecret( ('%064x' % secexp).decode('hex') ) secret = SecretToASecret( ('%064x' % secexp).decode('hex') )
@ -279,7 +279,7 @@ class Wallet:
return address return address
def recover(self, password): def recover(self, password):
passphrase = self.pw_decode( self.passphrase, password) seed = self.pw_decode( self.seed, password)
# todo: recover receiving addresses from tx # todo: recover receiving addresses from tx
num_gap = 0 num_gap = 0
while True: while True:
@ -316,7 +316,7 @@ class Wallet:
def save(self): def save(self):
s = repr( (self.use_encryption, self.fee, self.host, self.blocks, s = repr( (self.use_encryption, self.fee, self.host, self.blocks,
self.passphrase, self.addresses, self.private_keys, self.seed, self.addresses, self.private_keys,
self.change_addresses, self.status, self.history, self.change_addresses, self.status, self.history,
self.labels, self.addressbook) ) self.labels, self.addressbook) )
f = open(wallet_path,"w") f = open(wallet_path,"w")
@ -332,7 +332,7 @@ class Wallet:
return False return False
try: try:
(self.use_encryption, self.fee, self.host, self.blocks, (self.use_encryption, self.fee, self.host, self.blocks,
self.passphrase, self.addresses, self.private_keys, self.seed, self.addresses, self.private_keys,
self.change_addresses, self.status, self.history, self.change_addresses, self.status, self.history,
self.labels, self.addressbook) = ast.literal_eval( data ) self.labels, self.addressbook) = ast.literal_eval( data )
except: except:
@ -590,9 +590,9 @@ if __name__ == '__main__':
if not wallet.read(): if not wallet.read():
print no_wallet_message print no_wallet_message
passphrase = raw_input("Enter passphrase: ") seed = raw_input("Enter seed: ")
if len(passphrase)<20: if len(seed)<20:
print "Passphrase too short. Please at least 20 characters" print "Seed too short. Please at least 20 characters"
exit(1) exit(1)
if has_encryption: if has_encryption:
password = getpass.getpass("Password (hit return if you do not wish to encrypt your wallet):") password = getpass.getpass("Password (hit return if you do not wish to encrypt your wallet):")
@ -605,7 +605,7 @@ if __name__ == '__main__':
password = None password = None
print "in order to use wallet encryption, please install pycrypto (sudo easy_install pycrypto)" print "in order to use wallet encryption, please install pycrypto (sudo easy_install pycrypto)"
wallet.passphrase = wallet.pw_encode( passphrase, password) wallet.seed = wallet.pw_encode( seed, password)
print "server name and port number (default: ecdsa.org:50000)" print "server name and port number (default: ecdsa.org:50000)"
host = raw_input("server:") host = raw_input("server:")
@ -702,7 +702,7 @@ if __name__ == '__main__':
elif cmd == 'password': elif cmd == 'password':
try: try:
passphrase = wallet.pw_decode( wallet.passphrase, password) seed = wallet.pw_decode( wallet.seed, password)
private_keys = ast.literal_eval( wallet.pw_decode( wallet.private_keys, password) ) private_keys = ast.literal_eval( wallet.pw_decode( wallet.private_keys, password) )
except: except:
print "sorry" print "sorry"
@ -710,7 +710,7 @@ if __name__ == '__main__':
new_password = getpass.getpass('New password:') new_password = getpass.getpass('New password:')
if new_password == getpass.getpass('Confirm new password:'): if new_password == getpass.getpass('Confirm new password:'):
wallet.use_encryption = (new_password != '') wallet.use_encryption = (new_password != '')
wallet.passphrase = wallet.pw_encode( passphrase, new_password) wallet.seed = wallet.pw_encode( seed, new_password)
wallet.private_keys = wallet.pw_encode( repr( private_keys ), new_password) wallet.private_keys = wallet.pw_encode( repr( private_keys ), new_password)
wallet.save() wallet.save()
else: else:

View File

@ -39,16 +39,16 @@ def numbify(entry, is_int = False):
def init_wallet(wallet): def init_wallet(wallet):
if not wallet.read(): if not wallet.read():
passphrase = None seed = None
while not passphrase: while not seed:
dialog = gtk.MessageDialog( dialog = gtk.MessageDialog(
parent = None, parent = None,
flags = gtk.DIALOG_MODAL, flags = gtk.DIALOG_MODAL,
buttons = gtk.BUTTONS_OK_CANCEL, buttons = gtk.BUTTONS_OK_CANCEL,
message_format = "Wallet not found. Please enter a passphrase to create or recover your wallet. Minimum length: 20 characters" ) message_format = "Wallet not found. Please enter a seed to create or recover your wallet. Minimum length: 20 characters" )
p_box = gtk.HBox() p_box = gtk.HBox()
p_label = gtk.Label('Passphrase:') p_label = gtk.Label('Seed:')
p_label.show() p_label.show()
p_box.pack_start(p_label) p_box.pack_start(p_label)
p_entry = gtk.Entry() p_entry = gtk.Entry()
@ -59,17 +59,17 @@ def init_wallet(wallet):
dialog.show() dialog.show()
r = dialog.run() r = dialog.run()
passphrase = p_entry.get_text() seed = p_entry.get_text()
dialog.destroy() dialog.destroy()
if r==gtk.RESPONSE_CANCEL: exit(1) if r==gtk.RESPONSE_CANCEL: exit(1)
if len(passphrase) < 20: if len(seed) < 20:
print len(passphrase) print len(seed)
passphrase = None seed = None
# disable password during recovery # disable password during recovery
# change_password_dialog(None, wallet) # change_password_dialog(None, wallet)
wallet.passphrase = passphrase wallet.seed = seed
run_settings_dialog( None, wallet, True) run_settings_dialog( None, wallet, True)
@ -110,7 +110,7 @@ def settings_dialog(wallet, is_recover):
gap_entry.connect('changed', numbify, True) gap_entry.connect('changed', numbify, True)
gap_entry.show() gap_entry.show()
gap.pack_start(gap_entry,False,False, 10) gap.pack_start(gap_entry,False,False, 10)
add_help_button(gap, 'The maximum gap that is allowed between unused addresses in your wallet. During wallet recovery, this parameter is used to decide when to stop the recovery process. If you increase this value, you will need to remember it in order to be able to recover your wallet from passphrase.') add_help_button(gap, 'The maximum gap that is allowed between unused addresses in your wallet. During wallet recovery, this parameter is used to decide when to stop the recovery process. If you increase this value, you will need to remember it in order to be able to recover your wallet from seed.')
gap.show() gap.show()
host = gtk.HBox() host = gtk.HBox()
@ -227,7 +227,7 @@ def change_password_dialog(button, wallet, icon):
return return
try: try:
passphrase = wallet.pw_decode( wallet.passphrase, password) seed = wallet.pw_decode( wallet.seed, password)
private_keys = ast.literal_eval( wallet.pw_decode( wallet.private_keys, password) ) private_keys = ast.literal_eval( wallet.pw_decode( wallet.private_keys, password) )
except: except:
show_message("Incorrect password") show_message("Incorrect password")
@ -238,7 +238,7 @@ def change_password_dialog(button, wallet, icon):
return return
wallet.use_encryption = (new_password != '') wallet.use_encryption = (new_password != '')
wallet.passphrase = wallet.pw_encode( passphrase, new_password) wallet.seed = wallet.pw_encode( seed, new_password)
wallet.private_keys = wallet.pw_encode( repr( private_keys ), new_password) wallet.private_keys = wallet.pw_encode( repr( private_keys ), new_password)
wallet.save() wallet.save()