Allow server to send license with larger ODK_MAX_NUM_KEYS
PiperOrigin-RevId: 538676411 Merged from https://widevine-internal-review.googlesource.com/175915 Change-Id: Iadef2115fe3f9001034223e647cbfa6228484281
This commit is contained in:
@@ -694,7 +694,7 @@ void LicenseRoundTrip::CreateDefaultResponse() {
|
||||
FillCoreResponseSubstrings();
|
||||
}
|
||||
|
||||
void LicenseRoundTrip::ConvertDataToValidBools(ODK_ParsedLicense* t) {
|
||||
void LicenseRoundTrip::ConvertDataToValidBools(ODK_Packing_ParsedLicense* t) {
|
||||
t->nonce_required = ConvertByteToValidBoolean(&t->nonce_required);
|
||||
t->timer_limits.soft_enforce_playback_duration = ConvertByteToValidBoolean(
|
||||
&t->timer_limits.soft_enforce_playback_duration);
|
||||
@@ -802,27 +802,30 @@ void LicenseRoundTrip::FillCoreResponseSubstrings() {
|
||||
sizeof(response_data_.srm_restriction_data));
|
||||
}
|
||||
core_response_.key_array_length = num_keys_;
|
||||
key_array_.clear();
|
||||
for (unsigned int i = 0; i < num_keys_; i++) {
|
||||
core_response_.key_array[i].key_id = FindSubstring(
|
||||
response_data_.keys[i].key_id, response_data_.keys[i].key_id_length);
|
||||
core_response_.key_array[i].key_data_iv = FindSubstring(
|
||||
response_data_.keys[i].key_iv, sizeof(response_data_.keys[i].key_iv));
|
||||
core_response_.key_array[i].key_data =
|
||||
FindSubstring(response_data_.keys[i].key_data,
|
||||
response_data_.keys[i].key_data_length);
|
||||
OEMCrypto_KeyObject obj;
|
||||
obj.key_id = FindSubstring(response_data_.keys[i].key_id,
|
||||
response_data_.keys[i].key_id_length);
|
||||
obj.key_data_iv = FindSubstring(response_data_.keys[i].key_iv,
|
||||
sizeof(response_data_.keys[i].key_iv));
|
||||
obj.key_data = FindSubstring(response_data_.keys[i].key_data,
|
||||
response_data_.keys[i].key_data_length);
|
||||
if (core_request().api_major_version < kClearControlBlockAPIMajor ||
|
||||
(core_request().api_major_version == kClearControlBlockAPIMajor &&
|
||||
core_request().api_minor_version < kClearControlBlockAPIMinor)) {
|
||||
core_response_.key_array[i].key_control_iv =
|
||||
obj.key_control_iv =
|
||||
FindSubstring(response_data_.keys[i].control_iv,
|
||||
sizeof(response_data_.keys[i].control_iv));
|
||||
} else {
|
||||
core_response_.key_array[i].key_control_iv = FindSubstring(nullptr, 0);
|
||||
obj.key_control_iv = FindSubstring(nullptr, 0);
|
||||
}
|
||||
core_response_.key_array[i].key_control =
|
||||
FindSubstring(&response_data_.keys[i].control,
|
||||
sizeof(response_data_.keys[i].control));
|
||||
obj.key_control = FindSubstring(&response_data_.keys[i].control,
|
||||
sizeof(response_data_.keys[i].control));
|
||||
key_array_.push_back(obj);
|
||||
}
|
||||
core_response_.key_array = key_array_.data();
|
||||
core_response_.key_array_length = static_cast<uint32_t>(key_array_.size());
|
||||
}
|
||||
|
||||
void LicenseRoundTrip::EncryptResponse(bool force_clear_kcb) {
|
||||
|
||||
@@ -373,7 +373,7 @@ class LicenseRoundTrip
|
||||
: public RoundTrip<
|
||||
/* CoreRequest */ oemcrypto_core_message::ODK_LicenseRequest,
|
||||
OEMCrypto_PrepAndSignLicenseRequest,
|
||||
/* CoreResponse */ ODK_ParsedLicense,
|
||||
/* CoreResponse */ ODK_Packing_ParsedLicense,
|
||||
/* ResponseData */ MessageData> {
|
||||
public:
|
||||
LicenseRoundTrip(Session* session)
|
||||
@@ -399,7 +399,7 @@ class LicenseRoundTrip
|
||||
void InjectFuzzedResponseData(const uint8_t* data, size_t size);
|
||||
// Used for OEMCrypto Fuzzing: Convert boolean flags in parsed_license to
|
||||
// valid bytes to avoid errors from msan.
|
||||
void ConvertDataToValidBools(ODK_ParsedLicense* t);
|
||||
void ConvertDataToValidBools(ODK_Packing_ParsedLicense* t);
|
||||
// Create a license with four keys. Each key is responsible for one of generic
|
||||
// encrypt (key 0), decrypt (key 1), sign (key 2) and verify (key 3). Each key
|
||||
// is allowed only one type of operation.
|
||||
@@ -494,6 +494,9 @@ class LicenseRoundTrip
|
||||
// CreateDefaultResponse.
|
||||
OEMCrypto_LicenseType license_type_;
|
||||
uint8_t request_hash_[ODK_SHA256_HASH_SIZE];
|
||||
// Used to hold and add/update key information to be transferred into the core
|
||||
// response later on.
|
||||
std::vector<OEMCrypto_KeyObject> key_array_;
|
||||
};
|
||||
|
||||
class RenewalRoundTrip
|
||||
|
||||
Reference in New Issue
Block a user