Untitled
unknown
python
18 days ago
1.4 kB
3
Indexable
# crypto_utils.py from cryptography.hazmat.primitives.asymmetric import x25519 from cryptography.hazmat.primitives.kdf.hkdf import HKDF from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes import os, base64 def generate_key_pair(): private_key = x25519.X25519PrivateKey.generate() public_key = private_key.public_key() return private_key, public_key def get_shared_key(private_key, peer_public_key_bytes): peer_public = x25519.X25519PublicKey.from_public_bytes(peer_public_key_bytes) shared_secret = private_key.exchange(peer_public) derived_key = HKDF( algorithm=hashes.SHA256(), length=32, salt=None, info=b'STRIKE', ).derive(shared_secret) return derived_key def encrypt_message(key, plaintext): iv = os.urandom(16) cipher = Cipher(algorithms.AES(key), modes.CBC(iv)) encryptor = cipher.encryptor() padded = plaintext.encode().ljust(32, b' ') # simple pad ct = encryptor.update(padded) + encryptor.finalize() return iv + ct # prepend IV def decrypt_message(key, payload): iv = payload[:16] ct = payload[16:] cipher = Cipher(algorithms.AES(key), modes.CBC(iv)) decryptor = cipher.decryptor() padded = decryptor.update(ct) + decryptor.finalize() return padded.rstrip(b' ').decode()
Editor is loading...
Leave a Comment