From charlesreid1

<![CDATA[from Crypto.PublicKey import RSA from Crypto.Signature import pkcs1_15 from Crypto.Hash import SHA256 from Crypto.Cipher import PKCS1_OAEP


def generate_keys(bits=2048):

   key_pair = RSA.generate(bits)
   return key_pair.export_key(), key_pair.publickey().export_key()


def encrypt(plaintext, public_key_pem):

   recipient_key = RSA.import_key(public_key_pem)
   cipher_rsa = PKCS1_OAEP.new(recipient_key)
   return cipher_rsa.encrypt(plaintext.encode('utf-8'))


def decrypt(ciphertext, private_key_pem):

   private_key = RSA.import_key(private_key_pem)
   cipher_rsa = PKCS1_OAEP.new(private_key)
   return cipher_rsa.decrypt(ciphertext).decode('utf-8')


def sign(message, private_key_pem):

   private_key = RSA.import_key(private_key_pem)
   h = SHA256.new(message.encode('utf-8'))
   return pkcs1_15.new(private_key).sign(h)


def verify(message, signature, public_key_pem):

   public_key = RSA.import_key(public_key_pem)
   h = SHA256.new(message.encode('utf-8'))
   try:
       pkcs1_15.new(public_key).verify(h, signature)
       return True
   except (ValueError, TypeError):
       return False


if __name__ == '__main__':

   private_key, public_key = generate_keys()
   text = "This is a test"
   ciphertext = encrypt(text, public_key)
   plaintext = decrypt(ciphertext, private_key)
   print("Plaintext was '%s'" % plaintext)
   signature = sign(text, private_key)
   valid = verify(text, signature, public_key)
   print("Signature valid: %s" % valid)
   tampered = verify("Tampered message", signature, public_key)
   print("Tampered signature valid: %s" % tampered)

https://www.reddit.com/r/cryptography/comments/4yu7mh/code_review_of_aes_implementation_in_python/



Red Links