123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #include "PublicKey.hpp"
- PublicKey(const Bipoint<curvepoint_fp_t>& g, const Bipoint<twistpoint_fp2_t>& h, const Bipoint<curvepoint_fp_t>& g1, const Bipoint<twistpoint_fp2_t>& h1)
- {
- set(g, h, g1, h1);
- }
- void set(const Bipoint<curvepoint_fp_t>& g, const Bipoint<twistpoint_fp2_t>& h, const Bipoint<curvepoint_fp_t>& g1, const Bipoint<twistpoint_fp2_t>& h1)
- {
- bipoint_curvegen = g;
- bipoint_twistgen = h;
-
- bipoint_curve_subgroup_gen = g1;
- bipoint_twist_subgroup_gen = h1;
- }
- void PublicKey::encrypt(Bipoint<curvepoint_fp_t>& G_element, const Scalar& cleartext) const
- {
- Scalar lambda;
- lambda.set_random();
- Bipoint<curvepoint_fp_t> cleartext_as_element, random_mask;
- cleartext_as_element = get_bipoint_curvegen() * cleartext;
- random_mask = get_bipoint_curve_subgroup_gen() * lambda;
- G_element = cleartext_as_element + random_mask;
- }
- void PublicKey::encrypt(Bipoint<twistpoint_fp2_t>& H_element, const Scalar& cleartext) const
- {
- Scalar lambda;
- lambda.set_random();
- Bipoint<twistpoint_fp2_t> cleartext_as_element, random_mask;
- cleartext_as_element = get_bipoint_twistgen() * cleartext;
- random_mask = get_bipoint_twist_subgroup_gen() * lambda;
- H_element = cleartext_as_element + random_mask;
- }
- void PublicKey::encrypt(Bipoint<curvepoint_fp_t>& G_element, Bipoint<twistpoint_fp2_t>& H_element, const Scalar& cleartext) const
- {
- encrypt(G_element, cleartext);
- encrypt(H_element, cleartext);
- }
- Bipoint<curvepoint_fp_t> homomorphic_addition(const Bipoint<curvepoint_fp_t>& a, const Bipoint<curvepoint_fp_t>& b) const
- {
- Scalar lambda;
- lambda.set_random();
- Bipoint<curvepoint_fp_t> random_mask;
- random_mask = bipoint_curve_subgroup_gen * lambda;
- return a + b + random_mask;
- }
- Bipoint<twistpoint_fp2_t> homomorphic_addition(const Bipoint<twistpoint_fp2_t>& a, const Bipoint<twistpoint_fp2_t>& b) const
- {
- Scalar lambda;
- lambda.set_random();
- Bipoint<curvepoint_fp_t> random_mask;
- random_mask = bipoint_twist_subgroup_gen * lambda;
- return a + b + random_mask;
- }
- Quadripoint homomorphic_addition(const Quadripoint& a, const Quadripoint& b) const
- {
- Quadripoint random_mask;
- Bipoint<curvepoint_fp_t> random_mask_curve;
- Bipoint<twistpoint_fp2_t> random_mask_twist;
-
- Scalar lambda1, lambda2;
- lambda1.set_random();
- lambda2.set_random();
- random_mask_curve = bipoint_curve_subgroup_gen * lambda1;
- random_mask_curve.make_affine();
- random_mask_twist = bipoint_twist_subgroup_gen * lambda2;
- random_mask_twist.make_affine();
- random_mask = pairing(bipoint_curvegen, random_mask_twist) + pairing(random_mask_curve, bipoint_twistgen);
- return a + b + random_mask;
- }
- Quadripoint homomorphic_multiplication(const Bipoint<curvepoint_fp_t>& a, const Bipoint<twistpoint_fp2_t>& b) const
- {
- Quadripoint random_mask;
- Bipoint<curvepoint_fp_t> random_mask_curve;
- Bipoint<twistpoint_fp2_t> random_mask_twist;
-
- Bipoint<curvepoint_fp_t> a_copy = a;
- Bipoint<twistpoint_fp2_t> b_copy = b;
- a_copy.make_affine();
- b_copy.make_affine();
-
- Scalar lambda1, lambda2;
- lambda1.set_random();
- lambda2.set_random();
- random_mask_curve = bipoint_curve_subgroup_gen * lambda1;
- random_mask_curve.makeaffine();
- random_mask_twist = bipoint_twist_subgroup_gen * lambda2;
- random_mask_twist.makeaffine();
- random_mask = pairing(bipoint_curvegen, random_mask_twist) + pairing(random_mask_curve, bipoint_twistgen);
- return pairing(a_copy, b_copy) + random_mask;
- }
- Bipoint<curvepoint_fp_t> PublicKey::get_bipoint_curvegen() const
- {
- return bipoint_curvegen;
- }
- Bipoint<twistpoint_fp2_t> PublicKey::get_bipoint_twistgen() const
- {
- return bipoint_twistgen;
- }
- Bipoint<curvepoint_fp_t> PublicKey::get_bipoint_curve_subgroup_gen() const
- {
- return bipoint_curve_subgroup_gen;
- }
- Bipoint<twistpoint_fp2_t> PublicKey::get_bipoint_twist_subgroup_gen() const
- {
- return bipoint_twist_subgroup_gen;
- }
|