Source release 16.3.0
This commit is contained in:
@@ -237,6 +237,7 @@ bool CdmLicense::Init(const std::string& client_token,
|
||||
crypto_session_ = session;
|
||||
policy_engine_ = policy_engine;
|
||||
use_privacy_mode_ = use_privacy_mode;
|
||||
license_nonce_ = 0;
|
||||
initialized_ = true;
|
||||
return true;
|
||||
}
|
||||
@@ -313,8 +314,7 @@ CdmResponseType CdmLicense::PrepareKeyRequest(
|
||||
|
||||
// Get/set the nonce. This value will be reflected in the Key Control Block
|
||||
// of the license response.
|
||||
uint32_t nonce;
|
||||
status = crypto_session_->GenerateNonce(&nonce);
|
||||
status = crypto_session_->GenerateNonce(&license_nonce_);
|
||||
|
||||
switch (status) {
|
||||
case NO_ERROR:
|
||||
@@ -325,9 +325,7 @@ CdmResponseType CdmLicense::PrepareKeyRequest(
|
||||
default:
|
||||
return LICENSE_REQUEST_NONCE_GENERATION_ERROR;
|
||||
}
|
||||
license_request.set_key_control_nonce(nonce);
|
||||
LOGD("nonce = %u", nonce);
|
||||
|
||||
license_request.set_key_control_nonce(license_nonce_);
|
||||
license_request.set_protocol_version(video_widevine::VERSION_2_1);
|
||||
|
||||
// License request is complete. Serialize it.
|
||||
@@ -462,11 +460,11 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
|
||||
LOGW("Unknown API Version");
|
||||
api_version = 15;
|
||||
}
|
||||
uint32_t nonce = 0;
|
||||
if (api_version < 16) {
|
||||
// For a pre-v16 license, get/set the nonce. This value will be reflected
|
||||
// in the Key Control Block of the license response.
|
||||
const CdmResponseType status = crypto_session_->GenerateNonce(&nonce);
|
||||
const CdmResponseType status =
|
||||
crypto_session_->GenerateNonce(&license_nonce_);
|
||||
switch (status) {
|
||||
case NO_ERROR:
|
||||
break;
|
||||
@@ -477,8 +475,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
|
||||
return LICENSE_RENEWAL_NONCE_GENERATION_ERROR;
|
||||
}
|
||||
}
|
||||
license_request.set_key_control_nonce(nonce);
|
||||
LOGD("nonce = %u", nonce);
|
||||
license_request.set_key_control_nonce(license_nonce_);
|
||||
license_request.set_protocol_version(video_widevine::VERSION_2_1);
|
||||
|
||||
// License request is complete. Serialize it.
|
||||
@@ -705,12 +702,13 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse(
|
||||
return INVALID_LICENSE_TYPE;
|
||||
}
|
||||
|
||||
// At this point of the license life-cycle (handling a renewal or
|
||||
// release), we should already know if the license is v15 or not.
|
||||
// If license is v16, then there should be a |core_message|
|
||||
// present; otherwise there might have beeen some tampering with the
|
||||
// request or response.
|
||||
if (supports_core_messages() &&
|
||||
// At this point of the license life-cycle (handling a renewal), we should
|
||||
// already know if the license is v15 or not. If license is v16, then a
|
||||
// renewal should have a |core_message| present; otherwise there might have
|
||||
// been some tampering with the request or response. On the other hand, a
|
||||
// release is processed without loading the license, so OEMCrypto does not
|
||||
// know if it is v15 or v16, and will not add a core message.
|
||||
if (is_renewal && supports_core_messages() &&
|
||||
(!signed_response.has_oemcrypto_core_message() ||
|
||||
signed_response.oemcrypto_core_message().empty())) {
|
||||
LOGE("Renewal response is missing |core_message| field");
|
||||
@@ -723,8 +721,9 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse(
|
||||
}
|
||||
const std::string& signed_message = signed_response.msg();
|
||||
const std::string core_message =
|
||||
supports_core_messages() ? signed_response.oemcrypto_core_message()
|
||||
: std::string();
|
||||
signed_response.has_oemcrypto_core_message()
|
||||
? signed_response.oemcrypto_core_message()
|
||||
: std::string();
|
||||
const std::string& signature = signed_response.signature();
|
||||
|
||||
License license;
|
||||
@@ -811,6 +810,13 @@ CdmResponseType CdmLicense::RestoreOfflineLicense(
|
||||
}
|
||||
|
||||
key_request_ = signed_request.msg();
|
||||
LicenseRequest original_license_request;
|
||||
if (!original_license_request.ParseFromString(key_request_)) {
|
||||
LOGW("Could not parse original request.");
|
||||
} else {
|
||||
license_nonce_ = original_license_request.key_control_nonce();
|
||||
}
|
||||
|
||||
CdmResponseType sts = HandleKeyResponse(license_response);
|
||||
|
||||
if (sts != KEY_ADDED) return sts;
|
||||
|
||||
Reference in New Issue
Block a user