Browse Source

new wallet format: PlainHexSeedFile (plain hexadecimal w/o checksum)

The MMGen Project 5 years ago
parent
commit
15ac6c6947

+ 29 - 0
mmgen/seed.py

@@ -1014,6 +1014,35 @@ class MMGenSeedFile(SeedSourceUnenc):
 
 
 		return True
 		return True
 
 
+class PlainHexSeedFile(SeedSourceUnenc):
+
+	stdin_ok = True
+	fmt_codes = 'hex','rawhex','plainhex'
+	desc = 'plain hexadecimal seed data'
+	ext = 'hex'
+
+	def _format(self):
+		self.fmt_data = self.seed.hexdata + '\n'
+
+	def _deformat(self):
+		desc = self.desc
+		d = self.fmt_data.strip()
+
+		if not is_hex_str_lc(d):
+			msg("'{}': not a lowercase hexidecimal string, in {}".format(d,desc))
+			return False
+
+		if not len(d)*4 in g.seed_lens:
+			msg('Invalid data length ({}) in {}'.format(len(d),desc))
+			return False
+
+		self.seed = Seed(bytes.fromhex(d))
+		self.ssdata.hexseed = d
+
+		check_usr_seed_len(self.seed.bitlen)
+
+		return True
+
 class MMGenHexSeedFile(SeedSourceUnenc):
 class MMGenHexSeedFile(SeedSourceUnenc):
 
 
 	stdin_ok = True
 	stdin_ok = True

+ 1 - 0
test/ref/1378FC64.hex

@@ -0,0 +1 @@
+456d7f5f1c4bfe3bc916b87560ae6a3e20da39691cf53ded

+ 1 - 0
test/ref/98831F3A.hex

@@ -0,0 +1 @@
+456d7f5f1c4bfe3bc916b87560ae6a3e20da39691cf53ded010e90a56e048e62

+ 1 - 0
test/ref/FE3C6545.hex

@@ -0,0 +1 @@
+456d7f5f1c4bfe3bc916b87560ae6a3e

+ 9 - 0
test/test_py_d/ts_ref_3seed.py

@@ -46,6 +46,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
 		('ref_wallet_chk', ([],'saved reference wallet')),
 		('ref_wallet_chk', ([],'saved reference wallet')),
 		('ref_seed_chk',   ([],'saved seed file')),
 		('ref_seed_chk',   ([],'saved seed file')),
 		('ref_hex_chk',    ([],'saved mmhex file')),
 		('ref_hex_chk',    ([],'saved mmhex file')),
+		('ref_plainhex_chk',([],'saved hex file')),
 		('ref_mn_chk',     ([],'saved native MMGen mnemonic file')),
 		('ref_mn_chk',     ([],'saved native MMGen mnemonic file')),
 		('ref_bip39_chk',  ([],'saved BIP39 mnemonic file')),
 		('ref_bip39_chk',  ([],'saved BIP39 mnemonic file')),
 		('ref_hincog_chk', ([],'saved hidden incog reference wallet')),
 		('ref_hincog_chk', ([],'saved hidden incog reference wallet')),
@@ -56,6 +57,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
 		('ref_walletconv_bip39',  (['mmdat',pwfile],'wallet filename (bip39)')),
 		('ref_walletconv_bip39',  (['mmdat',pwfile],'wallet filename (bip39)')),
 		('ref_walletconv_seed',   (['mmdat',pwfile],'wallet filename (seed)')),
 		('ref_walletconv_seed',   (['mmdat',pwfile],'wallet filename (seed)')),
 		('ref_walletconv_hexseed',(['mmdat',pwfile],'wallet filename (hex seed)')),
 		('ref_walletconv_hexseed',(['mmdat',pwfile],'wallet filename (hex seed)')),
+		('ref_walletconv_plainhexseed',(['mmdat',pwfile],'wallet filename (plain hex seed)')),
 		('ref_walletconv_incog',  (['mmdat',pwfile],'wallet filename (incog)')),
 		('ref_walletconv_incog',  (['mmdat',pwfile],'wallet filename (incog)')),
 		('ref_walletconv_xincog', (['mmdat',pwfile],'wallet filename (hex incog)')),
 		('ref_walletconv_xincog', (['mmdat',pwfile],'wallet filename (hex incog)')),
 	)
 	)
@@ -86,6 +88,10 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
 		from mmgen.seed import MMGenHexSeedFile
 		from mmgen.seed import MMGenHexSeedFile
 		return self.ref_ss_chk(ss=MMGenHexSeedFile)
 		return self.ref_ss_chk(ss=MMGenHexSeedFile)
 
 
+	def ref_plainhex_chk(self):
+		from mmgen.seed import PlainHexSeedFile
+		return self.ref_ss_chk(ss=PlainHexSeedFile)
+
 	def ref_mn_chk(self):
 	def ref_mn_chk(self):
 		from mmgen.seed import MMGenMnemonic
 		from mmgen.seed import MMGenMnemonic
 		return self.ref_ss_chk(ss=MMGenMnemonic)
 		return self.ref_ss_chk(ss=MMGenMnemonic)
@@ -164,6 +170,9 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
 	def ref_walletconv_hexseed(self,fn,pf):
 	def ref_walletconv_hexseed(self,fn,pf):
 		return self.ref_walletconv(fn,pf,ofmt='mmhex',desc='Hexadecimal seed data with checksum',ext='mmhex')
 		return self.ref_walletconv(fn,pf,ofmt='mmhex',desc='Hexadecimal seed data with checksum',ext='mmhex')
 
 
+	def ref_walletconv_plainhexseed(self,fn,pf):
+		return self.ref_walletconv(fn,pf,ofmt='hex',desc='Plain hexadecimal seed data',ext='hex')
+
 	def ref_walletconv_incog(self,fn,pf,desc='Incognito data',ofmt='incog',ext='mmincog'):
 	def ref_walletconv_incog(self,fn,pf,desc='Incognito data',ofmt='incog',ext='mmincog'):
 		args = ['-r0','-p1']
 		args = ['-r0','-p1']
 		pat = r'{}-[0-9A-F]{{8}}-[0-9A-F]{{8}}\[{},1\].' + ext
 		pat = r'{}-[0-9A-F]{{8}}-[0-9A-F]{{8}}\[{},1\].' + ext

+ 8 - 0
test/test_py_d/ts_wallet.py

@@ -63,6 +63,7 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
 		('ref_bip39_conv',     'conversion of saved BIP39 mnemonic'),
 		('ref_bip39_conv',     'conversion of saved BIP39 mnemonic'),
 		('ref_seed_conv',      'conversion of saved seed file'),
 		('ref_seed_conv',      'conversion of saved seed file'),
 		('ref_hex_conv',       'conversion of saved MMGen hexadecimal seed file'),
 		('ref_hex_conv',       'conversion of saved MMGen hexadecimal seed file'),
+		('ref_plainhex_conv',  'conversion of saved plain hexadecimal seed file'),
 		('ref_brain_conv',     'conversion of ref brainwallet'),
 		('ref_brain_conv',     'conversion of ref brainwallet'),
 		('ref_incog_conv',     'conversion of saved incog wallet'),
 		('ref_incog_conv',     'conversion of saved incog wallet'),
 		('ref_incox_conv',     'conversion of saved hex incog wallet'),
 		('ref_incox_conv',     'conversion of saved hex incog wallet'),
@@ -73,6 +74,7 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
 		('ref_mn_conv_out',     'ref seed conversion to MMGen native mnemonic'),
 		('ref_mn_conv_out',     'ref seed conversion to MMGen native mnemonic'),
 		('ref_bip39_conv_out',  'ref seed conversion to BIP39 mnemonic'),
 		('ref_bip39_conv_out',  'ref seed conversion to BIP39 mnemonic'),
 		('ref_hex_conv_out',    'ref seed conversion to MMGen hex seed'),
 		('ref_hex_conv_out',    'ref seed conversion to MMGen hex seed'),
+		('ref_plainhex_conv_out','ref seed conversion to plain hex seed'),
 		('ref_seed_conv_out',   'ref seed conversion to seed'),
 		('ref_seed_conv_out',   'ref seed conversion to seed'),
 		('ref_incog_conv_out',  'ref seed conversion to incog data'),
 		('ref_incog_conv_out',  'ref seed conversion to incog data'),
 		('ref_incox_conv_out',  'ref seed conversion to hex incog data'),
 		('ref_incox_conv_out',  'ref seed conversion to hex incog data'),
@@ -103,6 +105,9 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
 	def ref_hex_conv(self):
 	def ref_hex_conv(self):
 		return self.ref_mn_conv(ext='mmhex',desc='Hexadecimal seed data with checksum')
 		return self.ref_mn_conv(ext='mmhex',desc='Hexadecimal seed data with checksum')
 
 
+	def ref_plainhex_conv(self):
+		return self.ref_mn_conv(ext='hex',desc='Plain hexadecimal seed data')
+
 	def ref_brain_conv(self):
 	def ref_brain_conv(self):
 		uopts = ['-i','b','-p','1','-l',str(self.seed_len)]
 		uopts = ['-i','b','-p','1','-l',str(self.seed_len)]
 		return self.walletconv_in(None,'brainwallet',uopts,oo=True)
 		return self.walletconv_in(None,'brainwallet',uopts,oo=True)
@@ -139,6 +144,9 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
 	def ref_hex_conv_out(self):
 	def ref_hex_conv_out(self):
 		return self.walletconv_out('hexadecimal seed data with checksum','hexseed')
 		return self.walletconv_out('hexadecimal seed data with checksum','hexseed')
 
 
+	def ref_plainhex_conv_out(self):
+		return self.walletconv_out('plain hexadecimal seed data','hex')
+
 	def ref_incog_conv_out(self):
 	def ref_incog_conv_out(self):
 		return self.walletconv_out('incognito data',out_fmt='i',pw=True)
 		return self.walletconv_out('incognito data',out_fmt='i',pw=True)