| 123456789101112131415161718192021222324252627282930313233343536373839 |
- from codecs import encode
- import rsa
- from create_keys import get_keys, get_private_key, get_symmetric_key
- from cryptography.fernet import Fernet
- from cryptography.hazmat.backends import default_backend
- from cryptography.hazmat.primitives import hashes, serialization
- from cryptography.hazmat.primitives.asymmetric import padding
- # encrypt blockstring with name from contract
- def encrypt_data(contract, block_string):
- # create symmetric key for transaction and retrieve pubkey from contract
- symmetric_key = get_symmetric_key(contract)
- pubkey = get_keys(contract)
- # create chiper and encrypt data using symmetric key
- chiper = Fernet(symmetric_key)
- data = str(chiper.encrypt(block_string))[2:-1]
- # encrypt semmetric key with pubkey and cast to string
- encrypted_key = str(rsa.encrypt(symmetric_key,pubkey))[2:-1]
- return data, encrypted_key
- # decrypt t form contract name
- def decrypt_data(name, t):
- # retrieve private key
- private_key = get_private_key(name)
- # decript symmetric key
- en_key = encode(t.encrypted_key.encode().decode('unicode_escape'),"raw_unicode_escape")
- key = rsa.decrypt(en_key, private_key)
- # decrypt data with decrypted semmetric key
- cipher = Fernet(key)
- decrypted_data = cipher.decrypt(bytes(t.data, 'utf-8'))
- # decode and retrun data
- return decrypted_data.decode('utf8').replace("'", '"')
|