Source release 19.5.0
This commit is contained in:
@@ -4,6 +4,9 @@
|
||||
|
||||
#include "message_dumper.h"
|
||||
|
||||
#include <iomanip>
|
||||
|
||||
#include "core_message_deserialize.h"
|
||||
#include "license_request.h"
|
||||
#include "odk.h"
|
||||
#include "odk_message.h"
|
||||
@@ -129,6 +132,65 @@ void MessageDumper::TearDown() {
|
||||
provision_file.close();
|
||||
}
|
||||
|
||||
void MessageDumper::PrintLicenseRequest(const CdmKeyRequest& request) {
|
||||
SignedMessage signed_message;
|
||||
ASSERT_TRUE(signed_message.ParseFromString(request.message));
|
||||
if (wvoec::global_features.api_version >= wvoec::kCoreMessagesAPI) {
|
||||
ASSERT_TRUE(signed_message.has_oemcrypto_core_message());
|
||||
const std::string& core_request = signed_message.oemcrypto_core_message();
|
||||
oemcrypto_core_message::ODK_LicenseRequest core_request_data;
|
||||
ASSERT_TRUE(
|
||||
oemcrypto_core_message::deserialize::CoreLicenseRequestFromMessage(
|
||||
core_request, &core_request_data));
|
||||
|
||||
// Print core message information for the license request.
|
||||
std::cout << std::endl << "License Request Information:" << std::endl;
|
||||
std::cout << " License Request Core Version = "
|
||||
<< core_request_data.api_major_version << "."
|
||||
<< core_request_data.api_minor_version << std::endl;
|
||||
std::cout << " Nonce = " << core_request_data.nonce << std::endl;
|
||||
std::cout << " Session ID = " << core_request_data.session_id << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void MessageDumper::PrintLicenseResponse(const std::string& response) {
|
||||
SignedMessage signed_response;
|
||||
ASSERT_TRUE(signed_response.ParseFromString(response));
|
||||
if (wvoec::global_features.api_version >= wvoec::kCoreMessagesAPI) {
|
||||
ASSERT_TRUE(signed_response.has_oemcrypto_core_message());
|
||||
video_widevine::License license;
|
||||
ASSERT_TRUE(license.ParseFromString(signed_response.msg()));
|
||||
|
||||
std::string message =
|
||||
signed_response.oemcrypto_core_message() + signed_response.msg();
|
||||
ODK_Message odk_msg = ODK_Message_Create(
|
||||
reinterpret_cast<uint8_t*>(const_cast<char*>(message.c_str())),
|
||||
message.length());
|
||||
ODK_Message_SetSize(&odk_msg,
|
||||
signed_response.oemcrypto_core_message().length());
|
||||
ODK_ParsedLicense odk_parsed_license = {};
|
||||
ODK_LicenseResponse odk_license_response = {};
|
||||
odk_license_response.parsed_license = &odk_parsed_license;
|
||||
Unpack_ODK_LicenseResponse(&odk_msg, &odk_license_response);
|
||||
ASSERT_EQ(ODK_Message_GetStatus(&odk_msg), MESSAGE_STATUS_OK);
|
||||
|
||||
// Print core message information for the license response.
|
||||
std::cout << std::endl << "License Response Information:" << std::endl;
|
||||
std::cout
|
||||
<< " License Response Core Version = "
|
||||
<< odk_license_response.core_message.nonce_values.api_major_version
|
||||
<< "."
|
||||
<< odk_license_response.core_message.nonce_values.api_minor_version
|
||||
<< std::endl;
|
||||
std::cout << " Nonce = "
|
||||
<< odk_license_response.core_message.nonce_values.nonce
|
||||
<< std::endl;
|
||||
std::cout << " Session ID = "
|
||||
<< odk_license_response.core_message.nonce_values.session_id
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void MessageDumper::DumpLicenseRequest(const CdmKeyRequest& request) {
|
||||
SignedMessage signed_message;
|
||||
DumpHeader(&license_file, "License");
|
||||
@@ -142,8 +204,8 @@ void MessageDumper::DumpLicenseRequest(const CdmKeyRequest& request) {
|
||||
// request is valid.
|
||||
video_widevine::LicenseRequest license_request;
|
||||
EXPECT_TRUE(license_request.ParseFromString(signed_message.msg()));
|
||||
// TODO(fredgc): figure out if we can build tests with full protobufs instead
|
||||
// of proto lite, so that we can use TextFormat.
|
||||
// TODO(fredgc): figure out if we can build tests with full protobufs
|
||||
// instead of proto lite, so that we can use TextFormat.
|
||||
PrintRequestProto("License Request", license_request);
|
||||
}
|
||||
|
||||
@@ -231,6 +293,131 @@ void MessageDumper::DumpRenewal(const std::string& response) {
|
||||
renewal_file << "}\n\n";
|
||||
}
|
||||
|
||||
void MessageDumper::PrintProvisioningRequest(
|
||||
const CdmProvisioningRequest& request) {
|
||||
SignedProvisioningMessage signed_message;
|
||||
ASSERT_TRUE(signed_message.ParseFromString(request));
|
||||
if (wvoec::global_features.api_version >= wvoec::kCoreMessagesAPI) {
|
||||
ASSERT_TRUE(signed_message.has_oemcrypto_core_message());
|
||||
const std::string& core_request = signed_message.oemcrypto_core_message();
|
||||
oemcrypto_core_message::ODK_ProvisioningRequest core_request_data;
|
||||
ASSERT_TRUE(
|
||||
oemcrypto_core_message::deserialize::CoreProvisioningRequestFromMessage(
|
||||
core_request, &core_request_data));
|
||||
|
||||
// Print core message information for the provisioning request.
|
||||
if (wvoec::global_features.derive_key_method ==
|
||||
wvoec::DeviceFeatures::TEST_PROVISION_40) {
|
||||
std::cout << std::endl
|
||||
<< "Provisioning 4.0 Request Information:" << std::endl;
|
||||
std::cout << " Provisioning 4.0 Request Core Version = "
|
||||
<< core_request_data.api_major_version << "."
|
||||
<< core_request_data.api_minor_version << std::endl;
|
||||
} else {
|
||||
std::cout << std::endl
|
||||
<< "Provisioning Request Information:" << std::endl;
|
||||
std::cout << " Provisioning Request Core Version = "
|
||||
<< core_request_data.api_major_version << "."
|
||||
<< core_request_data.api_minor_version << std::endl;
|
||||
}
|
||||
std::cout << " Nonce = " << core_request_data.nonce << std::endl;
|
||||
std::cout << " Session ID = " << core_request_data.session_id << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void MessageDumper::PrintProvisioningResponse(
|
||||
const CdmProvisioningResponse& response) {
|
||||
if (wvoec::global_features.derive_key_method ==
|
||||
wvoec::DeviceFeatures::TEST_PROVISION_40) {
|
||||
std::cout << " Provisioning 4.0 does not have a response. " << std::endl;
|
||||
return;
|
||||
}
|
||||
SignedProvisioningMessage signed_response;
|
||||
if (!signed_response.ParseFromString(response)) {
|
||||
// A binary provisioning response is buried within a json structure.
|
||||
std::string extracted_message;
|
||||
ASSERT_TRUE(CertificateProvisioning::ExtractAndDecodeSignedMessage(
|
||||
response, &extracted_message));
|
||||
ASSERT_TRUE(signed_response.ParseFromString(extracted_message));
|
||||
}
|
||||
if (wvoec::global_features.api_version >= wvoec::kCoreMessagesAPI) {
|
||||
ASSERT_TRUE(signed_response.has_oemcrypto_core_message());
|
||||
std::string message =
|
||||
signed_response.oemcrypto_core_message() + signed_response.message();
|
||||
ODK_Message odk_msg = ODK_Message_Create(
|
||||
reinterpret_cast<uint8_t*>(const_cast<char*>(message.c_str())),
|
||||
message.length());
|
||||
ODK_Message_SetSize(&odk_msg,
|
||||
signed_response.oemcrypto_core_message().length());
|
||||
|
||||
ODK_ParsedProvisioning odk_parsed_provisioning;
|
||||
// For v17 and earlier, we use a special v16/v17 provisioning response type.
|
||||
// So need to separate the way we unpack the provisioning response into
|
||||
// v16/v17 and v18+.
|
||||
if (wvoec::global_features.api_version > 17) {
|
||||
ODK_ProvisioningResponse odk_provisioning_response;
|
||||
odk_provisioning_response.parsed_provisioning = &odk_parsed_provisioning;
|
||||
Unpack_ODK_ProvisioningResponse(&odk_msg, &odk_provisioning_response);
|
||||
EXPECT_EQ(ODK_Message_GetStatus(&odk_msg), MESSAGE_STATUS_OK);
|
||||
|
||||
// Print core message information for the provisioning response.
|
||||
std::cout << std::endl
|
||||
<< "Provisioning Response Information:" << std::endl;
|
||||
std::cout << " Provisioning Response Core Version = "
|
||||
<< odk_provisioning_response.core_message.nonce_values
|
||||
.api_major_version
|
||||
<< "."
|
||||
<< odk_provisioning_response.core_message.nonce_values
|
||||
.api_minor_version
|
||||
<< std::endl;
|
||||
std::cout << " Nonce = "
|
||||
<< odk_provisioning_response.core_message.nonce_values.nonce
|
||||
<< std::endl;
|
||||
std::cout
|
||||
<< " Session ID = "
|
||||
<< odk_provisioning_response.core_message.nonce_values.session_id
|
||||
<< std::endl;
|
||||
std::cout << " Key Type = "
|
||||
<< ((odk_parsed_provisioning.key_type ==
|
||||
OEMCrypto_RSA_Private_Key)
|
||||
? "OEMCrypto_RSA_Private_Key"
|
||||
: "OEMCrypto_ECC_Private_Key")
|
||||
<< std::endl;
|
||||
} else {
|
||||
// ODK_ParsedProvisioning odk_parsed_provisioning;
|
||||
ODK_ProvisioningResponseV16 odk_provisioning_response;
|
||||
odk_provisioning_response.parsed_provisioning = &odk_parsed_provisioning;
|
||||
Unpack_ODK_ProvisioningResponseV16(&odk_msg, &odk_provisioning_response);
|
||||
EXPECT_EQ(ODK_Message_GetStatus(&odk_msg), MESSAGE_STATUS_OK);
|
||||
|
||||
// Print core message information for the provisioning response.
|
||||
std::cout << std::endl
|
||||
<< "Provisioning Response Information:" << std::endl;
|
||||
std::cout << " Provisioning Response Core Version = "
|
||||
<< odk_provisioning_response.request.core_message.nonce_values
|
||||
.api_major_version
|
||||
<< "."
|
||||
<< odk_provisioning_response.request.core_message.nonce_values
|
||||
.api_minor_version
|
||||
<< std::endl;
|
||||
std::cout
|
||||
<< " Nonce = "
|
||||
<< odk_provisioning_response.request.core_message.nonce_values.nonce
|
||||
<< std::endl;
|
||||
std::cout << " Session ID = "
|
||||
<< odk_provisioning_response.request.core_message.nonce_values
|
||||
.session_id
|
||||
<< std::endl;
|
||||
std::cout << " Key Type = "
|
||||
<< ((odk_parsed_provisioning.key_type ==
|
||||
OEMCrypto_RSA_Private_Key)
|
||||
? "OEMCrypto_RSA_Private_Key"
|
||||
: "OEMCrypto_ECC_Private_Key")
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessageDumper::DumpProvisioningRequest(
|
||||
const CdmProvisioningRequest& request) {
|
||||
if (wvoec::global_features.derive_key_method ==
|
||||
@@ -255,7 +442,8 @@ void MessageDumper::DumpProvisioning(const CdmProvisioningResponse& response) {
|
||||
if (wvoec::global_features.derive_key_method ==
|
||||
wvoec::DeviceFeatures::TEST_PROVISION_40) {
|
||||
LOGD(
|
||||
"Provisioning 4.0 does not have a v17, v18 or v19 core message in the "
|
||||
"Provisioning 4.0 does not have a v17, v18 or v19 core message in "
|
||||
"the "
|
||||
"response.");
|
||||
provision_file << " RunTest();\n";
|
||||
provision_file << "}\n\n";
|
||||
@@ -285,13 +473,13 @@ void MessageDumper::DumpProvisioning(const CdmProvisioningResponse& response) {
|
||||
message.length());
|
||||
ODK_Message_SetSize(&odk_msg,
|
||||
signed_response.oemcrypto_core_message().length());
|
||||
ODK_ParsedProvisioning odk_parsed_response;
|
||||
ODK_ProvisioningResponse provisioning_response;
|
||||
provisioning_response.parsed_provisioning = &odk_parsed_response;
|
||||
Unpack_ODK_ProvisioningResponse(&odk_msg, &provisioning_response);
|
||||
ODK_ParsedProvisioning odk_parsed_provisioning;
|
||||
ODK_ProvisioningResponse odk_provisioning_response;
|
||||
odk_provisioning_response.parsed_provisioning = &odk_parsed_provisioning;
|
||||
Unpack_ODK_ProvisioningResponse(&odk_msg, &odk_provisioning_response);
|
||||
EXPECT_EQ(ODK_Message_GetStatus(&odk_msg), MESSAGE_STATUS_OK);
|
||||
provision_file << " device_key_type_ = "
|
||||
<< ((odk_parsed_response.key_type ==
|
||||
<< ((odk_parsed_provisioning.key_type ==
|
||||
OEMCrypto_RSA_Private_Key)
|
||||
? "OEMCrypto_RSA_Private_Key;\n"
|
||||
: "OEMCrypto_ECC_Private_Key;\n");
|
||||
|
||||
Reference in New Issue
Block a user