picseal_pub/test/crypto_test.py

47 lines
1.2 KiB
Python

#
#
#
import logging
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
print ("Generating keys...")
msg = 'attack at dawn'
key = RSA.generate(4096) # I know this is a huge overkill
pubkey = RSA.importKey(key.publickey().exportKey('DER'))
privkey = RSA.importKey(key.exportKey('DER'))
cipher = PKCS1_v1_5.new(pubkey)
ciphertext = cipher.encrypt(msg.encode())
print("text: {}".format(msg))
print("crypt: {}".format(ciphertext))
# decrypt(self, ct, sentinel)
# ct== cypher text, b'text as bytes'
# sentinel== object to be return on error
# https://pythonhosted.org/pycrypto/Crypto.Cipher.PKCS1_v1_5.PKCS115_Cipher-class.html#encrypt
dcipher = PKCS1_v1_5.new(privkey)
secret = dcipher.decrypt(ciphertext, 'ERROR: decrypting')
print("text: {}".format(secret))
#
# exportKey() documentation says, "construct a new key carrying only the public info"
# testing that a new key isn't created, key should be the same
#
print("\n\n")
print("*** *** *** ***")
print("*** Key Gen Test ***")
print("*** *** *** ***")
print("*** NEW PUB KEY:")
print("{}\n".format(key.publickey().exportKey('PEM')))
print("*** NEW PUB KEY:")
print("{}\n".format(key.publickey().exportKey('PEM')))
print("*** PRIV KEY:")
print("{}\n".format(key.exportKey('PEM')))