Add CDM integration tests for HLS
[ Merge of https://go/wvgerrit/17083 ] b/27559429 Change-Id: I65a0a163e0e14bf711c257d7ab2c9486ec002c07
This commit is contained in:
@@ -335,6 +335,8 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
||||
case LICENSE_RENEWAL_PROHIBITED: *os << "LICENSE_RENEWAL_PROHIBITED";
|
||||
case SESSION_FILE_HANDLE_INIT_ERROR: *os << "SESSION_FILE_HANDLE_INIT_ERROR";
|
||||
break;
|
||||
case INCORRECT_CRYPTO_MODE: *os << "INCORRECT_CRYPTO_MODE";
|
||||
break;
|
||||
default:
|
||||
*os << "Unknown CdmResponseType";
|
||||
break;
|
||||
|
||||
@@ -437,6 +437,323 @@ RenewWithClientIdTestConfiguration
|
||||
{true, false, false, false,
|
||||
"Test: Usage reporting with client Id"}};
|
||||
|
||||
// provider:"widevine_test",
|
||||
// content_id":"aGxzX3NhbXBsZV9hZXNfc3RyZWFtaW5n" (hls_sample_aes_streaming)
|
||||
// key_id:613db35603320eb8e7ea24bdeea3fdb8
|
||||
// key:78a1dc0646119707e903514d8a00735f
|
||||
const std::string kAttributeListSampleAes =
|
||||
"#EXT-X-KEY:"
|
||||
"METHOD=SAMPLE-AES,"
|
||||
"KEYFORMAT=\"com.widevine\","
|
||||
"KEYFORMATVERSIONS=\"1\","
|
||||
"URI=\"data:text/"
|
||||
"plain;base64,"
|
||||
"ew0KICAgInByb3ZpZGVyIjoid2lkZXZpbmVfdGVzdCIsDQogICAiY29udGVudF9pZCI6ImFHeH"
|
||||
"pYM05oYlhCc1pWOWhaWE5mYzNSeVpXRnRhVzVuIiwNCiAgICJrZXlfaWRzIjoNCiAgIFsNCiAg"
|
||||
"ICAgICI2MTNkYjM1NjAzMzIwZWI4ZTdlYTI0YmRlZWEzZmRiOCINCiAgIF0NCn0=\","
|
||||
"IV=0x9FBE45DD47DA7EBA09A3E24CBA95C9AF";
|
||||
|
||||
// provider:"widevine_test",
|
||||
// content_id":"aGxzX2Flc18xMjhfc3RyZWFtaW5n" (hls_aes_128_streaming)
|
||||
// key_id:ab6531ff6e6ea15e387b019e59c2de0a
|
||||
// key:78a1dc0646119707e903514d8a00735f
|
||||
const std::string kAttributeListAes128 =
|
||||
"#EXT-X-KEY:"
|
||||
"METHOD=AES-128,"
|
||||
"KEYFORMAT=\"com.widevine\","
|
||||
"KEYFORMATVERSIONS=\"1\","
|
||||
"URI=\"data:text/"
|
||||
"plain;base64,"
|
||||
"ew0KICAgInByb3ZpZGVyIjoid2lkZXZpbmVfdGVzdCIsDQogICAiY29udGVudF9pZCI6ImFHeH"
|
||||
"pYMkZsYzE4eE1qaGZjM1J5WldGdGFXNW4iLA0KICAgImtleV9pZHMiOg0KICAgWw0KICAgICAg"
|
||||
"ImFiNjUzMWZmNmU2ZWExNWUzODdiMDE5ZTU5YzJkZTBhIg0KICAgXQ0KfQ==\","
|
||||
"IV=0x9FBE45DD47DA7EBA09A3E24CBA95C9AF";
|
||||
|
||||
const std::string kAttributeListKeyFormatNonWidevine =
|
||||
"#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT=\"com.example\",KEYFORMATVERSIONS="
|
||||
"\"1\",URI=\"data:text/"
|
||||
"plain;base64,"
|
||||
"eyAKICAgInByb3ZpZGVyIjoiY2FzdCIsCiAgICJjb250ZW50X2lkIjoiU0VKUElGTkJUVkJNUl"
|
||||
"NBeCIsCiAgICJrZXlfaWRzIjoKICAgWwogICAgICAiZDhlMzQ0ODM1ZTM1NzA3MjUzZDU3MWYz"
|
||||
"NjE0ZTdmMmYiCiAgIF0KfQ==\",IV=0x9FBE45DD47DA7EBA09A3E24CBA95C9AF";
|
||||
|
||||
const std::string kAttributeListKeyFormatVersionUnregonized =
|
||||
"#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT=\"com.widevine\",KEYFORMATVERSIONS="
|
||||
"\"2\",URI=\"data:text/"
|
||||
"plain;base64,"
|
||||
"eyAKICAgInByb3ZpZGVyIjoiY2FzdCIsCiAgICJjb250ZW50X2lkIjoiU0VKUElGTkJUVkJNUl"
|
||||
"NBeCIsCiAgICJrZXlfaWRzIjoKICAgWwogICAgICAiZDhlMzQ0ODM1ZTM1NzA3MjUzZDU3MWYz"
|
||||
"NjE0ZTdmMmYiCiAgIF0KfQ==\",IV=0x9FBE45DD47DA7EBA09A3E24CBA95C9AF";
|
||||
|
||||
const std::string kAttributeListUnspecifiedIv =
|
||||
"#EXT-X-KEY:"
|
||||
"METHOD=SAMPLE-AES,"
|
||||
"KEYFORMAT=\"com.widevine\","
|
||||
"KEYFORMATVERSIONS=\"1\","
|
||||
"URI=\"data:text/plain;base64,ew0KICAgInByb3ZpZGVyIjoid2lkZXZpbmVfdGVzdCIsD"
|
||||
"QogICAiY29udGVudF9pZCI6ImFHeHpYM05oYlhCc1pWOWhaWE5mYzNSeVpXRnRhVzVuIiwNCiA"
|
||||
"gICJrZXlfaWRzIjoNCiAgIFsNCiAgICAgICI3OGExZGMwNjQ2MTE5NzA3ZTkwMzUxNGQ4YTAwN"
|
||||
"zM1ZiINCiAgIF0NCn0=\",";
|
||||
|
||||
const std::string kAttributeListUnspecifiedMethod =
|
||||
"#EXT-X-KEY:"
|
||||
"KEYFORMAT=\"com.widevine\","
|
||||
"KEYFORMATVERSIONS=\"1\","
|
||||
"URI=\"data:text/plain;base64,ew0KICAgInByb3ZpZGVyIjoid2lkZXZpbmVfdGVzdCIsD"
|
||||
"QogICAiY29udGVudF9pZCI6ImFHeHpYM05oYlhCc1pWOWhaWE5mYzNSeVpXRnRhVzVuIiwNCiA"
|
||||
"gICJrZXlfaWRzIjoNCiAgIFsNCiAgICAgICI3OGExZGMwNjQ2MTE5NzA3ZTkwMzUxNGQ4YTAwN"
|
||||
"zM1ZiINCiAgIF0NCn0=\","
|
||||
"IV=0x9FBE45DD47DA7EBA09A3E24CBA95C9AF";
|
||||
|
||||
struct HlsSegmentInfo {
|
||||
bool start_segment;
|
||||
std::string iv;
|
||||
std::string clear_data;
|
||||
std::string encrypted_data;
|
||||
};
|
||||
|
||||
HlsSegmentInfo kAes128PartialSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"AD868A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E9148"
|
||||
"84604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF41596555C1BCCE9ED0293"
|
||||
"59C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04D503A3DDAD868A"
|
||||
"6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E918DF21FDC"
|
||||
"42F166880D97A2225CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A1E"
|
||||
"4A8B6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747942AC20A89FF"
|
||||
"79F4C2F25FBA99D6A44618A8C0420B27D54E3DA17B77C9D43CCA217CE9BDE99BD9"
|
||||
"1E9733A1A00B9B557AC3A433DC92633546156817FAE26B6E1C"),
|
||||
wvcdm::a2bs_hex(
|
||||
"E7C566D86E98C36D2DCA54A966E7B469B6094B9201F200932F8EB5E1A94FB0B977"
|
||||
"FAB8DFDAD57C677E279615F4EAFA872CA8EFF83179E4DE2AB78E6B41A860C42203"
|
||||
"4B875AC282406E03AC01F2E407A55DE38C6C35707F34B3319646FA016A01CE9056"
|
||||
"E55D28C48ED72F10FA6625656ED62B758CBADA757DDC52533C9CBD54FC1A46F827"
|
||||
"CC7B69BA66AE19A15D725FCBB972B23C83F95C0F00F481A7C9AC8687B3A4AD15AD"
|
||||
"A2ABBB84D8E3CBEC3E8771720A35234070799173B37219127141922CBA8CB2DC48"
|
||||
"EC2477832D1AE477942DCDA93C0886AF72D71E56DA3D7737E49670B024639A195B"
|
||||
"7377C7F45A797C6E5DBB1BB2843DA3FC76043E33687BEF3172"),
|
||||
},
|
||||
{
|
||||
false, wvcdm::a2bs_hex("BB1BB2843DA3FC76043E33687BEF3172"),
|
||||
wvcdm::a2bs_hex(
|
||||
"64ab17b3e3dfab47245c7cce4543d4fc7a26dcf248f19f9b59f3c92601440b3617"
|
||||
"c8ed0c96c656549e461f38708cd47a434066f8df28ccc28b79252eee3f9c2d7f6c"
|
||||
"68ebe40141fe818fe082ca523c03d69ddaf183a93c022327fedc5582c5abca9d34"
|
||||
"2b71263a67f9cb2336f12108aaaef464f17177e44e9b0c4e56e61da53c2150b440"
|
||||
"5cc82d994dfd9bf4087c761956d6688a9705db4cf350381085f383c49666d4aed1"
|
||||
"35c519c1f0b5cba06e287feea96ea367bf54e7368dcf998276c6e46497e0c50e20"
|
||||
"fef74e42cb518fe7f22ef27202428688f86404e8278587017012c1d65537c6cbd7"
|
||||
"dde04aae338d68115a9f430afc100ab83cdadf45dca39db685"),
|
||||
wvcdm::a2bs_hex(
|
||||
"5E61E95F918560A046682BB03CF3DBAB6E052150AEB3D46F458CF7480BF8F875E2"
|
||||
"833367415656E4BA2B01421A0B18C18F802657573BF0B239173114AFE992BCD852"
|
||||
"955301FAE562FC6BCC3AC89A4CA58BEC1BCCD07C89165DF77F29F42AE052858BA3"
|
||||
"AC59A82652E6B432CB4993C707755C32EEF137111160A086CFC4FB15E5F76B1DAF"
|
||||
"2E8217C51BDB4DE0B987288A68F88824DBD7BF4D2978147A4AE4DA019AAA2A59E9"
|
||||
"94C294768D86FDADED52931E7ACEBC915C8124785E4BE9CE89BFFA631C3F5E67C4"
|
||||
"EE5BA77A83B6E582DF2C1907FA572B61D656DCF9B8DEAE4B81508378732F952152"
|
||||
"CF7DCAB0A3CA3EE8E5F72D24E96647EBBAAA2394BD6EC458EF"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kAes128MultiSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"AD868A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E9148"
|
||||
"84604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF41596555C1BCCE9ED0293"
|
||||
"59C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04D503A3DDAD868A"
|
||||
"6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E918DF21FDC"
|
||||
"42F166880D97A2225CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A1E"
|
||||
"4A8B6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747942AC20A89FF"
|
||||
"79F4C2F25FBA99D6A44618A8C0420B27D54E3DA17B77C9D43CCA217CE9BDE99BD9"
|
||||
"1E9733A1A00B9B557AC3A433DC92633546156817FAE26B6E1C"),
|
||||
wvcdm::a2bs_hex(
|
||||
"E7C566D86E98C36D2DCA54A966E7B469B6094B9201F200932F8EB5E1A94FB0B977"
|
||||
"FAB8DFDAD57C677E279615F4EAFA872CA8EFF83179E4DE2AB78E6B41A860C42203"
|
||||
"4B875AC282406E03AC01F2E407A55DE38C6C35707F34B3319646FA016A01CE9056"
|
||||
"E55D28C48ED72F10FA6625656ED62B758CBADA757DDC52533C9CBD54FC1A46F827"
|
||||
"CC7B69BA66AE19A15D725FCBB972B23C83F95C0F00F481A7C9AC8687B3A4AD15AD"
|
||||
"A2ABBB84D8E3CBEC3E8771720A35234070799173B37219127141922CBA8CB2DC48"
|
||||
"EC2477832D1AE477942DCDA93C0886AF72D71E56DA3D7737E49670B024639A195B"
|
||||
"7377C7F45A797C6E5DBB1BB2843DA3FC76043E33687BEF3172"),
|
||||
},
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"64AB17B3E3DFAB47245C7CCE4543D4FC7A26DCF248F19F9B59F3C92601440B3617"
|
||||
"C8ED0C96C656549E461F38708CD47A434066F8DF28CCC28B79252EEE3F9C2D7F6C"
|
||||
"68EBE40141FE818FE082CA523C03D69DDAF183A93C022327FEDC5582C5ABCA9D34"
|
||||
"2B71263A67F9CB2336F12108AAAEF464F17177E44E9B0C4E56E61DA53C2150B440"
|
||||
"5CC82D994DFD9BF4087C761956D6688A9705DB4CF350381085F383C49666D4AED1"
|
||||
"35C519C1F0B5CBA06E287FEEA96EA367BF54E7368DCF998276C6E46497E0C50E20"
|
||||
"FEF74E42CB518FE7F22EF27202428688F86404E8278587017012C1D65537C6CBD7"
|
||||
"DDE04AAE338D68115A9F430AFC100AB83CDADF45DCA39DB685"),
|
||||
wvcdm::a2bs_hex(
|
||||
"BDA1AF662A108B3D34421B001E589A64E378CBE5386C17999F5C9E7079F52F56E3"
|
||||
"EEC51C75BCD1C44FFE38709218C66B61A1CB8A7274E89F210D2D6C52905FC963DC"
|
||||
"3F8D79B4EC016642AE3C8AF8D3E322A6EABE4761902D4D79FA3D2D7B827FC5797B"
|
||||
"D909B5C14325643164915D528557F48A95EB3FD2437A7D553197559822AADE0A6A"
|
||||
"A617729FCC58AAF581E78F7C332ED85F3470707E29AFF7BD9D8E785798311CA74C"
|
||||
"C9FB1226EDF74A803B171A891DD56393FB1322D47988E1055095C5F35CF83DB5A3"
|
||||
"940D329B51DDC89EC463712E9B32AEA8877AFE8C5BED67AE700FFC4CCEFFBC4021"
|
||||
"0E7ECA01DFF357ADF4D73A80D2B0C46867B33A5605DFDBD06E"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes10ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex("4884604C8DA8A53CE33D"),
|
||||
wvcdm::a2bs_hex("4884604C8DA8A53CE33D"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes16ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex("4884604C8DA8A53CE33DB9FF8F1C5BB6"),
|
||||
wvcdm::a2bs_hex("8E6B884AB604495C675CA38F0425E23E"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes18ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex("4884604C8DA8A53CE33DB9FF8F1C5BB6BB97"),
|
||||
wvcdm::a2bs_hex("8E6B884AB604495C675CA38F0425E23EBB97"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes160ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex("4884604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF4159655"
|
||||
"5C1BCCE9ED029359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4F"
|
||||
"B4AD8E623C04D503A3DDAD868A6AC55C10D564FC23B8ACFF407DAA"
|
||||
"F4ED2743520E02CDA9680D9EA88E918DF21FDC42F166880D97A222"
|
||||
"5CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A1E4A8B"
|
||||
"6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747"),
|
||||
wvcdm::a2bs_hex("8E6B884AB604495C675CA38F0425E23EBB97F37B39906BF4159655"
|
||||
"5C1BCCE9ED029359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4F"
|
||||
"B4AD8E623C04D503A3DDAD868A6AC55C10D564FC23B8ACFF407DAA"
|
||||
"F4ED2743520E02CDA9680D9EA88E918DF21FDC42F166880D97A222"
|
||||
"5CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A1E4A8B"
|
||||
"6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes175ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"4884604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF41596555C1BCC"
|
||||
"E9ED029359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04"
|
||||
"D503A3DDAD868A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9"
|
||||
"680D9EA88E918DF21FDC42F166880D97A2225CD5C9EA5E7B752F4CF81BBD"
|
||||
"BE98E542EE10E1C6595D259A1E4A8B6D7744CD98C5D3F921ADC252EB7D8A"
|
||||
"F6B916044B676A574747942AC20A89FF79F4C2F25FBA99D6A4"),
|
||||
wvcdm::a2bs_hex("8E6B884AB604495C675CA38F0425E23EBB97F37B39906BF4159655"
|
||||
"5C1BCCE9ED029359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4F"
|
||||
"B4AD8E623C04D503A3DDAD868A6AC55C10D564FC23B8ACFF407DAA"
|
||||
"F4ED2743520E02CDA9680D9EA88E918DF21FDC42F166880D97A222"
|
||||
"5CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A1E4A8B"
|
||||
"6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747942A"
|
||||
"C20A89FF79F4C2F25FBA99D6A4"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes176ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"4884604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF41596555C1BCC"
|
||||
"E9ED029359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04"
|
||||
"D503A3DDAD868A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9"
|
||||
"680D9EA88E918DF21FDC42F166880D97A2225CD5C9EA5E7B752F4CF81BBD"
|
||||
"BE98E542EE10E1C6595D259A1E4A8B6D7744CD98C5D3F921ADC252EB7D8A"
|
||||
"F6B916044B676A574747942AC20A89FF79F4C2F25FBA99D6A446"),
|
||||
wvcdm::a2bs_hex("8E6B884AB604495C675CA38F0425E23EBB97F37B39906BF4159655"
|
||||
"5C1BCCE9ED029359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4F"
|
||||
"B4AD8E623C04D503A3DDAD868A6AC55C10D564FC23B8ACFF407DAA"
|
||||
"F4ED2743520E02CDA9680D9EA88E918DF21FDC42F166880D97A222"
|
||||
"5CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A1E4A8B"
|
||||
"6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747FBDC"
|
||||
"189C42C3C213A71DBCF73A05A1A1"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes192ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"4884604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF41596555C1BCCE9ED02"
|
||||
"9359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04D503A3DDAD86"
|
||||
"8A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E918DF21F"
|
||||
"DC42F166880D97A2225CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A"
|
||||
"1E4A8B6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747942AC20A89"
|
||||
"FF79F4C2F25FBA99D6A44618A8C0420B27D54E3DA17B77C9D43CCA"),
|
||||
wvcdm::a2bs_hex(
|
||||
"8E6B884AB604495C675CA38F0425E23EBB97F37B39906BF41596555C1BCCE9ED02"
|
||||
"9359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04D503A3DDAD86"
|
||||
"8A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E918DF21F"
|
||||
"DC42F166880D97A2225CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A"
|
||||
"1E4A8B6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747FBDC189C42"
|
||||
"C3C213A71DBCF73A05A1A118A8C0420B27D54E3DA17B77C9D43CCA"),
|
||||
},
|
||||
};
|
||||
|
||||
HlsSegmentInfo kSampleAes338ByteSegmentInfo[] = {
|
||||
{
|
||||
true, wvcdm::a2bs_hex("9FBE45DD47DA7EBA09A3E24CBA95C9AF"),
|
||||
wvcdm::a2bs_hex(
|
||||
"4884604C8DA8A53CE33DB9FF8F1C5BB6BB97F37B39906BF41596555C1BCCE9ED02"
|
||||
"9359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04D503A3DDAD86"
|
||||
"8A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E918DF21F"
|
||||
"DC42F166880D97A2225CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A"
|
||||
"1E4A8B6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747942AC20A89"
|
||||
"FF79F4C2F25FBA99D6A44618A8C0420B27D54E3DA17B77C9D43CCA217CE9BDE99B"
|
||||
"D91E9733A1A00B9B557AC3A433DC92633546156817FAE26B6E1C942AC20A89FF79"
|
||||
"F4C2F25FBA99D6A44618A8C0420B27D54E3DA17B77C9D43CCAE7C566D86E98C36D"
|
||||
"2DCA54A966E7B469B6094B9201F200932F8EB5E1A94FB0B977FAB8DFDAD57C677E"
|
||||
"279615F4EAFA872CA8EFF83179E4DE2AB78E6B41A860C422034B875AC282406E03"
|
||||
"AC01F2E407A55DE3"),
|
||||
wvcdm::a2bs_hex(
|
||||
"8E6B884AB604495C675CA38F0425E23EBB97F37B39906BF41596555C1BCCE9ED02"
|
||||
"9359C4CF5906B6AB5BF60FBB3F1A1C7C59ACFC7E4FB4AD8E623C04D503A3DDAD86"
|
||||
"8A6AC55C10D564FC23B8ACFF407DAAF4ED2743520E02CDA9680D9EA88E918DF21F"
|
||||
"DC42F166880D97A2225CD5C9EA5E7B752F4CF81BBDBE98E542EE10E1C6595D259A"
|
||||
"1E4A8B6D7744CD98C5D3F921ADC252EB7D8AF6B916044B676A574747FBDC189C42"
|
||||
"C3C213A71DBCF73A05A1A118A8C0420B27D54E3DA17B77C9D43CCA217CE9BDE99B"
|
||||
"D91E9733A1A00B9B557AC3A433DC92633546156817FAE26B6E1C942AC20A89FF79"
|
||||
"F4C2F25FBA99D6A44618A8C0420B27D54E3DA17B77C9D43CCAE7C566D86E98C36D"
|
||||
"2DCA54A966E7B469B6094B9201F200932F8EB5E1A94FB0B977FAB8DFDAD57C677E"
|
||||
"279615F4EAFA872CA8EFF83179E4DE2AB78E6B41A860C44A27BD03EAB2D3CFCB2C"
|
||||
"F4F5AA93E7025DE3"),
|
||||
},
|
||||
};
|
||||
|
||||
struct HlsDecryptionInfo {
|
||||
bool sample_aes;
|
||||
size_t number_of_segments;
|
||||
HlsSegmentInfo* segment_info;
|
||||
const std::string& attribute_list;
|
||||
};
|
||||
|
||||
HlsDecryptionInfo kHlsDecryptionTestVectors[] = {
|
||||
{false, 1, &kAes128PartialSegmentInfo[0], kAttributeListAes128},
|
||||
{false, 2, &kAes128PartialSegmentInfo[0], kAttributeListAes128},
|
||||
{false, 2, &kAes128MultiSegmentInfo[0], kAttributeListAes128},
|
||||
{true, 1, &kSampleAes10ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes16ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes18ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes160ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes175ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes176ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes192ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
{true, 1, &kSampleAes338ByteSegmentInfo[0], kAttributeListSampleAes},
|
||||
};
|
||||
} // namespace
|
||||
|
||||
namespace wvcdm {
|
||||
@@ -503,6 +820,24 @@ class TestWvCdmEventListener : public WvCdmEventListener {
|
||||
int64_t new_expiry_time_seconds));
|
||||
};
|
||||
|
||||
class TestWvCdmHlsEventListener : public WvCdmEventListener {
|
||||
public:
|
||||
TestWvCdmHlsEventListener() : WvCdmEventListener() {}
|
||||
virtual void OnSessionRenewalNeeded(const CdmSessionId&) {}
|
||||
virtual void OnSessionKeysChange(const CdmSessionId&,
|
||||
const CdmKeyStatusMap& keys_status,
|
||||
bool) {
|
||||
key_status_map_ = keys_status;
|
||||
}
|
||||
|
||||
virtual void OnExpirationUpdate(const CdmSessionId&,
|
||||
int64_t) {}
|
||||
|
||||
CdmKeyStatusMap GetKeyStatusMap() { return key_status_map_; }
|
||||
private:
|
||||
CdmKeyStatusMap key_status_map_;
|
||||
};
|
||||
|
||||
class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
public:
|
||||
WvCdmRequestLicenseTest() {}
|
||||
@@ -538,12 +873,24 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase {
|
||||
CdmAppParameterMap& app_parameters,
|
||||
CdmLicenseType license_type,
|
||||
CdmClientPropertySet* property_set) {
|
||||
std::string init_data_type = "video/mp4";
|
||||
GenerateKeyRequest(wvcdm::KEY_MESSAGE, init_data_type, init_data,
|
||||
app_parameters, license_type, property_set);
|
||||
}
|
||||
|
||||
void GenerateKeyRequest(CdmResponseType expected_response,
|
||||
const std::string& init_data_type,
|
||||
const std::string& init_data,
|
||||
CdmAppParameterMap& app_parameters,
|
||||
CdmLicenseType license_type,
|
||||
CdmClientPropertySet* property_set) {
|
||||
CdmKeyRequest key_request;
|
||||
std::string key_set_id;
|
||||
EXPECT_EQ(wvcdm::KEY_MESSAGE,
|
||||
EXPECT_EQ(expected_response,
|
||||
decryptor_.GenerateKeyRequest(
|
||||
session_id_, key_set_id, "video/mp4", init_data, license_type,
|
||||
app_parameters, property_set, EMPTY_ORIGIN, &key_request));
|
||||
session_id_, key_set_id, init_data_type, init_data,
|
||||
license_type, app_parameters, property_set, EMPTY_ORIGIN,
|
||||
&key_request));
|
||||
key_msg_ = key_request.message;
|
||||
EXPECT_EQ(0u, key_request.url.size());
|
||||
}
|
||||
@@ -2815,6 +3162,91 @@ TEST(VersionNumberTest, VersionNumberChangeCanary) {
|
||||
"this test after changing it?";
|
||||
}
|
||||
|
||||
TEST_F(WvCdmRequestLicenseTest, AddHlsStreamingKeyTest) {
|
||||
decryptor_.OpenSession(g_key_system, NULL, EMPTY_ORIGIN, NULL, &session_id_);
|
||||
CdmAppParameterMap app_parameters;
|
||||
GenerateKeyRequest(wvcdm::KEY_MESSAGE, HLS_INIT_DATA_FORMAT,
|
||||
kAttributeListSampleAes, app_parameters,
|
||||
kLicenseTypeStreaming, NULL);
|
||||
//TODO(rfrias): Remove once we switch to git-on-borg
|
||||
std::string license_server = "https://proxy.uat.widevine.com/proxy";
|
||||
VerifyKeyRequestResponse(license_server, g_client_auth, false);
|
||||
decryptor_.CloseSession(session_id_);
|
||||
}
|
||||
|
||||
class WvHlsInitDataTest
|
||||
: public WvCdmRequestLicenseTest,
|
||||
public ::testing::WithParamInterface<std::string> {};
|
||||
|
||||
TEST_P(WvHlsInitDataTest, InvalidHlsFormatTest) {
|
||||
decryptor_.OpenSession(g_key_system, NULL, EMPTY_ORIGIN, NULL, &session_id_);
|
||||
CdmAppParameterMap app_parameters;
|
||||
std::string init_data = GetParam();
|
||||
GenerateKeyRequest(wvcdm::INIT_DATA_NOT_FOUND, HLS_INIT_DATA_FORMAT,
|
||||
init_data, app_parameters, kLicenseTypeStreaming, NULL);
|
||||
decryptor_.CloseSession(session_id_);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Cdm, WvHlsInitDataTest,
|
||||
::testing::Values(
|
||||
kAttributeListKeyFormatNonWidevine,
|
||||
kAttributeListKeyFormatVersionUnregonized,
|
||||
kAttributeListUnspecifiedIv,
|
||||
kAttributeListUnspecifiedMethod));
|
||||
|
||||
class WvHlsDecryptionTest
|
||||
: public WvCdmRequestLicenseTest,
|
||||
public ::testing::WithParamInterface<HlsDecryptionInfo*> {};
|
||||
|
||||
TEST_P(WvHlsDecryptionTest, HlsDecryptionTest) {
|
||||
Provision(kLevel3);
|
||||
TestWvCdmClientPropertySet client_property_set;
|
||||
client_property_set.set_security_level(QUERY_VALUE_SECURITY_LEVEL_L3);
|
||||
HlsDecryptionInfo* info = GetParam();
|
||||
|
||||
TestWvCdmHlsEventListener listener;
|
||||
decryptor_.OpenSession(g_key_system, &client_property_set, EMPTY_ORIGIN,
|
||||
&listener, &session_id_);
|
||||
CdmAppParameterMap app_parameters;
|
||||
GenerateKeyRequest(wvcdm::KEY_MESSAGE, HLS_INIT_DATA_FORMAT,
|
||||
info->attribute_list, app_parameters,
|
||||
kLicenseTypeStreaming, NULL);
|
||||
//TODO(rfrias): Remove once we switch to git-on-borg
|
||||
std::string license_server = "https://proxy.uat.widevine.com/proxy";
|
||||
VerifyKeyRequestResponse(license_server, g_client_auth, false);
|
||||
CdmKeyStatusMap key_status_map = listener.GetKeyStatusMap();
|
||||
EXPECT_EQ(1u, key_status_map.size());
|
||||
KeyId key_id = key_status_map.begin()->first;
|
||||
EXPECT_EQ(KEY_ID_SIZE, key_id.size());
|
||||
|
||||
for (size_t i = 0; i < info->number_of_segments; ++i) {
|
||||
HlsSegmentInfo* data = info->segment_info + i;
|
||||
std::vector<uint8_t> output_buffer(data->encrypted_data.size(), 0);
|
||||
std::vector<uint8_t> iv(data->iv.begin(), data->iv.end());
|
||||
CdmDecryptionParameters decryption_parameters(
|
||||
&key_id, reinterpret_cast<const uint8_t*>(data->encrypted_data.c_str()),
|
||||
data->encrypted_data.size(), &iv, 0, &output_buffer[0]);
|
||||
decryption_parameters.is_encrypted = true;
|
||||
decryption_parameters.is_secure = false;
|
||||
decryption_parameters.cipher_mode = kCipherModeCbc;
|
||||
if (info->sample_aes) {
|
||||
decryption_parameters.pattern_descriptor.encrypt_blocks = 1;
|
||||
decryption_parameters.pattern_descriptor.skip_blocks = 9;
|
||||
}
|
||||
EXPECT_EQ(NO_ERROR, decryptor_.Decrypt(session_id_, false,
|
||||
decryption_parameters));
|
||||
EXPECT_EQ(data->clear_data,
|
||||
std::string(reinterpret_cast<const char*>(&output_buffer[0]),
|
||||
output_buffer.size()));
|
||||
}
|
||||
|
||||
decryptor_.CloseSession(session_id_);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Cdm, WvHlsDecryptionTest,
|
||||
::testing::Range(&kHlsDecryptionTestVectors[0],
|
||||
&kHlsDecryptionTestVectors[11]));
|
||||
|
||||
} // namespace wvcdm
|
||||
|
||||
void show_menu(char* prog_name) {
|
||||
|
||||
Reference in New Issue
Block a user