Beispiel #1
0
    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)
Beispiel #2
0
  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)
Beispiel #3
0
    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)