Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.87 KB | None | 0 0
  1. import words
  2. import secrets
  3. from binascii import crc32
  4.  
  5. def get_checksum(phrase):
  6.     """Given a mnemonic word string, return a string of the computed checksum.
  7.    :rtype: str
  8.    """
  9.     phrase_split = phrase.split(" ")
  10.     if len(phrase_split) < 12:
  11.         raise ValueError("Invalid mnemonic phrase")
  12.     if len(phrase_split) > 13:
  13.         # Standard format
  14.         phrase = phrase_split[:24]
  15.     else:
  16.         # MyMonero format
  17.         phrase = phrase_split[:12]
  18.     wstr = "".join(word[:3] for word in phrase)
  19.     wstr = bytearray(wstr.encode('utf-8'))
  20.     z = ((crc32(wstr) & 0xffffffff) ^ 0xffffffff ) >> 0
  21.     z2 = ((z ^ 0xffffffff) >> 0) % len(phrase)
  22.     return phrase_split[z2]
  23.  
  24. def generate():
  25.     out = [secrets.choice(words.word_list) for i in range(24)]
  26.     checksum = get_checksum(" ".join(out))
  27.     out.append(checksum)
  28.     return " ".join(out)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement