License release does not use core message

Merge from Widevine repo of http://go/wvgerrit/99843

When processing a license release, the license is not loaded, so
OEMCrypto does not know nonce version information for the core
message. It assumes that all license releases are v15, so it is not an
error for a license release to not have a core message.

This CL also adds some extra logging to tests so that we can track
content id and the pssh. This CL also updates some of the test content
policies when running the local license server. The local license
server is only used for debugging problems.

Bug: 152648172 Integration test WvCdmEngineTest.LicenseRenewal failing
Bug: 156259697 License release does not need core message
Test: Unit tests with v16 mod mock
Change-Id: I04c896adadfb17877ce1115345d2419e0d2489f0
This commit is contained in:
Fred Gylys-Colwell
2020-05-11 10:16:19 -07:00
parent 66e3d69300
commit 760bf71908
5 changed files with 25 additions and 10 deletions

View File

@@ -702,12 +702,13 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse(
return INVALID_LICENSE_TYPE;
}
// At this point of the license life-cycle (handling a renewal or
// release), we should already know if the license is v15 or not.
// If license is v16, then there should be a |core_message|
// present; otherwise there might have beeen some tampering with the
// request or response.
if (supports_core_messages() &&
// At this point of the license life-cycle (handling a renewal), we should
// already know if the license is v15 or not. If license is v16, then a
// renewal should have a |core_message| present; otherwise there might have
// been some tampering with the request or response. On the other hand, a
// release is processed without loading the license, so OEMCrypto does not
// know if it is v15 or v16, and will not add a core message.
if (is_renewal && supports_core_messages() &&
(!signed_response.has_oemcrypto_core_message() ||
signed_response.oemcrypto_core_message().empty())) {
LOGE("Renewal response is missing |core_message| field");
@@ -720,8 +721,9 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse(
}
const std::string& signed_message = signed_response.msg();
const std::string core_message =
supports_core_messages() ? signed_response.oemcrypto_core_message()
: std::string();
signed_response.has_oemcrypto_core_message()
? signed_response.oemcrypto_core_message()
: std::string();
const std::string& signature = signed_response.signature();
License license;

View File

@@ -562,6 +562,7 @@ void TestLicenseHolder::GenerateKeyRequest(
CdmAppParameterMap app_parameters;
CdmKeySetId key_set_id;
InitializationData init_data(init_data_type_string, key_id);
if (g_cutoff >= LOG_DEBUG) init_data.DumpToLogs();
CdmKeyRequest key_request;
CdmResponseType result = cdm_engine_->GenerateKeyRequest(
session_id_, key_set_id, init_data, kLicenseTypeStreaming, app_parameters,

View File

@@ -268,9 +268,13 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
CdmResponseType *response) {
CdmAppParameterMap app_parameters;
CdmKeyRequest key_request;
const std::string init_data_type = "video/mp4";
if (g_cutoff >= LOG_DEBUG) {
InitializationData parsed_init_data(init_data_type, init_data);
parsed_init_data.DumpToLogs();
}
*response = decryptor_->GenerateKeyRequest(
session_id_, key_set_id_, "video/mp4", init_data,
session_id_, key_set_id_, init_data_type, init_data,
license_type, app_parameters, nullptr,
kDefaultCdmIdentifier, &key_request);
if (*response == KEY_MESSAGE) {

View File

@@ -326,6 +326,10 @@ class WvCdmFeatureTest : public WvCdmTestBase {
CdmKeyRequest key_request;
std::string key_set_id;
license_type_ = license_type;
if (g_cutoff >= LOG_DEBUG) {
InitializationData parsed_init_data(init_data_type, init_data);
parsed_init_data.DumpToLogs();
}
EXPECT_EQ(
expected_response,
decryptor_.GenerateKeyRequest(

View File

@@ -1776,6 +1776,10 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
CdmKeyRequest key_request;
std::string key_set_id;
license_type_ = license_type;
if (g_cutoff >= LOG_DEBUG) {
InitializationData parsed_init_data(init_data_type, init_data);
parsed_init_data.DumpToLogs();
}
EXPECT_EQ(
expected_response,
decryptor_->GenerateKeyRequest(