Browse Source

dieroll wallet: truncate seed to correct length

The MMGen Project 5 years ago
parent
commit
d46eeef998
3 changed files with 12 additions and 1 deletions
  1. 5 1
      mmgen/seed.py
  2. 2 0
      test/ref/overflow128.b6d
  3. 5 0
      test/test_py_d/ts_ref.py

+ 5 - 1
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()

+ 2 - 0
test/ref/overflow128.b6d

@@ -0,0 +1,2 @@
+55555 44444 33333 22222 11111
+55555 44444 33333 22222 11111

+ 5 - 0
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()