Setup test ROT + log empty root key in ref
Bug: b/117897682 Test: unit tests Merge of http://go/wvgerrit/65223 Gtest setup does not call the base class' setup if it's defined in the derived class. As a result, the WvCdmEngineTests were not installing the test root of trusts in the OEMCrypto, which leads to segfaults when using a key derived from the root of trust when a real root of trust doesn't exist. The test class' setup is changed to use its base class' methods, and logging is added to handle empty derived keys. Change-Id: Ia574c4ade48206d771d6079fb3b67ccd7653428c
This commit is contained in:
@@ -152,15 +152,9 @@ class WvCdmEngineTest : public WvCdmEnginePreProvTest {
|
||||
WvCdmEngineTest() {}
|
||||
|
||||
virtual void SetUp() {
|
||||
CdmResponseType status =
|
||||
cdm_engine_.OpenSession(config_.key_system(), NULL, NULL, &session_id_);
|
||||
if (status == NEED_PROVISIONING) {
|
||||
Provision();
|
||||
status = cdm_engine_.OpenSession(config_.key_system(), NULL, NULL, &session_id_);
|
||||
}
|
||||
ASSERT_EQ(NO_ERROR, status);
|
||||
ASSERT_NE("", session_id_) << "Could not open CDM session.";
|
||||
ASSERT_TRUE(cdm_engine_.IsOpenSession(session_id_));
|
||||
WvCdmTestBase::SetUp();
|
||||
session_opened_ = false;
|
||||
WvCdmEnginePreProvTest::OpenSession();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
@@ -95,6 +95,11 @@ OldUsageTable::OldUsageTable(CryptoEngine *ce) {
|
||||
// This should be encrypted and signed with a device specific key.
|
||||
// For the reference implementation, I'm just going to use the keybox key.
|
||||
const std::vector<uint8_t> &key = ce_->DeviceRootKey();
|
||||
if (key.empty()) {
|
||||
LOGE("OldUsageTable: DeviceRootKey is unexpectedly empty.");
|
||||
table_.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t computed_signature[SHA256_DIGEST_LENGTH];
|
||||
unsigned int sig_length = sizeof(computed_signature);
|
||||
|
||||
@@ -197,6 +197,10 @@ OEMCryptoResult UsageTableEntry::SaveData(CryptoEngine* ce,
|
||||
// This should be encrypted and signed with a device specific key.
|
||||
// For the reference implementation, I'm just going to use the keybox key.
|
||||
const std::vector<uint8_t>& key = ce->DeviceRootKey();
|
||||
if (key.empty()) {
|
||||
LOGE("SaveUsageEntry: DeviceRootKey is unexpectedly empty.");
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
|
||||
// Encrypt the entry.
|
||||
RAND_bytes(encrypted->iv, wvoec::KEY_IV_SIZE);
|
||||
@@ -235,6 +239,10 @@ OEMCryptoResult UsageTableEntry::LoadData(CryptoEngine* ce, uint32_t index,
|
||||
// This should be encrypted and signed with a device specific key.
|
||||
// For the reference implementation, I'm just going to use the keybox key.
|
||||
const std::vector<uint8_t>& key = ce->DeviceRootKey();
|
||||
if (key.empty()) {
|
||||
LOGE("LoadUsageEntry: DeviceRootKey is unexpectedly empty.");
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
|
||||
// Verify the signature of the usage entry. Sign encrypted into clear buffer.
|
||||
unsigned int sig_length = SHA256_DIGEST_LENGTH;
|
||||
@@ -494,6 +502,10 @@ OEMCryptoResult UsageTable::SaveUsageTableHeader(uint8_t* signed_buffer,
|
||||
// This should be encrypted and signed with a device specific key.
|
||||
// For the reference implementation, I'm just going to use the keybox key.
|
||||
const std::vector<uint8_t>& key = ce_->DeviceRootKey();
|
||||
if (key.empty()) {
|
||||
LOGE("SaveUsageTableHeader: DeviceRootKey is unexpectedly empty.");
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
|
||||
// Encrypt the entry.
|
||||
RAND_bytes(encrypted->iv, wvoec::KEY_IV_SIZE);
|
||||
@@ -537,6 +549,10 @@ OEMCryptoResult UsageTable::LoadUsageTableHeader(
|
||||
// This should be encrypted and signed with a device specific key.
|
||||
// For the reference implementation, I'm just going to use the keybox key.
|
||||
const std::vector<uint8_t>& key = ce_->DeviceRootKey();
|
||||
if (key.empty()) {
|
||||
LOGE("LoadUsageTableHeader: DeviceRootKey is unexpectedly empty.");
|
||||
return OEMCrypto_ERROR_INVALID_CONTEXT;
|
||||
}
|
||||
|
||||
// Verify the signature of the usage entry. Sign encrypted into clear buffer.
|
||||
unsigned int sig_length = SHA256_DIGEST_LENGTH;
|
||||
|
||||
Reference in New Issue
Block a user