Files
ce_cdm/core/test/device_files_unittest.cpp
Joey Parrish 0546ee6732 Source release v3.0.0-0-g8d3792b-ce + third_party
Change-Id: I399e71ddfffcd436171d1c60283c63ab4658e0b1
2015-06-19 15:13:49 -07:00

2357 lines
136 KiB
C++

// Copyright 2013 Google Inc. All Rights Reserved.
#include <string>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "device_files.h"
#include "file_store.h"
#include "properties.h"
#include "string_conversions.h"
#include "wv_cdm_constants.h"
#include "wv_cdm_types.h"
namespace wvcdm {
namespace {
const uint32_t kCertificateLen = 700;
const uint32_t kWrappedKeyLen = 500;
const uint32_t kProtobufEstimatedOverhead = 75;
const uint32_t kLicenseRequestLen = 300;
const uint32_t kLicenseLen = 500;
const uint32_t kProviderSessionTokenLen = 128;
// 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;
int64_t playback_start_time;
int64_t last_playback_time;
std::string app_parameters;
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,
a2bs_hex("0801121030313233343536373839414243444546"),
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"),
a2bs_hex(
"080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002"
"2800124108011801301E4239687474703A2F2F6B69723033666370673137"
"342E7769646576696E652E6E65742F7769646576696E652F6367692D6269"
"6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A"
"5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5"
"D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327"
"E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132"
"3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C"
"7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE"
"172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB"
"B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D"
"A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1"
"ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501"
"DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0"
"85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81"
"9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE"
"16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13"
"29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48"
"6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8"
"F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47"
"97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"),
a2bs_hex(
"08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E"
"112002280018022A0C31353532333030360000000030151A20C30375683C"
"4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27"),
a2bs_hex(
"0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228"
"0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF"
"A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0"
"BEA6CABACA1C2C"),
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, "",
a2bs_hex(
"0AA8150802100122A1150801121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
"E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690"
"4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51"
"52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580"
"0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC"
"EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF"
"C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD"
"CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10"
"BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083"
"94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8"
"690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B"
"BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605"
"9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99"
"1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571"
"A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0"
"02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0"
"282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12"
"57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583"
"3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB"
"8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C"
"5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2"
"AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E"
"925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF"
"6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A"
"60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC"
"D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF"
"3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA"
"E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597"
"83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0"
"FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84"
"A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9"
"6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B"
"6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D"
"80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027"
"A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7"
"F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6"
"16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B"
"61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150"
"A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F"
"1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343"
"239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964"
"12144C474D433230313231303035303036333932373812250A230A140801121030313"
"23334353637383941424344454610021A09393837363534333231180120002A0C3339"
"3430373934373337000030151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA"
"125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B7"
"2CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF68064B0FE5"
"13FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB22CD2B63131908DE4"
"D88795BB931CEA38452CC568BE25032245E372F07A1297F51748C7EA02F2C88360AFE"
"7ABBC71DCDD5366126258E5AFA27C2A20B339FA1E7AE925B494B361F6F7116F20BE8E"
"E6E446146027F4FD4300F4A0B0A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8"
"D2B8FA38732A57697C316C180717C182A971C94E4AC4C7DF8F161CB8CC122F6040802"
"12CC020A190A0939383736353433323112084B9F26DAB8B06E1120022800124108011"
"801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E"
"6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A6612102531D"
"FD6CCEA511D00F8C0172F1189AA1A5057FF9D9DBD5A205B1DEB075E4A90467C1E074C"
"DE6071BFF831AD590BD5D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2"
"FEED17A3327E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A103031"
"323334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C7E1A208"
"84EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE172E7C9736200242"
"340A2050BFE71BB1BA683E35E0B49BB33048E5103FBBB9C3E1CD6EBCDA7DD485DBAF4"
"31210D69D6F14C95CB6CFDB998E50D00F4DA020DBDFA68F051A20AE5D6895E70F86F4"
"2F5FE3C58A505A865D05AB94B1ABAA6CC59C3322F61C458D228002331F2BE95B5C796"
"E0921CC27A7295501DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA"
"8BE6AAD085AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B819"
"F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE16AB04493E"
"7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E1329A9921604E6F80CB14"
"8AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D486294860DFB4F4C42D57D9542B761"
"79E179DD4AA23F9F7B2AE432B39E4CE8F156E84877DDA781AAAAFC797FF75AFE2019A"
"DC3A2E419BF0253C705BD4797A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0"
"C7D29252F52FD52A5708011231121D1A1B0A190A0939383736353433323112084B9F2"
"6DAB8B06E112002280018022A0C31353532333030360000000030151A20C30375683C"
"4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A2732610802123B0A1"
"90A0939383736353433323112084B9F26DAB8B06E112002280112001A16200342120A"
"106B63746C0000000000ECDCBE0000000020DBDFA68F051A20182F029E35047A3841F"
"A176C74E5B387350E8D58DEA6878FF0BEA6CABACA1C2C3A2E68747470733A2F2F7465"
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
"365400048001220CD0599C2B85D9F2D573AC7893CE77CB5A10B326828BA8C89047505"
"A8C9B606AC")},
// license 1
{"ksidC8EAA2579A282EB0", DeviceFiles::kLicenseStateReleasing,
a2bs_hex("0801121030313233343536373839414243444546"),
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"),
a2bs_hex(
"080212CC020A190A093938373635343332311208F97F2B3856CBB3DD2002"
"2800124108011801301E4239687474703A2F2F6B69723033666370673137"
"342E7769646576696E652E6E65742F7769646576696E652F6367692D6269"
"6E2F64726D2E6367691A661210C5C43FE0178AEE7B85042F749D5A40251A"
"5013A1501E0F90A64E103336944A37BAAAEAC17E46E880DF6EA23A7A890D"
"A082CBBF82710B8C3982E8AB25A208A89EEFB5250D4B2CCC2F362856E05D"
"1941E387801A19886B1F3AAE60D06EDA400087B06920011A7E0A10303132"
"333435363738394142434445461210A34D2B04D596DFE1DC29CFDF116E39"
"211A2031AD1B369D225842A14B5D5F8366F5FF8EB94AA7CD13EB45BA7291"
"68E19D5F5F200242340A20A0D6D65CC677C12B86A7A99F89F446BCFDA185"
"44B15B2FEF8349ED5C247F7BE91210ED8D58320B0F4F948F960C7D49872C"
"DE2083E5A68F051A207481A2B82C83DF3090D57EDC042711A42CF4F87E79"
"CE136DAFE25F48F4A9068322800256113CA771F4250CAD2928161D07B525"
"61019003DBFBD362F20587D51BD999D57D2B035BC115C54C8B4BC37661A6"
"6A101DE5B42D82E582309AFD8E211C947A2D33CAFB58F89EEE2DA9524614"
"0311134429D8A5D15E03A169B0EB2579DA3BD6E4322D6C46EE964F6931CF"
"9DA52FB59B1D3B9BCC5959211CC23D97690FA8E869ADF68BCDA8A1211DDB"
"EBF967617AF0BFDA73E0AE79D8A7CCED208602EDC72CEF44A02901A52EEB"
"87CF9841D186BC95A65956BAD48F3C9E43F027CC03B73DFF5CAFC0B64727"
"E2D7B3A9CF25F97C475207C8A9DF091A585288A71AE64B7B2089871F7272"
"381CCBEF55EBF3DCB21B134FE48BFD5299DCCA6B01B55EEA61F9F990D0AF"),
a2bs_hex(
"08011231121D1A1B0A190A093938373635343332311208F97F2B3856CBB3"
"DD2002280018022A0C33333932383235393733000030151A209ADE9B0A41"
"1583962BDA31BE5BE937E589BB3DCC06F6F4C48FBE4FAE86DC9ABA"),
a2bs_hex(
"0802123B0A190A093938373635343332311208F97F2B3856CBB3DD200228"
"0112001A16200342120A106B63746C00000000CA3A6A75000000002083E5"
"A68F051A20BDA6A56F7CBFD0942198F87C23A34AA5CBD64AFEB134277774"
"CCF8E789D815DD"),
"https://test.google.com/license/GetCencLicense", 0x12345678, 0x12348765,
"Name1 Value1",
a2bs_hex(
"0AC1150802100122BA150802121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
"E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690"
"4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51"
"52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580"
"0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC"
"EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF"
"C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD"
"CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10"
"BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083"
"94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8"
"690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B"
"BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605"
"9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99"
"1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571"
"A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0"
"02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0"
"282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12"
"57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583"
"3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB"
"8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C"
"5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2"
"AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E"
"925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF"
"6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A"
"60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC"
"D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF"
"3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA"
"E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597"
"83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0"
"FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84"
"A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9"
"6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B"
"6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D"
"80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027"
"A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7"
"F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6"
"16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B"
"61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150"
"A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F"
"1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343"
"239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964"
"12144C474D433230313231303035303036333932373812250A230A140801121030313"
"23334353637383941424344454610021A09393837363534333231180120002A0C3838"
"3730313633350000000030151A80023F7318E29C5A50C8ADAA4B09ADCD97B75588B17"
"002C5C2BC9AFA35C53098AF22DF5CC300407CD2E84EBE01911C785513649E2CCF4E42"
"9020D3B93F3A54748C11ECFF4D62F562A4D3E96812F663D4F761C00C3E88ABD8A1DC1"
"0E017A44DD3E040775FED5F07649090D1142C9D21373CD604219E24935E10F287F20B"
"0E080FDF76B6096B24F82A3E37850DE229DE33EBCE7A0FA53F652C33007EA7027F95A"
"44C36D04CBD676EB5C0BF69508F45E0C3220D1706B0B851B3FCAF7AC2370EAD80C5D1"
"620887633A42024862FCEA9F95A719AAB989C1923C6452ECB0B75AF1CAFBFB06C5EC3"
"1BBF0EE4D16ACCC9AF05B77D61C4855491B3D4AC150F3BCB7AE536AF33322F6040802"
"12CC020A190A093938373635343332311208F97F2B3856CBB3DD20022800124108011"
"801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E"
"6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A661210C5C43"
"FE0178AEE7B85042F749D5A40251A5013A1501E0F90A64E103336944A37BAAAEAC17E"
"46E880DF6EA23A7A890DA082CBBF82710B8C3982E8AB25A208A89EEFB5250D4B2CCC2"
"F362856E05D1941E387801A19886B1F3AAE60D06EDA400087B06920011A7E0A103031"
"32333435363738394142434445461210A34D2B04D596DFE1DC29CFDF116E39211A203"
"1AD1B369D225842A14B5D5F8366F5FF8EB94AA7CD13EB45BA729168E19D5F5F200242"
"340A20A0D6D65CC677C12B86A7A99F89F446BCFDA18544B15B2FEF8349ED5C247F7BE"
"91210ED8D58320B0F4F948F960C7D49872CDE2083E5A68F051A207481A2B82C83DF30"
"90D57EDC042711A42CF4F87E79CE136DAFE25F48F4A9068322800256113CA771F4250"
"CAD2928161D07B52561019003DBFBD362F20587D51BD999D57D2B035BC115C54C8B4B"
"C37661A66A101DE5B42D82E582309AFD8E211C947A2D33CAFB58F89EEE2DA95246140"
"311134429D8A5D15E03A169B0EB2579DA3BD6E4322D6C46EE964F6931CF9DA52FB59B"
"1D3B9BCC5959211CC23D97690FA8E869ADF68BCDA8A1211DDBEBF967617AF0BFDA73E"
"0AE79D8A7CCED208602EDC72CEF44A02901A52EEB87CF9841D186BC95A65956BAD48F"
"3C9E43F027CC03B73DFF5CAFC0B64727E2D7B3A9CF25F97C475207C8A9DF091A58528"
"8A71AE64B7B2089871F7272381CCBEF55EBF3DCB21B134FE48BFD5299DCCA6B01B55E"
"EA61F9F990D0AF2A5708011231121D1A1B0A190A093938373635343332311208F97F2"
"B3856CBB3DD2002280018022A0C33333932383235393733000030151A209ADE9B0A41"
"1583962BDA31BE5BE937E589BB3DCC06F6F4C48FBE4FAE86DC9ABA32610802123B0A1"
"90A093938373635343332311208F97F2B3856CBB3DD2002280112001A16200342120A"
"106B63746C00000000CA3A6A75000000002083E5A68F051A20BDA6A56F7CBFD094219"
"8F87C23A34AA5CBD64AFEB134277774CCF8E789D815DD3A2E68747470733A2F2F7465"
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
"36540F8ACD1910148E58ED29101520F0A054E616D6531120656616C7565311220BE69"
"AAB25B481BCAF57B741518D9F9DB8E3A7A6911D10C53D4F4649D78393C65")},
// license 2
{"ksidE8C37662C88DC673", DeviceFiles::kLicenseStateReleasing,
a2bs_hex("0801121030313233343536373839414243444546"),
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"),
a2bs_hex(
"080212CC020A190A0939383736353433323112087AD49366C8D919132002"
"2800124108011801301E4239687474703A2F2F6B69723033666370673137"
"342E7769646576696E652E6E65742F7769646576696E652F6367692D6269"
"6E2F64726D2E6367691A6612109161841718D5D0A4C4368820F4D030721A"
"500F94F9BC0FF6B730709C6DEFD88D1CA8C7991A149D470493BDAD89E333"
"AFC949F77D995CEA5E3D3DA5F7DF84E90CD4A9B4E138EA5F7EA75A520A25"
"017D69A9460D46548259F82959304CDEFE41936BE420011A7E0A10303132"
"3334353637383941424344454612104F88BFEECE468B962BF09EA1257DA5"
"0B1A200D48C122E022033C3E67A6ED4DA99B8AEA6F4B9E78634A548C060F"
"49D39D9700200242340A209DE408B6F116F428C8E801C63AF34570A6C31D"
"72180AA11F85D8DD4BC1C4D35412104E73935C2CC38C21408C537B3A5F19"
"8B2081E7A68F051A20BC2696A2A1FBDF425675CAD455DEA2B44040D1F8F0"
"B6C675A28384CACFDF2F132280022D09FDA096972AA77FFEB09EA08AE882"
"E89AC8591B398452CFB1383CCA16611571E223FE8DE82CDE9111557B2A87"
"A253B87B822F037FB492DE4B91B8AD4DB2E2F8B2E81BF1DE36CC7520CB4B"
"B3516E18322777287310257F2EC7110332504756DA8BC873448E93BA05FD"
"1AEB7AD1016D7BBB7FF5E7111987005322E342679F3D241429AE930A479D"
"9F338699D3D6969A6479D1363AEB4AF19BDE9A73B33CD0EBFCF272FCEEC6"
"222AC08DCBD36077E0459D940BAE84ABA584700C02E70F3AE034ED7B764C"
"6EE5E85663D657270C9AB40D3109920AB1C1C5DA1358E384EDF673253C04"
"F20AA6B0CC98F421A4CD86C4C88042B0DE9902D5D00B6AD817B1A313ED5B"),
a2bs_hex(
"08011231121D1A1B0A190A0939383736353433323112087AD49366C8D919"
"132002280018022A0C35333631323234343600000030151A208CC3C7D328"
"DFACD43764C9FB582B858C8FF1D9863FF59C4D983478DB858AC32A"),
a2bs_hex(
"0802123B0A190A0939383736353433323112087AD49366C8D91913200228"
"0112001A16200342120A106B63746C000000001FF4944E000000002082E7"
"A68F051A2041EF0A9267D613D17AA90E1D1DA5BE091860E5E296D41D6D0F"
"75E73660C279B3"),
"https://test.google.com/license/GetCencLicense", 0x0123456789abcdef,
0x123456789abfedc, "Name1 Value1 Name2 Param2",
a2bs_hex(
"0AE7150802100122E0150802121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
"E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690"
"4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51"
"52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580"
"0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC"
"EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF"
"C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD"
"CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10"
"BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083"
"94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8"
"690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B"
"BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605"
"9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99"
"1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571"
"A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0"
"02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0"
"282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12"
"57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583"
"3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB"
"8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C"
"5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2"
"AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E"
"925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF"
"6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A"
"60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC"
"D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF"
"3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA"
"E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597"
"83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0"
"FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84"
"A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9"
"6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B"
"6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D"
"80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027"
"A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7"
"F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6"
"16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B"
"61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150"
"A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F"
"1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343"
"239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964"
"12144C474D433230313231303035303036333932373812250A230A140801121030313"
"23334353637383941424344454610021A09393837363534333231180120002A0C3130"
"3831353136393638000030151A80027EA7ADEF77500FBC6A6081E739E0C50E1BDE6DE"
"4AB391109386768A95A04A52BE6693A5A98A25AC8EB9CDD6F40DCCF86A3DA6C700E25"
"6A676BD3D7E492090DCF732C57333D9370F6D7AB87661701597099CD45C2BCDFF1D47"
"183E510D7A6D3561EFC7D4EB21814CB2CA0777F26DD491B4D01469BB81A701545E2D3"
"E98E1ADAB3A3BBD1D0433B312B3B5139E88D3A92520BA399B2BE3489A72C3629745E4"
"D8FC6DF6C8925A8FD8D6C809CA80DBC29030615A55523305BC64DDFF52A87BD0DE9EE"
"AB6445C5A1847E5E6FE8D640C7B07F3B066B911793F06E973A02FA6EDD274570C4CA9"
"82D353F1E72A5B77695D554B4FB554B46F5FA5B3B00805C136A9ED21FC222F6040802"
"12CC020A190A0939383736353433323112087AD49366C8D9191320022800124108011"
"801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E"
"6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A66121091618"
"41718D5D0A4C4368820F4D030721A500F94F9BC0FF6B730709C6DEFD88D1CA8C7991A"
"149D470493BDAD89E333AFC949F77D995CEA5E3D3DA5F7DF84E90CD4A9B4E138EA5F7"
"EA75A520A25017D69A9460D46548259F82959304CDEFE41936BE420011A7E0A103031"
"323334353637383941424344454612104F88BFEECE468B962BF09EA1257DA50B1A200"
"D48C122E022033C3E67A6ED4DA99B8AEA6F4B9E78634A548C060F49D39D9700200242"
"340A209DE408B6F116F428C8E801C63AF34570A6C31D72180AA11F85D8DD4BC1C4D35"
"412104E73935C2CC38C21408C537B3A5F198B2081E7A68F051A20BC2696A2A1FBDF42"
"5675CAD455DEA2B44040D1F8F0B6C675A28384CACFDF2F132280022D09FDA096972AA"
"77FFEB09EA08AE882E89AC8591B398452CFB1383CCA16611571E223FE8DE82CDE9111"
"557B2A87A253B87B822F037FB492DE4B91B8AD4DB2E2F8B2E81BF1DE36CC7520CB4BB"
"3516E18322777287310257F2EC7110332504756DA8BC873448E93BA05FD1AEB7AD101"
"6D7BBB7FF5E7111987005322E342679F3D241429AE930A479D9F338699D3D6969A647"
"9D1363AEB4AF19BDE9A73B33CD0EBFCF272FCEEC6222AC08DCBD36077E0459D940BAE"
"84ABA584700C02E70F3AE034ED7B764C6EE5E85663D657270C9AB40D3109920AB1C1C"
"5DA1358E384EDF673253C04F20AA6B0CC98F421A4CD86C4C88042B0DE9902D5D00B6A"
"D817B1A313ED5B2A5708011231121D1A1B0A190A0939383736353433323112087AD49"
"366C8D919132002280018022A0C35333631323234343600000030151A208CC3C7D328"
"DFACD43764C9FB582B858C8FF1D9863FF59C4D983478DB858AC32A32610802123B0A1"
"90A0939383736353433323112087AD49366C8D919132002280112001A16200342120A"
"106B63746C000000001FF4944E000000002082E7A68F051A2041EF0A9267D613D17AA"
"90E1D1DA5BE091860E5E296D41D6D0F75E73660C279B33A2E68747470733A2F2F7465"
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910152150A054E616D6531120C5661"
"6C756531204E616D653252160A0C4E616D653220506172616D321206506172616D321"
"2203653BA57F16FE28D66D9F7A76128B7AD7F33680815FF70A3684617DE1FBB0F9"
"F")}};
// 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,
a2bs_hex("0801121030313233343536373839414243444546"),
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"),
a2bs_hex(
"080212CC020A190A09393837363534333231120892BE96420F0D5BF32002"
"2800124108011801301E4239687474703A2F2F6B69723033666370673137"
"342E7769646576696E652E6E65742F7769646576696E652F6367692D6269"
"6E2F64726D2E6367691A661210BB2E2D2B9C39697794897E08262749B41A"
"50C0DED62431B1701F59E076E07EB0D2D43AEC6C589B35790739EB0B0ED4"
"7236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263E185F06AE37"
"BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A10303132"
"333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC"
"301A207448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65"
"228317843D200242340A207F287706380C8085A4E5F85843D1C3B379F9CE"
"19ED5A2DAAF476B8AFE10488BF12100C8CDB1DA4C9FEBE5BBB530FE0D3DA"
"8720F4DFB68F051A20F4BCCEEEA658C5DD18D7B841E6D8991E616B57B592"
"C44ED67050939B136815272280025CD92AB4672778CB865D528A2EAAAD06"
"435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659EA0271A1"
"F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD"
"88C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D797"
"0CB098889D3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66"
"CBDEC2DCFD23885144C776B98C8A7A176C4EA183085EF02D2060904ADA3C"
"B161F4D198A0279DA19D7001EB2D20C70ABAA04B3760CB165006F6CBA4BE"
"0A2628C0C8398C122FF0DCF9292590E3C37BC7DB20F3B0921268F41FE76B"
"D3EE764EBA13A22FDABC170860503FB93CC4A08D61102519D56A25EB9E30"),
a2bs_hex(
"08011231121D1A1B0A190A09393837363534333231120892BE96420F0D5B"
"F32002280018022A0C31393132353333373731000030151A20F4FDBECE54"
"7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC6"),
a2bs_hex(
"0802123B0A190A09393837363534333231120892BE96420F0D5BF3200228"
"0112001A16200342120A106B63746C0000000071FEF30B0000000020F4DF"
"B68F051A2000351030900858FCFD6977B67803ADFD1280AA661E6B0BD30B"
"08B2C467355129"),
"https://test.google.com/license/GetCencLicense", 0x0123456789abcdef,
0x123456789abfedc, "Name1 Value1 Name2 Value2 Name3 Value3",
a2bs_hex(
"0AB8150802100122B1150801121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
"7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82"
"6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD"
"721A2A97C088E60AFF0E9C8E03477A1B56B4C555C27CEAF55024375D8D3FB352DA4AA"
"A2E911C876CB1B36162922E9130CCC5FB72F8DD41D05DE6889C4814A7344BA8C605DE"
"399CA3CBBF1E7DE3411EDFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB55599183B8"
"4FDDC98AC3096B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42DE46B462CED2"
"ABABB96B610A47E0620AA10D862FEB66BB4F00B13DFE61703AE872F0B4850C39138FC"
"5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5D9624662081D7A5A1C581EB09619DD"
"9DD3020301000128800130011280026AB9AC42F1C17C1ECFB710BF2C35383F41CF7EF"
"AB0DFDCC69090C20DE141CB43055FD707C611CDAEE700076A1EBA32432D5C2B62A73B"
"8B1672AD2C4303598C02D34823A6BE387046937F55BB65F5B3571FDC6A1F0D9470310"
"03BA651F8E48BF33D66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091FE83AD"
"886A680F55AB62F306435BC0043825F6A401BB9C341230127D3298B67F82767050C95"
"769964B0B5C27A36FA76ED161ABE4B6C18556C807706509A5146ADD958AF79B49EDE4"
"8CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD1D27F8D80E1B6931C92AC8E5C3BEC0ADA"
"E621A3B78952485EBFC81A194BA75BBD2C821C28AEB5D21CBE0A270E55E1AB6050AB0"
"02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0"
"282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12"
"57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583"
"3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB"
"8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C"
"5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2"
"AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E"
"925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF"
"6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A"
"60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC"
"D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF"
"3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA"
"E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597"
"83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0"
"FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84"
"A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9"
"6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B"
"6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D"
"80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027"
"A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7"
"F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6"
"16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B"
"61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150"
"A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F"
"1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343"
"239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964"
"12144C474D433230313231303035303036333932373812250A230A140801121030313"
"23334353637383941424344454610021A09393837363534333231180120002A0C3330"
"3738303630323034000030151A8002B5CA9C6B097EF2CBE2F8136C761130F3456ED70"
"6127260151B4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8C6B8993A5D33"
"E24B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08A6F1080C19340A068E575"
"568AE5EBADDD638FB435AC3EEC901E5F250BC974C498D6378C8BC1F4BACCED5725B8B"
"77160444923DA3B729DCB681186565B49EEFFE27CF1631F09EC31E543AAFE9F5996FB"
"0BEAA5F80305D67ECF173A8BD4A3B2CC75CEC3AA5881FF433E80838E1E1FA23CE7F22"
"346DDDF7FEC3DB0CE2C3F845CF9471088A022C8D0A63860764AE558BD0B5F66D78881"
"ADBF2D398F9BA349EFB2532C61E243DD45BB11C99422D13A82B7AAE967122F6040802"
"12CC020A190A09393837363534333231120892BE96420F0D5BF320022800124108011"
"801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E"
"6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A661210BB2E2"
"D2B9C39697794897E08262749B41A50C0DED62431B1701F59E076E07EB0D2D43AEC6C"
"589B35790739EB0B0ED47236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263"
"E185F06AE37BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A103031"
"32333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC301A207"
"448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65228317843D200242"
"340A207F287706380C8085A4E5F85843D1C3B379F9CE19ED5A2DAAF476B8AFE10488B"
"F12100C8CDB1DA4C9FEBE5BBB530FE0D3DA8720F4DFB68F051A20F4BCCEEEA658C5DD"
"18D7B841E6D8991E616B57B592C44ED67050939B136815272280025CD92AB4672778C"
"B865D528A2EAAAD06435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659"
"EA0271A1F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD8"
"8C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D7970CB098889D"
"3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66CBDEC2DCFD23885144C"
"776B98C8A7A176C4EA183085EF02D2060904ADA3CB161F4D198A0279DA19D7001EB2D"
"20C70ABAA04B3760CB165006F6CBA4BE0A2628C0C8398C122FF0DCF9292590E3C37BC"
"7DB20F3B0921268F41FE76BD3EE764EBA13A22FDABC170860503FB93CC4A08D611025"
"19D56A25EB9E302A5708011231121D1A1B0A190A09393837363534333231120892BE9"
"6420F0D5BF32002280018022A0C31393132353333373731000030151A20F4FDBECE54"
"7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC632610802123B0A1"
"90A09393837363534333231120892BE96420F0D5BF32002280112001A16200342120A"
"106B63746C0000000071FEF30B0000000020F4DFB68F051A2000351030900858FCFD6"
"977B67803ADFD1280AA661E6B0BD30B08B2C4673551293A2E68747470733A2F2F7465"
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD191011220C7ACA00F6877DAAE2E8F50"
"126C3222C2E584A50D08EFA75BC4FC091E7034E1DD")},
// license being released. all fields are identical except for license
// state and hashed file data
{"", DeviceFiles::kLicenseStateReleasing, "", "", "", "", "", "", 0, 0, "",
a2bs_hex(
"0AB8150802100122B1150802121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
"7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82"
"6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD"
"721A2A97C088E60AFF0E9C8E03477A1B56B4C555C27CEAF55024375D8D3FB352DA4AA"
"A2E911C876CB1B36162922E9130CCC5FB72F8DD41D05DE6889C4814A7344BA8C605DE"
"399CA3CBBF1E7DE3411EDFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB55599183B8"
"4FDDC98AC3096B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42DE46B462CED2"
"ABABB96B610A47E0620AA10D862FEB66BB4F00B13DFE61703AE872F0B4850C39138FC"
"5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5D9624662081D7A5A1C581EB09619DD"
"9DD3020301000128800130011280026AB9AC42F1C17C1ECFB710BF2C35383F41CF7EF"
"AB0DFDCC69090C20DE141CB43055FD707C611CDAEE700076A1EBA32432D5C2B62A73B"
"8B1672AD2C4303598C02D34823A6BE387046937F55BB65F5B3571FDC6A1F0D9470310"
"03BA651F8E48BF33D66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091FE83AD"
"886A680F55AB62F306435BC0043825F6A401BB9C341230127D3298B67F82767050C95"
"769964B0B5C27A36FA76ED161ABE4B6C18556C807706509A5146ADD958AF79B49EDE4"
"8CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD1D27F8D80E1B6931C92AC8E5C3BEC0ADA"
"E621A3B78952485EBFC81A194BA75BBD2C821C28AEB5D21CBE0A270E55E1AB6050AB0"
"02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0"
"282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12"
"57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583"
"3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB"
"8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C"
"5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2"
"AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E"
"925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF"
"6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A"
"60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC"
"D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF"
"3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA"
"E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597"
"83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0"
"FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84"
"A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9"
"6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B"
"6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D"
"80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027"
"A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7"
"F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6"
"16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B"
"61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150"
"A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F"
"1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343"
"239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964"
"12144C474D433230313231303035303036333932373812250A230A140801121030313"
"23334353637383941424344454610021A09393837363534333231180120002A0C3330"
"3738303630323034000030151A8002B5CA9C6B097EF2CBE2F8136C761130F3456ED70"
"6127260151B4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8C6B8993A5D33"
"E24B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08A6F1080C19340A068E575"
"568AE5EBADDD638FB435AC3EEC901E5F250BC974C498D6378C8BC1F4BACCED5725B8B"
"77160444923DA3B729DCB681186565B49EEFFE27CF1631F09EC31E543AAFE9F5996FB"
"0BEAA5F80305D67ECF173A8BD4A3B2CC75CEC3AA5881FF433E80838E1E1FA23CE7F22"
"346DDDF7FEC3DB0CE2C3F845CF9471088A022C8D0A63860764AE558BD0B5F66D78881"
"ADBF2D398F9BA349EFB2532C61E243DD45BB11C99422D13A82B7AAE967122F6040802"
"12CC020A190A09393837363534333231120892BE96420F0D5BF320022800124108011"
"801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E"
"6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A661210BB2E2"
"D2B9C39697794897E08262749B41A50C0DED62431B1701F59E076E07EB0D2D43AEC6C"
"589B35790739EB0B0ED47236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263"
"E185F06AE37BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A103031"
"32333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC301A207"
"448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65228317843D200242"
"340A207F287706380C8085A4E5F85843D1C3B379F9CE19ED5A2DAAF476B8AFE10488B"
"F12100C8CDB1DA4C9FEBE5BBB530FE0D3DA8720F4DFB68F051A20F4BCCEEEA658C5DD"
"18D7B841E6D8991E616B57B592C44ED67050939B136815272280025CD92AB4672778C"
"B865D528A2EAAAD06435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659"
"EA0271A1F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD8"
"8C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D7970CB098889D"
"3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66CBDEC2DCFD23885144C"
"776B98C8A7A176C4EA183085EF02D2060904ADA3CB161F4D198A0279DA19D7001EB2D"
"20C70ABAA04B3760CB165006F6CBA4BE0A2628C0C8398C122FF0DCF9292590E3C37BC"
"7DB20F3B0921268F41FE76BD3EE764EBA13A22FDABC170860503FB93CC4A08D611025"
"19D56A25EB9E302A5708011231121D1A1B0A190A09393837363534333231120892BE9"
"6420F0D5BF32002280018022A0C31393132353333373731000030151A20F4FDBECE54"
"7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC632610802123B0A1"
"90A09393837363534333231120892BE96420F0D5BF32002280112001A16200342120A"
"106B63746C0000000071FEF30B0000000020F4DFB68F051A2000351030900858FCFD6"
"977B67803ADFD1280AA661E6B0BD30B08B2C4673551293A2E68747470733A2F2F7465"
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910112203D8933A735A22FE27AA956"
"802B597529E8FFCB91A5F3CBBB3CE0C38E4AF3DC88")}};
// Application parameters were added to the License message. This data
// is used to verify that a License saved without application parameters can
// be read out correctly by an updated version of the CDM.
LicenseInfo license_app_parameters_backwards_compatibility_test_data = {
"ksid54C57C966E23CEF5", DeviceFiles::kLicenseStateActive,
a2bs_hex("0801121030313233343536373839414243444546"),
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"),
a2bs_hex(
"080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002"
"2800124108011801301E4239687474703A2F2F6B69723033666370673137"
"342E7769646576696E652E6E65742F7769646576696E652F6367692D6269"
"6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A"
"5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5"
"D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327"
"E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132"
"3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C"
"7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE"
"172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB"
"B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D"
"A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1"
"ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501"
"DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0"
"85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81"
"9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE"
"16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13"
"29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48"
"6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8"
"F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47"
"97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"),
a2bs_hex(
"08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E"
"112002280018022A0C31353532333030360000000030151A20C30375683C"
"4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27"),
a2bs_hex(
"0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228"
"0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF"
"A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0"
"BEA6CABACA1C2C"),
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, "",
a2bs_hex(
"0AA8150802100122A1150801121408011210303132333435363738394142434445461"
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
"E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690"
"4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51"
"52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580"
"0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC"
"EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF"
"C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD"
"CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10"
"BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083"
"94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8"
"690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B"
"BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605"
"9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99"
"1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571"
"A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0"
"02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0"
"282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12"
"57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583"
"3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB"
"8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C"
"5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2"
"AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E"
"925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF"
"6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A"
"60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC"
"D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF"
"3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA"
"E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597"
"83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0"
"FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84"
"A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9"
"6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B"
"6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D"
"80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027"
"A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7"
"F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6"
"16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B"
"61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150"
"A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F"
"1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343"
"239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964"
"12144C474D433230313231303035303036333932373812250A230A140801121030313"
"23334353637383941424344454610021A09393837363534333231180120002A0C3339"
"3430373934373337000030151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA"
"125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B7"
"2CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF68064B0FE5"
"13FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB22CD2B63131908DE4"
"D88795BB931CEA38452CC568BE25032245E372F07A1297F51748C7EA02F2C88360AFE"
"7ABBC71DCDD5366126258E5AFA27C2A20B339FA1E7AE925B494B361F6F7116F20BE8E"
"E6E446146027F4FD4300F4A0B0A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8"
"D2B8FA38732A57697C316C180717C182A971C94E4AC4C7DF8F161CB8CC122F6040802"
"12CC020A190A0939383736353433323112084B9F26DAB8B06E1120022800124108011"
"801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E"
"6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A6612102531D"
"FD6CCEA511D00F8C0172F1189AA1A5057FF9D9DBD5A205B1DEB075E4A90467C1E074C"
"DE6071BFF831AD590BD5D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2"
"FEED17A3327E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A103031"
"323334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C7E1A208"
"84EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE172E7C9736200242"
"340A2050BFE71BB1BA683E35E0B49BB33048E5103FBBB9C3E1CD6EBCDA7DD485DBAF4"
"31210D69D6F14C95CB6CFDB998E50D00F4DA020DBDFA68F051A20AE5D6895E70F86F4"
"2F5FE3C58A505A865D05AB94B1ABAA6CC59C3322F61C458D228002331F2BE95B5C796"
"E0921CC27A7295501DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA"
"8BE6AAD085AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B819"
"F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE16AB04493E"
"7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E1329A9921604E6F80CB14"
"8AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D486294860DFB4F4C42D57D9542B761"
"79E179DD4AA23F9F7B2AE432B39E4CE8F156E84877DDA781AAAAFC797FF75AFE2019A"
"DC3A2E419BF0253C705BD4797A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0"
"C7D29252F52FD52A5708011231121D1A1B0A190A0939383736353433323112084B9F2"
"6DAB8B06E112002280018022A0C31353532333030360000000030151A20C30375683C"
"4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A2732610802123B0A1"
"90A0939383736353433323112084B9F26DAB8B06E112002280112001A16200342120A"
"106B63746C0000000000ECDCBE0000000020DBDFA68F051A20182F029E35047A3841F"
"A176C74E5B387350E8D58DEA6878FF0BEA6CABACA1C2C3A2E68747470733A2F2F7465"
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
"365400048001220CD0599C2B85D9F2D573AC7893CE77CB5A10B326828BA8C89047505"
"A8C9B606AC")};
struct UsageInfo {
std::string provider_session_token;
std::string license_request;
std::string license;
std::string file_data;
};
UsageInfo kUsageInfoTestData[] = {
{"", "", "", // 0 usage info records
a2bs_hex(
"0A06080210012A00122095053501C5FA405B7EF01DA94685C6B20CB36493"
"A9CF1653B720E2BEA3B77929")},
{// 1 usage info record
a2bs_hex(
"924B035FBDA56AE5EF0ED05A08DE7AECC8ABE1835E0C4A548F7803937F4C3B4520EB7"
"F3334FFCDFA00DE56408F09D5019FCE87072D0DC6789817468974B2EA51EE3944B8D7"
"E0A88E4F16EBB80F03BD845231A01E6146841CBAEF0134DCD9300DB2D92732992C0F2"
"310D8E386FB31C67B9477010DEF9D99C4272589572A26A17E"),
a2bs_hex(
"1E6FFBE66FC6153E7749906EC8F684E819467E16CAF317F315DB32B6D3FDD1A8E8A09"
"4174D92D063B88E4835EAB78BD09541EA7FE72F132EB7364E154BC1548FC40EC70927"
"75531508C95F9ED5D76F36BC0C198C3A33A1F9415B343905D6BE37645E6800F053B1D"
"A9A20286EFCBBC320424ADF7FB6E3D5D8E86C35E576A1A2A37D344A419C0F0034A1B5"
"F767D3C61D90DCA1119E5024C34EDE8FA7DD128696D8C435410F218E52A853AD214FD"
"05D0F8B3CB4832CFCD97FE159E6DEE64CE82CDAEC0321AE71B3BCBAE42DF9EA65E42E"
"151827086EADE71C138B972CC3992CF9ADA944C063816352ED8658D3FA07BE0F32239"
"E74A65932B069AAC4E8386DB59154AF9AEF71448128C66E510445294F44E511BD9B1A"
"F19D4D67E99363093BE888D4B2AB841CAFF252CAD13EDF8E"),
a2bs_hex(
"40FC62339728520E6C0C09907C26F3FB78287231661952A8B699E47AE241B999C029F"
"D2067836DC4BC64F66998A3ECD197DAE36F808A2E5A4C5BF25DD580E52B1C39A8B037"
"72BF82D58929766F2DA04F0E616F92B3A0EB75661B8FF5DE1EB807C990F9E6BA991C8"
"BAD5EB63B37E8663A4E22AA9DB2015D3DF8BED1C8313F85F13B9483C7A39C592436C8"
"B13C23F78F55CE812795335059F7F527CA580306A0AEE5A6D957A91F498F64AA2EFC6"
"780716400E17C7EEA30B2E6523B902986995E003C2D919A7DC7C0122CE9410037A660"
"2B59A63B5C89473D4E02DE35C1F01B12ADB48A3D94D43693F08268FECCC78DAF6F4C3"
"5FA32C538CD73FBF3CEA274B01179C02473486311956E5A0C78E44C59B2F34FF24B06"
"53A6379A2F5F6F51467CAE26D55CC5BBDCFC9BCFA7B8C5CBF82EBE7BD340C3DAE6374"
"D0692052C529AA33D7A6799C8F1F59C78575E51F707013026CC4F83F6B3328EE6FB1A"
"C91929A4491338E93D10EE6193014A73BA241A9A833EA835217894EB4FD4BDB8904A5"
"999928325D0AC31B6D58609EDD9D85E88F74B5BD6FA7BDD83C51EEB91633ED267ACA2"
"E103904BBE4C031A6483858FBAD74DACD01711F7B882749FFFBA0DB6C7D7109D82989"
"C7D4DB5A0F1E7506AC24C89CECAF231EFF99F96AD76E57DABDD3C2DFBA7BAA869A771"
"F561B165987E552824B0C914E708E425C3"),
a2bs_hex(
"0AB307080210012AAC070AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE"
"1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D"
"0DC6789817468974B2EA51EE3944B8D7E0A88E4F16EBB80F03BD845231A01E6146841"
"CBAEF0134DCD9300DB2D92732992C0F2310D8E386FB31C67B9477010DEF9D99C42725"
"89572A26A17E12AC021E6FFBE66FC6153E7749906EC8F684E819467E16CAF317F315D"
"B32B6D3FDD1A8E8A094174D92D063B88E4835EAB78BD09541EA7FE72F132EB7364E15"
"4BC1548FC40EC7092775531508C95F9ED5D76F36BC0C198C3A33A1F9415B343905D6B"
"E37645E6800F053B1DA9A20286EFCBBC320424ADF7FB6E3D5D8E86C35E576A1A2A37D"
"344A419C0F0034A1B5F767D3C61D90DCA1119E5024C34EDE8FA7DD128696D8C435410"
"F218E52A853AD214FD05D0F8B3CB4832CFCD97FE159E6DEE64CE82CDAEC0321AE71B3"
"BCBAE42DF9EA65E42E151827086EADE71C138B972CC3992CF9ADA944C063816352ED8"
"658D3FA07BE0F32239E74A65932B069AAC4E8386DB59154AF9AEF71448128C66E5104"
"45294F44E511BD9B1AF19D4D67E99363093BE888D4B2AB841CAFF252CAD13EDF8E1AF"
"40340FC62339728520E6C0C09907C26F3FB78287231661952A8B699E47AE241B999C0"
"29FD2067836DC4BC64F66998A3ECD197DAE36F808A2E5A4C5BF25DD580E52B1C39A8B"
"03772BF82D58929766F2DA04F0E616F92B3A0EB75661B8FF5DE1EB807C990F9E6BA99"
"1C8BAD5EB63B37E8663A4E22AA9DB2015D3DF8BED1C8313F85F13B9483C7A39C59243"
"6C8B13C23F78F55CE812795335059F7F527CA580306A0AEE5A6D957A91F498F64AA2E"
"FC6780716400E17C7EEA30B2E6523B902986995E003C2D919A7DC7C0122CE9410037A"
"6602B59A63B5C89473D4E02DE35C1F01B12ADB48A3D94D43693F08268FECCC78DAF6F"
"4C35FA32C538CD73FBF3CEA274B01179C02473486311956E5A0C78E44C59B2F34FF24"
"B0653A6379A2F5F6F51467CAE26D55CC5BBDCFC9BCFA7B8C5CBF82EBE7BD340C3DAE6"
"374D0692052C529AA33D7A6799C8F1F59C78575E51F707013026CC4F83F6B3328EE6F"
"B1AC91929A4491338E93D10EE6193014A73BA241A9A833EA835217894EB4FD4BDB890"
"4A5999928325D0AC31B6D58609EDD9D85E88F74B5BD6FA7BDD83C51EEB91633ED267A"
"CA2E103904BBE4C031A6483858FBAD74DACD01711F7B882749FFFBA0DB6C7D7109D82"
"989C7D4DB5A0F1E7506AC24C89CECAF231EFF99F96AD76E57DABDD3C2DFBA7BAA869A"
"771F561B165987E552824B0C914E708E425C3122051C8F84C5713500997DC5B325BAE"
"D208B224DFAEB2B034E58046A62F503FED6E")},
{// 2 usage info records
a2bs_hex(
"7290396E183156BDF830B7BF31BA762CB2675528C9004FD24A61DAFB587ABCF1D36F8"
"7795EE0B3DA0B425616A66C82349B2E3BB8841C1335536865F919ED2AE671487B608B"
"21A362D888E0AB4F7AB7175B82F108617C3503F175435788AECAF7FFBFE76995D93CD"
"79424A843A247A8D8A6054A5B5404C9C057AACAD91A203229"),
a2bs_hex(
"3478A2D76DEB90BE713B03A11037EA7C305D1AF65099E3F2B92C4D4443A8F481C1177"
"DEF0A3CB49BA5F1448A10AF1207AD2D361B4A1F961B4B1F215B76A9A5005B414EF45E"
"AFBCF2636ABFC01413B27DD11871103579F8C041A799E22888D9ADB798E92A5E29BC4"
"6DECBC90991C65FE151C49F18068C1B65D0E90A9ECDA9248B87C120D5FD8EC81D4D36"
"B529FB2DAD39E0D39578B13B158E2B07C752D86F1A9D8160C93930C1F4F9E1D0D8E2C"
"5AB308732EB27722A6BF8BE852624C2BE3E4FE85819B89BEBA6535FCFBE85FA63A57B"
"D0FBAF284C64FFD97A146B76B3F37B576FC091C03E2222FBD24C2211344B7E2417EFC"
"36C4A54DCCC460CF810E7EA8AC6386D6AB567C819FED88A22CE55EF9BBE62C2CBC7AE"
"EDE5E5A69FF3472418CE2F4514496C59D26E72F3BFE0131F"),
a2bs_hex(
"C45FDCB3296A0EBE24FF381E027E6E2EF1AC289C67D3B858330669A81E8131583D2F1"
"40FD64615BDED0ED8316ABFD9C7E887433E1CAA6EA8E0C4F87ADB2A7FC3CF6FF87A7F"
"02AFF03BF5DB640AD8DDB572C41532E673618DCD8C33EF2BFE4E25EE821DF7D742B09"
"90398543B16EFCDBB03C6327B79D3664CED442E894020F4410ECC178C92AAEDFE39DC"
"563AC226FE9E0EF22E1C896C4F2835CDFDCD50B6C4DBA2B27A3B65DE3963D0A5F6E44"
"2A3C32008AB9D1ACBE4F366990EB43F8EE213B71E98DA090282680ABDD649BECA8970"
"0764561379F1DD23490CE967632ECA349AF8E1CBFA1F3A4F39F453614C8FFB5A17975"
"6243CB1FDB515834229BC64917C47A2F2E1116FAAC13368015312C31FD41215106469"
"BEE77D0EF2FE10CF645B3E82902EAF53A676933D0EC433949C1833BE52E76602CC3E4"
"E784C002E20624BCE0F38F9CBC478439899DA7F15554D0ACADEC140C00C8FA8FC9886"
"2D9933938781B30CB9C76899B3A48DBF170DDA0A18ED37D77F048ABBC85CB19469638"
"C2A32AA3180CF3943BD6B8C5CB26F2EA70868F18B0707C882054141086997A1AE5B70"
"9D4D0AA2B358990F244BA76C8E40791D29A0C63C9EF620B97FDFFA9B671E5A65AFCC1"
"C94CAACE0443E9D91F14028935BEA3988831BEBBFD3EB7C3A5AC9605B3534712A0912"
"4345ACB09665E357E58946871BC140D365"),
a2bs_hex(
"0ADF0E080210012AD80E0AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE"
"1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D"
"0DC6789817468974B2EA51EE3944B8D7E0A88E4F16EBB80F03BD845231A01E6146841"
"CBAEF0134DCD9300DB2D92732992C0F2310D8E386FB31C67B9477010DEF9D99C42725"
"89572A26A17E12AC021E6FFBE66FC6153E7749906EC8F684E819467E16CAF317F315D"
"B32B6D3FDD1A8E8A094174D92D063B88E4835EAB78BD09541EA7FE72F132EB7364E15"
"4BC1548FC40EC7092775531508C95F9ED5D76F36BC0C198C3A33A1F9415B343905D6B"
"E37645E6800F053B1DA9A20286EFCBBC320424ADF7FB6E3D5D8E86C35E576A1A2A37D"
"344A419C0F0034A1B5F767D3C61D90DCA1119E5024C34EDE8FA7DD128696D8C435410"
"F218E52A853AD214FD05D0F8B3CB4832CFCD97FE159E6DEE64CE82CDAEC0321AE71B3"
"BCBAE42DF9EA65E42E151827086EADE71C138B972CC3992CF9ADA944C063816352ED8"
"658D3FA07BE0F32239E74A65932B069AAC4E8386DB59154AF9AEF71448128C66E5104"
"45294F44E511BD9B1AF19D4D67E99363093BE888D4B2AB841CAFF252CAD13EDF8E1AF"
"40340FC62339728520E6C0C09907C26F3FB78287231661952A8B699E47AE241B999C0"
"29FD2067836DC4BC64F66998A3ECD197DAE36F808A2E5A4C5BF25DD580E52B1C39A8B"
"03772BF82D58929766F2DA04F0E616F92B3A0EB75661B8FF5DE1EB807C990F9E6BA99"
"1C8BAD5EB63B37E8663A4E22AA9DB2015D3DF8BED1C8313F85F13B9483C7A39C59243"
"6C8B13C23F78F55CE812795335059F7F527CA580306A0AEE5A6D957A91F498F64AA2E"
"FC6780716400E17C7EEA30B2E6523B902986995E003C2D919A7DC7C0122CE9410037A"
"6602B59A63B5C89473D4E02DE35C1F01B12ADB48A3D94D43693F08268FECCC78DAF6F"
"4C35FA32C538CD73FBF3CEA274B01179C02473486311956E5A0C78E44C59B2F34FF24"
"B0653A6379A2F5F6F51467CAE26D55CC5BBDCFC9BCFA7B8C5CBF82EBE7BD340C3DAE6"
"374D0692052C529AA33D7A6799C8F1F59C78575E51F707013026CC4F83F6B3328EE6F"
"B1AC91929A4491338E93D10EE6193014A73BA241A9A833EA835217894EB4FD4BDB890"
"4A5999928325D0AC31B6D58609EDD9D85E88F74B5BD6FA7BDD83C51EEB91633ED267A"
"CA2E103904BBE4C031A6483858FBAD74DACD01711F7B882749FFFBA0DB6C7D7109D82"
"989C7D4DB5A0F1E7506AC24C89CECAF231EFF99F96AD76E57DABDD3C2DFBA7BAA869A"
"771F561B165987E552824B0C914E708E425C30AA9070A80017290396E183156BDF830"
"B7BF31BA762CB2675528C9004FD24A61DAFB587ABCF1D36F87795EE0B3DA0B425616A"
"66C82349B2E3BB8841C1335536865F919ED2AE671487B608B21A362D888E0AB4F7AB7"
"175B82F108617C3503F175435788AECAF7FFBFE76995D93CD79424A843A247A8D8A60"
"54A5B5404C9C057AACAD91A20322912AC023478A2D76DEB90BE713B03A11037EA7C30"
"5D1AF65099E3F2B92C4D4443A8F481C1177DEF0A3CB49BA5F1448A10AF1207AD2D361"
"B4A1F961B4B1F215B76A9A5005B414EF45EAFBCF2636ABFC01413B27DD11871103579"
"F8C041A799E22888D9ADB798E92A5E29BC46DECBC90991C65FE151C49F18068C1B65D"
"0E90A9ECDA9248B87C120D5FD8EC81D4D36B529FB2DAD39E0D39578B13B158E2B07C7"
"52D86F1A9D8160C93930C1F4F9E1D0D8E2C5AB308732EB27722A6BF8BE852624C2BE3"
"E4FE85819B89BEBA6535FCFBE85FA63A57BD0FBAF284C64FFD97A146B76B3F37B576F"
"C091C03E2222FBD24C2211344B7E2417EFC36C4A54DCCC460CF810E7EA8AC6386D6AB"
"567C819FED88A22CE55EF9BBE62C2CBC7AEEDE5E5A69FF3472418CE2F4514496C59D2"
"6E72F3BFE0131F1AF403C45FDCB3296A0EBE24FF381E027E6E2EF1AC289C67D3B8583"
"30669A81E8131583D2F140FD64615BDED0ED8316ABFD9C7E887433E1CAA6EA8E0C4F8"
"7ADB2A7FC3CF6FF87A7F02AFF03BF5DB640AD8DDB572C41532E673618DCD8C33EF2BF"
"E4E25EE821DF7D742B0990398543B16EFCDBB03C6327B79D3664CED442E894020F441"
"0ECC178C92AAEDFE39DC563AC226FE9E0EF22E1C896C4F2835CDFDCD50B6C4DBA2B27"
"A3B65DE3963D0A5F6E442A3C32008AB9D1ACBE4F366990EB43F8EE213B71E98DA0902"
"82680ABDD649BECA89700764561379F1DD23490CE967632ECA349AF8E1CBFA1F3A4F3"
"9F453614C8FFB5A179756243CB1FDB515834229BC64917C47A2F2E1116FAAC1336801"
"5312C31FD41215106469BEE77D0EF2FE10CF645B3E82902EAF53A676933D0EC433949"
"C1833BE52E76602CC3E4E784C002E20624BCE0F38F9CBC478439899DA7F15554D0ACA"
"DEC140C00C8FA8FC98862D9933938781B30CB9C76899B3A48DBF170DDA0A18ED37D77"
"F048ABBC85CB19469638C2A32AA3180CF3943BD6B8C5CB26F2EA70868F18B0707C882"
"054141086997A1AE5B709D4D0AA2B358990F244BA76C8E40791D29A0C63C9EF620B97"
"FDFFA9B671E5A65AFCC1C94CAACE0443E9D91F14028935BEA3988831BEBBFD3EB7C3A"
"5AC9605B3534712A09124345ACB09665E357E58946871BC140D3651220464E4A1BB23"
"1A5B0287888B34CA0A8CF5396EB2B8313377DC5ED5C41A9B389A9")},
{// 3 usage info records
a2bs_hex(
"983358221FB8DBF892047F00AA661F217EEC4E7A1626E8F98E025509E4D65A685E7D9"
"B169B98B16934F6E43E0E0E854A3FA9EB8E9A9D08E9D9B3A6C766AA44F7C655879BA2"
"DF5F38732FB7EDCA66D8C13A855B15E32CC9389B7DD119BA1F2417825FF1F52970F8E"
"985D34DD353D2AC8B24267353E5B8406C098427C4559A90CC"),
a2bs_hex(
"483EAC68243092009D06FAB41DB594ACB22E068C9524810758ECFF8BAB7E1B1ACA988"
"C3987023F01EFEC11529C7326279742E805E755A08EBBD9AA322F305805BE1166AB45"
"CB156FB0A9E6734371F4028707EE01CF2FB08465707E7E5613DD90D74B0D02536E26C"
"F1261CDDA8713943F3620ECC54095C76F8CD3CE31948C3CC0C9EB5582A4D087A54B39"
"1B4CDCBC98E35830B5932F6CF8D16427EF115CFF0A99499513702DD54C758E53248BB"
"5D195F2A2DD1DB18F97562F1F9034E223CEDB1E09ED1B0FE26089C20ED43B5D87B51F"
"6FC6C9F86255FBF70DF233F2665D604355BF9740A3B755521102E0B485C5CCCA607A9"
"A1BEB757BEDEF12327C637D17D6401E3756719F99BBE69B9CE4C8E47C2AC771F35A8E"
"E3FC4D58B2B2269CF85728E4DA7231BC8F0FD7C50E2A1EE9"),
a2bs_hex(
"5826D3A95F78879292612BCE06D845D64285CD45A7EAA6C87A9DBC3290B0B6AC95315"
"809F8CC7938768F9BD342C62CD4CE055866394489D955247CB0535001D50EFF4FEDF0"
"9501C58569B1EB9AA2305A113A5F4D4524AD34148A2DC48D2F522937F44A57FC76F57"
"EB1D4819C438EA42C7F8974FC7D2FE61CAAB3E1F27172FE6B8675DF4CCF1329A6EFB3"
"1F686FB0DC0F8B552D78970708D50C82ADBE333B585F6DE5A0D01D106F8232EB9ED45"
"42A2DC5AA031CC44652E8A42EDCA5AB08B0B5CA61A922E69A119E556F6014642522EA"
"1550F6D6E63EB25ACC03A4DD3F22F4686ED525F994FABA87629AF5939C16BA68C0F09"
"3EFE033CD319180BF69FCB72AC5123EBCB9DCF1AF00F0A68E31FF5B18FA8CFF3DFBB7"
"DA45413799105D67FA78217710D2F6C33394DD4088100013295FF43CF0598E6FE5C05"
"F03417CCD031F01CF63BECD444C750DF198345F155AB2B2AB94394A3C0C0AE05E386D"
"E6CC565AE82398BD0E377D6ABE103B9D5E84582C3772584B759891FC4B121A113370E"
"2DF5372DD81FB6358C64B0F6EB8F26193CA119E4D9D3D38036FA450EE2047CB2CE265"
"0FF37DF85BE23D58C17379FEC08DC0648236A107AE66178EEBF78F05F3B898424FA02"
"668B51F838AFA90D367B5CB425372D8CC3790BEA8AFB8795251FA09340D85A7F0B003"
"134C838F08BB1054D18404C3F69130700E"),
a2bs_hex(
"0A8B16080210012A84160AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE"
"1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D"
"0DC6789817468974B2EA51EE3944B8D7E0A88E4F16EBB80F03BD845231A01E6146841"
"CBAEF0134DCD9300DB2D92732992C0F2310D8E386FB31C67B9477010DEF9D99C42725"
"89572A26A17E12AC021E6FFBE66FC6153E7749906EC8F684E819467E16CAF317F315D"
"B32B6D3FDD1A8E8A094174D92D063B88E4835EAB78BD09541EA7FE72F132EB7364E15"
"4BC1548FC40EC7092775531508C95F9ED5D76F36BC0C198C3A33A1F9415B343905D6B"
"E37645E6800F053B1DA9A20286EFCBBC320424ADF7FB6E3D5D8E86C35E576A1A2A37D"
"344A419C0F0034A1B5F767D3C61D90DCA1119E5024C34EDE8FA7DD128696D8C435410"
"F218E52A853AD214FD05D0F8B3CB4832CFCD97FE159E6DEE64CE82CDAEC0321AE71B3"
"BCBAE42DF9EA65E42E151827086EADE71C138B972CC3992CF9ADA944C063816352ED8"
"658D3FA07BE0F32239E74A65932B069AAC4E8386DB59154AF9AEF71448128C66E5104"
"45294F44E511BD9B1AF19D4D67E99363093BE888D4B2AB841CAFF252CAD13EDF8E1AF"
"40340FC62339728520E6C0C09907C26F3FB78287231661952A8B699E47AE241B999C0"
"29FD2067836DC4BC64F66998A3ECD197DAE36F808A2E5A4C5BF25DD580E52B1C39A8B"
"03772BF82D58929766F2DA04F0E616F92B3A0EB75661B8FF5DE1EB807C990F9E6BA99"
"1C8BAD5EB63B37E8663A4E22AA9DB2015D3DF8BED1C8313F85F13B9483C7A39C59243"
"6C8B13C23F78F55CE812795335059F7F527CA580306A0AEE5A6D957A91F498F64AA2E"
"FC6780716400E17C7EEA30B2E6523B902986995E003C2D919A7DC7C0122CE9410037A"
"6602B59A63B5C89473D4E02DE35C1F01B12ADB48A3D94D43693F08268FECCC78DAF6F"
"4C35FA32C538CD73FBF3CEA274B01179C02473486311956E5A0C78E44C59B2F34FF24"
"B0653A6379A2F5F6F51467CAE26D55CC5BBDCFC9BCFA7B8C5CBF82EBE7BD340C3DAE6"
"374D0692052C529AA33D7A6799C8F1F59C78575E51F707013026CC4F83F6B3328EE6F"
"B1AC91929A4491338E93D10EE6193014A73BA241A9A833EA835217894EB4FD4BDB890"
"4A5999928325D0AC31B6D58609EDD9D85E88F74B5BD6FA7BDD83C51EEB91633ED267A"
"CA2E103904BBE4C031A6483858FBAD74DACD01711F7B882749FFFBA0DB6C7D7109D82"
"989C7D4DB5A0F1E7506AC24C89CECAF231EFF99F96AD76E57DABDD3C2DFBA7BAA869A"
"771F561B165987E552824B0C914E708E425C30AA9070A80017290396E183156BDF830"
"B7BF31BA762CB2675528C9004FD24A61DAFB587ABCF1D36F87795EE0B3DA0B425616A"
"66C82349B2E3BB8841C1335536865F919ED2AE671487B608B21A362D888E0AB4F7AB7"
"175B82F108617C3503F175435788AECAF7FFBFE76995D93CD79424A843A247A8D8A60"
"54A5B5404C9C057AACAD91A20322912AC023478A2D76DEB90BE713B03A11037EA7C30"
"5D1AF65099E3F2B92C4D4443A8F481C1177DEF0A3CB49BA5F1448A10AF1207AD2D361"
"B4A1F961B4B1F215B76A9A5005B414EF45EAFBCF2636ABFC01413B27DD11871103579"
"F8C041A799E22888D9ADB798E92A5E29BC46DECBC90991C65FE151C49F18068C1B65D"
"0E90A9ECDA9248B87C120D5FD8EC81D4D36B529FB2DAD39E0D39578B13B158E2B07C7"
"52D86F1A9D8160C93930C1F4F9E1D0D8E2C5AB308732EB27722A6BF8BE852624C2BE3"
"E4FE85819B89BEBA6535FCFBE85FA63A57BD0FBAF284C64FFD97A146B76B3F37B576F"
"C091C03E2222FBD24C2211344B7E2417EFC36C4A54DCCC460CF810E7EA8AC6386D6AB"
"567C819FED88A22CE55EF9BBE62C2CBC7AEEDE5E5A69FF3472418CE2F4514496C59D2"
"6E72F3BFE0131F1AF403C45FDCB3296A0EBE24FF381E027E6E2EF1AC289C67D3B8583"
"30669A81E8131583D2F140FD64615BDED0ED8316ABFD9C7E887433E1CAA6EA8E0C4F8"
"7ADB2A7FC3CF6FF87A7F02AFF03BF5DB640AD8DDB572C41532E673618DCD8C33EF2BF"
"E4E25EE821DF7D742B0990398543B16EFCDBB03C6327B79D3664CED442E894020F441"
"0ECC178C92AAEDFE39DC563AC226FE9E0EF22E1C896C4F2835CDFDCD50B6C4DBA2B27"
"A3B65DE3963D0A5F6E442A3C32008AB9D1ACBE4F366990EB43F8EE213B71E98DA0902"
"82680ABDD649BECA89700764561379F1DD23490CE967632ECA349AF8E1CBFA1F3A4F3"
"9F453614C8FFB5A179756243CB1FDB515834229BC64917C47A2F2E1116FAAC1336801"
"5312C31FD41215106469BEE77D0EF2FE10CF645B3E82902EAF53A676933D0EC433949"
"C1833BE52E76602CC3E4E784C002E20624BCE0F38F9CBC478439899DA7F15554D0ACA"
"DEC140C00C8FA8FC98862D9933938781B30CB9C76899B3A48DBF170DDA0A18ED37D77"
"F048ABBC85CB19469638C2A32AA3180CF3943BD6B8C5CB26F2EA70868F18B0707C882"
"054141086997A1AE5B709D4D0AA2B358990F244BA76C8E40791D29A0C63C9EF620B97"
"FDFFA9B671E5A65AFCC1C94CAACE0443E9D91F14028935BEA3988831BEBBFD3EB7C3A"
"5AC9605B3534712A09124345ACB09665E357E58946871BC140D3650AA9070A8001983"
"358221FB8DBF892047F00AA661F217EEC4E7A1626E8F98E025509E4D65A685E7D9B16"
"9B98B16934F6E43E0E0E854A3FA9EB8E9A9D08E9D9B3A6C766AA44F7C655879BA2DF5"
"F38732FB7EDCA66D8C13A855B15E32CC9389B7DD119BA1F2417825FF1F52970F8E985"
"D34DD353D2AC8B24267353E5B8406C098427C4559A90CC12AC02483EAC68243092009"
"D06FAB41DB594ACB22E068C9524810758ECFF8BAB7E1B1ACA988C3987023F01EFEC11"
"529C7326279742E805E755A08EBBD9AA322F305805BE1166AB45CB156FB0A9E673437"
"1F4028707EE01CF2FB08465707E7E5613DD90D74B0D02536E26CF1261CDDA8713943F"
"3620ECC54095C76F8CD3CE31948C3CC0C9EB5582A4D087A54B391B4CDCBC98E35830B"
"5932F6CF8D16427EF115CFF0A99499513702DD54C758E53248BB5D195F2A2DD1DB18F"
"97562F1F9034E223CEDB1E09ED1B0FE26089C20ED43B5D87B51F6FC6C9F86255FBF70"
"DF233F2665D604355BF9740A3B755521102E0B485C5CCCA607A9A1BEB757BEDEF1232"
"7C637D17D6401E3756719F99BBE69B9CE4C8E47C2AC771F35A8EE3FC4D58B2B2269CF"
"85728E4DA7231BC8F0FD7C50E2A1EE91AF4035826D3A95F78879292612BCE06D845D6"
"4285CD45A7EAA6C87A9DBC3290B0B6AC95315809F8CC7938768F9BD342C62CD4CE055"
"866394489D955247CB0535001D50EFF4FEDF09501C58569B1EB9AA2305A113A5F4D45"
"24AD34148A2DC48D2F522937F44A57FC76F57EB1D4819C438EA42C7F8974FC7D2FE61"
"CAAB3E1F27172FE6B8675DF4CCF1329A6EFB31F686FB0DC0F8B552D78970708D50C82"
"ADBE333B585F6DE5A0D01D106F8232EB9ED4542A2DC5AA031CC44652E8A42EDCA5AB0"
"8B0B5CA61A922E69A119E556F6014642522EA1550F6D6E63EB25ACC03A4DD3F22F468"
"6ED525F994FABA87629AF5939C16BA68C0F093EFE033CD319180BF69FCB72AC5123EB"
"CB9DCF1AF00F0A68E31FF5B18FA8CFF3DFBB7DA45413799105D67FA78217710D2F6C3"
"3394DD4088100013295FF43CF0598E6FE5C05F03417CCD031F01CF63BECD444C750DF"
"198345F155AB2B2AB94394A3C0C0AE05E386DE6CC565AE82398BD0E377D6ABE103B9D"
"5E84582C3772584B759891FC4B121A113370E2DF5372DD81FB6358C64B0F6EB8F2619"
"3CA119E4D9D3D38036FA450EE2047CB2CE2650FF37DF85BE23D58C17379FEC08DC064"
"8236A107AE66178EEBF78F05F3B898424FA02668B51F838AFA90D367B5CB425372D8C"
"C3790BEA8AFB8795251FA09340D85A7F0B003134C838F08BB1054D18404C3F6913070"
"0E12202FF1FBA9926A24A1F79970EC427DDF87B4421488F7952499BC33CEB282D9E48"
"A")}};
const std::string kTestOrigin = "com.google";
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<std::string>*));
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&));
};
} // namespace
// gmock methods
using ::testing::_;
using ::testing::AllOf;
using ::testing::Eq;
using ::testing::Gt;
using ::testing::HasSubstr;
using ::testing::InSequence;
using ::testing::NotNull;
using ::testing::Return;
using ::testing::ReturnArg;
using ::testing::SetArgPointee;
using ::testing::SetArrayArgument;
using ::testing::StrEq;
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() + 2 * sizeof(int64_t);
}
CdmAppParameterMap GetAppParameters(std::string str) {
CdmAppParameterMap app_parameters;
size_t start_pos = 0;
size_t len = str.length();
bool more = true;
while (start_pos < len) {
size_t name_end_pos = str.find(' ', start_pos);
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);
if (value_end_pos == std::string::npos || value_end_pos + 1 >= len)
return app_parameters;
start_pos = value_end_pos + 1;
}
return app_parameters;
}
std::string device_base_path_;
};
class DeviceFilesStoreTest : public DeviceFilesTest,
public ::testing::WithParamInterface<bool> {};
struct CertStorageVariant {
CertStorageVariant(bool dir_exists_value, const std::string& origin_value)
: dir_exists(dir_exists_value), origin(origin_value) {}
const bool dir_exists;
const std::string origin;
};
class DeviceCertificateStoreTest
: public DeviceFilesTest,
public ::testing::WithParamInterface<CertStorageVariant> {};
class DeviceCertificateTest
: public DeviceFilesTest,
public ::testing::WithParamInterface<std::string> {};
class DeviceFilesSecurityLevelTest
: public DeviceFilesTest,
public ::testing::WithParamInterface<CdmSecurityLevel> {};
class DeviceFilesUsageInfoTest : public DeviceFilesTest,
public ::testing::WithParamInterface<int> {};
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_P3(Contains, str1, str2, size, "") {
// 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, size + str1.size() + str2.size() + kProtobufEstimatedOverhead);
return (data.find(str1) != std::string::npos &&
data.find(str2) != std::string::npos);
}
MATCHER_P4(Contains, str1, str2, str3, size, "") {
// 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, size + str1.size() + str2.size() + str3.size() +
kProtobufEstimatedOverhead);
return (data.find(str1) != std::string::npos &&
data.find(str2) != std::string::npos &&
data.find(str3) != 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() +
kProtobufEstimatedOverhead);
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);
}
MATCHER_P7(Contains, str1, str2, str3, str4, str5, str6, map7, "") {
// 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
size_t map7_len = 0;
CdmAppParameterMap::const_iterator itr = map7.begin();
for (itr = map7.begin(); itr != map7.end(); ++itr) {
map7_len += itr->first.length();
map7_len += itr->second.length();
}
std::string data(arg, str1.size() + str2.size() + str3.size() + str4.size() +
str5.size() + str6.size() + map7_len +
kProtobufEstimatedOverhead);
bool map7_entries_present = true;
for (itr = map7.begin(); itr != map7.end(); ++itr) {
map7_entries_present = map7_entries_present &&
data.find(itr->first) != std::string::npos &&
data.find(itr->second) != std::string::npos;
}
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 && map7_entries_present);
}
TEST_P(DeviceCertificateStoreTest, StoreCertificate) {
MockFile file;
CertStorageVariant params = GetParam();
std::string certificate(GenerateRandomData(kCertificateLen));
std::string wrapped_private_key(GenerateRandomData(kWrappedKeyLen));
std::string device_certificate_path =
device_base_path_ + DeviceFiles::GetCertificateFileName(params.origin);
EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_)))
.WillOnce(Return(params.dir_exists));
if (params.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, 0),
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(kSecurityLevelL1));
device_files.SetTestFile(&file);
EXPECT_TRUE(device_files.StoreCertificate(params.origin, certificate,
wrapped_private_key));
}
INSTANTIATE_TEST_CASE_P(
StoreCertificate, DeviceCertificateStoreTest,
::testing::Values(CertStorageVariant(true, EMPTY_ORIGIN),
CertStorageVariant(true, kTestOrigin),
CertStorageVariant(false, EMPTY_ORIGIN),
CertStorageVariant(false, kTestOrigin)));
TEST_P(DeviceCertificateTest, ReadCertificate) {
MockFile file;
std::string origin = GetParam();
std::string device_certificate_path =
device_base_path_ + DeviceFiles::GetCertificateFileName(origin);
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);
if (Properties::security_level_path_backward_compatibility_support()) {
EXPECT_CALL(file, List(_, NotNull())).WillOnce(Return(false));
}
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
std::string certificate, wrapped_private_key;
ASSERT_TRUE(device_files.RetrieveCertificate(origin, &certificate,
&wrapped_private_key));
EXPECT_EQ(kTestCertificate, b2a_hex(certificate));
EXPECT_EQ(kTestWrappedPrivateKey, b2a_hex(wrapped_private_key));
}
TEST_P(DeviceCertificateTest, HasCertificate) {
MockFile file;
std::string origin = GetParam();
std::string device_certificate_path =
device_base_path_ + DeviceFiles::GetCertificateFileName(origin);
EXPECT_CALL(file, Exists(StrEq(device_certificate_path)))
.WillOnce(Return(false))
.WillOnce(Return(true));
EXPECT_CALL(file, Open(_, _)).Times(0);
DeviceFiles device_files;
ASSERT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
// MockFile returns false.
EXPECT_FALSE(device_files.HasCertificate(origin));
// MockFile returns true.
EXPECT_TRUE(device_files.HasCertificate(origin));
}
INSTANTIATE_TEST_CASE_P(CertificateUseTests, DeviceCertificateTest,
::testing::Values(EMPTY_ORIGIN, kTestOrigin));
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(EMPTY_ORIGIN);
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, 0),
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(security_level));
device_files.SetTestFile(&file);
EXPECT_TRUE(device_files.StoreCertificate(EMPTY_ORIGIN, 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));
}
CdmAppParameterMap app_parameters =
GetAppParameters(license_test_data[license_num].app_parameters);
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,
app_parameters),
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(kSecurityLevelL1));
device_files.SetTestFile(&file);
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,
license_test_data[license_num].playback_start_time,
license_test_data[license_num].last_playback_time, app_parameters));
}
INSTANTIATE_TEST_CASE_P(StoreLicense, DeviceFilesStoreTest, ::testing::Bool());
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();
CdmAppParameterMap app_parameters =
GetAppParameters(license_test_data[i].app_parameters);
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,
app_parameters),
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(kSecurityLevelL1));
device_files.SetTestFile(&file);
for (size_t i = 0; i < kNumberOfLicenses; i++) {
CdmAppParameterMap app_parameters =
GetAppParameters(license_test_data[i].app_parameters);
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,
license_test_data[i].playback_start_time,
license_test_data[i].last_playback_time, app_parameters));
}
}
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(kSecurityLevelL1));
device_files.SetTestFile(&file);
DeviceFiles::LicenseState license_state;
CdmInitData pssh_data;
CdmKeyMessage key_request;
CdmKeyResponse key_response;
CdmKeyMessage key_renewal_request;
CdmKeyResponse key_renewal_response;
int64_t playback_start_time, last_playback_time;
std::string release_server_url;
CdmAppParameterMap app_parameters;
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, &playback_start_time,
&last_playback_time, &app_parameters));
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);
EXPECT_EQ(license_test_data[i].playback_start_time, playback_start_time);
EXPECT_EQ(license_test_data[i].last_playback_time, last_playback_time);
std::map<std::string, std::string>::iterator itr;
for (itr = app_parameters.begin(); itr != app_parameters.end(); ++itr) {
EXPECT_NE(std::string::npos,
license_test_data[i].app_parameters.find(itr->first));
EXPECT_NE(std::string::npos,
license_test_data[i].app_parameters.find(itr->second));
}
}
}
TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) {
MockFile file;
LicenseInfo* test_data =
&license_app_parameters_backwards_compatibility_test_data;
std::string license_path = device_base_path_ + test_data->key_set_id +
DeviceFiles::GetLicenseFileNameExtension();
size_t size = test_data->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>(test_data->file_data.begin(),
test_data->file_data.end()),
Return(size)));
EXPECT_CALL(file, Close()).Times(1);
EXPECT_CALL(file, Write(_, _)).Times(0);
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
DeviceFiles::LicenseState license_state;
CdmInitData pssh_data;
CdmKeyMessage key_request;
CdmKeyResponse key_response;
CdmKeyMessage key_renewal_request;
CdmKeyResponse key_renewal_response;
int64_t playback_start_time, last_playback_time;
std::string release_server_url;
CdmAppParameterMap app_parameters;
EXPECT_TRUE(device_files.RetrieveLicense(
test_data->key_set_id, &license_state, &pssh_data, &key_request,
&key_response, &key_renewal_request, &key_renewal_response,
&release_server_url, &playback_start_time, &last_playback_time,
&app_parameters));
EXPECT_EQ(test_data->license_state, license_state);
EXPECT_EQ(test_data->pssh_data, pssh_data);
EXPECT_EQ(test_data->key_request, key_request);
EXPECT_EQ(test_data->key_response, key_response);
EXPECT_EQ(test_data->key_request, key_request);
EXPECT_EQ(test_data->key_response, key_response);
EXPECT_EQ(test_data->playback_start_time, playback_start_time);
EXPECT_EQ(test_data->last_playback_time, last_playback_time);
EXPECT_EQ(0u, app_parameters.size());
}
TEST_F(DeviceFilesTest, SecurityLevelPathBackwardCompatibility) {
if (!Properties::security_level_path_backward_compatibility_support()) {
return;
}
MockFile file;
std::vector<std::string> 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<std::string> 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(EMPTY_ORIGIN);
old_files.push_back(DeviceFiles::GetCertificateFileName(EMPTY_ORIGIN));
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(EMPTY_ORIGIN);
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(EMPTY_ORIGIN);
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(kSecurityLevelL1));
device_files.SetTestFile(&file);
Properties::Init();
std::string certificate, wrapped_private_key;
ASSERT_TRUE(device_files.RetrieveCertificate(EMPTY_ORIGIN, &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(kSecurityLevelL1));
device_files.SetTestFile(&file);
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,
license_update_test_data[0].playback_start_time,
license_update_test_data[0].last_playback_time,
GetAppParameters(license_test_data[0].app_parameters)));
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,
license_update_test_data[0].playback_start_time,
license_update_test_data[0].last_playback_time,
GetAppParameters(license_test_data[0].app_parameters)));
}
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(kSecurityLevelL1));
device_files.SetTestFile(&file);
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;
int64_t playback_start_time, last_playback_time;
CdmAppParameterMap app_parameters;
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, &playback_start_time, &last_playback_time,
&app_parameters));
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_EQ(license_test_data[0].playback_start_time, playback_start_time);
EXPECT_EQ(license_test_data[0].last_playback_time, last_playback_time);
std::map<std::string, std::string>::iterator itr;
for (itr = app_parameters.begin(); itr != app_parameters.end(); ++itr) {
EXPECT_NE(license_test_data[0].app_parameters.find(itr->first),
std::string::npos);
EXPECT_NE(license_test_data[0].app_parameters.find(itr->second),
std::string::npos);
}
EXPECT_TRUE(device_files.DeleteLicense(license_test_data[0].key_set_id));
EXPECT_FALSE(device_files.LicenseExists(license_test_data[0].key_set_id));
}
TEST_F(DeviceFilesTest, ReserveLicenseIdsDoesNotUseFileSystem) {
// Validate that ReserveLicenseIds does not touch the file system.
MockFile file;
EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_))).Times(0);
EXPECT_CALL(file, CreateDirectory(_)).Times(0);
EXPECT_CALL(file, Open(_, _)).Times(0);
EXPECT_CALL(file, Write(_, _)).Times(0);
EXPECT_CALL(file, Close()).Times(0);
EXPECT_CALL(file, Read(_, _)).Times(0);
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
for (size_t i = 0; i < kNumberOfLicenses; i++) {
EXPECT_TRUE(device_files.ReserveLicenseId(license_test_data[i].key_set_id));
// Validate that the license IDs are actually reserved.
EXPECT_TRUE(device_files.LicenseExists(license_test_data[i].key_set_id));
}
}
TEST_P(DeviceFilesUsageInfoTest, Read) {
MockFile file;
std::string app_id; // TODO(fredgc): add tests with multiple app_ids.
std::string path =
device_base_path_ + DeviceFiles::GetUsageInfoFileName(app_id);
int index = GetParam();
std::string data;
if (index >= 0) {
data = kUsageInfoTestData[index].file_data;
}
if (index >= 0) {
EXPECT_CALL(file, Exists(StrEq(path))).WillOnce(Return(true));
EXPECT_CALL(file, FileSize(StrEq(path))).WillOnce(Return(data.size()));
EXPECT_CALL(file, Open(StrEq(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);
} else {
EXPECT_CALL(file, Exists(StrEq(path)))
.Times(2)
.WillRepeatedly(Return(false));
EXPECT_CALL(file, FileSize(_)).Times(0);
EXPECT_CALL(file, Open(_, _)).Times(0);
EXPECT_CALL(file, Close()).Times(0);
}
EXPECT_CALL(file, Write(_, _)).Times(0);
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
std::vector<std::pair<CdmKeyMessage, CdmKeyResponse> > license_info;
ASSERT_TRUE(device_files.RetrieveUsageInfo(app_id, &license_info));
if (index >= 0) {
EXPECT_EQ(static_cast<size_t>(index), license_info.size());
for (size_t i = 0; i < license_info.size(); ++i) {
bool found = false;
for (size_t j = 0; j <= static_cast<size_t>(index); ++j) {
if ((license_info[i].first.compare(
kUsageInfoTestData[j].license_request) == 0) &&
(license_info[i].second.compare(kUsageInfoTestData[j].license) ==
0)) {
found = true;
}
}
EXPECT_TRUE(found);
}
} else {
EXPECT_EQ(0u, license_info.size());
}
}
TEST_P(DeviceFilesUsageInfoTest, Store) {
MockFile file;
std::string app_id; // TODO(fredgc): multiple app ids.
std::string pst(GenerateRandomData(kProviderSessionTokenLen));
std::string license_request(GenerateRandomData(kLicenseRequestLen));
std::string license(GenerateRandomData(kLicenseLen));
std::string path =
device_base_path_ + DeviceFiles::GetUsageInfoFileName(app_id);
int index = GetParam();
std::string data;
if (index >= 0) {
data = kUsageInfoTestData[index].file_data;
}
EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_)))
.WillRepeatedly(Return(true));
EXPECT_CALL(file, CreateDirectory(_)).Times(0);
EXPECT_CALL(file, Exists(StrEq(path))).WillOnce(Return(index >= 0));
if (index >= 0) {
EXPECT_CALL(file, FileSize(StrEq(path))).WillOnce(Return(data.size()));
EXPECT_CALL(file, Open(StrEq(path), IsBinaryFileFlagSet()))
.Times(2)
.WillRepeatedly(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(2);
} else {
EXPECT_CALL(file, FileSize(_)).Times(0);
EXPECT_CALL(file, Open(_, _)).Times(1).WillOnce(Return(true));
EXPECT_CALL(file, Close()).Times(1);
}
EXPECT_CALL(file,
Write(Contains(pst, license_request, license, data.size()),
Gt(pst.size() + license_request.size() + license.size())))
.WillOnce(ReturnArg<1>());
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
ASSERT_TRUE(
device_files.StoreUsageInfo(pst, license_request, license, app_id));
}
TEST_P(DeviceFilesUsageInfoTest, Delete) {
MockFile file;
std::string app_id; // TODO(fredgc): expand tests.
std::string path =
device_base_path_ + DeviceFiles::GetUsageInfoFileName(app_id);
int index = GetParam();
if (index < 0) return;
std::string data, pst, prev_data, prev_pst, prev_license;
if (index >= 0) {
data = kUsageInfoTestData[index].file_data;
if (index >= 1) {
pst = kUsageInfoTestData[index].provider_session_token;
prev_data = kUsageInfoTestData[index - 1].file_data;
prev_pst = kUsageInfoTestData[index - 1].provider_session_token;
prev_license = kUsageInfoTestData[index - 1].license;
}
}
EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_)))
.WillRepeatedly(Return(true));
EXPECT_CALL(file, CreateDirectory(_)).Times(0);
EXPECT_CALL(file, Exists(StrEq(path))).WillOnce(Return(index >= 0));
EXPECT_CALL(file, FileSize(StrEq(path))).WillOnce(Return(data.size()));
if (index >= 1) {
EXPECT_CALL(file, Open(StrEq(path), IsBinaryFileFlagSet()))
.Times(2)
.WillRepeatedly(Return(true));
EXPECT_CALL(file, Write(Contains(prev_pst, prev_license, prev_data.size()),
Gt(prev_pst.size() + prev_license.size())))
.WillOnce(ReturnArg<1>());
EXPECT_CALL(file, Close()).Times(2);
} else {
EXPECT_CALL(file, Open(StrEq(path), IsBinaryFileFlagSet()))
.WillOnce(Return(true));
EXPECT_CALL(file, Write(_, _)).Times(0);
EXPECT_CALL(file, Close()).Times(1);
}
EXPECT_CALL(file, Read(NotNull(), Eq(data.size())))
.WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()),
Return(data.size())));
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
if (index >= 1) {
ASSERT_TRUE(device_files.DeleteUsageInfo(app_id, pst));
} else {
ASSERT_FALSE(device_files.DeleteUsageInfo(app_id, pst));
}
}
TEST_P(DeviceFilesUsageInfoTest, DeleteAll) {
MockFile file;
std::string app_id; // TODO(fredgc): expand tests.
std::string path =
device_base_path_ + DeviceFiles::GetUsageInfoFileName(app_id);
int index = GetParam();
EXPECT_CALL(file, IsDirectory(StrEq(device_base_path_)))
.WillRepeatedly(Return(true));
EXPECT_CALL(file, CreateDirectory(_)).Times(0);
EXPECT_CALL(file, Write(_, _)).Times(0);
std::string data;
if (index < 0) {
EXPECT_CALL(file, Exists(StrEq(path))).WillOnce(Return(false));
} else {
data = kUsageInfoTestData[index].file_data;
EXPECT_CALL(file, Exists(StrEq(path))).WillRepeatedly(Return(true));
EXPECT_CALL(file, FileSize(StrEq(path))).WillOnce(Return(data.size()));
EXPECT_CALL(file, Open(StrEq(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, Remove(StrEq(path))).WillOnce(Return(true));
}
DeviceFiles device_files;
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
device_files.SetTestFile(&file);
std::vector<std::string> psts;
ASSERT_TRUE(device_files.DeleteAllUsageInfoForApp(app_id, &psts));
if (index < 0) {
EXPECT_EQ(0u, psts.size());
} else {
// DeleteAllUsageInfoForApp returns a list of all psts that
// should be deleted by oemcrypto.
EXPECT_EQ(static_cast<unsigned int>(index), psts.size());
for (int i = 0; i < index; i++) {
EXPECT_EQ(kUsageInfoTestData[i + 1].provider_session_token, psts[i]);
}
}
}
INSTANTIATE_TEST_CASE_P(UsageInfo, DeviceFilesUsageInfoTest,
::testing::Range(-1, 4));
} // namespace wvcdm