123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437 |
- #include "circuit_time2.hpp"
- void circuit_time2(PublicKey public_key, PrivateKey private_key)
- {
- zout(omp_get_num_procs(),omp_get_max_threads());
- using Clock = chrono::high_resolution_clock;
- using chrono::nanoseconds;
- using chrono::duration_cast;
- double temps_en_nanosecondes;
- double temps_en_secondes, temps_en_millisecondes;
-
- unsigned long graine_faible_time;
- graine_faible_time = time(NULL);
- srand((unsigned int)graine_faible_time); //cast explicite pour être propre
-
- int nombre_instances=50;
- F2 clair;
- BitEvalL1<curvepoint_fp_t> chiffre_curve[nombre_instances], sum_curve[nombre_instances];
- BitEvalL1<twistpoint_fp2_t> chiffre_twist[nombre_instances], sum_twist[nombre_instances];
- BitEvalL2 chiffre_L2[nombre_instances], sum_L2[nombre_instances];
- BitEvalL3 chiffre_L3[nombre_instances], sum_L3[nombre_instances];
- BitEvalL4 chiffre_L4[nombre_instances], sum_L4[nombre_instances];
-
-
-
- /**encryption mode curve **/
- green(encryption mode curve);
- auto temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- //clair=rand()%2;
- chiffrement(chiffre_curve[i],clair,public_key);
- }
- }
- auto temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
- /**encryption mode twist **/
-
- green(encryption mode twist);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- chiffrement(chiffre_twist[i],clair,public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**multiplication L1 **/
-
- yellow(multiplication L1);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- chiffre_L2[i]=multiplicationL1(chiffre_curve[i],chiffre_twist[i],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**multiplication L1L2 curve **/
-
- yellow(multiplication L1L2);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- chiffre_L3[i]=multiplicationL1L2(chiffre_curve[i],chiffre_L2[i],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**multiplication L2 **/
-
- yellow(multiplication L2);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- chiffre_L4[i]=multiplicationL2(chiffre_L2[i],chiffre_L2[i],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**addition L1 mode curve **/
- green(addition L1 mode curve);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- //clair=rand()%2;
- sum_curve[i]=additionL1(chiffre_curve[i],chiffre_curve[i+1],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**addition L1 mode twist **/
- green(addition L1 mode twist);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- //clair=rand()%2;
- sum_twist[i]=additionL1(chiffre_twist[i],chiffre_twist[i+1],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
- /**addition L2 **/
- green(addition L2);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- //clair=rand()%2;
- sum_L2[i]=additionL2(chiffre_L2[i],chiffre_L2[i+1],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**addition L3 **/
- green(addition of two L3);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- //clair=rand()%2;
- sum_L3[i]=additionL3(chiffre_L3[i],chiffre_L3[i+1],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**addition L4 **/
- green(addition of two L4);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- //clair=rand()%2;
- sum_L4[i]=additionL4(chiffre_L4[i],chiffre_L4[i+1],public_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
-
- /**decryption L1 mode curve **/
-
- green(decryption mode curve);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- dechiffrement(clair,chiffre_curve[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**decryption L1 mode twist **/
-
- green(decryption mode twist);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- dechiffrement(clair,chiffre_twist[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**decryption L2 **/
-
- red(decryption L2);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- dechiffrementL2(clair,chiffre_L2[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
- /**decryption L3 **/
-
- red(decryption L3);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- dechiffrementL3(clair,chiffre_L3[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
- /**decryption L4 **/
-
- red(decryption L4);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- dechiffrementL4(clair,chiffre_L4[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
-
- /**decryption sum L3 **/
-
- red(decryption sum of two L3);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- dechiffrementL3(clair,sum_L3[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
- /**decryption sum L4 **/
-
- red(decryption sum of two L4);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances-1;i++)
- {
- dechiffrementL4(clair,sum_L4[i],private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/(nombre_instances-1);
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
-
- /**keygen **/
- green(keygen);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- clair=rand()%2;
-
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- keygen(public_key, private_key);
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
-
- /**precomputation L2 **/
-
- red(precompute L2);
- temps_initial = Clock::now();
- omp_set_num_threads(omp_get_max_threads());
- #pragma omp parallel
- {
- #pragma omp for
- for (int i=0; i<nombre_instances;i++)
- {
- Quadripoint base_log = private_key.pi_T(pairing(public_key.get_bipoint_curve_groupelt(),public_key.get_bipoint_twist_groupelt())); //pi_T(e(u,v))
- }
- }
- temps_final = Clock::now();
- temps_en_nanosecondes = duration_cast<nanoseconds>(temps_final-temps_initial).count(); /* total time in nanoseconds */
- temps_en_secondes= temps_en_nanosecondes*1e-9; //on pourrait passer directement en secondes avec chrono mais on perdrait de la précision avec leurs arrondis
- //zout(temps_en_secondes);
- temps_en_millisecondes=temps_en_nanosecondes*1e-6/nombre_instances;
- cout << setprecision(3) << temps_en_millisecondes << " ms\n";
- }
|