From c89ca732f081df194778843bfc84fbb77fb158bf Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Sun, 3 Sep 2023 10:15:59 -0700 Subject: [PATCH] Clean up OEMCrypto unit tests for Android Remove some stale tests. Bug: 175122314 Change-Id: Ie110ffc28353fcdafaf7774d81a625f5d99f4213 --- .../oemcrypto/test/oemcrypto_test_android.cpp | 102 +++++------------- 1 file changed, 27 insertions(+), 75 deletions(-) diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp index 4337f756..29d4a023 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp @@ -21,15 +21,12 @@ namespace wvoec { -// These tests are required for LollyPop Android devices. +/** These tests are required for LollyPop Android devices.*/ class OEMCryptoAndroidLMPTest : public ::testing::Test { protected: void SetUp() override { OEMCrypto_SetSandbox(kTestSandbox, sizeof(kTestSandbox)); ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_Initialize()); - if (OEMCrypto_GetProvisioningMethod() == OEMCrypto_BootCertificateChain) { - GTEST_SKIP() << "Test for non Prov 4.0 devices only."; - } OEMCrypto_SetMaxAPIVersion(kCurrentAPI); OEMCrypto_EnterTestMode(); } @@ -37,34 +34,7 @@ class OEMCryptoAndroidLMPTest : public ::testing::Test { void TearDown() override { OEMCrypto_Terminate(); } }; -// Android devices must have a keybox, or use provisioning 3.0. -TEST_F(OEMCryptoAndroidLMPTest, GetKeyDataImplemented) { - if (global_features.provisioning_method != OEMCrypto_Keybox && - global_features.provisioning_method != OEMCrypto_OEMCertificate) { - GTEST_SKIP() << "Test for Prov 2.0 and 3.0 devices only."; - } - uint8_t key_data[256]; - size_t key_data_len = sizeof(key_data); - if (OEMCrypto_Keybox == OEMCrypto_GetProvisioningMethod()) { - ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_GetKeyData(key_data, &key_data_len)); - } else { - ASSERT_EQ(OEMCrypto_OEMCertificate, OEMCrypto_GetProvisioningMethod()); - } -} - -// Android devices must have a valid keybox. -TEST_F(OEMCryptoAndroidLMPTest, ValidKeybox) { - if (OEMCrypto_GetProvisioningMethod() == OEMCrypto_Keybox) { - ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_IsKeyboxValid()); - } -} - -TEST_F(OEMCryptoAndroidLMPTest, MinVersionNumber9) { - uint32_t version = OEMCrypto_APIVersion(); - ASSERT_LE(9u, version); -} - +/** Android devices that use Provisioning 2.0 must have a valid keybox. */ TEST_F(OEMCryptoAndroidLMPTest, ValidKeyboxTest) { if (global_features.provisioning_method != OEMCrypto_Keybox) { GTEST_SKIP() << "Test for Prov 2.0 devices only."; @@ -72,13 +42,15 @@ TEST_F(OEMCryptoAndroidLMPTest, ValidKeyboxTest) { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_IsKeyboxValid()); } +/** Android devices must support remote provisioning. Either Provisioning 2, 3 + * or 4. */ TEST_F(OEMCryptoAndroidLMPTest, RewrapDeviceRSAKeyImplemented) { ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, OEMCrypto_LoadProvisioning(0, nullptr, 0, 0, nullptr, 0, nullptr, nullptr)); } -// The Generic Crypto API functions are required for Android. +/** The Generic Crypto API functions are required for Android. */ TEST_F(OEMCryptoAndroidLMPTest, GenericCryptoImplemented) { ASSERT_NE( OEMCrypto_ERROR_NOT_IMPLEMENTED, @@ -96,13 +68,15 @@ TEST_F(OEMCryptoAndroidLMPTest, GenericCryptoImplemented) { OEMCrypto_HMAC_SHA256, nullptr, 0)); } -// Android requires support of usage table. The usage table is used for Secure -// Stops and for offline licenses. +/** Android requires support of usage table. The usage table is used for + * offline licenses. */ TEST_F(OEMCryptoAndroidLMPTest, SupportsUsageTable) { ASSERT_TRUE(OEMCrypto_SupportsUsageTable()); } -// Android devices require L1 OEMCrypto. +/** Most Android GMS devices require L1 OEMCrypto. This is not a hard + * requirement for all devices, but is a source of common errors, so we test for + * it here. */ TEST_F(OEMCryptoAndroidLMPTest, Level1Required) { OEMCrypto_Security_Level security_level = OEMCrypto_SecurityLevel(); EXPECT_EQ(OEMCrypto_Level1, security_level) @@ -111,32 +85,24 @@ TEST_F(OEMCryptoAndroidLMPTest, Level1Required) { << "repeat the tests with the flag --gtest_filter=\"*-*Level1Required\""; } -// These tests are required for M Android devices. +/** 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); -} - -// Android devices using Provisioning 2.0 must be able to load a test keybox. -// If they are not using Provisioning 2.0, then they must use Provisioning 3.0. +/** Android devices using Provisioning 2.0 must be able to load a test keybox. + * If they are not using Provisioning 2.0, then they must use Provisioning 3 or + * 4. */ TEST_F(OEMCryptoAndroidMNCTest, LoadsTestKeyboxImplemented) { if (global_features.provisioning_method != OEMCrypto_Keybox) { GTEST_SKIP() << "Test for Prov 2.0 devices only."; } - if (OEMCrypto_Keybox == OEMCrypto_GetProvisioningMethod()) { - ASSERT_EQ( - OEMCrypto_SUCCESS, - OEMCrypto_LoadTestKeybox(reinterpret_cast(&kTestKeybox), - sizeof(kTestKeybox))); - } else { - // Android should use keybox or provisioning 3.0. - ASSERT_EQ(OEMCrypto_OEMCertificate, OEMCrypto_GetProvisioningMethod()); - } + ASSERT_EQ( + OEMCrypto_SUCCESS, + OEMCrypto_LoadTestKeybox(reinterpret_cast(&kTestKeybox), + sizeof(kTestKeybox))); } -// Android requires implementation of these functions. +/** Android requires implementation of functions that report how many open + * sesions are available. */ TEST_F(OEMCryptoAndroidMNCTest, NumberOfSessionsImplemented) { ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, OEMCrypto_GetNumberOfOpenSessions(nullptr)); @@ -144,34 +110,20 @@ TEST_F(OEMCryptoAndroidMNCTest, NumberOfSessionsImplemented) { OEMCrypto_GetMaxNumberOfSessions(nullptr)); } -// Android requires implementation of these functions. +/** Android requires implementation of `OEMCrypto_QueryKeyControl`. */ TEST_F(OEMCryptoAndroidMNCTest, QueryKeyControlImplemented) { ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, OEMCrypto_QueryKeyControl(0, nullptr, 0, nullptr, nullptr)); } -// These tests are required for N Android devices. -class OEMCryptoAndroidNYCTest : public OEMCryptoAndroidMNCTest {}; +/** These tests are required for R Android devices. */ +class OEMCryptoAndroidRVCTest : public OEMCryptoAndroidMNCTest {}; -TEST_F(OEMCryptoAndroidNYCTest, MinVersionNumber11) { +/** Minimum OEMCrypto version 16 is required for all Android R and later + * releases. */ +TEST_F(OEMCryptoAndroidRVCTest, MinVersionNumber16) { 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); + ASSERT_GE(version, 16u); } } // namespace wvoec