def printer(): device_address = os.urandom(8).encode('hex') xor = bitshuffle.hardware_xor_from_device_address(device_address) secret = os.urandom(5).encode('hex') cc = claiming.encode(xor, int(secret, 16)) printer = hardware.Printer( device_address=device_address, hardware_xor=xor, ) db.session.add(printer) db.session.commit() def out(x): x.write(' address: {}\n'.format(device_address)) x.write(' DB id: {}\n'.format(printer.id)) x.write(' secret: {}\n'.format(secret)) x.write(' xor: {}\n'.format(xor)) x.write(' claim code: {}\n'.format(cc)) path = device_address + '.printer' with open(path, 'w') as f: out(f) out(sys.stdout) print('\nCreated printer and saved as {}'.format(path))
def printer(): device_address = os.urandom(8).hex() xor = bitshuffle.hardware_xor_from_device_address(device_address) secret = os.urandom(5).hex() cc = claiming.encode(xor, int(secret, 16)) printer = hardware.Printer( device_address=device_address, hardware_xor=xor, ) db.session.add(printer) db.session.commit() def out(x): x.write(' address: {}\n'.format(device_address)) x.write(' DB id: {}\n'.format(printer.id)) x.write(' secret: {}\n'.format(secret)) x.write(' xor: {}\n'.format(xor)) x.write(' claim code: {}\n'.format(cc)) path = device_address + '.printer' with open(path, 'w') as f: out(f) out(sys.stdout) print('\nCreated printer and saved as {}'.format(path))
def test_coding_from_real_world(self): device_address = '000d6f000273c164' # only the last 24 bits of the device address are used device_address_int = int(device_address, 16) & 0xffffff # secret only known to printer and claim code secret = 0xeb1ba696a0 self.assertEqual( claiming.encode(device_address_int, secret), 'n5ry-p6x6-kth7-7hc4', )
def test_encoding(self): for cc, device, secret in CC_TEST_VECTORS: self.assertEqual(claiming.encode(device, secret), cc) dec_device, dec_secret, _, _ = claiming.unpack_claim_code(cc) self.assertEqual(dec_device, device) self.assertEqual(dec_secret, secret)