Group license support
This commit is contained in:
@@ -265,13 +265,6 @@ OEMCryptoResult CryptoInterface::OEMCrypto_DeriveKeysFromSessionKey(
|
||||
});
|
||||
}
|
||||
|
||||
OEMCryptoResult CryptoInterface::OEMCrypto_LoadKeys(
|
||||
const LoadKeysParams& load_key_params) {
|
||||
return lock_->WithOecSessionLock("LoadKeys", [&] {
|
||||
return oemcrypto_interface_->OEMCrypto_LoadKeys(load_key_params);
|
||||
});
|
||||
}
|
||||
|
||||
OEMCryptoResult CryptoInterface::OEMCrypto_LoadLicense(
|
||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||
size_t core_message_length, const uint8_t* signature,
|
||||
@@ -320,17 +313,6 @@ OEMCryptoResult CryptoInterface::OEMCrypto_GetHDCPCapability(
|
||||
});
|
||||
}
|
||||
|
||||
OEMCryptoResult CryptoInterface::OEMCrypto_RefreshKeys(
|
||||
OEMCrypto_SESSION session, const uint8_t* message, size_t message_length,
|
||||
const uint8_t* signature, size_t signature_length, size_t num_keys,
|
||||
const OEMCrypto_KeyRefreshObject* key_array) {
|
||||
return lock_->WithOecSessionLock("RefreshKeys", [&] {
|
||||
return oemcrypto_interface_->OEMCrypto_RefreshKeys(
|
||||
session, message, message_length, signature, signature_length, num_keys,
|
||||
key_array);
|
||||
});
|
||||
}
|
||||
|
||||
OEMCryptoResult CryptoInterface::OEMCrypto_GetDeviceID(uint8_t* deviceID,
|
||||
size_t* idLength) {
|
||||
return lock_->WithOecReadLock("GetDeviceID", [&] {
|
||||
@@ -828,64 +810,6 @@ CasStatus CryptoSession::DeriveKeysFromSessionKey(
|
||||
return CasStatus::OkStatus();
|
||||
}
|
||||
|
||||
CasStatus CryptoSession::LoadKeys(const std::string& message,
|
||||
const std::string& signature,
|
||||
const std::string& mac_key_iv,
|
||||
const std::string& mac_key,
|
||||
const std::vector<CryptoKey>& key_array,
|
||||
const std::string& pst,
|
||||
const std::string& srm_requirement) {
|
||||
if (key_array.empty()) {
|
||||
return CasStatus::OkStatus();
|
||||
}
|
||||
|
||||
LoadKeysParams load_key_params;
|
||||
load_key_params.session = session_;
|
||||
load_key_params.message = reinterpret_cast<const uint8_t*>(message.data());
|
||||
load_key_params.message_length = message.size();
|
||||
load_key_params.signature =
|
||||
reinterpret_cast<const uint8_t*>(signature.data());
|
||||
load_key_params.signature_length = signature.size();
|
||||
load_key_params.enc_mac_keys_iv.offset = GetOffset(message, mac_key_iv);
|
||||
load_key_params.enc_mac_keys_iv.length = mac_key_iv.size();
|
||||
load_key_params.enc_mac_keys.offset = GetOffset(message, mac_key);
|
||||
load_key_params.enc_mac_keys.length = mac_key.size();
|
||||
load_key_params.pst.offset = GetOffset(message, pst);
|
||||
load_key_params.pst.length = pst.size();
|
||||
load_key_params.srm_requirement.offset = GetOffset(message, srm_requirement);
|
||||
load_key_params.srm_requirement.length = srm_requirement.size();
|
||||
std::vector<OEMCrypto_KeyObject> key_objects;
|
||||
key_objects.reserve(key_array.size());
|
||||
for (const auto& ki : key_array) {
|
||||
key_objects.resize(key_objects.size() + 1);
|
||||
OEMCrypto_KeyObject& ko = key_objects.back();
|
||||
ko.key_id.offset = GetOffset(message, ki.key_id());
|
||||
ko.key_id.length = ki.key_id().length();
|
||||
ko.key_data_iv.offset = GetOffset(message, ki.key_data_iv());
|
||||
ko.key_data_iv.length = ki.key_data_iv().length();
|
||||
ko.key_data.offset = GetOffset(message, ki.key_data());
|
||||
ko.key_data.length = ki.key_data().length();
|
||||
if (ki.HasKeyControl()) {
|
||||
ko.key_control_iv.offset = GetOffset(message, ki.key_control_iv());
|
||||
ko.key_control_iv.length = ki.key_control_iv().length();
|
||||
ko.key_control.offset = GetOffset(message, ki.key_control());
|
||||
ko.key_control.length = ki.key_control().length();
|
||||
}
|
||||
}
|
||||
load_key_params.key_array = &key_objects[0];
|
||||
load_key_params.num_keys = key_objects.size();
|
||||
load_key_params.license_type = OEMCrypto_EntitlementLicense;
|
||||
|
||||
OEMCryptoResult result =
|
||||
crypto_interface_->OEMCrypto_LoadKeys(load_key_params);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
std::ostringstream err_string;
|
||||
err_string << "OEMCrypto_LoadKeys returned " << result;
|
||||
return CasStatus(CasStatusCode::kCryptoSessionError, err_string.str());
|
||||
}
|
||||
return CasStatus::OkStatus();
|
||||
}
|
||||
|
||||
CasStatus CryptoSession::LoadLicense(const std::string& signed_message,
|
||||
const std::string& core_message,
|
||||
const std::string& signature) {
|
||||
@@ -1040,42 +964,6 @@ OEMCryptoResult CryptoSession::getCryptoInterface(
|
||||
return CryptoInterface::create(interface);
|
||||
}
|
||||
|
||||
CasStatus CryptoSession::RefreshKeys(const std::string& message,
|
||||
const std::string& signature,
|
||||
const std::vector<CryptoKey>& key_array) {
|
||||
if (key_array.empty()) {
|
||||
return CasStatus::OkStatus();
|
||||
}
|
||||
// Assume the message and signature parameters are valid.
|
||||
const uint8_t* message_ptr = reinterpret_cast<const uint8_t*>(message.data());
|
||||
const uint8_t* signature_ptr =
|
||||
reinterpret_cast<const uint8_t*>(signature.data());
|
||||
std::vector<OEMCrypto_KeyRefreshObject> load_key_array;
|
||||
load_key_array.reserve(key_array.size());
|
||||
for (const auto& key : key_array) {
|
||||
load_key_array.emplace_back();
|
||||
auto& key_object = load_key_array.back();
|
||||
key_object.key_id.offset = GetOffset(message, key.key_id());
|
||||
key_object.key_id.length = key.key_id().length();
|
||||
if (!key.key_control().empty()) {
|
||||
key_object.key_control_iv.offset =
|
||||
GetOffset(message, key.key_control_iv());
|
||||
key_object.key_control_iv.length = key.key_control_iv().length();
|
||||
key_object.key_control.offset = GetOffset(message, key.key_control());
|
||||
key_object.key_control.length = key.key_control().length();
|
||||
}
|
||||
}
|
||||
OEMCryptoResult result = crypto_interface_->OEMCrypto_RefreshKeys(
|
||||
session_, message_ptr, message.size(), signature_ptr, signature.size(),
|
||||
load_key_array.size(), &load_key_array[0]);
|
||||
if (result != OEMCrypto_SUCCESS) {
|
||||
std::ostringstream err_string;
|
||||
err_string << "OEMCrypto_RefreshKeys returned " << result;
|
||||
return CasStatus(CasStatusCode::kCryptoSessionError, err_string.str());
|
||||
}
|
||||
return CasStatus::OkStatus();
|
||||
}
|
||||
|
||||
CasStatus CryptoSession::GetDeviceID(std::string* buffer) {
|
||||
if (!crypto_interface_) {
|
||||
return CasStatus(CasStatusCode::kCryptoSessionError,
|
||||
|
||||
Reference in New Issue
Block a user