Merge "Use unique_ptr in oemcrypto ref" into rvc-dev am: a55244025b am: 0abb41845e am: b9ef42f7a6

Change-Id: I18dbb965ac53cff45ed75d4f0040c3db83cfa68d
This commit is contained in:
Cong Lin
2020-03-26 18:53:20 +00:00
committed by Automerger Merge Worker
4 changed files with 22 additions and 31 deletions

View File

@@ -210,14 +210,6 @@ SessionContext::SessionContext(CryptoEngine* ce, SessionId sid,
} }
SessionContext::~SessionContext() { SessionContext::~SessionContext() {
if (usage_entry_) {
delete usage_entry_;
usage_entry_ = nullptr;
}
if (session_keys_) {
delete session_keys_;
session_keys_ = nullptr;
}
} }
// Internal utility function to derive key using CMAC-128 // Internal utility function to derive key using CMAC-128
@@ -777,11 +769,11 @@ OEMCryptoResult SessionContext::LoadKeysNoSignature(
if (session_keys_ == nullptr) { if (session_keys_ == nullptr) {
switch (license_type) { switch (license_type) {
case OEMCrypto_ContentLicense: case OEMCrypto_ContentLicense:
session_keys_ = new ContentKeysContext(); session_keys_.reset(new ContentKeysContext());
break; break;
case OEMCrypto_EntitlementLicense: case OEMCrypto_EntitlementLicense:
session_keys_ = new EntitlementKeysContext(); session_keys_.reset(new EntitlementKeysContext());
break; break;
default: default:
@@ -915,7 +907,8 @@ OEMCryptoResult SessionContext::LoadEntitledContentKeys(
if (!key_array) { if (!key_array) {
return OEMCrypto_ERROR_UNKNOWN_FAILURE; return OEMCrypto_ERROR_UNKNOWN_FAILURE;
} }
if (!session_keys_ || session_keys_->type() != OEMCrypto_EntitlementLicense) { if (session_keys_ == nullptr ||
session_keys_->type() != OEMCrypto_EntitlementLicense) {
return OEMCrypto_ERROR_INVALID_CONTEXT; return OEMCrypto_ERROR_INVALID_CONTEXT;
} }
for (size_t i = 0; i < key_array_length; ++i) { for (size_t i = 0; i < key_array_length; ++i) {
@@ -1494,8 +1487,8 @@ OEMCryptoResult SessionContext::UpdateUsageEntry(uint8_t* header_buffer,
return OEMCrypto_ERROR_INVALID_CONTEXT; return OEMCrypto_ERROR_INVALID_CONTEXT;
} }
return ce_->usage_table().UpdateUsageEntry( return ce_->usage_table().UpdateUsageEntry(
this, usage_entry_, header_buffer, header_buffer_length, entry_buffer, this, usage_entry_.get(), header_buffer, header_buffer_length,
entry_buffer_length, &clock_values_); entry_buffer, entry_buffer_length, &clock_values_);
} }
OEMCryptoResult SessionContext::DeactivateUsageEntry( OEMCryptoResult SessionContext::DeactivateUsageEntry(
@@ -1514,7 +1507,7 @@ OEMCryptoResult SessionContext::ReportUsage(const std::vector<uint8_t>& pst,
OEMCryptoResult SessionContext::MoveEntry(uint32_t new_index) { OEMCryptoResult SessionContext::MoveEntry(uint32_t new_index) {
if (!usage_entry_) return OEMCrypto_ERROR_INVALID_CONTEXT; if (!usage_entry_) return OEMCrypto_ERROR_INVALID_CONTEXT;
return ce_->usage_table().MoveEntry(usage_entry_, new_index); return ce_->usage_table().MoveEntry(usage_entry_.get(), new_index);
} }
// Internal utility function to decrypt the message // Internal utility function to decrypt the message

View File

@@ -267,7 +267,7 @@ class SessionContext {
std::vector<uint8_t> encryption_key_; std::vector<uint8_t> encryption_key_;
std::vector<uint8_t> session_key_; std::vector<uint8_t> session_key_;
const Key* current_content_key_; const Key* current_content_key_;
SessionContextKeys* session_keys_; std::unique_ptr<SessionContextKeys> session_keys_;
ODK_NonceValues nonce_values_; ODK_NonceValues nonce_values_;
uint8_t license_request_hash_[ODK_SHA256_HASH_SIZE]; uint8_t license_request_hash_[ODK_SHA256_HASH_SIZE];
RSA_shared_ptr rsa_key_; RSA_shared_ptr rsa_key_;
@@ -275,7 +275,7 @@ class SessionContext {
bool decrypt_started_; // If the license has been used in this session. bool decrypt_started_; // If the license has been used in this session.
ODK_TimerLimits timer_limits_; ODK_TimerLimits timer_limits_;
ODK_ClockValues clock_values_; ODK_ClockValues clock_values_;
UsageTableEntry* usage_entry_; std::unique_ptr<UsageTableEntry> usage_entry_;
SRMVersionStatus srm_requirements_status_; SRMVersionStatus srm_requirements_status_;
enum UsageEntryStatus { enum UsageEntryStatus {
kNoUsageEntry, // No entry loaded for this session. kNoUsageEntry, // No entry loaded for this session.

View File

@@ -348,9 +348,9 @@ UsageTableEntry* UsageTable::MakeEntry(uint32_t index) {
return new UsageTableEntry(this, index, master_generation_number_); return new UsageTableEntry(this, index, master_generation_number_);
} }
OEMCryptoResult UsageTable::CreateNewUsageEntry(SessionContext* session, OEMCryptoResult UsageTable::CreateNewUsageEntry(
UsageTableEntry** entry, SessionContext* session, std::unique_ptr<UsageTableEntry>* entry,
uint32_t* usage_entry_number) { uint32_t* usage_entry_number) {
if (!header_loaded_) { if (!header_loaded_) {
LOGE("CreateNewUsageEntry: Header not loaded."); LOGE("CreateNewUsageEntry: Header not loaded.");
return OEMCrypto_ERROR_UNKNOWN_FAILURE; return OEMCrypto_ERROR_UNKNOWN_FAILURE;
@@ -367,16 +367,15 @@ OEMCryptoResult UsageTable::CreateNewUsageEntry(SessionContext* session,
generation_numbers_.push_back(master_generation_number_); generation_numbers_.push_back(master_generation_number_);
sessions_.push_back(session); sessions_.push_back(session);
master_generation_number_++; master_generation_number_++;
*entry = new_entry; entry->reset(new_entry);
*usage_entry_number = index; *usage_entry_number = index;
return OEMCrypto_SUCCESS; return OEMCrypto_SUCCESS;
} }
OEMCryptoResult UsageTable::LoadUsageEntry(SessionContext* session, OEMCryptoResult UsageTable::LoadUsageEntry(
UsageTableEntry** entry, SessionContext* session, std::unique_ptr<UsageTableEntry>* entry,
uint32_t index, uint32_t index, const std::vector<uint8_t>& buffer,
const std::vector<uint8_t>& buffer, ODK_ClockValues* clock_values) {
ODK_ClockValues* clock_values) {
if (!header_loaded_) { if (!header_loaded_) {
LOGE("CreateNewUsageEntry: Header not loaded."); LOGE("CreateNewUsageEntry: Header not loaded.");
return OEMCrypto_ERROR_UNKNOWN_FAILURE; return OEMCrypto_ERROR_UNKNOWN_FAILURE;
@@ -393,12 +392,11 @@ OEMCryptoResult UsageTable::LoadUsageEntry(SessionContext* session,
LOGE("Too many usage entries: %d/%d", index, max); LOGE("Too many usage entries: %d/%d", index, max);
return OEMCrypto_ERROR_INSUFFICIENT_RESOURCES; return OEMCrypto_ERROR_INSUFFICIENT_RESOURCES;
} }
UsageTableEntry* new_entry = MakeEntry(index); std::unique_ptr<UsageTableEntry> new_entry(MakeEntry(index));
OEMCryptoResult status = OEMCryptoResult status =
new_entry->LoadData(ce_, index, buffer, clock_values); new_entry->LoadData(ce_, index, buffer, clock_values);
if (status != OEMCrypto_SUCCESS) { if (status != OEMCrypto_SUCCESS) {
delete new_entry;
return status; return status;
} }
if (new_entry->generation_number() != generation_numbers_[index]) { if (new_entry->generation_number() != generation_numbers_[index]) {
@@ -406,13 +404,12 @@ OEMCryptoResult UsageTable::LoadUsageEntry(SessionContext* session,
generation_numbers_[index]); generation_numbers_[index]);
if ((new_entry->generation_number() + 1 < generation_numbers_[index]) || if ((new_entry->generation_number() + 1 < generation_numbers_[index]) ||
(new_entry->generation_number() - 1 > generation_numbers_[index])) { (new_entry->generation_number() - 1 > generation_numbers_[index])) {
delete new_entry;
return OEMCrypto_ERROR_GENERATION_SKEW; return OEMCrypto_ERROR_GENERATION_SKEW;
} }
status = OEMCrypto_WARNING_GENERATION_SKEW; status = OEMCrypto_WARNING_GENERATION_SKEW;
} }
sessions_[index] = session; sessions_[index] = session;
*entry = new_entry; *entry = std::move(new_entry);
return status; return status;
} }

View File

@@ -88,10 +88,11 @@ class UsageTable {
virtual ~UsageTable(); virtual ~UsageTable();
OEMCryptoResult CreateNewUsageEntry(SessionContext* session, OEMCryptoResult CreateNewUsageEntry(SessionContext* session,
UsageTableEntry** entry, std::unique_ptr<UsageTableEntry>* entry,
uint32_t* usage_entry_number); uint32_t* usage_entry_number);
OEMCryptoResult LoadUsageEntry(SessionContext* session, OEMCryptoResult LoadUsageEntry(SessionContext* session,
UsageTableEntry** entry, uint32_t index, std::unique_ptr<UsageTableEntry>* entry,
uint32_t index,
const std::vector<uint8_t>& buffer, const std::vector<uint8_t>& buffer,
ODK_ClockValues* clock_values); ODK_ClockValues* clock_values);
OEMCryptoResult UpdateUsageEntry( OEMCryptoResult UpdateUsageEntry(