def attack_elgamal(_primitive_root, _public_key, _prime, header, message): l = discrete_log(prime=_prime, primitive_root=_primitive_root, public_key=_public_key) decrypted_message = decrypt(message, header, l, _prime) return decrypted_message pass
def test_attack_elgamal(self): #Alice p = 1009 b = 101 c = 482 l = discrete_log(prime=p, primitive_root=b, public_key=c) #Bob x = 559 r = 291 c_to_the_r = fast_exponentiation(c, r, p) encrypted_message = x * c_to_the_r % p header = fast_exponentiation(b, r, p) decrypted_message = decrypt(encrypted_message, header, l, p) print attack_elgamal(_primitive_root=b, _public_key=c, _prime=p, message=encrypted_message, header=header)