Save and retrieve key information from licenses and usage records
[ Merge of http://go/wvgerrit/120512 ] Wrapped DRM private keys are loaded when a key request is made or when offline/usage sessions are restored. They were earlier loaded when a session was opened. For streaming sessions, key material will be fetched from the default or legacy certificates and loaded when a key request is made. For offline and usage sessions, key material may be retrieved from license or usage records if available. If not available, information associated with the legacy certificate will be loaded. Certificate and wrapped keys are also written out when an offline license or usage record is saved. Bug: 169740403 Test: WV unit/integration tests WvCdmRequestLicenseTest.ProvisioningWithExpiringCertTest WvCdmRequestLicenseTest.StreamingWithExpiringCertTest WvCdmRequestLicenseTest.RestoreOfflineKeysWithExpiringCertTest Change-Id: Ice0154c632170c46da171cbbb23a97380c610a98
This commit is contained in:
@@ -200,9 +200,7 @@ CdmLicense::CdmLicense(const CdmSessionId& session_id, Clock* clock)
|
||||
|
||||
CdmLicense::~CdmLicense() {}
|
||||
|
||||
bool CdmLicense::Init(const std::string& client_token,
|
||||
CdmClientTokenType client_token_type,
|
||||
bool use_privacy_mode,
|
||||
bool CdmLicense::Init(bool use_privacy_mode,
|
||||
const std::string& signed_service_certificate,
|
||||
CryptoSession* session, PolicyEngine* policy_engine) {
|
||||
if (!clock_) {
|
||||
@@ -213,10 +211,6 @@ bool CdmLicense::Init(const std::string& client_token,
|
||||
LOGE("Session ID not provided");
|
||||
return false;
|
||||
}
|
||||
if (client_token.size() == 0) {
|
||||
LOGE("Client token not provided");
|
||||
return false;
|
||||
}
|
||||
if (session == nullptr || !session->IsOpen()) {
|
||||
LOGE("Crypto session not provided or not open");
|
||||
return false;
|
||||
@@ -231,8 +225,6 @@ bool CdmLicense::Init(const std::string& client_token,
|
||||
return false;
|
||||
}
|
||||
|
||||
client_token_ = client_token;
|
||||
client_token_type_ = client_token_type;
|
||||
crypto_session_ = session;
|
||||
policy_engine_ = policy_engine;
|
||||
use_privacy_mode_ = use_privacy_mode;
|
||||
@@ -247,18 +239,19 @@ CdmResponseType CdmLicense::SetServiceCertificate(
|
||||
}
|
||||
|
||||
CdmResponseType CdmLicense::PrepareKeyRequest(
|
||||
const InitializationData& init_data, CdmLicenseType license_type,
|
||||
const CdmAppParameterMap& app_parameters, CdmKeyMessage* signed_request,
|
||||
std::string* server_url) {
|
||||
const InitializationData& init_data, const std::string& client_token,
|
||||
CdmLicenseType license_type, const CdmAppParameterMap& app_parameters,
|
||||
CdmKeyMessage* signed_request, std::string* server_url) {
|
||||
if (!initialized_) {
|
||||
LOGE("CdmLicense not initialized");
|
||||
return LICENSE_PARSER_NOT_INITIALIZED_4;
|
||||
}
|
||||
client_token_ = client_token;
|
||||
if (init_data.IsEmpty() && stored_init_data_) {
|
||||
InitializationData restored_init_data = *stored_init_data_;
|
||||
stored_init_data_.reset();
|
||||
return PrepareKeyRequest(restored_init_data, license_type, app_parameters,
|
||||
signed_request, server_url);
|
||||
return PrepareKeyRequest(restored_init_data, client_token, license_type,
|
||||
app_parameters, signed_request, server_url);
|
||||
}
|
||||
wrapped_keys_ = init_data.ExtractWrappedKeys();
|
||||
if (!init_data.is_supported()) {
|
||||
@@ -793,7 +786,7 @@ CdmResponseType CdmLicense::HandleEmbeddedKeyData(
|
||||
}
|
||||
|
||||
CdmResponseType CdmLicense::RestoreOfflineLicense(
|
||||
const CdmKeyMessage& license_request,
|
||||
const std::string& client_token, const CdmKeyMessage& license_request,
|
||||
const CdmKeyResponse& license_response,
|
||||
const CdmKeyResponse& license_renewal_response, int64_t playback_start_time,
|
||||
int64_t last_playback_time, int64_t grace_period_end_time,
|
||||
@@ -808,6 +801,8 @@ CdmResponseType CdmLicense::RestoreOfflineLicense(
|
||||
return EMPTY_LICENSE_RESPONSE_3;
|
||||
}
|
||||
|
||||
client_token_ = client_token;
|
||||
|
||||
SignedMessage signed_request;
|
||||
if (!signed_request.ParseFromString(license_request)) {
|
||||
LOGE("Failed to parse license request");
|
||||
@@ -889,7 +884,7 @@ CdmResponseType CdmLicense::RestoreOfflineLicense(
|
||||
}
|
||||
|
||||
CdmResponseType CdmLicense::RestoreLicenseForRelease(
|
||||
const CdmKeyMessage& license_request,
|
||||
const std::string& client_token, const CdmKeyMessage& license_request,
|
||||
const CdmKeyResponse& license_response) {
|
||||
if (license_request.empty()) {
|
||||
LOGE("License request is empty");
|
||||
@@ -901,6 +896,8 @@ CdmResponseType CdmLicense::RestoreLicenseForRelease(
|
||||
return EMPTY_LICENSE_RESPONSE_4;
|
||||
}
|
||||
|
||||
client_token_ = client_token;
|
||||
|
||||
SignedMessage signed_request;
|
||||
if (!signed_request.ParseFromString(license_request)) {
|
||||
LOGE("Failed to parse signed license request");
|
||||
@@ -1046,6 +1043,11 @@ CdmResponseType CdmLicense::PrepareClientId(
|
||||
const CdmAppParameterMap& app_parameters,
|
||||
const std::string& provider_client_token, LicenseRequest* license_request) {
|
||||
wvcdm::ClientIdentification id;
|
||||
if (client_token_.empty()) {
|
||||
LOGE("Client token not set when preparing client ID");
|
||||
return CLIENT_TOKEN_NOT_SET;
|
||||
}
|
||||
|
||||
CdmResponseType status = id.Init(client_token_, crypto_session_);
|
||||
if (status != NO_ERROR) return status;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user