-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerateChallenges.cpp
More file actions
65 lines (42 loc) · 2.13 KB
/
generateChallenges.cpp
File metadata and controls
65 lines (42 loc) · 2.13 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "generateChallenges.h"
void generateChallenges(Cryptosystem cryptosystem, int num_challenges, std::string path) {
std::filesystem::create_directories(path);
cryptosystem.generate_keys();
std::ofstream private_key_file(path + "/private_key");
std::ofstream public_key_file(path + "/public_key");
private_key_file << std::fixed << cryptosystem.get_B();
public_key_file << std::fixed << cryptosystem.get_G_inv();
private_key_file.close();
public_key_file.close();
osuCrypto::PRNG prng;
prng.SetSeed(osuCrypto::sysRandomSeed());
for (int i = 0; i < num_challenges; i++) {
bool ptext = prng.getBit();
VectorXm ctext = cryptosystem.encrypt(cryptosystem.get_G_inv(), ptext);
assert(cryptosystem.decrypt(cryptosystem.get_B(), ctext) == ptext);
std::ofstream plaintext_file(path + "/plaintext" + std::to_string(i));
std::ofstream ciphertext_file(path + "/ciphertext" + std::to_string(i));
ciphertext_file.precision(30);
plaintext_file << std::fixed << ptext;
ciphertext_file << std::fixed << ctext;
plaintext_file.close();
ciphertext_file.close();
}
}
void generateChallengesRepCode(Cryptosystem cryptosystem, int num_challenges, int rep, std::string path) {
osuCrypto::PRNG prng;
prng.SetSeed(osuCrypto::sysRandomSeed());
for (int i = 0; i < num_challenges; i++) {
std::cout << "Generating challenge " << i << " for n=" << cryptosystem.get_n() << ", d/n=" << cryptosystem.get_d() / cryptosystem.get_n() << std::endl;
bool ptext = prng.getBit();
MatrixXm ctext = cryptosystem.encrypt_rep_code(cryptosystem.get_G_inv(), ptext, rep);
assert(cryptosystem.decrypt_rep_code(cryptosystem.get_B(), ctext, rep) == ptext);
std::ofstream plaintext_file(path + "/plaintext" + std::to_string(i));
std::ofstream ciphertext_file(path + "/ciphertext" + std::to_string(i));
ciphertext_file.precision(30);
plaintext_file << std::fixed << ptext;
ciphertext_file << std::fixed << ctext;
plaintext_file.close();
ciphertext_file.close();
}
}