diff --git a/libwvdrmengine/oemcrypto/test/Android.mk b/libwvdrmengine/oemcrypto/test/Android.mk index 96b882f2..afb609c0 100644 --- a/libwvdrmengine/oemcrypto/test/Android.mk +++ b/libwvdrmengine/oemcrypto/test/Android.mk @@ -1,6 +1,5 @@ LOCAL_PATH:= $(call my-dir) -# THIS IS FOR THE MOCK TESTS: include $(CLEAR_VARS) LOCAL_MODULE:=oemcrypto_test diff --git a/libwvdrmengine/oemcrypto/test/common.mk b/libwvdrmengine/oemcrypto/test/common.mk index ea4f8a6e..7e979da0 100644 --- a/libwvdrmengine/oemcrypto/test/common.mk +++ b/libwvdrmengine/oemcrypto/test/common.mk @@ -1,7 +1,8 @@ LOCAL_PATH:= $(call my-dir) LOCAL_SRC_FILES:= \ - oemcrypto_test.cpp + oemcrypto_test.cpp \ + oemcrypto_test_android.cpp \ LOCAL_C_INCLUDES += \ external/gtest/include \ diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index 79d5816e..783f4c6d 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -1076,7 +1076,7 @@ class Session { void FillRefreshMessage(size_t key_count, uint32_t control_bits, uint32_t nonce) { - for (unsigned int i = 0; i < kNumKeys; i++) { + for (unsigned int i = 0; i < key_count; i++) { memset(encrypted_license_.keys[i].key_id, i, kTestKeyIdLength); memcpy(encrypted_license_.keys[i].control.verification, "kctl", 4); encrypted_license_.keys[i].control.duration = htonl(kLongDuration); @@ -1605,8 +1605,8 @@ TEST_F(OEMCryptoClientTest, VersionNumber) { cout << " OEMCrypto Security Level is " << level << endl; uint32_t version = OEMCrypto_APIVersion(); cout << " OEMCrypto API version is " << version << endl; - ASSERT_LE(8, version); - ASSERT_GE(10, version); + ASSERT_LE(8u, version); + ASSERT_GE(10u, version); } TEST_F(OEMCryptoClientTest, NormalGetKeyData) { @@ -1752,7 +1752,7 @@ TEST_F(OEMCryptoClientTest, MaxSessionsOpenClose) { size_t sessions_count; ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_GetNumberOfOpenSessions(&sessions_count)); - ASSERT_EQ(0, sessions_count); + ASSERT_EQ(0u, sessions_count); size_t max_sessions; ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_GetMaxNumberOfSessions(&max_sessions)); // We expect OEMCrypto implementations support at least 8 sessions. @@ -1762,7 +1762,7 @@ TEST_F(OEMCryptoClientTest, MaxSessionsOpenClose) { vector sessions; // Limit the number of sessions for testing. const size_t kMaxNumberOfSessionsForTesting = 0x100u; - for (int i = 0; i < kMaxNumberOfSessionsForTesting; i++) { + for (size_t i = 0; i < kMaxNumberOfSessionsForTesting; i++) { OEMCrypto_SESSION session_id; OEMCryptoResult sts = OEMCrypto_OpenSession(&session_id); // GetMaxNumberOfSessions might be an estimate. We allow OEMCrypto to report @@ -1780,7 +1780,7 @@ TEST_F(OEMCryptoClientTest, MaxSessionsOpenClose) { ASSERT_EQ(i + 1, sessions_count); sessions.push_back(session_id); } - for (int i = 0; i < sessions.size(); i++) { + for (size_t i = 0; i < sessions.size(); i++) { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_CloseSession(sessions[i])); ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_GetNumberOfOpenSessions(&sessions_count)); @@ -4581,7 +4581,7 @@ TEST_F(OEMCryptoClientTest, PSTReportSizes) { if (OEMCrypto_SupportsUsageTable()) { OEMCrypto_PST_Report report; uint8_t* location = reinterpret_cast(&report); - EXPECT_EQ(48, sizeof(report)); + EXPECT_EQ(48u, sizeof(report)); uint8_t *field; field = reinterpret_cast(&report.status); EXPECT_EQ(20, field - location); @@ -4762,7 +4762,7 @@ TEST_P(DISABLED_UsageTableTest, FiftyEntries) { const size_t ENTRY_COUNT = 49;// API says should hold at least 50 entries. Session sessions[ENTRY_COUNT]; - for (int i=0; i + +#include "OEMCryptoCENC.h" + +namespace wvoec { + +// These tests are required for LollyPop Android devices. +class OEMCryptoAndroidLMPTest : public ::testing::Test { + protected: + virtual void SetUp() { + ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_Initialize()); + } + + virtual void TearDown() { + OEMCrypto_Terminate(); + } +}; + +// Android devices must have a keybox. +TEST_F(OEMCryptoAndroidLMPTest, GetKeyDataImplemented) { + uint8_t key_data[256]; + size_t key_data_len = sizeof(key_data); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_GetKeyData(key_data, &key_data_len)); +} + +TEST_F(OEMCryptoAndroidLMPTest, MinVersionNumber9) { + uint32_t version = OEMCrypto_APIVersion(); + ASSERT_LE(9u, version); +} + +TEST_F(OEMCryptoAndroidLMPTest, ValidKeyboxTest) { + ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_IsKeyboxValid()); +} + +TEST_F(OEMCryptoAndroidLMPTest, RewrapDeviceRSAKeyImplemented) { + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_RewrapDeviceRSAKey(0, NULL, 0, NULL, 0, NULL, + NULL, 0, NULL, NULL, NULL)); +} + +TEST_F(OEMCryptoAndroidLMPTest, RSASignatureImplemented) { + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_GenerateRSASignature(0, NULL, 0, NULL, NULL, + kSign_RSASSA_PSS)); +} + +TEST_F(OEMCryptoAndroidLMPTest, GenericCryptoImplemented) { + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_Generic_Encrypt(0, NULL, 0, NULL, + OEMCrypto_AES_CBC_128_NO_PADDING, NULL)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_Generic_Decrypt(0, NULL, 0, NULL, + OEMCrypto_AES_CBC_128_NO_PADDING, NULL)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_Generic_Sign(0, NULL, 0, + OEMCrypto_HMAC_SHA256, NULL, NULL)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_Generic_Verify(0, NULL, 0, + OEMCrypto_HMAC_SHA256, NULL, 0)); +} + +TEST_F(OEMCryptoAndroidLMPTest, SupportsUsageTable) { + // TODO(fredgc): maybe remove Properties::oem_crypto_require_usage_tables? + ASSERT_TRUE(OEMCrypto_SupportsUsageTable()); +} + +// 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); +} + +// TODO(fredgc): b/18962381 +// TEST_F(OEMCryptoAndroidMNCTest, LoadsTestKeyboxImplemented) { +// ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_LoadTestKeybox()); +// } + +TEST_F(OEMCryptoAndroidMNCTest, NumberOfSessionsImplemented) { + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_GetNumberOfOpenSessions(NULL)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_GetMaxNumberOfSessions(NULL)); +} + +// TODO(fredgc): b/18503541 +// TEST_F(OEMCryptoAndroidMNCTest, QueryKeyControlImplemented) { +// ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, +// OEMCrypto_QueryKeyControl(0, NULL, 0, NULL, NULL)); +// } + +} // namespace wvoec