예제 #1
0
파일: rlwe.c 프로젝트: DevCybran/rlwekex
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));
		}
	}
}
예제 #2
0
파일: rlwe.c 프로젝트: google/jalic
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))));
		}
	}
}