From 15ac6c69476b9aab853127b5994bd680e9ec9531 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Wed, 23 Oct 2019 12:25:24 +0000 Subject: [PATCH] new wallet format: PlainHexSeedFile (plain hexadecimal w/o checksum) --- mmgen/seed.py | 29 +++++++++++++++++++++++++++++ test/ref/1378FC64.hex | 1 + test/ref/98831F3A.hex | 1 + test/ref/FE3C6545.hex | 1 + test/test_py_d/ts_ref_3seed.py | 9 +++++++++ test/test_py_d/ts_wallet.py | 8 ++++++++ 6 files changed, 49 insertions(+) create mode 100644 test/ref/1378FC64.hex create mode 100644 test/ref/98831F3A.hex create mode 100644 test/ref/FE3C6545.hex diff --git a/mmgen/seed.py b/mmgen/seed.py index 59e9461b..5930229e 100755 --- a/mmgen/seed.py +++ b/mmgen/seed.py @@ -1014,6 +1014,35 @@ class MMGenSeedFile(SeedSourceUnenc): 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): stdin_ok = True diff --git a/test/ref/1378FC64.hex b/test/ref/1378FC64.hex new file mode 100644 index 00000000..5205b735 --- /dev/null +++ b/test/ref/1378FC64.hex @@ -0,0 +1 @@ +456d7f5f1c4bfe3bc916b87560ae6a3e20da39691cf53ded diff --git a/test/ref/98831F3A.hex b/test/ref/98831F3A.hex new file mode 100644 index 00000000..7ce72d6f --- /dev/null +++ b/test/ref/98831F3A.hex @@ -0,0 +1 @@ +456d7f5f1c4bfe3bc916b87560ae6a3e20da39691cf53ded010e90a56e048e62 diff --git a/test/ref/FE3C6545.hex b/test/ref/FE3C6545.hex new file mode 100644 index 00000000..6e92f4ed --- /dev/null +++ b/test/ref/FE3C6545.hex @@ -0,0 +1 @@ +456d7f5f1c4bfe3bc916b87560ae6a3e diff --git a/test/test_py_d/ts_ref_3seed.py b/test/test_py_d/ts_ref_3seed.py index 8b69e8b6..37253536 100755 --- a/test/test_py_d/ts_ref_3seed.py +++ b/test/test_py_d/ts_ref_3seed.py @@ -46,6 +46,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared): ('ref_wallet_chk', ([],'saved reference wallet')), ('ref_seed_chk', ([],'saved seed file')), ('ref_hex_chk', ([],'saved mmhex file')), + ('ref_plainhex_chk',([],'saved hex file')), ('ref_mn_chk', ([],'saved native MMGen mnemonic file')), ('ref_bip39_chk', ([],'saved BIP39 mnemonic file')), ('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_seed', (['mmdat',pwfile],'wallet filename (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_xincog', (['mmdat',pwfile],'wallet filename (hex incog)')), ) @@ -86,6 +88,10 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared): from mmgen.seed import 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): from mmgen.seed import MMGenMnemonic return self.ref_ss_chk(ss=MMGenMnemonic) @@ -164,6 +170,9 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared): def ref_walletconv_hexseed(self,fn,pf): 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'): args = ['-r0','-p1'] pat = r'{}-[0-9A-F]{{8}}-[0-9A-F]{{8}}\[{},1\].' + ext diff --git a/test/test_py_d/ts_wallet.py b/test/test_py_d/ts_wallet.py index 2e538366..0041fc6c 100755 --- a/test/test_py_d/ts_wallet.py +++ b/test/test_py_d/ts_wallet.py @@ -63,6 +63,7 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared): ('ref_bip39_conv', 'conversion of saved BIP39 mnemonic'), ('ref_seed_conv', 'conversion of saved 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_incog_conv', 'conversion of saved 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_bip39_conv_out', 'ref seed conversion to BIP39 mnemonic'), ('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_incog_conv_out', 'ref seed conversion to 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): 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): uopts = ['-i','b','-p','1','-l',str(self.seed_len)] return self.walletconv_in(None,'brainwallet',uopts,oo=True) @@ -139,6 +144,9 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared): def ref_hex_conv_out(self): 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): return self.walletconv_out('incognito data',out_fmt='i',pw=True)