def generate_keys(): '''Alice builds a dicsrete-log public-key cipher system. ''' cyclic_group = large_random_prime() generator = random_near_primitive_root(cyclic_group) private_key = random.randint(1, cyclic_group - 1) public_key = fast_exponentiation(generator, private_key, cyclic_group) return (generator, public_key, cyclic_group), private_key
def encrypt(message, b, c, p): r = large_random_prime() c_r = fast_exponentiation(c, r, p) encrypted_message = message * c_r % p header = fast_exponentiation(b, r, p) return encrypted_message, header
def large_random_p_and_q(): yield large_random_prime() yield large_random_prime()