123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #include "dechiffrementL2.hpp"
- void dechiffrementL2(F2& bit_dechiffre, BitEvalL2 bit_chiffre, PrivateKey private_key) //valeur du log b1b2+a1b2+a2b1+s
- {
- signature;
- //ecris(log=b1b2+a1b2+a2b1+s);
- Quadripoint quadripoint_pi_T_chiffre;
- quadripoint_pi_T_chiffre = private_key.pi_T(bit_chiffre.get_quadripoint()); //pi_T(beta)
- //ecris(affichage de beta);
- //bit_chiffre.get_quadripoint().print();
- //ecris(affichage de pi_T(beta));
- //quadripoint_pi_T_chiffre.print(0);
- Quadripoint base_log, pow_log;
- base_log = private_key.pi_T(pairing(public_key.get_bipoint_curve_groupelt(),public_key.get_bipoint_twist_groupelt())); //pi_T(e(u,v))
- //ecris(affichage de pi_T(e(u,v)));
- //base_log.print(0);
- //ecris(affichage de private_key);
- //private_key.print();
-
- if (fp12e_isone(quadripoint_pi_T_chiffre[0]) && fp12e_isone(quadripoint_pi_T_chiffre[1]) && fp12e_isone(quadripoint_pi_T_chiffre[2]) && fp12e_isone(quadripoint_pi_T_chiffre[3]))
- {
- //cout << "cas log=0" << endl;
- bit_dechiffre = bit_chiffre.get_bit_masque();
- return;
- }
- if (quadripoint_pi_T_chiffre == base_log)
- {
- //cout << "cas log=1" << endl;
- bit_dechiffre = (bit_chiffre.get_bit_masque()+1)%2;
- return;
- }
- pow_log=base_log*base_log;
- //ecris(affichage de pi_T(e(u,v))^2);
- //pow_log.print();
- if (quadripoint_pi_T_chiffre == pow_log)
- {
- //cout << "cas log=2" << endl;
- bit_dechiffre = bit_chiffre.get_bit_masque();
- return;
- }
- pow_log=pow_log*base_log;
- //ecris(affichage de pi_T(e(u,v))^3);
- //pow_log.print();
- if (quadripoint_pi_T_chiffre == pow_log)
- {
- //cout << "cas log=3" << endl;
- bit_dechiffre = (bit_chiffre.get_bit_masque()+1)%2;
- return;
- }
- pow_log=pow_log*base_log;
- //ecris(affichage de pi_T(e(u,v))^4);
- //pow_log.print();
- if (quadripoint_pi_T_chiffre == pow_log)
- {
- //cout << "cas log=4" << endl;
- bit_dechiffre = bit_chiffre.get_bit_masque();
- return;
- }
- int log=4;
- abc;
- while (!(quadripoint_pi_T_chiffre == pow_log))
- {
- pow_log=pow_log*base_log;
- log++;
- //zout(log);
- }
- xyz;
- //zout(log);
- bit_dechiffre = (bit_chiffre.get_bit_masque()+ log)%2;
-
- }
- void dechiffrementL2(F2& bit_dechiffre, Quadripoint quadripoint, PrivateKey private_key)
- //routine pour les évalués de niveau 3 et 4, déchiffrement sans Catalano Fiore, calcul d'un log seulement, prend en entrée un quadripoint et non pas un évalué de niveau 2
- {
- Quadripoint quadripoint_pi_T_chiffre;
- quadripoint_pi_T_chiffre = private_key.pi_T(quadripoint); //pi_T(beta)
- Quadripoint base_log, pow_log;
- base_log = private_key.pi_T(pairing(public_key.get_bipoint_curve_groupelt(),public_key.get_bipoint_twist_groupelt())); //pi_T(e(u,v))
- if (fp12e_isone(quadripoint_pi_T_chiffre[0]) && fp12e_isone(quadripoint_pi_T_chiffre[1]) && fp12e_isone(quadripoint_pi_T_chiffre[2]) && fp12e_isone(quadripoint_pi_T_chiffre[3]))
- {
- //cout << "cas log=0" << endl;
- bit_dechiffre = 0;
- return;
- }
- if (quadripoint_pi_T_chiffre == base_log)
- {
- //cout << "cas log=1" << endl;
- bit_dechiffre = 1;
- return;
- }
- pow_log=base_log*base_log;
- if (quadripoint_pi_T_chiffre == pow_log)
- {
- //cout << "cas log=2" << endl;
- bit_dechiffre = 0;
- return;
- }
- pow_log=pow_log*base_log;
- if (quadripoint_pi_T_chiffre == pow_log)
- {
- //cout << "cas log=3" << endl;
- bit_dechiffre = 1;
- return;
- }
- pow_log=pow_log*base_log;
- if (quadripoint_pi_T_chiffre == pow_log)
- {
- //cout << "cas log=4" << endl;
- bit_dechiffre = 0;
- return;
- }
- int log=4;
-
- //quadripoint_pi_T_chiffre.print(0);
- //quadripoint_pi_T_chiffre.print(1);
- //quadripoint_pi_T_chiffre.print(2);
- //quadripoint_pi_T_chiffre.print(3);
- //abc;
- while (!(quadripoint_pi_T_chiffre == pow_log))
- {
- pow_log=pow_log*base_log;
- log++;
- }
- //xyz;
- //zout(log);
- bit_dechiffre = log%2;
- }
|