123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "Fp.hpp"
- #include "fpe2scalar.hpp" //problem : Fp does not name a type --> solution : include fpe2scalar.hpp only in the cpp files
- Fp Fp::operator-()
- {
- Fp rop;
- fpe_t temp;
- fpe_neg(temp,fpe_rep);
- rop.set(temp);
- return rop;
- }
-
- Fp Fp::operator* (Fp b)
- {
- Fp rop;
- fpe_t temp;
- fpe_mul(temp,fpe_rep,b.fpe_rep); //b.fpe_rep on peut accéder au champ fpe_rep ici bien qu'il soit privé
- fpe_print(stdout,temp);
- zout(fpe2mpz(temp));
- rop.set(temp);
- zout(scalar2mpz(rop.scalar()));
- return rop;
- }
- void Fp::set(fpe_t fpe)
- {
- //abc;
- //zout(scalar_rep[0],scalar_rep[1],scalar_rep[2],scalar_rep[3]);
- fpe_set(fpe_rep,fpe);
- fpe2scalar(scalar_rep,fpe_rep);
- //zout(scalar_rep[0],scalar_rep[1],scalar_rep[2],scalar_rep[3]);
- //xyz;
- }
- void Fp::set_random()
- {
- fpe_setrandom(fpe_rep);
- fpe2scalar(scalar_rep,fpe_rep);
- }
- void Fp::set_ad_minus_bc(Fp b,Fp c,Fp d) // i1*l1 - j1*k1=1 on calcule i1 = (j1*k1 + 1)*l1^(-1)
- {
- fpe_ad_minus_bc(fpe_rep,b.fpe_rep,c.fpe_rep,d.fpe_rep);
- fpe2scalar(scalar_rep,fpe_rep);
-
- /** bloc pour vérifier si ad-bc=1 en représentation mpz_class, **/
- //extern const double bn_v;
- //mpz_class bn_u, bn_p;
- //zout(bn_v);
- //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
- //for (int i =0;i<3;i++)
- //{
- //bn_u*=bn_v;
- //}
- //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;
- //zout (fpe2mpz(fpe_rep),fpe2mpz(d.fpe_rep),fpe2mpz(b.fpe_rep),fpe2mpz(c.fpe_rep),fpe2mpz(fpe_rep)*fpe2mpz(d.fpe_rep)-fpe2mpz(b.fpe_rep)*fpe2mpz(c.fpe_rep));
- //mpz_class field_element=(fpe2mpz(fpe_rep)*fpe2mpz(d.fpe_rep)-fpe2mpz(b.fpe_rep)*fpe2mpz(c.fpe_rep)) % bn_p;
- //field_element = (sgn(field_element)>=0)? field_element :field_element+bn_p; //il faut faire le modulo p et changer le reste de la division tronqué (obtenu avec %) est négatif, le modulo est du même signe que le dividende (celui qu'on divise)
- //zout(field_element);
- }
- const scalar_t& Fp::scalar() const
- {
- return scalar_rep;
- }
- void Fp::print_fpe() const
- {
- cout << fpe_rep << endl;
- }
|