28#include <glog/logging.h>
29#include <gmock/gmock.h>
30#include <gtest/gtest.h>
38using ::resdb::testing::EqualsProto;
40TEST(SignatureVerifyTest, CalculateHash) {
41 std::string expected_str =
42 "\x9F\x86\xD0\x81\x88L}e\x9A/"
43 "\xEA\xA0\xC5Z\xD0\x15\xA3\xBFO\x1B+\v\x82,\xD1]l\x15\xB0\xF0\n\b";
47KeyInfo GetKeyInfo(SecretKey key) {
49 info.set_key(key.private_key());
50 info.set_hash_type(key.hash_type());
54class SignatureVerifyPTest
55 :
public ::testing::TestWithParam<SignatureInfo::HashType> {
57 SignatureVerifyPTest() {
58 admin_key_ = KeyGenerator ::GeneratorKeys(SignatureInfo::RSA);
59 admin_verifier_ = std::make_unique<SignatureVerifier>(
60 GetKeyInfo(admin_key_), GetCertInfo(0));
63 CertificateInfo GetCertInfo(int64_t node_id) {
64 CertificateInfo cert_info;
65 cert_info.set_node_id(node_id);
67 cert_info.mutable_admin_public_key()->set_key(admin_key_.public_key());
68 cert_info.mutable_admin_public_key()->set_hash_type(admin_key_.hash_type());
73 CertificateKey GetPublicKeyInfo(SecretKey key, int64_t node_id) {
74 CertificateKey cert_key;
75 cert_key.mutable_public_key_info()->mutable_key()->set_key(
77 cert_key.mutable_public_key_info()->mutable_key()->set_hash_type(
79 cert_key.mutable_public_key_info()->set_node_id(node_id);
82 admin_verifier_->SignCertificateKeyInfo(cert_key.public_key_info());
83 assert(resp_info.ok());
84 *cert_key.mutable_certificate() = *resp_info;
90 std::unique_ptr<SignatureVerifier> admin_verifier_;
93TEST_P(SignatureVerifyPTest, SignAndVerify) {
94 SignatureInfo::HashType type = GetParam();
95 absl::StatusOr<SignatureInfo> s_info;
96 std::string message =
"test_message";
97 SecretKey my_key = KeyGenerator ::GeneratorKeys(type);
98 int64_t my_node_id = 1, your_node_id = 2;
100 SignatureVerifier verifier(GetKeyInfo(my_key), GetCertInfo(my_node_id));
101 s_info = verifier.SignMessage(message);
102 EXPECT_TRUE(s_info.ok());
103 EXPECT_EQ(s_info->node_id(), my_node_id);
106 SecretKey your_key = KeyGenerator ::GeneratorKeys(type);
107 SignatureVerifier verifier(GetKeyInfo(your_key), GetCertInfo(your_node_id));
108 verifier.AddPublicKey(GetPublicKeyInfo(my_key, my_node_id));
109 EXPECT_TRUE(verifier.VerifyMessage(message, *s_info));
113TEST_P(SignatureVerifyPTest, KeyNotFound) {
114 SignatureInfo::HashType type = GetParam();
116 absl::StatusOr<SignatureInfo> s_info;
117 std::string message =
"test_message";
118 SecretKey my_key = KeyGenerator ::GeneratorKeys(type);
119 int64_t my_node_id = 1, your_node_id = 2;
122 SignatureVerifier verifier(GetKeyInfo(my_key), GetCertInfo(my_node_id));
123 s_info = verifier.SignMessage(message);
124 EXPECT_TRUE(s_info.ok());
125 EXPECT_EQ(s_info->node_id(), my_node_id);
129 SecretKey your_key = KeyGenerator ::GeneratorKeys(type);
130 SignatureVerifier verifier(GetKeyInfo(your_key), GetCertInfo(your_node_id));
131 EXPECT_FALSE(verifier.VerifyMessage(message, *s_info));
135TEST_P(SignatureVerifyPTest, KeyNotMatch) {
136 SignatureInfo::HashType type = GetParam();
138 absl::StatusOr<SignatureInfo> s_info;
139 std::string message =
"test_message";
140 SecretKey my_key = KeyGenerator ::GeneratorKeys(type);
141 SecretKey your_key = KeyGenerator ::GeneratorKeys(type);
142 int64_t my_node_id = 1, your_node_id = 2;
145 SignatureVerifier verifier(GetKeyInfo(my_key), GetCertInfo(my_node_id));
146 s_info = verifier.SignMessage(message);
147 EXPECT_TRUE(s_info.ok());
148 EXPECT_EQ(s_info->node_id(), my_node_id);
152 SignatureVerifier verifier(GetKeyInfo(your_key), GetCertInfo(your_node_id));
153 verifier.AddPublicKey(GetPublicKeyInfo(your_key, my_node_id));
154 EXPECT_FALSE(verifier.VerifyMessage(message, *s_info));
158INSTANTIATE_TEST_SUITE_P(SignatureVerifyPTest, SignatureVerifyPTest,
159 ::testing::Values(SignatureInfo::RSA,
160 SignatureInfo::ED25519,
161 SignatureInfo::CMAC_AES,
162 SignatureInfo::ECDSA));
static std::string CalculateHash(const std::string &str)
TEST(NetworkUtilsTest, GetDNSName)