multiplicationL2.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "multiplicationL2.hpp"
  2. BitEvalL4 multiplicationL2 (BitEvalL2 eval1, BitEvalL2 eval2, PublicKey public_key)
  3. {
  4. BitEvalL4 produit;
  5. //calcul de alpĥa
  6. Bipoint<curvepoint_fp_t> bipoint_curve_subgroupelt;
  7. Bipoint<twistpoint_fp2_t> bipoint_twist_subgroupelt;
  8. scalar_t lambda1, lambda2;
  9. scalar_setrandom(lambda1, bn_r);
  10. scalar_setrandom(lambda2, bn_r);
  11. bipoint_curve_subgroupelt.scalarmult_vartime(public_key.get_bipoint_curvegen(),lambda1); // calcul de u1
  12. bipoint_curve_subgroupelt.makeaffine();
  13. bipoint_twist_subgroupelt.scalarmult_vartime(public_key.get_bipoint_twistgen(),lambda2); // calcul de v1
  14. bipoint_twist_subgroupelt.makeaffine();
  15. Quadripoint factor1, factor2, factor3, factor4, factor5;
  16. //calcul de e(Enc(a1a2),Enc(1))
  17. Bipoint<curvepoint_fp_t> temp1, chiffre_produit; // les bipoints sont initialisés par défaut au bipoint à l'infini
  18. Bipoint<twistpoint_fp2_t> temp2, chiffre_1_twist;
  19. chiffrement(chiffre_produit,eval1.get_bit_masque()*eval2.get_bit_masque(), public_key);
  20. temp1=chiffre_produit;
  21. chiffrement(chiffre_1_twist,1, public_key);
  22. temp2=chiffre_1_twist;
  23. temp1.makeaffine();
  24. temp2.makeaffine();
  25. factor1=pairing(temp1,temp2);
  26. //calcul de beta2^a1
  27. if (eval1.get_bit_masque() == 1) // sinon c'est (1,1,1,1)
  28. {
  29. factor2=eval2.get_quadripoint();
  30. }
  31. //calcul de beta1^a2
  32. if (eval2.get_bit_masque() == 1) // sinon c'est (1,1,1,1)
  33. {
  34. factor3=eval1.get_quadripoint();
  35. }
  36. //calcul de e(u,v1)
  37. factor4 = pairing(public_key.get_bipoint_curve_groupelt(),bipoint_twist_subgroupelt);
  38. //calcul de e(u1,v)
  39. factor5 = pairing(bipoint_curve_subgroupelt,public_key.get_bipoint_twist_groupelt());
  40. produit.set_alpha(factor1*factor2*factor3*factor4*factor5);
  41. //calcul de beta
  42. //if (eval1.get_type() == CURVE)
  43. //{
  44. produit.set_quadripoint(eval1.get_quadripoint(),0);
  45. //}
  46. //else
  47. //{
  48. //produit.set_bipoint_twist(eval1.get_bipoint_twist());
  49. //}
  50. produit.set_quadripoint(eval2.get_quadripoint(),1);
  51. return produit;
  52. }