import tlslite.api
import tlslite.utils

client_pem_file = '''
-----BEGIN CERTIFICATE-----
MIICXDCCAcWgAwIBAgIJAKBfLqul2lj3MA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV
BAMUHmRtZXllckBqYWJiZXIuY29tXDJmdGVzdGNsaWVudDAeFw0wODA5MDYxOTI0
MjVaFw0wOTA5MDYxOTI0MjVaMCkxJzAlBgNVBAMUHmRtZXllckBqYWJiZXIuY29t
XDJmdGVzdGNsaWVudDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwaRLyj7J
/mmliYhjEwGnRGRs6gmcPaIywEK2QLFz6c3/RmRabYbIOE0iZ22D33TguSNQBWfd
lweT3bBETUhd3yuCcqWO5Ptiq/6wulMlxVeV5mxwNP/IF94VPWj0jHbRJcU8ZhS4
UnX6R5q6OSfBGdUU4mYKdiaHpgqTAO9eeqUCAwEAAaOBizCBiDAdBgNVHQ4EFgQU
b8touIdFuXF5clv2I/S1aOOFdN4wWQYDVR0jBFIwUIAUb8touIdFuXF5clv2I/S1
aOOFdN6hLaQrMCkxJzAlBgNVBAMUHmRtZXllckBqYWJiZXIuY29tXDJmdGVzdGNs
aWVudIIJAKBfLqul2lj3MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA
pA5tI1J9Qpn3jSoQctFksRLb2H3A48R3rU8/qnarwE/AyOvth3k3ulLEmhJBT+0S
mVb6WzrZEA/2plu7DhR8ylhuvJv6cAEIN+TPha3yzO2P8uoVZf7hdunOhMLl2Z6w
xEfiGI5X9OsaMeFOQa+B2C3uUVAMLbVV7Rp/qQkai1Y=
-----END CERTIFICATE-----
'''

user_pem_file = '''
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDQM9x94nMpYsYTbalEwg0sqv4LGqjMXXgOqReQtTAbNOphGLj3
Irpp5tn2ywWylNOOpra42nDVTfbvjy2pTpukAJYdtwL55n+GbkrKZcGEvdWN9v91
bTGu3GMj0lEWCuBYDLGd2U1lSk3azcOEoN9WCk9LH9mnx3+5tsBHGpllmQIDAQAB
AoGBAI0D0z9f9Of/AnF+QLtVQ18RoWcb82AXno0vccqNLbv/pw+EkyKv3tqDhPVm
pMFDk9Z2jCO/r9SJLcsrip21pCvC2VuPFicJFO6zi8qY6wPjqB6YtvgsAbabtVTx
hI0WDP6TiBkxAqrkayzzl33B2jNcU+U+pNA36AEsL5ozyAJRAkEA9uBPSHXhYgHJ
UK+Z9xND5B9bEkbWBIQCc89G6U13jm78a2s7PkHPbjREHAocG+Q6HkU7TWrJa+sJ
2YAGuMvGdwJBANflqUmnSk41lEe9S9uO93mDP7Es4wfqNx2x6yCmDt1eNPCSXwvs
lLBBoQlQ2bZ2+/TbJyFjLdPLK6FELrzSaG8CQGIrzrtEzQxZI4HnYnVi/tNfOKrq
6j4/dG4zFcK+oHVOYyggKx3Vs7PiKtdvmb/poMbaxvtBJLm6bF9GTuX7en8CQDdq
ldd3/1Sv4A3CAxSqT8965wBdWzEO53LR1l6dATfFFKWjjI4M/eV4ExPHEvsI84dY
MWUahgrVHa/ZRn3lLDUCQQCSYVGWrOZRDwJDMxo3PS0UiQWao1On1+scMTP4TOxj
JhBoOSvr0/kxHNzyKUHvPY/mZ41AJIeVPzJiuPMxFfVY
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICCTCCAXKgAwIBAgIJALhU0Id6xxwQMA0GCSqGSIb3DQEBBQUAMA4xDDAKBgNV
BAMTA2ZvbzAeFw0wNzEyMjgyMDA1MTRaFw0wODEyMjcyMDA1MTRaMA4xDDAKBgNV
BAMTA2ZvbzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0DPcfeJzKWLGE22p
RMINLKr+CxqozF14DqkXkLUwGzTqYRi49yK6aebZ9ssFspTTjqa2uNpw1U32748t
qU6bpACWHbcC+eZ/hm5KymXBhL3Vjfb/dW0xrtxjI9JRFgrgWAyxndlNZUpN2s3D
hKDfVgpPSx/Zp8d/ubbARxqZZZkCAwEAAaNvMG0wHQYDVR0OBBYEFJWwFqmSRGcx
YXmQfdF+XBWkeML4MD4GA1UdIwQ3MDWAFJWwFqmSRGcxYXmQfdF+XBWkeML4oRKk
EDAOMQwwCgYDVQQDEwNmb2+CCQC4VNCHesccEDAMBgNVHRMEBTADAQH/MA0GCSqG
SIb3DQEBBQUAA4GBAIhlUeGZ0d0msNVxYWAXg2lRsJt9INHJQTCJMmoUeTtaRjyp
ffJtuopguNNBDn+MjrEp2/+zLNMahDYLXaTVmBf6zvY0hzB9Ih0kNTh23Fb5j+yK
QChPXQUo0EGCaODWhfhKRNdseUozfNWOz9iTgMGw8eYNLllQRL//iAOfOr/8
-----END CERTIFICATE-----
'''
    
def printBase64(s):
    while s:
        print s[:64]
        s = s[64:]
    
print '=== client key ==='
print
x509 = tlslite.api.X509().parse(client_pem_file)
print x509.getFingerprint()
print x509.getCommonName()
print
clientkey = tlslite.utils.cryptomath.bytesToBase64(x509.writeBytes())
printBase64(clientkey)
print

print
print '=== user signature ==='
print
user = tlslite.api.X509().parse(user_pem_file)
print user.getFingerprint()
print
user = tlslite.api.parsePEMKey(user_pem_file, private=True)
signature = tlslite.utils.cryptomath.bytesToBase64(user.hashAndSign(clientkey))
printBase64(signature)
print

user = tlslite.api.X509().parse(user_pem_file)
print
print '=== verify ==='
print
sigbytes = tlslite.utils.cryptomath.base64ToBytes(signature)
print user.publicKey.hashAndVerify(sigbytes, clientkey)

