circuit_scalar_product.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "circuit_scalar_product.hpp"
  2. void circuit_scalar_product(PublicKey public_key, PrivateKey private_key)
  3. {
  4. unsigned long graine_faible_time;
  5. graine_faible_time = time(NULL);
  6. srand((unsigned int)graine_faible_time); //cast explicite pour être propre
  7. // longueur des vecteurs n
  8. int n=5;
  9. deque<bool> clair_1(n),clair_2(n);
  10. for (unsigned int i=0; i<clair_1.size();i++)
  11. {
  12. clair_1[i]=rand()%2;
  13. cout << "clair_1[" << i << "] = " << clair_1[i] << endl;
  14. clair_2[i]=rand()%2;
  15. cout << "clair_2[" << i << "] = " << clair_2[i] << endl;
  16. jump;
  17. }
  18. // chiffrement vecteur binaire 1
  19. BitEvalL1<curvepoint_fp_t> A[n];
  20. for (unsigned int i=0; i<clair_1.size();i++) //pour chaque bit
  21. {
  22. chiffrement(A[i],clair_1[i],public_key);
  23. }
  24. // chiffrement vecteur binaire 2
  25. BitEvalL1<twistpoint_fp2_t> B[n];
  26. for (unsigned int i=0; i<clair_2.size();i++) //pour chaque bit
  27. {
  28. chiffrement(B[i],clair_2[i],public_key);
  29. }
  30. // évaluation produit scalaire
  31. BitEvalL2 evalue, C[n];
  32. int scalar_product=0;
  33. for (unsigned int i=0; i<clair_1.size();i++) //pour chaque bit
  34. {
  35. C[i]=multiplicationL1(A[i],B[i],public_key);
  36. evalue=additionL2(evalue,C[i],public_key);
  37. }
  38. // déchiffrement de l'évalué (somme de n chiffrés L1)
  39. F2 evalue_dechiffre=0;
  40. dechiffrementL2(evalue_dechiffre,evalue,private_key);
  41. zout (evalue_dechiffre); // produit scalaire modulo 2
  42. for (unsigned int i=0; i<clair_1.size();i++) //pour chaque bit
  43. {
  44. dechiffrementL2(evalue_dechiffre,C[i],private_key);
  45. scalar_product+=evalue_dechiffre;
  46. }
  47. zout(scalar_product);
  48. }