Allow provisioning model to be queried

[ Merge of http://go/wvgerrit/152674 ]

This allows an app to query the provisioning model. Possible
values are { "DrmCertificate", "Keybox", "OEMCertificate",
"BootCertificateChain" }

An app can use these to disntinguish between provisioning models.
Provisioning 4.0 (boot certificate chain) requires a double provisioning
step.

Bug: 234057551
Test: WV unit/integration tests, libwvdrmdrmplugin_hal_test
Change-Id: I1611488ec632a0e5a9e1d106b7475e8f5a2a5a13
This commit is contained in:
Rahul Frias
2022-05-26 14:48:36 -07:00
parent 9935fae50d
commit cd593979e9
4 changed files with 28 additions and 0 deletions

View File

@@ -1154,6 +1154,8 @@ Status WVDrmPlugin::unprovisionDevice() {
status = queryProperty(wvcdm::QUERY_KEY_WATERMARKING_SUPPORT, value);
} else if (name == "productionReady") {
status = queryProperty(wvcdm::QUERY_KEY_PRODUCTION_READY, value);
} else if (name == "provisioningModel") {
status = queryProperty(wvcdm::QUERY_KEY_PROVISIONING_MODEL, value);
} else {
ALOGE("App requested unknown string property %s", name.c_str());
*_aidl_return = value;

View File

@@ -1263,6 +1263,8 @@ Return<void> WVDrmPlugin::getPropertyString(const hidl_string& propertyName,
status = queryProperty(wvcdm::QUERY_KEY_WATERMARKING_SUPPORT, value);
} else if (name == "productionReady") {
status = queryProperty(wvcdm::QUERY_KEY_PRODUCTION_READY, value);
} else if (name == "provisioningModel") {
status = queryProperty(wvcdm::QUERY_KEY_PROVISIONING_MODEL, value);
} else {
ALOGE("App requested unknown string property %s", name.c_str());
status = Status::ERROR_DRM_CANNOT_HANDLE;

View File

@@ -118,6 +118,7 @@ using wvcdm::QUERY_KEY_OEMCRYPTO_API_VERSION;
using wvcdm::QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION;
using wvcdm::QUERY_KEY_OEMCRYPTO_SESSION_ID;
using wvcdm::QUERY_KEY_PROVISIONING_ID;
using wvcdm::QUERY_KEY_PROVISIONING_MODEL;
using wvcdm::QUERY_KEY_RESOURCE_RATING_TIER;
using wvcdm::QUERY_KEY_SECURITY_LEVEL;
using wvcdm::QUERY_KEY_SRM_UPDATE_SUPPORT;
@@ -1059,6 +1060,7 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) {
static const std::string oemCryptoCrcClearBuffer = "1";
static const std::string oemCryptoPartnerDefinedHash = "2";
static const std::string decryptHashErrorBadHashAndFrameNumber = "53, 1";
static const std::string provisioningModel = "Zaphod Beeblebrox";
drm_metrics::WvCdmMetrics expected_metrics;
std::string serialized_metrics = wvutil::a2bs_hex(kSerializedMetricsHex);
ASSERT_TRUE(expected_metrics.ParseFromString(serialized_metrics));
@@ -1120,6 +1122,10 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) {
.WillOnce(DoAll(SetArgPointee<1>(decryptHashErrorBadHashAndFrameNumber),
testing::Return(wvcdm::NO_ERROR)));
EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_PROVISIONING_MODEL, _))
.WillOnce(DoAll(SetArgPointee<2>(provisioningModel),
testing::Return(wvcdm::NO_ERROR)));
EXPECT_CALL(*mCdm, GetMetrics(_, _))
.WillOnce(DoAll(SetArgPointee<1>(expected_metrics),
testing::Return(wvcdm::NO_ERROR)));
@@ -1216,6 +1222,11 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) {
EXPECT_TRUE(ret.isOk());
EXPECT_EQ(decryptHashErrorBadHashAndFrameNumber, stringResult);
ret = mPlugin->getPropertyString(std::string("provisioningModel"),
&stringResult);
EXPECT_TRUE(ret.isOk());
EXPECT_EQ(provisioningModel, stringResult);
// This call occurs before any open session or other call. This means
// that the mCdm identifier is not yet sealed, and metrics return empty
// metrics data.

View File

@@ -111,6 +111,7 @@ using wvcdm::QUERY_KEY_OEMCRYPTO_API_VERSION;
using wvcdm::QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION;
using wvcdm::QUERY_KEY_OEMCRYPTO_SESSION_ID;
using wvcdm::QUERY_KEY_PROVISIONING_ID;
using wvcdm::QUERY_KEY_PROVISIONING_MODEL;
using wvcdm::QUERY_KEY_RESOURCE_RATING_TIER;
using wvcdm::QUERY_KEY_SECURITY_LEVEL;
using wvcdm::QUERY_KEY_SRM_UPDATE_SUPPORT;
@@ -1257,6 +1258,7 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) {
static const std::string oemCryptoCrcClearBuffer = "1";
static const std::string oemCryptoPartnerDefinedHash = "2";
static const std::string decryptHashErrorBadHashAndFrameNumber = "53, 1";
static const std::string provisioningModel = "Zaphod Beeblebrox";
drm_metrics::WvCdmMetrics expected_metrics;
std::string serialized_metrics = wvutil::a2bs_hex(kSerializedMetricsHex);
ASSERT_TRUE(expected_metrics.ParseFromString(serialized_metrics));
@@ -1318,6 +1320,10 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) {
.WillOnce(DoAll(SetArgPointee<1>(decryptHashErrorBadHashAndFrameNumber),
testing::Return(wvcdm::NO_ERROR)));
EXPECT_CALL(*cdm, QueryStatus(_, QUERY_KEY_PROVISIONING_MODEL, _))
.WillOnce(DoAll(SetArgPointee<2>(provisioningModel),
testing::Return(wvcdm::NO_ERROR)));
EXPECT_CALL(*cdm, GetMetrics(_, _))
.WillOnce(DoAll(SetArgPointee<1>(expected_metrics),
testing::Return(wvcdm::NO_ERROR)));
@@ -1450,6 +1456,13 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) {
stringResult);
});
plugin.getPropertyString(hidl_string("provisioningModel"),
[&](Status status, hidl_string stringResult) {
ASSERT_EQ(Status::OK, status);
EXPECT_STREQ(provisioningModel.c_str(),
stringResult.c_str());
});
// This call occurs before any open session or other call. This means
// that the cdm identifer is not yet sealed, and metrics return empty
// metrics data.