-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathutils.cpp
More file actions
30 lines (26 loc) · 789 Bytes
/
utils.cpp
File metadata and controls
30 lines (26 loc) · 789 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//
// Created by a2diaa on 4/17/23.
//
#include "utils.h"
//helper to sample a random uint64_t
uint64_t sample(uint64_t log_q) {
uint64_t n = ((uint64_t) rand() << 32) ^ ((uint64_t) rand());
if (log_q < 64)
return n % (1UL << log_q);
else
return n;
}
// uncompressed LWE decryption function, for testing purposes
mpz_class decryptLWE(std::vector<uint64_t> lwe_ct, std::vector<uint64_t> lwe_key, LWEParams ¶ms) {
uint64_t n = params.n;
uint64_t p = params.p;
mpz_class res = lwe_ct[n];
for (uint64_t i = 0; i < n; i++) {
res += (params.qBig - lwe_ct[i]) * lwe_key[i] % params.qBig;
}
res = res % params.qBig;
res += params.qBig / (2 * p);
res = res % params.qBig;
res = res * p / params.qBig;
return res;
}