Bipoint.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "Bipoint.hpp"
  2. Bipoint<curvepoint_fp_t>::Bipoint()
  3. {
  4. curvepoint_fp_setneutral(point[0]);
  5. curvepoint_fp_setneutral(point[1]);
  6. }
  7. Bipoint<twistpoint_fp2_t>::Bipoint()
  8. {
  9. twistpoint_fp2_setneutral(point[0]);
  10. twistpoint_fp2_setneutral(point[1]);
  11. }
  12. Bipoint<curvepoint_fp_t>::Bipoint(curvepoint_fp_t p1, curvepoint_fp_t p2)
  13. {
  14. curvepoint_fp_set(point[0], p1);
  15. curvepoint_fp_set(point[1], p2);
  16. }
  17. Bipoint<twistpoint_fp2_t>::Bipoint(twistpoint_fp2_t p1, twistpoint_fp2_t p2)
  18. {
  19. twistpoint_fp2_set(point[0], p1);
  20. twistpoint_fp2_set(point[1], p2);
  21. }
  22. curvepoint_fp_t& Bipoint<curvepoint_fp_t>::operator[](int n)
  23. {
  24. return point[n];
  25. }
  26. twistpoint_fp2_t& Bipoint<twistpoint_fp2_t>::operator[](int n)
  27. {
  28. return point[n];
  29. }
  30. const curvepoint_fp_t& Bipoint<curvepoint_fp_t>::operator[](int n) const
  31. {
  32. return point[n];
  33. }
  34. const twistpoint_fp2_t& Bipoint<twistpoint_fp2_t>::operator[](int n) const
  35. {
  36. return point[n];
  37. }
  38. Bipoint<curvepoint_fp_t> Bipoint<curvepoint_fp_t>::operator+(const Bipoint<curvepoint_fp_t>& b) const
  39. {
  40. Bipoint<curvepoint_fp_t> retval;
  41. curvepoint_fp_add_vartime(retval[0], point[0], b.point[0]);
  42. curvepoint_fp_add_vartime(retval[1], point[1], b.point[1]);
  43. return retval;
  44. }
  45. Bipoint<twistpoint_fp2_t> Bipoint<twistpoint_fp2_t>::operator+(const Bipoint<twistpoint_fp2_t>& b) const
  46. {
  47. Bipoint<twistpoint_fp2_t> retval;
  48. twistpoint_fp2_add_vartime(retval[0], point[0], b.point[0]);
  49. twistpoint_fp2_add_vartime(retval[1], point[1], b.point[1]);
  50. return retval;
  51. }
  52. Bipoint<curvepoint_fp_t> Bipoint<curvepoint_fp_t>::operator*(const Scalar& mult) const
  53. {
  54. Bipoint<curvepoint_fp_t> retval;
  55. retval[0] = mult * point[0];
  56. retval[1] = mult * point[1];
  57. return retval;
  58. }
  59. Bipoint<twistpoint_fp2_t> Bipoint<twistpoint_fp2_t>::operator*(const Scalar& mult) const
  60. {
  61. Bipoint<twistpoint_fp2_t> retval;
  62. retval[0] = mult * point[0];
  63. retval[1] = mult * point[1];
  64. return retval;
  65. }
  66. bool Bipoint<curvepoint_fp_t>::operator==(const Bipoint<curvepoint_fp_t>& b) const
  67. {
  68. bool retval;
  69. fpe_t point0_x1z2, point0_y1z2, point0_x2z1, point0_y2z1, point1_x1z2, point1_y1z2, point1_x2z1, point1_y2z1;
  70. fpe_mul(point0_x1z2, point[0]->m_x, b[0]->m_z);
  71. fpe_mul(point0_y1z2, point[0]->m_y, b[0]->m_z);
  72. fpe_mul(point0_x2z1, point[0]->m_z, b[0]->m_x);
  73. fpe_mul(point0_y2z1, point[0]->m_z, b[0]->m_y);
  74. fpe_mul(point1_x1z2, point[1]->m_x, b[1]->m_z);
  75. fpe_mul(point1_y1z2, point[1]->m_y, b[1]->m_z);
  76. fpe_mul(point1_x2z1, point[1]->m_z, b[1]->m_x);
  77. fpe_mul(point1_y2z1, point[1]->m_z, b[1]->m_y);
  78. retval = fpe_iseq(point0_x1z2, point0_x2z1);
  79. retval &&= fpe_iseq(point0_y1z2, point0_y2z1);
  80. retval &&= fpe_iseq(point1_x1z2, point1_x2z1);
  81. retval &&= fpe_iseq(point1_y1z2, point1_y2z1);
  82. return retval;
  83. }
  84. bool Bipoint<twistpoint_fp2_t>::operator==(const Bipoint<twistpoint_fp2_t>& b) const
  85. {
  86. bool retval;
  87. fp2e_t point0_x1z2, point0_y1z2, point0_x2z1, point0_y2z1, point1_x1z2, point1_y1z2, point1_x2z1, point1_y2z1;
  88. fp2e_mul(point0_x1z2, point[0]->m_x, b[0]->m_z);
  89. fp2e_mul(point0_y1z2, point[0]->m_y, b[0]->m_z);
  90. fp2e_mul(point0_x2z1, point[0]->m_z, b[0]->m_x);
  91. fp2e_mul(point0_y2z1, point[0]->m_z, b[0]->m_y);
  92. fp2e_mul(point1_x1z2, point[1]->m_x, b[1]->m_z);
  93. fp2e_mul(point1_y1z2, point[1]->m_y, b[1]->m_z);
  94. fp2e_mul(point1_x2z1, point[1]->m_z, b[1]->m_x);
  95. fp2e_mul(point1_y2z1, point[1]->m_z, b[1]->m_y);
  96. retval = fp2e_iseq(point0_x1z2, point0_x2z1);
  97. retval &&= fp2e_iseq(point0_y1z2, point0_y2z1);
  98. retval &&= fp2e_iseq(point1_x1z2, point1_x2z1);
  99. retval &&= fp2e_iseq(point1_y1z2, point1_y2z1);
  100. return retval;
  101. }
  102. bool Bipoint<curvepoint_fp_t>::operator!=(const Bipoint<curvepoint_fp_t>& b) const
  103. {
  104. return !(*this == b);
  105. }
  106. bool Bipoint<twistpoint_fp2_t>::operator!=(const Bipoint<twistpoint_fp2_t>& b) const
  107. {
  108. return !(*this == b);
  109. }
  110. Bipoint<curvepoint_fp_t> Bipoint<curvepoint_fp_t>::mult_by_2() const
  111. {
  112. Bipoint<curvepoint_fp_t> retval;
  113. curvepoint_fp_double(retval[0], point[0]);
  114. curvepoint_fp_double(retval[1], point[1]);
  115. return retval;
  116. }
  117. Bipoint<twistpoint_fp2_t> Bipoint<twistpoint_fp2_t>::mult_by_2() const
  118. {
  119. Bipoint<twistpoint_fp2_t> retval;
  120. twistpoint_fp2_double(retval[0], point[0]);
  121. twistpoint_fp2_double(retval[1], point[1]);
  122. return retval;
  123. }
  124. void Bipoint<curvepoint_fp_t>::make_affine()
  125. {
  126. curvepoint_fp_makeaffine(point[0]);
  127. curvepoint_fp_makeaffine(point[1]);
  128. }
  129. void Bipoint<twistpoint_fp2_t>::make_affine()
  130. {
  131. twistpoint_fp2_makeaffine(point[0]);
  132. twistpoint_fp2_makeaffine(point[1]);
  133. }