Merge latest oemcrypto-v17 change
No-Typo-Check: Not related to this change. Bug: 161477208 Change-Id: I99e4780f6855b7045aa0cd5a49c13d2d0d51ed64
This commit is contained in:
committed by
Fred Gylys-Colwell
parent
c924960962
commit
642965c678
@@ -61,7 +61,7 @@ class UsagePropertySet : public CdmClientPropertySet {
|
||||
const std::string empty_;
|
||||
};
|
||||
|
||||
CdmEngine::CdmEngine(FileSystem* file_system,
|
||||
CdmEngine::CdmEngine(wvutil::FileSystem* file_system,
|
||||
std::shared_ptr<metrics::EngineMetrics> metrics)
|
||||
: metrics_(metrics),
|
||||
cert_provisioning_(),
|
||||
@@ -182,11 +182,6 @@ CdmResponseType CdmEngine::OpenSession(const CdmKeySystem& key_system,
|
||||
}
|
||||
return sts;
|
||||
}
|
||||
if (sts != NO_ERROR) {
|
||||
LOGE("Bad session init: status = %d", static_cast<int>(sts));
|
||||
return sts;
|
||||
}
|
||||
|
||||
const CdmSessionId id = new_session->session_id();
|
||||
LOGI("New session: session_id = %s", IdToString(id));
|
||||
|
||||
@@ -344,7 +339,7 @@ CdmResponseType CdmEngine::GenerateKeyRequest(
|
||||
}
|
||||
|
||||
LOGD("key_request = (%zu) %s", key_request->message.size(),
|
||||
wvcdm::Base64SafeEncode(key_request->message).c_str());
|
||||
wvutil::Base64SafeEncode(key_request->message).c_str());
|
||||
|
||||
return KEY_MESSAGE;
|
||||
}
|
||||
@@ -382,7 +377,7 @@ CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id,
|
||||
id = iter->second.first;
|
||||
} else {
|
||||
LOGD("key_data = (%zu) %s", key_data.size(),
|
||||
wvcdm::Base64SafeEncode(key_data).c_str());
|
||||
wvutil::Base64SafeEncode(key_data).c_str());
|
||||
}
|
||||
|
||||
std::shared_ptr<CdmSession> session;
|
||||
@@ -678,9 +673,7 @@ CdmResponseType CdmEngine::QueryStatus(SecurityLevel security_level,
|
||||
return status;
|
||||
}
|
||||
if (query_token == QUERY_KEY_SRM_UPDATE_SUPPORT) {
|
||||
const bool is_srm_update_supported = crypto_session->IsSrmUpdateSupported();
|
||||
*query_response =
|
||||
is_srm_update_supported ? QUERY_VALUE_TRUE : QUERY_VALUE_FALSE;
|
||||
*query_response = QUERY_VALUE_FALSE;
|
||||
return NO_ERROR;
|
||||
}
|
||||
if (query_token == QUERY_KEY_WVCDM_VERSION) {
|
||||
@@ -737,6 +730,9 @@ CdmResponseType CdmEngine::QueryStatus(SecurityLevel security_level,
|
||||
case kClientTokenOemCert:
|
||||
*query_response = QUERY_VALUE_OEM_CERTIFICATE;
|
||||
break;
|
||||
case kClientTokenBootCertChain:
|
||||
*query_response = QUERY_VALUE_BOOT_CERTIFICATE_CHAIN;
|
||||
break;
|
||||
case kClientTokenUninitialized:
|
||||
default:
|
||||
LOGW("GetProvisioningMethod returned invalid method: token_type = %d",
|
||||
@@ -1030,7 +1026,7 @@ CdmResponseType CdmEngine::GetProvisioningRequest(
|
||||
if (status != NO_ERROR) return status;
|
||||
}
|
||||
const CdmResponseType status = cert_provisioning_->GetProvisioningRequest(
|
||||
requested_security_level, cert_type, cert_authority,
|
||||
file_system_, requested_security_level, cert_type, cert_authority,
|
||||
file_system_->origin(), spoid_, request, default_url);
|
||||
if (status != NO_ERROR) {
|
||||
cert_provisioning_.reset(); // Release resources.
|
||||
@@ -1135,13 +1131,37 @@ bool CdmEngine::IsProvisioned(CdmSecurityLevel security_level) {
|
||||
UsagePropertySet property_set;
|
||||
property_set.set_security_level(
|
||||
security_level == kSecurityLevelL3 ? kLevel3 : kLevelDefault);
|
||||
return GetProvisioningStatus(security_level) == kProvisioned;
|
||||
}
|
||||
|
||||
CdmSession session(file_system_, metrics_->AddSession());
|
||||
const CdmResponseType status = session.Init(&property_set);
|
||||
if (NO_ERROR != status) {
|
||||
LOGE("Init failed: status = %d", static_cast<int>(status));
|
||||
CdmProvisioningStatus CdmEngine::GetProvisioningStatus(
|
||||
CdmSecurityLevel security_level) {
|
||||
std::unique_ptr<CryptoSession> crypto_session(
|
||||
CryptoSession::MakeCryptoSession(metrics_->GetCryptoMetrics()));
|
||||
CdmResponseType status = crypto_session->Open(
|
||||
security_level == kSecurityLevelL3 ? kLevel3 : kLevelDefault);
|
||||
if (status != NO_ERROR) {
|
||||
LOGE("Failed to open crypto session: status = %d",
|
||||
static_cast<int>(status));
|
||||
return kUnknownProvisionStatus;
|
||||
}
|
||||
return status == NO_ERROR;
|
||||
const CdmSecurityLevel cdm_security_level =
|
||||
crypto_session->GetSecurityLevel();
|
||||
DeviceFiles handle(file_system_);
|
||||
if (!handle.Init(cdm_security_level)) {
|
||||
LOGE("Failed to initialize device files.");
|
||||
return kUnknownProvisionStatus;
|
||||
}
|
||||
|
||||
UsagePropertySet property_set;
|
||||
if (handle.HasCertificate(property_set.use_atsc_mode())) {
|
||||
return kProvisioned;
|
||||
}
|
||||
if (crypto_session->GetPreProvisionTokenType() == kClientTokenBootCertChain &&
|
||||
!handle.HasOemCertificate()) {
|
||||
return kNeedsOemCertProvisioning;
|
||||
}
|
||||
return kNeedsDrmCertProvisioning;
|
||||
}
|
||||
|
||||
CdmResponseType CdmEngine::Unprovision(CdmSecurityLevel security_level) {
|
||||
@@ -1173,7 +1193,7 @@ CdmResponseType CdmEngine::Unprovision(CdmSecurityLevel security_level) {
|
||||
|
||||
// TODO(b/141705730): Remove usage entries during unprovisioning.
|
||||
if (!file_system_->IsGlobal()) {
|
||||
if (!handle.RemoveCertificate()) {
|
||||
if (!handle.RemoveCertificate() || !handle.RemoveOemCertificate()) {
|
||||
LOGE("Unable to delete certificate");
|
||||
return UNPROVISION_ERROR_2;
|
||||
}
|
||||
@@ -1421,7 +1441,7 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id,
|
||||
}
|
||||
// Return a random usage report from a random security level
|
||||
SecurityLevel security_level =
|
||||
CdmRandom::RandomBool() ? kLevelDefault : kLevel3;
|
||||
wvutil::CdmRandom::RandomBool() ? kLevelDefault : kLevel3;
|
||||
CdmResponseType status = UNKNOWN_ERROR;
|
||||
do {
|
||||
status = GetUsageInfo(app_id, security_level, error_detail, usage_info);
|
||||
@@ -1486,7 +1506,7 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id,
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
const size_t index = CdmRandom::RandomInRange(usage_data.size() - 1);
|
||||
const size_t index = wvutil::CdmRandom::RandomInRange(usage_data.size() - 1);
|
||||
status = usage_session_->RestoreUsageSession(usage_data[index], error_detail);
|
||||
if (KEY_ADDED != status) {
|
||||
// TODO(b/141704872): Make multiple attempts.
|
||||
@@ -1897,7 +1917,7 @@ CdmResponseType CdmEngine::ParseDecryptHashString(
|
||||
return INVALID_DECRYPT_HASH_FORMAT;
|
||||
}
|
||||
|
||||
*hash = wvcdm::a2bs_hex(tokens[2]);
|
||||
*hash = wvutil::a2bs_hex(tokens[2]);
|
||||
if (hash->empty()) {
|
||||
LOGE("Malformed hash: %s", hash_string.c_str());
|
||||
return INVALID_DECRYPT_HASH_FORMAT;
|
||||
@@ -1990,7 +2010,7 @@ bool CdmEngine::ValidateKeySystem(const CdmKeySystem& key_system) {
|
||||
}
|
||||
|
||||
void CdmEngine::OnTimerEvent() {
|
||||
Clock clock;
|
||||
wvutil::Clock clock;
|
||||
const uint64_t current_time = clock.GetCurrentTime();
|
||||
bool usage_update_period_expired = false;
|
||||
if (current_time - last_usage_information_update_time_ >
|
||||
|
||||
Reference in New Issue
Block a user