Improve OEMCrypto unit tests
This is a merge of http://go/wvgerrit/13701 and http://go/wvgerrit/13780. I added a new set of engine properties for the mock oemcrypto. This set pretends to be level 1. This allows the widevine build bot to test the dual security level path: a level 1 liboemcrypto.so and a fall back to L3. I also adjusted the failing test in oemcrypto_test.cpp. A correct fix requires us to rewrite some of the oemcrypto mock code so that it returns real error codes instead of just 'false' on error. Change-Id: I9cdbfc23c87ad2fb6068eac1394ce4c5b6a32dae
This commit is contained in:
@@ -39,4 +39,10 @@ bool CryptoEngine::is_anti_rollback_hw_present() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns "L3" for a software only library. L1 is for hardware protected
|
||||||
|
// data paths.
|
||||||
|
const char* CryptoEngine::security_level() {
|
||||||
|
return "L3";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace wvoec_mock
|
} // namespace wvoec_mock
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Mock implementation of OEMCrypto APIs
|
||||||
|
//
|
||||||
|
// This file contains oemcrypto engine properties that would be for a
|
||||||
|
// level 1 device.
|
||||||
|
#include "oemcrypto_engine_mock.h"
|
||||||
|
|
||||||
|
namespace wvoec_mock {
|
||||||
|
|
||||||
|
// If local_display() returns true, we pretend we are using a built-in display,
|
||||||
|
// instead of HDMI or WiFi output.
|
||||||
|
bool CryptoEngine::local_display() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A closed platform is permitted to use clear buffers.
|
||||||
|
bool CryptoEngine::closed_platform() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the HDCP version currently in use.
|
||||||
|
OEMCrypto_HDCP_Capability CryptoEngine::current_hdcp_capability() {
|
||||||
|
return local_display() ? HDCP_NO_DIGITAL_OUTPUT : HDCP_V1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the max HDCP version supported.
|
||||||
|
OEMCrypto_HDCP_Capability CryptoEngine::maximum_hdcp_capability() {
|
||||||
|
return HDCP_NO_DIGITAL_OUTPUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns true if the client supports persistent storage of
|
||||||
|
// offline usage table information.
|
||||||
|
bool CryptoEngine::supports_storage() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns true to indicate the client does support anti-rollback hardware.
|
||||||
|
bool CryptoEngine::is_anti_rollback_hw_present() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns "L3" for a software only library. L1 is for hardware protected
|
||||||
|
// data paths.
|
||||||
|
const char* CryptoEngine::security_level() {
|
||||||
|
return "L1";
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace wvoec_mock
|
||||||
@@ -257,6 +257,7 @@ class CryptoEngine {
|
|||||||
bool closed_platform();
|
bool closed_platform();
|
||||||
bool supports_storage();
|
bool supports_storage();
|
||||||
bool is_anti_rollback_hw_present();
|
bool is_anti_rollback_hw_present();
|
||||||
|
const char* security_level();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SessionContext* current_session_;
|
SessionContext* current_session_;
|
||||||
|
|||||||
@@ -1001,7 +1001,11 @@ uint32_t OEMCrypto_APIVersion() {
|
|||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
const char* OEMCrypto_SecurityLevel() {
|
const char* OEMCrypto_SecurityLevel() {
|
||||||
return "L3";
|
const char* security_level = crypto_engine->security_level();
|
||||||
|
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
|
||||||
|
LOGI("-- bool OEMCrypto_SecurityLevel(); // returns %s.\n", security_level);
|
||||||
|
}
|
||||||
|
return security_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
|
|||||||
@@ -1593,23 +1593,6 @@ class OEMCryptoClientTest : public ::testing::Test {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(OEMCryptoClientTest, AntiRollbackHardwareRequired) {
|
|
||||||
Session s;
|
|
||||||
s.open();
|
|
||||||
s.GenerateDerivedKeys();
|
|
||||||
s.FillSimpleMessage(0, wvoec_mock::kControlRequireAntiRollbackHardware, 0);
|
|
||||||
s.EncryptAndSign();
|
|
||||||
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
|
||||||
s.session_id(), s.message_ptr(), sizeof(MessageData), &s.signature()[0],
|
|
||||||
s.signature().size(), s.encrypted_license().mac_key_iv,
|
|
||||||
s.encrypted_license().mac_keys, kNumKeys, s.key_array(), NULL, 0);
|
|
||||||
if (OEMCrypto_IsAntiRollbackHwPresent()) {
|
|
||||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
|
||||||
} else {
|
|
||||||
ASSERT_EQ(OEMCrypto_ERROR_UNKNOWN_FAILURE, sts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Keybox Tests
|
// Keybox Tests
|
||||||
// These two tests are first, becuase it might give an idea why other
|
// These two tests are first, becuase it might give an idea why other
|
||||||
@@ -2347,6 +2330,23 @@ TEST_F(DISABLED_TestKeybox, LoadKeysWithNoDerivedKeys) {
|
|||||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DISABLED_TestKeybox, AntiRollbackHardwareRequired) {
|
||||||
|
Session s;
|
||||||
|
s.open();
|
||||||
|
s.GenerateDerivedKeys();
|
||||||
|
s.FillSimpleMessage(0, wvoec_mock::kControlRequireAntiRollbackHardware, 0);
|
||||||
|
s.EncryptAndSign();
|
||||||
|
OEMCryptoResult sts = OEMCrypto_LoadKeys(
|
||||||
|
s.session_id(), s.message_ptr(), sizeof(MessageData), &s.signature()[0],
|
||||||
|
s.signature().size(), s.encrypted_license().mac_key_iv,
|
||||||
|
s.encrypted_license().mac_keys, kNumKeys, s.key_array(), NULL, 0);
|
||||||
|
if (OEMCrypto_IsAntiRollbackHwPresent()) {
|
||||||
|
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||||
|
} else {
|
||||||
|
ASSERT_EQ(OEMCrypto_ERROR_UNKNOWN_FAILURE, sts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class DISABLED_DecryptWithHDCP : public DISABLED_TestKeybox,
|
class DISABLED_DecryptWithHDCP : public DISABLED_TestKeybox,
|
||||||
public WithParamInterface<int> {
|
public WithParamInterface<int> {
|
||||||
public:
|
public:
|
||||||
|
|||||||
Reference in New Issue
Block a user