Merge changes Ic0de6328,Ic263f3df into sc-dev

* changes:
  Add certificate information to offline licenses
  Add comments to clarify client and service clock times
This commit is contained in:
Rahul Frias
2021-03-22 20:23:52 +00:00
committed by Android (Google) Code Review
6 changed files with 452 additions and 115 deletions

View File

@@ -23,8 +23,6 @@ namespace wvcdm {
class FileSystem;
using video_widevine_client::sdk::DeviceCertificate;
class DeviceFiles {
public:
typedef enum {
@@ -97,6 +95,8 @@ class DeviceFiles {
// Usage entry and index.
CdmUsageEntry usage_entry;
uint32_t usage_entry_number;
std::string drm_certificate;
CryptoWrappedKey wrapped_private_key;
};
struct CdmUsageData {
@@ -282,12 +282,6 @@ class DeviceFiles {
std::string* serial_number,
uint32_t* system_id);
bool HasCertificate(CertificateType certificate_type);
bool SetDeviceCertificate(const std::string& certificate,
const CryptoWrappedKey& wrapped_private_key,
DeviceCertificate* mutable_device_certificate);
bool ExtractFromDeviceCertificate(const DeviceCertificate& device_certificate,
std::string* certificate,
CryptoWrappedKey* wrapped_private_key);
// Helpers that wrap the File interface and automatically handle hashing, as
// well as adding the device files base path to to the file name.

View File

@@ -1042,6 +1042,7 @@ CdmResponseType CdmSession::StoreLicense() {
bool CdmSession::StoreLicense(DeviceFiles::LicenseState state,
int* error_detail) {
DeviceFiles::ResponseType error_detail_alt = DeviceFiles::kNoError;
std::string drm_certificate;
DeviceFiles::CdmLicenseData license_data{
key_set_id_,
state,
@@ -1056,7 +1057,9 @@ bool CdmSession::StoreLicense(DeviceFiles::LicenseState state,
policy_engine_->GetGracePeriodEndTime(),
app_parameters_,
usage_entry_,
usage_entry_number_};
usage_entry_number_,
drm_certificate,
CryptoWrappedKey()};
bool result = file_handle_->StoreLicense(license_data, &error_detail_alt);
if (error_detail != nullptr) {

View File

@@ -15,8 +15,6 @@
#include "string_conversions.h"
#include "wv_cdm_constants.h"
#include "clock.h"
namespace {
const std::string kEmptyString;
@@ -540,18 +538,6 @@ bool CertificateProvisioning::ExtractDeviceInfo(
? drm_certificate.expiration_time_seconds()
: INVALID_TIME;
}
/*
Clock clock;
//drm_certificate.set_expiration_time_seconds(clock.GetCurrentTime() + 10*365.25*24*60*60);
drm_certificate.set_creation_time_seconds(-5);
std::string serialized_drm_certificate;
drm_certificate.SerializeToString(&serialized_drm_certificate);
signed_drm_certificate.set_drm_certificate(serialized_drm_certificate);
std::string serialized_signed_drm_certificate;
signed_drm_certificate.SerializeToString(&serialized_signed_drm_certificate);
LOGE("serialized_signed_drm_certificate: (%zu) %s", serialized_signed_drm_certificate.size(), b2a_hex(serialized_signed_drm_certificate).c_str());
*/
return true;
}

View File

@@ -86,15 +86,89 @@ using video_widevine_client::sdk::
namespace {
const char kHlsAttributesFileNameExt[] = ".hal";
const char kUsageInfoFileNamePrefix[] = "usage";
const char kUsageInfoFileNameExt[] = ".bin";
const char kLicenseFileNameExt[] = ".lic";
const char kEmptyFileName[] = "";
const char kFalse[] = "false";
const char kHlsAttributesFileNameExt[] = ".hal";
const char kLicenseFileNameExt[] = ".lic";
const char kTrue[] = "true";
const char kUsageInfoFileNameExt[] = ".bin";
const char kUsageInfoFileNamePrefix[] = "usage";
const char kUsageTableFileName[] = "usgtable.bin";
const char kWildcard[] = "*";
constexpr int64_t kFourMonthsInSeconds = (2 * 30 + 2 * 31) * 24 * 60 * 60;
// Helper methods
bool SetDeviceCertificate(const std::string& certificate,
const wvcdm::CryptoWrappedKey& private_key,
DeviceCertificate* mutable_device_certificate) {
RETURN_FALSE_IF_NULL(mutable_device_certificate);
mutable_device_certificate->set_certificate(certificate);
mutable_device_certificate->set_wrapped_private_key(private_key.key());
switch (private_key.type()) {
case wvcdm::CryptoWrappedKey::kRsa:
mutable_device_certificate->set_key_type(DeviceCertificate::RSA);
return true;
case wvcdm::CryptoWrappedKey::kEcc:
mutable_device_certificate->set_key_type(DeviceCertificate::ECC);
return true;
case wvcdm::CryptoWrappedKey::kUninitialized: // Suppress compiler
// warnings.
default:
LOGE("Unexpected key type: %d", private_key.type());
return false;
}
}
bool ExtractFromDeviceCertificate(const DeviceCertificate& device_certificate,
std::string* certificate,
wvcdm::CryptoWrappedKey* private_key) {
RETURN_FALSE_IF_NULL(certificate);
RETURN_FALSE_IF_NULL(private_key);
bool has_certificate = device_certificate.has_certificate();
bool has_key = device_certificate.has_wrapped_private_key();
// If no certificate information, nothing to be done. DeviceCertificate
// is a legacy DRM certificate
if (!has_certificate && !has_key) return true;
// Flag if not a default certificate
if (!(has_certificate && has_key)) {
LOGE(
"Device certificate proto belongs to neither a default or legacy cert. "
"has_certificate: %s, has_key: %s",
has_certificate ? kTrue : kFalse, has_key ? kTrue : kFalse);
return false;
}
*certificate = device_certificate.certificate();
private_key->Clear();
private_key->set_key(device_certificate.wrapped_private_key());
if (device_certificate.has_key_type()) {
const DeviceCertificate::PrivateKeyType key_type =
device_certificate.key_type();
switch (key_type) {
case DeviceCertificate::RSA:
private_key->set_type(wvcdm::CryptoWrappedKey::kRsa);
break;
case DeviceCertificate::ECC:
private_key->set_type(wvcdm::CryptoWrappedKey::kEcc);
break;
default:
LOGW("Unknown DRM key type, defaulting to RSA: type = %d", key_type);
private_key->set_type(wvcdm::CryptoWrappedKey::kRsa);
break;
}
} else {
// Possible that device certificate is from V15, in this case, the
// only supported key of at that time was RSA.
LOGD("No key type info, assuming RSA");
private_key->set_type(wvcdm::CryptoWrappedKey::kRsa);
}
return true;
}
} // namespace
namespace wvcdm {
@@ -280,7 +354,8 @@ DeviceFiles::CertificateState DeviceFiles::RetrieveCertificate(
// Validation check for DRM certificate that includes an expiration
// time set by the provisioning service. Since provisioning and
// client clocks may not be in sync, verify by comparing time
// elapsed since license was acquired with expiration period.
// elapsed since the certificate was acquired with the expiration
// period specified by the service.
// First verify that all the fields are set to valid values.
// The service will validate certificate expiration so tampering of
// time values at the client is not a concern.
@@ -323,6 +398,9 @@ DeviceFiles::CertificateState DeviceFiles::RetrieveCertificate(
return kCertificateInvalid;
}
// |current_time| and |acquisition_time_seconds| are client clock
// times while |expiration_time_seconds| and |creation_time_seconds|
// are times specified by the provisioning service
if (current_time - acquisition_time_seconds >
expiration_time_seconds - creation_time_seconds) {
return kCertificateExpired;
@@ -444,6 +522,13 @@ bool DeviceFiles::StoreLicense(const CdmLicenseData& license_data,
}
license->set_usage_entry(license_data.usage_entry);
license->set_usage_entry_number(license_data.usage_entry_number);
if (license_data.drm_certificate.size() > 0) {
DeviceCertificate* device_certificate = license->mutable_drm_certificate();
if (!SetDeviceCertificate(license_data.drm_certificate,
license_data.wrapped_private_key,
device_certificate))
return false;
}
std::string serialized_file;
file.SerializeToString(&serialized_file);
@@ -527,7 +612,16 @@ bool DeviceFiles::RetrieveLicense(const std::string& key_set_id,
}
license_data->usage_entry = license.usage_entry();
license_data->usage_entry_number = license.usage_entry_number();
return true;
if (!license.has_drm_certificate()) {
license_data->drm_certificate.clear();
license_data->wrapped_private_key.Clear();
return true;
}
return ExtractFromDeviceCertificate(license.drm_certificate(),
&license_data->drm_certificate,
&license_data->wrapped_private_key);
}
bool DeviceFiles::DeleteLicense(const std::string& key_set_id) {
@@ -1265,60 +1359,6 @@ bool DeviceFiles::HasCertificate(CertificateType certificate_type) {
return FileExists(certificate_file_name);
}
bool DeviceFiles::SetDeviceCertificate(
const std::string& certificate, const CryptoWrappedKey& private_key,
DeviceCertificate* mutable_device_certificate) {
RETURN_FALSE_IF_NULL(mutable_device_certificate);
mutable_device_certificate->set_certificate(certificate);
mutable_device_certificate->set_wrapped_private_key(private_key.key());
switch (private_key.type()) {
case CryptoWrappedKey::kRsa:
mutable_device_certificate->set_key_type(DeviceCertificate::RSA);
return true;
case CryptoWrappedKey::kEcc:
mutable_device_certificate->set_key_type(DeviceCertificate::ECC);
return true;
case CryptoWrappedKey::kUninitialized: // Suppress compiler warnings.
default:
LOGE("Unexpected key type: %d", private_key.type());
return false;
}
}
bool DeviceFiles::ExtractFromDeviceCertificate(
const DeviceCertificate& device_certificate, std::string* certificate,
CryptoWrappedKey* private_key) {
RETURN_FALSE_IF_NULL(certificate);
RETURN_FALSE_IF_NULL(private_key);
*certificate = device_certificate.certificate();
private_key->Clear();
private_key->set_key(device_certificate.wrapped_private_key());
if (device_certificate.has_key_type()) {
const DeviceCertificate::PrivateKeyType key_type =
device_certificate.key_type();
switch (key_type) {
case DeviceCertificate::RSA:
private_key->set_type(CryptoWrappedKey::kRsa);
break;
case DeviceCertificate::ECC:
private_key->set_type(CryptoWrappedKey::kEcc);
break;
default:
LOGW("Unknown DRM key type, defaulting to RSA: type = %d", key_type);
private_key->set_type(CryptoWrappedKey::kRsa);
break;
}
} else {
// Possible that device certificate is from V15, in this case, the
// only supported key of at that time was RSA.
LOGD("No key type info, assuming RSA");
private_key->set_type(CryptoWrappedKey::kRsa);
}
return true;
}
DeviceFiles::ResponseType DeviceFiles::StoreFileWithHash(
const std::string& name, const std::string& serialized_file) {
std::string hash = Sha256Hash(serialized_file);

View File

@@ -26,6 +26,7 @@ namespace {
const uint32_t kCertificateLen = 700;
const uint32_t kWrappedKeyLen = 500;
constexpr size_t kZero = 0;
const std::string kEmptyString;
@@ -1559,6 +1560,9 @@ const CertificateErrorData kRetrieveLegacyCertificateErrorData[] = {
kTestLegacyCertificateFileDataInvalidClientExpiration},
};
constexpr size_t kNumberOfLegacyCertificates =
ArraySize(kRetrieveLegacyCertificateErrorData);
const CertificateErrorData kRetrieveDefaultCertificateErrorData[] = {
// Certificate expired
{DeviceFiles::kCertificateExpired, kTestDefaultCertificateFileDataExpired},
@@ -1588,6 +1592,9 @@ const CertificateErrorData kRetrieveDefaultCertificateErrorData[] = {
kTestDefaultCertificateFileDataAcquisitionTimeInTheFuture},
};
constexpr size_t kNumberOfDefaultCertificates =
ArraySize(kRetrieveDefaultCertificateErrorData);
struct LicenseInfo {
std::string key_set_id;
DeviceFiles::LicenseState license_state;
@@ -1603,6 +1610,9 @@ struct LicenseInfo {
std::string app_parameters;
std::string usage_entry;
uint32_t usage_entry_number;
std::string drm_certificate;
CryptoWrappedKey::Type key_type;
std::string private_key;
std::string file_data;
};
@@ -1704,6 +1714,7 @@ const LicenseInfo kLicenseTestData[] = {
"A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0"
"BEA6CABACA1C2C"),
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", 0,
"", CryptoWrappedKey::kUninitialized, "",
a2bs_hex(
"0AAE150802100122A7150801121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
@@ -1884,7 +1895,7 @@ const LicenseInfo kLicenseTestData[] = {
a2bs_hex(
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
"22232425262728292a2b2c2d2e2f"),
5,
5, "", CryptoWrappedKey::kUninitialized, "",
a2bs_hex(
"0AF7150802100122F0150802121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
@@ -2067,7 +2078,7 @@ const LicenseInfo kLicenseTestData[] = {
a2bs_hex(
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
"22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"),
12,
12, "", CryptoWrappedKey::kUninitialized, "",
a2bs_hex(
"0AAD160802100122A6160802121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
@@ -2153,7 +2164,244 @@ const LicenseInfo kLicenseTestData[] = {
"8006240000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E"
"1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F680"
"C12206AA0237760D1F06E5CB78F5AFC3D124BBF7C26921CB3CC2EA44766801E25D34"
"F")}}; // kLicenseTestData
"F")},
// license 3
{"ksidF991C5F45E98CB97", DeviceFiles::kLicenseStateActive,
a2bs_hex("0801121030313233343536373839414243444546"),
a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B"
"FA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBC"
"D8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289"
"F459B491C814B5AD1F747610E990A60248A7DA5152F1CCFC047EF4230013"
"1F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F5800EF188386B9"
"4825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCCEC"
"83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC"
"66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776"
"EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849"
"B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E1584"
"6D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF"
"88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690E7403209534180"
"3408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418BBF1D336C"
"E58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A60"
"59044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE60"
"85D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E8"
"5476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD"
"9785E9E2103240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33"
"D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700"
"DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF"
"0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D"
"C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C"
"7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69"
"1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A"
"EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE"
"CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8"
"E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B"
"506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B"
"8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8"
"14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87"
"73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7"
"E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E"
"552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D"
"AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3"
"0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE"
"26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B"
"5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8"
"B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288"
"B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E"
"ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC"
"C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61"
"6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034"
"1A200A116172636869746563747572655F6E616D65120B61726D65616269"
"2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70"
"726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E"
"666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D"
"52322F3731343239313A7573657264656275672F6465762D6B6579731A21"
"0A096465766963655F696412144C474D4332303132313030353030363339"
"32373812250A230A14080112103031323334353637383941424344454610"
"021A09393837363534333231180120002A0C333934303739343733370000"
"30151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA125A80F0141"
"65B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B72C"
"A6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF680"
"64B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB2"
"2CD2B63131908DE4D88795BB931CEA38452CC568BE25032245E372F07A12"
"97F51748C7EA02F2C88360AFE7ABBC71DCDD5366126258E5AFA27C2A20B3"
"39FA1E7AE925B494B361F6F7116F20BE8EE6E446146027F4FD4300F4A0B0"
"A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8D2B8FA38732A57697"
"55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF"
"C316C180717C182A971C94E4AC4C7DF8F161CB8CC1"),
a2bs_hex("080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002"
"342E7769646576696E652E6E65742F7769646576696E652F6367692D6269"
"6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A"
"5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5"
"D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327"
"E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132"
"3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C"
"7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE"
"172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB"
"B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D"
"A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1"
"ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501"
"DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0"
"85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81"
"9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE"
"16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13"
"29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48"
"6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8"
"F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47"
"2800124108011801301E4239687474703A2F2F6B69723033666370673137"
"97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"),
a2bs_hex("08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E"
"4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27112002"
"280018022A0C31353532333030360000000030151A20C30375683C"),
a2bs_hex("0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228"
"A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0"
"0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF"
"BEA6CABACA1C2C"),
"https://test.google.com/license/GetCencLicense", 0x1234, 0x1324, 0x10,
"Name3 Value3",
a2bs_hex("08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E"),
5, kTestCertificateWithFutureExpiration, CryptoWrappedKey::kRsa,
kTestWrappedPrivateKeyData,
a2bs_hex(
"0AEE240802100122E7240801121408011210303132333435363738394142434445461"
"AFF0D080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BFA0E"
"5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA"
"18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F7476"
"10E990A60248A7DA5152F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD"
"2EE43D721D6DB9F5800EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0"
"F540207725B9890FCCEC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E88"
"82969B433EC66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE32703239417"
"76EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849B60FF93"
"E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239B"
"D8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1"
"BC0F4B8F0FCAF293E8690E74032095341803408A0E8279E545945EE97838FDE7812F7"
"171C3CC4F5ECF9418BBF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569"
"E13E7719014030A6059044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B5557569"
"0E95CE6085D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85"
"476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E210"
"3240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88"
"D05228E023082010A0282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3"
"048125049F74E30E1257FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBF"
"B360941A4396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D"
"A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27"
"B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04"
"A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65"
"A36FD005CE77CD407E925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C49"
"06405F47C31F60F0AF6C78AF53291B236E692B506A2AF92AF43E3A810203010001288"
"00130011280033A08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2"
"B36259834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3"
"956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1"
"F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E552C869"
"3878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908A"
"DE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E933"
"6DCFAFDF572BB22A84A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7F"
"E6F79A9501D1C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82"
"808025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD"
"1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EE"
"D4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397"
"C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E616D6512034C47451A150"
"A0A6D6F64656C5F6E616D6512074E6578757320341A200A1161726368697465637475"
"72655F6E616D65120B61726D656162692D7637611A130A0B6465766963655F6E616D6"
"512046D616B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62"
"75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A4"
"25F4D52322F3731343239313A7573657264656275672F6465762D6B6579731A210A09"
"6465766963655F696412144C474D433230313231303035303036333932373812250A2"
"30A14080112103031323334353637383941424344454610021A093938373635343332"
"31180120002A0C33393430373934373337000030151A8002734FBDED946EB74A1B618"
"11C4C4A491214F6BEA125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5E"
"ED4B702BEE328E38B72CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7"
"D584C5BF68064B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DA"
"B22CD2B63131908DE4D88795BB931CEA38452CC568BE25032245E372F07A1297F5174"
"8C7EA02F2C88360AFE7ABBC71DCDD5366126258E5AFA27C2A20B339FA1E7AE925B494"
"B361F6F7116F20BE8EE6E446146027F4FD4300F4A0B0A3361EE34925F338D0AACF20A"
"E919B4BAE81C1D57A8D2B8FA38732A5769755FB685FDB3025574517CCCC74EE4FEAF6"
"629D5179A52FF85CE7409528EFC316C180717C182A971C94E4AC4C7DF8F161CB8CC12"
"2F604080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002342E"
"7769646576696E652E6E65742F7769646576696E652F6367692D62696E2F64726D2E6"
"367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A5057FF9D9DBD5A205B1DEB"
"075E4A90467C1E074CDE6071BFF831AD590BD5D117614F33CE2C3CE1824FC0D54B36E"
"CEAE58DF5C8F9347C2FEED17A3327E8F52B8ECA6313A1FA6A042EB9525DD328113C05"
"F920011A7E0A103031323334353637383941424344454612106D23622142B58F6D1ED"
"D33AF3ECD2C7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5"
"EE172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBBB9C3E1C"
"D6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4DA020DBDFA68F051A"
"20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1ABAA6CC59C3322F61C458D228"
"002331F2BE95B5C796E0921CC27A7295501DA10044E5CA36C0E2866FF068EA3515A67"
"86BD5D60D74D80C6BA8BE6AAD085AF967909A143171E9CDDE36EA528402867CD04FB6"
"F97A150CDE55F9B819F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66"
"C45EEBBE16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E132"
"9A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D486294860DFB"
"4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8F156E84877DDA781AAA"
"AFC797FF75AFE2019ADC3A2E419BF0253C705BD472800124108011801301E42396874"
"74703A2F2F6B6972303366637067313797A96866AC4C059AD8F2E9C6B617C60C6ADCD"
"B894C25F0C7D29252F52FD52A5708011231121D1A1B0A190A09393837363534333231"
"12084B9F26DAB8B06E4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768"
"A27112002280018022A0C31353532333030360000000030151A20C30375683C326108"
"02123B0A190A0939383736353433323112084B9F26DAB8B06E11200228A68F051A201"
"82F029E35047A3841FA176C74E5B387350E8D58DEA6878FF00112001A16200342120A"
"106B63746C0000000000ECDCBE0000000020DBDFBEA6CABACA1C2C3A2E68747470733"
"A2F2F746573742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C"
"6963656E736540B42448A426520F0A054E616D6533120656616C7565335810621E080"
"11231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E680572AA0F0A"
"AE0B0AF103080212107CB49F987A635E1E0A52184694582D6E1887C6E1FE05228E023"
"082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24"
"448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6C"
"F544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F3658"
"3C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB"
"1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C"
"11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828E"
"B598DA59060D654851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F8"
"88AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C776"
"9646576696E652E636F6D480152AA01080110001A8101044F554B9400E10B17185036"
"B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B10106CB6C2187F3"
"4188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B991B5F915F2A"
"DCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D17406B10"
"889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408"
"A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF88C81A2"
"A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD1"
"6E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18C"
"ED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA6601789"
"8DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552"
"FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29"
"209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55"
"C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47"
"95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD0052"
"28E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F0451"
"6A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA"
"33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D7055"
"20A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3"
"EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6"
"890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD7"
"93296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4"
"BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1"
"280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C"
"0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2"
"662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC"
"3E968B6821A91C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF2"
"21963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D"
"4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F8"
"8EDD19DF346A667B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2A"
"FD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF"
"3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B69"
"8F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2"
"AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98"
"383E3CD2ED483012F403B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C1"
"4DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D45166"
"35C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172BC691530703FEDDFDB25"
"ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29A"
"CE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC"
"0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EBE748"
"4FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1"
"D4835AC44E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964"
"C9D985AFD3677F0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C6385"
"35FA3F215F750F6954AC395F8702941409E7276910CE11819649641318B5BD1B78DEC"
"EADB2B562312CC286DB0BCC14A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A9"
"5422ED8EB5ECE330C9886406B3B69180B697521F3865B4A05DF2BB51D16CAFEF05866"
"E5D55C360C759F5B10E0D354D63D5A14E5BA19DBF9394E18E474E79063B4E877C2FE6"
"BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC2A81B5359771849E7B4560EB6D"
"329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4081ACA67FD1800122056D505D"
"E2B3989161D0CF88CFFDA6D2E79DA49C87CF1917A3A20109D2F3676EE")},
}; // kLicenseTestData
constexpr size_t kNumberOfLicenses = ArraySize(kLicenseTestData);
@@ -2258,7 +2506,7 @@ const LicenseInfo kLicenseUpdateTestData[] = {
a2bs_hex(
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
"22232425262728292a2b2c2d2e2f"),
15,
15, "", CryptoWrappedKey::kUninitialized, "",
a2bs_hex(
"0AEE150802100122E7150801121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
@@ -2346,7 +2594,7 @@ const LicenseInfo kLicenseUpdateTestData[] = {
// license being released. all fields are identical except for license
// state and hashed file data
{"", DeviceFiles::kLicenseStateReleasing, "", "", "", "", "", "", 0, 0, 0,
"", "", 15,
"", "", 15, "", CryptoWrappedKey::kUninitialized, "",
a2bs_hex(
"0AEE150802100122E7150802121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
@@ -2536,6 +2784,9 @@ const LicenseInfo kLicenseAppParametersBackwardsCompatibilityTestData = {
"",
"",
0,
"",
CryptoWrappedKey::kUninitialized,
"",
a2bs_hex(
"0AA8150802100122A1150801121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
@@ -3537,8 +3788,8 @@ class DeviceFilesTest : public ::testing::Test {
if (name_end_pos == std::string::npos) return app_parameters;
if (name_end_pos + 1 >= len) return app_parameters;
size_t value_end_pos = str.find(' ', name_end_pos + 1);
app_parameters[str.substr(start_pos, name_end_pos)] =
str.substr(name_end_pos + 1, value_end_pos);
app_parameters[str.substr(start_pos, name_end_pos - start_pos)] =
str.substr(name_end_pos + 1, value_end_pos - name_end_pos - 1);
if (value_end_pos == std::string::npos || value_end_pos + 1 >= len)
return app_parameters;
start_pos = value_end_pos + 1;
@@ -3839,10 +4090,10 @@ TEST_F(DeviceFilesTest, RetrieveLegacyCertificateWithClientExpirationTime) {
class RetrieveLegacyCertificateTest
: public DeviceFilesTest,
public ::testing::WithParamInterface<int> {};
public ::testing::WithParamInterface<size_t> {};
TEST_P(RetrieveLegacyCertificateTest, ErrorScenarios) {
const int index = GetParam();
const size_t index = GetParam();
MockFileSystem file_system;
std::string certificate_file_name;
EXPECT_TRUE(DeviceFiles::GetCertificateFileName(
@@ -3895,7 +4146,7 @@ TEST_P(RetrieveLegacyCertificateTest, ErrorScenarios) {
}
INSTANTIATE_TEST_CASE_P(CertificateTest, RetrieveLegacyCertificateTest,
::testing::Range(0, 2));
::testing::Range(kZero, kNumberOfLegacyCertificates));
TEST_F(DeviceFilesTest, RetrieveDefaultCertificate) {
MockFileSystem file_system;
@@ -3979,10 +4230,10 @@ TEST_F(DeviceFilesTest, RetrieveDefaultCertificateNeverExpires) {
class RetrieveDefaultCertificateTest
: public DeviceFilesTest,
public ::testing::WithParamInterface<int> {};
public ::testing::WithParamInterface<size_t> {};
TEST_P(RetrieveDefaultCertificateTest, ErrorScenarios) {
const int index = GetParam();
const size_t index = GetParam();
MockFileSystem file_system;
std::string certificate_file_name;
EXPECT_TRUE(DeviceFiles::GetCertificateFileName(
@@ -4027,7 +4278,7 @@ TEST_P(RetrieveDefaultCertificateTest, ErrorScenarios) {
}
INSTANTIATE_TEST_CASE_P(CertificateTest, RetrieveDefaultCertificateTest,
::testing::Range(0, 9));
::testing::Range(kZero, kNumberOfDefaultCertificates));
TEST_F(DeviceFilesTest, RetrieveCertificateWithoutKeyType) {
// Stored files without an explicit key type should default to RSA.
@@ -4242,6 +4493,7 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) {
DeviceFiles::ResponseType sub_error_code;
DeviceFiles device_files(&file_system);
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
CryptoWrappedKey wrapped_private_key;
DeviceFiles::CdmLicenseData license_data{
kLicenseTestData[license_num].key_set_id,
kLicenseTestData[license_num].license_state,
@@ -4256,7 +4508,10 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) {
kLicenseTestData[license_num].grace_period_end_time,
app_parameters,
kLicenseTestData[license_num].usage_entry,
kLicenseTestData[license_num].usage_entry_number};
kLicenseTestData[license_num].usage_entry_number,
kLicenseTestData[license_num].drm_certificate,
CryptoWrappedKey(kLicenseTestData[license_num].key_type,
kLicenseTestData[license_num].private_key)};
EXPECT_TRUE(device_files.StoreLicense(license_data, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
@@ -4282,6 +4537,8 @@ TEST_F(DeviceFilesTest, StoreLicenses) {
kLicenseTestData[i].key_renewal_response,
kLicenseTestData[i].key_release_url,
kLicenseTestData[i].usage_entry,
kLicenseTestData[i].drm_certificate,
kLicenseTestData[i].private_key,
};
for (const auto& iter : app_parameters) {
expected_substrings.push_back(iter.first);
@@ -4320,7 +4577,10 @@ TEST_F(DeviceFilesTest, StoreLicenses) {
kLicenseTestData[i].grace_period_end_time,
app_parameters,
kLicenseTestData[i].usage_entry,
kLicenseTestData[i].usage_entry_number};
kLicenseTestData[i].usage_entry_number,
kLicenseTestData[i].drm_certificate,
CryptoWrappedKey(kLicenseTestData[i].key_type,
kLicenseTestData[i].private_key)};
EXPECT_TRUE(device_files.StoreLicense(license_data, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
@@ -4379,6 +4639,12 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
EXPECT_EQ(kLicenseTestData[i].usage_entry, license_data.usage_entry);
EXPECT_EQ(kLicenseTestData[i].usage_entry_number,
license_data.usage_entry_number);
EXPECT_EQ(kLicenseTestData[i].drm_certificate,
license_data.drm_certificate);
EXPECT_EQ(kLicenseTestData[i].key_type,
license_data.wrapped_private_key.type());
EXPECT_EQ(kLicenseTestData[i].private_key,
license_data.wrapped_private_key.key());
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
std::map<std::string, std::string>::iterator itr;
@@ -4389,6 +4655,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
EXPECT_NE(std::string::npos,
kLicenseTestData[i].app_parameters.find(itr->second));
}
license_data.app_parameters.clear();
}
}
@@ -4437,6 +4704,9 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) {
EXPECT_EQ(0u, license_data.app_parameters.size());
EXPECT_EQ(test_data->usage_entry, license_data.usage_entry);
EXPECT_EQ(test_data->usage_entry_number, license_data.usage_entry_number);
EXPECT_EQ(test_data->drm_certificate, license_data.drm_certificate);
EXPECT_EQ(test_data->key_type, license_data.wrapped_private_key.type());
EXPECT_EQ(test_data->private_key, license_data.wrapped_private_key.key());
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
@@ -4472,7 +4742,10 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) {
kLicenseUpdateTestData[0].grace_period_end_time,
GetAppParameters(kLicenseTestData[0].app_parameters),
kLicenseUpdateTestData[0].usage_entry,
kLicenseUpdateTestData[0].usage_entry_number};
kLicenseUpdateTestData[0].usage_entry_number,
kLicenseUpdateTestData[0].drm_certificate,
CryptoWrappedKey(kLicenseTestData[0].key_type,
kLicenseTestData[0].private_key)};
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files.StoreLicense(license_data, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
@@ -4537,6 +4810,11 @@ TEST_F(DeviceFilesTest, DeleteLicense) {
EXPECT_EQ(kLicenseTestData[0].usage_entry, license_data.usage_entry);
EXPECT_EQ(kLicenseTestData[0].usage_entry_number,
license_data.usage_entry_number);
EXPECT_EQ(kLicenseTestData[0].drm_certificate, license_data.drm_certificate);
EXPECT_EQ(kLicenseTestData[0].key_type,
license_data.wrapped_private_key.type());
EXPECT_EQ(kLicenseTestData[0].private_key,
license_data.wrapped_private_key.key());
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_TRUE(device_files.DeleteLicense(kLicenseTestData[0].key_set_id));

View File

@@ -68,6 +68,10 @@ const CdmUsageEntry kAnotherUsageEntry = "another usage entry";
const CdmUsageEntry kYetAnotherUsageEntry = "yet another usage entry";
const CdmUsageEntry kAndAnotherUsageEntry = "and another usage entry";
const CdmUsageEntry kOneMoreUsageEntry = "one more usage entry";
const std::string kDrmCertificate = "a drm certificate";
const std::string kWrappedPrivateKey = "a wrapped private key";
const CryptoWrappedKey kCryptoWrappedKey(CryptoWrappedKey::kRsa,
kWrappedPrivateKey);
const CdmUsageEntryInfo kUsageEntryInfoOfflineLicense1 = {
/* storage_type = */ kStorageLicense,
/* key_set_id = */ "offline_key_set_1",
@@ -1523,7 +1527,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(3) /* Mismatch */};
static_cast<uint32_t>(3) /* Mismatch */,
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense3.key_set_id,
NotNull(), NotNull()))
@@ -1543,7 +1549,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(2) /* Mismatch */};
static_cast<uint32_t>(2) /* Mismatch */,
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense2.key_set_id,
NotNull(), NotNull()))
@@ -1704,7 +1712,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntriesAreStorageTypeUnknown) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(3)};
static_cast<uint32_t>(3),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense2.key_set_id,
NotNull(), NotNull()))
@@ -1800,7 +1810,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
/* usage_entry_number = */ 4};
/* usage_entry_number = */ 4,
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense3.key_set_id,
NotNull(), NotNull()))
@@ -1970,7 +1982,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
4};
4,
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense3.key_set_id,
NotNull(), NotNull()))
@@ -1994,7 +2008,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
3};
3,
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense2.key_set_id,
NotNull(), NotNull()))
@@ -2179,7 +2195,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(4)};
static_cast<uint32_t>(4),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense3.key_set_id,
NotNull(), NotNull()))
@@ -2205,7 +2223,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(3)};
static_cast<uint32_t>(3),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense2.key_set_id,
NotNull(), NotNull()))
@@ -2421,7 +2441,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(4)};
static_cast<uint32_t>(4),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense3.key_set_id,
NotNull(), NotNull()))
@@ -2447,7 +2469,9 @@ TEST_F(UsageTableHeaderTest,
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(3)};
static_cast<uint32_t>(3),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense2.key_set_id,
NotNull(), NotNull()))
@@ -2714,7 +2738,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_MaxSessionReached) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(1)};
static_cast<uint32_t>(1),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id,
NotNull(), NotNull()))
@@ -2791,7 +2817,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_FirstEntry_MaxSessionReached) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(1)};
static_cast<uint32_t>(1),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id,
NotNull(), NotNull()))
@@ -2866,7 +2894,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SystemInvalidation_OnMove) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(1)};
static_cast<uint32_t>(1),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id,
NotNull(), NotNull()))
@@ -2945,7 +2975,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SessionInvalidation_OnMove) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(1)};
static_cast<uint32_t>(1),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id,
NotNull(), NotNull()))
@@ -3020,7 +3052,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_ShrinkFails) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(1)};
static_cast<uint32_t>(1),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id,
NotNull(), NotNull()))
@@ -3106,7 +3140,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_DestinationInUse_OnMove) {
kGracePeriodEndTime,
kEmptyAppParameters,
kUsageEntry,
static_cast<uint32_t>(1)};
static_cast<uint32_t>(1),
kDrmCertificate,
kCryptoWrappedKey};
EXPECT_CALL(*device_files_,
RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id,
NotNull(), NotNull()))