Cdm to expose GetDeviceInformation() and GetDeviceSignedCsrPayload()
[ Merge of https://widevine-internal-review.googlesource.com/c/cdm/+/178890/ ] GetDeviceInformation() and GetDeviceSignedCsrPayload() are added to cdm_engine and crypto_session, so that they can be queried by DRM plugin. This is to allow the wv drm HAL to be able to extract BCC and CSR payload to build CSR for prov 4 device registration, such that we don't need a separate RKP HAL to do this job. Changes to the DRM plugin to use the exposed methods will be in the coming CL. Bug: 286556950 Test: request_license_test Change-Id: I5f7aed8b3471ea477b79d08b95e1d217dc39070b
This commit is contained in:
@@ -887,7 +887,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level,
|
||||
const CdmResponseType status = crypto_session->GetBootCertificateChain(
|
||||
security_level, &bcc, &signature_unused);
|
||||
if (status == NO_ERROR) {
|
||||
LOGD("BCC length: %zu", bcc.size());
|
||||
LOGV("BCC length: %zu", bcc.size());
|
||||
*query_response = std::move(bcc);
|
||||
return CdmResponseType(NO_ERROR);
|
||||
}
|
||||
@@ -900,6 +900,24 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level,
|
||||
LOGE("Failed to extract BCC: status = %d", status.ToInt());
|
||||
return status;
|
||||
}
|
||||
if (query_token == QUERY_KEY_DEVICE_INFORMATION) {
|
||||
std::string device_info;
|
||||
const CdmResponseType status =
|
||||
crypto_session->GetDeviceInformation(security_level, &device_info);
|
||||
if (status == NO_ERROR) {
|
||||
LOGV("device_info length: %zu", device_info.size());
|
||||
*query_response = std::move(device_info);
|
||||
return CdmResponseType(NO_ERROR);
|
||||
}
|
||||
if (status == NOT_IMPLEMENTED_ERROR ||
|
||||
status == PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR) {
|
||||
LOGV("device_info not available: %s", status.ToString().c_str());
|
||||
*query_response = QUERY_VALUE_NONE;
|
||||
return CdmResponseType(NO_ERROR);
|
||||
}
|
||||
LOGE("Failed to extract device_info: %s", status.ToString().c_str());
|
||||
return status;
|
||||
}
|
||||
|
||||
CdmResponseType status;
|
||||
M_TIME(status = crypto_session->Open(security_level),
|
||||
@@ -1038,6 +1056,34 @@ CdmResponseType CdmEngine::QueryOemCryptoSessionId(
|
||||
return session->QueryOemCryptoSessionId(query_response);
|
||||
}
|
||||
|
||||
CdmResponseType CdmEngine::QueryDeviceSignedCsrPayload(
|
||||
const std::string& challenge, const std::string& device_info,
|
||||
std::string* query_response) {
|
||||
if (query_response == nullptr) {
|
||||
LOGE("Output |query_response| is null");
|
||||
return CdmResponseType(PARAMETER_NULL);
|
||||
}
|
||||
std::unique_ptr<CryptoSession> crypto_session(
|
||||
CryptoSession::MakeCryptoSession(metrics_->GetCryptoMetrics()));
|
||||
|
||||
std::string signed_csr_payload;
|
||||
const CdmResponseType status = crypto_session->GetDeviceSignedCsrPayload(
|
||||
kLevelDefault, challenge, device_info, &signed_csr_payload);
|
||||
if (status == NO_ERROR) {
|
||||
LOGV("signed_csr_payload length: %zu", signed_csr_payload.size());
|
||||
*query_response = std::move(signed_csr_payload);
|
||||
return CdmResponseType(NO_ERROR);
|
||||
}
|
||||
if (status == NOT_IMPLEMENTED_ERROR ||
|
||||
status == PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR) {
|
||||
LOGD("signed_csr_payload not available: %s", status.ToString().c_str());
|
||||
*query_response = QUERY_VALUE_NONE;
|
||||
return CdmResponseType(NO_ERROR);
|
||||
}
|
||||
LOGE("Failed to extract signed_csr_payload: %s", status.ToString().c_str());
|
||||
return status;
|
||||
}
|
||||
|
||||
// static
|
||||
bool CdmEngine::IsSecurityLevelSupported(CdmSecurityLevel level) {
|
||||
LOGI("level = %s", CdmSecurityLevelToString(level));
|
||||
|
||||
Reference in New Issue
Block a user