Bipoint.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. #include "Bipoint.hpp"
  2. void Bipoint<curvepoint_fp_t>::print() const
  3. {
  4. curvepoint_fp_print(stdout,point[0]);
  5. jump;
  6. curvepoint_fp_print(stdout,point[1]);
  7. JUMP;
  8. }
  9. void Bipoint<twistpoint_fp2_t>::print() const
  10. {
  11. twistpoint_fp2_print(stdout,point[0]);
  12. jump;
  13. twistpoint_fp2_print(stdout,point[1]);
  14. JUMP;
  15. }
  16. Bipoint<curvepoint_fp_t> Bipoint<curvepoint_fp_t>::operator+(Bipoint<curvepoint_fp_t> b)
  17. {
  18. Bipoint <curvepoint_fp_t> rop;
  19. if (*this==b) //l'addition a+b dans la lib 666 est mal défini si a=b, il faut distinguer les cas
  20. {
  21. curvepoint_fp_double(rop[0],point[0]);
  22. curvepoint_fp_double(rop[1],point[1]);
  23. }
  24. else
  25. {
  26. curvepoint_fp_add_vartime(rop[0],point[0],b.point[0]);
  27. curvepoint_fp_add_vartime(rop[1],point[1],b.point[1]);
  28. }
  29. return rop;
  30. }
  31. Bipoint<twistpoint_fp2_t> Bipoint<twistpoint_fp2_t>::operator+(Bipoint<twistpoint_fp2_t> b)
  32. {
  33. Bipoint <twistpoint_fp2_t> rop;
  34. if (*this==b)
  35. {
  36. twistpoint_fp2_double(rop[0],point[0]);
  37. twistpoint_fp2_double(rop[1],point[1]);
  38. }
  39. else
  40. {
  41. twistpoint_fp2_add_vartime(rop[0],point[0],b.point[0]);
  42. twistpoint_fp2_add_vartime(rop[1],point[1],b.point[1]);
  43. }
  44. return rop;
  45. }
  46. bool Bipoint<curvepoint_fp_t>::operator==(Bipoint<curvepoint_fp_t> b)
  47. {
  48. bool rop;
  49. if(fpe_iseq(point[0]->m_x,b[0]->m_x) && fpe_iseq(point[0]->m_y,b[0]->m_y) && fpe_iseq(point[0]->m_z,b[0]->m_z) && fpe_iseq(point[1]->m_x,b[1]->m_x) && fpe_iseq(point[1]->m_y,b[1]->m_y) && fpe_iseq(point[1]->m_z,b[1]->m_z))
  50. {
  51. rop=true;
  52. }
  53. else
  54. {
  55. rop=false;
  56. }
  57. return rop;
  58. }
  59. bool Bipoint<twistpoint_fp2_t>::operator==(Bipoint<twistpoint_fp2_t> b)
  60. {
  61. bool rop;
  62. if(fp2e_iseq(point[0]->m_x,b[0]->m_x) && fp2e_iseq(point[0]->m_y,b[0]->m_y) && fp2e_iseq(point[0]->m_z,b[0]->m_z) && fp2e_iseq(point[1]->m_x,b[1]->m_x) && fp2e_iseq(point[1]->m_y,b[1]->m_y) && fp2e_iseq(point[1]->m_z,b[1]->m_z))
  63. {
  64. rop=true;
  65. }
  66. else
  67. {
  68. rop=false;
  69. }
  70. return rop;
  71. }
  72. void Bipoint<curvepoint_fp_t>::makeaffine()
  73. {
  74. curvepoint_fp_makeaffine(point[0]);
  75. curvepoint_fp_makeaffine(point[1]);
  76. }
  77. void Bipoint<twistpoint_fp2_t>::makeaffine()
  78. {
  79. twistpoint_fp2_makeaffine(point[0]);
  80. twistpoint_fp2_makeaffine(point[1]);
  81. }
  82. void Bipoint<twistpoint_fp2_t>::scalarmult_vartime(Bipoint<twistpoint_fp2_t> op, scalar_t s)
  83. {
  84. twistpoint_fp2_t a,b;
  85. twistpoint_fp2_scalarmult_vartime(a, op[0],s);
  86. twistpoint_fp2_scalarmult_vartime(b, op[1],s);
  87. set_point(a,0);
  88. set_point(b,1);
  89. }
  90. void Bipoint<curvepoint_fp_t>::scalarmult_vartime(Bipoint<curvepoint_fp_t> op, scalar_t s)
  91. //pb cannot call member function blabla without object --> sol Bipoint<curvepoint_fp_t>::
  92. {
  93. curvepoint_fp_t a,b;
  94. //cout << RED << "affichage de op[0] " << RESET << endl;
  95. //curvepoint_fp_print(stdout,op[0]);
  96. //jump;
  97. //cout << RED "affichage de op[1] " << RESET << endl;
  98. //curvepoint_fp_print(stdout,op[1]);
  99. //JUMP;
  100. curvepoint_fp_scalarmult_vartime(a, op[0],s);
  101. curvepoint_fp_scalarmult_vartime(b, op[1],s);
  102. //cout << RED << "affichage du curvepoint u1[0] " << RESET << endl;
  103. //curvepoint_fp_print(stdout,a);
  104. //jump;
  105. //cout << RED "affichage du curvepoint u1[1]" << RESET << endl;
  106. //curvepoint_fp_print(stdout,b);
  107. //JUMP;
  108. set_point(a,0);
  109. set_point(b,1);
  110. }
  111. curvepoint_fp_t& Bipoint<curvepoint_fp_t>::operator[](int n)
  112. {
  113. return point[n];
  114. }
  115. twistpoint_fp2_t& Bipoint<twistpoint_fp2_t>::operator[](int n)
  116. {
  117. return point[n];
  118. }
  119. Bipoint<curvepoint_fp_t>::Bipoint()
  120. {
  121. curvepoint_fp_setneutral(point[0]);
  122. curvepoint_fp_setneutral(point[1]);
  123. }
  124. Bipoint<twistpoint_fp2_t>::Bipoint()
  125. {
  126. twistpoint_fp2_setneutral(point[0]);
  127. twistpoint_fp2_setneutral(point[1]);
  128. }
  129. Bipoint<curvepoint_fp_t>::Bipoint(curvepoint_fp_t p1,curvepoint_fp_t p2)
  130. {
  131. curvepoint_fp_set(point[0],p1);
  132. curvepoint_fp_set(point[1],p2);
  133. }
  134. Bipoint<twistpoint_fp2_t>::Bipoint(twistpoint_fp2_t p1,twistpoint_fp2_t p2)
  135. {
  136. twistpoint_fp2_set(point[0],p1);
  137. twistpoint_fp2_set(point[1],p2);
  138. }
  139. void Bipoint<curvepoint_fp_t>::set_point(curvepoint_fp_t element,int numpoint)
  140. {
  141. curvepoint_fp_set(point[numpoint],element);
  142. }
  143. void Bipoint<twistpoint_fp2_t>::set_point(twistpoint_fp2_t element,int numpoint)
  144. {
  145. twistpoint_fp2_set(point[numpoint],element);
  146. }
  147. void Bipoint<fpe_t>::set_coordonnee(fpe_t element,int numcoord)
  148. {
  149. fpe_set(coordonnee[numcoord],element);
  150. }
  151. void Bipoint<fp2e_t>::set_coordonnee(fp2e_t element,int numcoord)
  152. {
  153. fp2e_set(coordonnee[numcoord],element);
  154. }
  155. void Bipoint<curvepoint_fp_t>::print(int numpoint) const
  156. {
  157. curvepoint_fp_print(stdout,point[numpoint]);
  158. JUMP;
  159. }
  160. void Bipoint<twistpoint_fp2_t>::print(int numpoint) const
  161. {
  162. twistpoint_fp2_print(stdout,point[numpoint]);
  163. JUMP;
  164. }
  165. void Bipoint<fpe_t>::get_coordonnee(int numcoord) const
  166. {
  167. fpe_print(stdout,coordonnee[numcoord]);
  168. }
  169. void Bipoint<fp2e_t>::get_coordonnee(int numcoord) const
  170. {
  171. fp2e_print(stdout,coordonnee[numcoord]);
  172. }