Untitled

 avatar
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