Merge "Use unique_ptr in oemcrypto ref" into rvc-dev am: a55244025b am: 0abb41845e am: b9ef42f7a6
Change-Id: I18dbb965ac53cff45ed75d4f0040c3db83cfa68d
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user