encyption.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from codecs import encode
  2. import rsa
  3. from create_keys import get_keys, get_private_key, get_symmetric_key
  4. from cryptography.fernet import Fernet
  5. from cryptography.hazmat.backends import default_backend
  6. from cryptography.hazmat.primitives import hashes, serialization
  7. from cryptography.hazmat.primitives.asymmetric import padding
  8. # encrypt blockstring with name from contract
  9. def encrypt_data(contract, block_string):
  10. # create symmetric key for transaction and retrieve pubkey from contract
  11. symmetric_key = get_symmetric_key(contract)
  12. pubkey = get_keys(contract)
  13. # create chiper and encrypt data using symmetric key
  14. chiper = Fernet(symmetric_key)
  15. data = str(chiper.encrypt(block_string))[2:-1]
  16. # encrypt semmetric key with pubkey and cast to string
  17. encrypted_key = str(rsa.encrypt(symmetric_key,pubkey))[2:-1]
  18. return data, encrypted_key
  19. # decrypt t form contract name
  20. def decrypt_data(name, t):
  21. # retrieve private key
  22. private_key = get_private_key(name)
  23. # decript symmetric key
  24. en_key = encode(t.encrypted_key.encode().decode('unicode_escape'),"raw_unicode_escape")
  25. key = rsa.decrypt(en_key, private_key)
  26. # decrypt data with decrypted semmetric key
  27. cipher = Fernet(key)
  28. decrypted_data = cipher.decrypt(bytes(t.data, 'utf-8'))
  29. # decode and retrun data
  30. return decrypted_data.decode('utf8').replace("'", '"')