github.com/jiajun1992/watercarver@v0.0.0-20191031150618-dfc2b17c0c4a/StadiumForWaterCarver/src/func_ver.cpp (about)

     1  /*
     2   * func_ver.cpp
     3   *
     4   *  Created on: 04.07.2012
     5   *      Author: stephaniebayer
     6   */
     7  
     8  #include "func_ver.h"
     9  #include<vector>
    10  #include "Cipher_elg.h"
    11  #include "G_q.h"
    12  #include "Mod_p.h"
    13  #include "ElGammal.h"
    14  #include "multi_expo.h"
    15  #include <fstream>
    16  
    17  #include <time.h>
    18  #include "FakeZZ.h"
    19  #include "CurvePoint.h"
    20  NTL_CLIENT
    21  
    22  #include <assert.h>
    23  
    24  extern G_q G;
    25  extern G_q H;
    26  extern Pedersen Ped;
    27  //extern ElGammal El;
    28  
    29  func_ver::func_ver() {}
    30  
    31  func_ver::~func_ver() {}
    32  
    33  void func_ver::check_Dh_op(vector<Mod_p>* c_Dh, vector<ZZ>* chal, vector<ZZ>* D_h_bar, ZZ r_Dh_bar, long win_LL, Pedersen& ped, bool& b){
    34  	Mod_p t_Dh, co_Dh;
    35  
    36  	multi_expo::multi_expo_LL(t_Dh,c_Dh, chal, win_LL);
    37  	co_Dh = ped.commit_opt(D_h_bar,r_Dh_bar);
    38  
    39  	//cout<<"D_h "<<t_Dh<<" "<<co_Dh<<endl;
    40  	b = (t_Dh == co_Dh);
    41  }
    42  
    43  
    44  void func_ver::check_D_op(Mod_p c_D0, Mod_p c_z, vector<Mod_p>* c_A, vector<Mod_p>* c_B, vector<ZZ>* chal_1, ZZ chal_2, vector<ZZ>* A_bar, ZZ r_A_bar, long n, Pedersen& ped, bool& b){
    45  	int i;
    46  	Mod_p t_D, co_D, temp, inv;
    47  	long m = c_A->size()-1;
    48  	ZZ ord = H.get_ord();
    49  	vector<ZZ>* v_1 = new vector<ZZ>(n);
    50  
    51  	t_D = c_D0;
    52  	Mod_p::inv(inv, c_z);
    53  	for (i=1; i<m;i++){
    54  		Mod_p::expo(temp,c_A->at(i),chal_2);
    55  		Mod_p::mult(temp, temp,c_B->at(i));
    56  		Mod_p::mult(temp,temp,inv);
    57  		Mod_p::expo(temp, temp, chal_1->at(i-1));
    58  		Mod_p::mult(t_D,t_D,temp);
    59  	}
    60  	for(i=0; i<n;i++){
    61  		NegateMod(v_1->at(i),to_ZZ(1),ord);
    62  	}
    63  	temp=ped.commit_opt(v_1,to_ZZ(0));
    64  	Mod_p::expo(temp, temp, chal_1->at(m-1));
    65  	Mod_p::mult(t_D,t_D,temp);
    66  	co_D = ped.commit_opt(A_bar, r_A_bar);
    67  	//cout<<"D "<<t_D<<" "<<co_D<<endl;
    68  	delete v_1;
    69  	b = (t_D == co_D);
    70  }
    71  
    72  
    73  void func_ver::check_Ds_op(vector<Mod_p>* c_Ds, vector<Mod_p>* c_Dh, Mod_p c_Dm, vector<ZZ>* chal_1, vector<ZZ>* chal_2, vector<ZZ>* Ds_bar, ZZ r_Ds_bar, Pedersen& ped, bool& b){
    74  	long i,l;
    75  	long m= c_Ds->size()-1;
    76  	Mod_p t_Ds, co_Ds, temp, temp_1;
    77  
    78  	l=m-1;
    79  	for(i=0; i<l; i++){
    80  		Mod_p::expo(c_Ds->at(i),c_Dh->at(i), chal_1->at(i));
    81  	}
    82  	if(m>1){
    83  		Mod_p::expo(temp, c_Dh->at(1), chal_1->at(0));
    84  		for(i=1;i<l; i++){
    85  			Mod_p::expo(temp_1,c_Dh->at(i+1), chal_1->at(i));
    86  			Mod_p::mult(temp,temp,temp_1);
    87  		}
    88  		c_Ds->at(l)=temp;
    89  	}
    90  	else{
    91             // TODO this is never called right?
    92            assert(false);
    93  		// c_Ds->at(l)=Mod_p(1,G.get_mod());
    94  	}
    95  
    96  	c_Ds->at(m)=c_Dm;
    97  	Mod_p::expo(t_Ds, c_Ds->at(0),chal_2->at(m-1));
    98  	for(i=1; i<m; i++){
    99  		Mod_p::expo(temp, c_Ds->at(i), chal_2->at(m-1-i));
   100  		Mod_p::mult(t_Ds, t_Ds,temp);
   101  	}
   102  	Mod_p::mult(t_Ds,t_Ds,c_Ds->at(m));
   103  	co_Ds = ped.commit_opt(Ds_bar, r_Ds_bar);
   104  	//cout<<"Ds "<<t_Ds<<" "<<co_Ds<<endl;
   105  	b = (t_Ds == co_Ds);
   106  }
   107  
   108  void func_ver::check_Dl_op(vector<Mod_p>* c_Dl, vector<ZZ>* chal, vector<ZZ>* A_bar, vector<ZZ>* Ds_bar, vector<ZZ>*  chal_1, ZZ r_Dl_bar, Pedersen& ped, bool& b){
   109  	long i;
   110  	Mod_p t_Dl, co_Dl, temp;
   111  	ZZ temp_1;
   112  	long l = c_Dl->size();
   113  	long pos = (l-1)/2+1;
   114  	ZZ mod = G.get_mod();
   115  
   116  	t_Dl = c_Dl->at(0);
   117  	for(i=1; i<l; i++){
   118  		Mod_p::expo(temp, c_Dl->at(i),chal->at(i-1));
   119  		//Mod_p::mult(t_Dl,t_Dl, temp);
   120  		t_Dl = t_Dl*temp;
   121  	}
   122  	temp_1=Functions::bilinearMap(A_bar,Ds_bar,chal_1);
   123  	co_Dl =ped.commit_sw(temp_1,r_Dl_bar);
   124  	//cout<<"Dl "<<t_Dl<<" "<<co_Dl<<endl;
   125  
   126  	temp= Mod_p(curve_zeropoint(), mod);
   127  	b = ((t_Dl==co_Dl) & (c_Dl->at(pos)==temp));
   128  }
   129  
   130  
   131  void func_ver::check_d_op(vector<Mod_p>* c_Dh, Mod_p c_d, vector<ZZ>* chal, vector<ZZ>* d_bar, ZZ r_d_bar, Pedersen& ped, bool& b){
   132  	Mod_p t_d, co_d, temp;
   133  	long m = c_Dh->size();
   134  	Mod_p::expo(temp, c_Dh->at(m-1), chal->at(0));
   135  	Mod_p::mult(t_d, temp, c_d);
   136  	co_d = ped.commit_opt(d_bar, r_d_bar);
   137  	//cout<<"d "<<t_d<<" "<<co_d<<endl;
   138  	b = (t_d==co_d);
   139  }
   140  
   141  
   142  void func_ver::check_Delta_op(Mod_p c_dh, Mod_p c_Delta, vector<ZZ>* chal, vector<ZZ>* Delta_bar, vector<ZZ>* d_bar, ZZ r_Delta_bar, ZZ chal_1, ZZ chal_2, ZZ chal_3, Pedersen& ped, bool& b){
   143  	long i,j;
   144  	Mod_p t_Delta, co_Delta, temp;
   145  	ZZ t_1, t_2, t_3, prod, chal_temp;
   146  	ZZ ord = H.get_ord();
   147  	long m = (chal->size()-1)/2;
   148  	long n = Delta_bar->size();
   149  	vector<ZZ>* Delta_temp=0;
   150  
   151  	Mod_p::expo(temp, c_dh, chal->at(0));
   152  	Mod_p::mult(t_Delta, temp, c_Delta);
   153  
   154  	Delta_temp = new vector<ZZ>(n-1);
   155  	t_3= chal->at(0);
   156  	for(i=0; i<n-1; i++){
   157  		MulMod(t_1, Delta_bar->at(i), d_bar->at(i+1), ord);
   158  		MulMod(t_2, t_3, Delta_bar->at(i+1),ord);
   159  		SubMod(Delta_temp->at(i), t_2, t_1, ord);
   160  	}
   161  
   162  	co_Delta = ped.commit_opt(Delta_temp, r_Delta_bar);
   163  
   164  	delete Delta_temp;
   165  	//cout<<"Delta "<<t_Delta<<" "<<co_Delta<<endl;
   166  
   167  	prod = to_ZZ(1);
   168  	chal_temp =to_ZZ(1);
   169  	for(i=1; i<=m; i++){
   170  		for(j=1; j<=n; j++){
   171  			MulMod(chal_temp, chal_temp, chal_1,ord);
   172  			SubMod(t_1, chal_temp, chal_2,ord);
   173  			t_3 = n*(i-1)+j;
   174  			MulMod(t_3,t_3, chal_3, ord);
   175  			AddMod(t_1,t_1, t_3, ord);
   176  			MulMod(prod,prod, t_1, ord);
   177  		}
   178  	}
   179  	MulMod(prod, prod, chal->at(0), ord);
   180  
   181  	//cout<<"prod "<<prod<<" "<<Delta_bar->at(n-1)<<endl;
   182  	//cout<<d_bar->at(0)<<" "<<Delta_bar->at(0)<<endl;
   183  	b = false;
   184  	if(t_Delta ==co_Delta)
   185  		if((prod ==Delta_bar->at(n-1)) & (d_bar->at(0)==Delta_bar->at(0))){
   186  			b = true;
   187  		//return 1;
   188  	}
   189  	
   190  	//return 0;
   191  }
   192  
   193  void func_ver::fill_vector(vector<ZZ>* t){
   194  	ZZ temp;
   195  	ZZ ord = H.get_ord();
   196  	temp = RandomBnd(ord);
   197  	return fill_vector(t, temp);
   198  }
   199  
   200  void func_ver::fill_vector(vector<ZZ>* t, ZZ& challenge) {
   201  	long i,l;
   202  	ZZ ord = H.get_ord();
   203  	l= t->size();
   204  	t->at(0)=challenge;
   205  	for(i=1; i<l; i++){
   206  		MulMod(t->at(i),t->at(i-1),challenge, ord);
   207  	}
   208  }
   209  
   210  void func_ver::fill_x8(vector<ZZ>* chal_x8, vector<vector<long>* >* basis_chal_x8, vector<ZZ>* mul_chal_x8, long omega, ZZ& chal){
   211  	long i, l;
   212  	//ZZ chal;
   213  	ZZ ord = H.get_ord();
   214  	long num_b= NumBits(ord);
   215  
   216  	l= chal_x8->size();
   217  	//chal = RandomBnd(ord);
   218  
   219  	chal_x8->at(0)= chal;
   220  	basis_chal_x8->at(0) = multi_expo::to_basis(to_ZZ(1),num_b, omega);
   221  	basis_chal_x8->at(1) = multi_expo::to_basis(chal_x8->at(0),num_b, omega);
   222  
   223  	mul_chal_x8->at(0) =1;
   224  	mul_chal_x8->at(1) =chal_x8->at(0);
   225  
   226  	for (i = 1; i<l; i++){
   227  		 MulMod(chal_x8->at(i),chal, chal_x8->at(i-1), ord);
   228  		 basis_chal_x8->at(i+1) = multi_expo::to_basis(chal_x8->at(i),num_b, omega);
   229  		 mul_chal_x8->at(i+1) = chal_x8->at(i);
   230  	}
   231  }