|
|
|
|
@@ -6,6 +6,7 @@
|
|
|
|
|
|
|
|
|
|
#include <cstdlib>
|
|
|
|
|
#include <cstring>
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
#include "OEMCryptoCENCCommon.h"
|
|
|
|
|
#include "core_message_deserialize.h"
|
|
|
|
|
@@ -27,6 +28,8 @@ using oemcrypto_core_message::ODK_RenewalRequest;
|
|
|
|
|
using oemcrypto_core_message::deserialize::CoreLicenseRequestFromMessage;
|
|
|
|
|
using oemcrypto_core_message::deserialize::CoreProvisioningRequestFromMessage;
|
|
|
|
|
using oemcrypto_core_message::deserialize::CoreRenewalRequestFromMessage;
|
|
|
|
|
using oemcrypto_core_message::deserialize::
|
|
|
|
|
CoreRenewedProvisioningRequestFromMessage;
|
|
|
|
|
|
|
|
|
|
using oemcrypto_core_message::features::CoreMessageFeatures;
|
|
|
|
|
|
|
|
|
|
@@ -270,6 +273,35 @@ TEST(OdkTest, NullRequestTest) {
|
|
|
|
|
ODK_PrepareCoreProvisioningRequest(
|
|
|
|
|
message, ODK_PROVISIONING_REQUEST_SIZE, &core_message_length,
|
|
|
|
|
&nonce_values, nullptr, 0uL));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ(ODK_ERROR_CORE_MESSAGE,
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
nullptr, 0uL, &core_message_length, nullptr, nullptr, 0uL,
|
|
|
|
|
OEMCrypto_RenewalACert, nullptr, 0uL));
|
|
|
|
|
EXPECT_EQ(ODK_ERROR_CORE_MESSAGE,
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
nullptr, 0uL, nullptr, &nonce_values, nullptr, 0uL,
|
|
|
|
|
OEMCrypto_RenewalACert, nullptr, 0uL));
|
|
|
|
|
|
|
|
|
|
// Null device id in renewed provisioning request is ok
|
|
|
|
|
uint8_t renewed_message[ODK_RENEWED_PROVISIONING_REQUEST_SIZE] = {0};
|
|
|
|
|
uint8_t renewal_data[ODK_KEYBOX_RENEWAL_DATA_SIZE] = {0};
|
|
|
|
|
uint32_t renewal_data_length = ODK_KEYBOX_RENEWAL_DATA_SIZE;
|
|
|
|
|
core_message_length = ODK_RENEWED_PROVISIONING_REQUEST_SIZE;
|
|
|
|
|
EXPECT_EQ(OEMCrypto_SUCCESS,
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
renewed_message, ODK_RENEWED_PROVISIONING_REQUEST_SIZE,
|
|
|
|
|
&core_message_length, &nonce_values, nullptr, 0uL,
|
|
|
|
|
OEMCrypto_RenewalACert, renewal_data, renewal_data_length));
|
|
|
|
|
|
|
|
|
|
// Null renewal data in renewed provisioning request is ok
|
|
|
|
|
uint8_t device_id[ODK_DEVICE_ID_LEN_MAX] = {0};
|
|
|
|
|
uint32_t device_id_length = ODK_DEVICE_ID_LEN_MAX;
|
|
|
|
|
core_message_length = ODK_RENEWED_PROVISIONING_REQUEST_SIZE;
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
renewed_message, ODK_RENEWED_PROVISIONING_REQUEST_SIZE,
|
|
|
|
|
&core_message_length, &nonce_values, device_id, device_id_length,
|
|
|
|
|
OEMCrypto_RenewalACert, nullptr, 0uL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, NullResponseTest) {
|
|
|
|
|
@@ -422,6 +454,21 @@ TEST(OdkTest, PrepareCoreProvisioningRequest) {
|
|
|
|
|
&core_message_length, &nonce_values, device_id, sizeof(device_id)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, PrepareCoreRenewedProvisioningRequest) {
|
|
|
|
|
uint8_t provisioning_message[ODK_RENEWED_PROVISIONING_REQUEST_SIZE] = {0};
|
|
|
|
|
size_t core_message_length = sizeof(provisioning_message);
|
|
|
|
|
ODK_NonceValues nonce_values;
|
|
|
|
|
memset(&nonce_values, 0, sizeof(nonce_values));
|
|
|
|
|
uint8_t device_id[ODK_DEVICE_ID_LEN_MAX] = {0};
|
|
|
|
|
uint8_t renewal_data[ODK_KEYBOX_RENEWAL_DATA_SIZE] = {0};
|
|
|
|
|
EXPECT_EQ(
|
|
|
|
|
OEMCrypto_SUCCESS,
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
provisioning_message, sizeof(provisioning_message),
|
|
|
|
|
&core_message_length, &nonce_values, device_id, sizeof(device_id),
|
|
|
|
|
OEMCrypto_RenewalACert, renewal_data, sizeof(renewal_data)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, PrepareCoreProvisioningRequestDeviceId) {
|
|
|
|
|
uint8_t provisioning_message[ODK_PROVISIONING_REQUEST_SIZE] = {0};
|
|
|
|
|
size_t core_message_length = sizeof(provisioning_message);
|
|
|
|
|
@@ -435,6 +482,36 @@ TEST(OdkTest, PrepareCoreProvisioningRequestDeviceId) {
|
|
|
|
|
sizeof(device_id_invalid)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, PrepareCoreRenewedProvisioningRequestDeviceId) {
|
|
|
|
|
uint8_t provisioning_message[ODK_PROVISIONING_REQUEST_SIZE] = {0};
|
|
|
|
|
size_t core_message_length = sizeof(provisioning_message);
|
|
|
|
|
ODK_NonceValues nonce_values;
|
|
|
|
|
memset(&nonce_values, 0, sizeof(nonce_values));
|
|
|
|
|
uint8_t device_id_invalid[ODK_DEVICE_ID_LEN_MAX + 1] = {0};
|
|
|
|
|
uint8_t renewal_data[ODK_KEYBOX_RENEWAL_DATA_SIZE] = {0};
|
|
|
|
|
EXPECT_EQ(ODK_ERROR_CORE_MESSAGE,
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
provisioning_message, sizeof(provisioning_message),
|
|
|
|
|
&core_message_length, &nonce_values, device_id_invalid,
|
|
|
|
|
sizeof(device_id_invalid), OEMCrypto_RenewalACert, renewal_data,
|
|
|
|
|
sizeof(renewal_data)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, PrepareCoreRenewedProvisioningRequestRenewalDataInvalid) {
|
|
|
|
|
uint8_t provisioning_message[ODK_PROVISIONING_REQUEST_SIZE] = {0};
|
|
|
|
|
size_t core_message_length = sizeof(provisioning_message);
|
|
|
|
|
ODK_NonceValues nonce_values;
|
|
|
|
|
memset(&nonce_values, 0, sizeof(nonce_values));
|
|
|
|
|
uint8_t device_id[ODK_DEVICE_ID_LEN_MAX] = {0};
|
|
|
|
|
uint8_t renewal_data_invalid[ODK_KEYBOX_RENEWAL_DATA_SIZE + 1] = {0};
|
|
|
|
|
EXPECT_EQ(ODK_ERROR_CORE_MESSAGE,
|
|
|
|
|
ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
provisioning_message, sizeof(provisioning_message),
|
|
|
|
|
&core_message_length, &nonce_values, device_id,
|
|
|
|
|
sizeof(device_id), OEMCrypto_RenewalACert, renewal_data_invalid,
|
|
|
|
|
sizeof(renewal_data_invalid)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Serialize and de-serialize license request
|
|
|
|
|
TEST(OdkTest, LicenseRequestRoundtrip) {
|
|
|
|
|
std::vector<ODK_Field> empty;
|
|
|
|
|
@@ -497,6 +574,39 @@ TEST(OdkTest, ProvisionRequestRoundtrip) {
|
|
|
|
|
kdo_parse_func);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, RenewedProvisionRequestRoundtrip) {
|
|
|
|
|
uint32_t device_id_length = ODK_DEVICE_ID_LEN_MAX / 2;
|
|
|
|
|
uint8_t device_id[ODK_DEVICE_ID_LEN_MAX] = {0};
|
|
|
|
|
memset(device_id, 0xff, device_id_length);
|
|
|
|
|
uint16_t renewal_type = OEMCrypto_RenewalACert;
|
|
|
|
|
uint32_t renewal_data_length = ODK_KEYBOX_RENEWAL_DATA_SIZE / 2;
|
|
|
|
|
uint8_t renewal_data[ODK_KEYBOX_RENEWAL_DATA_SIZE] = {0};
|
|
|
|
|
memset(renewal_data, 0xff, renewal_data_length);
|
|
|
|
|
std::vector<ODK_Field> extra_fields = {
|
|
|
|
|
{ODK_UINT32, &device_id_length, "device_id_length"},
|
|
|
|
|
{ODK_DEVICEID, device_id, "device_id"},
|
|
|
|
|
{ODK_UINT16, &renewal_type, "renewal_type"},
|
|
|
|
|
{ODK_UINT32, &renewal_data_length, "renewal_data_length"},
|
|
|
|
|
{ODK_RENEWALDATA, renewal_data, "renewal_data"},
|
|
|
|
|
};
|
|
|
|
|
auto odk_prepare_func = [&](uint8_t* const buf, size_t* size,
|
|
|
|
|
const ODK_NonceValues* nonce_values) {
|
|
|
|
|
return ODK_PrepareCoreRenewedProvisioningRequest(
|
|
|
|
|
buf, SIZE_MAX, size, nonce_values, device_id, device_id_length,
|
|
|
|
|
renewal_type, renewal_data, renewal_data_length);
|
|
|
|
|
};
|
|
|
|
|
auto kdo_parse_func =
|
|
|
|
|
[&](const std::string& oemcrypto_core_message,
|
|
|
|
|
ODK_ProvisioningRequest* core_provisioning_request) {
|
|
|
|
|
bool ok = CoreRenewedProvisioningRequestFromMessage(
|
|
|
|
|
oemcrypto_core_message, core_provisioning_request);
|
|
|
|
|
return ok;
|
|
|
|
|
};
|
|
|
|
|
ValidateRequest<ODK_ProvisioningRequest>(
|
|
|
|
|
ODK_Renewed_Provisioning_Request_Type, extra_fields, odk_prepare_func,
|
|
|
|
|
kdo_parse_func);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(OdkTest, ParseLicenseErrorNonce) {
|
|
|
|
|
ODK_LicenseResponseParams params;
|
|
|
|
|
ODK_SetDefaultLicenseResponseParams(¶ms, ODK_MAJOR_VERSION);
|
|
|
|
|
@@ -761,6 +871,7 @@ std::vector<VersionParameters> TestCases() {
|
|
|
|
|
{17, 16, 4, 16, 4},
|
|
|
|
|
{17, 16, 5, 16, 5},
|
|
|
|
|
{17, 17, 0, 17, 0},
|
|
|
|
|
{17, 17, 1, 17, 1},
|
|
|
|
|
};
|
|
|
|
|
return test_cases;
|
|
|
|
|
}
|
|
|
|
|
|