Merge changes Ib41046d0,Ie138f034,If8d8e32e,I0318c532,I498e633a, ...
* changes: Remove missing tests from build_all_test script Replace PST Report with buffer Add InactiveUnused to Usage Report status OEMCrypto v13 Header and Stubs Log HTTP errors in unit tests Rename oemcrypto's CryptoEngine configuration functions. Move keybox and root certificate handling into new class. Test OEMCrypto with backwards compatible verification
This commit is contained in:
committed by
Android (Google) Code Review
commit
65a2c240de
@@ -13,6 +13,7 @@
|
||||
#include "crypto_key.h"
|
||||
#include "log.h"
|
||||
#include "properties.h"
|
||||
#include "pst_report.h"
|
||||
#include "string_conversions.h"
|
||||
#include "wv_cdm_constants.h"
|
||||
|
||||
@@ -505,7 +506,8 @@ CdmResponseType CryptoSession::LoadKeys(
|
||||
oec_session_id_, msg, message.size(),
|
||||
reinterpret_cast<const uint8_t*>(signature.data()), signature.size(),
|
||||
enc_mac_key_iv, enc_mac_key, keys.size(), &load_keys[0], pst,
|
||||
provider_session_token.length());
|
||||
provider_session_token.length(),
|
||||
NULL); // TODO(rfrias): http://b/28955520
|
||||
|
||||
if (OEMCrypto_SUCCESS == sts) {
|
||||
if (!provider_session_token.empty()) {
|
||||
@@ -859,8 +861,10 @@ CdmResponseType CryptoSession::DeactivateUsageInformation(
|
||||
uint8_t* pst = reinterpret_cast<uint8_t*>(
|
||||
const_cast<char*>(provider_session_token.data()));
|
||||
|
||||
// TODO(fredgc or rfrias): make sure oec_session_id_ is valid.
|
||||
OEMCryptoResult status =
|
||||
OEMCrypto_DeactivateUsageEntry(pst, provider_session_token.length());
|
||||
OEMCrypto_DeactivateUsageEntry((uint32_t)oec_session_id_,
|
||||
pst, provider_session_token.length());
|
||||
|
||||
switch (status) {
|
||||
case OEMCrypto_SUCCESS:
|
||||
@@ -902,61 +906,65 @@ CdmResponseType CryptoSession::GenerateUsageReport(
|
||||
}
|
||||
}
|
||||
|
||||
usage_report->resize(usage_length);
|
||||
OEMCrypto_PST_Report* report = reinterpret_cast<OEMCrypto_PST_Report*>(
|
||||
const_cast<char*>(usage_report->data()));
|
||||
std::vector<uint8_t> buffer(usage_length);
|
||||
status = OEMCrypto_ReportUsage(oec_session_id_, pst,
|
||||
provider_session_token.length(), report,
|
||||
&usage_length);
|
||||
provider_session_token.length(),
|
||||
&buffer[0], &usage_length);
|
||||
|
||||
if (OEMCrypto_SUCCESS != status) {
|
||||
LOGE("CryptoSession::GenerateUsageReport: Report Usage error=%ld", status);
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
if (usage_length != usage_report->length()) {
|
||||
usage_report->resize(usage_length);
|
||||
if (usage_length != buffer.size()) {
|
||||
buffer.resize(usage_length);
|
||||
}
|
||||
(*usage_report) = std::string(reinterpret_cast<const char *>(&buffer[0]),
|
||||
buffer.size());
|
||||
|
||||
OEMCrypto_PST_Report pst_report;
|
||||
Unpacked_PST_Report pst_report(&buffer[0]);
|
||||
*usage_duration_status = kUsageDurationsInvalid;
|
||||
if (usage_length < sizeof(pst_report)) {
|
||||
if (usage_length < pst_report.report_size()) {
|
||||
LOGE("CryptoSession::GenerateUsageReport: usage report too small=%ld",
|
||||
usage_length);
|
||||
return NO_ERROR; // usage report available but no duration information
|
||||
}
|
||||
|
||||
memcpy(&pst_report, usage_report->data(), sizeof(pst_report));
|
||||
if (kUnused == pst_report.status) {
|
||||
if (kUnused == pst_report.status()) {
|
||||
*usage_duration_status = kUsageDurationPlaybackNotBegun;
|
||||
return NO_ERROR;
|
||||
}
|
||||
LOGV("OEMCrypto_PST_Report.status: %d\n", pst_report.status);
|
||||
LOGV("OEMCrypto_PST_Report.status: %d\n", pst_report.status());
|
||||
LOGV("OEMCrypto_PST_Report.clock_security_level: %d\n",
|
||||
pst_report.clock_security_level);
|
||||
LOGV("OEMCrypto_PST_Report.pst_length: %d\n", pst_report.pst_length);
|
||||
LOGV("OEMCrypto_PST_Report.padding: %d\n", pst_report.padding);
|
||||
pst_report.clock_security_level());
|
||||
LOGV("OEMCrypto_PST_Report.pst_length: %d\n",
|
||||
pst_report.pst_length());
|
||||
LOGV("OEMCrypto_PST_Report.padding: %d\n", pst_report.padding());
|
||||
LOGV("OEMCrypto_PST_Report.seconds_since_license_received: %lld\n",
|
||||
ntohll64(pst_report.seconds_since_license_received));
|
||||
pst_report.seconds_since_license_received());
|
||||
LOGV("OEMCrypto_PST_Report.seconds_since_first_decrypt: %lld\n",
|
||||
ntohll64(pst_report.seconds_since_first_decrypt));
|
||||
pst_report.seconds_since_first_decrypt());
|
||||
LOGV("OEMCrypto_PST_Report.seconds_since_last_decrypt: %lld\n",
|
||||
ntohll64(pst_report.seconds_since_last_decrypt));
|
||||
pst_report.seconds_since_last_decrypt());
|
||||
LOGV("OEMCrypto_PST_Report: %s\n", b2a_hex(*usage_report).c_str());
|
||||
|
||||
// When usage report state is inactive, we have to deduce whether the
|
||||
// license was ever used.
|
||||
if (kInactive == pst_report.status &&
|
||||
(0 > ntohll64(pst_report.seconds_since_first_decrypt) ||
|
||||
ntohll64(pst_report.seconds_since_license_received) <
|
||||
ntohll64(pst_report.seconds_since_first_decrypt))) {
|
||||
if (kInactiveUnused == pst_report.status()) {
|
||||
*usage_duration_status = kUsageDurationPlaybackNotBegun;
|
||||
return NO_ERROR;
|
||||
}
|
||||
// Before OEMCrypto v13, When usage report state is inactive, we have to
|
||||
// deduce whether the license was ever used.
|
||||
if (kInactive == pst_report.status() &&
|
||||
(0 > pst_report.seconds_since_first_decrypt() ||
|
||||
pst_report.seconds_since_license_received() <
|
||||
pst_report.seconds_since_first_decrypt())) {
|
||||
*usage_duration_status = kUsageDurationPlaybackNotBegun;
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
*usage_duration_status = kUsageDurationsValid;
|
||||
*seconds_since_started = ntohll64(pst_report.seconds_since_first_decrypt);
|
||||
*seconds_since_last_played = ntohll64(pst_report.seconds_since_last_decrypt);
|
||||
*seconds_since_started = pst_report.seconds_since_first_decrypt();
|
||||
*seconds_since_last_played = pst_report.seconds_since_last_decrypt();
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
@@ -1033,7 +1041,7 @@ CdmResponseType CryptoSession::DeleteMultipleUsageInformation(
|
||||
|
||||
CdmResponseType CryptoSession::DeleteAllUsageReports() {
|
||||
LOGV("DeleteAllUsageReports");
|
||||
OEMCryptoResult status = OEMCrypto_DeleteUsageTable();
|
||||
OEMCryptoResult status = OEMCrypto_DeleteOldUsageTable();
|
||||
|
||||
if (OEMCrypto_SUCCESS != status) {
|
||||
LOGE("CryptoSession::DeleteAllUsageReports: Delete Usage Table error =%ld",
|
||||
|
||||
Reference in New Issue
Block a user