Skip to content

Instantly share code, notes, and snippets.

@kdmukai
Created August 14, 2022 01:56
Show Gist options
  • Save kdmukai/eb88c46fe965110b3c7ecc22e480535a to your computer and use it in GitHub Desktop.
Save kdmukai/eb88c46fe965110b3c7ecc22e480535a to your computer and use it in GitHub Desktop.
Generating byte data for Compact SeedQR test vectors
import os
from embit import bip39
from embit.wordlists.bip39 import WORDLIST
from seedsigner.models.decode_qr import DecodeQR
from seedsigner.models.encode_qr import EncodeQR
from seedsigner.models.qr_type import QRType
from seedsigner.helpers.qr import QR
seed_bytes = b''
# Randomly generate byte data until we get one with our target "problem" byte(s)
while b'\r' not in seed_bytes:
seed_bytes = os.urandom(16)
mnemonic = bip39.mnemonic_from_bytes(seed_bytes).split()
encoder = EncodeQR(seed_phrase=mnemonic, qr_type=QRType.SEED__COMPACTSEEDQR)
qr = QR()
seed_qr = qr.qrimage(data=encoder.next_part(), background_color="#fff")
seed_qr.save("/Users/kdmukai/Downloads/vector8_compact_12word.png")
decoder = DecodeQR()
decoder.add_image(seed_qr)
assert(mnemonic == decoder.get_seed_phrase())
# Output in each format in the SeedQR documentation
print(" ".join(mnemonic))
print("".join(["{:04}".format(WORDLIST.index(w)) for w in mnemonic]))
print("".join([X for X in "".join(["{:0>8}".format(bin(X)[2:])for X in seed_bytes])]))
print(seed_bytes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment