示例#1
0
def make_chain(curve, k_vector):
    """
    Description:
    
        Finds an elliptic curve chain
    
    Input:
    
        curve - the first curve (q,t,r,k,D) in the chain
        k_vector - list of embedding degrees
    
    Output:
    
        curves - elliptic curve chain
    
    """
    curves = [curve]
    r = curve[0]
    for i in range(0, len(k_vector)):
        k = k_vector[i]
        r, k, D = cp.gen_params_from_r(r, k)
        curve2 = cp.run(r, k, D)
        j = 0
        while i < len(k_vector) - 1 and (curve2[0] -
                                         1) % k_vector[i + 1] != 0 and j < 100:
            curve2 = cp.run(r, k, D)
            j += 1
        curves.append(curve2)
        r = curve2[0]
    return curves
示例#2
0
def make_chain(curve, k_vector):
    """
    Description:
    
        Finds an elliptic curve chain
    
    Input:
    
        curve - the first curve (q,t,r,k,D) in the chain
        k_vector - list of embedding degrees
    
    Output:
    
        curves - elliptic curve chain
    
    """
    curves = [curve]
    r = curve[0]
    for i in range(0, len(k_vector)):
        k = k_vector[i]
        r,k,D = cp.gen_params_from_r(r,k)
        curve2 = cp.run(r,k,D)
        j = 0
        while i < len(k_vector) - 1 and (curve2[0] - 1) % k_vector[i+1] != 0 and j < 100:
             curve2 = cp.run(r,k,D)
             j+=1
        curves.append(curve2)
        r = curve2[0]
    return curves
def test_cm(num_tests,num_bits, debug=False): 
    # runs CM method num_tests times;
    # each test uses a random output from the CP method with a num_bits bit prime
    print('testing CM...')
    fail = 0
    for i in range(0, num_tests):
        try:
            k = randint(5,50)
            r,k,D = cp.gen_params_from_bits(num_bits,k)
            q,t,r,k,D = cp.run(r,k,D)
            E = cm.make_curve(q,t,r,k,D)
            assert E
            assert cm.test_curve(q,t,r,k,D,E)
        except AssertionError as e:
            fail += 1
    if fail == 0:
        print('test passed')
        return True
    else:
        print("failed %.2f" %(100*fail/num_tests) + "% of tests!")
        return False
def test_cm(num_tests, num_bits, debug=False):
    # runs CM method num_tests times;
    # each test uses a random output from the CP method with a num_bits bit prime
    print('testing CM...')
    fail = 0
    for i in range(0, num_tests):
        try:
            k = randint(5, 50)
            r, k, D = cp.gen_params_from_bits(num_bits, k)
            q, t, r, k, D = cp.run(r, k, D)
            E = cm.make_curve(q, t, r, k, D)
            assert E
            assert cm.test_curve(q, t, r, k, D, E)
        except AssertionError as e:
            fail += 1
    if fail == 0:
        print('test passed')
        return True
    else:
        print("failed %.2f" % (100 * fail / num_tests) + "% of tests!")
        return False
def test_cp2(num_tests,num_bits,k, debug=False):
    # runs CP method num_tests times;
    # uses the same embedding degree k for every test
    print('testing CP...')
    fail = 0
    k2 = k
    for i in range(0, num_tests):
        if not k2:
            k = randint(5,50)
        try:
            r,k,D = cp.gen_params_from_bits(num_bits, k)
            assert cp.test_promise(r,k,D)
            q,t,r,k,D = cp.run(r,k,D)
            assert utils.is_suitable_curve(q,t,r,k,D,num_bits)
        except AssertionError as e:
            fail += 1
    if fail == 0:
        print('test passed')
        return True
    else:
        print("failed %.2f" %(100*fail/num_tests) + "% of tests!")
        return False
示例#6
0
def call_cp(n, k):
    r, k, D = cp.gen_params_from_bits(n, k)
    start = time.time()
    cp.run(r, k, D)
    return time.time() - start
示例#7
0
def call_cp(n,k):
    r,k,D = cp.gen_params_from_bits(n,k)
    start = time.time();
    cp.run(r,k,D)
    return time.time()-start
示例#8
0
import ecfactory.cocks_pinch as cp
from ecfactory.utils import print_curve

# Example 1 (using a known value of r)
k = 5  # embedding degree
r = 1743941  # size of prime order subgroup
r, k, D = cp.gen_params_from_r(r, k)  # find a valid D
q, t, r, k, D = cp.run(r, k, D)  # use CP method to solve for q and t
print_curve(q, t, r, k, D)

# Example 2 (algorithm generates r)
k = 7  # embedding degree
num_bits = 100  # number of bits in size of prime order subgroup
r, k, D = cp.gen_params_from_bits(num_bits, k)
q, t, r, k, D = cp.run(r, k, D)  # use CP method to solve for q and t
print_curve(q, t, r, k, D)

# Example 3 (running cocks_pinch_method once with a specified num_times and g)
k = 5
r = 1743941
r, k, D = cp.gen_params_from_r(r, k)
g = 722825
q, t = cp.method(r, k, D, max_trials=100, g=g)  # might not find q and t
print_curve(q, t, r, k, D)