#include "client_test_helpers.h"
#include "sa.h"
#include "sa_key_common.h"
#include "gtest/gtest.h"
using namespace client_test_helpers;
namespace {
TEST_F(SaKeyGenerateTest, failsDhNullParameters) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, nullptr);
ASSERT_EQ(status, SA_STATUS_NULL_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhNullP) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> const dhp4096 = sample_dh_p_4096();
std::vector<uint8_t> dhg4096 = sample_dh_g_4096();
sa_generate_parameters_dh parameters = {nullptr, dhp4096.size(), dhg4096.data(), dhg4096.size()};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_NULL_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhNullG) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> dhp4096 = sample_dh_p_4096();
std::vector<uint8_t> const dhg4096 = sample_dh_g_4096();
sa_generate_parameters_dh parameters = {dhp4096.data(), dhp4096.size(), nullptr, dhg4096.size()};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_NULL_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhInvalidP) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> dhp_invalid_4096 = sample_dh_invalid_p_4096();
std::vector<uint8_t> dhg4096 = sample_dh_g_4096();
sa_generate_parameters_dh parameters = {dhp_invalid_4096.data(), dhp_invalid_4096.size(), dhg4096.data(),
dhg4096.size()};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_INVALID_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhInvalidPLengthZero) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> dhp4096 = sample_dh_p_4096();
std::vector<uint8_t> dhg4096 = sample_dh_g_4096();
sa_generate_parameters_dh parameters = {dhp4096.data(), 0, dhg4096.data(), dhg4096.size()};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_INVALID_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhInvalidGLengthZero) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> dhp4096 = sample_dh_p_4096();
std::vector<uint8_t> dhg4096 = sample_dh_g_4096();
sa_generate_parameters_dh parameters = {dhp4096.data(), dhp4096.size(), dhg4096.data(), 0};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_INVALID_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhInvalidPLengthMax) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> dhp4096 = sample_dh_p_4096();
std::vector<uint8_t> dhg4096 = sample_dh_g_4096();
dhp4096.push_back(1);
sa_generate_parameters_dh parameters = {dhp4096.data(), dhp4096.size(), dhg4096.data(), dhg4096.size()};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_INVALID_PARAMETER);
}
TEST_F(SaKeyGenerateTest, failsDhInvalidGLength) {
auto key = create_uninitialized_sa_key();
ASSERT_NE(key, nullptr);
sa_rights rights;
sa_rights_set_allow_all(&rights);
std::vector<uint8_t> dhp4096 = sample_dh_p_4096();
std::vector<uint8_t> dhg4096 = random(dhp4096.size() + 1);
sa_generate_parameters_dh parameters = {dhp4096.data(), dhp4096.size(), dhg4096.data(), dhg4096.size()};
sa_status const status = sa_key_generate(key.get(), &rights, SA_KEY_TYPE_DH, ¶meters);
ASSERT_EQ(status, SA_STATUS_INVALID_PARAMETER);
}
}