18d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce/* 28d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * Copyright (C) 2014 The Android Open Source Project 38d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * 48d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * Licensed under the Apache License, Version 2.0 (the "License"); 58d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * you may not use this file except in compliance with the License. 68d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * You may obtain a copy of the License at 78d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * 88d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * http://www.apache.org/licenses/LICENSE-2.0 98d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * 108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * Unless required by applicable law or agreed to in writing, software 118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * distributed under the License is distributed on an "AS IS" BASIS, 128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * See the License for the specific language governing permissions and 148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * limitations under the License. 158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce */ 168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <gtest/gtest.h> 188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <string.h> 198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <media/stagefright/foundation/AString.h> 218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <media/stagefright/foundation/base64.h> 228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <utils/String8.h> 238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <utils/Vector.h> 248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include "InitDataParser.h" 268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Brucenamespace clearkeydrm { 288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruceusing namespace android; 308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Brucenamespace { 328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kKeyIdSize = 16; 338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8 kCencType("cenc"); 348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8 kWebMType("webm"); 358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8 kBase64Padding("="); 368d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 378d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 388d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruceclass InitDataParserTest : public ::testing::Test { 398d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce protected: 408d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce status_t attemptParse(const Vector<uint8_t>& initData, 418d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8& initDataType, 428d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t>* licenseRequest) { 438d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce InitDataParser parser; 448d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce return parser.parse(initData, initDataType, licenseRequest); 458d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce } 468d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 478d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce void attemptParseExpectingSuccess(const Vector<uint8_t>& initData, 488d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8& initDataType, 498d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const Vector<String8>& expectedKeys) { 508d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8 kRequestPrefix("{\"kids\":["); 518d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8 kRequestSuffix("],\"type\":\"temporary\"}"); 528d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> request; 538d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce ASSERT_EQ(android::OK, attemptParse(initData, initDataType, &request)); 548d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 558d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce String8 requestString(reinterpret_cast<const char*>(request.array()), 568d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce request.size()); 578d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce EXPECT_EQ(0, requestString.find(kRequestPrefix)); 588d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce EXPECT_EQ(requestString.size() - kRequestSuffix.size(), 598d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce requestString.find(kRequestSuffix)); 608d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce for (size_t i = 0; i < expectedKeys.size(); ++i) { 618d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce AString encodedIdAString; 628d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce android::encodeBase64(expectedKeys[i], kKeyIdSize, 638d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce &encodedIdAString); 648d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce String8 encodedId(encodedIdAString.c_str()); 658d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce encodedId.removeAll(kBase64Padding); 668d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce EXPECT_TRUE(requestString.contains(encodedId)); 678d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce } 688d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce } 698d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 708d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce void attemptParseExpectingFailure(const Vector<uint8_t>& initData, 718d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const String8& initDataType) { 728d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> request; 738d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce ASSERT_NE(android::OK, attemptParse(initData, initDataType, &request)); 748d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce EXPECT_EQ(0, request.size()); 758d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce } 768d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce}; 778d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 788d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, ParsesSingleKeyPssh) { 798d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[52] = { 808d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 52, // Total Size 818d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', // PSSH 828d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1, 0, 0, 0, // Version 838d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // System ID 848d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 858d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 1, // Key Count 868d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID #1 878d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 888d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0 // Data Size (always 0) 898d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 908d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 918d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 52); 928d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 938d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<String8> expectedKeys; 948d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce expectedKeys.push(String8("01234567890ABCDE")); 958d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 968d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingSuccess(initData, kCencType, expectedKeys); 978d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 988d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 998d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, ParsesMultipleKeyPssh) { 1008d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[84] = { 1018d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 84, // Total Size 1028d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', // PSSH 1038d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1, 0, 0, 0, // Version 1048d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // System ID 1058d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 1068d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 3, // Key Count 1078d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID #1 1088d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 1098d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x43, 0x6c, 0x65, 0x61, 0x72, 0x4b, 0x65, 0x79, // Key ID #2 1108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x43, 0x6c, 0x65, 0x61, 0x72, 0x4b, 0x65, 0x79, // "ClearKeyClearKey" 1118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x20, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x20, // Key ID #3 1128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x20, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x20, // " GOOGLE GOOGLE " 1138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0 // Data Size (always 0) 1148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 1168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 84); 1178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<String8> expectedKeys; 1198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce expectedKeys.push(String8("01234567890ABCDE")); 1208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce expectedKeys.push(String8("ClearKeyClearKey")); 1218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce expectedKeys.push(String8(" GOOGLE GOOGLE ")); 1228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingSuccess(initData, kCencType, expectedKeys); 1248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, ParsesWebM) { 1278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t initDataRaw[16] = { 1288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID 1298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 1308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 1328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(initDataRaw, 16); 1338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<String8> expectedKeys; 1358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce expectedKeys.push(String8("01234567890ABCDE")); 1368d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1378d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingSuccess(initData, kWebMType, expectedKeys); 1388d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1398d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1408d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, FailsForPsshTooSmall) { 1418d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[16] = { 1428d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 52, 1438d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', 1448d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1, 0, 0, 0, 1458d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec 1468d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1478d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 1488d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 16); 1498d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1508d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingFailure(initData, kCencType); 1518d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1528d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1538d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, FailsForWebMTooSmall) { 1548d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t initDataRaw[8] = { 1558d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 1568d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1578d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 1588d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(initDataRaw, 8); 1598d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1608d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingFailure(initData, kWebMType); 1618d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1628d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1638d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, FailsForPsshBadSystemId) { 1648d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[52] = { 1658d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 52, // Total Size 1668d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', // PSSH 1678d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1, 0, 0, 0, // Version 1688d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, // System ID 1698d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, 1708d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 1, // Key Count 1718d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID #1 1728d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 1738d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0 // Data Size (always 0) 1748d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1758d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 1768d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 52); 1778d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1788d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingFailure(initData, kCencType); 1798d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1808d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1818d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, FailsForPsshBadSize) { 1828d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[52] = { 1838d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 70, 200, // Total Size 1848d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', // PSSH 1858d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1, 0, 0, 0, // Version 1868d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // System ID 1878d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 1888d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 1, // Key Count 1898d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID #1 1908d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 1918d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0 // Data Size (always 0) 1928d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1938d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 1948d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 52); 1958d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1968d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingFailure(initData, kCencType); 1978d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1988d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1998d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, FailsForPsshWrongVersion) { 2008d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[52] = { 2018d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 52, // Total Size 2028d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', // PSSH 2038d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0, // Version 2048d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // System ID 2058d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 2068d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 1, // Key Count 2078d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID #1 2088d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 2098d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0 // Data Size (always 0) 2108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 2128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 52); 2138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingFailure(initData, kCencType); 2158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 2168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(InitDataParserTest, FailsForPsshBadKeyCount) { 2188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t pssh[52] = { 2198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 52, // Total Size 2208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 'p', 's', 's', 'h', // PSSH 2218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1, 0, 0, 0, // Version 2228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // System ID 2238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 2248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 7, // Key Count 2258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // Key ID #1 2268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, // "01234567890ABCDE" 2278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0, 0, 0, 0 // Data Size (always 0) 2288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> initData; 2308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce initData.appendArray(pssh, 52); 2318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptParseExpectingFailure(initData, kCencType); 2338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 2348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} // namespace clearkeydrm 236