forked from microsoft/SEAL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
secretkey.cpp
62 lines (50 loc) · 1.99 KB
/
secretkey.cpp
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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#include "seal/context.h"
#include "seal/keygenerator.h"
#include "seal/modulus.h"
#include "seal/secretkey.h"
#include "gtest/gtest.h"
using namespace seal;
using namespace std;
namespace sealtest
{
TEST(SecretKeyTest, SaveLoadSecretKey)
{
auto save_load_secret_key = [](scheme_type scheme) {
stringstream stream;
{
EncryptionParameters parms(scheme);
parms.set_poly_modulus_degree(64);
parms.set_plain_modulus(1 << 6);
parms.set_coeff_modulus(CoeffModulus::Create(64, { 60 }));
SEALContext context(parms, false, sec_level_type::none);
KeyGenerator keygen(context);
SecretKey sk = keygen.secret_key();
ASSERT_TRUE(sk.parms_id() == context.key_parms_id());
sk.save(stream);
SecretKey sk2;
sk2.load(context, stream);
ASSERT_TRUE(sk.data() == sk2.data());
ASSERT_TRUE(sk.parms_id() == sk2.parms_id());
}
{
EncryptionParameters parms(scheme);
parms.set_poly_modulus_degree(256);
parms.set_plain_modulus(1 << 20);
parms.set_coeff_modulus(CoeffModulus::Create(256, { 30, 40 }));
SEALContext context(parms, false, sec_level_type::none);
KeyGenerator keygen(context);
SecretKey sk = keygen.secret_key();
ASSERT_TRUE(sk.parms_id() == context.key_parms_id());
sk.save(stream);
SecretKey sk2;
sk2.load(context, stream);
ASSERT_TRUE(sk.data() == sk2.data());
ASSERT_TRUE(sk.parms_id() == sk2.parms_id());
}
};
save_load_secret_key(scheme_type::bfv);
save_load_secret_key(scheme_type::bgv);
}
} // namespace sealtest