From a42273e67f6236d4036e9204781e249ee8015fbe Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Tue, 10 Mar 2020 18:20:53 -0700 Subject: [PATCH] Expect Provisioning ID length of upto 64 bytes [ Merge of http://go/wvgerrit/95508 ] The provisioning ID length will be 32 bytes when the device supports a keybox or OEM certificates and does not implement |OEMCrypto_GetDeviceId|. If a device supports OEM Certificates and implements |OEMCrypto_GetDeviceId| it may be an arbitrary length upto 64 bytes. Bug: 150393659 Test: WV unit/integration tests Change-Id: I5e4dbc8f2f9ca326425d0313f4823b72bd6ac7c0 --- libwvdrmengine/cdm/core/include/crypto_session.h | 13 +++++++++++++ libwvdrmengine/cdm/test/request_license_test.cpp | 10 ++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/crypto_session.h b/libwvdrmengine/cdm/core/include/crypto_session.h index ee891692..80566042 100644 --- a/libwvdrmengine/cdm/core/include/crypto_session.h +++ b/libwvdrmengine/cdm/core/include/crypto_session.h @@ -89,7 +89,20 @@ class CryptoSession { virtual bool GetApiMinorVersion(SecurityLevel requested_level, uint32_t* minor_version); + // This method will return, for devices with a + // * keybox: the 32 byte device ID from the keybox. + // * OEM certificate: + // - that implements |OEMCrypto_GetDeviceID|: the (1 to 64 byte) device ID. + // - that does not implement |OEMCrypto_GetDeviceID|: the OEM public + // certificate. virtual CdmResponseType GetInternalDeviceUniqueId(std::string* device_id); + + // This method will return, for devices with a + // * keybox: the 32 byte device ID from the keybox. + // * OEM certificate: + // - that implements |OEMCrypto_GetDeviceID|: the (1 to 64 byte) device ID. + // - that does not implement |OEMCrypto_GetDeviceID|: the 32 byte hash + // of the OEM public certificate. virtual CdmResponseType GetExternalDeviceUniqueId(std::string* device_id); virtual bool GetSystemId(uint32_t* system_id); virtual CdmResponseType GetProvisioningId(std::string* provisioning_id); diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index f49f4e02..8d78c804 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -4795,6 +4795,7 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatus) { decryptor_->QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_DEVICE_ID, &value)); EXPECT_LT(0u, value.size()); + EXPECT_LE(value.size(), 64u) << "device id size: " << value.size(); EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_SYSTEM_ID, @@ -4808,8 +4809,8 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatus) { EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_PROVISIONING_ID, &value)); - EXPECT_TRUE(16u == value.size() || 32u == value.size()) - << "provisioning id size: " << value.size(); + EXPECT_LT(0u, value.size()); + EXPECT_LE(value.size(), 64u) << "provisioning id size: " << value.size(); EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus( @@ -4942,6 +4943,7 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) { EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus( kLevel3, wvcdm::QUERY_KEY_DEVICE_ID, &value)); EXPECT_LT(0u, value.size()); + EXPECT_LE(value.size(), 64u) << "device id size: " << value.size(); EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_SYSTEM_ID, @@ -4972,8 +4974,8 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) { EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus(kLevel3, wvcdm::QUERY_KEY_PROVISIONING_ID, &value)); - EXPECT_TRUE(16u == value.size() || 32u == value.size()) - << "provisioning id size: " << value.size(); + EXPECT_LT(0u, value.size()); + EXPECT_LE(value.size(), 64u) << "provisioning id size: " << value.size(); EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QueryStatus(