Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
 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
Beispiel #7
0
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
Beispiel #8
0
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))  # Записываем "закрытый ключ" в другой файл
Beispiel #9
0

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)
Beispiel #10
0
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
Beispiel #11
0
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)
Beispiel #13
0
def get_safe_prime(prime_number):
    N = 2 * prime_number + 1
    if sympy.isprime(N):
        return N, sympy.primitive_root(N)