示例#1
0
def generate_sparse_matrix(u_1, modified_secret_key, x_p):
    global global_random_state
    seed = mpz(time.time())
    global_random_state = gmpy2.random_state(seed)
    Theta_vector = [0 for _ in range(Theta)]
    for i in range(1, Theta):
        Theta_vector[i] = generate_random(kappa + 1, False, True, False)
    modified_secret_key[0] = True
    for i in range(1, Theta):
        modified_secret_key[i] = False
    count = theta - 1
    gmpy2.random_state()
    while count > 0:
        index = gmpy2.mpz_random(global_random_state, RAND_MAX) % Theta
        if not modified_secret_key[index]:
            modified_secret_key[index] = True
            count -= 1
    sum_ = zero
    temp = gmpy2.mul_2exp(one, kappa + 1)
    for i in range(1, Theta):
        if modified_secret_key[i]:
            sum_ = gmpy2.add(sum_, Theta_vector[i])
    sum_ %= temp
    u_1 = gmpy2.sub(x_p, sum_)
    if u_1 < zero:
        u_1 = gmpy2.add(temp, u_1)
    return mpz(seed), mpz(u_1)
    def distributed_Paillier_key_generation(self):
        self.generator = self.N + 1
        self.modulus_KN = self.secure_K * self.N
        self.modulus_KKN = self.secure_K * self.secure_K * self.N

        random_state = gmpy2.random_state(int(time.time() * 100000))
        self.beta = gmpy2.mpz_random(random_state, self.modulus_KN)
        random_state = gmpy2.random_state(int(time.time() * 100000))
        self.ri = gmpy2.mpz_random(random_state, self.modulus_KKN)
        self.ri_delta = self.delta * self.ri

        self.pq_sum = self.pi + self.qi
        self.send_pq_sum(self.pq_sum)
        pq_sum_list = self.receive_pq_sum_list()
        self.phi = self.N + 1 - pq_sum_list[0] - pq_sum_list[1] - pq_sum_list[2]

        self.thetai = self.delta * self.phi * self.beta + self.N * self.delta * self.ri
        self.send_thetai(self.thetai)
        thetai_list = self.receive_thetai_list()
        self.theta = thetai_list[0] + thetai_list[1] + thetai_list[2]

        self.fi = self.N * self.Ri_sharing(self.ri_delta,
                                           self.modulus_KKN) - self.theta

        # verification key
        self.r_vk = self.gen_coprime(self.N * self.N)
        self.vk = gmpy2.powmod(self.r_vk, 2, self.N * self.N)
        self.vki = gmpy2.powmod(self.vk, self.delta * self.fi, self.N * self.N)
示例#3
0
    def computeProducts(self):
        lf = DEFAULT_PRECISION
        # Compute LCA encrypted
        prod_LCA = Mult3Matrix(self.enc_L, self.enc_C, self.enc_A,
                               self.enc_bLC, self.enc_bLA, self.enc_bCA)
        self.enc_LCA = prod_LCA

        # Compute Gamma2 = (I-LC)BK = BK - LCBK = Gamma3*K
        enc_Gamma2 = np.dot(self.enc_Gamma3, self.enc_K)

        rGamma2 = [[
            gmpy2.mpz_urandomb(gmpy2.random_state(), self.l + lf + self.sigma)
            for i in range(self.n)
        ] for j in range(self.n)]

        self.rGamma2 = util_fpv.vfp(rGamma2, -lf)

        # Compute Gamma = (I-LC)(A+BK) = A + BK - LCA - LCBK, they have different precisions
        enc_Gamma = (
            np.dot(self.enc_A, 2**(2 * lf) * np.eye(self.n, dtype=object)) -
            prod_LCA +
            np.dot(enc_Gamma2, 2**lf * np.eye(self.n, dtype=object)))

        rGamma = [[
            gmpy2.mpz_urandomb(gmpy2.random_state(),
                               self.l + 2 * lf + self.sigma)
            for i in range(self.n)
        ] for j in range(self.n)]

        self.rGamma = util_fpv.vfp(rGamma, -2 * lf)

        return enc_Gamma + rGamma, enc_Gamma2 + rGamma2
示例#4
0
def elliptical_curve(n, process_id):
    # I decided not to finish the implementation of this algo as the learning curve for implementation was steep
    # and not worth it. I left this code here to show that I tried though.

    print("Pollard p-1 Part 2: The Lenstra Boogolo")
    print(process_id, "ECM Called")
    # vars to maintain the generation loop
    coor_x, coor_y = 0, 0
    # generate curve
    # TODO: Not sure if these random ranges are correct
    coor_x, coor_y = gmpy2.mpz_random(gmpy2.random_state(),
                                      n), gmpy2.mpz_random(
                                          gmpy2.random_state(), n)
    a = gmpy2.mpz_random(gmpy2.random_state(), n)
    # b = y^2 - ax - x^3
    b = gmpy2.f_mod((coor_y * coor_y - a * coor_x - coor_x * coor_x * coor_x),
                    n)
    # TODO: The wikipedia says there's checks you can do for the curve at this point by I don't want to put in the
    #  effort, however this note is here as a reminder in case things aren't working
    #  (while loop to check this stuff?)
    # is this the right check? (delta)

    # generate point
    curr_x = coor_x
    curr_y = coor_y

    # range to loop to
    current = 2
    work_limit = random.randint(10000000, 1000000000)

    # loop to do the monster math
    # TODO: loop to do the actual ECM stuff
    # return value since this is broken and un finished
    return 1
示例#5
0
def generate_x(x, sk):
    gmpy2.random_state()
    q, r = 0, 0
    q = generate_random(gamma - eta, False, False, False)
    r = generate_random(rho, True, False, False)
    x = gmpy2.mul(q, sk)
    x = gmpy2.add(r, x)
    return mpz(x)
示例#6
0
def share(x, N):
    # P1
    random_state = gmpy2.random_state(int(time.time() * 10000))
    x1 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10001))
    x2 = gmpy2.mpz_random(random_state, N)
    x3 = (x - x1 - x2) % N
    return [x1, x2, x3]
示例#7
0
def generate_q():
    q = gmp.mpz_urandomb(gmp.random_state(random.randint(0, 367263292)), N)
    while not gmp.is_prime(q):
        q = gmp.next_prime(q)
        if no_bits(q) != N:
            q = gmp.mpz_urandomb(
                gmp.random_state(random.randint(0, 367263292)), N)

    return q
示例#8
0
def mult(share_tuple, N):
    share_sum = (share_tuple[0] + share_tuple[1] + share_tuple[2]) % N
    share_sum_square = (share_sum * share_sum) % N
    random_state = gmpy2.random_state(int(time.time() * 10000))
    share1 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10001))
    share2 = gmpy2.mpz_random(random_state, N)
    share0 = (share_sum_square - share1 - share2) % N
    return [share0, share1, share2]
示例#9
0
def ranp(N):
    # P1
    random_state = gmpy2.random_state(int(time.time() * 10000))
    a11 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10001))
    a12 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10002))
    a13 = gmpy2.mpz_random(random_state, N)
    # P2
    random_state = gmpy2.random_state(int(time.time() * 10000))
    a21 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10001))
    a22 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10002))
    a23 = gmpy2.mpz_random(random_state, N)
    # P3
    random_state = gmpy2.random_state(int(time.time() * 10000))
    a31 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10001))
    a32 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10002))
    a33 = gmpy2.mpz_random(random_state, N)
    # compute sharing
    a1 = (a11 + a21 + a31) % N
    a2 = (a12 + a22 + a32) % N
    a3 = (a13 + a23 + a33) % N
    return (a1, a2, a3)
示例#10
0
def encrypt(pub, plain):
    one = gmpy2.mpz(1)
    state = gmpy2.random_state(int_time())
    r = gmpy2.mpz_random(state, pub.n)
    while gmpy2.gcd(r, pub.n) != one:
        state = gmpy2.random_state(int_time())
        r = gmpy2.mpz_random(state, pub.n)
    x = gmpy2.powmod(r, pub.n, pub.n_sq)
    cipher = gmpy2.f_mod(gmpy2.mul(gmpy2.powmod(pub.g, plain, pub.n_sq), x),
                         pub.n_sq)
    return cipher
示例#11
0
def PRandFld(modulus):
    # P1
    random_state = gmpy2.random_state(int(time.time() * 10000))
    a1 = gmpy2.mpz_random(random_state, int(modulus/3))
    # P2
    random_state = gmpy2.random_state(int(time.time() * 10000))
    a2 = gmpy2.mpz_random(random_state, int(modulus/3))
    # P3
    random_state = gmpy2.random_state(int(time.time() * 10000))
    a3 = gmpy2.mpz_random(random_state, int(modulus/3))
    return (a1, a2, a3)
示例#12
0
 def random(cls, allow_inf=True) -> 'FPVector':
     bias = (1 << (cls.exponent_size - 1)) - 1
     if allow_inf:
         sign = random.choice([-1, 1])
         mantissa = gmpy2.mpfr_random(gmpy2.random_state()) + 1
         exp = random.randint(1 - bias, bias + 1)
         return cls(mantissa * sign * (gmpy2.mpfr(2)**gmpy2.mpfr(exp)))
     else:
         sign = random.choice([-1, 1])
         mantissa = gmpy2.mpfr_random(gmpy2.random_state()) + 1
         exp = random.randint(1 - bias, bias)
         return cls(mantissa * sign * (gmpy2.mpfr(2)**gmpy2.mpfr(exp)))
示例#13
0
def generate_x_i(sk, length):
    tmp, q, r = 0, 0, 0
    q = gmpy2.mul_2exp(one, length - 1)
    gmpy2.random_state()
    for i in range(length - 32, 0 - 1, -32):
        tmp = gmpy2.get_random()
        tmp = gmpy2.mul_2exp(tmp, i)
        q = gmpy2.add(tmp, q)
    q = gmpy2.add(q, gmpy2.get_random())
    r = generate_random(rho, True, False, False)
    x_i = gmpy2.mul(q, sk)
    x_i = gmpy2.add(r, x_i)
    return x_i
示例#14
0
def new_prime(n_bits=1024):
    """
    is_prime: Miller-Rabin's test (default=25 times)
    """
    upper_bound = gmpy2.mpz(2**n_bits)

    state = gmpy2.random_state(int_time())
    rand_num = gmpy2.mpz_random(state, upper_bound)
    rand_num = gmpy2.bit_set(rand_num, n_bits - 1)
    while not gmpy2.is_prime(rand_num):
        state = gmpy2.random_state(int_time())
        rand_num = gmpy2.mpz_random(state, upper_bound)
        rand_num = gmpy2.bit_set(rand_num, n_bits - 1)
    return rand_num
示例#15
0
文件: laba5.py 项目: boggad/labs
def gen_keys():
    rs = gmpy2.random_state(hash(gmpy2.random_state()))
    P = gmpy2.mpz_urandomb(rs, mpz('128'))
    P = gmpy2.next_prime(P)
    Q = gmpy2.mpz_urandomb(rs, mpz('128'))
    Q = gmpy2.next_prime(Q)
    N = P*Q
    Fi = (P-1)*(Q-1)
    Pkey = gmpy2.mpz_random(rs, Fi)
    while not (gmpy2.gcd(Fi, Pkey) == 1):
        Pkey = gmpy2.mpz_random(rs, Fi)
    Skey = gmpy2.invert(Pkey, Fi)
    assert gmpy2.t_mod(Skey*Pkey,Fi) == 1
    return Pkey, Skey, N
示例#16
0
def getStrongPrime():
    bit_count = 512

    rand_state = gmp.random_state(getRandomSeed())
    rand_no = gmp.mpz_rrandomb(rand_state, bit_count)
    p1 = getNextPrime(rand_no)
    p2 = getNextPrime(p1)
    p3 = getNextPrime(p2)
    while (not StrongPrime(p1, p2, p3)):
        rand_state = gmp.random_state(getRandomSeed())
        rand_no = gmp.mpz_rrandomb(rand_state, bit_count)
        p1 = getNextPrime(rand_no)
        p2 = getNextPrime(p1)
        p3 = getNextPrime(p2)
    return p2
示例#17
0
def get_gpq():
    randnum = gmpy2.random_state(int(1000 * time.time()))

    Len_p = 1024
    Len_q = 256
    Len_t = 768

    p = 4

    q = gmpy2.mpz_urandomb(randnum, Len_q)
    q = gmpy2.next_prime(q)
    while not gmpy2.is_prime(p):
        t = gmpy2.mpz_urandomb(randnum, Len_t)
        p = t * q + 1

        g = 1
        while not g > 1:
            r = gmpy2.mpz_urandomb(randnum, Len_p)
            g = gmpy2.powmod(r, t, p)

    f = open('gpq.txt', 'w')
    print('g = ', g)
    print('p = ', p)
    print('q = ', q)
    f.write('g = ' + str(g) + '\n')
    f.write('p = ' + str(p) + '\n')
    f.write('q = ' + str(q))
    f.close()
示例#18
0
 def __init__(self):
     try:
         a = os.urandom(32)
         self.rs = gmpy2.random_state(int(a.encode('hex'), 16))
     except:
         print "Problem initializing PRNG"
         sys.exit()
    def recrypt_util(self, encrypted_z, ct, PKC):
        global global_random_state
        u_i = [mpz() for i in range(Theta)]
        u_i[0] = mpz(self.u_1)
        global_random_state = gmpy2.random_state(self.seed)

        for i in range(1, Theta):
            u_i[i] = generate_random(kappa + 1, False, True, False)

        z_i = []
        den = mpz(gmpy2.mul_2exp(1, kappa))
        Sum = binary_real(zero, one, n + e)

        for i in range(Theta):
            num = u_i[i] * ct
            z_i.append(binary_real(num, den, n + e))

        for i in range(Theta):
            for j in range(n + 1 + e):
                if j == 0:
                    if z_i[i].decimal == 1:
                        encrypted_z[i][j] = mpz(1)
                    else:
                        encrypted_z[i][j] = mpz(0)
                else:
                    if z_i[i].value[j - 1] is True:
                        encrypted_z[i][j] = mpz(1)
                    else:
                        encrypted_z[i][j] = mpz(0)
示例#20
0
    def _random_int(self, modulo):
        """Generate a random number modulo the supplied argument"""
        r_seed = int(os.urandom(32).encode('hex'), 16)
        r_state = gmp.random_state(r_seed)
        raw = gmp.mpz_urandomb(r_state, self.RANDOM_BITS)

        return gmp.t_mod(raw, modulo)
 def _generate_random_number(self):
     """
     :return: random number  
     """
     rstate = random_state()
     r = randint(40, 100)
     return f_mod(mpz_random(rstate, 2 << r).bit_set(0).bit_set(r), self.N)
示例#22
0
def generate_random(bit_size, include_negative_range, seeded, full_range):
    global global_random_state
    if not seeded or global_random_state is None:
        global_random_state = gmpy2.random_state()
    x = zero
    if full_range:
        x = gmpy2.mul_2exp(one, bit_size - 1)
    tmp = 0
    if bit_size < 33:
        tmp = gmpy2.mpz_random(global_random_state, RAND_MAX)
        temp = (1 << bit_size)
        x = gmpy2.f_mod(tmp, temp)
        if include_negative_range:
            tmp = gmpy2.mul_2exp(one, bit_size - 1)
            x = gmpy2.sub(x, tmp)
        return x
    for i in range(bit_size - 32, 0 - 1, -32):
        tmp = gmpy2.mpz_random(global_random_state, RAND_MAX)
        tmp = gmpy2.mul_2exp(tmp, i)
        x = gmpy2.add(x, tmp)
    x = gmpy2.add(x, gmpy2.mpz_random(global_random_state, RAND_MAX))
    if include_negative_range:
        tmp = gmpy2.mul_2exp(one, bit_size - 1)
        x = gmpy2.sub(x, tmp)
    return mpz(x)
示例#23
0
    def _random_int(self, modulo):
        """Generate a random number modulo the supplied argument"""
        r_seed = int(os.urandom(32).encode('hex'), 16)
        r_state = gmp.random_state(r_seed)
        raw = gmp.mpz_urandomb(r_state, self.RANDOM_BITS)

        return gmp.t_mod(raw, modulo)
示例#24
0
def mult_share(share_tuple_1, share_tuple_2, N):
    if not isinstance(share_tuple_1, list):
        share_1 = share_tuple_1
    else:
        share_1 = (share_tuple_1[0] + share_tuple_1[1] + share_tuple_1[2]) % N
    if not isinstance(share_tuple_2, list):
        share_2 = share_tuple_2
    else:
        share_2 = (share_tuple_2[0] + share_tuple_2[1] + share_tuple_2[2]) % N
    share_mult = (share_1 * share_2) % N
    random_state = gmpy2.random_state(int(time.time() * 10000))
    share1 = gmpy2.mpz_random(random_state, N)
    random_state = gmpy2.random_state(int(time.time() * 10001))
    share2 = gmpy2.mpz_random(random_state, N)
    share0 = (share_mult - share1 - share2) % N
    return [share0, share1, share2]
示例#25
0
文件: main.py 项目: AnhPC03/RPG
def algorithmRabin_Miller(n, s):
	random_state = gmpy2.random_state(int(round(time() * 1000)))
	for j in range (1, s+1):
		a = gmpy2.mpz_random(random_state, n)
		if algorithmWitness(a, n) == 1:
			return 1
	return 0
示例#26
0
 def DGK_s1(self, b):
     l = self.l
     nc = self.nc
     self.delta_A = [0] * nc
     c_all = [[0] * l] * nc
     for k in range(0, nc):
         beta = b[k]
         alpha = self.alpha[k]
         DGK_pubkey = self.DGK_pubkey
         delta_A = np.random.randint(0, 2)
         self.delta_A[k] = delta_A
         prod = [0] * l
         c = [DGK_pubkey.raw_encrypt(0)] * l
         # index 0 is the MSB
         for i in range(0, l):
             if (int(alpha[i]) == 0):
                 prod[i] = beta[i]
             else:
                 prod[i] = DGK.diff_encrypted(
                     DGK_pubkey.raw_encrypt(1, self.coinsDGK.pop()),
                     beta[i], DGK_pubkey)
             if (int(delta_A) == int(alpha[i])):
                 if i == 0:
                     c[i] = DGK_pubkey.raw_encrypt(0, self.coinsDGK.pop())
                 else:
                     for iter in range(0, i):
                         c[i] = DGK.add_encrypted(c[i], prod[iter],
                                                  DGK_pubkey)
                 if (int(delta_A) == 0):
                     diff = DGK.diff_encrypted(
                         DGK_pubkey.raw_encrypt(1, self.coinsDGK.pop()),
                         beta[i], DGK_pubkey)
                     c[i] = DGK.add_encrypted(c[i], diff, DGK_pubkey)
                 else:
                     c[i] = DGK.add_encrypted(c[i], beta[i], DGK_pubkey)
         for i in range(0, l):
             if (int(delta_A) == int(alpha[i])):
                 r = gmpy2.mpz_urandomb(gmpy2.random_state(),
                                        self.sigma + self.sigma)
                 c[i] = DGK.mul_sc_encrypted(c[i], r, DGK_pubkey)
             else:
                 c[i] = DGK_pubkey.raw_encrypt(
                     gmpy2.mpz_urandomb(gmpy2.random_state(),
                                        self.sigma + self.sigma),
                     self.coinsDGK.pop())
         c_all[k] = np.random.permutation(c)
     return c_all
示例#27
0
文件: crypto.py 项目: hzshang/ctf
def random_prime(size):
    seed = int.from_bytes(os.urandom(16), byteorder='little')
    state = gmpy2.random_state(seed)
    rnd = gmpy2.mpz_rrandomb(state, size)
    while True:
        prime = gmpy2.next_prime(rnd)
        if prime.bit_length() == size:
            return prime
示例#28
0
def generate_random_factored_numbers_with_multiplicative_group_mp(
        n, seed, num):
    global random_state
    random_state = gmpy2.random_state(seed)
    for i in range(num):
        r = process_r_with_multiplicative_group(n)
        complete_multiplicative_group_hint(r[1], r[2])
        output.put(r)
示例#29
0
文件: laba4.py 项目: boggad/labs
def gen_keys():
    rs = gmpy2.random_state(hash(gmpy2.random_state()))
    P = gmpy2.mpz_urandomb(rs, mpz('256'))
    P = gmpy2.next_prime(P)
    Q = gmpy2.mpz_urandomb(rs, mpz('256'))
    Q = gmpy2.next_prime(Q)
    N = P*Q
    Fi = (P-1)*(Q-1)
    Pkey = gmpy2.mpz_random(rs, Fi)
    while not (gmpy2.gcd(Fi, Pkey) == 1):
        Pkey = gmpy2.mpz_random(rs, Fi)
    Skey = gmpy2.invert(Pkey, Fi)
    print('Публичный ключ: ')
    print(Pkey)
    print('Приватный ключ:')
    print(Skey)
    print('N:')
    print(N)
示例#30
0
def generate_keys(q, p, g):
    # generates private key x and public key y
    x = gmp.mpz_random(gmp.random_state(random.randint(0, 367263292)), q)
    while x == 0:
        x = gmp.mpz_random(random.randint(0, 367263292), q)

    y = gmp.powmod(g, x, p)

    return x, y
示例#31
0
文件: Teste.py 项目: sergillam/Fucapi
    def primoRelativo(self, phi):
        x = 0
        mdc = 0
        seed = gmpy2.random_state(int(datetime.now().microsecond))
        while mdc != 1:

            x = gmpy2.mpz_random(seed,phi ) + 1
            mdc = self.euclides(x, phi)
        return x
示例#32
0
def test_pack_unpack(repeat):
    """Test gmpy2.pack and gmpy2.unpack."""
    r = gmpy2.random_state(42)
    for counter in range(repeat):
        for t in (10, 1000, 2000, 10000, 100000):
            v = gmpy2.mpz_rrandomb(r, t)
            for b in range(1, max(1001,t)):
                temp = gmpy2.unpack(v, b)
                u = gmpy2.pack(temp, b)
                assert u == v
 def pick_pq(self):
     pq = mpz(2)
     random_state = gmpy2.random_state(int(time.time()*100000))
     if self.PartyIndex == 1:
         while gmpy2.f_mod(pq, 4) != 3 or (pq - pow(2, self.KeyLength - 1) <= 0):
             pq = gmpy2.mpz_random(random_state, pow(2, self.KeyLength))
     else:
         while gmpy2.f_mod(pq, 4) != 0 or (pq - pow(2, self.KeyLength - 1) <= 0):
             pq = gmpy2.mpz_random(random_state, pow(2, self.KeyLength))
     return pq
示例#34
0
def keygen():
    rs = gmpy2.random_state(int(time.time()))
    p = get_prime(rs)
    q = get_prime(rs)
    n = p * q
    e = 0x10001
    pk = [n, e]
    d = gmpy2.invert(e, (p - 1) * (q - 1))
    sk = d
    return pk, sk
示例#35
0
def aby_prng(Len):
    """Generates a random mpz with bitlength Len."""
    global global_random_state
    if global_random_state is None:
        global_random_state = gmpy2.random_state(int(time.time()))
    result = mpz(0)
    for i in range(Len):
        if gmpy2.mpz_random(global_random_state, 2) == 1:
            result += gmpy2.exp2(i)
    return mpz(result)
示例#36
0
文件: qr_c0d3.py 项目: grocid/CTF
def keygen(size):
    rs = gmpy2.random_state(int(time.time()))
    p = gmpy2.next_prime(gmpy2.mpz_urandomb(rs, size))
    while p % 4 != 3:
        p = gmpy2.next_prime(p)
    q = gmpy2.next_prime(p)
    while q % 4 != 3:
        q = gmpy2.next_prime(q)
    n = p*q
    x = n-1
    return (x, n), (p, q)
示例#37
0
文件: qr_c0d3.py 项目: grocid/CTF
def break_keygen(n):
    
    start_val = 1475784906
    while True:
        rs = gmpy2.random_state(start_val)
        p = gmpy2.next_prime(gmpy2.mpz_urandomb(rs, 2048))
        while p % 4 != 3:
            p = gmpy2.next_prime(p)
    
        if n % p == 0:
            print p
            break
        start_val -= 1
示例#38
0
def test(repeat=1):
    """Test gmpy2.pack and gmpy2.unpack."""
    r = gmpy2.random_state(42)
    try:
        for counter in range(repeat):
            for t in (10, 30, 60, 500, 1000, 2000, 10000, 100000):
                v = gmpy2.mpz_rrandomb(r, t)
                for b in range(1, max(1001,t)):
                    temp = gmpy2.unpack(v, b)
                    u = gmpy2.pack(temp, b)
                    if u != v:
                        raise ValueError
        return True
    except ValueError:
        return False
示例#39
0
'''
Created on Feb 25, 2014

@author: NASSAR
'''
import random
import sys
from gmpy2 import mpz, powmod, invert, is_prime, random_state, mpz_urandomb
import time


rand=random_state(random.randrange(sys.maxsize))

def timing(f, c=0):
    def wrap(*args):
        time1 = time.time()
        ret = f(*args)
        time2 = time.time()
        clocktime=time2-time1
        print ('%s function took %0.3f ms' % (f.__name__, (clocktime)*1000.0))
        if c==0:
            return ret
        else: 
            return ret, clocktime 
    return wrap



def generate_prime(bits):    
    """Will generate an integer of b bits that is prime 
    using the gmpy2 library  """    
示例#40
0
def get_random_int(n):
    i = random.randint(0,2**30) # better random nunber generator
    return gmpy2.mpz_random(gmpy2.random_state(i), n)
示例#41
0
def random():
    seed = int(os.urandom(BYTES).encode('hex'), 16)
    return gmpy2.mpfr_random(gmpy2.random_state(seed))
示例#42
0
import time

def timing(f, c=0):
    def wrap(*args):
        time1 = time.time()
        ret = f(*args)
        time2 = time.time()
        clocktime=time2-time1
        print '%s function took %0.3f ms' % (f.func_name, (clocktime)*1000.0)
        if c==0:
            return ret
        else: 
            return ret, clocktime 
    return wrap

rand=random_state(random.randrange(sys.maxint))

def generate_prime(bits):
    """Will generate an integer of b bits that is prime 
    using the gmpy2 library  """    
    while True:
        possible =  mpz(2)**(bits-1)   + mpz_urandomb(rand, (bits-1) ) 
        if is_prime(possible):
            return possible

if __name__ == '__main__':
    #testing
    p=generate_prime(1024)
    print p
    print p.bit_length()
    t_generate_prime=timing(generate_prime,1)
示例#43
0
文件: Teste.py 项目: sergillam/Fucapi
 def gerarPrimo(self, limInf, limSup):
     seed = gmpy2.random_state(int(datetime.now().microsecond))
     primo = gmpy2.mpz_random(seed,(limSup - limInf + 1)) + limInf
     while not gmpy2.is_prime(primo):
         primo = gmpy2.mpz_random(seed,(limSup - limInf + 1)) + limInf
     return primo
示例#44
0
#!/usr/bin/env python
'''
Created on 18 Jul 2014

@author: henryk
'''

import gmpy2,time
rstate = gmpy2.random_state()

def get_prime(length):
    a = gmpy2.mpz_random(rstate,2<<length).bit_set(0).bit_set(length)
    while not gmpy2.is_prime(a):
        a = a+2
    return a

def generate_rsa(length):
    p = get_prime(length/2)
    q = get_prime(length - length/2)
    n = p * q
    phi_n = (p-1)*(q-1)
    e = 65537
    d = gmpy2.powmod(e, -1, phi_n)
    
    return e,d,n

if __name__ == '__main__':
    for i in range(5,13):
        start = time.time()
        e,d,n = generate_rsa(2<<i)
        stop = time.time()
示例#45
0
文件: rsa.py 项目: whopper66/rsapy
import gmpy2
from gmpy2 import mpz
import time
import math

mr_accuracy = 100
random_state = gmpy2.random_state(int(time.time()))
rand_min = 3600
rand_max = pow(2, 82)

def RandomInteger(Min = rand_min, Max = rand_max):
	return Min + gmpy2.mpz_random(random_state, Max - Min + 1)

def RandomPrimeInteger(Min = rand_min, Max = rand_max):
	out = RandomInteger(Min, Max);
	while not gmpy2.is_prime(out, mr_accuracy):
		out = RandomInteger(Min, Max)
	return out