void sample_ct(uint32_t *s, RAND_CTX *rand_ctx) { int i, j; for (i = 0; i < 16; i++) { uint64_t r = RANDOM64(rand_ctx); for (j = 0; j < 64; j++) { uint64_t rnd[3]; uint32_t m; uint32_t t; RANDOM192(rnd, rand_ctx); m = (r & 1); r >>= 1; // use the constant time version single_sample s[i * 64 + j] = single_sample_ct(rnd); t = 0xFFFFFFFF - s[i * 64 + j]; s[i * 64 + j] = ct_select_u64(t, s[i * 64 + j], ct_eq_u64(m, 0)); } } }
void sample_ct(uint32_t *s) { RANDOM_VARS int i, j; for (i = 0; i < 16; i++) { uint64_t r = RANDOM64; for (j = 0; j < 64; j++) { uint64_t rnd[3]; int32_t m; uint32_t t; RANDOM192(rnd); m = (r & 1); r >>= 1; m = 2 * m - 1; // use the constant time version single_sample s[i * 64 + j] = single_sample_ct(rnd); t = 0xFFFFFFFF - s[i * 64 + j]; s[i * 64 + j] = ((t & (uint32_t) m) | (s[i * 64 + j] & (~((uint32_t) m)))); } } }