// Copyright 2013 Google Inc. All Rights Reserved. #include "device_files.h" #include "file_store.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "properties.h" #include "string_conversions.h" #include "wv_cdm_types.h" namespace wvcdm { // gmock methods using ::testing::_; using ::testing::AllOf; using ::testing::Eq; using ::testing::Gt; using ::testing::HasSubstr; using ::testing::NotNull; using ::testing::Return; using ::testing::ReturnArg; using ::testing::SetArgPointee; using ::testing::SetArrayArgument; using ::testing::StrEq; namespace { const uint32_t kCertificateLen = 700; const uint32_t kWrappedKeyLen = 500; const uint32_t kProtobufEstimatedLen = 75; // Structurally valid test certificate. // The data elements in this module are used to test the storage and // retrieval of certificates and licenses const std::string kTestCertificate = "124B035F3D256A656F0E505A085E7A6C482B61035E0C4A540F7803137F4C3B45206B7F33" "347F4D7A005E56400F0955011F4E07072D0D46781817460974326A516E3944385760280E" "4F166B380F033D045231201E6146041C3A6F01345C59300D32592732192C0F2310586306" "7B31467B1477010D6F1D1944272509572A26217E1E6F7B666F46153E7749106E48760468" "19467E164A731773155B3236537D5128682014174D125063380E48356A370B5015416A7F" "672F132E37364E154B41540F440E47092775531508495F1E55576F363C0C190C3A332179" "415B343905563E37645E68007053315A1A20286E7C3B4320424A5F7F36635558686C3565" "762122237D344A411C0F00342135776753461D105C21111E5024434E5E0F275D12061658" "4435410F210E5228532D214F505D0F0B3C34032C7C597F6159665E664C682C5A6C03212E" "71333C3A642D796A65642E151827086E2D671C130B172C43192C792D294440630163526D" "0658537A073E0F32231E7426593230692A4468386D3511542F1A6F71440128466E510445" "294F4465113D1B1A711D4D67691363093B680854322B041C2F72524A513E5F0E407C6233" "1728520E6C0C09107C26737B78287231661952283619647A6241391940297D2067036D44" "3C64766918236C51175A636F000A2E5A4C5B725D5500652B1C39283037723F0255092976" "6F2D204F0E616F1233206B75661B0F755E1E3807491079663A191C0B2D5E363B3768663A" "4E222A1D32015D3D783E5148313F05713B140347231C59243648313C23770F554E012715" "3350597775274A580306202E65265957291F490F642A2E7C6700716400617C7E6A303266" "523B102906195E003C2D111A7D4740122C6941003726602B59263B5C09473D4E025E3541" "701B122D340A3D145436137002687E4C470D2F6F4C357A3245384D737B734E2274301179" "402473486311156E5A0C78644C593273"; // A Wrapped Private Key // The data elements in this module are used to test the storage and // retrieval of certificates and licenses const std::string kTestWrappedPrivateKey = "4F724B065326371A2F5F6F51467C2E26555C453B5C7C1B4F2738454B782E3E7B5340435A" "66374D0612052C521A233D7A67194871751C78575E5177070130264C4F037633320E667B" "1A49192924491338693D106E6113014A733A241A1A033E28352178146B4F543D38104A59" "19120325502C31365506096D59585E08774B5B567A7B5D03451E6B11633E52672C226103" "104B3E4C031A6403050F3A574D2C501711773802741F7F3A0D364757101D02181C7D4D35" "207167506A424C094E4A72316F791F162D76657D2B5D3C2D7B273A286927717561316518" "7E55282430491467086425432347701C3116446D21645C756B2D3D0F797C3220322D622A" "254D0B7D4F1D5D0C0A36755D1246741A34783C45157247091C78232B7D2E0E1F637A2A37" "39085D76166747034350613969072F5B5C5B21657E470C7E513B3F091D74455A3A073705" "7B7E3B5337191D4E7536087C334B6028530F3F5B23380B6A076031294501003D6D1F240F" "63053D5D0B271B6A0F26185650731308660B0447566041684F584C22216E567D3B775569" "5F7F3D6B64525E7227165948101540243C19495C4C702F37490F26613353797825624143" "263043020E1E6760123D51056F2F1E482F2E3D021B27677D3E7E3C0C11757C3448275E08" "382E111263644C6D224714706D760A054A586E17505C3429575A41043F184209"; // The test certificate in file storage format. // The data elements in this module are used to test the storage and // retrieval of certificates and licenses const std::string kTestCertificateFileData = "0ABD09080110011AB6090ABC05124B035F3D256A656F0E505A085E7A6C482B61035E0C4A" "540F7803137F4C3B45206B7F33347F4D7A005E56400F0955011F4E07072D0D4678181746" "0974326A516E3944385760280E4F166B380F033D045231201E6146041C3A6F01345C5930" "0D32592732192C0F23105863067B31467B1477010D6F1D1944272509572A26217E1E6F7B" "666F46153E7749106E4876046819467E164A731773155B3236537D5128682014174D1250" "63380E48356A370B5015416A7F672F132E37364E154B41540F440E47092775531508495F" "1E55576F363C0C190C3A332179415B343905563E37645E68007053315A1A20286E7C3B43" "20424A5F7F36635558686C3565762122237D344A411C0F00342135776753461D105C2111" "1E5024434E5E0F275D120616584435410F210E5228532D214F505D0F0B3C34032C7C597F" "6159665E664C682C5A6C03212E71333C3A642D796A65642E151827086E2D671C130B172C" "43192C792D294440630163526D0658537A073E0F32231E7426593230692A4468386D3511" "542F1A6F71440128466E510445294F4465113D1B1A711D4D67691363093B680854322B04" "1C2F72524A513E5F0E407C62331728520E6C0C09107C26737B7828723166195228361964" "7A6241391940297D2067036D443C64766918236C51175A636F000A2E5A4C5B725D550065" "2B1C39283037723F02550929766F2D204F0E616F1233206B75661B0F755E1E3807491079" "663A191C0B2D5E363B3768663A4E222A1D32015D3D783E5148313F05713B140347231C59" "243648313C23770F554E0127153350597775274A580306202E65265957291F490F642A2E" "7C6700716400617C7E6A303266523B102906195E003C2D111A7D4740122C694100372660" "2B59263B5C09473D4E025E3541701B122D340A3D145436137002687E4C470D2F6F4C357A" "3245384D737B734E2274301179402473486311156E5A0C78644C59327312F4034F724B06" "5326371A2F5F6F51467C2E26555C453B5C7C1B4F2738454B782E3E7B5340435A66374D06" "12052C521A233D7A67194871751C78575E5177070130264C4F037633320E667B1A491929" "24491338693D106E6113014A733A241A1A033E28352178146B4F543D38104A5919120325" "502C31365506096D59585E08774B5B567A7B5D03451E6B11633E52672C226103104B3E4C" "031A6403050F3A574D2C501711773802741F7F3A0D364757101D02181C7D4D3520716750" "6A424C094E4A72316F791F162D76657D2B5D3C2D7B273A2869277175613165187E552824" "30491467086425432347701C3116446D21645C756B2D3D0F797C3220322D622A254D0B7D" "4F1D5D0C0A36755D1246741A34783C45157247091C78232B7D2E0E1F637A2A3739085D76" "166747034350613969072F5B5C5B21657E470C7E513B3F091D74455A3A0737057B7E3B53" "37191D4E7536087C334B6028530F3F5B23380B6A076031294501003D6D1F240F63053D5D" "0B271B6A0F26185650731308660B0447566041684F584C22216E567D3B7755695F7F3D6B" "64525E7227165948101540243C19495C4C702F37490F2661335379782562414326304302" "0E1E6760123D51056F2F1E482F2E3D021B27677D3E7E3C0C11757C3448275E08382E1112" "63644C6D224714706D760A054A586E17505C3429575A41043F1842091220F8D0A23D4B1B" "C7B23A38B921BC1EA8938D1FD22FF9A389B58DA856A3E2625F27"; struct LicenseInfo { std::string key_set_id; DeviceFiles::LicenseState license_state; std::string pssh_data; std::string key_request; std::string key_response; std::string key_renewal_request; std::string key_renewal_response; std::string key_release_url; std::string file_data; }; size_t kNumberOfLicenses = 3; // Sample license data and related data for storage and use for offline // playback. The license data and URLs in this test are not real. Test // storage and retrieval of license-related data. LicenseInfo license_test_data[] = { // license 0 {"ksid54C57C966E23CEF5", DeviceFiles::kLicenseStateActive, wvcdm::a2bs_hex("0801121030313233343536373839414243444546"), wvcdm::a2bs_hex( "080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "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" "C316C180717C182A971C94E4AC4C7DF8F161CB8CC1"), wvcdm::a2bs_hex( "080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A" "5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5" "D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327" "E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132" "3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C" "7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE" "172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB" "B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D" "A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1" "ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501" "DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0" "85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81" "9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE" "16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13" "29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48" "6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8" "F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47" "97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"), wvcdm::a2bs_hex( "08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E" "112002280018022A0C31353532333030360000000030151A20C30375683C" "4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27"), wvcdm::a2bs_hex( "0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228" "0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF" "A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0" "BEA6CABACA1C2C"), "https://test.google.com/license/GetCencLicense", wvcdm::a2bs_hex( "0AAF150802100122A8150801121408011210303132333435363738394142" "434445461A9D0E080112950C0AD70B080112EF090AB002080212103E560E" "C5335E346F591BC4D07A7D507618A5D3A68F05228E023082010A02820101" "00A947904B8DBD55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52F" "F85CE7409528EFFA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A87" "70ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3" "B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA5152F1CC" "FC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F" "5800EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F54020" "7725B9890FCCEC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07" "E8882969B433EC66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BB" "E3270323941776EE60DD6BFD660BDDCA8702030100012880013001128002" "50D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928" "835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C1" "59C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690" "E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5EC" "F9418BBF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13" "E7719014030A6059044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B5" "5575690E95CE6085D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EE" "BA8E60643C86E85476B18AEF8DE871571A75681A75F75028A5B58751C09A" "5296AAE99CEDCD9785E9E2103240D40A1AB6050AB002080112102CE5CCF4" "2200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0282010100" "BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4" "396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D" "A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10" "160672C27B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB5" "6F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D924" "9755F129BB0DBECA3B894975A65A36FD005CE77CD407E925D3172E33122A" "11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF" "53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A" "08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259" "834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A" "3C3956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A" "54123BE4B2A1F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E8" "6C6B908243987E552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7" "F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5" "DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5D" "EFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1" "C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808" "025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC" "90B1FD1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534E" "AEE4A5903E304EED4990BB5BE735DB027A6DE35329D321EC051B956C55A5" "B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D" "70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E616D651207" "4E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D61" "6B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62" "75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A34" "2E332F4A425F4D52322F3731343239313A7573657264656275672F646576" "2D6B6579731A210A096465766963655F696412144C474D43323031323130" "3035303036333932373812250A230A140801121030313233343536373839" "41424344454610021A09393837363534333231180120002A0C3339343037" "3934373337000030151A8002734FBDED946EB74A1B61811C4C4A491214F6" "BEA125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B70" "2BEE328E38B72CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675" "FF7D584C5BF68064B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6F" "EFB6D77005DAB22CD2B63131908DE4D88795BB931CEA38452CC568BE2503" "2245E372F07A1297F51748C7EA02F2C88360AFE7ABBC71DCDD5366126258" "E5AFA27C2A20B339FA1E7AE925B494B361F6F7116F20BE8EE6E446146027" "F4FD4300F4A0B0A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8D2B" "8FA38732A57697C316C180717C182A971C94E4AC4C7DF8F161CB8CC122F6" "04080212CC020A190A0939383736353433323112084B9F26DAB8B06E1120" "022800124108011801301E4239687474703A2F2F6B697230336663706731" "37342E7769646576696E652E6E65742F7769646576696E652F6367692D62" "696E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA" "1A5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590B" "D5D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A33" "27E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A103031" "323334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD" "2C7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5" "EE172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103F" "BBB9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F" "4DA020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94" "B1ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A72955" "01DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AA" "D085AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B" "819F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEB" "BE16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E" "1329A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D" "486294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4C" "E8F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD" "4797A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52F" "D52A5708011231121D1A1B0A190A0939383736353433323112084B9F26DA" "B8B06E112002280018022A0C31353532333030360000000030151A20C303" "75683C4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27" "32610802123B0A190A0939383736353433323112084B9F26DAB8B06E1120" "02280112001A16200342120A106B63746C0000000000ECDCBE0000000020" "DBDFA68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA687" "8FF0BEA6CABACA1C2C3A3968747470733A2F2F6A6D7431372E676F6F676C" "652E636F6D2F766964656F2D6465762F6C6963656E73652F47657443656E" "634C6963656E73651220F6974C1CFFD00E3144488FC092D3DF4F6007A3CA" "C4756EB046DC74B1C2E512CC")}, // license 1 {"ksidC8EAA2579A282EB0", DeviceFiles::kLicenseStateReleasing, wvcdm::a2bs_hex("0801121030313233343536373839414243444546"), wvcdm::a2bs_hex( "080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "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" "021A09393837363534333231180120002A0C383837303136333500000000" "30151A80023F7318E29C5A50C8ADAA4B09ADCD97B75588B17002C5C2BC9A" "FA35C53098AF22DF5CC300407CD2E84EBE01911C785513649E2CCF4E4290" "20D3B93F3A54748C11ECFF4D62F562A4D3E96812F663D4F761C00C3E88AB" "D8A1DC10E017A44DD3E040775FED5F07649090D1142C9D21373CD604219E" "24935E10F287F20B0E080FDF76B6096B24F82A3E37850DE229DE33EBCE7A" "0FA53F652C33007EA7027F95A44C36D04CBD676EB5C0BF69508F45E0C322" "0D1706B0B851B3FCAF7AC2370EAD80C5D1620887633A42024862FCEA9F95" "A719AAB989C1923C6452ECB0B75AF1CAFBFB06C5EC31BBF0EE4D16ACCC9A" "F05B77D61C4855491B3D4AC150F3BCB7AE536AF333"), wvcdm::a2bs_hex( "080212CC020A190A093938373635343332311208F97F2B3856CBB3DD2002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A661210C5C43FE0178AEE7B85042F749D5A40251A" "5013A1501E0F90A64E103336944A37BAAAEAC17E46E880DF6EA23A7A890D" "A082CBBF82710B8C3982E8AB25A208A89EEFB5250D4B2CCC2F362856E05D" "1941E387801A19886B1F3AAE60D06EDA400087B06920011A7E0A10303132" "333435363738394142434445461210A34D2B04D596DFE1DC29CFDF116E39" "211A2031AD1B369D225842A14B5D5F8366F5FF8EB94AA7CD13EB45BA7291" "68E19D5F5F200242340A20A0D6D65CC677C12B86A7A99F89F446BCFDA185" "44B15B2FEF8349ED5C247F7BE91210ED8D58320B0F4F948F960C7D49872C" "DE2083E5A68F051A207481A2B82C83DF3090D57EDC042711A42CF4F87E79" "CE136DAFE25F48F4A9068322800256113CA771F4250CAD2928161D07B525" "61019003DBFBD362F20587D51BD999D57D2B035BC115C54C8B4BC37661A6" "6A101DE5B42D82E582309AFD8E211C947A2D33CAFB58F89EEE2DA9524614" "0311134429D8A5D15E03A169B0EB2579DA3BD6E4322D6C46EE964F6931CF" "9DA52FB59B1D3B9BCC5959211CC23D97690FA8E869ADF68BCDA8A1211DDB" "EBF967617AF0BFDA73E0AE79D8A7CCED208602EDC72CEF44A02901A52EEB" "87CF9841D186BC95A65956BAD48F3C9E43F027CC03B73DFF5CAFC0B64727" "E2D7B3A9CF25F97C475207C8A9DF091A585288A71AE64B7B2089871F7272" "381CCBEF55EBF3DCB21B134FE48BFD5299DCCA6B01B55EEA61F9F990D0AF"), wvcdm::a2bs_hex( "08011231121D1A1B0A190A093938373635343332311208F97F2B3856CBB3" "DD2002280018022A0C33333932383235393733000030151A209ADE9B0A41" "1583962BDA31BE5BE937E589BB3DCC06F6F4C48FBE4FAE86DC9ABA"), wvcdm::a2bs_hex( "0802123B0A190A093938373635343332311208F97F2B3856CBB3DD200228" "0112001A16200342120A106B63746C00000000CA3A6A75000000002083E5" "A68F051A20BDA6A56F7CBFD0942198F87C23A34AA5CBD64AFEB134277774" "CCF8E789D815DD"), "https://test.google.com/license/GetCencLicense", wvcdm::a2bs_hex( "0AC7150802100122C0150802121408011210303132333435363738394142" "434445461A9D0E080112950C0AD70B080112EF090AB002080212103E560E" "C5335E346F591BC4D07A7D507618A5D3A68F05228E023082010A02820101" "00A947904B8DBD55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52F" "F85CE7409528EFFA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A87" "70ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3" "B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA5152F1CC" "FC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F" "5800EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F54020" "7725B9890FCCEC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07" "E8882969B433EC66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BB" "E3270323941776EE60DD6BFD660BDDCA8702030100012880013001128002" "50D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928" "835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C1" "59C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690" "E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5EC" "F9418BBF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13" "E7719014030A6059044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B5" "5575690E95CE6085D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EE" "BA8E60643C86E85476B18AEF8DE871571A75681A75F75028A5B58751C09A" "5296AAE99CEDCD9785E9E2103240D40A1AB6050AB002080112102CE5CCF4" "2200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0282010100" "BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4" "396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D" "A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10" "160672C27B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB5" "6F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D924" "9755F129BB0DBECA3B894975A65A36FD005CE77CD407E925D3172E33122A" "11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF" "53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A" "08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259" "834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A" "3C3956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A" "54123BE4B2A1F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E8" "6C6B908243987E552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7" "F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5" "DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5D" "EFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1" "C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808" "025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC" "90B1FD1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534E" "AEE4A5903E304EED4990BB5BE735DB027A6DE35329D321EC051B956C55A5" "B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D" "70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E616D651207" "4E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D61" "6B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62" "75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A34" "2E332F4A425F4D52322F3731343239313A7573657264656275672F646576" "2D6B6579731A210A096465766963655F696412144C474D43323031323130" "3035303036333932373812250A230A140801121030313233343536373839" "41424344454610021A09393837363534333231180120002A0C3838373031" "3633350000000030151A80023F7318E29C5A50C8ADAA4B09ADCD97B75588" "B17002C5C2BC9AFA35C53098AF22DF5CC300407CD2E84EBE01911C785513" "649E2CCF4E429020D3B93F3A54748C11ECFF4D62F562A4D3E96812F663D4" "F761C00C3E88ABD8A1DC10E017A44DD3E040775FED5F07649090D1142C9D" "21373CD604219E24935E10F287F20B0E080FDF76B6096B24F82A3E37850D" "E229DE33EBCE7A0FA53F652C33007EA7027F95A44C36D04CBD676EB5C0BF" "69508F45E0C3220D1706B0B851B3FCAF7AC2370EAD80C5D1620887633A42" "024862FCEA9F95A719AAB989C1923C6452ECB0B75AF1CAFBFB06C5EC31BB" "F0EE4D16ACCC9AF05B77D61C4855491B3D4AC150F3BCB7AE536AF33322F6" "04080212CC020A190A093938373635343332311208F97F2B3856CBB3DD20" "022800124108011801301E4239687474703A2F2F6B697230336663706731" "37342E7769646576696E652E6E65742F7769646576696E652F6367692D62" "696E2F64726D2E6367691A661210C5C43FE0178AEE7B85042F749D5A4025" "1A5013A1501E0F90A64E103336944A37BAAAEAC17E46E880DF6EA23A7A89" "0DA082CBBF82710B8C3982E8AB25A208A89EEFB5250D4B2CCC2F362856E0" "5D1941E387801A19886B1F3AAE60D06EDA400087B06920011A7E0A103031" "32333435363738394142434445461210A34D2B04D596DFE1DC29CFDF116E" "39211A2031AD1B369D225842A14B5D5F8366F5FF8EB94AA7CD13EB45BA72" "9168E19D5F5F200242340A20A0D6D65CC677C12B86A7A99F89F446BCFDA1" "8544B15B2FEF8349ED5C247F7BE91210ED8D58320B0F4F948F960C7D4987" "2CDE2083E5A68F051A207481A2B82C83DF3090D57EDC042711A42CF4F87E" "79CE136DAFE25F48F4A9068322800256113CA771F4250CAD2928161D07B5" "2561019003DBFBD362F20587D51BD999D57D2B035BC115C54C8B4BC37661" "A66A101DE5B42D82E582309AFD8E211C947A2D33CAFB58F89EEE2DA95246" "140311134429D8A5D15E03A169B0EB2579DA3BD6E4322D6C46EE964F6931" "CF9DA52FB59B1D3B9BCC5959211CC23D97690FA8E869ADF68BCDA8A1211D" "DBEBF967617AF0BFDA73E0AE79D8A7CCED208602EDC72CEF44A02901A52E" "EB87CF9841D186BC95A65956BAD48F3C9E43F027CC03B73DFF5CAFC0B647" "27E2D7B3A9CF25F97C475207C8A9DF091A585288A71AE64B7B2089871F72" "72381CCBEF55EBF3DCB21B134FE48BFD5299DCCA6B01B55EEA61F9F990D0" "AF2A5708011231121D1A1B0A190A093938373635343332311208F97F2B38" "56CBB3DD2002280018022A0C33333932383235393733000030151A209ADE" "9B0A411583962BDA31BE5BE937E589BB3DCC06F6F4C48FBE4FAE86DC9ABA" "32610802123B0A190A093938373635343332311208F97F2B3856CBB3DD20" "02280112001A16200342120A106B63746C00000000CA3A6A750000000020" "83E5A68F051A20BDA6A56F7CBFD0942198F87C23A34AA5CBD64AFEB13427" "7774CCF8E789D815DD3A5168747470733A2F2F7777772E796F7574756265" "2E636F6D2F6170692F64726D2F7769646576696E653F766964656F5F6964" "3D3033363831323632646334313263303626736F757263653D594F555455" "42451220EC449C6B026C43004743061B3A3DCB7208B2AD11600254841B96" "1CFA1AD57172")}, // license 2 {"ksidE8C37662C88DC673", DeviceFiles::kLicenseStateReleasing, wvcdm::a2bs_hex("0801121030313233343536373839414243444546"), wvcdm::a2bs_hex( "080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "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" "021A09393837363534333231180120002A0C313038313531363936380000" "30151A80027EA7ADEF77500FBC6A6081E739E0C50E1BDE6DE4AB39110938" "6768A95A04A52BE6693A5A98A25AC8EB9CDD6F40DCCF86A3DA6C700E256A" "676BD3D7E492090DCF732C57333D9370F6D7AB87661701597099CD45C2BC" "DFF1D47183E510D7A6D3561EFC7D4EB21814CB2CA0777F26DD491B4D0146" "9BB81A701545E2D3E98E1ADAB3A3BBD1D0433B312B3B5139E88D3A92520B" "A399B2BE3489A72C3629745E4D8FC6DF6C8925A8FD8D6C809CA80DBC2903" "0615A55523305BC64DDFF52A87BD0DE9EEAB6445C5A1847E5E6FE8D640C7" "B07F3B066B911793F06E973A02FA6EDD274570C4CA982D353F1E72A5B776" "95D554B4FB554B46F5FA5B3B00805C136A9ED21FC2"), wvcdm::a2bs_hex( "080212CC020A190A0939383736353433323112087AD49366C8D919132002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A6612109161841718D5D0A4C4368820F4D030721A" "500F94F9BC0FF6B730709C6DEFD88D1CA8C7991A149D470493BDAD89E333" "AFC949F77D995CEA5E3D3DA5F7DF84E90CD4A9B4E138EA5F7EA75A520A25" "017D69A9460D46548259F82959304CDEFE41936BE420011A7E0A10303132" "3334353637383941424344454612104F88BFEECE468B962BF09EA1257DA5" "0B1A200D48C122E022033C3E67A6ED4DA99B8AEA6F4B9E78634A548C060F" "49D39D9700200242340A209DE408B6F116F428C8E801C63AF34570A6C31D" "72180AA11F85D8DD4BC1C4D35412104E73935C2CC38C21408C537B3A5F19" "8B2081E7A68F051A20BC2696A2A1FBDF425675CAD455DEA2B44040D1F8F0" "B6C675A28384CACFDF2F132280022D09FDA096972AA77FFEB09EA08AE882" "E89AC8591B398452CFB1383CCA16611571E223FE8DE82CDE9111557B2A87" "A253B87B822F037FB492DE4B91B8AD4DB2E2F8B2E81BF1DE36CC7520CB4B" "B3516E18322777287310257F2EC7110332504756DA8BC873448E93BA05FD" "1AEB7AD1016D7BBB7FF5E7111987005322E342679F3D241429AE930A479D" "9F338699D3D6969A6479D1363AEB4AF19BDE9A73B33CD0EBFCF272FCEEC6" "222AC08DCBD36077E0459D940BAE84ABA584700C02E70F3AE034ED7B764C" "6EE5E85663D657270C9AB40D3109920AB1C1C5DA1358E384EDF673253C04" "F20AA6B0CC98F421A4CD86C4C88042B0DE9902D5D00B6AD817B1A313ED5B"), wvcdm::a2bs_hex( "08011231121D1A1B0A190A0939383736353433323112087AD49366C8D919" "132002280018022A0C35333631323234343600000030151A208CC3C7D328" "DFACD43764C9FB582B858C8FF1D9863FF59C4D983478DB858AC32A"), wvcdm::a2bs_hex( "0802123B0A190A0939383736353433323112087AD49366C8D91913200228" "0112001A16200342120A106B63746C000000001FF4944E000000002082E7" "A68F051A2041EF0A9267D613D17AA90E1D1DA5BE091860E5E296D41D6D0F" "75E73660C279B3"), "https://test.google.com/license/GetCencLicense", wvcdm::a2bs_hex( "0A9F15080210012298150802121408011210303132333435363738394142" "434445461A9D0E080112950C0AD70B080112EF090AB002080212103E560E" "C5335E346F591BC4D07A7D507618A5D3A68F05228E023082010A02820101" "00A947904B8DBD55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52F" "F85CE7409528EFFA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A87" "70ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3" "B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA5152F1CC" "FC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F" "5800EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F54020" "7725B9890FCCEC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07" "E8882969B433EC66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BB" "E3270323941776EE60DD6BFD660BDDCA8702030100012880013001128002" "50D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928" "835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C1" "59C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690" "E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5EC" "F9418BBF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13" "E7719014030A6059044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B5" "5575690E95CE6085D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EE" "BA8E60643C86E85476B18AEF8DE871571A75681A75F75028A5B58751C09A" "5296AAE99CEDCD9785E9E2103240D40A1AB6050AB002080112102CE5CCF4" "2200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0282010100" "BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4" "396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D" "A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10" "160672C27B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB5" "6F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D924" "9755F129BB0DBECA3B894975A65A36FD005CE77CD407E925D3172E33122A" "11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF" "53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A" "08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259" "834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A" "3C3956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A" "54123BE4B2A1F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E8" "6C6B908243987E552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7" "F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5" "DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5D" "EFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1" "C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808" "025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC" "90B1FD1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534E" "AEE4A5903E304EED4990BB5BE735DB027A6DE35329D321EC051B956C55A5" "B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D" "70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E616D651207" "4E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D61" "6B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62" "75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A34" "2E332F4A425F4D52322F3731343239313A7573657264656275672F646576" "2D6B6579731A210A096465766963655F696412144C474D43323031323130" "3035303036333932373812250A230A140801121030313233343536373839" "41424344454610021A09393837363534333231180120002A0C3130383135" "3136393638000030151A80027EA7ADEF77500FBC6A6081E739E0C50E1BDE" "6DE4AB391109386768A95A04A52BE6693A5A98A25AC8EB9CDD6F40DCCF86" "A3DA6C700E256A676BD3D7E492090DCF732C57333D9370F6D7AB87661701" "597099CD45C2BCDFF1D47183E510D7A6D3561EFC7D4EB21814CB2CA0777F" "26DD491B4D01469BB81A701545E2D3E98E1ADAB3A3BBD1D0433B312B3B51" "39E88D3A92520BA399B2BE3489A72C3629745E4D8FC6DF6C8925A8FD8D6C" "809CA80DBC29030615A55523305BC64DDFF52A87BD0DE9EEAB6445C5A184" "7E5E6FE8D640C7B07F3B066B911793F06E973A02FA6EDD274570C4CA982D" "353F1E72A5B77695D554B4FB554B46F5FA5B3B00805C136A9ED21FC222F6" "04080212CC020A190A0939383736353433323112087AD49366C8D9191320" "022800124108011801301E4239687474703A2F2F6B697230336663706731" "37342E7769646576696E652E6E65742F7769646576696E652F6367692D62" "696E2F64726D2E6367691A6612109161841718D5D0A4C4368820F4D03072" "1A500F94F9BC0FF6B730709C6DEFD88D1CA8C7991A149D470493BDAD89E3" "33AFC949F77D995CEA5E3D3DA5F7DF84E90CD4A9B4E138EA5F7EA75A520A" "25017D69A9460D46548259F82959304CDEFE41936BE420011A7E0A103031" "323334353637383941424344454612104F88BFEECE468B962BF09EA1257D" "A50B1A200D48C122E022033C3E67A6ED4DA99B8AEA6F4B9E78634A548C06" "0F49D39D9700200242340A209DE408B6F116F428C8E801C63AF34570A6C3" "1D72180AA11F85D8DD4BC1C4D35412104E73935C2CC38C21408C537B3A5F" "198B2081E7A68F051A20BC2696A2A1FBDF425675CAD455DEA2B44040D1F8" "F0B6C675A28384CACFDF2F132280022D09FDA096972AA77FFEB09EA08AE8" "82E89AC8591B398452CFB1383CCA16611571E223FE8DE82CDE9111557B2A" "87A253B87B822F037FB492DE4B91B8AD4DB2E2F8B2E81BF1DE36CC7520CB" "4BB3516E18322777287310257F2EC7110332504756DA8BC873448E93BA05" "FD1AEB7AD1016D7BBB7FF5E7111987005322E342679F3D241429AE930A47" "9D9F338699D3D6969A6479D1363AEB4AF19BDE9A73B33CD0EBFCF272FCEE" "C6222AC08DCBD36077E0459D940BAE84ABA584700C02E70F3AE034ED7B76" "4C6EE5E85663D657270C9AB40D3109920AB1C1C5DA1358E384EDF673253C" "04F20AA6B0CC98F421A4CD86C4C88042B0DE9902D5D00B6AD817B1A313ED" "5B2A5708011231121D1A1B0A190A0939383736353433323112087AD49366" "C8D919132002280018022A0C35333631323234343600000030151A208CC3" "C7D328DFACD43764C9FB582B858C8FF1D9863FF59C4D983478DB858AC32A" "32610802123B0A190A0939383736353433323112087AD49366C8D9191320" "02280112001A16200342120A106B63746C000000001FF4944E0000000020" "82E7A68F051A2041EF0A9267D613D17AA90E1D1DA5BE091860E5E296D41D" "6D0F75E73660C279B33A29687474703A2F2F68616D69642E6B69722E636F" "72702E676F6F676C652E636F6D3A383838382F64726D12205CD2C43C618C" "CA27BBCB2EEBDE32B57CBD51B424FD85DAB715B7F5A87546FD40")}}; // Sample license data and related data for storage and use for offline // playback. The license data and URLs in this test are not real. // The data is used to test license-related functions. LicenseInfo license_update_test_data[] = { // active license {"key_set_id_: ksid2A048BC7FAEC885A", DeviceFiles::kLicenseStateActive, wvcdm::a2bs_hex("0801121030313233343536373839414243444546"), wvcdm::a2bs_hex( "080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3" "F6F279C686F826E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F" "042CAD54D44C6484C725CD721A2A97C088E60AFF0E9C8E03477A1B56B4C5" "55C27CEAF55024375D8D3FB352DA4AAA2E911C876CB1B36162922E9130CC" "C5FB72F8DD41D05DE6889C4814A7344BA8C605DE399CA3CBBF1E7DE3411E" "DFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB55599183B84FDDC98AC30" "96B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42DE46B462CED2AB" "ABB96B610A47E0620AA10D862FEB66BB4F00B13DFE61703AE872F0B4850C" "39138FC5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5D9624662081D7A" "5A1C581EB09619DD9DD3020301000128800130011280026AB9AC42F1C17C" "1ECFB710BF2C35383F41CF7EFAB0DFDCC69090C20DE141CB43055FD707C6" "11CDAEE700076A1EBA32432D5C2B62A73B8B1672AD2C4303598C02D34823" "A6BE387046937F55BB65F5B3571FDC6A1F0D947031003BA651F8E48BF33D" "66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091FE83AD886A680F" "55AB62F306435BC0043825F6A401BB9C341230127D3298B67F82767050C9" "5769964B0B5C27A36FA76ED161ABE4B6C18556C807706509A5146ADD958A" "F79B49EDE48CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD1D27F8D80E1B69" "31C92AC8E5C3BEC0ADAE621A3B78952485EBFC81A194BA75BBD2C821C28A" "EB5D21CBE0A270E55E1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "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" "021A09393837363534333231180120002A0C333037383036303230340000" "30151A8002B5CA9C6B097EF2CBE2F8136C761130F3456ED706127260151B" "4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8C6B8993A5D33E2" "4B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08A6F1080C19340A" "068E575568AE5EBADDD638FB435AC3EEC901E5F250BC974C498D6378C8BC" "1F4BACCED5725B8B77160444923DA3B729DCB681186565B49EEFFE27CF16" "31F09EC31E543AAFE9F5996FB0BEAA5F80305D67ECF173A8BD4A3B2CC75C" "EC3AA5881FF433E80838E1E1FA23CE7F22346DDDF7FEC3DB0CE2C3F845CF" "9471088A022C8D0A63860764AE558BD0B5F66D78881ADBF2D398F9BA349E" "FB2532C61E243DD45BB11C99422D13A82B7AAE9671"), wvcdm::a2bs_hex( "080212CC020A190A09393837363534333231120892BE96420F0D5BF32002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A661210BB2E2D2B9C39697794897E08262749B41A" "50C0DED62431B1701F59E076E07EB0D2D43AEC6C589B35790739EB0B0ED4" "7236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263E185F06AE37" "BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A10303132" "333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC" "301A207448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65" "228317843D200242340A207F287706380C8085A4E5F85843D1C3B379F9CE" "19ED5A2DAAF476B8AFE10488BF12100C8CDB1DA4C9FEBE5BBB530FE0D3DA" "8720F4DFB68F051A20F4BCCEEEA658C5DD18D7B841E6D8991E616B57B592" "C44ED67050939B136815272280025CD92AB4672778CB865D528A2EAAAD06" "435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659EA0271A1" "F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD" "88C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D797" "0CB098889D3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66" "CBDEC2DCFD23885144C776B98C8A7A176C4EA183085EF02D2060904ADA3C" "B161F4D198A0279DA19D7001EB2D20C70ABAA04B3760CB165006F6CBA4BE" "0A2628C0C8398C122FF0DCF9292590E3C37BC7DB20F3B0921268F41FE76B" "D3EE764EBA13A22FDABC170860503FB93CC4A08D61102519D56A25EB9E30"), wvcdm::a2bs_hex( "08011231121D1A1B0A190A09393837363534333231120892BE96420F0D5B" "F32002280018022A0C31393132353333373731000030151A20F4FDBECE54" "7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC6"), wvcdm::a2bs_hex( "0802123B0A190A09393837363534333231120892BE96420F0D5BF3200228" "0112001A16200342120A106B63746C0000000071FEF30B0000000020F4DF" "B68F051A2000351030900858FCFD6977B67803ADFD1280AA661E6B0BD30B" "08B2C467355129"), "https://test.google.com/license/GetCencLicense", wvcdm::a2bs_hex( "0AA41508021001229D150801121408011210303132333435363738394142" "434445461A9D0E080112950C0AD70B080112EF090AB002080212103E560E" "C5335E346F591BC4D07A7D5076189EDFB68F05228E023082010A02820101" "00CC1715C81AD3F6F279C686F826E6D7C8961EB13318367D06B4061BBC57" "E3C616A226A10F042CAD54D44C6484C725CD721A2A97C088E60AFF0E9C8E" "03477A1B56B4C555C27CEAF55024375D8D3FB352DA4AAA2E911C876CB1B3" "6162922E9130CCC5FB72F8DD41D05DE6889C4814A7344BA8C605DE399CA3" "CBBF1E7DE3411EDFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB5559918" "3B84FDDC98AC3096B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42" "DE46B462CED2ABABB96B610A47E0620AA10D862FEB66BB4F00B13DFE6170" "3AE872F0B4850C39138FC5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5" "D9624662081D7A5A1C581EB09619DD9DD302030100012880013001128002" "6AB9AC42F1C17C1ECFB710BF2C35383F41CF7EFAB0DFDCC69090C20DE141" "CB43055FD707C611CDAEE700076A1EBA32432D5C2B62A73B8B1672AD2C43" "03598C02D34823A6BE387046937F55BB65F5B3571FDC6A1F0D947031003B" "A651F8E48BF33D66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091" "FE83AD886A680F55AB62F306435BC0043825F6A401BB9C341230127D3298" "B67F82767050C95769964B0B5C27A36FA76ED161ABE4B6C18556C8077065" "09A5146ADD958AF79B49EDE48CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD" "1D27F8D80E1B6931C92AC8E5C3BEC0ADAE621A3B78952485EBFC81A194BA" "75BBD2C821C28AEB5D21CBE0A270E55E1AB6050AB002080112102CE5CCF4" "2200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0282010100" "BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4" "396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D" "A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10" "160672C27B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB5" "6F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D924" "9755F129BB0DBECA3B894975A65A36FD005CE77CD407E925D3172E33122A" "11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF" "53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A" "08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259" "834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A" "3C3956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A" "54123BE4B2A1F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E8" "6C6B908243987E552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7" "F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5" "DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5D" "EFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1" "C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808" "025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC" "90B1FD1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534E" "AEE4A5903E304EED4990BB5BE735DB027A6DE35329D321EC051B956C55A5" "B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D" "70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E616D651207" "4E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D61" "6B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62" "75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A34" "2E332F4A425F4D52322F3731343239313A7573657264656275672F646576" "2D6B6579731A210A096465766963655F696412144C474D43323031323130" "3035303036333932373812250A230A140801121030313233343536373839" "41424344454610021A09393837363534333231180120002A0C3330373830" "3630323034000030151A8002B5CA9C6B097EF2CBE2F8136C761130F3456E" "D706127260151B4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8" "C6B8993A5D33E24B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08" "A6F1080C19340A068E575568AE5EBADDD638FB435AC3EEC901E5F250BC97" "4C498D6378C8BC1F4BACCED5725B8B77160444923DA3B729DCB681186565" "B49EEFFE27CF1631F09EC31E543AAFE9F5996FB0BEAA5F80305D67ECF173" "A8BD4A3B2CC75CEC3AA5881FF433E80838E1E1FA23CE7F22346DDDF7FEC3" "DB0CE2C3F845CF9471088A022C8D0A63860764AE558BD0B5F66D78881ADB" "F2D398F9BA349EFB2532C61E243DD45BB11C99422D13A82B7AAE967122F6" "04080212CC020A190A09393837363534333231120892BE96420F0D5BF320" "022800124108011801301E4239687474703A2F2F6B697230336663706731" "37342E7769646576696E652E6E65742F7769646576696E652F6367692D62" "696E2F64726D2E6367691A661210BB2E2D2B9C39697794897E08262749B4" "1A50C0DED62431B1701F59E076E07EB0D2D43AEC6C589B35790739EB0B0E" "D47236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263E185F06AE" "37BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A103031" "32333435363738394142434445461210319D7FB66154DFEC2AEDB164F29A" "AC301A207448440734605CB29424FD1DA435A405DEE837757EA6A68C633A" "65228317843D200242340A207F287706380C8085A4E5F85843D1C3B379F9" "CE19ED5A2DAAF476B8AFE10488BF12100C8CDB1DA4C9FEBE5BBB530FE0D3" "DA8720F4DFB68F051A20F4BCCEEEA658C5DD18D7B841E6D8991E616B57B5" "92C44ED67050939B136815272280025CD92AB4672778CB865D528A2EAAAD" "06435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659EA0271" "A1F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9" "BD88C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D7" "970CB098889D3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D" "66CBDEC2DCFD23885144C776B98C8A7A176C4EA183085EF02D2060904ADA" "3CB161F4D198A0279DA19D7001EB2D20C70ABAA04B3760CB165006F6CBA4" "BE0A2628C0C8398C122FF0DCF9292590E3C37BC7DB20F3B0921268F41FE7" "6BD3EE764EBA13A22FDABC170860503FB93CC4A08D61102519D56A25EB9E" "302A5708011231121D1A1B0A190A09393837363534333231120892BE9642" "0F0D5BF32002280018022A0C31393132353333373731000030151A20F4FD" "BECE547252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC6" "32610802123B0A190A09393837363534333231120892BE96420F0D5BF320" "02280112001A16200342120A106B63746C0000000071FEF30B0000000020" "F4DFB68F051A2000351030900858FCFD6977B67803ADFD1280AA661E6B0B" "D30B08B2C4673551293A2E68747470733A2F2F746573742E676F6F676C65" "2E636F6D2F6C6963656E73652F47657443656E634C6963656E736512200A" "1C78D0E574D0827C3AE78A05EEC90BAC31D10686EC19EB0599F75B2D1AB4" "C5" )}, // license being released. all fields are identical except for license // state and hashed file data {"", DeviceFiles::kLicenseStateReleasing, "", "", "", "", "", "", wvcdm::a2bs_hex( "0AA41508021001229D150802121408011210303132333435363738394142" "434445461A9D0E080112950C0AD70B080112EF090AB002080212103E560E" "C5335E346F591BC4D07A7D5076189EDFB68F05228E023082010A02820101" "00CC1715C81AD3F6F279C686F826E6D7C8961EB13318367D06B4061BBC57" "E3C616A226A10F042CAD54D44C6484C725CD721A2A97C088E60AFF0E9C8E" "03477A1B56B4C555C27CEAF55024375D8D3FB352DA4AAA2E911C876CB1B3" "6162922E9130CCC5FB72F8DD41D05DE6889C4814A7344BA8C605DE399CA3" "CBBF1E7DE3411EDFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB5559918" "3B84FDDC98AC3096B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42" "DE46B462CED2ABABB96B610A47E0620AA10D862FEB66BB4F00B13DFE6170" "3AE872F0B4850C39138FC5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5" "D9624662081D7A5A1C581EB09619DD9DD302030100012880013001128002" "6AB9AC42F1C17C1ECFB710BF2C35383F41CF7EFAB0DFDCC69090C20DE141" "CB43055FD707C611CDAEE700076A1EBA32432D5C2B62A73B8B1672AD2C43" "03598C02D34823A6BE387046937F55BB65F5B3571FDC6A1F0D947031003B" "A651F8E48BF33D66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091" "FE83AD886A680F55AB62F306435BC0043825F6A401BB9C341230127D3298" "B67F82767050C95769964B0B5C27A36FA76ED161ABE4B6C18556C8077065" "09A5146ADD958AF79B49EDE48CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD" "1D27F8D80E1B6931C92AC8E5C3BEC0ADAE621A3B78952485EBFC81A194BA" "75BBD2C821C28AEB5D21CBE0A270E55E1AB6050AB002080112102CE5CCF4" "2200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0282010100" "BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4" "396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D" "A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10" "160672C27B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB5" "6F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D924" "9755F129BB0DBECA3B894975A65A36FD005CE77CD407E925D3172E33122A" "11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF" "53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A" "08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259" "834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A" "3C3956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A" "54123BE4B2A1F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E8" "6C6B908243987E552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7" "F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5" "DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5D" "EFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1" "C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808" "025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC" "90B1FD1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534E" "AEE4A5903E304EED4990BB5BE735DB027A6DE35329D321EC051B956C55A5" "B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D" "70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E616D651207" "4E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D61" "6B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62" "75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A34" "2E332F4A425F4D52322F3731343239313A7573657264656275672F646576" "2D6B6579731A210A096465766963655F696412144C474D43323031323130" "3035303036333932373812250A230A140801121030313233343536373839" "41424344454610021A09393837363534333231180120002A0C3330373830" "3630323034000030151A8002B5CA9C6B097EF2CBE2F8136C761130F3456E" "D706127260151B4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8" "C6B8993A5D33E24B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08" "A6F1080C19340A068E575568AE5EBADDD638FB435AC3EEC901E5F250BC97" "4C498D6378C8BC1F4BACCED5725B8B77160444923DA3B729DCB681186565" "B49EEFFE27CF1631F09EC31E543AAFE9F5996FB0BEAA5F80305D67ECF173" "A8BD4A3B2CC75CEC3AA5881FF433E80838E1E1FA23CE7F22346DDDF7FEC3" "DB0CE2C3F845CF9471088A022C8D0A63860764AE558BD0B5F66D78881ADB" "F2D398F9BA349EFB2532C61E243DD45BB11C99422D13A82B7AAE967122F6" "04080212CC020A190A09393837363534333231120892BE96420F0D5BF320" "022800124108011801301E4239687474703A2F2F6B697230336663706731" "37342E7769646576696E652E6E65742F7769646576696E652F6367692D62" "696E2F64726D2E6367691A661210BB2E2D2B9C39697794897E08262749B4" "1A50C0DED62431B1701F59E076E07EB0D2D43AEC6C589B35790739EB0B0E" "D47236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263E185F06AE" "37BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A103031" "32333435363738394142434445461210319D7FB66154DFEC2AEDB164F29A" "AC301A207448440734605CB29424FD1DA435A405DEE837757EA6A68C633A" "65228317843D200242340A207F287706380C8085A4E5F85843D1C3B379F9" "CE19ED5A2DAAF476B8AFE10488BF12100C8CDB1DA4C9FEBE5BBB530FE0D3" "DA8720F4DFB68F051A20F4BCCEEEA658C5DD18D7B841E6D8991E616B57B5" "92C44ED67050939B136815272280025CD92AB4672778CB865D528A2EAAAD" "06435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659EA0271" "A1F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9" "BD88C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D7" "970CB098889D3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D" "66CBDEC2DCFD23885144C776B98C8A7A176C4EA183085EF02D2060904ADA" "3CB161F4D198A0279DA19D7001EB2D20C70ABAA04B3760CB165006F6CBA4" "BE0A2628C0C8398C122FF0DCF9292590E3C37BC7DB20F3B0921268F41FE7" "6BD3EE764EBA13A22FDABC170860503FB93CC4A08D61102519D56A25EB9E" "302A5708011231121D1A1B0A190A09393837363534333231120892BE9642" "0F0D5BF32002280018022A0C31393132353333373731000030151A20F4FD" "BECE547252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC6" "32610802123B0A190A09393837363534333231120892BE96420F0D5BF320" "02280112001A16200342120A106B63746C0000000071FEF30B0000000020" "F4DFB68F051A2000351030900858FCFD6977B67803ADFD1280AA661E6B0B" "D30B08B2C4673551293A2E68747470733A2F2F746573742E676F6F676C65" "2E636F6D2F6C6963656E73652F47657443656E634C6963656E736512208F" "7186A244EF561E3B07DC459BC681A0798B180667EA448327F6BBBD30212A" "49")}}; } // namespace class MockFile : public File { public: MOCK_METHOD2(Open, bool(const std::string&, int flags)); MOCK_METHOD0(Close, void()); MOCK_METHOD2(Read, ssize_t(char*, size_t)); MOCK_METHOD2(Write, ssize_t(const char*, size_t)); MOCK_METHOD1(Exists, bool(const std::string&)); MOCK_METHOD1(Remove, bool(const std::string&)); MOCK_METHOD2(Copy, bool(const std::string&, const std::string&)); MOCK_METHOD2(List, bool(const std::string&, std::vector*)); MOCK_METHOD1(CreateDirectory, bool(const std::string)); MOCK_METHOD1(IsDirectory, bool(const std::string&)); MOCK_METHOD1(IsRegularFile, bool(const std::string&)); MOCK_METHOD1(FileSize, ssize_t(const std::string&)); }; class DeviceFilesTest : public ::testing::Test { protected: virtual void SetUp() { ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &device_base_path_)); } std::string GenerateRandomData(uint32_t len) { std::string data(len, 0); for (size_t i = 0; i < len; i++) { data[i] = rand() % 256; } return data; } size_t GetLicenseDataSize(LicenseInfo& data) { return sizeof(DeviceFiles::LicenseState) + data.pssh_data.size() + data.key_request.size() + data.key_response.size() + data.key_renewal_request.size() + data.key_renewal_response.size() + data.key_release_url.size(); } std::string device_base_path_; }; class DeviceFilesStoreTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; class DeviceFilesSecurityLevelTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; MATCHER(IsCreateFileFlagSet, "") { return File::kCreate & arg; } MATCHER(IsBinaryFileFlagSet, "") { return File::kBinary & arg; } MATCHER_P(IsStrEq, str, "") { // Estimating the length of data. We can have gmock provide length // as well as pointer to data but that will introduce a dependency on tr1 return memcmp(arg, str.c_str(), str.size()) == 0; } MATCHER_P2(Contains, str1, str2, "") { // Estimating the length of data. We can have gmock provide length // as well as pointer to data but that will introduce a dependency on tr1 std::string data(arg, str1.size() + str2.size() + kProtobufEstimatedLen); return (data.find(str1) != std::string::npos && data.find(str2) != std::string::npos); } MATCHER_P6(Contains, str1, str2, str3, str4, str5, str6, "") { // Estimating the length of data. We can have gmock provide length // as well as pointer to data but that will introduce a dependency on tr1 std::string data(arg, str1.size() + str2.size() + str3.size() + str4.size() + str5.size() + str6.size() + kProtobufEstimatedLen); return (data.find(str1) != std::string::npos && data.find(str2) != std::string::npos && data.find(str3) != std::string::npos && data.find(str4) != std::string::npos && data.find(str5) != std::string::npos && data.find(str6) != std::string::npos); } TEST_P(DeviceFilesStoreTest, StoreCertificate) { MockFile file; std::string certificate(GenerateRandomData(kCertificateLen)); std::string wrapped_private_key(GenerateRandomData(kWrappedKeyLen)); std::string device_certificate_path = device_base_path_ + DeviceFiles::GetCertificateFileName(); bool dir_exists = GetParam(); EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_))) .WillOnce(Return(dir_exists)); if (dir_exists) { EXPECT_CALL(file, CreateDirectory(_)).Times(0); } else { EXPECT_CALL(file, CreateDirectory(StrEq(device_base_path_))) .WillOnce(Return(true)); } EXPECT_CALL(file, Open(StrEq(device_certificate_path), AllOf(IsCreateFileFlagSet(), IsBinaryFileFlagSet()))) .WillOnce(Return(true)); EXPECT_CALL(file, Write(Contains(certificate, wrapped_private_key), Gt(certificate.size() + wrapped_private_key.size()))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Read(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); EXPECT_TRUE(device_files.StoreCertificate(certificate, wrapped_private_key)); } INSTANTIATE_TEST_CASE_P(StoreCertificate, DeviceFilesStoreTest, ::testing::Values(true, false)); TEST_F(DeviceFilesTest, ReadCertificate) { MockFile file; std::string device_certificate_path = device_base_path_ + DeviceFiles::GetCertificateFileName(); std::string data = a2bs_hex(kTestCertificateFileData); EXPECT_CALL(file, Exists(StrEq(device_certificate_path))) .WillOnce(Return(true)); EXPECT_CALL(file, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file, Open(StrEq(device_certificate_path), IsBinaryFileFlagSet())) .WillOnce(Return(true)); EXPECT_CALL(file, Read(NotNull(), Eq(data.size()))).WillOnce(DoAll( SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Write(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); std::string certificate, wrapped_private_key; ASSERT_TRUE( device_files.RetrieveCertificate(&certificate, &wrapped_private_key)); EXPECT_EQ(kTestCertificate, b2a_hex(certificate)); EXPECT_EQ(kTestWrappedPrivateKey, b2a_hex(wrapped_private_key)); } TEST_P(DeviceFilesSecurityLevelTest, SecurityLevel) { MockFile file; std::string certificate(GenerateRandomData(kCertificateLen)); std::string wrapped_private_key(GenerateRandomData(kWrappedKeyLen)); CdmSecurityLevel security_level = GetParam(); std::string device_base_path; ASSERT_TRUE( Properties::GetDeviceFilesBasePath(security_level, &device_base_path)); std::string device_certificate_path = device_base_path + DeviceFiles::GetCertificateFileName(); EXPECT_CALL(file, IsDirectory(StrEq(device_base_path))) .WillOnce(Return(false)); EXPECT_CALL(file, CreateDirectory(StrEq(device_base_path))) .WillOnce(Return(true)); EXPECT_CALL(file, Open(StrEq(device_certificate_path), AllOf(IsCreateFileFlagSet(), IsBinaryFileFlagSet()))) .WillOnce(Return(true)); EXPECT_CALL(file, Write(Contains(certificate, wrapped_private_key), Gt(certificate.size() + wrapped_private_key.size()))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Read(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, security_level)); EXPECT_TRUE(device_files.StoreCertificate(certificate, wrapped_private_key)); } INSTANTIATE_TEST_CASE_P(SecurityLevel, DeviceFilesSecurityLevelTest, ::testing::Values(kSecurityLevelL1, kSecurityLevelL3)); TEST_P(DeviceFilesStoreTest, StoreLicense) { MockFile file; size_t license_num = 0; std::string license_path = device_base_path_ + license_test_data[license_num].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); bool dir_exists = GetParam(); EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_))) .WillOnce(Return(dir_exists)); if (dir_exists) { EXPECT_CALL(file, CreateDirectory(_)).Times(0); } else { EXPECT_CALL(file, CreateDirectory(StrEq(device_base_path_))) .WillOnce(Return(true)); } EXPECT_CALL(file, Open(StrEq(license_path), AllOf(IsCreateFileFlagSet(), IsBinaryFileFlagSet()))) .WillOnce(Return(true)); EXPECT_CALL( file, Write(Contains(license_test_data[license_num].pssh_data, license_test_data[license_num].key_request, license_test_data[license_num].key_response, license_test_data[license_num].key_renewal_request, license_test_data[license_num].key_renewal_response, license_test_data[license_num].key_release_url), Gt(GetLicenseDataSize(license_test_data[license_num])))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Read(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); EXPECT_TRUE(device_files.StoreLicense( license_test_data[license_num].key_set_id, license_test_data[license_num].license_state, license_test_data[license_num].pssh_data, license_test_data[license_num].key_request, license_test_data[license_num].key_response, license_test_data[license_num].key_renewal_request, license_test_data[license_num].key_renewal_response, license_test_data[license_num].key_release_url)); } INSTANTIATE_TEST_CASE_P(StoreLicense, DeviceFilesStoreTest, ::testing::Values(true, false)); TEST_F(DeviceFilesTest, StoreLicenses) { MockFile file; EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_))) .Times(kNumberOfLicenses).WillRepeatedly(Return(true)); EXPECT_CALL(file, CreateDirectory(_)).Times(0); for (size_t i = 0; i < kNumberOfLicenses; ++i) { std::string license_path = device_base_path_ + license_test_data[i].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); EXPECT_CALL(file, Open(StrEq(license_path), AllOf(IsCreateFileFlagSet(), IsBinaryFileFlagSet()))) .WillOnce(Return(true)); EXPECT_CALL(file, Write(Contains(license_test_data[i].pssh_data, license_test_data[i].key_request, license_test_data[i].key_response, license_test_data[i].key_renewal_request, license_test_data[i].key_renewal_response, license_test_data[i].key_release_url), Gt(GetLicenseDataSize(license_test_data[i])))) .WillOnce(ReturnArg<1>()); } EXPECT_CALL(file, Close()).Times(kNumberOfLicenses); EXPECT_CALL(file, Read(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); for (size_t i = 0; i < kNumberOfLicenses; i++) { EXPECT_TRUE(device_files.StoreLicense( license_test_data[i].key_set_id, license_test_data[i].license_state, license_test_data[i].pssh_data, license_test_data[i].key_request, license_test_data[i].key_response, license_test_data[i].key_renewal_request, license_test_data[i].key_renewal_response, license_test_data[i].key_release_url)); } } TEST_F(DeviceFilesTest, RetrieveLicenses) { MockFile file; for (size_t i = 0; i < kNumberOfLicenses; ++i) { std::string license_path = device_base_path_ + license_test_data[i].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); size_t size = license_test_data[i].file_data.size(); EXPECT_CALL(file, Exists(StrEq(license_path))).WillOnce(Return(true)); EXPECT_CALL(file, FileSize(StrEq(license_path))).WillOnce(Return(size)); EXPECT_CALL(file, Open(StrEq(license_path), IsBinaryFileFlagSet())) .WillOnce(Return(true)); EXPECT_CALL(file, Read(NotNull(), Eq(size))).WillOnce( DoAll(SetArrayArgument<0>(license_test_data[i].file_data.begin(), license_test_data[i].file_data.end()), Return(size))); } EXPECT_CALL(file, Close()).Times(kNumberOfLicenses); EXPECT_CALL(file, Write(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); DeviceFiles::LicenseState license_state; CdmInitData pssh_data; CdmKeyMessage key_request; CdmKeyResponse key_response; CdmKeyMessage key_renewal_request; CdmKeyResponse key_renewal_response; std::string release_server_url; for (size_t i = 0; i < kNumberOfLicenses; i++) { DeviceFiles::LicenseState license_state; EXPECT_TRUE(device_files.RetrieveLicense( license_test_data[i].key_set_id, &license_state, &pssh_data, &key_request, &key_response, &key_renewal_request, &key_renewal_response, &release_server_url)); EXPECT_EQ(license_test_data[i].license_state, license_state); EXPECT_EQ(license_test_data[i].pssh_data, pssh_data); EXPECT_EQ(license_test_data[i].key_request, key_request); EXPECT_EQ(license_test_data[i].key_response, key_response); EXPECT_EQ(license_test_data[i].key_request, key_request); EXPECT_EQ(license_test_data[i].key_response, key_response); } } TEST_F(DeviceFilesTest, SecurityLevelPathBackwardCompatibility) { MockFile file; std::vector security_dirs; EXPECT_TRUE(Properties::GetSecurityLevelDirectories(&security_dirs)); size_t pos = std::string::npos; for (size_t i = 0; i < security_dirs.size(); ++i) { pos = device_base_path_.rfind(security_dirs[i]); if (std::string::npos != pos) break; } EXPECT_NE(std::string::npos, pos); std::string base_path(device_base_path_, 0, pos); std::vector old_files; std::string new_path; for (size_t i = 0; i < security_dirs.size(); ++i) { old_files.push_back(security_dirs[i]); new_path = base_path + security_dirs[i]; EXPECT_CALL(file, IsRegularFile(StrEq(new_path))).WillOnce(Return(false)); EXPECT_CALL(file, Exists(StrEq(new_path))) .WillOnce(Return(false)) .WillRepeatedly(Return(true)); EXPECT_CALL(file, CreateDirectory(StrEq(new_path))).WillOnce(Return(true)); } std::string old_path = base_path + DeviceFiles::GetCertificateFileName(); old_files.push_back(DeviceFiles::GetCertificateFileName()); EXPECT_CALL(file, IsRegularFile(StrEq(old_path))) .WillOnce(Return(true)); EXPECT_CALL(file, Remove(StrEq(old_path))).WillOnce(Return(true)); for (size_t i = 0; i < security_dirs.size(); ++i) { new_path = base_path + security_dirs[i] + DeviceFiles::GetCertificateFileName(); EXPECT_CALL(file, Copy(StrEq(old_path), StrEq(new_path))) .WillOnce(Return(true)); } for (size_t j = 0; j < kNumberOfLicenses; ++j) { std::string file_name = license_test_data[j].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); old_path = base_path + file_name; old_files.push_back(file_name); EXPECT_CALL(file, IsRegularFile(StrEq(old_path))).WillOnce(Return(true)); EXPECT_CALL(file, Remove(StrEq(old_path))).WillOnce(Return(true)); for (size_t i = 0; i < security_dirs.size(); ++i) { new_path = base_path + security_dirs[i] + file_name; EXPECT_CALL(file, Copy(StrEq(old_path), StrEq(new_path))) .WillOnce(Return(true)); } } EXPECT_CALL(file, List(StrEq(base_path), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(old_files), Return(true))); std::string data = a2bs_hex(kTestCertificateFileData); new_path = device_base_path_ + DeviceFiles::GetCertificateFileName(); EXPECT_CALL(file, Exists(StrEq(new_path))).WillOnce(Return(true)); EXPECT_CALL(file, FileSize(_)).WillOnce(Return(data.size())); EXPECT_CALL(file, Open(_, _)).WillOnce(Return(true)); EXPECT_CALL(file, Read(NotNull(), Eq(data.size()))).WillOnce(DoAll( SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Write(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); Properties::Init(); std::string certificate, wrapped_private_key; ASSERT_TRUE( device_files.RetrieveCertificate(&certificate, &wrapped_private_key)); } TEST_F(DeviceFilesTest, UpdateLicenseState) { MockFile file; std::string license_path = device_base_path_ + license_update_test_data[0].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_))).Times(2) .WillRepeatedly(Return(true)); EXPECT_CALL(file, CreateDirectory(_)).Times(0); EXPECT_CALL(file, Open(StrEq(license_path), AllOf(IsCreateFileFlagSet(), IsBinaryFileFlagSet()))) .Times(2).WillRepeatedly(Return(true)); EXPECT_CALL(file, Write(IsStrEq(license_update_test_data[0].file_data), Eq(license_update_test_data[0].file_data.size()))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(file, Write(IsStrEq(license_update_test_data[1].file_data), Eq(license_update_test_data[1].file_data.size()))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(file, Close()).Times(2); EXPECT_CALL(file, Read(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); EXPECT_TRUE(device_files.StoreLicense( license_update_test_data[0].key_set_id, license_update_test_data[0].license_state, license_update_test_data[0].pssh_data, license_update_test_data[0].key_request, license_update_test_data[0].key_response, license_update_test_data[0].key_renewal_request, license_update_test_data[0].key_renewal_response, license_update_test_data[0].key_release_url)); EXPECT_TRUE(device_files.StoreLicense( license_update_test_data[0].key_set_id, license_update_test_data[1].license_state, license_update_test_data[0].pssh_data, license_update_test_data[0].key_request, license_update_test_data[0].key_response, license_update_test_data[0].key_renewal_request, license_update_test_data[0].key_renewal_response, license_update_test_data[0].key_release_url)); } TEST_F(DeviceFilesTest, DeleteLicense) { MockFile file; std::string license_path = device_base_path_ + license_test_data[0].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); size_t size = license_test_data[0].file_data.size(); EXPECT_CALL(file, Exists(StrEq(license_path))).Times(2).WillOnce(Return(true)) .WillOnce(Return(false)); EXPECT_CALL(file, FileSize(StrEq(license_path))).WillOnce(Return(size)); EXPECT_CALL(file, Open(StrEq(license_path), IsBinaryFileFlagSet())) .WillOnce(Return(true)); EXPECT_CALL(file, Read(NotNull(), Eq(size))).WillOnce( DoAll(SetArrayArgument<0>(license_test_data[0].file_data.begin(), license_test_data[0].file_data.end()), Return(size))); EXPECT_CALL(file, Remove(StrEq(license_path))).WillOnce(Return(true)); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Write(_, _)).Times(0); DeviceFiles device_files; EXPECT_TRUE(device_files.Init(&file, kSecurityLevelL1)); DeviceFiles::LicenseState license_state; CdmInitData pssh_data; CdmKeyMessage key_request; CdmKeyResponse key_response; CdmKeyMessage key_renewal_request; CdmKeyResponse key_renewal_response; std::string release_server_url; EXPECT_TRUE(device_files.RetrieveLicense( license_test_data[0].key_set_id, &license_state, &pssh_data, &key_request, &key_response, &key_renewal_request, &key_renewal_response, &release_server_url)); EXPECT_EQ(license_test_data[0].license_state, license_state); EXPECT_EQ(license_test_data[0].pssh_data, pssh_data); EXPECT_EQ(license_test_data[0].key_request, key_request); EXPECT_EQ(license_test_data[0].key_response, key_response); EXPECT_EQ(license_test_data[0].key_request, key_request); EXPECT_EQ(license_test_data[0].key_response, key_response); EXPECT_TRUE(device_files.DeleteLicense(license_test_data[0].key_set_id)); EXPECT_FALSE(device_files.LicenseExists(license_test_data[0].key_set_id)); } } // namespace wvcdm