Add basic handling for entitlement keys in a license.
Merge from Widevine repo of http://go/wvgerrit/41834 Key rotation is not yet supported. The key statuses are updated from a license. The mechanism expects content keys tro come in a license. For entitlement licenses, the content keys come in the init_data. This code does not yet support the key rotation event. (A new pssh with wrapped keys is a passed to the cdm) The policy engine/key status mechanism needs to be updated to handle updated from the init_data. For now, the cdm builds a license with a key container with the content keys and used that to call PolicyEngine::SetLicense to setup the policy engine and key statuses. Bug: 64003606 Bug: 70334840 Test: In child CL Change-Id: Ibf46a18f5321cab4ff6f1778ba30527942c8021f
This commit is contained in:
committed by
Rahul Frias
parent
8251aab9f6
commit
9ae7489938
@@ -67,7 +67,7 @@ InitializationData::InitializationData(const std::string& type,
|
||||
|
||||
// Parse the pssh data and return the embedded key data if it exists.
|
||||
std::vector<video_widevine::SubLicense>
|
||||
InitializationData::ExtractEmbeddedKeys() const {
|
||||
InitializationData::ExtractSublicenseKeys() const {
|
||||
std::vector<video_widevine::SubLicense> keys;
|
||||
WidevinePsshData cenc_header;
|
||||
if (!is_cenc_ || !cenc_header.ParseFromString(data_) ||
|
||||
@@ -81,6 +81,20 @@ InitializationData::ExtractEmbeddedKeys() const {
|
||||
return keys;
|
||||
}
|
||||
|
||||
std::vector<video_widevine::WrappedKey> InitializationData::ExtractWrappedKeys()
|
||||
const {
|
||||
std::vector<video_widevine::WrappedKey> keys;
|
||||
WidevinePsshData cenc_header;
|
||||
if (!is_cenc_ || !cenc_header.ParseFromString(data_) ||
|
||||
cenc_header.entitled_keys().size() == 0)
|
||||
return keys;
|
||||
keys.reserve(cenc_header.entitled_keys().size());
|
||||
for (int i = 0; i < cenc_header.entitled_keys().size(); ++i) {
|
||||
keys.push_back(cenc_header.entitled_keys(i));
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
// Parse a blob of multiple concatenated PSSH atoms to extract the first
|
||||
// Widevine PSSH.
|
||||
bool InitializationData::ExtractWidevinePssh(const CdmInitData& init_data,
|
||||
@@ -483,7 +497,7 @@ bool InitializationData::ConstructWidevineInitData(
|
||||
// have not yet been pushed to production. Set until then.
|
||||
cenc_header.set_algorithm(WidevinePsshData_Algorithm_AESCTR);
|
||||
for (size_t i = 0; i < key_ids.size(); ++i) {
|
||||
cenc_header.add_key_id(key_ids[i]);
|
||||
cenc_header.add_key_ids(key_ids[i]);
|
||||
}
|
||||
cenc_header.set_provider(provider);
|
||||
cenc_header.set_content_id(content_id);
|
||||
@@ -589,19 +603,4 @@ std::vector<std::string> InitializationData::ExtractKeyFormatVersions(
|
||||
return versions;
|
||||
}
|
||||
|
||||
// Extract the key id of the group master key used to generate sublicense data.
|
||||
// Returns an empty string if not defined.
|
||||
const std::string InitializationData::ExtractGroupMasterKeyId() const {
|
||||
if (!is_cenc_) {
|
||||
return "";
|
||||
}
|
||||
|
||||
WidevinePsshData cenc_header;
|
||||
if (!cenc_header.ParseFromString(data_)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return cenc_header.group_master_key_id();
|
||||
}
|
||||
|
||||
} // namespace wvcdm
|
||||
|
||||
Reference in New Issue
Block a user