def test_decode_encoded(self): random.seed(42) for i in range(142): binary = bytes([ random.randint(0, 255) for _ in range(random.randint(0, 142)) ]) self.assertEqual(binary, b45decode(b45encode(binary)))
def generate_qr_svg(msg): ciphertext = cipher.encrypt(msg.encode()) b45 = b45encode(ciphertext) qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_Q, box_size=10, border=4, image_factory=qrcode.image.svg.SvgPathFillImage) qr.add_data(b45) qr.make(fit=True) img = qr.make_image() # Do not print codes for empty / short input if len(msg) > 1: img._img.append(img.make_path()) return etree.tostring(etree.ElementTree(img._img)).decode()
def compress_and_encode(data: bytes) -> bytes: compressed_data = zlib.compress(data, level=zlib.Z_BEST_COMPRESSION) encoded_compressed_data = base45.b45encode(compressed_data) logger.debug( "Uncompressed data: %d bytes, %s", len(data), binascii.hexlify(data).decode(), ) logger.debug( "Compressed data: %d bytes, %s", len(compressed_data), binascii.hexlify(compressed_data).decode(), ) logger.debug( "Encoded compressed data: %d bytes, %s", len(encoded_compressed_data), binascii.hexlify(encoded_compressed_data).decode(), ) return encoded_compressed_data
from base45 import b45decode, b45encode from Crypto.Cipher import PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto import Hash import sys import qrcode contact = sys.argv[1] key = RSA.importKey(open('stuss2021_key.pub').read()) cipher = PKCS1_OAEP.new(key, hashAlgo=Hash.SHA256) msg = b45encode(cipher.encrypt(bytes(contact.encode()))) print('Contact: {}\nBase45: {}'.format(contact, msg)) qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_Q, box_size=10, border=4, ) qr.add_data(msg) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") img.show()
def test_encode_bad(self): with self.assertRaises(TypeError): b45encode(42)
def test_encode_good(self): for binary_ref, encoded_ref in GOOD_DATA: encoded_res = b45encode(binary_ref) self.assertEqual(encoded_res, encoded_ref)
def run(self, text): import base45 return base45.b45encode(text.encode('utf-8', errors="surrogateescape")).decode( 'utf-8', errors="surrogateescape")