1import unittest
2from util import *
3
4class MnemonicTests(unittest.TestCase):
5
6    words_list, wl = None, None
7
8    def setUp(self):
9        if self.wl is None and wordlist_init is not None:
10            self.words_list, words = load_words('english')
11            self.wl = wordlist_init(utf8(words))
12
13
14    @internal_only()
15    def test_mnemonic(self):
16
17        LEN = 16
18        PHRASES = LEN * 8 // 11 # 11 bits per phrase
19        PHRASES_BYTES = (PHRASES * 11 + 7) // 8 # Bytes needed to store
20        self.assertEqual(LEN, PHRASES_BYTES)
21
22        buf = create_string_buffer(LEN)
23
24        # Test round tripping
25        for i in range(len(self.words_list) - PHRASES):
26            phrase = utf8(' '.join(self.words_list[i : i + PHRASES]))
27
28            ret, written = mnemonic_to_bytes(self.wl, phrase, buf, LEN)
29            self.assertEqual(ret, 0)
30            self.assertEqual(written, PHRASES_BYTES)
31            generated = mnemonic_from_bytes(self.wl, buf, LEN)
32            self.assertEqual(phrase, generated)
33
34
35if __name__ == '__main__':
36    unittest.main()
37