Add query to CDM to get provisioning model

Bug: b/133855570
Tests: Android tests/CE CDM tests/Linux tests
Merge of http://go/wvgerrit/80163

Adds a query option to QueryStatus to get the provisioning model of the
OEMCrypto.

Change-Id: I1896984be6294a5ada9a97b63e6d9080297e92b0
This commit is contained in:
Srujan Gaddam
2019-05-29 15:55:44 -07:00
parent a178eed57d
commit dcf3f21289
3 changed files with 47 additions and 3 deletions

View File

@@ -81,6 +81,7 @@ static const std::string QUERY_KEY_RESOURCE_RATING_TIER = "ResourceRatingTier";
static const std::string QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION =
"OemCryptoBuildInformation";
static const std::string QUERY_KEY_DECRYPT_HASH_SUPPORT = "DecryptHashSupport";
static const std::string QUERY_KEY_PROVISIONING_MODEL = "ProvisioningModel";
static const std::string QUERY_VALUE_TRUE = "True";
static const std::string QUERY_VALUE_FALSE = "False";
@@ -100,6 +101,9 @@ static const std::string QUERY_VALUE_HDCP_V2_1 = "HDCP-2.1";
static const std::string QUERY_VALUE_HDCP_V2_2 = "HDCP-2.2";
static const std::string QUERY_VALUE_HDCP_V2_3 = "HDCP-2.3";
static const std::string QUERY_VALUE_HDCP_LEVEL_UNKNOWN = "HDCP-LevelUnknown";
static const std::string QUERY_VALUE_DRM_CERTIFICATE = "DrmCertificate";
static const std::string QUERY_VALUE_KEYBOX = "Keybox";
static const std::string QUERY_VALUE_OEM_CERTIFICATE = "OEMCertificate";
static const std::string ISO_BMFF_VIDEO_MIME_TYPE = "video/mp4";
static const std::string ISO_BMFF_AUDIO_MIME_TYPE = "audio/mp4";

View File

@@ -672,6 +672,33 @@ CdmResponseType CdmEngine::QueryStatus(SecurityLevel security_level,
*query_response =
std::to_string(crypto_session->IsDecryptHashSupported(security_level));
return NO_ERROR;
} else if (query_token == QUERY_KEY_PROVISIONING_MODEL) {
CdmClientTokenType token_type = kClientTokenUninitialized;
status = crypto_session->GetProvisioningMethod(security_level, &token_type);
if (status != NO_ERROR) {
LOGW("CdmEngine::QueryStatus: GetProvisioningMethod failed: %d", status);
return status;
}
switch (token_type) {
case kClientTokenDrmCert:
*query_response = QUERY_VALUE_DRM_CERTIFICATE;
break;
case kClientTokenKeybox:
*query_response = QUERY_VALUE_KEYBOX;
break;
case kClientTokenOemCert:
*query_response = QUERY_VALUE_OEM_CERTIFICATE;
break;
case kClientTokenUninitialized:
default:
LOGW(
"CdmEngine::QueryStatus: GetProvisioningMethod returns invalid "
"token type: %d",
token_type);
return GET_PROVISIONING_METHOD_ERROR;
break;
}
return NO_ERROR;
}
M_TIME(status = crypto_session->Open(security_level),

View File

@@ -4830,9 +4830,15 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatus) {
EXPECT_TRUE(!value.empty());
EXPECT_EQ(wvcdm::NO_ERROR,
decryptor_->QueryStatus(kLevelDefault,
wvcdm::QUERY_KEY_CURRENT_SRM_VERSION,
&value));
decryptor_->QueryStatus(
kLevelDefault, wvcdm::QUERY_KEY_CURRENT_SRM_VERSION, &value));
EXPECT_EQ(wvcdm::NO_ERROR,
decryptor_->QueryStatus(
kLevelDefault, wvcdm::QUERY_KEY_PROVISIONING_MODEL, &value));
// These are the only valid values for Android devices.
EXPECT_TRUE(value == wvcdm::QUERY_VALUE_KEYBOX ||
value == wvcdm::QUERY_VALUE_OEM_CERTIFICATE);
}
TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) {
@@ -4937,6 +4943,13 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) {
ASSERT_FALSE(ss.fail());
EXPECT_TRUE(ss.eof());
EXPECT_LE(10u, api_version);
EXPECT_EQ(wvcdm::NO_ERROR,
decryptor_->QueryStatus(
kLevel3, wvcdm::QUERY_KEY_PROVISIONING_MODEL, &value));
// These are the only valid values for Android devices.
EXPECT_TRUE(value == wvcdm::QUERY_VALUE_KEYBOX ||
value == wvcdm::QUERY_VALUE_OEM_CERTIFICATE);
}
TEST_F(WvCdmRequestLicenseTest, QueryOemCryptoSessionId) {