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 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
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
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
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)