def compute_wheel(limit): primes = seive(limit) circum = reduce(lambda x,y: x*y, primes, 1) spokes = [i for i in range(1, circum) if gcd(i, circum) == 1] diffs = [spokes[i+1] - s for i,s in enumerate(spokes[:-1])] diffs.insert(0, circum - spokes[-1] + 1) return primes, diffs
def attack2(): prod = reduce(lambda x, y: x*y, keys, 1) factorise = {} for key in keys: div = praxis.gcd(key, (prod % (key*key)) / key) if div != 1: factorise[key] = (div, key / div) return factorise
def attack1(): factorise = {} for i in range(len(keys)): for j in range(i): div = praxis.gcd(keys[i], keys[j]) if div != 1: factorise[keys[i]] = (div, keys[i] / div) factorise[keys[j]] = (div, keys[j] / div) return factorise
def encrypt(message, key_a, key_b): assert(gcd(key_a, 26) == 1) cipher = "" for m in message: if m.isalpha(): x = ord(m.upper()) - ord("A") y = (key_a * x + key_b) % 26 cipher += chr(y + ord("A")) else: cipher += m return cipher
def reduce_terms(self): g = gcd(self.num, self.den) self.num /= g self.den /= g