Browse Source

Bugfixes; incognito hex format added

philemon 11 years ago
parent
commit
69e7fcd0fc
9 changed files with 80 additions and 50 deletions
  1. 11 8
      mmgen-addrgen
  2. 2 2
      mmgen-txcreate
  3. 11 3
      mmgen-txsign
  4. 21 12
      mmgen-walletchk
  5. 5 5
      mmgen-walletgen
  6. 4 4
      mmgen/Opts.py
  7. 1 0
      mmgen/config.py
  8. 2 2
      mmgen/tx.py
  9. 23 14
      mmgen/util.py

+ 11 - 8
mmgen-addrgen

@@ -66,9 +66,10 @@ help_data = {
 -b, --from-brain     l,p Generate {W} from a user-created password,
 -b, --from-brain     l,p Generate {W} from a user-created password,
                          i.e. a "brainwallet", using seed length 'l' and
                          i.e. a "brainwallet", using seed length 'l' and
                          hash preset 'p' (comma-separated)
                          hash preset 'p' (comma-separated)
--g, --from-incognito     Generate {W} from an incognito-format wallet
--G, --hidden-incog-data  f,o,l  Generate {W} from incognito data in file
-                                'f' at offset 'o', with seed length of 'l'
+-g, --from-incog         Generate {W} from an incognito wallet
+-X, --from-incog-hex     Generate {W} from an incognito hexadecimal wallet
+-G, --from-incog-hidden  f,o,l  Generate {W} from incognito data in file
+                         'f' at offset 'o', with seed length of 'l'
 -m, --from-mnemonic      Generate {W} from an electrum-like mnemonic
 -m, --from-mnemonic      Generate {W} from an electrum-like mnemonic
 -s, --from-seed          Generate {W} from a seed in .{S} format
 -s, --from-seed          Generate {W} from a seed in .{S} format
 
 
@@ -113,11 +114,12 @@ in all future invocations with that passphrase
 short_opts = ["h","A","d:","e",
 short_opts = ["h","A","d:","e",
 			"H","K","l:","p:",
 			"H","K","l:","p:",
 			"P:","q","S","v","x","b:",
 			"P:","q","S","v","x","b:",
-			"g","G:","m","s"]
+			"g","X","G:","m","s"]
 long_opts = ["help","no_addresses","outdir=","echo_passphrase",
 long_opts = ["help","no_addresses","outdir=","echo_passphrase",
 			"show_hash_presets","no_keyconv","seed_len=","hash_preset=",
 			"show_hash_presets","no_keyconv","seed_len=","hash_preset=",
 			"passwd_file=","quiet","stdout","verbose","b16","from_brain=",
 			"passwd_file=","quiet","stdout","verbose","b16","from_brain=",
-			"from_incognito","hidden_incog_data=","from_mnemonic","from_seed"]
+			"from_incog","from_incog_hex","from_incog_hidden=",
+			"from_mnemonic","from_seed"]
 
 
 if invoked_as == "addrgen":
 if invoked_as == "addrgen":
 	for i in "A","x":              short_opts.remove(i)
 	for i in "A","x":              short_opts.remove(i)
@@ -126,9 +128,10 @@ if invoked_as == "addrgen":
 opts,cmd_args = process_opts(sys.argv,help_data,"".join(short_opts),long_opts)
 opts,cmd_args = process_opts(sys.argv,help_data,"".join(short_opts),long_opts)
 
 
 if 'show_hash_presets' in opts: show_hash_presets()
 if 'show_hash_presets' in opts: show_hash_presets()
-if 'quiet' in opts: g.quiet = True
 if 'verbose' in opts: g.verbose = True
 if 'verbose' in opts: g.verbose = True
-if 'hidden_incog_data' in opts: opts['from_incognito'] = True
+if 'quiet' in opts: g.quiet = True
+if 'from_incog_hex' in opts or 'from_incog_hidden' in opts:
+	opts['from_incog'] = True
 
 
 opts['gen_what'] = gen_what
 opts['gen_what'] = gen_what
 
 
@@ -140,7 +143,7 @@ if len(cmd_args) == 1 and (
 			'from_mnemonic' in opts
 			'from_mnemonic' in opts
 			or 'from_brain' in opts
 			or 'from_brain' in opts
 			or 'from_seed' in opts
 			or 'from_seed' in opts
-			or 'from_incognito' in opts
+			or 'from_incog_hidden' in opts
 		):
 		):
 	infile,addr_list_arg = "",cmd_args[0]
 	infile,addr_list_arg = "",cmd_args[0]
 elif len(cmd_args) == 2:
 elif len(cmd_args) == 2:

+ 2 - 2
mmgen-txcreate

@@ -90,8 +90,8 @@ if not 'info' in opts:
 		if "," in a:
 		if "," in a:
 			a1,a2 = a.split(",")
 			a1,a2 = a.split(",")
 			if is_mmgen_addr(a1) or is_btc_addr(a1):
 			if is_mmgen_addr(a1) or is_btc_addr(a1):
-				if is_mmgen_addr(a1):
-					btaddr = mm2btc_addr_proc(c,a1,acct_data,addr_data,b2m_map)
+				btaddr = mm2btc_addr_proc(c,a1,acct_data,addr_data,b2m_map) \
+					if is_mmgen_addr(a1) else a1
 				if is_btc_amt(a2):
 				if is_btc_amt(a2):
 					tx_out[btaddr] = check_btc_amt(a2)
 					tx_out[btaddr] = check_btc_amt(a2)
 				else:
 				else:

+ 11 - 3
mmgen-txsign

@@ -47,7 +47,10 @@ help_data = {
                          i.e. a "brainwallet", using seed length 'l' and
                          i.e. a "brainwallet", using seed length 'l' and
                          hash preset 'p'
                          hash preset 'p'
 -w, --use-wallet-dat     Get keys from a running bitcoind
 -w, --use-wallet-dat     Get keys from a running bitcoind
--g, --from-incognito     Generate keys from an incognito-format wallet
+-g, --from-incog         Generate keys from an incognito wallet
+-X, --from-incog-hex     Generate keys from an incognito hexadecimal wallet
+-G, --from-incog-hidden  f,o,l  Generate keys from incognito data in file
+                                 'f' at offset 'o', with seed length of 'l'
 -m, --from-mnemonic      Generate keys from an electrum-like mnemonic
 -m, --from-mnemonic      Generate keys from an electrum-like mnemonic
 -s, --from-seed          Generate keys from a seed in .{} format
 -s, --from-seed          Generate keys from a seed in .{} format
 
 
@@ -78,14 +81,19 @@ Seed data supplied in files must have the following extensions:
 """.format(g.seed_ext,g.wallet_ext,g.seed_ext,g.mn_ext,g.brain_ext)
 """.format(g.seed_ext,g.wallet_ext,g.seed_ext,g.mn_ext,g.brain_ext)
 }
 }
 
 
-short_opts = "hd:eiIk:P:qVb:wgms"
+short_opts = "hd:eiIk:P:qVb:wgXG:ms"
 long_opts  = "help","outdir=","echo_passphrase","info","tx_id",\
 long_opts  = "help","outdir=","echo_passphrase","info","tx_id",\
 			"keys_from_file=","passwd_file=","quiet","skip_key_preverify",\
 			"keys_from_file=","passwd_file=","quiet","skip_key_preverify",\
 			"from_brain=","use_wallet_dat",\
 			"from_brain=","use_wallet_dat",\
-			"from_incognito","from_mnemonic","from_seed"
+			"from_incog","from_incog_hex","from_incog_hidden=",\
+			"from_mnemonic","from_seed"
 
 
 opts,infiles = process_opts(sys.argv,help_data,short_opts,long_opts)
 opts,infiles = process_opts(sys.argv,help_data,short_opts,long_opts)
+
 if "quiet" in opts: g.quiet = True
 if "quiet" in opts: g.quiet = True
+if 'from_incog_hex' in opts or 'from_incog_hidden' in opts:
+	opts['from_incog'] = True
+
 check_opts(opts,long_opts)
 check_opts(opts,long_opts)
 
 
 if not infiles: usage(help_data)
 if not infiles: usage(help_data)

+ 21 - 12
mmgen-walletchk

@@ -39,23 +39,26 @@ help_data = {
 -q, --quiet            Suppress warnings; overwrite files without prompting
 -q, --quiet            Suppress warnings; overwrite files without prompting
 -S, --stdout           Print seed or mnemonic data to standard output
 -S, --stdout           Print seed or mnemonic data to standard output
 -v, --verbose          Produce more verbose output
 -v, --verbose          Produce more verbose output
--g, --export-incognito Export wallet to incognito format
--G, --hide-incog-data  f,o  Hide incognito data in existing file 'f'
-                            at offset 'o' (comma-separated)
+-g, --export-incog     Export wallet to incognito format
+-X, --export-incog-hex Export wallet to incognito hexadecimal format
+-G, --export-incog-hidden  f,o  Hide incognito data in existing file 'f'
+                           at offset 'o' (comma-separated)
 -m, --export-mnemonic  Export the wallet's mnemonic to file
 -m, --export-mnemonic  Export the wallet's mnemonic to file
 -s, --export-seed      Export the wallet's seed to file
 -s, --export-seed      Export the wallet's seed to file
 """
 """
 }
 }
 
 
-short_opts = "hd:eP:qSvgG:ms"
+short_opts = "hd:eP:qSvgXG:ms"
 long_opts  = "help","outdir=","echo_passphrase","passwd_file=","quiet",\
 long_opts  = "help","outdir=","echo_passphrase","passwd_file=","quiet",\
 			"stdout","verbose",\
 			"stdout","verbose",\
-			"export_incognito","hide_incog_data=","export_mnemonic","export_seed"
+			"export_incog","export_incog_hex","export_incog_hidden=",\
+			"export_mnemonic","export_seed"
 
 
 opts,cmd_args = process_opts(sys.argv,help_data,short_opts,long_opts)
 opts,cmd_args = process_opts(sys.argv,help_data,short_opts,long_opts)
 if 'quiet' in opts: g.quiet = True
 if 'quiet' in opts: g.quiet = True
 if 'verbose' in opts: g.verbose = True
 if 'verbose' in opts: g.verbose = True
-if 'hide_incog_data' in opts: opts['export_incognito'] = True
+if 'export_incog_hidden' in opts or 'export_incog_hex' in opts:
+	opts['export_incog'] = True
 
 
 # Argument sanity checks and processing:
 # Argument sanity checks and processing:
 check_opts(opts,long_opts)
 check_opts(opts,long_opts)
@@ -68,7 +71,7 @@ if 'export_mnemonic' in opts:
 	qmsg("Exporting mnemonic data to file by user request")
 	qmsg("Exporting mnemonic data to file by user request")
 elif 'export_seed' in opts:
 elif 'export_seed' in opts:
 	qmsg("Exporting seed data to file by user request")
 	qmsg("Exporting seed data to file by user request")
-elif 'export_incognito' in opts:
+elif 'export_incog' in opts:
 	qmsg("Exporting wallet to incognito format by user request")
 	qmsg("Exporting wallet to incognito format by user request")
 
 
 	d = get_data_from_wallet(cmd_args[0],silent=True)
 	d = get_data_from_wallet(cmd_args[0],silent=True)
@@ -92,8 +95,8 @@ elif 'export_incognito' in opts:
 	key = make_key(passwd, iv, preset, "wrapper key")
 	key = make_key(passwd, iv, preset, "wrapper key")
 	incog_enc = encrypt_seed(salt + enc_seed, key, iv=int(hexlify(iv),16))
 	incog_enc = encrypt_seed(salt + enc_seed, key, iv=int(hexlify(iv),16))
 
 
-	if "hide_incog_data" in opts:
-		fname,offset = opts['hide_incog_data'].split(",") # Already sanity-checked
+	if "export_incog_hidden" in opts:
+		fname,offset = opts['export_incog_hidden'].split(",") #Already sanity-checked
 		offset = int(offset)
 		offset = int(offset)
 
 
 		check_data_fits_file_at_offset(fname,offset,len(iv + incog_enc),"write")
 		check_data_fits_file_at_offset(fname,offset,len(iv + incog_enc),"write")
@@ -106,9 +109,15 @@ elif 'export_incognito' in opts:
 		qmsg("Data written to file '%s' at offset %s" % (fname,offset),
 		qmsg("Data written to file '%s' at offset %s" % (fname,offset),
 				"Data written to file")
 				"Data written to file")
 	else:
 	else:
-		fn = "%s-%s-%s[%s,%s].%s" % (seed_id, key_id, iv_id,
-			len(enc_seed)*8, preset, g.incog_ext)
-		export_to_file(fn, iv + incog_enc, "incognito wallet data", opts)
+		fn = "%s-%s-%s[%s,%s].%s" % (
+			seed_id, key_id, iv_id, len(enc_seed)*8, preset,
+			g.incog_hex_ext if "export_incog_hex" in opts else g.incog_ext
+		)
+		data = iv + incog_enc
+		if "export_incog_hex" in opts:
+			data = "".join([hexlify(data[i*2:i*2+2]) + (" " if (i+1)%8 else "\n")
+				for i in range(len(data)/2)])
+		export_to_file(fn, data, "incognito wallet data", opts)
 
 
 	sys.exit()
 	sys.exit()
 
 

+ 5 - 5
mmgen-walletgen

@@ -54,7 +54,7 @@ help_data = {
 -b, --from-brain       l,p Generate wallet from a user-created passphrase,
 -b, --from-brain       l,p Generate wallet from a user-created passphrase,
                            i.e. a "brainwallet", using seed length 'l' and
                            i.e. a "brainwallet", using seed length 'l' and
                            hash preset 'p' (comma-separated)
                            hash preset 'p' (comma-separated)
--g, --from-incognito       Generate wallet from an incognito-format wallet
+-g, --from-incog           Generate wallet from an incognito-format wallet
 -m, --from-mnemonic        Generate wallet from an Electrum-like mnemonic
 -m, --from-mnemonic        Generate wallet from an Electrum-like mnemonic
 -s, --from-seed            Generate wallet from a seed in .{S} format
 -s, --from-seed            Generate wallet from a seed in .{S} format
 
 
@@ -97,7 +97,7 @@ in all future invocations with that passphrase.
 short_opts = "hd:eHl:L:p:P:qu:vb:gms"
 short_opts = "hd:eHl:L:p:P:qu:vb:gms"
 long_opts  = "help","outdir=","echo_passphrase","show_hash_presets","seed_len=",\
 long_opts  = "help","outdir=","echo_passphrase","show_hash_presets","seed_len=",\
 			"label=","hash_preset=","passwd_file=","quiet","usr_randlen=","verbose",\
 			"label=","hash_preset=","passwd_file=","quiet","usr_randlen=","verbose",\
-			"from_brain=","from_incognito","from_mnemonic","from_seed"
+			"from_brain=","from_incog","from_mnemonic","from_seed"
 
 
 opts,cmd_args = process_opts(sys.argv,help_data,short_opts,long_opts)
 opts,cmd_args = process_opts(sys.argv,help_data,short_opts,long_opts)
 if 'quiet' in opts: g.quiet = True
 if 'quiet' in opts: g.quiet = True
@@ -152,11 +152,11 @@ if g.debug: display_user_random_data(usr_keys,key_timings)
 usr_rand_data = sha256(usr_keys).digest() + \
 usr_rand_data = sha256(usr_keys).digest() + \
 				sha256("".join(key_timings)).digest()
 				sha256("".join(key_timings)).digest()
 
 
-for i in 'from_mnemonic','from_brain','from_seed','from_incognito':
+for i in 'from_mnemonic','from_brain','from_seed','from_incog':
 	if infile or (i in opts):
 	if infile or (i in opts):
 		seed = get_seed_retry(infile,opts)
 		seed = get_seed_retry(infile,opts)
-		if "from_incognito" in opts or get_extension(infile) == g.incog_ext:
-			qmsg(cmessages['incognito'] % make_chksum_8(seed))
+		if "from_incog" in opts or get_extension(infile) == g.incog_ext:
+			qmsg(cmessages['incog'] % make_chksum_8(seed))
 		else: qmsg("")
 		else: qmsg("")
 		break
 		break
 else:
 else:

+ 4 - 4
mmgen/Opts.py

@@ -130,9 +130,9 @@ def check_opts(opts,long_opts):
 "%s": illegal character in label.  Only ASCII characters are permitted.
 "%s": illegal character in label.  Only ASCII characters are permitted.
 """.strip() % ch)
 """.strip() % ch)
 					sys.exit(1)
 					sys.exit(1)
-		elif opt == 'hide_incog_data' or opt == 'hidden_incog_data':
+		elif opt == 'export_incog_hidden' or opt == 'from_incog_hidden':
 			try:
 			try:
-				if opt == 'hide_incog_data':
+				if opt == 'export_incog_hidden':
 					outfile,offset = val.split(",")
 					outfile,offset = val.split(",")
 				else:
 				else:
 					outfile,offset,seed_len = val.split(",")
 					outfile,offset,seed_len = val.split(",")
@@ -150,7 +150,7 @@ def check_opts(opts,long_opts):
 				msg("'%s': invalid 'o' %s (less than zero)" % (offset,what))
 				msg("'%s': invalid 'o' %s (less than zero)" % (offset,what))
 				sys.exit(1)
 				sys.exit(1)
 
 
-			if opt == 'hidden_incog_data':
+			if opt == 'from_incog_hidden':
 				try:
 				try:
 					sl = int(seed_len)
 					sl = int(seed_len)
 				except:
 				except:
@@ -174,7 +174,7 @@ def check_opts(opts,long_opts):
 				sys.exit(1)
 				sys.exit(1)
 
 
 			ac,m = (os.W_OK,"writ") \
 			ac,m = (os.W_OK,"writ") \
-				if "hide_incog_data" in opts else (os.R_OK,"read")
+				if "export_incog_hidden" in opts else (os.R_OK,"read")
 			if not os.access(outfile, ac):
 			if not os.access(outfile, ac):
 				msg("Requested %s '%s' is un%sable by you" % (what,outfile,m))
 				msg("Requested %s '%s' is un%sable by you" % (what,outfile,m))
 				sys.exit(1)
 				sys.exit(1)

+ 1 - 0
mmgen/config.py

@@ -33,6 +33,7 @@ seed_ext      = "mmseed"
 mn_ext        = "mmwords"
 mn_ext        = "mmwords"
 brain_ext     = "mmbrain"
 brain_ext     = "mmbrain"
 incog_ext     = "mmincog"
 incog_ext     = "mmincog"
+incog_hex_ext = "mmincox"
 
 
 seedfile_exts = wallet_ext, seed_ext, mn_ext, brain_ext, incog_ext
 seedfile_exts = wallet_ext, seed_ext, mn_ext, brain_ext, incog_ext
 
 

+ 2 - 2
mmgen/tx.py

@@ -677,7 +677,7 @@ def get_keys_for_mmgen_addrs(mmgen_addrs,infiles,seeds,opts,gen_pairs=False):
 				infile = infiles.pop(0)
 				infile = infiles.pop(0)
 				seed = get_seed_retry(infile,opts)
 				seed = get_seed_retry(infile,opts)
 			elif "from_brain" in opts or "from_mnemonic" in opts \
 			elif "from_brain" in opts or "from_mnemonic" in opts \
-				or "from_seed" in opts or "from_incognito" in opts:
+				or "from_seed" in opts or "from_incog" in opts:
 				msg("Need data for seed ID %s" % seed_ids[0])
 				msg("Need data for seed ID %s" % seed_ids[0])
 				seed = get_seed_retry("",opts)
 				seed = get_seed_retry("",opts)
 			else:
 			else:
@@ -706,7 +706,7 @@ def get_keys_for_mmgen_addrs(mmgen_addrs,infiles,seeds,opts,gen_pairs=False):
 				else:      msg(" for ID %s" % seed_id)
 				else:      msg(" for ID %s" % seed_id)
 			else:
 			else:
 				msg("Seed source produced an invalid seed ID (%s)" % seed_id)
 				msg("Seed source produced an invalid seed ID (%s)" % seed_id)
-				if "from_incognito" in opts or infile.split(".")[-1] == g.incog_ext:
+				if "from_incog" in opts or infile.split(".")[-1] == g.incog_ext:
 					msg(
 					msg(
 """Incorrect hash preset, password or incognito wallet data
 """Incorrect hash preset, password or incognito wallet data
 
 

+ 23 - 14
mmgen/util.py

@@ -102,20 +102,20 @@ def show_hash_presets():
 
 
 cmessages = {
 cmessages = {
 	'null': "",
 	'null': "",
-	'incognito_iv_id': """
+	'incog_iv_id': """
    If you know your IV ID, check it against the value above.  If it's
    If you know your IV ID, check it against the value above.  If it's
    incorrect, then your incognito data is invalid.
    incorrect, then your incognito data is invalid.
 """,
 """,
-	'incognito_iv_id_hidden': """
+	'incog_iv_id_hidden': """
    If you know your IV ID, check it against the value above.  If it's
    If you know your IV ID, check it against the value above.  If it's
    incorrect, then your incognito data is invalid or you've supplied
    incorrect, then your incognito data is invalid or you've supplied
    an incorrect offset.
    an incorrect offset.
 """,
 """,
-	'incognito_key_id': """
+	'incog_key_id': """
    Check that the generated seed ID is correct.  If it's not, then your
    Check that the generated seed ID is correct.  If it's not, then your
    password or hash preset is incorrect or incognito data is corrupted.
    password or hash preset is incorrect or incognito data is corrupted.
 """,
 """,
-	'incognito_key_id_hidden': """
+	'incog_key_id_hidden': """
    Check that the generated seed ID is correct.  If it's not, then your
    Check that the generated seed ID is correct.  If it's not, then your
    password or hash preset is incorrect or incognito data is corrupted.
    password or hash preset is incorrect or incognito data is corrupted.
    If the key ID is correct but the seed ID is not, then you might have
    If the key ID is correct but the seed ID is not, then you might have
@@ -750,7 +750,7 @@ def check_data_fits_file_at_offset(fname,offset,dlen,action):
 
 
 def get_hidden_incog_data(opts):
 def get_hidden_incog_data(opts):
 		# Already sanity-checked:
 		# Already sanity-checked:
-		fname,offset,seed_len = opts['hidden_incog_data'].split(",")
+		fname,offset,seed_len = opts['from_incog_hidden'].split(",")
 		qmsg("Getting hidden incog data from file '%s'" % fname)
 		qmsg("Getting hidden incog data from file '%s'" % fname)
 
 
 		dlen = g.aesctr_iv_len + g.salt_len + (int(seed_len)/8)
 		dlen = g.aesctr_iv_len + g.salt_len + (int(seed_len)/8)
@@ -769,15 +769,22 @@ def get_seed_from_incog_wallet(
 		infile,
 		infile,
 		opts,
 		opts,
 		prompt="Enter %s wallet passphrase: " % g.proj_name_cap,
 		prompt="Enter %s wallet passphrase: " % g.proj_name_cap,
-		silent=False
-		):
+		silent=False,
+		hex_input=False
+	):
 
 
 	what = "incognito wallet data"
 	what = "incognito wallet data"
 
 
-	if "hidden_incog_data" in opts:
+	if "from_incog_hidden" in opts:
 		d = get_hidden_incog_data(opts)
 		d = get_hidden_incog_data(opts)
 	else:
 	else:
 		d = get_data_from_file(infile,what)
 		d = get_data_from_file(infile,what)
+		if hex_input:
+			try:
+				d = unhexlify("".join(d.split()).strip())
+			except:
+				msg("Data in file '%s' is not in hexadecimal format" % infile)
+				sys.exit(2)
 		# File could be of invalid length, so check:
 		# File could be of invalid length, so check:
 		valid_dlens = [i/8 + g.aesctr_iv_len + g.salt_len for i in g.seed_lens]
 		valid_dlens = [i/8 + g.aesctr_iv_len + g.salt_len for i in g.seed_lens]
 		if len(d) not in valid_dlens:
 		if len(d) not in valid_dlens:
@@ -789,8 +796,8 @@ def get_seed_from_incog_wallet(
 	iv, enc_incog_data = d[0:g.aesctr_iv_len], d[g.aesctr_iv_len:]
 	iv, enc_incog_data = d[0:g.aesctr_iv_len], d[g.aesctr_iv_len:]
 
 
 	qmsg("IV ID: %s.  Check this value if possible." % make_chksum_8(iv))
 	qmsg("IV ID: %s.  Check this value if possible." % make_chksum_8(iv))
-	vmsg(cmessages['incognito_iv_id_hidden' if "hidden_incog_data" in opts
-			else 'incognito_iv_id'])
+	vmsg(cmessages['incog_iv_id_hidden' if "from_incog_hidden" in opts
+			else 'incog_iv_id'])
 
 
 	passwd = get_mmgen_passphrase(prompt,opts)
 	passwd = get_mmgen_passphrase(prompt,opts)
 
 
@@ -817,8 +824,8 @@ def get_seed_from_incog_wallet(
 
 
 	seed = decrypt_seed(enc_seed, key, "", "")
 	seed = decrypt_seed(enc_seed, key, "", "")
 	qmsg("Seed ID: %s.  Check that this value is correct." % make_chksum_8(seed))
 	qmsg("Seed ID: %s.  Check that this value is correct." % make_chksum_8(seed))
-	vmsg(cmessages['incognito_key_id_hidden' if "hidden_incog_data" in opts
-			else 'incognito_key_id'])
+	vmsg(cmessages['incog_key_id_hidden' if "from_incog_hidden" in opts
+			else 'incog_key_id'])
 
 
 	return seed
 	return seed
 
 
@@ -888,10 +895,11 @@ def get_seed(infile,opts,silent=False):
 	elif ext == g.seed_ext:         source = "seed"
 	elif ext == g.seed_ext:         source = "seed"
 	elif ext == g.wallet_ext:       source = "wallet"
 	elif ext == g.wallet_ext:       source = "wallet"
 	elif ext == g.incog_ext:        source = "incognito wallet"
 	elif ext == g.incog_ext:        source = "incognito wallet"
+	elif ext == g.incog_hex_ext:    source = "incognito wallet"
 	elif 'from_mnemonic'  in opts: source = "mnemonic"
 	elif 'from_mnemonic'  in opts: source = "mnemonic"
 	elif 'from_brain'     in opts: source = "brainwallet"
 	elif 'from_brain'     in opts: source = "brainwallet"
 	elif 'from_seed'      in opts: source = "seed"
 	elif 'from_seed'      in opts: source = "seed"
-	elif 'from_incognito' in opts: source = "incognito wallet"
+	elif 'from_incog'     in opts: source = "incognito wallet"
 	else:
 	else:
 		if infile: msg(
 		if infile: msg(
 			"Invalid file extension for file: %s\nValid extensions: '.%s'" %
 			"Invalid file extension for file: %s\nValid extensions: '.%s'" %
@@ -924,7 +932,8 @@ def get_seed(infile,opts,silent=False):
 	elif source == "wallet":
 	elif source == "wallet":
 		seed = get_seed_from_wallet(infile, opts, silent=silent)
 		seed = get_seed_from_wallet(infile, opts, silent=silent)
 	elif source == "incognito wallet":
 	elif source == "incognito wallet":
-		seed = get_seed_from_incog_wallet(infile, opts, silent=silent)
+		h = True if ext == g.incog_hex_ext or 'from_incog_hex' in opts else False
+		seed = get_seed_from_incog_wallet(infile, opts, silent=silent, hex_input=h)
 
 
 
 
 	if infile and not seed and (
 	if infile and not seed and (