dechiffrementL2.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "dechiffrementL2.hpp"
  2. void dechiffrementL2(F2& bit_dechiffre, BitEvalL2 bit_chiffre, PrivateKey private_key) //valeur du log b1b2+a1b2+a2b1+s
  3. {
  4. signature;
  5. //ecris(log=b1b2+a1b2+a2b1+s);
  6. Quadripoint quadripoint_pi_T_chiffre;
  7. quadripoint_pi_T_chiffre = private_key.pi_T(bit_chiffre.get_quadripoint()); //pi_T(beta)
  8. //ecris(affichage de beta);
  9. //bit_chiffre.get_quadripoint().print();
  10. //ecris(affichage de pi_T(beta));
  11. //quadripoint_pi_T_chiffre.print(0);
  12. Quadripoint base_log, pow_log;
  13. base_log = private_key.pi_T(pairing(public_key.get_bipoint_curve_groupelt(),public_key.get_bipoint_twist_groupelt())); //pi_T(e(u,v))
  14. //ecris(affichage de pi_T(e(u,v)));
  15. //base_log.print(0);
  16. //ecris(affichage de private_key);
  17. //private_key.print();
  18. if (fp12e_isone(quadripoint_pi_T_chiffre[0]) && fp12e_isone(quadripoint_pi_T_chiffre[1]) && fp12e_isone(quadripoint_pi_T_chiffre[2]) && fp12e_isone(quadripoint_pi_T_chiffre[3]))
  19. {
  20. //cout << "cas log=0" << endl;
  21. bit_dechiffre = bit_chiffre.get_bit_masque();
  22. return;
  23. }
  24. if (quadripoint_pi_T_chiffre == base_log)
  25. {
  26. //cout << "cas log=1" << endl;
  27. bit_dechiffre = (bit_chiffre.get_bit_masque()+1)%2;
  28. return;
  29. }
  30. pow_log=base_log*base_log;
  31. //ecris(affichage de pi_T(e(u,v))^2);
  32. //pow_log.print();
  33. if (quadripoint_pi_T_chiffre == pow_log)
  34. {
  35. //cout << "cas log=2" << endl;
  36. bit_dechiffre = bit_chiffre.get_bit_masque();
  37. return;
  38. }
  39. pow_log=pow_log*base_log;
  40. //ecris(affichage de pi_T(e(u,v))^3);
  41. //pow_log.print();
  42. if (quadripoint_pi_T_chiffre == pow_log)
  43. {
  44. //cout << "cas log=3" << endl;
  45. bit_dechiffre = (bit_chiffre.get_bit_masque()+1)%2;
  46. return;
  47. }
  48. pow_log=pow_log*base_log;
  49. //ecris(affichage de pi_T(e(u,v))^4);
  50. //pow_log.print();
  51. if (quadripoint_pi_T_chiffre == pow_log)
  52. {
  53. //cout << "cas log=4" << endl;
  54. bit_dechiffre = bit_chiffre.get_bit_masque();
  55. return;
  56. }
  57. int log=4;
  58. abc;
  59. while (!(quadripoint_pi_T_chiffre == pow_log))
  60. {
  61. pow_log=pow_log*base_log;
  62. log++;
  63. //zout(log);
  64. }
  65. xyz;
  66. //zout(log);
  67. bit_dechiffre = (bit_chiffre.get_bit_masque()+ log)%2;
  68. }
  69. void dechiffrementL2(F2& bit_dechiffre, Quadripoint quadripoint, PrivateKey private_key)
  70. //routine pour les évalués de niveau 3 et 4, déchiffrement sans Catalano Fiore, calcul d'un log seulement, prend en entrée un quadripoint et non pas un évalué de niveau 2
  71. {
  72. Quadripoint quadripoint_pi_T_chiffre;
  73. quadripoint_pi_T_chiffre = private_key.pi_T(quadripoint); //pi_T(beta)
  74. Quadripoint base_log, pow_log;
  75. base_log = private_key.pi_T(pairing(public_key.get_bipoint_curve_groupelt(),public_key.get_bipoint_twist_groupelt())); //pi_T(e(u,v))
  76. if (fp12e_isone(quadripoint_pi_T_chiffre[0]) && fp12e_isone(quadripoint_pi_T_chiffre[1]) && fp12e_isone(quadripoint_pi_T_chiffre[2]) && fp12e_isone(quadripoint_pi_T_chiffre[3]))
  77. {
  78. //cout << "cas log=0" << endl;
  79. bit_dechiffre = 0;
  80. return;
  81. }
  82. if (quadripoint_pi_T_chiffre == base_log)
  83. {
  84. //cout << "cas log=1" << endl;
  85. bit_dechiffre = 1;
  86. return;
  87. }
  88. pow_log=base_log*base_log;
  89. if (quadripoint_pi_T_chiffre == pow_log)
  90. {
  91. //cout << "cas log=2" << endl;
  92. bit_dechiffre = 0;
  93. return;
  94. }
  95. pow_log=pow_log*base_log;
  96. if (quadripoint_pi_T_chiffre == pow_log)
  97. {
  98. //cout << "cas log=3" << endl;
  99. bit_dechiffre = 1;
  100. return;
  101. }
  102. pow_log=pow_log*base_log;
  103. if (quadripoint_pi_T_chiffre == pow_log)
  104. {
  105. //cout << "cas log=4" << endl;
  106. bit_dechiffre = 0;
  107. return;
  108. }
  109. int log=4;
  110. //quadripoint_pi_T_chiffre.print(0);
  111. //quadripoint_pi_T_chiffre.print(1);
  112. //quadripoint_pi_T_chiffre.print(2);
  113. //quadripoint_pi_T_chiffre.print(3);
  114. //abc;
  115. while (!(quadripoint_pi_T_chiffre == pow_log))
  116. {
  117. pow_log=pow_log*base_log;
  118. log++;
  119. }
  120. //xyz;
  121. //zout(log);
  122. bit_dechiffre = log%2;
  123. }