1 #include <gtest/gtest.h> 6 #include "crypto/keymanager.h" 7 #include "libaktualizr/config.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);
36 EXPECT_EQ(signed_json[
"signatures"][0][
"method"].asString(),
"rsassa-pss");
41 std::string private_key =
42 "BD0A7539BD0365D7A9A3050390AD7B7C2033C58E354C5E0F42B9B611273BBA38BB9FFA4DCF35A89F6F40C5FA67998DD38B64A8459598CF3D" 44 std::string public_key =
"BB9FFA4DCF35A89F6F40C5FA67998DD38B64A8459598CF3DA93853388FDAC760";
46 config.uptane.key_type = KeyType::kED25519;
48 config.storage.path = temp_dir.Path();
49 auto storage = INvStorage::newStorage(config.storage);
51 storage->storePrimaryKeys(public_key, private_key);
52 KeyManager keys(storage, config.keymanagerConfig());
55 Json::Value tosign_json;
56 tosign_json[
"mykey"] =
"value";
57 Json::Value signed_json = keys.signTuf(tosign_json);
58 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
59 EXPECT_EQ(signed_json[
"signatures"][0][
"keyid"].asString(),
60 "a6d0f6b52ae833175dd7724899507709231723037845715c7677670e0195f850");
61 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
62 EXPECT_EQ(signed_json[
"signatures"][0][
"method"].asString(),
"ed25519");
68 config.storage.path = temp_dir.Path();
69 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
70 KeyManager keys(storage, config.keymanagerConfig());
72 EXPECT_TRUE(keys.getCaFile().empty());
73 EXPECT_TRUE(keys.getPkeyFile().empty());
74 EXPECT_TRUE(keys.getCertFile().empty());
76 EXPECT_TRUE(keys.getCaFile().empty());
77 EXPECT_TRUE(keys.getPkeyFile().empty());
78 EXPECT_TRUE(keys.getCertFile().empty());
84 config.storage.path = temp_dir.Path();
85 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
86 std::string ca = Utils::readFile(
"tests/test_data/prov/root.crt");
87 std::string pkey = Utils::readFile(
"tests/test_data/prov/pkey.pem");
88 std::string cert = Utils::readFile(
"tests/test_data/prov/client.pem");
89 storage->storeTlsCa(ca);
90 storage->storeTlsPkey(pkey);
91 storage->storeTlsCert(cert);
92 KeyManager keys(storage, config.keymanagerConfig());
94 EXPECT_TRUE(keys.getCaFile().empty());
95 EXPECT_TRUE(keys.getPkeyFile().empty());
96 EXPECT_TRUE(keys.getCertFile().empty());
98 std::string ca_file = keys.getCaFile();
99 std::string pkey_file = keys.getPkeyFile();
100 std::string cert_file = keys.getCertFile();
102 EXPECT_TRUE(boost::filesystem::exists(ca_file));
103 EXPECT_TRUE(boost::filesystem::exists(pkey_file));
104 EXPECT_TRUE(boost::filesystem::exists(cert_file));
105 EXPECT_FALSE(boost::filesystem::is_empty(ca_file));
106 EXPECT_FALSE(boost::filesystem::is_empty(pkey_file));
107 EXPECT_FALSE(boost::filesystem::is_empty(cert_file));
108 EXPECT_EQ(ca, Utils::readFile(ca_file));
109 EXPECT_EQ(pkey, Utils::readFile(pkey_file));
110 EXPECT_EQ(cert, Utils::readFile(cert_file));
116 Json::Value tosign_json;
117 tosign_json[
"mykey"] =
"value";
120 p11_conf.module = TEST_PKCS11_MODULE_PATH;
121 p11_conf.pass =
"1234";
122 p11_conf.uptane_key_id =
"03";
124 config.p11 = p11_conf;
125 config.uptane.key_source = CryptoSource::kPkcs11;
128 config.storage.path = temp_dir.Path();
129 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
130 KeyManager keys(storage, config.keymanagerConfig());
132 EXPECT_GT(keys.UptanePublicKey().Value().size(), 0);
133 Json::Value signed_json = keys.signTuf(tosign_json);
134 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
135 EXPECT_EQ(signed_json[
"signatures"][0][
"keyid"].asString(),
136 "6a809c62b4f6c2ae11abfb260a6a9a57d205fc2887ab9c83bd6be0790293e187");
137 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
142 Json::Value tosign_json;
143 tosign_json[
"mykey"] =
"value";
146 p11_conf.module = TEST_PKCS11_MODULE_PATH;
147 p11_conf.pass =
"1234";
148 p11_conf.uptane_key_id =
"06";
150 config.p11 = p11_conf;
151 config.uptane.key_source = CryptoSource::kPkcs11;
154 config.storage.path = temp_dir.Path();
155 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
156 KeyManager keys(storage, config.keymanagerConfig());
159 EXPECT_TRUE(p11->generateUptaneKeyPair());
161 EXPECT_GT(keys.UptanePublicKey().Value().size(), 0);
162 Json::Value signed_json = keys.signTuf(tosign_json);
163 EXPECT_EQ(signed_json[
"signed"][
"mykey"].asString(),
"value");
164 EXPECT_NE(signed_json[
"signatures"][0][
"sig"].asString().size(), 0);
171 p11_conf.module = TEST_PKCS11_MODULE_PATH;
172 p11_conf.pass =
"1234";
173 p11_conf.tls_pkey_id =
"02";
174 p11_conf.tls_clientcert_id =
"01";
175 config.p11 = p11_conf;
176 config.tls.ca_source = CryptoSource::kFile;
177 config.tls.pkey_source = CryptoSource::kPkcs11;
178 config.tls.cert_source = CryptoSource::kPkcs11;
181 config.storage.path = temp_dir.Path();
182 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
184 std::string ca = Utils::readFile(
"tests/test_data/prov/root.crt");
185 storage->storeTlsCa(ca);
186 KeyManager keys(storage, config.keymanagerConfig());
187 EXPECT_TRUE(keys.getCaFile().empty());
188 EXPECT_FALSE(keys.getPkeyFile().empty());
189 EXPECT_FALSE(keys.getCertFile().empty());
191 EXPECT_FALSE(keys.getCaFile().empty());
192 EXPECT_FALSE(keys.getPkeyFile().empty());
193 EXPECT_FALSE(keys.getCertFile().empty());
198 int main(
int argc,
char** argv) {
199 ::testing::InitGoogleTest(&argc, argv);
200 return RUN_ALL_TESTS();
Configuration object for an aktualizr instance running on a Primary ECU.