github.com/jiajun1992/watercarver@v0.0.0-20191031150618-dfc2b17c0c4a/StadiumForWaterCarver/src/func_pro.cpp (about) 1 /* 2 * func_pro.cpp 3 * 4 * Created on: 05.07.2012 5 * Author: stephaniebayer 6 */ 7 8 #include "func_pro.h" 9 #include "Cipher_elg.h" 10 #include "G_q.h" 11 #include "Mod_p.h" 12 #include "Functions.h" 13 #include "ElGammal.h" 14 #include "multi_expo.h" 15 #include <stdio.h> 16 #include <time.h> 17 #include <vector> 18 #include <fstream> 19 20 #include "FakeZZ.h" 21 NTL_CLIENT 22 23 extern G_q G; 24 extern G_q H; 25 /*extern ElGammal El; 26 extern double time_rw_p; 27 extern double time_cm; 28 extern long mu; 29 extern long mu_h; 30 extern long m_r;*/ 31 32 func_pro::func_pro() {} 33 34 func_pro::~func_pro() {} 35 36 37 //Generates a matrix, containing the values 1 to N ordered 38 void func_pro::set_X(vector<vector<ZZ>*>* X, long m, long n){ 39 long i,j, val; 40 vector<ZZ>* r = 0; 41 val =1; 42 for (i=0; i<m; i++ ){ 43 r = new vector<ZZ>(n); 44 for(j=0; j<n; j++){ 45 r->at(j)=val; 46 val++; 47 } 48 X->at(i)=r; 49 } 50 51 } 52 53 //Permutes the matrix X regarding the permutation pi, to set the matrix A 54 void func_pro::set_A(vector<vector<ZZ>*>* A, vector<vector<vector<long>* >* >* pi, long m, long n){ 55 long i,j, row, col; 56 vector<vector<ZZ>* >* X=0; 57 //Creates the matrixs X, containing 1 to N 58 X= new vector<vector<ZZ>* >(m); 59 set_X(X, m,n); 60 61 string name = "example.txt"; 62 /* ofstream ost; 63 ost.open(name.c_str(),ios::app); 64 ost<<"matrix A "<<endl;*/ 65 vector<ZZ>* r; 66 for (i=0; i<m; i++ ){ 67 r = new vector<ZZ>(n); 68 for(j=0; j<n; j++){ 69 row = pi->at(i)->at(j)->at(0); 70 col = pi->at(i)->at(j)->at(1); 71 r->at(j)=X->at(row)->at(col); 72 // ost<<r->at(j)<<" "; 73 } 74 // ost<<endl; 75 A->at(i)=r; 76 } 77 Functions::delete_vector(X); 78 79 } 80 81 void func_pro::set_x2(vector<vector<ZZ>* >* chal_x2, ZZ x2, long m, long n){ 82 vector<ZZ>* r= 0; 83 ZZ temp; 84 long i,j; 85 ZZ ord = G.get_ord(); 86 87 string name = "example.txt"; 88 /* ofstream ost; 89 ost.open(name.c_str(),ios::app); 90 ost<<"matrix X, challenges to power "<<endl;*/ 91 temp = to_ZZ(1); 92 for (i = 0; i<m; i++){ 93 r = new vector<ZZ>(n); 94 for(j = 0; j<n;j++){ 95 MulMod(temp, temp,x2,ord); 96 r->at(j)=temp; 97 // ost<<temp<<" "; 98 } 99 //ost<<endl; 100 chal_x2->at(i) = r; 101 } 102 103 } 104 105 void func_pro::set_B_op(vector<vector<ZZ>* >* B, vector<vector<vector<long>* >* >* basis_B, 106 vector<vector<ZZ>* >* chal_x2,vector<vector<vector<long>* >*>* pi, long omega_mulex){ 107 long i,j; 108 long row, col; 109 vector<ZZ>* r =0; 110 vector<vector<long>* >* basis_vec = 0; 111 long num_b =NumBits(G.get_ord()); 112 long m = B->size(); 113 long n = pi->at(0)->size(); 114 115 //permute the exponents in s using the permutation pi 116 for (i=0; i<m; i++ ){ 117 r = new vector<ZZ>(n); 118 119 basis_vec = new vector<vector<long>* >(n); 120 for(j=0; j<n; j++){ 121 row = pi->at(i)->at(j)->at(0); 122 col = pi->at(i)->at(j)->at(1); 123 r->at(j)=chal_x2->at(row)->at(col); 124 basis_vec->at(j) = multi_expo::to_basis(r->at(j), num_b, omega_mulex); 125 } 126 B->at(i) = r; 127 basis_B->at(i)=basis_vec; 128 } 129 130 } 131 132 void func_pro::set_B(vector<vector<ZZ>* >* B, vector<vector<ZZ>* >* chal_x2, 133 vector<vector<vector<long>* >*>* pi){ 134 long i,j; 135 long row, col; 136 vector<ZZ>* r =0; 137 long m = B->size(); 138 long n = pi->at(0)->size(); 139 140 //permute the exponents in s using the permutation pi 141 string name = "example.txt"; 142 /* ofstream ost; 143 ost.open(name.c_str(),ios::app); 144 ost<<"matrix B, permuted challenges "<<endl;*/ 145 for (i=0; i<m; i++ ){ 146 r = new vector<ZZ>(n); 147 148 for(j=0; j<n; j++){ 149 row = pi->at(i)->at(j)->at(0); 150 col = pi->at(i)->at(j)->at(1); 151 r->at(j)=chal_x2->at(row)->at(col); 152 // ost<<r->at(j)<<" "; 153 } 154 // ost<<endl; 155 B->at(i) = r; 156 } 157 158 } 159 160 void func_pro::set_D(vector<vector<ZZ>* >* D, vector<vector<ZZ>* >* A, vector<vector<ZZ>* >* B, ZZ chal_z4, ZZ chal_y4){ 161 long i, j; 162 vector<ZZ>* row; 163 ZZ temp, temp_1; 164 ZZ ord = G.get_ord(); 165 long m = A->size(); 166 long n = A->at(0)->size(); 167 168 string name = "example.txt"; 169 /* ofstream ost; 170 ost.open(name.c_str(),ios::app); 171 ost<<"set vector D = yA_ij +B_ij "<<endl;*/ 172 for (i= 0; i<m; i++){ 173 row = new vector<ZZ>(n); 174 for (j = 0; j<n; j++){ 175 MulMod(temp, chal_y4,A->at(i)->at(j),ord); 176 SubMod(temp_1, B->at(i)->at(j), chal_z4,ord); 177 AddMod(row->at(j),temp ,temp_1, ord); 178 // ost<<temp<<" "; 179 } 180 //ost<<endl; 181 D->at(i)= row; 182 } 183 184 Functions::delete_vector(A); 185 } 186 187 void func_pro::set_D_h(vector<vector<ZZ>* >* D_h, vector<vector<ZZ>* >* D){ 188 long i; 189 vector<ZZ>* row; 190 long m = D_h->size(); 191 long n = D->at(0)->size(); 192 row = new vector<ZZ>(n); 193 string name = "example.txt"; 194 /* ofstream ost; 195 ost.open(name.c_str(),ios::app); 196 ost<<"Hadamard products over D, 1 row = D_0, D_0�D_1,... "<<endl;*/ 197 for(i=0; i<n; i++){ 198 row->at(i)=D->at(0)->at(i); 199 // ost<<row->at(i)<<" "; 200 } 201 D_h->at(0)=row; 202 for( i=1; i<m;i++){ 203 row = new vector<ZZ>(n); 204 Functions::Hadamard(row, D_h->at(i-1),D->at(i)); 205 D_h->at(i)=row; 206 // ost<<endl; 207 /* for(j=0; j<n; j++){ 208 ost<<D_h->at(i)->at(j)<<" "; 209 }*/ 210 } 211 // ost<<endl; 212 213 } 214 215 void func_pro::commit_B0_op(vector<ZZ>* B_0, vector<vector<long>* >* basis_B0, ZZ &r_B0, Mod_p &c_B0, long omega_mulex, Pedersen& ped){ 216 long i,num_b; 217 ZZ ord= H.get_ord(); 218 long n = B_0->size(); 219 220 num_b = NumBits(ord); 221 r_B0 = RandomBnd(ord); 222 for (i = 0; i<n; i++){ 223 B_0 ->at(i) = RandomBnd(ord); 224 basis_B0->at(i)= multi_expo::to_basis(B_0->at(i), num_b, omega_mulex); 225 } 226 227 c_B0 = ped.commit_opt(B_0, r_B0); 228 229 } 230 231 void func_pro::set_Rb(vector<vector<ZZ>* >* B, vector<vector<ZZ>*>* R, ZZ &R_b){ 232 long i,j; 233 ZZ temp; 234 ZZ ord = H.get_ord(); 235 long m = B->size(); 236 long n = B->at(0)->size(); 237 238 string name = "example.txt"; 239 /* ofstream ost; 240 ost.open(name.c_str(),ios::app); 241 ost<<"R_b =sum sum r_ij*B_ij ";*/ 242 R_b = 0; 243 for (i = 0; i<m; i++){ 244 for (j = 0; j<n; j++){ 245 MulMod(temp, B->at(i)->at(j),R->at(i)->at(j), ord); 246 AddMod(R_b,R_b, temp ,ord); 247 } 248 } 249 //ost<<R_b<<endl; 250 } 251 252 253 void func_pro::commit_a_op(vector<ZZ>* a, vector<ZZ>* r_a, vector<Mod_p>* c_a, Pedersen& ped){ 254 long i,l; 255 ZZ ord = H.get_ord(); 256 long m = a->size()/2; 257 258 for(i= 0; i<m; i++){ 259 a->at(i) = RandomBnd(ord); 260 r_a->at(i) = RandomBnd(ord); 261 c_a->at(i) = ped.commit_sw(a->at(i),r_a->at(i)); 262 } 263 a->at(m) = to_ZZ(0); 264 r_a->at(m) = to_ZZ(0); 265 c_a->at(m) = ped.commit_sw(a->at(m),r_a->at(m)); 266 l= 2*m; 267 for(i= m+1; i<l; i++){ 268 a->at(i) = RandomBnd(ord); 269 r_a->at(i) = RandomBnd(ord); 270 c_a->at(i) = ped.commit_sw(a->at(i),r_a->at(i)); 271 } 272 } 273 274 void func_pro::set_D_s(vector<vector<ZZ>* >* D_s, vector<vector<ZZ>* >* D_h, vector<vector<ZZ>* >* D, vector<ZZ>* chal, ZZ & r_Dl_bar){ 275 long i, j, l; 276 ZZ temp; 277 ZZ ord = H.get_ord(); 278 vector<ZZ>* row=0; 279 vector<ZZ>* Ds_temp=0; 280 long m = D_h->size(); 281 long n = D_h->at(0)->size(); 282 l=m-1; 283 /* string name = "example.txt"; 284 ofstream ost; 285 ost.open(name.c_str(),ios::app);*/ 286 for(i=0; i<l; i++){ 287 temp=chal->at(i); 288 row = new vector<ZZ>(n); 289 for(j=0; j<n; j++){ 290 MulMod(row->at(j),temp, D_h->at(i)->at(j), ord ); 291 // ost<<row->at(j)<<" "; 292 } 293 D_s->at(i)=row; 294 //ost<<endl; 295 } 296 Ds_temp = new vector<ZZ>(n); 297 for(i=0; i<n;i++){ 298 Ds_temp->at(i)=0; 299 } 300 for(i=0; i<l; i++){ 301 temp = chal->at(i); 302 for(j=0; j<n; j++){ 303 MulMod(r_Dl_bar,temp, D_h->at(i+1)->at(j),ord); 304 AddMod(Ds_temp->at(j),Ds_temp->at(j),r_Dl_bar,ord); 305 // ost<<Ds_temp->at(j)<<" "; 306 } 307 } 308 //l=m-1 309 D_s->at(l)=Ds_temp; 310 //ost<<endl; 311 312 row = new vector<ZZ>(n); 313 for(i=0; i<n; i++){ 314 row->at(i)=RandomBnd(ord); 315 //ost<<row->at(i)<<" "; 316 D->at(0)->at(i) = RandomBnd(ord); 317 } 318 D_s->at(m)=row; 319 // ost<<endl; 320 /* ost<<"D(0) ist "<<endl; 321 for(i=0; i<n; i++){ 322 ost<<D->at(0)->at(i)<<" "; 323 } 324 ost<<endl;*/ 325 } 326 327 void func_pro::commit_Dl_op(vector<Mod_p>* c_Dl, vector<ZZ>* Dl, vector<ZZ>* r_Dl, vector<vector<ZZ>* >* D, vector<vector<ZZ>* >* D_s, vector<ZZ>* chal, Pedersen& ped){ 328 long i,j,l, len; 329 ZZ temp; 330 ZZ ord = H.get_ord(); 331 long m = D->size()-1; 332 333 //Calculate the D_l's 334 len = 2*m+1; 335 for (l=0; l<len; l++){ 336 temp =0; 337 for (i = 0; i<=m; i++){ 338 j = m+i-l; 339 if ((j>=0) & (j<=m)){ 340 AddMod(temp,temp,Functions::bilinearMap(D->at(i), D_s->at(j), chal), ord); 341 } 342 } 343 Dl->at(l) = temp; 344 } 345 346 //Commits to the Dls 347 for (i=0; i<len;i++){ 348 r_Dl->at(i) = RandomBnd(ord); 349 } 350 r_Dl->at(m+1)=0; 351 352 for(l = 0; l<len; l++){ 353 c_Dl->at(l)= ped.commit_sw(Dl->at(l),r_Dl->at(l)); 354 } 355 356 } 357 358 void func_pro::commit_d_op(vector<ZZ>* d, ZZ &r_d, Mod_p& c_d, Pedersen& ped){ 359 long i; 360 ZZ ord = H.get_ord(); 361 long n=d->size(); 362 363 for(i=0; i<n; i++){ 364 d->at(i)=RandomBnd(ord); 365 } 366 367 Functions::commit_op(d, r_d, c_d, ped); 368 } 369 370 void func_pro::commit_Delta_op(vector<ZZ>* Delta, vector<ZZ>* d, ZZ &r_Delta, Mod_p &c_Delta, Pedersen& ped){ 371 long i,l; 372 ZZ temp; 373 ZZ ord = H.get_ord(); 374 vector<ZZ>* Delta_temp; 375 long n = Delta->size(); 376 377 for(i=0; i<n; i++){ 378 Delta->at(i)=RandomBnd(ord); 379 } 380 Delta->at(0)=d->at(0); 381 Delta->at(n-1)=0; 382 383 l=n-1; 384 Delta_temp= new vector<ZZ>(n-1); 385 for(i=0; i<l; i++){ 386 MulMod(temp, Delta->at(i), d->at(i+1),ord); 387 NegateMod(Delta_temp->at(i), temp, ord); 388 } 389 390 Functions::commit_op(Delta_temp, r_Delta, c_Delta, ped); 391 392 delete Delta_temp; 393 } 394 395 void func_pro::commit_d_h_op(vector<vector<ZZ>* >* D_h, vector<ZZ>* d_h, vector<ZZ>* d, vector<ZZ>* Delta, ZZ & r_d_h, Mod_p &c_d_h, Pedersen& ped){ 396 long i,l; 397 ZZ temp, temp_1; 398 ZZ ord = G.get_ord(); 399 long m = D_h->size(); 400 long n = d_h->size(); 401 402 //setting the vectors to prove the product 403 d_h->at(0) = D_h->at(m-1)->at(0); 404 for(i=1;i<n;i++){ 405 MulMod(d_h->at(i), d_h->at(i-1), D_h->at(m-1)->at(i), ord); 406 } 407 408 l=n-1; 409 vector<ZZ>* d_h_temp = new vector<ZZ>(l); 410 for(i=0; i<l; i++){ 411 MulMod(temp, d_h->at(i), d->at(i+1), ord); 412 MulMod(temp_1, D_h->at(m-1)->at(i+1),Delta->at(i),ord); 413 SubMod(temp_1, Delta->at(i+1), temp_1, ord); 414 SubMod(d_h_temp->at(i), temp_1, temp, ord); 415 } 416 417 Functions::commit_op(d_h_temp, r_d_h, c_d_h, ped); 418 419 delete d_h_temp; 420 } 421 422 void func_pro::calculate_B_bar(vector<ZZ>* B_0, vector<vector<ZZ>* >* B, vector<ZZ>* chal, vector<ZZ>* B_bar){ 423 long i,j; 424 ZZ temp, temp_1; 425 ZZ ord = G.get_ord(); 426 long m = B->size(); 427 long n = B_0->size(); 428 /* string name = "example.txt"; 429 ofstream ost; 430 ost.open(name.c_str(),ios::app); 431 ost<<"B_bar ";*/ 432 for (j = 0; j<n; j++){ 433 temp= B_0->at(j); 434 for (i = 0; i<m; i++){ 435 MulMod(temp_1, B->at(i)->at(j),chal->at(i), ord); 436 AddMod(temp, temp ,temp_1, ord); 437 } 438 B_bar->at(j) = temp; 439 // ost<<temp<<" "; 440 } 441 // ost<<endl; 442 } 443 444 void func_pro::calculate_r_B_bar(vector<ZZ>* r_B, vector<ZZ>* chal, ZZ r_B0, ZZ &r_B_bar){ 445 long i; 446 ZZ temp; 447 ZZ ord = H.get_ord(); 448 long m = r_B->size(); 449 r_B_bar = r_B0; 450 451 /* string name = "example.txt"; 452 ofstream ost; 453 ost.open(name.c_str(),ios::app); 454 ost<<"r_B_bar ";*/ 455 for (i = 0; i<m; i++){ 456 MulMod(temp, r_B->at(i), chal->at(i), ord); 457 AddMod( r_B_bar, r_B_bar , temp, ord); 458 } 459 // ost<<r_B_bar<<endl; 460 } 461 462 void func_pro::calculate_a_bar(vector<ZZ>* a, vector<ZZ>* chal, ZZ & a_bar){ 463 long i; 464 ZZ temp; 465 ZZ ord = G.get_ord(); 466 long m = a->size(); 467 468 /* string name = "example.txt"; 469 ofstream ost; 470 ost.open(name.c_str(),ios::app); 471 ost<<"c_bar ";*/ 472 a_bar = a->at(0); 473 for (i = 1; i<m; i++){ 474 MulMod(temp, a->at(i),chal->at(i-1), ord); 475 AddMod(a_bar,a_bar, temp, ord); 476 } 477 // ost<<a_bar<<endl; 478 } 479 480 void func_pro::calculate_r_a_bar(vector<ZZ>* r_a, vector<ZZ>* chal, ZZ & r_a_bar){ 481 long i; 482 ZZ temp; 483 ZZ ord = G.get_ord(); 484 long m = r_a->size(); 485 486 r_a_bar= r_a->at(0); 487 for (i = 1; i<m; i++){ 488 MulMod(temp, r_a->at(i),chal->at(i-1), ord); 489 AddMod(r_a_bar,r_a_bar,temp, ord); 490 } 491 /* string name = "example.txt"; 492 ofstream ost; 493 ost.open(name.c_str(),ios::app); 494 ost<<"r_a_bar "<<r_a_bar<<endl;*/ 495 } 496 497 void func_pro::calculate_rho_a_bar(vector<ZZ>* rho_a, vector<ZZ>* chal, ZZ & rho_a_bar){ 498 long i; 499 ZZ temp; 500 ZZ ord = G.get_ord(); 501 long m = rho_a->size(); 502 503 rho_a_bar = rho_a->at(0); 504 for (i = 1; i<m; i++){ 505 MulMod (temp,rho_a->at(i),chal->at(i-1),ord); 506 AddMod(rho_a_bar, rho_a_bar, temp, ord); 507 } 508 /* string name = "example.txt"; 509 ofstream ost; 510 ost.open(name.c_str(),ios::app); 511 ost<<"r_a_bar "<<rho_a_bar<<endl;*/ 512 } 513 514 515 void func_pro::calculate_D_h_bar(vector<ZZ>* D_h_bar, vector<vector<ZZ>* >* D_h, vector<ZZ>* chal){ 516 long i,j; 517 ZZ temp, temp_1; 518 ZZ ord = G.get_ord(); 519 long m = D_h->size(); 520 long n = D_h_bar->size(); 521 /* string name = "example.txt"; 522 ofstream ost; 523 ost.open(name.c_str(),ios::app); 524 ost<<"D_h_bar ";*/ 525 for (j = 0; j<n;j++){ 526 D_h_bar->at(j) = D_h->at(0)->at(j); 527 } 528 for(i = 1; i<m; i++){ 529 temp= chal->at(i-1); 530 for (j = 0; j<n;j++){ 531 MulMod(temp_1,temp,D_h->at(i)->at(j),ord); 532 AddMod(D_h_bar->at(j), D_h_bar->at(j),temp_1, ord); 533 } 534 }/* 535 for(i=0; i<n; i++){ 536 ost<<D_h_bar->at(i)<<" "; 537 } 538 ost<<endl;*/ 539 } 540 541 void func_pro::calculate_r_Dh_bar(vector<ZZ>* r_D_h, vector<ZZ>* chal, ZZ & r_Dh_bar ){ 542 long i; 543 ZZ temp; 544 ZZ ord = G.get_ord(); 545 long m = r_D_h->size(); 546 547 r_Dh_bar= r_D_h->at(0); 548 for (i = 1;i<m;i++){ 549 MulMod(temp,chal->at(i-1),r_D_h->at(i),ord); 550 AddMod(r_Dh_bar,r_Dh_bar, temp,ord); 551 } 552 /* string name = "example.txt"; 553 ofstream ost; 554 ost.open(name.c_str(),ios::app); 555 ost<<"r_Dh_bar "<<r_Dh_bar<<endl;*/ 556 } 557 558 void func_pro::calculate_dbar_rdbar(vector<vector<ZZ>* >* D_h, vector<ZZ>* chal, vector<ZZ>* d_bar, vector<ZZ>* d, vector<ZZ>* r_D_h, ZZ r_d, ZZ & r_d_bar){ 559 long i; 560 ZZ temp, temp_1; 561 ZZ ord = G.get_ord(); 562 long m = D_h->size(); 563 long n = d_bar->size(); 564 565 /* string name = "example.txt"; 566 ofstream ost; 567 ost.open(name.c_str(),ios::app);*/ 568 temp_1 = chal->at(0); 569 // ost<<"d_bar "; 570 for(i=0; i<n; i++){ 571 MulMod(temp, temp_1, D_h->at(m-1)->at(i), ord); 572 AddMod(d_bar->at(i), temp, d->at(i), ord); 573 // ost<<d_bar->at(i)<<" "; 574 } 575 //ost<<endl; 576 MulMod(temp, temp_1, r_D_h->at(m-1), ord); 577 AddMod(r_d_bar, temp, r_d,ord); 578 //ost<<"r_d_bar "<<r_d_bar<<endl; 579 } 580 581 void func_pro::calculate_Deltabar_rDeltabar(vector<ZZ>* d_h, vector<ZZ>* chal, vector<ZZ>* Delta_bar, vector<ZZ>* Delta, ZZ r_d_h, ZZ r_Delta, ZZ & r_Delta_bar){ 582 long i; 583 ZZ temp, temp_1; 584 ZZ ord = G.get_ord(); 585 long n = Delta_bar->size(); 586 587 /* string name = "example.txt"; 588 ofstream ost; 589 ost.open(name.c_str(),ios::app);*/ 590 temp_1 = chal->at(0); 591 //ost<<"Delta_bar "; 592 for(i = 0; i<n; i++){ 593 MulMod(temp, temp_1, d_h->at(i), ord); 594 AddMod(Delta_bar->at(i),temp, Delta->at(i), ord); 595 // ost<<Delta_bar->at(i)<<" "; 596 } 597 598 // ost<<endl; 599 MulMod(temp, temp_1, r_d_h,ord); 600 AddMod(r_Delta_bar, temp, r_Delta, ord); 601 // ost<<"r_delta_bar "<<r_Delta_bar<<endl; 602 } 603 604 void func_pro::calculate_A_bar(vector<vector<ZZ>* >* D, vector<ZZ>* A_bar, vector<ZZ>* chal){ 605 long i,j; 606 ZZ ord = G.get_ord(); 607 ZZ temp, temp_1; 608 long m = D->size()-1; 609 long n = A_bar->size(); 610 611 /* string name = "example.txt"; 612 ofstream ost; 613 ost.open(name.c_str(),ios::app); 614 ost<<"A_bar ";*/ 615 for (i = 0; i<n;i++){ 616 A_bar->at(i)= D->at(0)->at(i); 617 } 618 for (i= 1; i<=m; i++){ 619 temp=chal->at(i-1); 620 for (j = 0; j<n;j++){ 621 MulMod(temp_1,D->at(i)->at(j),temp,ord); 622 AddMod(A_bar->at(j), A_bar->at(j) ,temp_1,ord); 623 } 624 } 625 /* for(i=0; i<n; i++){ 626 ost<<A_bar->at(i)<<" "; 627 } 628 ost<<endl;*/ 629 } 630 631 void func_pro::calculate_D_s_bar(vector<vector<ZZ>* >* D_s, vector<ZZ>* D_s_bar, vector<ZZ>* chal){ 632 long i,j; 633 ZZ ord = G.get_ord(); 634 ZZ temp, temp_1; 635 long m = D_s->size()-1; 636 long n = D_s_bar->size(); 637 638 temp = chal->at(m-1); 639 for (i = 0; i<n;i++){ 640 MulMod(D_s_bar->at(i), D_s->at(0)->at(i),temp,ord); 641 } 642 for (i= 1; i< m; i++){ 643 temp=chal->at(m-i-1); 644 for (j = 0; j<n;j++){ 645 MulMod( temp_1, D_s->at(i)->at(j),temp,ord); 646 AddMod(D_s_bar->at(j), D_s_bar->at(j),temp_1,ord); 647 } 648 } 649 /* string name = "example.txt"; 650 ofstream ost; 651 ost.open(name.c_str(),ios::app); 652 ost<<"D_s_bar ";*/ 653 for (i = 0; i<n; i++){ 654 AddMod(D_s_bar->at(i),D_s_bar->at(i),D_s->at(m)->at(i),ord); 655 // ost<<D_s_bar->at(i)<<" "; 656 } 657 // ost<<endl; 658 } 659 660 void func_pro::calculate_r_A_bar(ZZ r_D0, vector<ZZ>* r_A, vector<ZZ>* r_B, vector<ZZ>* chal, ZZ r_z, ZZ chal_y4, ZZ & r_A_bar){ 661 long i; 662 ZZ ord = G.get_ord(); 663 ZZ temp, temp_1; 664 long m = r_A->size()-1; 665 666 r_A_bar=r_D0; 667 for (i = 1; i<m;i++){ 668 MulMod(temp,chal_y4,r_A->at(i),ord); 669 SubMod(temp_1,r_B->at(i),r_z,ord); 670 AddMod(temp,temp,temp_1 ,ord ); 671 MulMod(temp,temp , chal->at(i-1),ord); 672 AddMod(r_A_bar, r_A_bar,temp,ord); 673 } 674 MulMod(temp,r_A->at(m),chal->at(m-1),ord); 675 AddMod(r_A_bar,r_A_bar ,temp,ord); 676 /* string name = "example.txt"; 677 ofstream ost; 678 ost.open(name.c_str(),ios::app); 679 ost<<"r_A_bar "<<r_A_bar<<endl;*/ 680 } 681 682 void func_pro::calculate_r_Ds_bar(vector<ZZ>* r_D_h, vector<ZZ>* chal_1, vector<ZZ>* chal_2, ZZ & r_Ds_bar, ZZ r_Dm){ 683 long i,l; 684 ZZ ord = G.get_ord(); 685 ZZ temp, temp_1; 686 long m = r_D_h->size(); 687 vector<ZZ>* r_D_s = new vector<ZZ>(m); 688 689 l=m-1; 690 for(i=0; i<l; i++){ 691 MulMod(r_D_s->at(i),r_D_h->at(i),chal_1->at(i),ord); 692 } 693 temp_1=0; 694 for(i=0; i<l; i++){ 695 MulMod(temp, chal_1->at(i), r_D_h->at(i+1),ord); 696 AddMod(temp_1,temp_1,temp,ord); 697 } 698 r_D_s->at(l)=temp_1; 699 700 MulMod(r_Ds_bar,r_D_s->at(0),chal_2->at(l),ord); 701 for (i = 1; i<m;i++){ 702 MulMod(temp, r_D_s->at(i) , chal_2->at(m-i-1),ord); 703 AddMod(r_Ds_bar, r_Ds_bar,temp,ord); 704 } 705 AddMod (r_Ds_bar, r_Ds_bar, r_Dm,ord); 706 /* string name = "example.txt"; 707 ofstream ost; 708 ost.open(name.c_str(),ios::app); 709 ost<<"r_Ds_bar "<<r_Ds_bar<<endl;*/ 710 delete r_D_s; 711 } 712 713 void func_pro::calculate_r_Dl_bar(vector<ZZ>* r_C, vector<ZZ>* chal, ZZ &r_Dl_bar){ 714 long i; 715 ZZ ord = G.get_ord(); 716 ZZ temp; 717 long m = r_C->size(); 718 719 r_Dl_bar = r_C->at(0); 720 for (i = 1; i<m;i++){ 721 MulMod(temp,r_C->at(i) , chal->at(i-1),ord); 722 AddMod(r_Dl_bar, r_Dl_bar,temp,ord); 723 } 724 /* string name = "example.txt"; 725 ofstream ost; 726 ost.open(name.c_str(),ios::app); 727 ost<<"r_Dl_bar"<<r_Dl_bar<<endl;*/ 728 }