Improved new password prompting

This commit is contained in:
philemon 2014-08-06 21:49:38 +04:00
commit 3c0eb1d26c
5 changed files with 20 additions and 19 deletions

View file

@ -79,9 +79,8 @@ def generate_addrs(seed, addrnums, opts):
t_addrs,num,pos,out = len(addrnums),0,0,[]
addrnums.sort() # needed only if caller didn't sort
ws = 'key' if 'keys' in opts['gen_what'] else 'address'
if t_addrs == 1: wp = ws
else: wp = ws+"s" if ws == 'key' else ws+"es"
ws,wp = ('key','keys') if 'keys' in opts['gen_what'] \
else ('address','addresses')
while pos != t_addrs:
seed = sha512(seed).digest()
@ -104,7 +103,7 @@ def generate_addrs(seed, addrnums, opts):
out.append(eval("addrinfo("+addrinfo_args+")"))
qmsg("\rGenerated %s %s%s"%(t_addrs, wp, " "*15))
qmsg("\rGenerated %s %s%s"%(t_addrs, (ws if t_addrs == 1 else wp), " "*15))
return out

View file

@ -376,7 +376,7 @@ def mmgen_encrypt(data,what="data",hash_preset='',opts={}):
m = "default" if hp == '3' else "user-requested"
vmsg("Encrypting %s" % what)
qmsg("Using %s hash preset of '%s'" % (m,hp))
passwd = get_new_passphrase("passphrase",{})
passwd = get_new_passphrase(what, {})
key = make_key(passwd, salt, hp)
enc_d = encrypt_data(sha256(nonce+data).digest() + nonce + data, key,
int(hexlify(iv),16), what=what)
@ -390,7 +390,7 @@ def mmgen_decrypt(data,what="data",hash_preset='',opts={}):
hp = hash_preset or get_hash_preset_from_user('3',what)
m = "default" if hp == '3' else "user-requested"
qmsg("Using %s hash preset of '%s'" % (m,hp))
passwd = get_mmgen_passphrase("Enter passphrase: ",{})
passwd = get_mmgen_passphrase(("Enter passphrase for %s: " % what),{})
key = make_key(passwd, salt, hp)
dec_d = decrypt_data(enc_d, key, int(hexlify(iv),16), what)
if dec_d[:sha256_len] == sha256(dec_d[sha256_len:]).digest():

View file

@ -69,8 +69,10 @@ label,metadata,hash_preset,salt,enc_seed = get_data_from_wallet(infile)
seed_id,key_id = metadata[:2]
# Repeat on incorrect pw entry
prompt = "Enter %spassphrase: " % (""
if 'keep_old_passphrase' in opts else "old ")
prompt = "Enter {}{} wallet passphrase: ".format(
("" if 'keep_old_passphrase' in opts else "old "),
g.proj_name
)
while True:
passwd = get_mmgen_passphrase(prompt,{})
key = make_key(passwd, salt, hash_preset)
@ -100,7 +102,8 @@ else:
if 'keep_old_passphrase' in opts:
msg("Keeping old passphrase by user request")
else:
new_passwd = get_new_passphrase("new passphrase", opts)
new_passwd = get_new_passphrase(
"{} wallet".format(g.proj_name), opts, True)
if new_passwd == passwd:
qmsg("Passphrase is unchanged")

View file

@ -140,7 +140,7 @@ salt = sha256(get_random(128,opts)).digest()[:g.salt_len]
qmsg(cmessages['choose_wallet_passphrase'] % opts['hash_preset'])
passwd = get_new_passphrase("{} wallet passphrase".format(g.proj_name), opts)
passwd = get_new_passphrase("{} wallet".format(g.proj_name), opts)
key = make_key(passwd, salt, opts['hash_preset'])

View file

@ -286,22 +286,21 @@ def parse_address_list(arg,sep=","):
return sorted(set(ret))
def get_new_passphrase(what, opts):
def get_new_passphrase(what, opts, passchg=False):
w = "{}passphrase for {}".format("new " if passchg else "", what)
if 'passwd_file' in opts:
pw = " ".join(_get_words_from_file(opts['passwd_file'],what))
pw = " ".join(_get_words_from_file(opts['passwd_file'],w))
elif 'echo_passphrase' in opts:
pw = " ".join(_get_words_from_user(("Enter %s: " % what), opts))
pw = " ".join(_get_words_from_user("Enter {}: ".format(w), opts))
else:
for i in range(g.passwd_max_tries):
pw = " ".join(_get_words_from_user(("Enter %s: " % what),opts))
pw2 = " ".join(_get_words_from_user(("Repeat %s: " % what),opts))
pw = " ".join(_get_words_from_user("Enter {}: ".format(w),opts))
pw2 = " ".join(_get_words_from_user("Repeat passphrase: ",opts))
if g.debug: print "Passphrases: [%s] [%s]" % (pw,pw2)
if pw == pw2:
vmsg("%ss match" % what.capitalize())
break
else:
msg("%ss do not match" % what.capitalize())
vmsg("Passphrases match"); break
else: msg("Passphrases do not match")
else:
msg("User failed to duplicate passphrase in %s attempts" %
g.passwd_max_tries)