From d46eeef998396a80c0ff8f0860a04823f1d1cda4 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Wed, 30 Oct 2019 09:20:47 +0000 Subject: [PATCH] dieroll wallet: truncate seed to correct length --- mmgen/seed.py | 6 +++++- test/ref/overflow128.b6d | 2 ++ test/test_py_d/ts_ref.py | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test/ref/overflow128.b6d diff --git a/mmgen/seed.py b/mmgen/seed.py index a08e82b2..91fa0f78 100755 --- a/mmgen/seed.py +++ b/mmgen/seed.py @@ -1019,6 +1019,7 @@ class DieRollSeedFile(SeedSourceUnenc): fmt_codes = 'b6d','die','dieroll', desc = 'base6d die roll seed data' ext = 'b6d' + conv_cls = baseconv def _format(self): d = baseconv.frombytes(self.seed.data,'b6d',pad='seed',tostr=True) + '\n' @@ -1026,7 +1027,10 @@ class DieRollSeedFile(SeedSourceUnenc): def _deformat(self): d = self.fmt_data.translate(dict((ord(ws),None) for ws in '\t\n ')) - seed_bytes = baseconv.tobytes(d,'b6d',pad='seed') + + # truncate seed to correct length, discarding high bits + seed_len = self.conv_cls.seedlen_map_rev['b6d'][len(d)] + seed_bytes = baseconv.tobytes(d,'b6d',pad='seed')[-seed_len:] self.seed = Seed(seed_bytes) self.ssdata.hexseed = seed_bytes.hex() diff --git a/test/ref/overflow128.b6d b/test/ref/overflow128.b6d new file mode 100644 index 00000000..0f873d25 --- /dev/null +++ b/test/ref/overflow128.b6d @@ -0,0 +1,2 @@ +55555 44444 33333 22222 11111 +55555 44444 33333 22222 11111 diff --git a/test/test_py_d/ts_ref.py b/test/test_py_d/ts_ref.py index b2134ee6..9c131ef0 100755 --- a/test/test_py_d/ts_ref.py +++ b/test/test_py_d/ts_ref.py @@ -129,6 +129,7 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared): # ('txcreate8', 'transaction creation (8)'), ('ref_tx_chk', 'signing saved reference tx file'), ('ref_brain_chk_spc3', 'saved brainwallet (non-standard spacing)'), + ('ref_dieroll_chk_overflow','saved dieroll wallet with extra entropy bits'), ('ref_tool_decrypt', 'decryption of saved MMGen-encrypted file'), ) @@ -265,6 +266,10 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared): def ref_brain_chk_spc3(self): return self.ref_brain_chk(bw_file=ref_bw_file_spc) + def ref_dieroll_chk_overflow(self): + wf = joinpath(ref_dir,'overflow128.b6d') + return self.walletchk(wf,None,sid='8EC6D4A2') + def ref_tool_decrypt(self): f = joinpath(ref_dir,ref_enc_fn) disable_debug()