representation.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "representation.hpp"
  2. void representation(Bipoint<curvepoint_fp_t> op)
  3. {
  4. representation(op[0]);
  5. representation(op[1]);
  6. }
  7. void representation(const curvepoint_fp_t op)
  8. {
  9. mpz_class X,Y;
  10. extern const double bn_v;
  11. mpz_class bn_u, bn_p;
  12. bn_u=1;//pow(bn_v,3); ne marche pas ni bn_v*bn_v*bn_v moral: d'abord initialiser pour travailler avec des mpz_class plutôt que des doubles
  13. for (int i =0;i<3;i++)
  14. {
  15. bn_u*=bn_v;
  16. }
  17. bn_p=36 * bn_u * bn_u * bn_u * bn_u+36 * bn_u * bn_u * bn_u+24 * bn_u * bn_u+6 * bn_u + 1;
  18. zout(bn_u,bn_v);
  19. mpz_class f[12],g[12];
  20. for (int i=0;i<12;i++)
  21. {
  22. f[i]=todouble((op->m_x) -> v[i]);
  23. g[i]=todouble((op->m_y) -> v[i]);
  24. //cout << "f[" <<i<<"] = "<< f[i] << endl;
  25. }
  26. X=poly(f);
  27. Y=poly(g);
  28. zout(X%bn_p,Y%bn_p);
  29. }
  30. mpz_class poly(mpz_class coeff[12])
  31. {
  32. extern const double bn_v;
  33. mpz_class rop=coeff[0]+6*coeff[1]*bn_v
  34. +6*coeff[2]*bn_v*bn_v
  35. +6*coeff[3]*bn_v*bn_v*bn_v
  36. +6*coeff[4]*bn_v*bn_v*bn_v*bn_v
  37. +6*coeff[5]*bn_v*bn_v*bn_v*bn_v*bn_v
  38. +6*coeff[6]*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v
  39. +36*coeff[7]*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v
  40. +36*coeff[8]*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v
  41. +36*coeff[9]*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v
  42. +36*coeff[10]*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v
  43. +36*coeff[11]*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v*bn_v;
  44. return rop;
  45. }