def test_diffie_hellman_exchange(self): """ Simulates a diffie-hellman key exchange """ # Alice and Bob agree for a secure generator and prime base, modulus = Math.generate_generator_and_prime(128) alice = DiffieHellman(base, modulus) bob = DiffieHellman(base, modulus) # Alice calculates her exponentiation alice_result = alice.get_result() # Bob calculates his exponentiation bob_result = bob.get_result() # so, they exchange the result and calculates the shared secret secret_alice = alice.calculate_shared_secret(bob_result) secret_bob = bob.calculate_shared_secret(alice_result) # And if right, both secrets must be equal. self.assertEqual(secret_alice, secret_bob)
def __establish_session(self, con): generator, prime = self.__receive_generator_and_prime(con) diffie_hellman = DiffieHellman(generator, prime) result = diffie_hellman.get_result() result_from_client = int(con.recv(1024)) con.send(bytes(str(result), 'utf8')) self.__key = diffie_hellman.calculate_shared_secret(result_from_client) self.__session_estabilished = True print("Session key: " + str(self.__key)) self.__key = self.__key.to_bytes(32, byteorder = "big") self.__aes = pyaes.AESModeOfOperationCTR(self.__key)
def establish_session(self): generator, prime = Math.generate_generator_and_prime(256) self.__tcp_client.send(bytes(str(generator), 'utf8')) self.__tcp_client.send(bytes(str(prime), 'utf8')) diffie_hellman = DiffieHellman(generator, prime) result = diffie_hellman.get_result() self.__tcp_client.send(bytes(str(result), 'utf8')) result_from_server = int(self.__tcp_client.recv(1024)) self.__key = diffie_hellman.calculate_shared_secret(result_from_server) print("Session key: " + str(self.__key)) self.__key = self.__key.to_bytes(32, byteorder="big") self.__aes = pyaes.AESModeOfOperationCTR(self.__key)