Skip to content

Commit b6e385f

Browse files
Change prng for sharing
1 parent c117d95 commit b6e385f

File tree

3 files changed

+60
-34
lines changed

3 files changed

+60
-34
lines changed

inc/Hardware/Definitions.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class Simulation {
5959
uint64_t clock_signal_index_;
6060
uint64_t number_of_clock_cycles_;
6161
uint64_t number_of_enablers_;
62+
uint64_t number_of_probe_extensions_;
6263
uint64_t number_of_processed_simulations;
6364
std::vector<std::vector<uint64_t>> always_random_inputs_indices_;
6465
std::vector<uint64_t> selected_groups_;

inc/Util/Sharing.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ class Sharing {
135135
*/
136136
void ConvertFqToPolynomial(fq_t& polynomial_fq, Polynomial& polynomial);
137137

138+
boost::dynamic_bitset<> ConvertPolynomialToBitset(
139+
const Polynomial& polynomial) const;
140+
141+
138142
void SampleRandomPolynomial(fq_t& random_polynomial_fq);
139143

140144
/**
@@ -208,7 +212,8 @@ class Sharing {
208212

209213
fmpz_t prime_fmpz_;
210214
fq_ctx_t ctx_fq_;
211-
flint_rand_t random_state_;
212215
fmpz_mod_poly_t fmpz_poly_;
213216
fmpz_mod_ctx_t ctx_fmpz_mod_;
217+
boost::uniform_int<uint64_t> dist_;
218+
boost::variate_generator<boost::mt19937&, boost::uniform_int<uint64_t>> gen_;
214219
};

src/Util/Sharing.cpp

Lines changed: 53 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,12 @@ Sharing::Sharing(uint64_t prime_base, uint64_t extension_degree,
55
: prime_base_(prime_base),
66
extension_degree_(extension_degree),
77
size_coefficients_bits_(std::ceil(std::log2l(prime_base))),
8-
length_of_elements_in_bits_(size_coefficients_bits_ * extension_degree) {
8+
length_of_elements_in_bits_(size_coefficients_bits_ * extension_degree),
9+
dist_(0, std::numeric_limits<uint64_t>::max()),
10+
gen_(rng, dist_) {
11+
912
fmpz_init(prime_fmpz_);
1013
fmpz_set_ui(prime_fmpz_, prime_base_);
11-
flint_randinit(random_state_);
12-
13-
boost::uniform_int<uint64_t> dist_(0, std::numeric_limits<uint64_t>::max());
14-
boost::variate_generator<boost::mt19937&, boost::uniform_int<uint64_t>> gen_(
15-
rng, dist_);
16-
17-
mp_limb_t seed1 = gen_();
18-
mp_limb_t seed2 = gen_();
19-
flint_randseed(random_state_, seed1, seed2);
2014

2115
if (!irreducible_polynomial.empty()) {
2216
fmpz_mod_ctx_init(ctx_fmpz_mod_, prime_fmpz_);
@@ -42,7 +36,6 @@ Sharing::Sharing(uint64_t prime_base, uint64_t extension_degree,
4236
Sharing::~Sharing() {
4337
fmpz_clear(prime_fmpz_);
4438
fq_ctx_clear(ctx_fq_);
45-
flint_randclear(random_state_);
4639
fmpz_mod_poly_clear(fmpz_poly_, ctx_fmpz_mod_);
4740
fmpz_mod_ctx_clear(ctx_fmpz_mod_);
4841
}
@@ -200,40 +193,67 @@ void Sharing::ConvertFqToPolynomial(fq_t& polynomial_fq,
200193
fmpz_clear(fmpz_coef);
201194
}
202195

196+
boost::dynamic_bitset<> Sharing::ConvertPolynomialToBitset(
197+
const Polynomial& polynomial) const {
198+
uint64_t number_of_bits = length_of_elements_in_bits_;
199+
uint64_t bit_index, coefficient_index;
200+
boost::dynamic_bitset<> bitset(number_of_bits);
201+
202+
for (coefficient_index = 0; coefficient_index < polynomial.size();
203+
++coefficient_index) {
204+
for (bit_index = 0; bit_index < size_coefficients_bits_; ++bit_index) {
205+
bitset[coefficient_index * size_coefficients_bits_ + bit_index] =
206+
(polynomial[coefficient_index] >> bit_index) & 1;
207+
}
208+
}
209+
210+
return bitset;
211+
}
212+
213+
203214
void Sharing::SampleRandomPolynomial(fq_t& random_polynomial_fq) {
204-
fmpz_mod_poly_randtest(fmpz_poly_, random_state_, extension_degree_,
205-
ctx_fmpz_mod_);
206-
fq_set_fmpz_mod_poly(random_polynomial_fq, fmpz_poly_, ctx_fq_);
215+
fmpz_mod_poly_t random_fmpz;
216+
fmpz_mod_poly_init(random_fmpz, ctx_fmpz_mod_);
217+
218+
fmpz_t coefficient;
219+
fmpz_init(coefficient);
220+
221+
for (uint64_t index = 0; index < extension_degree_; ++index) {
222+
fmpz_set_ui(coefficient, gen_());
223+
fmpz_mod_poly_set_coeff_fmpz(random_fmpz, index, coefficient,
224+
ctx_fmpz_mod_);
225+
}
226+
227+
fq_set_fmpz_mod_poly(random_polynomial_fq, random_fmpz, ctx_fq_);
228+
fmpz_mod_poly_clear(random_fmpz, ctx_fmpz_mod_);
229+
fmpz_clear(coefficient);
207230
}
208231

209232
std::vector<uint64_t> Sharing::SampleRandomBitslicedPolynomial() {
210-
uint64_t bit_index, coefficient_index, simulation_index, index;
211-
std::vector<uint64_t> bitsliced_polynomial(length_of_elements_in_bits_, 0);
233+
uint64_t index, bit_index, bit_width = length_of_elements_in_bits_;
234+
std::vector<uint64_t> bitsliced_polynomial(bit_width);
235+
boost::dynamic_bitset<> bitset;
236+
Polynomial polynomial(extension_degree_);
212237

213-
uint64_t coefficient;
214-
fmpz_t fmpz_coef;
215-
fmpz_init(fmpz_coef);
238+
for (index = 0; index < 64; ++index) {
239+
fq_t polynomial_fq;
240+
fq_init(polynomial_fq, ctx_fq_);
241+
SampleRandomPolynomial(polynomial_fq);
242+
ConvertFqToPolynomial(polynomial_fq, polynomial);
243+
bitset = ConvertPolynomialToBitset(polynomial);
216244

217-
for (simulation_index = 0; simulation_index < 64; ++simulation_index) {
218-
index = 0;
219-
fmpz_mod_poly_randtest(fmpz_poly_, random_state_, extension_degree_, ctx_fmpz_mod_);
220-
for (coefficient_index = 0; coefficient_index < extension_degree_;
221-
++coefficient_index) {
222-
fmpz_mod_poly_get_coeff_fmpz(fmpz_coef, fmpz_poly_, index, ctx_fmpz_mod_);
223-
coefficient = fmpz_get_ui(fmpz_coef);
224-
for (bit_index = 0; bit_index < size_coefficients_bits_; ++bit_index) {
225-
bitsliced_polynomial[index] <<= 1;
226-
bitsliced_polynomial[index] |= coefficient & 1;
227-
coefficient >>= 1;
228-
++index;
229-
}
245+
for (bit_index = 0; bit_index < bit_width; ++bit_index) {
246+
bitsliced_polynomial[bit_index] <<= 1;
247+
bitsliced_polynomial[bit_index] |= bitset[bit_index];
230248
}
249+
250+
fq_clear(polynomial_fq, ctx_fq_);
231251
}
232252

233-
fmpz_clear(fmpz_coef);
234253
return bitsliced_polynomial;
235254
}
236255

256+
237257
std::vector<Polynomial> Sharing::Encode(fq_t& polynomial_fq,
238258
uint64_t number_of_shares,
239259
bool is_additive_masking) {

0 commit comments

Comments
 (0)