from os import urandom


def u_ord(c):
    """Adapt `ord(c)` for Python 2 or 3"""
    return ord(str(c)[0:1])


def genkey(length):
    """Generate key"""
    return urandom(length)


def xor_strings(s, t):
    """xor two strings together"""
    return "".join(chr(u_ord(a) ^ u_ord(b)) for a, b in zip(s, t))

message = 'This is a secret message'
print ('message:', message)

key = genkey(len(message))
print ('key:', key)

cipherText = xor_strings(message, key)
print ('cipherText:', cipherText)
print ('decrypted:', xor_strings(cipherText, key))

# verify
if xor_strings(cipherText, key) == message:
    print ('Unit test passed')
else:
    print ('Unit test failed')