123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- #include "Bipoint.hpp"
- CurveBipoint::CurveBipoint()
- {
- curvepoint_fp_setneutral(point[0]);
- curvepoint_fp_setneutral(point[1]);
- }
- TwistBipoint::TwistBipoint()
- {
- twistpoint_fp2_setneutral(point[0]);
- twistpoint_fp2_setneutral(point[1]);
- }
- CurveBipoint::CurveBipoint(curvepoint_fp_t p1, curvepoint_fp_t p2)
- {
- curvepoint_fp_set(point[0], p1);
- curvepoint_fp_set(point[1], p2);
- }
- TwistBipoint::TwistBipoint(twistpoint_fp2_t p1, twistpoint_fp2_t p2)
- {
- twistpoint_fp2_set(point[0], p1);
- twistpoint_fp2_set(point[1], p2);
- }
- curvepoint_fp_t& CurveBipoint::operator[](int n)
- {
- return point[n];
- }
- twistpoint_fp2_t& TwistBipoint::operator[](int n)
- {
- return point[n];
- }
- const curvepoint_fp_t& CurveBipoint::operator[](int n) const
- {
- return point[n];
- }
- const twistpoint_fp2_t& TwistBipoint::operator[](int n) const
- {
- return point[n];
- }
- CurveBipoint CurveBipoint::operator+(const CurveBipoint& b) const
- {
- CurveBipoint retval;
- curvepoint_fp_add_vartime(retval[0], point[0], b.point[0]);
- curvepoint_fp_add_vartime(retval[1], point[1], b.point[1]);
- return retval;
- }
- TwistBipoint TwistBipoint::operator+(const TwistBipoint& b) const
- {
- TwistBipoint retval;
- twistpoint_fp2_add_vartime(retval[0], point[0], b.point[0]);
- twistpoint_fp2_add_vartime(retval[1], point[1], b.point[1]);
- return retval;
- }
- CurveBipoint CurveBipoint::operator*(const Scalar& exp) const
- {
- CurveBipoint retval;
- exp.mult(retval[0], point[0]);
- exp.mult(retval[1], point[1]);
- return retval;
- }
- TwistBipoint TwistBipoint::operator*(const Scalar& exp) const
- {
- TwistBipoint retval;
- exp.mult(retval[0], point[0]);
- exp.mult(retval[1], point[1]);
- return retval;
- }
- bool CurveBipoint::operator==(const CurveBipoint& b) const
- {
- curvepoint_fp_t affine_point0, affine_point1, affine_b0, affine_b1;
- curvepoint_fp_set(affine_point0, point[0]);
- curvepoint_fp_set(affine_point1, point[1]);
- curvepoint_fp_set(affine_b0, b[0]);
- curvepoint_fp_set(affine_b1, b[1]);
- curvepoint_fp_makeaffine(affine_point0);
- curvepoint_fp_makeaffine(affine_point1);
- curvepoint_fp_makeaffine(affine_b0);
- curvepoint_fp_makeaffine(affine_b1);
- bool retval;
- retval = fpe_iseq(affine_point0->m_x, affine_b0->m_x);
- retval = retval && fpe_iseq(affine_point0->m_y, affine_b0->m_y);
- retval = retval && fpe_iseq(affine_point1->m_x, affine_b1->m_x);
- retval = retval && fpe_iseq(affine_point1->m_y, affine_b1->m_y);
- return retval;
- }
- bool TwistBipoint::operator==(const TwistBipoint& b) const
- {
- twistpoint_fp2_t affine_point0, affine_point1, affine_b0, affine_b1;
- twistpoint_fp2_set(affine_point0, point[0]);
- twistpoint_fp2_set(affine_point1, point[1]);
- twistpoint_fp2_set(affine_b0, b[0]);
- twistpoint_fp2_set(affine_b1, b[1]);
- twistpoint_fp2_makeaffine(affine_point0);
- twistpoint_fp2_makeaffine(affine_point1);
- twistpoint_fp2_makeaffine(affine_b0);
- twistpoint_fp2_makeaffine(affine_b1);
- bool retval;
- retval = fp2e_iseq(affine_point0->m_x, affine_b0->m_x);
- retval = retval && fp2e_iseq(affine_point0->m_y, affine_b0->m_y);
- retval = retval && fp2e_iseq(affine_point1->m_x, affine_b1->m_x);
- retval = retval && fp2e_iseq(affine_point1->m_y, affine_b1->m_y);
- return retval;
- }
- bool CurveBipoint::operator!=(const CurveBipoint& b) const
- {
- return !(*this == b);
- }
- bool TwistBipoint::operator!=(const TwistBipoint& b) const
- {
- return !(*this == b);
- }
- CurveBipoint CurveBipoint::mult_by_2() const
- {
- CurveBipoint retval;
- curvepoint_fp_double(retval[0], point[0]);
- curvepoint_fp_double(retval[1], point[1]);
- return retval;
- }
- TwistBipoint TwistBipoint::mult_by_2() const
- {
- TwistBipoint retval;
- twistpoint_fp2_double(retval[0], point[0]);
- twistpoint_fp2_double(retval[1], point[1]);
- return retval;
- }
- void CurveBipoint::make_affine()
- {
- if (!(fpe_isone(point[0]->m_z)))
- curvepoint_fp_makeaffine(point[0]);
- if (!(fpe_isone(point[1]->m_z)))
- curvepoint_fp_makeaffine(point[1]);
- }
- void TwistBipoint::make_affine()
- {
- if (!(fp2e_isone(point[0]->m_z)))
- twistpoint_fp2_makeaffine(point[0]);
- if (!(fp2e_isone(point[1]->m_z)))
- twistpoint_fp2_makeaffine(point[1]);
- }
- size_t CurveBipointHash::operator()(const CurveBipoint& x) const
- {
- size_t retval = 0;
- CurveBipoint affine_x = x;
- std::hash<double> hasher;
-
- affine_x.make_affine();
- for (int i = 0; i < 2; i++)
- {
- for (int j = 0; j < 12; j++)
- {
- retval ^= hasher(affine_x[i]->m_x->v[j]);
- retval ^= hasher(affine_x[i]->m_y->v[j]);
- }
- }
- return retval;
- }
- size_t TwistBipointHash::operator()(const TwistBipoint& x) const
- {
- size_t retval = 0;
- TwistBipoint affine_x = x;
- std::hash<double> hasher;
-
- affine_x.make_affine();
- for (int i = 0; i < 2; i++)
- {
- for (int j = 0; j < 24; j++)
- {
- retval ^= hasher(affine_x[i]->m_x->v[j]);
- retval ^= hasher(affine_x[i]->m_y->v[j]);
- }
- }
- return retval;
- }
|