import os import pickle import string from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives.ciphers.aead import AESGCM from cryptography.hazmat.primitives.kdf.hkdf import HKDF CURVE = ec.SECP256R1() def GENERATE_DH(): return ec.generate_private_key(CURVE) class MessengerServer: def __init__(self, server_signing_key, server_decryption_key): self.server_signing_key = server_signing_key self.server_decryption_key = server_decryption_key def decryptReport(self, ct): raise Exception("not implemented!") return def signCert(self, cert): raise Exception("not implemented!") return class MessengerClient: def __init__(self, name, server_signing_pk, server_encryption_pk): self.name = name self.server_signing_pk = server_signing_pk self.server_encryption_pk = server_encryption_pk self.conns = {} self.certs = {} self.dh = GENERATE_DH() self.certificate = None def generateCertificate(self): self.certificate = pickle.dumps((self.name, self.dh.public_key().public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint))) return self.certificate def receiveCertificate(self, certificate, signature): raise Exception("not implemented!") return def sendMessage(self, name, message): raise Exception("not implemented!") return def receiveMessage(self, name, header, ciphertext): raise Exception("not implemented!") return def report(self, name, message): raise Exception("not implemented!") return