diff --git a/libwvdrmengine/cdm/core/include/device_files.h b/libwvdrmengine/cdm/core/include/device_files.h index 69fa256c..c5a9e522 100644 --- a/libwvdrmengine/cdm/core/include/device_files.h +++ b/libwvdrmengine/cdm/core/include/device_files.h @@ -95,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 { diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 4fa9f897..0277cda1 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -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) { diff --git a/libwvdrmengine/cdm/core/src/device_files.cpp b/libwvdrmengine/cdm/core/src/device_files.cpp index 3eec5550..e4636400 100644 --- a/libwvdrmengine/cdm/core/src/device_files.cpp +++ b/libwvdrmengine/cdm/core/src/device_files.cpp @@ -86,11 +86,13 @@ 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; @@ -124,6 +126,22 @@ bool ExtractFromDeviceCertificate(const DeviceCertificate& device_certificate, 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()); @@ -504,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); @@ -587,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) { diff --git a/libwvdrmengine/cdm/core/test/device_files_unittest.cpp b/libwvdrmengine/cdm/core/test/device_files_unittest.cpp index a8070f3b..b06f7019 100644 --- a/libwvdrmengine/cdm/core/test/device_files_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/device_files_unittest.cpp @@ -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 {}; + public ::testing::WithParamInterface {}; 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 {}; + public ::testing::WithParamInterface {}; 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::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)); diff --git a/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp b/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp index c86dbdd2..7d026ee7 100644 --- a/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp @@ -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(3) /* Mismatch */}; + static_cast(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(2) /* Mismatch */}; + static_cast(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(3)}; + static_cast(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(4)}; + static_cast(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(3)}; + static_cast(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(4)}; + static_cast(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(3)}; + static_cast(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(1)}; + static_cast(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(1)}; + static_cast(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(1)}; + static_cast(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(1)}; + static_cast(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(1)}; + static_cast(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(1)}; + static_cast(1), + kDrmCertificate, + kCryptoWrappedKey}; EXPECT_CALL(*device_files_, RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id, NotNull(), NotNull()))