def key_generate(k): a = 1 << (k - 1) b = 1 << k p = make_prime(a, b) g = sympy.primitive_root(p) x = random.randint(0, p - 1) y = calc_mod(g, x, p) return (p, g, y), x
def GenKey(k): prime_min = 1 << (k - 1) prime_max = 1 << k p = calc.GenPrime(prime_min, prime_max) g = sympy.primitive_root(p) x = random.randint(0, p - 1) h = calc.mod(g, x, p) return (p, g, h), x
def keygen(self, k): c = 1 _p = 1 _p = self.__get_prime(k) self.p = _p self.g = sympy.primitive_root(self.p) self.x = random.randint(0, self.p - 1) self.y = pow(self.g, self.x, self.p) return (self.p, self.g, self.y), self.x
def keygen(self, k): c = 1 _p = 1 while (1): q = self.__get_prime(k) _p = 2 * q * c + 1 if (self.__is_prime(_p)): break self.p = _p self.g = sympy.primitive_root(self.p) self.x = random.randint(0, self.p - 1) self.y = pow(self.g, self.x, self.p) return (self.p, self.g, self.y), self.x
def __init__(self, socet, ip_port): super(client, self).__init__() self.random_prime = sympy.randprime(0, 888888888888888888888) self.primitive_root_of_random_prime = sympy.primitive_root( self.random_prime) self.secret_key = random.randint(1, 1000) self.key = None self.socet = socet self.ip = ip_port[0] self.port = ip_port[1] self.shared_sec = None self.time_con = None self.cl_encryptor = None self.sha_of_shared = None
def keygen(self, k): c = 1 _p = 1 while (1): _q = self.__get_prime(k) _p = 2 * _q * c + 1 if (self.__is_prime(_p)): self.q = _q break self.p = _p self.g = sympy.primitive_root(self.p) _G = pow(self.g, 2, self.p) # \alpha = g^{\frac{p-1}{q}} = g^{\frac{2q+1-1}{q}} = g^2 self.G = pow(_G, random.randint(0, self.q - 1), self.q) self.x = random.randint(0, self.q - 1) self.y = pow(self.g, self.x, self.q) return (self.G, self.q, self.g), self.x
def getSafePrime(): global q, N, g, k, nL N = 0 # reset N value debugQ = 1934612908853690825129813706743369339572623046436438804635475902776127289753690923461022278840020158254912758317724313673982950952171118802373834636546381 debugQ2 = 1934612908853690825129813706743369339572623046436438804635475902776127289753690923461022278840020158254912758317724313673982950952171118802373834636546381 print("Finding a safe prime, this usually takes under 30 seconds.") while not (isprime(N)): if __debug__: q = sympy.randprime(lower, upper) #DEBUG OFF else: q = debugQ #DEBUG ON N = 2*q + 1 print("Found :",q) g = primitive_root(N) k = H([N, g]) nL = getBitLength(N) return N
def generate_key(open_keys_file, close_key_file): p = randprime(2**19, (2**20) - 1) # Генерируем прострое 16-битное число g = primitive_root(p) # Находим первообразную print('Параметры: \np =', p, '\ng =', g) close_key = randprime(2, p - 1) # Генерируем секретный "закрытый ключ" y = (g**close_key) % p # Вычисляем "открытый ключ" open_keys = [p, g, y] # упаковывем от открытый ключ и параметры в список print( 'Открытый ключ y =', y, '\nЗакрытый ключ x =', close_key, ) with codecs.open(open_keys_file, 'w', encoding='utf8') as file: # Открываем файл на чтение for key in open_keys: file.write(str(key) + '\n', ) # Построчно записываем открытый ключ и параметры with codecs.open(close_key_file, 'w', encoding='utf8') as file: file.write(str(close_key)) # Записываем "закрытый ключ" в другой файл
def multiplicativeInverse(n, q): return egcd(n, q)[0] % q def egcd(a, b): s0, s1, t0, t1 = 1, 0, 0, 1 while b > 0: q, r = divmod(a, b) a, b = b, r s0, s1, t0, t1 = s1, s0 - q * s1, t1, t0 - q * t1 return s0, t0, a m = 11 p = randprime(100, 1000) g = primitive_root(p) x = random.randint(1, p - 1) y = pow(g, x, p) # encr k = random.randint(1, p - 1) a = pow(g, k, p) b = ((y**k) * m) % p #decr dm = b * a**(p - 1 - x) % p print(m, a, b, dm)
def key_generate(p): g = sym.primitive_root(p) ## 原始根 今度自分で実装 x = random.randint(0, p - 1) y = pow(g, x, p) return (p, g, y), x
def find_root(p, q): """ Поиск g из открытого ключа. Быстрый аналог _nthroot_mod1 из sympy для случая s=1, all_roots=False """ return (pow(primitive_root(p), (p - 1) // q, p)) % p
def __init__(self, generator=None, prime=None): self.generator = generator if generator is not None else sympy.randprime( 0, int("1" * 64, 2)) self.prime = prime if prime is not None else sympy.primitive_root( self.generator) self.private_key = random.randint(1, self.generator)
def get_safe_prime(prime_number): N = 2 * prime_number + 1 if sympy.isprime(N): return N, sympy.primitive_root(N)