Browse Source

baseconv: disable Tirosh wordlist, minor cleanups in tool.py

The MMGen Project 3 years ago
parent
commit
786a10c937
2 changed files with 17 additions and 31 deletions
  1. 4 7
      mmgen/baseconv.py
  2. 13 24
      mmgen/tool.py

+ 4 - 7
mmgen/baseconv.py

@@ -42,7 +42,7 @@ class baseconv(object):
 		'b10':   ('base10 string',     'base10 (decimal) string data'),
 		'b10':   ('base10 string',     'base10 (decimal) string data'),
 		'b8':    ('base8 string',      'base8 (octal) string data'),
 		'b8':    ('base8 string',      'base8 (octal) string data'),
 		'b6d':   ('base6d (die roll)', 'base6 data using the digits from one to six'),
 		'b6d':   ('base6d (die roll)', 'base6 data using the digits from one to six'),
-		'tirosh':('Tirosh mnemonic',   'base1626 mnemonic using truncated Tirosh wordlist'), # not used by wallet
+#		'tirosh':('Tirosh mnemonic',   'base1626 mnemonic using truncated Tirosh wordlist'), # not used by wallet
 		'mmgen': ('MMGen native mnemonic',
 		'mmgen': ('MMGen native mnemonic',
 		'MMGen native mnemonic seed phrase created using old Electrum wordlist and simple base conversion'),
 		'MMGen native mnemonic seed phrase created using old Electrum wordlist and simple base conversion'),
 		'xmrseed': ('Monero mnemonic', 'Monero new-style mnemonic seed phrase'),
 		'xmrseed': ('Monero mnemonic', 'Monero new-style mnemonic seed phrase'),
@@ -57,12 +57,12 @@ class baseconv(object):
 		'b8':  tuple('01234567'),
 		'b8':  tuple('01234567'),
 		'b6d': tuple('123456'),
 		'b6d': tuple('123456'),
 	}
 	}
-	mn_base = 1626 # tirosh list is 1633 words long!
+	mn_base = 1626
 	wl_chksums = {
 	wl_chksums = {
 		'mmgen':  '5ca31424',
 		'mmgen':  '5ca31424',
 		'xmrseed':'3c381ebb',
 		'xmrseed':'3c381ebb',
-		'tirosh': '48f05e1f', # tirosh truncated to mn_base (1626)
-		# 'tirosh1633': '1a5faeff'
+#		'tirosh': '48f05e1f', # tirosh truncated to mn_base
+#		'tirosh1633': '1a5faeff' # tirosh list is 1633 words long!
 	}
 	}
 	seedlen_map = {
 	seedlen_map = {
 		'b58': { 16:22, 24:33, 32:44 },
 		'b58': { 16:22, 24:33, 32:44 },
@@ -85,9 +85,6 @@ class baseconv(object):
 		elif wl_id == 'xmrseed':
 		elif wl_id == 'xmrseed':
 			from .mn_monero import words
 			from .mn_monero import words
 			self.digits[wl_id] = words
 			self.digits[wl_id] = words
-		elif wl_id == 'tirosh':
-			from .mn_tirosh import words
-			self.digits[wl_id] = words[:self.mn_base]
 		elif wl_id not in self.digits:
 		elif wl_id not in self.digits:
 			raise ValueError(f'{wl_id}: unrecognized mnemonic ID')
 			raise ValueError(f'{wl_id}: unrecognized mnemonic ID')
 
 

+ 13 - 24
mmgen/tool.py

@@ -29,6 +29,7 @@ from .addr import *
 from .addrlist import AddrList,KeyAddrList
 from .addrlist import AddrList,KeyAddrList
 from .passwdlist import PasswordList
 from .passwdlist import PasswordList
 from .baseconv import baseconv
 from .baseconv import baseconv
+from .bip39 import bip39
 
 
 NL = ('\n','\r\n')[g.platform=='win']
 NL = ('\n','\r\n')[g.platform=='win']
 
 
@@ -232,15 +233,12 @@ def _process_result(ret,pager=False,print_result=False):
 
 
 from .addr import MMGenAddrType
 from .addr import MMGenAddrType
 
 
-def conv_cls_bip39():
-	from .bip39 import bip39
-	return bip39
-
 dfl_mnemonic_fmt = 'mmgen'
 dfl_mnemonic_fmt = 'mmgen'
+mft = namedtuple('mnemonic_format',['fmt','pad','conv_cls'])
 mnemonic_fmts = {
 mnemonic_fmts = {
-	'mmgen': { 'fmt': 'words', 'conv_cls': lambda: baseconv },
-	'bip39': { 'fmt': 'bip39', 'conv_cls': conv_cls_bip39 },
-	'xmrseed': { 'fmt': 'xmrseed','conv_cls': lambda: baseconv },
+	'mmgen':   mft( 'words',  'seed', baseconv ),
+	'bip39':   mft( 'bip39',   None,  bip39 ),
+	'xmrseed': mft( 'xmrseed', None,  baseconv ),
 }
 }
 mn_opts_disp = _options_annot_str(mnemonic_fmts)
 mn_opts_disp = _options_annot_str(mnemonic_fmts)
 
 
@@ -623,22 +621,15 @@ class MMGenToolCmdMnemonic(MMGenToolCmds):
 
 
 	def hex2mn( self, hexstr:'sstr', fmt:mn_opts_disp = dfl_mnemonic_fmt ):
 	def hex2mn( self, hexstr:'sstr', fmt:mn_opts_disp = dfl_mnemonic_fmt ):
 		"convert a 16, 24 or 32-byte hexadecimal number to a mnemonic seed phrase"
 		"convert a 16, 24 or 32-byte hexadecimal number to a mnemonic seed phrase"
-		if fmt == 'bip39':
-			from .bip39 import bip39
-			return ' '.join(bip39(fmt).fromhex(hexstr))
-		else:
-			bytestr = bytes.fromhex(hexstr)
-			if fmt == 'xmrseed':
-				bytestr = self._xmr_reduce(bytestr)
-			return baseconv(fmt).frombytes(bytestr,'seed',tostr=True)
+		if fmt == 'xmrseed':
+			hexstr = self._xmr_reduce(bytes.fromhex(hexstr)).hex()
+		f = mnemonic_fmts[fmt]
+		return ' '.join( f.conv_cls(fmt).fromhex(hexstr,f.pad) )
 
 
 	def mn2hex( self, seed_mnemonic:'sstr', fmt:mn_opts_disp = dfl_mnemonic_fmt ):
 	def mn2hex( self, seed_mnemonic:'sstr', fmt:mn_opts_disp = dfl_mnemonic_fmt ):
 		"convert a mnemonic seed phrase to a hexadecimal number"
 		"convert a mnemonic seed phrase to a hexadecimal number"
-		if fmt == 'bip39':
-			from .bip39 import bip39
-			return bip39(fmt).tohex(seed_mnemonic.split())
-		else:
-			return baseconv(fmt).tohex(seed_mnemonic.split(),'seed')
+		f = mnemonic_fmts[fmt]
+		return f.conv_cls(fmt).tohex( seed_mnemonic.split(), f.pad )
 
 
 	def mn2hex_interactive( self, fmt:mn_opts_disp = dfl_mnemonic_fmt, mn_len=24, print_mn=False ):
 	def mn2hex_interactive( self, fmt:mn_opts_disp = dfl_mnemonic_fmt, mn_len=24, print_mn=False ):
 		"convert an interactively supplied mnemonic seed phrase to a hexadecimal number"
 		"convert an interactively supplied mnemonic seed phrase to a hexadecimal number"
@@ -650,13 +641,11 @@ class MMGenToolCmdMnemonic(MMGenToolCmds):
 
 
 	def mn_stats(self, fmt:mn_opts_disp = dfl_mnemonic_fmt ):
 	def mn_stats(self, fmt:mn_opts_disp = dfl_mnemonic_fmt ):
 		"show stats for mnemonic wordlist"
 		"show stats for mnemonic wordlist"
-		conv_cls = mnemonic_fmts[fmt]['conv_cls']()
-		return conv_cls(fmt).check_wordlist()
+		return mnemonic_fmts[fmt].conv_cls(fmt).check_wordlist()
 
 
 	def mn_printlist( self, fmt:mn_opts_disp = dfl_mnemonic_fmt, enum=False, pager=False ):
 	def mn_printlist( self, fmt:mn_opts_disp = dfl_mnemonic_fmt, enum=False, pager=False ):
 		"print mnemonic wordlist"
 		"print mnemonic wordlist"
-		conv_cls = mnemonic_fmts[fmt]['conv_cls']()
-		ret = conv_cls(fmt).get_wordlist()
+		ret = mnemonic_fmts[fmt].conv_cls(fmt).get_wordlist()
 		if enum:
 		if enum:
 			ret = [f'{n:>4} {e}' for n,e in enumerate(ret)]
 			ret = [f'{n:>4} {e}' for n,e in enumerate(ret)]
 		return '\n'.join(ret)
 		return '\n'.join(ret)