1 #include <gtest/gtest.h>
6 #include "config/config.h"
7 #include "crypto/keymanager.h"
8 #include "storage/sqlstorage.h"
9 #include "utilities/utils.h"
12 #ifndef TEST_PKCS11_MODULE_PATH
13 #define TEST_PKCS11_MODULE_PATH "/usr/local/softhsm/libsofthsm2.so"
19 std::string private_key = Utils::readFile(
"tests/test_data/priv.key");
20 std::string public_key = Utils::readFile(
"tests/test_data/public.key");
22 config.uptane.key_type = KeyType::kRSA2048;
24 config.storage.path = temp_dir.Path();
25 auto storage = INvStorage::newStorage(config.storage);
26 storage->storePrimaryKeys(public_key, private_key);
27 KeyManager keys(storage, config.keymanagerConfig());
29 Json::Value tosign_json;
30 tosign_json[
"mykey"] =
"value";
31 Json::Value signed_json = keys.signTuf(tosign_json);
32 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
33 EXPECT_EQ(signed_json[
"signatures"][0][
"keyid"].asString(),
34 "6a809c62b4f6c2ae11abfb260a6a9a57d205fc2887ab9c83bd6be0790293e187");
35 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
40 std::string private_key =
41 "BD0A7539BD0365D7A9A3050390AD7B7C2033C58E354C5E0F42B9B611273BBA38BB9FFA4DCF35A89F6F40C5FA67998DD38B64A8459598CF3D"
43 std::string public_key =
"BB9FFA4DCF35A89F6F40C5FA67998DD38B64A8459598CF3DA93853388FDAC760";
45 config.uptane.key_type = KeyType::kED25519;
47 config.storage.path = temp_dir.Path();
48 auto storage = INvStorage::newStorage(config.storage);
50 storage->storePrimaryKeys(public_key, private_key);
51 KeyManager keys(storage, config.keymanagerConfig());
54 Json::Value tosign_json;
55 tosign_json[
"mykey"] =
"value";
56 Json::Value signed_json = keys.signTuf(tosign_json);
57 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
58 EXPECT_EQ(signed_json[
"signatures"][0][
"keyid"].asString(),
59 "a6d0f6b52ae833175dd7724899507709231723037845715c7677670e0195f850");
60 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
66 config.storage.path = temp_dir.Path();
67 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
68 KeyManager keys(storage, config.keymanagerConfig());
70 EXPECT_TRUE(keys.getCaFile().empty());
71 EXPECT_TRUE(keys.getPkeyFile().empty());
72 EXPECT_TRUE(keys.getCertFile().empty());
74 EXPECT_TRUE(keys.getCaFile().empty());
75 EXPECT_TRUE(keys.getPkeyFile().empty());
76 EXPECT_TRUE(keys.getCertFile().empty());
82 config.storage.path = temp_dir.Path();
83 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
84 std::string ca = Utils::readFile(
"tests/test_data/prov/root.crt");
85 std::string pkey = Utils::readFile(
"tests/test_data/prov/pkey.pem");
86 std::string cert = Utils::readFile(
"tests/test_data/prov/client.pem");
87 storage->storeTlsCa(ca);
88 storage->storeTlsPkey(pkey);
89 storage->storeTlsCert(cert);
90 KeyManager keys(storage, config.keymanagerConfig());
92 EXPECT_TRUE(keys.getCaFile().empty());
93 EXPECT_TRUE(keys.getPkeyFile().empty());
94 EXPECT_TRUE(keys.getCertFile().empty());
96 std::string ca_file = keys.getCaFile();
97 std::string pkey_file = keys.getPkeyFile();
98 std::string cert_file = keys.getCertFile();
100 EXPECT_TRUE(boost::filesystem::exists(ca_file));
101 EXPECT_TRUE(boost::filesystem::exists(pkey_file));
102 EXPECT_TRUE(boost::filesystem::exists(cert_file));
103 EXPECT_FALSE(boost::filesystem::is_empty(ca_file));
104 EXPECT_FALSE(boost::filesystem::is_empty(pkey_file));
105 EXPECT_FALSE(boost::filesystem::is_empty(cert_file));
106 EXPECT_EQ(ca, Utils::readFile(ca_file));
107 EXPECT_EQ(pkey, Utils::readFile(pkey_file));
108 EXPECT_EQ(cert, Utils::readFile(cert_file));
114 Json::Value tosign_json;
115 tosign_json[
"mykey"] =
"value";
118 p11_conf.module = TEST_PKCS11_MODULE_PATH;
119 p11_conf.pass =
"1234";
120 p11_conf.uptane_key_id =
"03";
122 config.p11 = p11_conf;
123 config.uptane.key_source = CryptoSource::kPkcs11;
126 config.storage.path = temp_dir.Path();
127 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
128 KeyManager keys(storage, config.keymanagerConfig());
130 EXPECT_GT(keys.UptanePublicKey().Value().size(), 0);
131 Json::Value signed_json = keys.signTuf(tosign_json);
132 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
133 EXPECT_EQ(signed_json[
"signatures"][0][
"keyid"].asString(),
134 "6a809c62b4f6c2ae11abfb260a6a9a57d205fc2887ab9c83bd6be0790293e187");
135 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
140 Json::Value tosign_json;
141 tosign_json[
"mykey"] =
"value";
144 p11_conf.module = TEST_PKCS11_MODULE_PATH;
145 p11_conf.pass =
"1234";
146 p11_conf.uptane_key_id =
"06";
148 config.p11 = p11_conf;
149 config.uptane.key_source = CryptoSource::kPkcs11;
152 config.storage.path = temp_dir.Path();
153 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
154 KeyManager keys(storage, config.keymanagerConfig());
157 EXPECT_TRUE(p11->generateUptaneKeyPair());
159 EXPECT_GT(keys.UptanePublicKey().Value().size(), 0);
160 Json::Value signed_json = keys.signTuf(tosign_json);
161 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
162 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
169 p11_conf.module = TEST_PKCS11_MODULE_PATH;
170 p11_conf.pass =
"1234";
171 p11_conf.tls_pkey_id =
"02";
172 p11_conf.tls_clientcert_id =
"01";
173 config.p11 = p11_conf;
174 config.tls.ca_source = CryptoSource::kFile;
175 config.tls.pkey_source = CryptoSource::kPkcs11;
176 config.tls.cert_source = CryptoSource::kPkcs11;
179 config.storage.path = temp_dir.Path();
180 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
182 std::string ca = Utils::readFile(
"tests/test_data/prov/root.crt");
183 storage->storeTlsCa(ca);
184 KeyManager keys(storage, config.keymanagerConfig());
185 EXPECT_TRUE(keys.getCaFile().empty());
186 EXPECT_FALSE(keys.getPkeyFile().empty());
187 EXPECT_FALSE(keys.getCertFile().empty());
189 EXPECT_FALSE(keys.getCaFile().empty());
190 EXPECT_FALSE(keys.getPkeyFile().empty());
191 EXPECT_FALSE(keys.getCertFile().empty());
196 int main(
int argc,
char** argv) {
197 ::testing::InitGoogleTest(&argc, argv);
198 return RUN_ALL_TESTS();