1 #include "LiDIA/bigint.h" 2 #include "LiDIA/gec_complex_multiplication.h" 3 #include "LiDIA/gec_point_counting_mod_p.h" 4 #include "LiDIA/gec_point_counting_mod_2n.h" 5 6 #include "LiDIA/timer.h" 7 8 #ifdef LIDIA_NAMESPACE 9 using namespace LiDIA; 10 #endif 11 main_LiDIA(int,char **)12int main_LiDIA(int, char**) 13 { 14 lidia_size_t bitlength_r; 15 std::cout << "Input lower bound of bitlength of r >> "; 16 std::cin >> bitlength_r; 17 18 bool verbosity = true; 19 bool efficiency = true; 20 21 bigint bound_k; 22 std::cout << "Input upper_bound_k (k is the cofactor) >> "; 23 std::cin >> bound_k; 24 25 bool bsi = false; 26 bigint field; 27 std::cout << "Input field GF(q) (q ~ r * k) >> "; 28 std::cin >> field; 29 30 char method; 31 std::cout << "Input method (c = CM), (p = PC mod p), (2 = PC mod 2^n) >> "; 32 std::cin >> method; 33 34 if( method == 'c' ) 35 { 36 std::cout << "We use complex multiplication." << std::endl; 37 38 gec_complex_multiplication I; 39 I.set_lower_bound_bitlength_r( bitlength_r ); 40 I.set_upper_bound_k( bound_k ); 41 I.set_according_to_BSI( bsi ); 42 43 bigint delta( -21311 ); 44 std::cout << "Input delta >> "; std::cin >> delta; 45 if( delta != 0 ) 46 I.set_delta(delta); 47 48 if( field != 0 ) 49 I.set_field( field ); 50 51 I.set_verbose_level( verbosity ); 52 // I.set_generation_mode( 1 ); 53 // I.set_efficient_curve_parameters( efficiency ); 54 55 timer all_time; 56 57 all_time.start_timer(); 58 I.generate(); 59 all_time.stop_timer(); 60 61 // std::cout << I.get_class_polynomial() << std::endl; 62 63 std::cout << I.get_a4() << std::endl; 64 std::cout << I.get_a4().return_as_bigint() << std::endl; 65 66 std::cout << std::endl << "all_time = " << all_time << std::endl; 67 68 } 69 else if( method == 'p' ) 70 { 71 std::cout << "We use random approach." << std::endl; 72 73 gec_point_counting_mod_p I; 74 I.set_lower_bound_bitlength_r( bitlength_r ); 75 I.set_upper_bound_k( bound_k ); 76 I.set_according_to_BSI( bsi ); 77 78 if( field != 0 ) 79 I.set_field( field ); 80 81 I.set_verbose_level( verbosity ); 82 // I.set_efficient_curve_parameters( efficiency ); 83 84 I.generate(); 85 } 86 else if( method == '2' ) 87 { 88 gec_point_counting_mod_2n I; 89 I.set_lower_bound_bitlength_r( bitlength_r ); 90 I.set_upper_bound_k( bound_k ); 91 I.set_according_to_BSI( bsi ); 92 93 unsigned int degree; 94 std::cout << "Input degree >> "; std::cin >> degree; 95 96 if( degree != 0 ) 97 I.set_degree( degree ); 98 else if( field != 0 ) 99 I.set_field( field ); 100 101 I.set_verbose_level( verbosity ); 102 I.set_efficient_curve_parameters( efficiency ); 103 104 I.generate(); 105 } 106 107 return( 0 ); 108 } 109 110 main(int argc,char ** argv)111int main(int argc, char** argv) { 112 113 #if defined(LIDIA_EXCEPTIONS) 114 try { 115 #endif 116 117 main_LiDIA(argc, argv); 118 119 #if defined(LIDIA_EXCEPTIONS) 120 } 121 catch(basic_error const& ex) { 122 ex.traditional_error_handler(); 123 return 1; 124 } 125 catch(std::exception const& ex) { 126 std::cerr << "unexpected exception: " << ex.what() << "\n"; 127 return 1; 128 } 129 #endif 130 131 } 132