Add unit test for clear KCB in LS SDK 16.4 response
This is a merge from: https://widevine-internal-review.googlesource.com/c/cdm/+/152897 and http://go/wvgerrit/153709 Adding a new OEMCrypto unit test will allow partners to correct a problem earlier in their integration. Verifies current oemcrypto implementation handles clear KCB in a mocked 16.4 license response. Unit test release date updated to 2022-06-17. Test: run_x86_64_tests; opk_ta Bug: 235870170 Bug: 234645065 Change-Id: I59fef2c25f5c007624447d4f46147d96adeddad9
This commit is contained in:
committed by
Fred Gylys-Colwell
parent
cd593979e9
commit
8c4c238324
@@ -266,7 +266,7 @@ TEST_F(OEMCryptoClientTest, FreeUnallocatedSecureBufferNoFailure) {
|
||||
*/
|
||||
TEST_F(OEMCryptoClientTest, VersionNumber) {
|
||||
const std::string log_message =
|
||||
"OEMCrypto unit tests for API 17.0. Tests last updated 2022-02-18";
|
||||
"OEMCrypto unit tests for API 17.1. Tests last updated 2022-06-17";
|
||||
cout << " " << log_message << "\n";
|
||||
cout << " "
|
||||
<< "These tests are part of Android T."
|
||||
@@ -3445,6 +3445,39 @@ TEST_P(OEMCryptoLicenseTest, QueryKeyControl) {
|
||||
strlen(key_id), reinterpret_cast<uint8_t*>(&block), &size));
|
||||
}
|
||||
|
||||
// This case tests against the issue where certain 16.4.x SDK versions return a
|
||||
// clear key control block (KCB) in the license response. An OEMCrypto v17.1+
|
||||
// implementation should be able to handle the clear KCB in the 16.4.x response
|
||||
// and load the license correctly.
|
||||
TEST_F(OEMCryptoSessionTests, ClearKcbAPI16_4) {
|
||||
Session s;
|
||||
ASSERT_NO_FATAL_FAILURE(s.open());
|
||||
ASSERT_NO_FATAL_FAILURE(InstallTestRSAKey(&s));
|
||||
LicenseRoundTrip license_messages(&s);
|
||||
ASSERT_NO_FATAL_FAILURE(license_messages.SignAndVerifyRequest());
|
||||
ASSERT_NO_FATAL_FAILURE(license_messages.CreateDefaultResponse());
|
||||
// Set odk version in the license response to be 16.4
|
||||
oemcrypto_core_message::features::CoreMessageFeatures features = {};
|
||||
features.maximum_major_version = 16;
|
||||
features.maximum_minor_version = 4;
|
||||
constexpr bool kForceClearKcb = true;
|
||||
ASSERT_NO_FATAL_FAILURE(
|
||||
license_messages.EncryptAndSignResponseWithCoreMessageFeatures(
|
||||
features, kForceClearKcb));
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, license_messages.LoadResponse());
|
||||
|
||||
KeyControlBlock block;
|
||||
size_t size = sizeof(block);
|
||||
OEMCryptoResult sts = OEMCrypto_QueryKeyControl(
|
||||
s.session_id(), license_messages.response_data().keys[0].key_id,
|
||||
license_messages.response_data().keys[0].key_id_length,
|
||||
reinterpret_cast<uint8_t*>(&block), &size);
|
||||
if (sts == OEMCrypto_ERROR_NOT_IMPLEMENTED) {
|
||||
return;
|
||||
}
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
|
||||
TEST_F(OEMCryptoSessionTests,
|
||||
OEMCryptoMemoryLoadLicenseForHugeSignatureLength) {
|
||||
auto oemcrypto_function = [&](size_t signature_size) {
|
||||
|
||||
Reference in New Issue
Block a user