]> git.friedersdorff.com Git - max/mnemkey.git/blob - mnemonic_key.py
908221dfe6587ceb05b07306580af88824a86f57
[max/mnemkey.git] / mnemonic_key.py
1 import hashlib
2 import math
3
4
5 def access_bit(data, num):
6     base = int(num // 8)
7     shift = int(num % 8)
8     return (data[base] & (1 << shift)) >> shift
9
10
11 with open("./input.gpg", "rb") as f:
12     bs = bytearray(f.read())
13
14 with open("./english.txt", "r") as wordlist:
15     words = [word.strip() for word in wordlist.readlines() if word.strip()]
16
17 digest = hashlib.sha256(bs).digest()
18
19
20 bits = [access_bit(bs, i) for i in range(len(bs) * 8)]
21 checksum_bits = [access_bit(digest, i) for i in range(len(digest) * 8)]
22
23 n_bits = len(bits)
24 nearest_mulitple_of_11 = math.floor((n_bits/11) + 1) * 11
25 bits_missing = nearest_mulitple_of_11 - n_bits
26 bits += checksum_bits[0:bits_missing]
27
28
29 mnemonic = []
30 for i in range(0, len(bits), 11):
31     word_bits = bits[i:i+11]
32     word_int = 0
33     for j, bit in enumerate(word_bits):
34         word_int += bit << j
35     word = words[word_int] + "                    "
36     mnemonic.append(word[0:10])
37
38 mnemonic += [""] * 5
39 mnemonics = [mnemonic[i:i+5] for i in range(0, len(mnemonic), 5)]
40 for m in mnemonics:
41     print("".join(m))