From fca89868f89af9311db6a302259af3ab1f4fb58b Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Wed, 30 Jan 2019 19:17:06 +0000 Subject: [PATCH] Revert "Remove Test Keybox Again" This reverts commit 408509efdc523f2b968b52237560b0cc8a945311. Reason for revert: just kidding. We want to run the tests on old devices, too. Change-Id: I920fa825380638122f638e057bcfbe98b5f7b301 --- libwvdrmengine/cdm/core/test/test_base.cpp | 17 ++++++--- .../oemcrypto/test/oec_device_features.cpp | 33 ++++------------- libwvdrmengine/oemcrypto/test/oec_test_data.h | 35 +++++++++++++++++++ .../test/oemcrypto_session_tests_helper.cpp | 2 ++ .../oemcrypto/test/oemcrypto_test_android.cpp | 34 ++++++++++++++++++ 5 files changed, 90 insertions(+), 31 deletions(-) diff --git a/libwvdrmengine/cdm/core/test/test_base.cpp b/libwvdrmengine/cdm/core/test/test_base.cpp index 9ee7352d..353b2742 100644 --- a/libwvdrmengine/cdm/core/test/test_base.cpp +++ b/libwvdrmengine/cdm/core/test/test_base.cpp @@ -226,10 +226,19 @@ void WvCdmTestBase::SetUp() { void WvCdmTestBase::InstallTestRootOfTrust() { switch (wvoec::global_features.derive_key_method) { case wvoec::DeviceFeatures::LOAD_TEST_KEYBOX: - ASSERT_EQ(OEMCrypto_SUCCESS, - OEMCrypto_LoadTestKeybox( - reinterpret_cast(&wvoec::kTestKeybox), - sizeof(wvoec::kTestKeybox))); + // TODO(fredgc, b/119316243): REMOVE THIS! (and the lines below) + if (wvoec::global_features.api_version < 14) { + // This should work with a production android device, but will fail with + // the keyboxless ce cdm, as shipped. We are including this bit of code + // so we can develop on Android, but plan to remove it when we have a + // few more android test devices with v14 or v15 oemcrypto. + LOGE("Attempting tests without test keybox."); + } else { // TODO(fredgc, b/119316243): END OF REMOVE THIS! + ASSERT_EQ(OEMCrypto_SUCCESS, + OEMCrypto_LoadTestKeybox( + reinterpret_cast(&wvoec::kTestKeybox), + sizeof(wvoec::kTestKeybox))); + } // TODO(fredgc, b/119316243): yeah, yeah... remove this line, too. break; case wvoec::DeviceFeatures::LOAD_TEST_RSA_KEY: // Rare case: used by devices with baked in DRM cert. diff --git a/libwvdrmengine/oemcrypto/test/oec_device_features.cpp b/libwvdrmengine/oemcrypto/test/oec_device_features.cpp index bad4c55a..2e18ca17 100644 --- a/libwvdrmengine/oemcrypto/test/oec_device_features.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_device_features.cpp @@ -153,33 +153,12 @@ std::string DeviceFeatures::RestrictFilter(const std::string& initial_filter) { if (provisioning_method != OEMCrypto_OEMCertificate) FilterOut(&filter, "*Prov30*"); if (!supports_rsa_3072) FilterOut(&filter, "*RSAKey3072*"); - if (api_version < 14) { - // Because API 13 uses an old hard coded test keybox, none of these tests - // will pass. Partners who wish to test with a v13 OEMCrypto should use - // code on an older v13 branch. - printf("These unit tests are designed for OEMCrypto API 15 and above.\n"); - printf("This device has an OEMCrypto with API version %d.\n", api_version); - printf("To verify correctness, please build unit tests from a " - "compatible branch.\n"); - FilterOut(&filter, "*API09*"); - FilterOut(&filter, "*API10*"); - FilterOut(&filter, "*API11*"); - FilterOut(&filter, "*API12*"); - FilterOut(&filter, "*API13*"); - FilterOut(&filter, "*API14*"); - FilterOut(&filter, "*TestKeyboxTest*"); - FilterOut(&filter, "*SessionTest*"); - FilterOut(&filter, "*UsageTable*"); - FilterOut(&filter, "*GenericCrypto*"); - FilterOut(&filter, "*LoadsCertificate*"); - FilterOut(&filter, "*UsesCertificate*"); - // We also expect some CDM tests to fail without a new test keybox: - FilterOut(&filter, "*WvCdmRequestLicenseTest*"); - FilterOut(&filter, "*WvGenericOperations*"); - FilterOut(&filter, "*WvCdmEngine*"); - FilterOut(&filter, "*Cdm/WvCdm*"); - FilterOut(&filter, "*Cdm/WvHls*"); - } + if (api_version < 9) FilterOut(&filter, "*API09*"); + if (api_version < 10) FilterOut(&filter, "*API10*"); + if (api_version < 11) FilterOut(&filter, "*API11*"); + if (api_version < 12) FilterOut(&filter, "*API12*"); + if (api_version < 13) FilterOut(&filter, "*API13*"); + if (api_version < 14) FilterOut(&filter, "*API14*"); if (api_version < 15) FilterOut(&filter, "*API15*"); // Some tests may require root access. If user is not root, filter these tests // out. diff --git a/libwvdrmengine/oemcrypto/test/oec_test_data.h b/libwvdrmengine/oemcrypto/test/oec_test_data.h index 144c4d37..97391446 100644 --- a/libwvdrmengine/oemcrypto/test/oec_test_data.h +++ b/libwvdrmengine/oemcrypto/test/oec_test_data.h @@ -15,6 +15,41 @@ namespace wvoec { +// TODO(fredgc, b/119316243): REMOVE THIS KEYBOX! +// This test keybox is used for testing with OEMCrypto v13. +// It should be removed before release! +static const WidevineKeybox kTestKeyboxForV13 = { + // Sample keybox used for test vectors + { + // deviceID + 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x30, // TestKey01 + 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + }, { + // key + 0xfb, 0xda, 0x04, 0x89, 0xa1, 0x58, 0x16, 0x0e, + 0xa4, 0x02, 0xe9, 0x29, 0xe3, 0xb6, 0x8f, 0x04, + }, { + // data + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x19, + 0x07, 0xd9, 0xff, 0xde, 0x13, 0xaa, 0x95, 0xc1, + 0x22, 0x67, 0x80, 0x53, 0x36, 0x21, 0x36, 0xbd, + 0xf8, 0x40, 0x8f, 0x82, 0x76, 0xe4, 0xc2, 0xd8, + 0x7e, 0xc5, 0x2b, 0x61, 0xaa, 0x1b, 0x9f, 0x64, + 0x6e, 0x58, 0x73, 0x49, 0x30, 0xac, 0xeb, 0xe8, + 0x99, 0xb3, 0xe4, 0x64, 0x18, 0x9a, 0x14, 0xa8, + 0x72, 0x02, 0xfb, 0x02, 0x57, 0x4e, 0x70, 0x64, + 0x0b, 0xd2, 0x2e, 0xf4, 0x4b, 0x2d, 0x7e, 0x39, + }, { + // magic + 0x6b, 0x62, 0x6f, 0x78, + }, { + // Crc + 0x0a, 0x7a, 0x2c, 0x35, + } +}; + // This is a test keybox. It will not be accepted by production systems. By // using a known keybox for these tests, the results for a given set of inputs // to a test are predictable and can be compared to the actual results. diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_session_tests_helper.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_session_tests_helper.cpp index cb040e32..ffc67fb4 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_session_tests_helper.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_session_tests_helper.cpp @@ -103,6 +103,8 @@ void SessionUtil::EnsureTestKeys() { switch (global_features.derive_key_method) { case DeviceFeatures::LOAD_TEST_KEYBOX: keybox_ = kTestKeybox; + // TODO(fredgc, b/119316243): REMOVE FOLLOWING LINE: + if (global_features.api_version < 14) keybox_ = kTestKeyboxForV13; ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_LoadTestKeybox( reinterpret_cast(&keybox_), diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp index 0350cecf..79211a34 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp @@ -49,6 +49,11 @@ TEST_F(OEMCryptoAndroidLMPTest, ValidKeybox) { } } +TEST_F(OEMCryptoAndroidLMPTest, MinVersionNumber9) { + uint32_t version = OEMCrypto_APIVersion(); + ASSERT_LE(9u, version); +} + TEST_F(OEMCryptoAndroidLMPTest, ValidKeyboxTest) { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_IsKeyboxValid()); } @@ -102,6 +107,11 @@ TEST_F(OEMCryptoAndroidLMPTest, Level1Required) { // These tests are required for M Android devices. class OEMCryptoAndroidMNCTest : public OEMCryptoAndroidLMPTest {}; +TEST_F(OEMCryptoAndroidMNCTest, MinVersionNumber10) { + uint32_t version = OEMCrypto_APIVersion(); + ASSERT_GE(version, 10u); +} + TEST_F(OEMCryptoAndroidMNCTest, LoadsTestKeyboxImplemented) { if (OEMCrypto_Keybox == OEMCrypto_GetProvisioningMethod()) { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_LoadTestKeybox( @@ -125,4 +135,28 @@ TEST_F(OEMCryptoAndroidMNCTest, QueryKeyControlImplemented) { OEMCrypto_QueryKeyControl(0, NULL, 0, NULL, NULL)); } +// These tests are required for N Android devices. +class OEMCryptoAndroidNYCTest : public OEMCryptoAndroidMNCTest {}; + +TEST_F(OEMCryptoAndroidNYCTest, MinVersionNumber11) { + uint32_t version = OEMCrypto_APIVersion(); + ASSERT_GE(version, 11u); +} + +// These tests are required for O MR1 Android devices. +class OEMCryptoAndroidOCTest : public OEMCryptoAndroidNYCTest {}; + +TEST_F(OEMCryptoAndroidOCTest, MinVersionNumber13) { + uint32_t version = OEMCrypto_APIVersion(); + ASSERT_GE(version, 13u); +} + +// These tests are required for Q Android devices. +class OEMCryptoAndroidQTest : public OEMCryptoAndroidOCTest {}; + +TEST_F(OEMCryptoAndroidQTest, MinVersionNumber14) { + uint32_t version = OEMCrypto_APIVersion(); + ASSERT_GE(version, 15u); +} + } // namespace wvoec