#include "chiffrement.hpp" //template //void chiffrement(BitEvalL1& bit_chiffre,F2 bit_clair, PublicKey public_key, Type type) //{ ////signature; //Bipoint bipoint_groupelt, bipoint_subgroupelt; //scalar_t lambda; //scalar_setrandom(lambda, bn_r); ////1ere composante ///** calcul des bits clairs, urandom et chiffrés **/ //F2 bit_urandom=rand()%2; //bit_chiffre.set_bit_masque(bit_clair != bit_urandom); ////2eme composante ///** calcul sur la courbe BN sur Fp **/ //if (type==CURVE) //{ //bipoint_subgroupelt.scalarmult_vartime(public_key.get_bipoint_curvegen(),lambda); //bipoint_subgroupelt.makeaffine(); //// calcul de b.u+u_1 //if (bit_urandom == 1) //{ //bit_chiffre.set_bipoint(public_key.get_bipoint_curve_groupelt() + bipoint_subgroupelt); //addition et affectation //} //else //{ //bit_chiffre.set_bipoint(bipoint_subgroupelt); //affectation //} //} ///** calcul sur le twist BN sur Fp^2 **/ //if (type==TWIST) //{ //bipoint_subgroupelt.scalarmult_vartime(public_key.get_bipoint_twistgen(),lambda); //bipoint_subgroupelt.makeaffine(); //// calcul de b.v+v_1 //if (bit_urandom == 1) //{ //bit_chiffre.set_bipoint(public_key.get_bipoint_twist_groupelt() + bipoint_subgroupelt); //addition et affectation //} //else //{ //bit_chiffre.set_bipoint(bipoint_subgroupelt); //affectation //} //} //bit_chiffre.makeaffine(); //} void chiffrement(BitEvalL1& bit_chiffre,F2 bit_clair, PublicKey public_key) { //signature; Bipoint bipoint_groupelt, bipoint_subgroupelt; scalar_t lambda; scalar_setrandom(lambda, bn_r); //1ere composante /** calcul des bits clairs, urandom et chiffrés **/ F2 bit_urandom=rand()%2; bit_chiffre.set_bit_masque(bit_clair != bit_urandom); //2eme composante /** calcul sur la courbe BN sur Fp **/ bipoint_subgroupelt.scalarmult_vartime(public_key.get_bipoint_curvegen(),lambda); bipoint_subgroupelt.makeaffine(); // calcul de b.u+u_1 if (bit_urandom == 1) { bit_chiffre.set_bipoint(public_key.get_bipoint_curve_groupelt() + bipoint_subgroupelt); //addition et affectation } else { bit_chiffre.set_bipoint(bipoint_subgroupelt); //affectation } bit_chiffre.makeaffine(); } void chiffrement(BitEvalL1& bit_chiffre,F2 bit_clair, PublicKey public_key) { //signature; Bipoint bipoint_groupelt, bipoint_subgroupelt; scalar_t lambda; scalar_setrandom(lambda, bn_r); //1ere composante /** calcul des bits clairs, urandom et chiffrés **/ F2 bit_urandom=rand()%2; bit_chiffre.set_bit_masque(bit_clair != bit_urandom); //2eme composante /** calcul sur le twist BN sur Fp^2 **/ bipoint_subgroupelt.scalarmult_vartime(public_key.get_bipoint_twistgen(),lambda); bipoint_subgroupelt.makeaffine(); // calcul de b.u+u_1 if (bit_urandom == 1) { bit_chiffre.set_bipoint(public_key.get_bipoint_twist_groupelt() + bipoint_subgroupelt); //addition et affectation } else { bit_chiffre.set_bipoint(bipoint_subgroupelt); //affectation } bit_chiffre.makeaffine(); } void chiffrement(BitChiffre& bit_chiffre,F2 bit_clair, PublicKey public_key, Type type) { //signature; Bipoint bipoint_curve_groupelt, bipoint_curve_subgroupelt; // A, B, C, D, temp; Bipoint bipoint_twist_groupelt, bipoint_twist_subgroupelt; scalar_t lambda,lambda2; scalar_setrandom(lambda, bn_r); scalar_setrandom(lambda2, bn_r); //1ere composante /** calcul des bits clairs, urandom et chiffrés **/ F2 bit_urandom=rand()%2; bit_chiffre.set_bit_masque(bit_clair != bit_urandom); // dans F2 -=+=^=XOR bitwise (!= logical XOR résultat pareil pour 0 et 1, mais l'opérateur bitwitse sur des bool convertit le bool en int, fait l'opération bitwise et reconvertit en bool) m-b //(bit_clair != bit_urandom) //zout (bit_clair,bit_urandom); //bit_chiffre.print_bit_masque(); //if (bit_clair==0 && bit_urandom==0) {cout << BOLDRED << "Cas 1" << RESET << endl;} //if (bit_clair==0 && bit_urandom==1) {cout << BOLDRED << "Cas 2" << RESET << endl;} //if (bit_clair==1 && bit_urandom==0) {cout << BOLDRED << "Cas 3" << RESET << endl;} //if (bit_clair==1 && bit_urandom==1) {cout << BOLDRED << "Cas 4" << RESET << endl;} //2eme composante /** calcul sur la courbe BN sur Fp**/ if (type==CURVE) { ////lambda_1[0]=0;lambda_1[1]=0;lambda_1[2]=0;lambda_1[3]=0; // 0 //lambda_1[0]=1;lambda_1[1]=0;lambda_1[2]=0;lambda_1[3]=0; // 1 //cout << RED << "affichage du scalar_t lambda_1" << RESET <& ciphertext,F2 bit_clair, PublicKey public_key) { scalar_t lambda; scalar_setrandom(lambda, bn_r); Bipoint bipoint_curve_groupelt, bipoint_curve_subgroupelt; bipoint_curve_subgroupelt.scalarmult_vartime(public_key.get_bipoint_curvegen(),lambda); bipoint_curve_subgroupelt.makeaffine(); // calcul de m.u+u_1 if (bit_clair == 1) { ciphertext = public_key.get_bipoint_curve_groupelt() + bipoint_curve_subgroupelt; //addition et affectation } else { ciphertext = bipoint_curve_subgroupelt; //affectation } ciphertext.makeaffine(); } void chiffrement(Bipoint& ciphertext,F2 bit_clair, PublicKey public_key) { scalar_t lambda; scalar_setrandom(lambda, bn_r); Bipoint bipoint_twist_groupelt, bipoint_twist_subgroupelt; bipoint_twist_subgroupelt.scalarmult_vartime(public_key.get_bipoint_twistgen(),lambda); bipoint_twist_subgroupelt.makeaffine(); // calcul de m.v+v_1 if (bit_clair == 1) { ciphertext = public_key.get_bipoint_twist_groupelt() + bipoint_twist_subgroupelt; //addition et affectation } else { ciphertext = bipoint_twist_subgroupelt; //affectation } ciphertext.makeaffine(); }