Fix nonce problem in license renewal

am: 0947bd185b

Change-Id: Ibeb92f4598af6bcf414f6757e8b9816d9988751e
This commit is contained in:
Fred Gylys-Colwell
2020-02-27 12:24:29 -08:00
committed by android-build-merger

View File

@@ -457,19 +457,25 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
current_license->set_seconds_since_last_played(seconds_since_last_played); current_license->set_seconds_since_last_played(seconds_since_last_played);
} }
// Get/set the nonce. This value will be reflected in the Key Control Block uint32_t api_version = 0;
// of the license response. if (!crypto_session_->GetApiVersion(&api_version)) {
uint32_t nonce; LOGW("Unknown API Version");
CdmResponseType status = crypto_session_->GenerateNonce(&nonce); api_version = 15;
}
switch (status) { uint32_t nonce = 0;
case NO_ERROR: if (api_version < 16) {
break; // For a pre-v16 license, get/set the nonce. This value will be reflected
case SESSION_LOST_STATE_ERROR: // in the Key Control Block of the license response.
case SYSTEM_INVALIDATED_ERROR: const CdmResponseType status = crypto_session_->GenerateNonce(&nonce);
return status; switch (status) {
default: case NO_ERROR:
return LICENSE_RENEWAL_NONCE_GENERATION_ERROR; break;
case SESSION_LOST_STATE_ERROR:
case SYSTEM_INVALIDATED_ERROR:
return status;
default:
return LICENSE_RENEWAL_NONCE_GENERATION_ERROR;
}
} }
license_request.set_key_control_nonce(nonce); license_request.set_key_control_nonce(nonce);
LOGD("nonce = %u", nonce); LOGD("nonce = %u", nonce);
@@ -482,7 +488,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
// Construct signature and core message. // Construct signature and core message.
std::string core_message; std::string core_message;
std::string license_request_signature; std::string license_request_signature;
status = crypto_session_->PrepareAndSignRenewalRequest( const CdmResponseType status = crypto_session_->PrepareAndSignRenewalRequest(
serialized_license_req, &core_message, &license_request_signature); serialized_license_req, &core_message, &license_request_signature);
if (status != NO_ERROR) return status; if (status != NO_ERROR) return status;