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:
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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()))
|
||||
|
||||
Reference in New Issue
Block a user