From f13331294db25341f34c7a17c7e5588439fa9500 Mon Sep 17 00:00:00 2001
From: rtalbi <dr_talbi@esi.dz>
Date: Thu, 9 Jan 2020 18:00:46 +0100
Subject: [PATCH] New tests for the S&P paper

---
 CONFIG/DAPPLE.config        |   2 +-
 CRYPTO/EvalAddPow2.cpp      |   4 +-
 CRYPTO/EvalCmp.cpp          |   4 +-
 CRYPTO/EvalCmp100.cpp       |   4 +-
 CRYPTO/EvalDiv.cpp          |   3 +-
 CRYPTO/EvalDiv100.cpp       |   4 +-
 CRYPTO/EvalDotProd.cpp      |   3 +-
 CRYPTO/EvalEntropy.cpp      |   3 +-
 CRYPTO/EvalExpo.cpp         |   2 +
 CRYPTO/EvalHBound.cpp       |   4 +-
 CRYPTO/EvalLog.cpp          |   3 +-
 CRYPTO/EvalLrUpdate.cpp     |   5 +-
 CRYPTO/EvalMult.cpp         |   4 +-
 CRYPTO/EvalProba.cpp        |   3 +-
 CRYPTO/EvalSigmoid.cpp      |   2 +-
 CRYPTO/EvalSqrt.cpp         |   4 +-
 CRYPTO/EvalStandardDiv.cpp  |   5 +-
 CRYPTO/EvalThreashold.cpp   |   6 +
 CRYPTO/SkeySwitch.cpp       |   5 +-
 TEST/TESTBuildingBlocks.cpp | 552 ++++++++++++++----------------------
 20 files changed, 261 insertions(+), 361 deletions(-)

diff --git a/CONFIG/DAPPLE.config b/CONFIG/DAPPLE.config
index f3cc156d..1694bd84 100755
--- a/CONFIG/DAPPLE.config
+++ b/CONFIG/DAPPLE.config
@@ -46,7 +46,7 @@
      sendParaClient="true";
      blindingSize="20";
      encryptData="true";
-     delay="1000";
+     delay="2";
  }
 
  # Naive Bayes parameters
diff --git a/CRYPTO/EvalAddPow2.cpp b/CRYPTO/EvalAddPow2.cpp
index 6b12d939..a0c67e33 100755
--- a/CRYPTO/EvalAddPow2.cpp
+++ b/CRYPTO/EvalAddPow2.cpp
@@ -73,13 +73,15 @@ Cipher EvalAddPow2::EvalAddPow2_U2_step2(std::vector <Cipher> res1)
 
     res  =  dtpkc.enc(x*x,A.Pub);
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeSU = duration.count();
     bdwSU = mpz_size(res.T1.get_mpz_t())+ mpz_size(res.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return res;
 
 
diff --git a/CRYPTO/EvalCmp.cpp b/CRYPTO/EvalCmp.cpp
index 99cdf03d..89c0cf20 100755
--- a/CRYPTO/EvalCmp.cpp
+++ b/CRYPTO/EvalCmp.cpp
@@ -118,7 +118,7 @@ bool EvalCmp::EvalCmp_U2_step2(std::vector <Cipher> res1)
     }
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
     // return the comparison output
 
     auto en = chrono::high_resolution_clock::now();
@@ -126,7 +126,7 @@ bool EvalCmp::EvalCmp_U2_step2(std::vector <Cipher> res1)
     timeSU = duration.count();
     bdwSU = 1;
 
-
+    std::this_thread::sleep_for(dtpkc.delay);
     return  x < y ;
 
 }
diff --git a/CRYPTO/EvalCmp100.cpp b/CRYPTO/EvalCmp100.cpp
index a26eb7eb..e30c3bce 100755
--- a/CRYPTO/EvalCmp100.cpp
+++ b/CRYPTO/EvalCmp100.cpp
@@ -95,14 +95,14 @@ bool EvalCmp100::EvalCmp_U2_step2(std::vector <Cipher> res1)
             y = dtpkc.PSdec1(res1[2], res1[3]);
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
     // return the comparison output
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeSU = duration.count();
     bdwSU = 1;
-
+    std::this_thread::sleep_for(dtpkc.delay);
     return  x < y ;
 
 }
diff --git a/CRYPTO/EvalDiv.cpp b/CRYPTO/EvalDiv.cpp
index 8288afc4..d7842b2f 100755
--- a/CRYPTO/EvalDiv.cpp
+++ b/CRYPTO/EvalDiv.cpp
@@ -191,12 +191,13 @@ EvalDiv ::EvalDiv_U1_step3(Cipher S7)
     S9.Pub=a.Pub;
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(S9.T1.get_mpz_t())+ mpz_size(S9.T2.get_mpz_t())* sizeof(mp_limb_t);
+    std::this_thread::sleep_for(dtpkc.delay);
 
     return S9;
 
diff --git a/CRYPTO/EvalDiv100.cpp b/CRYPTO/EvalDiv100.cpp
index 8f746477..84c1c387 100755
--- a/CRYPTO/EvalDiv100.cpp
+++ b/CRYPTO/EvalDiv100.cpp
@@ -100,7 +100,7 @@ EvalDiv100 ::EvalDiv_U1_step3(Cipher S7)
     S9.T2=S7.T2*S88.T2;
     S9.Pub=a.Pub;
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
 
 
@@ -109,6 +109,8 @@ EvalDiv100 ::EvalDiv_U1_step3(Cipher S7)
     timeMU += duration.count();
     bdwMU += mpz_size(S9.T1.get_mpz_t())+ mpz_size(S9.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return S9;
 
 }
diff --git a/CRYPTO/EvalDotProd.cpp b/CRYPTO/EvalDotProd.cpp
index 02134e1c..584c7e5c 100755
--- a/CRYPTO/EvalDotProd.cpp
+++ b/CRYPTO/EvalDotProd.cpp
@@ -126,13 +126,14 @@ Cipher EvalDotProd::EvalDotProd_U1_step3(Cipher val)
     std::vector <Cipher> res = evalDiv.EvalDiv_U1_step1();
     Cipher out = evalDiv.EvalDiv_U1_step3(evalDiv.EvalDiv_U2_step2(res[0],res[1], res[2], res[3]));
     out.sign = val.sign;
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(out.T1.get_mpz_t())+ mpz_size ( out.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
 
     return out;
 
diff --git a/CRYPTO/EvalEntropy.cpp b/CRYPTO/EvalEntropy.cpp
index aad407aa..c63eaec1 100755
--- a/CRYPTO/EvalEntropy.cpp
+++ b/CRYPTO/EvalEntropy.cpp
@@ -241,7 +241,7 @@ EvalEntropy ::EvalEntropy_U1_step3(Cipher blinded_result)
     S9.Pub=T.Pub;
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
 
     auto en = chrono::high_resolution_clock::now();
@@ -249,6 +249,7 @@ EvalEntropy ::EvalEntropy_U1_step3(Cipher blinded_result)
     timeMU += duration.count();
     bdwMU += mpz_size(S9.T1.get_mpz_t())+ mpz_size(S9.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
 
     return S9;
 
diff --git a/CRYPTO/EvalExpo.cpp b/CRYPTO/EvalExpo.cpp
index 256f92db..d068d12a 100755
--- a/CRYPTO/EvalExpo.cpp
+++ b/CRYPTO/EvalExpo.cpp
@@ -82,6 +82,8 @@ EvalExpo::EvalSig_U2_step2(Cipher S1, Cipher S2)
     timeSU = duration.count();
     bdwSU = mpz_size(S4.T1.get_mpz_t())+ mpz_size(S4.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return S4;
 
 }
diff --git a/CRYPTO/EvalHBound.cpp b/CRYPTO/EvalHBound.cpp
index 71310316..179775ea 100755
--- a/CRYPTO/EvalHBound.cpp
+++ b/CRYPTO/EvalHBound.cpp
@@ -157,13 +157,15 @@ EvalHBound::EvalHbound_U1_step3(Cipher res2)
 
     out = evalDiv.EvalDiv_U1_step3(evalDiv.EvalDiv_U2_step2(res[0],res[1], res[2], res[3]));
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(out.T1.get_mpz_t())+ mpz_size(out.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return out;
 
 }
diff --git a/CRYPTO/EvalLog.cpp b/CRYPTO/EvalLog.cpp
index 110ee3e9..bf87254b 100755
--- a/CRYPTO/EvalLog.cpp
+++ b/CRYPTO/EvalLog.cpp
@@ -88,7 +88,7 @@ EvalLog::EvalLog_U1_step3(Cipher S4)
     c.T1=S4.T1*mpz_class_powm(R.T1,dtpkc.n-1,dtpkc.n2);
     c.T2=S4.T2*mpz_class_powm(R.T2,dtpkc.n-1,dtpkc.n2);
     c.Pub=u.Pub;
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
 
     auto en = chrono::high_resolution_clock::now();
@@ -96,6 +96,7 @@ EvalLog::EvalLog_U1_step3(Cipher S4)
     timeMU += duration.count();
     bdwMU += mpz_size(S4.T1.get_mpz_t())+ mpz_size(S4.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
 
     return c;
 
diff --git a/CRYPTO/EvalLrUpdate.cpp b/CRYPTO/EvalLrUpdate.cpp
index 6e1d14f1..4b7fad45 100755
--- a/CRYPTO/EvalLrUpdate.cpp
+++ b/CRYPTO/EvalLrUpdate.cpp
@@ -159,13 +159,16 @@ Cipher EvalLrUpdate::EvalLrUpdate_U1_step3(Cipher val)
     //out.T2 = mpz_class_powm(out.T2,100000,dtpkc.n2*dtpkc.n2);
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(out.T1.get_mpz_t())+ mpz_size(out.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
+
     return out;
 
 }
diff --git a/CRYPTO/EvalMult.cpp b/CRYPTO/EvalMult.cpp
index 95f1a9e1..123d10d2 100755
--- a/CRYPTO/EvalMult.cpp
+++ b/CRYPTO/EvalMult.cpp
@@ -188,13 +188,15 @@ Cipher EvalMult::EvalMult_U1_step3(Cipher res2)
     S10.Pub=A.Pub;
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(S10.T1.get_mpz_t())+ mpz_size(S10.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return S10;
 
 }
diff --git a/CRYPTO/EvalProba.cpp b/CRYPTO/EvalProba.cpp
index 708267d3..fcfcfdfb 100755
--- a/CRYPTO/EvalProba.cpp
+++ b/CRYPTO/EvalProba.cpp
@@ -110,14 +110,13 @@ EvalProba :: EvalProba_U1_step3(Cipher blinded_result)
     vector<Cipher> res1 = evalDiv100.EvalDiv_U1_step1();
     S9= evalDiv100.EvalDiv_U1_step3(evalDiv100.EvalDiv_U2_step2(res1[0], res1[1], res1[2], res1[3]));
 
-    std::this_thread::sleep_for(dtpkc.delay);
-
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(S9.T1.get_mpz_t())+ mpz_size(S9.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
 
     return S9;
 
diff --git a/CRYPTO/EvalSigmoid.cpp b/CRYPTO/EvalSigmoid.cpp
index 0cabbab6..34a52909 100755
--- a/CRYPTO/EvalSigmoid.cpp
+++ b/CRYPTO/EvalSigmoid.cpp
@@ -137,7 +137,7 @@ EvalSigmoid::EvalSig_U1_step3(Cipher S4)
     //S9.T1 = mpz_class_powm(S9.T1,100000,dtpkc.n2*dtpkc.n2);
     //S9.T2 = mpz_class_powm(S9.T2,100000,dtpkc.n2*dtpkc.n2);
 
-    cout << " S9 " << S9 << endl;
+    //cout << " S9 " << S9 << endl;
 
     std::this_thread::sleep_for(dtpkc.delay);
 
diff --git a/CRYPTO/EvalSqrt.cpp b/CRYPTO/EvalSqrt.cpp
index af117b16..9ddc9cdc 100755
--- a/CRYPTO/EvalSqrt.cpp
+++ b/CRYPTO/EvalSqrt.cpp
@@ -153,13 +153,13 @@ EvalSqrt::EvalHbound_U1_step3(Cipher res2)
 
     out = evalDiv.EvalDiv_U1_step3(evalDiv.EvalDiv_U2_step2(res[0],res[1], res[2], res[3]));
 
-    std::this_thread::sleep_for(dtpkc.delay);
-
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(out.T1.get_mpz_t())+ mpz_size(out.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return out;
 
 }
diff --git a/CRYPTO/EvalStandardDiv.cpp b/CRYPTO/EvalStandardDiv.cpp
index 420b54f1..81381d18 100755
--- a/CRYPTO/EvalStandardDiv.cpp
+++ b/CRYPTO/EvalStandardDiv.cpp
@@ -90,13 +90,16 @@ EvalStandardDiv::EvalStandardDiv_U1_step3(Cipher res2)
     EvalDiv evalDiv(res2,blindVal,dtpkc);
     std::vector <Cipher> res = evalDiv.EvalDiv_U1_step1();
     Cipher out = evalDiv.EvalDiv_U1_step3(evalDiv.EvalDiv_U2_step2(res[0],res[1], res[2], res[3]));
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(out.T1.get_mpz_t())+ mpz_size(out.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return  out;
 
 }
diff --git a/CRYPTO/EvalThreashold.cpp b/CRYPTO/EvalThreashold.cpp
index 24f1ba9b..787e3df9 100755
--- a/CRYPTO/EvalThreashold.cpp
+++ b/CRYPTO/EvalThreashold.cpp
@@ -58,6 +58,9 @@ EvalThreashold::eval()
             timeMU += div.timeMU;
             timeSU = div.timeSU;
 
+            bdwMU = div.bdwMU;
+            bdwSU = div.bdwSU;
+
 
                     //cout << "S1 =" << S1 << endl;
 
@@ -95,6 +98,9 @@ EvalThreashold::eval()
             timeMU += div.timeMU;
             timeSU = div.timeSU;
 
+            bdwMU = div.bdwMU;
+            bdwSU = div.bdwSU;
+
             //cout << "A =" << A << endl;
             begin = chrono::high_resolution_clock::now();
 
diff --git a/CRYPTO/SkeySwitch.cpp b/CRYPTO/SkeySwitch.cpp
index 7e4893b9..a38d58f6 100755
--- a/CRYPTO/SkeySwitch.cpp
+++ b/CRYPTO/SkeySwitch.cpp
@@ -97,13 +97,16 @@ Cipher SkeySwitch::SkeySwitch_U1_step3(Cipher res2)
     res.Pub = pkey;
 
 
-    std::this_thread::sleep_for(dtpkc.delay);
+
 
     auto en = chrono::high_resolution_clock::now();
     std::chrono::duration<double, std::milli> duration = en  - begin ;
     timeMU += duration.count();
     bdwMU += mpz_size(res.T1.get_mpz_t())+ mpz_size(res.T2.get_mpz_t())* sizeof(mp_limb_t);
 
+
+    std::this_thread::sleep_for(dtpkc.delay);
+
     return  res;
 
 }
diff --git a/TEST/TESTBuildingBlocks.cpp b/TEST/TESTBuildingBlocks.cpp
index 2d78981b..27f064ff 100755
--- a/TEST/TESTBuildingBlocks.cpp
+++ b/TEST/TESTBuildingBlocks.cpp
@@ -284,434 +284,306 @@ void TESTBuildingBlocks::run (bool deserialize, int keysize, int prec, int error
     DTPKC::Cipher C_A, C_B, C_C;
     gmp_randstate_t randstate;
 
-    int cptF = 0;
 
-    if (deserialize)
-    {
-        dtpkc.deserializeDtpkc(filename);
-        dtpkc.blindVal = prec;
-        pkey = dtpkc.pkw;
-        //cout << "Deserialized dtpkc " << endl;
-
-    }else
-    {
-
-        gmp_randinit_default(randstate);
-        gmp_randseed_ui(randstate,time(NULL));
-        std::chrono::milliseconds delay(1000);
-        dtpkc.keygen(prec,randstate, delay, keysize, error);
-
-        // Generate public key
-        dtpkc.getKey(pkey,skey);
-        dtpkc.updatePkw(pkey);
-        cout << "Generated dtpkc parameters " << endl;
-    }
+    double timeMU_SKS, timeSU_SKS, bdwMU_SKS, bdwSU_SKS;
+    double timeMU_SE, timeSU_SE, bdwMU_SE, bdwSU_SE;
+    double timeMU_STS, timeSU_STS, bdwMU_STS, bdwSU_STS;
+    double timeMU_SHBC, timeSU_SHBC, bdwMU_SHBC, bdwSU_SHBC;
+    double timeMU_SSig, timeSU_SSig, bdwMU_SSig, bdwSU_SSig;
+    double timeMU_SDP, timeSU_SDP, bdwMU_SDP, bdwSU_SDP;
+    double timeMU_SD, timeSU_SD, bdwMU_SD, bdwSU_SD;
+    double timeMU_SM, timeSU_SM, bdwMU_SM, bdwSU_SM;
+    double timeMU_SC, timeSU_SC, bdwMU_SC, bdwSU_SC;
+    double timeMU_SLog, timeSU_SLog, bdwMU_SLog, bdwSU_SLog;
+    double timeMU_SSqrt, timeSU_SSqrt, bdwMU_SSqrt, bdwSU_SSqrt;
+    double timeMU_SExpo, timeSU_SExpo, bdwMU_SExpo, bdwSU_SExpo;
+    double timeMU_SPU, timeSU_SPU, bdwMU_SPU, bdwSU_SPU;
 
-    dtpkc.getKey(newPkey,newSkey);
-    dtpkc.updatePkw(newPkey);
+    int N=1;
 
-    // Read operands
 
-    B = mpz_class_get_z_bits(15);
-    //cout << A << endl;
-    A = B + mpz_class_get_z_bits(15);
 
+        if (deserialize) {
+            dtpkc.deserializeDtpkc(filename);
+            dtpkc.blindVal = prec;
+            pkey = dtpkc.pkw;
 
-    // Encrypt operands
-    C_A = dtpkc.enc(A,pkey);
-    C_B = dtpkc.enc(B,pkey);
+        } else {
 
-    Cipher C_T;
+            gmp_randinit_default(randstate);
+            gmp_randseed_ui(randstate, time(NULL));
+            std::chrono::milliseconds delay(1000);
+            dtpkc.keygen(prec, randstate, delay, keysize, error);
 
-    T.set_str("1000",10);
-    C_T = dtpkc.enc(T,pkey);
+            // Generate public key
+            dtpkc.getKey(pkey, skey);
+            dtpkc.updatePkw(pkey);
+            //cout << "Generated dtpkc parameters " << endl;
+        }
 
-    int size = 2;
-    int t = 1000;
-    vector<mpz_class> INTER (size);
-    vector<Cipher> classses (size);
-    vector<int> inter (size);
-    inter[0] = 700;
-    inter [1]=300;
-    INTER[0].set_str("700",10);
-    classses[0] = dtpkc.enc(INTER[0],pkey);
-    INTER[1].set_str("300",10);
-    classses[1] = dtpkc.enc(INTER[1],pkey);
+        dtpkc.getKey(newPkey, newSkey);
+        dtpkc.updatePkw(newPkey);
 
-/**
-* Test SDec
- *
-*/
+        // Generate operands
 
-    cpt++;
-
-    mpz_class c_a = dtpkc.Sdec(C_A);
-    const char* state = (c_a == A) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") : <<SDec> gave : " << c_a << " state :" << state << endl;
-    if (c_a != A) cptF++;
+        B = mpz_class_get_z_bits(15);
+        A = B + mpz_class_get_z_bits(15);
 
+        // Encrypt operands
+        C_A = dtpkc.enc(A, pkey);
+        C_B = dtpkc.enc(B, pkey);
 
+        Cipher C_T;
 
-/**
-* Test Comparion
-*/
-    cpt ++;
+        T.set_str("1000", 10);
+        C_T = dtpkc.enc(T, pkey);
 
-    EvalCmp evalCmp(C_A,C_B,dtpkc);
-    bool r = evalCmp.EvalCmp_U2_step2(evalCmp.EvalCmp_U1_step1());
+        int size = 2;
+        int t = 1000;
+        vector<mpz_class> INTER(size);
+        vector<Cipher> classses(size);
+        vector<int> inter(size);
+        inter[0] = 700;
+        inter[1] = 300;
+        INTER[0].set_str("700", 10);
+        classses[0] = dtpkc.enc(INTER[0], pkey);
+        INTER[1].set_str("300", 10);
+        classses[1] = dtpkc.enc(INTER[1], pkey);
 
+    for (int j=0; j<N; j++) {
 
-    state = (A<B == r) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") : <<comparison>> gave : " << r << " state :" << state << " Time MU " << evalCmp.timeMU << " Time SU " << evalCmp.timeSU << " bdw MU " << evalCmp.bdwMU << " bdw SU " << evalCmp.bdwSU << endl;
-    if (A<B != r) cptF++;
 
 /**
-* Test EvalHBound
-*/
-
-    cpt ++;
-    mpz_class i = 10000;
-    i = i * pow(log2(3) * 100,2) * log(1/0.00001);
-    EvalHBound evalHBound(dtpkc.enc(i,pkey),dtpkc.enc(1000,pkey),dtpkc);
-    C_C = evalHBound.EvalHbound_U1_step3(evalHBound.EvalHBound_U2_step2(evalHBound.EvalHBound_U1_step1()));
-    C= dtpkc.Sdec(C_C);
-    int hbound = (VFDT_Classifier::HBound(log2(3),log(1/0.00001),1000) * 10000 ) ;
-
-    state = (abs(int(hbound - C.get_ui())) < 300) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<HBound>> gave : " << C.get_str() << " expected result : " << hbound << " state :" << state << " Time MU " << evalHBound.timeMU << " Time SU " << evalHBound.timeSU << " bdw MU " << evalHBound.bdwMU << " bdw SU " << evalHBound.bdwSU << endl;
-    if (abs(int(hbound - C.get_ui())) > 300) cptF++;
-
-
-
-    /**
-* Test EvalSqrt
+* Test Comparion
 */
 
-    cpt ++;
-
-
-    EvalSqrt evalsqrt (C_A,dtpkc);
-    C_C = evalsqrt.EvalHbound_U1_step3(evalsqrt.EvalHBound_U2_step2(evalsqrt.EvalHBound_U1_step1()));
-    C= dtpkc.Sdec(C_C);
-    int sqrt_ = (VFDT_Classifier::HBound(log2(3),log(1/0.00001),1000) * 10000 ) ;
-
-    //state = (abs(int(hbound - C.get_ui())) < 300) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<SQRT>> gave : " << C.get_str() << " expected result : " << sqrt_ << " state :" << state << " Time MU " << evalsqrt.timeMU << " Time SU " << evalsqrt.timeSU << " bdw MU " << evalsqrt.bdwMU << " bdw SU " << evalsqrt.bdwSU << endl;
-    if (abs(int(hbound - C.get_ui())) > 300) cptF++;
+        EvalCmp evalCmp(C_A, C_B, dtpkc);
+        bool r = evalCmp.EvalCmp_U2_step2(evalCmp.EvalCmp_U1_step1());
 
 /**
-* Test EvalAdd
+* Test EvalHBound
 */
-    cpt++;
 
-    EvalAdd add(C_A,C_B);
-    C_C=add.EvalAdd_U1();
-    C=dtpkc.Sdec(C_C);
+        mpz_class i = 10000;
+        i = i * pow(log2(3) * 100, 2) * log(1 / 0.00001);
+        EvalHBound evalHBound(dtpkc.enc(i, pkey), dtpkc.enc(1000, pkey), dtpkc);
+        C_C = evalHBound.EvalHbound_U1_step3(evalHBound.EvalHBound_U2_step2(evalHBound.EvalHBound_U1_step1()));
 
-    state = (A+B == C) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<addition>> gave : " << C.get_str() << " state :" << state << endl;
-    if (A+B != C) cptF++;
 
 /**
-* Test EvalSub
+* Test EvalSqrt
 */
-    cpt ++;
-    // Run EvalSub
-    EvalSub sub(C_A,C_B,dtpkc);
-    C_C=sub.EvalSub_U1();
-    C=dtpkc.Sdec(C_C);
 
-    state = (A-B == C) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<subtraction>> gave : " << C.get_str() << " state :" << state << endl;
-    if (A-B != C) cptF++;
+        EvalSqrt evalsqrt(C_A, dtpkc);
+        C_C = evalsqrt.EvalHbound_U1_step3(evalsqrt.EvalHBound_U2_step2(evalsqrt.EvalHBound_U1_step1()));
+        C = dtpkc.Sdec(C_C);
+
 
 /**
 * Test EvalDiv
 */
-    cpt ++;
-    // Run EvalDiv
-    EvalDiv div(C_A,C_B,dtpkc);
-    std::vector <DTPKC::Cipher> res = div.EvalDiv_U1_step1();
-    C_C=div.EvalDiv_U1_step3(div.EvalDiv_U2_step2(res[0],res[1],res[2],res[3]));
-    C=dtpkc.Sdec(C_C);
 
-    state = (abs (A/B - C.get_ui()) < 300) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<division>> gave : " << C.get_str() << " expected result " << A/B << " state :" << state << " Time MU " << div.timeMU << " Time SU " << div.timeSU << " bdw MU " << div.bdwMU << " bdw SU " << div.bdwSU << endl;
-    if (abs (A/B - C.get_ui()) > 300) cptF++;
+        EvalDiv div(C_A, C_B, dtpkc);
+        std::vector<DTPKC::Cipher> res = div.EvalDiv_U1_step1();
+        C_C = div.EvalDiv_U1_step3(div.EvalDiv_U2_step2(res[0], res[1], res[2], res[3]));
+        C = dtpkc.Sdec(C_C);
 
-/**
-* Test logarithm on big numbers
-*/
 
-    cpt++;
-    mpz_class ress = mpz_class_log2_10(A);
-    state = (abs(trunc(log2(A.get_ui())*100) - ress) < 100) ? " passed":" failed";
-
-    cout<<"Test(" << cpt << ") <<Logarithme>> gave : " <<  ress << " expected result : " << log2(A.get_ui())*100 << " state : " << state << endl;
-    if (abs(trunc(log2(A.get_ui())*100) - ress) > 100) cptF++;
 /**
 * Test Secure entropy
 */
 
-    // Read operands
 
-    cpt ++;
-    EvalEntropy evalEntropy(C_T,classses,dtpkc);
-    C_C= evalEntropy.EvalEntropy_U1_step3(evalEntropy.EvalEntropy_U2_step2(evalEntropy.EvalEntropy_U1_step1()));
-    C=dtpkc.Sdec(C_C);
+        EvalEntropy evalEntropy(C_T, classses, dtpkc);
+        C_C = evalEntropy.EvalEntropy_U1_step3(evalEntropy.EvalEntropy_U2_step2(evalEntropy.EvalEntropy_U1_step1()));
+        C = dtpkc.Sdec(C_C);
 
-    double result = VFDT_Classifier::Entropy(t,inter)*10000;
-    state = ( result - C < 300 ) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<Entropy>> gave : " << C.get_str()  << " exepcted result = "<<result << " state : " << state << " Time MU " << evalEntropy.timeMU << " Time SU " << evalEntropy.timeSU << " bdw MU " << evalEntropy.bdwMU << " bdw SU " << evalEntropy.bdwSU << endl;
-    if (result - C > 300) cptF++;
 
 
-
-    /**
+/**
 * Test EvalProba
 */
 
-    // Read operands
-
-    cpt ++;
-    EvalProba evalProba (classses,dtpkc);
-    C_C= evalProba.EvalProba_U1_step3(evalProba.EvalProba_U2_step2(evalProba.EvalProba_U1_step1()));
-    C=dtpkc.Sdec(C_C);
+        EvalProba evalProba(classses, dtpkc);
+        C_C = evalProba.EvalProba_U1_step3(evalProba.EvalProba_U2_step2(evalProba.EvalProba_U1_step1()));
+        C = dtpkc.Sdec(C_C);
 
-    //double result = VFDT_Classifier::Entropy(t,inter)*10000;
-    //state = ( result - C < 300 ) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<EvalProba>> gave : " << C.get_str()  << " exepcted result = "<<result << " state : " << state << " Time MU " << evalProba.timeMU << " Time SU " << evalProba.timeSU << " bdw MU " << evalProba.bdwMU << " bdw SU " << evalProba.bdwSU << endl;
-    if (result - C > 300) cptF++;
 
 /**
 * Test SkeySwitch
 */
-    cpt++;
 
+        SkeySwitch skeySwitch(C_A, newPkey, dtpkc);
+        C_C = skeySwitch.SkeySwitch_U1_step3(skeySwitch.SkeySwitch_U2_step2(skeySwitch.SkeySwitch_U1_step1()));
+        C = dtpkc.Sdec(C_C);
 
-    SkeySwitch skeySwitch (C_A,newPkey, dtpkc);
-    C_C = skeySwitch.SkeySwitch_U1_step3(skeySwitch.SkeySwitch_U2_step2(skeySwitch.SkeySwitch_U1_step1()));
-    C = dtpkc.Sdec(C_C);
-
-    state = ( C == A ) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<Key Switch>> gave : " << C.get_str() << " state : " << state << " Time MU " << skeySwitch.timeMU << " Time SU " << skeySwitch.timeSU << " bdw MU " << skeySwitch.bdwMU << " bdw SU " << skeySwitch.bdwSU << endl;
-    if ( C != A ) cptF++;
 
 /**
 * Test EvalMult
 */
-    cpt++;
-    EvalMult e1(C_A, C_B, dtpkc);
-    C_C = e1.EvalMult_U1_step3(e1.EvalMult_U2_step2(e1.EvalMult_U1_step1()));
-
-    C = dtpkc.Sdec(C_C);
-
-    state = ( C == A*B) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<Multplication>> gave : " << C.get_str() << " state : " << state << " Time MU " << e1.timeMU << " Time SU " << e1.timeSU << " bdw MU " << e1.bdwMU << " bdw SU " << e1.bdwSU << endl;
-    if ( C != A*B) cptF++;
-
-
-/**
-* Test EvalAddPow2
-*/
-    cpt++;
 
-    EvalAddPow2 evalAddPow2(C_A,C_B,dtpkc);
-    C_C = evalAddPow2.EvalAddPow2_U1_step3(evalAddPow2.EvalAddPow2_U2_step2(evalAddPow2.EvalAddPow2_U1_step1()));
+        EvalMult e1(C_A, C_B, dtpkc);
+        C_C = e1.EvalMult_U1_step3(e1.EvalMult_U2_step2(e1.EvalMult_U1_step1()));
+        C = dtpkc.Sdec(C_C);
 
-    C = dtpkc.Sdec(C_C);
-    mpz_class inter2 =  A+mpz_class_powm(B,2,1000000000000000);
-    state = ( C == inter2 ) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<AddPowerOf2>> gave : " << C.get_str()  <<" expected result : " <<  inter2.get_str( 10 )<< " state : " << state << " Time MU " << evalAddPow2.timeMU << " Time SU " << evalAddPow2.timeSU << " bdw MU " << evalAddPow2.bdwMU << " bdw SU " << evalAddPow2.bdwSU << endl;
-    if (  C != inter2 ) cptF++;
-
-/**
-* Test EvalTestStandardDiv
-*/
-    cpt++;
-    mpz_class i1, i2, i3;
-    i1.set_str("100000000",10);
-    i2.set_str("100",10);
-    i3.set_str("200",10);
-    EvalStandardDiv evalStadardDiv(dtpkc.enc(i1,pkey),dtpkc.enc(i2,pkey),dtpkc.enc(i3,pkey), dtpkc);
-    C_C = evalStadardDiv.EvalStandardDiv_U1_step3(evalStadardDiv.EvalStandardDiv_U2_step2(evalStadardDiv.EvalStandardDiv_U1_step1()));
-
-    C = dtpkc.Sdec(C_C);
-    int l = sqrt(1000000-pow(200,2));
-    state = ( C == l) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<standard div>> gave : " << C.get_str() <<" expected result = " << l << " state : " << state << " Time MU " << evalStadardDiv.timeMU << " Time SU " << evalStadardDiv.timeSU << " bdw MU " << evalStadardDiv.bdwMU << " bdw SU " << evalStadardDiv.bdwSU << endl;
-    if (C != l) cptF++;
 
 /**
 * Test EvalThreashold
 **/
 
+        mpz_class i1, i2;
 
-    cpt++;
-
-    i1.set_str("1000",10);
-    i2.set_str("280",10);
-    double x = 0.7;
-    EvalThreashold evalThreashold(dtpkc.enc(i1,pkey),dtpkc.enc(i2,pkey),x, dtpkc);
-    C_C= evalThreashold.eval();
+        i1.set_str("1000", 10);
+        i2.set_str("280", 10);
+        double x = 0.7;
+        EvalThreashold evalThreashold(dtpkc.enc(i1, pkey), dtpkc.enc(i2, pkey), x, dtpkc);
+        C_C = evalThreashold.eval();
 
-    C = dtpkc.Sdec(C_C);
-    double m = (1000+280*NormalCDFInverse(x))*100;
-    state = ( C-m<300 )  ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<EvalTh>> gave : " << C.get_str() << " expected result =" << m << " state : " << state << " Time MU " << evalThreashold.timeMU << " Time SU " << evalThreashold.timeSU << " bdw MU " << evalThreashold.bdwMU << " bdw SU " << evalThreashold.bdwSU << endl;
-    if ( C-m>300 ) cptF++;
 
 
-    /**
-* Test EvalDiv100
+/**
+* Test Sigmoid
 */
-    cpt ++;
-    EvalDiv100 div2(C_A,C_B,dtpkc);
-    std::vector <DTPKC::Cipher> res3 = div2.EvalDiv_U1_step1();
-    C_C=div2.EvalDiv_U1_step3(div2.EvalDiv_U2_step2(res3[0],res3[1],res3[2],res3[3]));
-    C=dtpkc.Sdec(C_C);
-
-    state = (100*A/B == C) ? " passed":" failed";
-    cout<<"Test(" << cpt << ") <<EvalDiv100> gave : " << C.get_str() << "expected result " << 100*A/B << " state :" << state << endl;
-    if ( 100*A/B != C ) cptF++;
-
-    /**
-    * Test Sigmoid
-    */
-
-    x=2;
-    Cipher C_x = dtpkc.enc(x,dtpkc.pkw);
-    C_x.sign=0;
-    cpt ++;
-    EvalSigmoid evalSigmoid(C_x,100,dtpkc);
-    vector<Cipher> in = evalSigmoid.EvalSig_U1_step1();
-    C_C=evalSigmoid.EvalSig_U1_step3(evalSigmoid.EvalSig_U2_step2(in[0],in[1]));
-    C=dtpkc.Sdec(C_C);
-
-    state = (abs(int(evalSigmoid.sigmoid(x,100)*100- C.get_ui())) < 300 ) ? " passed":" failed";
-
-    if (abs(int(evalSigmoid.sigmoid(x,100)*100-C.get_ui())) > 300 ) cptF++;
-
-    cout<<"Test(" << cpt << ") <<Sigmoid> gave : " << C.get_str() << " expected result " << evalSigmoid.sigmoid(-x,100)<< " state :" << state << " Time MU " << evalSigmoid.timeMU << " Time SU " << evalSigmoid.timeSU << " bdw MU " << evalSigmoid.bdwMU << " bdw SU " << evalSigmoid.bdwSU << endl;
 
+        x = 2;
+        Cipher C_x = dtpkc.enc(x, dtpkc.pkw);
+        C_x.sign = 0;
+        cpt++;
+        EvalSigmoid evalSigmoid(C_x, 100, dtpkc);
+        vector<Cipher> in = evalSigmoid.EvalSig_U1_step1();
+        C_C = evalSigmoid.EvalSig_U1_step3(evalSigmoid.EvalSig_U2_step2(in[0], in[1]));
+        C = dtpkc.Sdec(C_C);
 
 
-    /**
-  * Test Expo
-  */
-
-    cpt ++;
-    EvalExpo evalExpo (C_A,100,dtpkc);
-    vector<Cipher> in_ = evalExpo.EvalSig_U1_step1();
-    C_C=evalExpo.EvalSig_U1_step3(evalExpo.EvalSig_U2_step2(in_[0],in_[1]));
-    C=dtpkc.Sdec(C_C);
 
-    //state = (abs(int(evalSigmoid.sigmoid(x,100)*100- C.get_ui())) < 300 ) ? " passed":" failed";
+/**
+* Test Expo
+*/
 
-    //if (abs(int(evalSigmoid.sigmoid(x,100)*100-C.get_ui())) > 300 ) cptF++;
+        cpt++;
+        EvalExpo evalExpo(C_A, 100, dtpkc);
+        vector<Cipher> in_ = evalExpo.EvalSig_U1_step1();
+        C_C = evalExpo.EvalSig_U1_step3(evalExpo.EvalSig_U2_step2(in_[0], in_[1]));
+        C = dtpkc.Sdec(C_C);
 
-    cout<<"Test(" << cpt << ") <<Expo> gave : " << " expected result " << " state :" << state << " Time MU " << evalExpo.timeMU << " Time SU " << evalExpo.timeSU << " bdw MU " << evalExpo.bdwMU << " bdw SU " << evalExpo.bdwSU << endl;
+/**
+* Test Log
+*/
 
+        x = 194;
+        C_x = dtpkc.enc(x, dtpkc.pkw);
+        C_x.sign = 1;
+        cpt++;
+        EvalLog evalLog(C_x, 10000, dtpkc);
+        in = evalLog.EvalLog_U1_step1();
+        C_C = evalLog.EvalLog_U1_step3(evalLog.EvalLog_U2_step2(in[0], in[1]));
+        C = dtpkc.Sdec(C_C);
+
+        /**
+         * Testing the dot product protocol
+         */
+
+
+        vector<mpz_class> av, bv, cv;
+        int alpha = 20;
+        mpz_class alpha2 = 20;
+
+        av.push_back(0);
+        av.push_back(0);
+        av.push_back(0);
+        av.push_back(0);
+        av.push_back(0);
+        av.push_back(0);
+        av.push_back(0);
+        av.push_back(0);
+
+        bv.push_back(30);
+        bv.push_back(3);
+        bv.push_back(1);
+        bv.push_back(3000);
+        bv.push_back(20);
+        bv.push_back(15);
+        bv.push_back(17);
+        bv.push_back(200);
+
+
+        cv.push_back(15);
+        cv.push_back(-3);
+        cv.push_back(10);
+        cv.push_back(30);
+        cv.push_back(-10);
+        cv.push_back(-105);
+        cv.push_back(107);
+        cv.push_back(4200);
+
+        vector<Cipher> C_av, C_bv, C_cv;
+        mpz_class output = 0;
+        mpz_class output2 = 0;
+        for (int i = 0; i < 8; i++) {
+            C_av.push_back(dtpkc.enc(av[i], dtpkc.pkw));
+            C_bv.push_back(dtpkc.enc(bv[i], dtpkc.pkw));
+            C_cv.push_back(dtpkc.enc(cv[i], dtpkc.pkw));
+            output = output + alpha2 * (av[i] - bv[i]) * cv[i];
+            output2 = output2 + cv[i] * bv[i];
+        }
+
+
+        EvalDotProd evalDotProd(C_cv, C_bv, C_bv.size(), dtpkc);
+        C_C = evalDotProd.EvalDotProd_U1_step3(evalDotProd.EvalDotProd_U2_step2(evalDotProd.EvalDotProd_U1_step1()));
+        C = dtpkc.Sdec(C_C);
 
 
-    //////////////////////
-    x=194;
-    C_x = dtpkc.enc(x,dtpkc.pkw);
-    C_x.sign=1;
-    cpt ++;
-    EvalLog evalLog(C_x,10000,dtpkc);
-    in = evalLog.EvalLog_U1_step1();
-    C_C=evalLog.EvalLog_U1_step3(evalLog.EvalLog_U2_step2(in[0],in[1]));
-    C=dtpkc.Sdec(C_C);
+/**
+ * Summary
+ */
 
-    state = (abs(log(1+x)*100- C.get_ui()) < 300 ) ? " passed":" failed";
 
-    if (abs(log(1+x)*100-C.get_ui()) > 300 ) cptF++;
 
-    cout<<"Test(" << cpt << ") <<EvalLog> gave : " << C.get_str() << " expected result " <<log(10000+x)*10000<< " state :" << state << " Time MU " << evalLog.timeMU << " Time SU " << evalLog.timeSU << " bdw MU " << evalLog.bdwMU << " bdw SU " << evalLog.bdwSU << endl;
+        timeMU_SKS += skeySwitch.timeMU; timeSU_SKS += skeySwitch.timeSU; bdwMU_SKS +=skeySwitch.bdwMU; bdwSU_SKS +=skeySwitch.bdwSU;
+        timeMU_SE += evalEntropy.timeMU; timeSU_SE += evalEntropy.timeSU; bdwMU_SE +=evalEntropy.bdwMU; bdwSU_SE +=evalEntropy.bdwSU;
+        timeMU_STS += evalThreashold.timeMU; timeSU_STS += evalThreashold.timeSU; bdwMU_STS +=evalThreashold.bdwMU; bdwSU_STS +=evalThreashold.bdwSU;
+        timeMU_SHBC += evalHBound.timeMU; timeSU_SHBC += evalHBound.timeSU; bdwMU_SHBC +=evalHBound.bdwMU; bdwSU_SHBC +=evalHBound.bdwSU;
+        timeMU_SSig += evalSigmoid.timeMU; timeSU_SSig += evalSigmoid.timeSU; bdwMU_SSig +=evalSigmoid.bdwMU; bdwSU_SSig +=evalSigmoid.bdwSU;
+        timeMU_SDP += evalDotProd.timeMU; timeSU_SDP += evalDotProd.timeSU; bdwMU_SDP +=evalDotProd.bdwMU; bdwSU_SDP +=evalDotProd.bdwSU;
+        timeMU_SD += div.timeMU; timeSU_SD += div.timeSU; bdwMU_SD +=div.bdwMU; bdwSU_SD +=div.bdwSU;
+        timeMU_SM += e1.timeMU; timeSU_SM += e1.timeSU; bdwMU_SM +=e1.bdwMU; bdwSU_SM +=e1.bdwSU;
+        timeMU_SC += evalCmp.timeMU; timeSU_SC += evalCmp.timeSU; bdwMU_SC +=evalCmp.bdwMU; bdwSU_SC +=evalCmp.bdwSU;
+        timeMU_SLog += evalLog.timeMU; timeSU_SLog += evalLog.timeSU; bdwMU_SLog +=evalLog.bdwMU; bdwSU_SLog +=evalLog.bdwSU;
+        timeMU_SSqrt += evalsqrt.timeMU; timeSU_SSqrt += evalsqrt.timeSU; bdwMU_SSqrt +=evalsqrt.bdwMU; bdwSU_SSqrt +=evalsqrt.bdwSU;
+        timeMU_SExpo += evalExpo.timeMU; timeSU_SExpo += evalExpo.timeSU; bdwMU_SExpo +=evalExpo.bdwMU; bdwSU_SExpo +=evalExpo.bdwSU;
+        timeMU_SPU += evalProba.timeMU; timeSU_SPU += evalProba.timeSU; bdwMU_SPU +=evalProba.bdwMU; bdwSU_SPU +=evalProba.bdwSU;
 
-    /**
-     * Testing the LRUpdate protocol
-     */
 
-    cpt ++;
-    vector<mpz_class> av, bv, cv;
-    int alpha = 20;
-    mpz_class alpha2 = 20;
-
-    av.push_back(0);
-    av.push_back(0);
-    av.push_back(0);
-    av.push_back(0);
-    av.push_back(0);
-    av.push_back(0);
-    av.push_back(0);
-    av.push_back(0);
-
-    bv.push_back(30);
-    bv.push_back(3);
-    bv.push_back(1);
-    bv.push_back(3000);
-    bv.push_back(20);
-    bv.push_back(15);
-    bv.push_back(17);
-    bv.push_back(200);
-
-
-    cv.push_back(15);
-    cv.push_back(-3);
-    cv.push_back(10);
-    cv.push_back(30);
-    cv.push_back(-10);
-    cv.push_back(-105);
-    cv.push_back(107);
-    cv.push_back(4200);
-
-    vector<Cipher> C_av, C_bv, C_cv;
-    mpz_class output =0;
-    mpz_class output2 =0;
-    for(int i=0; i < 8; i++)
-    {
-        C_av.push_back(dtpkc.enc(av[i],dtpkc.pkw));
-        C_bv.push_back(dtpkc.enc(bv[i],dtpkc.pkw));
-        C_cv.push_back(dtpkc.enc(cv[i],dtpkc.pkw));
-        output = output +  alpha2 * (av[i]-bv[i])*cv[i];
-        output2 = output2 + cv[i]*bv[i];
     }
 
 
-    EvalLrUpdate evalLrUpdate(C_av, C_bv, C_cv ,alpha, dtpkc);
-    C_C = evalLrUpdate.EvalLrUpdate_U1_step3(evalLrUpdate.EvalLrUpdate_U2_step2(evalLrUpdate.EvalLrUpdate_U1_step1()));
-    C =  dtpkc.Sdec(C_C);
-    if ( dtpkc.n - C < 10000000000000 ) C= 0 - (dtpkc.n - dtpkc.Sdec(C_C));
-    else
-        state = (abs(int(output.get_ui()- C.get_ui())) < 3 ) ? " passed":" failed";
-
-    if (abs(int(output.get_ui()- C.get_ui())) > 3 ) cptF++;
-
-    cout<<"Test(" << cpt << ") <<LRupdate> gave : " << C.get_str() << " expected result " << output << " state :" << state << endl;
-
-
-    EvalDotProd evalDotProd(C_cv, C_bv , C_bv.size(), dtpkc);
-    C_C = evalDotProd.EvalDotProd_U1_step3(evalDotProd.EvalDotProd_U2_step2(evalDotProd.EvalDotProd_U1_step1()));
-    C =  dtpkc.Sdec(C_C);
-    if ( dtpkc.n - C < 10000000000000 ) C= 0 - (dtpkc.n - dtpkc.Sdec(C_C));
-    else
-        state = (abs(int(output2.get_ui()- C.get_ui())) < 3 ) ? " passed":" failed";
-
-    if (abs(int(output2.get_ui()- C.get_ui())) > 3 ) cptF++;
-
-    cout<<"Test(" << cpt << ") <<Dot Product> gave : " << C.get_str() << " expected result " << output2 << " state :" << state << " Time MU " << evalDotProd.timeMU << " Time SU " << evalDotProd.timeSU << " bdw MU " << evalDotProd.bdwMU << " bdw SU " << evalDotProd.bdwSU << endl;
-    //cout << dtpkc.n << endl;
-
-/**
- * Summary
- */
-
-        cout <<"***************************" << endl;
-        cout << "Total tests run : " << cpt << " Failed : " << cptF << endl;
-        cout <<"***************************" << endl;
-
+    timeMU_SKS /=N; timeSU_SKS /=N; bdwMU_SKS /=N; bdwSU_SKS /=N;
+    timeMU_SE /=N; timeSU_SE /=N; bdwMU_SE /=N; bdwSU_SE /=N;
+    timeMU_STS /=N; timeSU_STS /=N; bdwMU_STS /=N; bdwSU_STS /=N;
+    timeMU_SHBC /=N; timeSU_SHBC /=N; bdwMU_SHBC /=N; bdwSU_SHBC /=N;
+    timeMU_SSig /=N; timeSU_SSig /=N; bdwMU_SSig /=N; bdwSU_SSig /=N;
+    timeMU_SDP /=N; timeSU_SDP /=N; bdwMU_SDP /=N; bdwSU_SDP /=N;
+    timeMU_SD /=N; timeSU_SD /=N; bdwMU_SD /=N; bdwSU_SD /=N;
+    timeMU_SM /=N; timeSU_SM /=N; bdwMU_SM /=N; bdwSU_SM /=N;
+    timeMU_SC /=N; timeSU_SC /=N; bdwMU_SC /=N; bdwSU_SC /=N;
+    timeMU_SLog /=N; timeSU_SLog /=N; bdwMU_SLog /=N; bdwSU_SLog/=N;
+    timeMU_SSqrt /=N; timeSU_SSqrt /=N; bdwMU_SSqrt /=N; bdwSU_SSqrt /=N;
+    timeMU_SExpo /=N; timeSU_SExpo /=N; bdwMU_SExpo /=N; bdwSU_SExpo /=N;
+    timeMU_SPU /=N; timeSU_SPU/=N; bdwMU_SPU /=N; bdwSU_SPU /=N;
+
+    cout << " timeMU_SKS= " << timeMU_SKS << " timeSU_SKS= " << timeSU_SKS << " bdwMU_SKS= " << bdwMU_SKS  << " bdwSU_SKS= "<<  bdwSU_SKS<<  endl;
+    cout << " timeMU_SE= " << timeMU_SE << " timeSU_SE= " << timeSU_SE << " bdwMU_SE= " << bdwMU_SE  << " bdwSU_SE= "<<  bdwSU_SE <<  endl;
+    cout << " timeMU_STS= " << timeMU_STS << " timeSU_STS= " << timeSU_STS << " bdwMU_STS= " << bdwMU_STS  << " bdwSU_STS= "<<  bdwSU_STS <<  endl;
+    cout << " timeMU_SHBC= " << timeMU_SHBC << " timeSU_SHBC= " << timeSU_SHBC << " bdwMU_SHBC= " << bdwMU_SHBC  << " bdwSU_SHBC= "<<  bdwSU_SHBC <<  endl;
+    cout << " timeMU_SSig= " << timeMU_SSig << " timeSU_SSig= " << timeSU_SSig << " bdwMU_SSig= " << bdwMU_SSig  << " bdwSU_SSig= "<<  bdwSU_SSig <<  endl;
+    cout << " timeMU_SDP= " << timeMU_SDP << " timeSU_SDP= " << timeSU_SDP << " bdwMU_SDP= " << bdwMU_SDP  << " bdwSU_SDP= "<<  bdwSU_SDP <<  endl;
+    cout << " timeMU_SD= " << timeMU_SD << " timeSU_SD= " << timeSU_SD << " bdwMU_SD= " << bdwMU_SD  << " bdwSU_SD= "<<  bdwSU_SD <<  endl;
+    cout << " timeMU_SM= " << timeMU_SM << " timeSU_SM= " << timeSU_SM << " bdwMU_SM= " << bdwMU_SM  << " bdwSU_SM= "<<  bdwSU_SM <<  endl;
+    cout << " timeMU_SC= " << timeMU_SC << " timeSU_SC= " << timeSU_SC << " bdwMU_SC= " << bdwMU_SC  << " bdwSU_SC= "<<  bdwSU_SC <<  endl;
+    cout << " timeMU_SLog= " << timeMU_SLog << " timeSU_SLog= " << timeSU_SLog << " bdwMU_SLog= " << bdwMU_SC  << " bdwSU_SLog= "<<  bdwSU_SLog <<  endl;
+    cout << " timeMU_SExpo= " << timeMU_SExpo << " timeSU_SExpo= " << timeSU_SExpo << " bdwMU_SExpo= " << bdwMU_SExpo  << " bdwSU_SExpo= "<<  bdwSU_SExpo<<  endl;
+    cout << " timeMU_SSqrt= " << timeMU_SSqrt << " timeSU_SSqrt= " << timeSU_SSqrt << " bdwMU_SSqrt= " << bdwMU_SSqrt  << " bdwSU_SExpo= "<<  bdwSU_SSqrt<<  endl;
+    cout << " timeMU_SPU= " << timeMU_SPU << " timeSU_SPU= " << timeSU_SPU << " bdwMU_SPU= " << bdwMU_SPU  << " bdwSU_SPU= "<<  bdwSU_SPU<<  endl;
 
     if(!deserialize) gmp_randclear(randstate);
 }
-- 
GitLab