Untitled
unknown
python
7 months ago
1.4 kB
4
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