OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cdm/cenc_utils.h" | 5 #include "media/cdm/cenc_utils.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 namespace media { | 10 namespace media { |
11 | 11 |
12 const uint8 kKey1Data[] = { | 12 const uint8_t kKey1Data[] = { |
13 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, | 13 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, |
14 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03 | 14 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03 |
15 }; | 15 }; |
16 const uint8 kKey2Data[] = { | 16 const uint8_t kKey2Data[] = { |
17 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, | 17 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, |
18 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, | 18 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, |
19 }; | 19 }; |
20 const uint8 kKey3Data[] = { | 20 const uint8_t kKey3Data[] = { |
21 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x05, | 21 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x05, |
22 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x05, | 22 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x05, |
23 }; | 23 }; |
24 const uint8 kKey4Data[] = { | 24 const uint8_t kKey4Data[] = { |
25 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x06, | 25 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x06, |
26 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x06, | 26 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x06, |
27 }; | 27 }; |
28 | 28 |
29 class CencUtilsTest : public testing::Test { | 29 class CencUtilsTest : public testing::Test { |
30 public: | 30 public: |
31 CencUtilsTest() | 31 CencUtilsTest() |
32 : key1_(kKey1Data, kKey1Data + arraysize(kKey1Data)), | 32 : key1_(kKey1Data, kKey1Data + arraysize(kKey1Data)), |
33 key2_(kKey2Data, kKey2Data + arraysize(kKey2Data)), | 33 key2_(kKey2Data, kKey2Data + arraysize(kKey2Data)), |
34 key3_(kKey3Data, kKey3Data + arraysize(kKey3Data)), | 34 key3_(kKey3Data, kKey3Data + arraysize(kKey3Data)), |
35 key4_(kKey4Data, kKey4Data + arraysize(kKey4Data)) {} | 35 key4_(kKey4Data, kKey4Data + arraysize(kKey4Data)) {} |
36 | 36 |
37 protected: | 37 protected: |
38 // Initialize the start of the 'pssh' box (up to key_count) | 38 // Initialize the start of the 'pssh' box (up to key_count) |
39 void InitializePSSHBox(std::vector<uint8>* box, uint8 size, uint8 version) { | 39 void InitializePSSHBox(std::vector<uint8_t>* box, |
| 40 uint8_t size, |
| 41 uint8_t version) { |
40 DCHECK(box->size() == 0); | 42 DCHECK(box->size() == 0); |
41 | 43 |
42 box->reserve(size); | 44 box->reserve(size); |
43 // Add size. | 45 // Add size. |
44 box->push_back(0); | 46 box->push_back(0); |
45 box->push_back(0); | 47 box->push_back(0); |
46 box->push_back(0); | 48 box->push_back(0); |
47 box->push_back(size); | 49 box->push_back(size); |
48 // Add 'pssh'. | 50 // Add 'pssh'. |
49 box->push_back('p'); | 51 box->push_back('p'); |
(...skipping 18 matching lines...) Expand all Loading... |
68 box->push_back(0xAC); | 70 box->push_back(0xAC); |
69 box->push_back(0xE3); | 71 box->push_back(0xE3); |
70 box->push_back(0x3C); | 72 box->push_back(0x3C); |
71 box->push_back(0x1E); | 73 box->push_back(0x1E); |
72 box->push_back(0x52); | 74 box->push_back(0x52); |
73 box->push_back(0xE2); | 75 box->push_back(0xE2); |
74 box->push_back(0xFB); | 76 box->push_back(0xFB); |
75 box->push_back(0x4B); | 77 box->push_back(0x4B); |
76 } | 78 } |
77 | 79 |
78 std::vector<uint8> MakePSSHBox(uint8 version) { | 80 std::vector<uint8_t> MakePSSHBox(uint8_t version) { |
79 std::vector<uint8> box; | 81 std::vector<uint8_t> box; |
80 uint8 size = (version == 0) ? 32 : 36; | 82 uint8_t size = (version == 0) ? 32 : 36; |
81 InitializePSSHBox(&box, size, version); | 83 InitializePSSHBox(&box, size, version); |
82 if (version > 0) { | 84 if (version > 0) { |
83 // Add key_count (= 0). | 85 // Add key_count (= 0). |
84 box.push_back(0); | 86 box.push_back(0); |
85 box.push_back(0); | 87 box.push_back(0); |
86 box.push_back(0); | 88 box.push_back(0); |
87 box.push_back(0); | 89 box.push_back(0); |
88 } | 90 } |
89 // Add data_size (= 0). | 91 // Add data_size (= 0). |
90 box.push_back(0); | 92 box.push_back(0); |
91 box.push_back(0); | 93 box.push_back(0); |
92 box.push_back(0); | 94 box.push_back(0); |
93 box.push_back(0); | 95 box.push_back(0); |
94 return box; | 96 return box; |
95 } | 97 } |
96 | 98 |
97 std::vector<uint8> MakePSSHBox(uint8 version, | 99 std::vector<uint8_t> MakePSSHBox(uint8_t version, |
98 const std::vector<uint8>& key1) { | 100 const std::vector<uint8_t>& key1) { |
99 DCHECK(version > 0); | 101 DCHECK(version > 0); |
100 DCHECK(key1.size() == 16); | 102 DCHECK(key1.size() == 16); |
101 | 103 |
102 std::vector<uint8> box; | 104 std::vector<uint8_t> box; |
103 uint8 size = 52; | 105 uint8_t size = 52; |
104 InitializePSSHBox(&box, size, version); | 106 InitializePSSHBox(&box, size, version); |
105 | 107 |
106 // Add key_count (= 1). | 108 // Add key_count (= 1). |
107 box.push_back(0); | 109 box.push_back(0); |
108 box.push_back(0); | 110 box.push_back(0); |
109 box.push_back(0); | 111 box.push_back(0); |
110 box.push_back(1); | 112 box.push_back(1); |
111 | 113 |
112 // Add key1. | 114 // Add key1. |
113 for (int i = 0; i < 16; ++i) | 115 for (int i = 0; i < 16; ++i) |
114 box.push_back(key1[i]); | 116 box.push_back(key1[i]); |
115 | 117 |
116 // Add data_size (= 0). | 118 // Add data_size (= 0). |
117 box.push_back(0); | 119 box.push_back(0); |
118 box.push_back(0); | 120 box.push_back(0); |
119 box.push_back(0); | 121 box.push_back(0); |
120 box.push_back(0); | 122 box.push_back(0); |
121 return box; | 123 return box; |
122 } | 124 } |
123 | 125 |
124 std::vector<uint8> MakePSSHBox(uint8 version, | 126 std::vector<uint8_t> MakePSSHBox(uint8_t version, |
125 const std::vector<uint8>& key1, | 127 const std::vector<uint8_t>& key1, |
126 const std::vector<uint8>& key2) { | 128 const std::vector<uint8_t>& key2) { |
127 DCHECK(version > 0); | 129 DCHECK(version > 0); |
128 DCHECK(key1.size() == 16); | 130 DCHECK(key1.size() == 16); |
129 DCHECK(key2.size() == 16); | 131 DCHECK(key2.size() == 16); |
130 | 132 |
131 std::vector<uint8> box; | 133 std::vector<uint8_t> box; |
132 uint8 size = 68; | 134 uint8_t size = 68; |
133 InitializePSSHBox(&box, size, version); | 135 InitializePSSHBox(&box, size, version); |
134 | 136 |
135 // Add key_count (= 2). | 137 // Add key_count (= 2). |
136 box.push_back(0); | 138 box.push_back(0); |
137 box.push_back(0); | 139 box.push_back(0); |
138 box.push_back(0); | 140 box.push_back(0); |
139 box.push_back(2); | 141 box.push_back(2); |
140 | 142 |
141 // Add key1. | 143 // Add key1. |
142 for (int i = 0; i < 16; ++i) | 144 for (int i = 0; i < 16; ++i) |
143 box.push_back(key1[i]); | 145 box.push_back(key1[i]); |
144 | 146 |
145 // Add key2. | 147 // Add key2. |
146 for (int i = 0; i < 16; ++i) | 148 for (int i = 0; i < 16; ++i) |
147 box.push_back(key2[i]); | 149 box.push_back(key2[i]); |
148 | 150 |
149 // Add data_size (= 0). | 151 // Add data_size (= 0). |
150 box.push_back(0); | 152 box.push_back(0); |
151 box.push_back(0); | 153 box.push_back(0); |
152 box.push_back(0); | 154 box.push_back(0); |
153 box.push_back(0); | 155 box.push_back(0); |
154 return box; | 156 return box; |
155 } | 157 } |
156 | 158 |
157 const std::vector<uint8>& Key1() { return key1_; } | 159 const std::vector<uint8_t>& Key1() { return key1_; } |
158 const std::vector<uint8>& Key2() { return key2_; } | 160 const std::vector<uint8_t>& Key2() { return key2_; } |
159 const std::vector<uint8>& Key3() { return key3_; } | 161 const std::vector<uint8_t>& Key3() { return key3_; } |
160 const std::vector<uint8>& Key4() { return key4_; } | 162 const std::vector<uint8_t>& Key4() { return key4_; } |
161 | 163 |
162 private: | 164 private: |
163 std::vector<uint8> key1_; | 165 std::vector<uint8_t> key1_; |
164 std::vector<uint8> key2_; | 166 std::vector<uint8_t> key2_; |
165 std::vector<uint8> key3_; | 167 std::vector<uint8_t> key3_; |
166 std::vector<uint8> key4_; | 168 std::vector<uint8_t> key4_; |
167 }; | 169 }; |
168 | 170 |
169 TEST_F(CencUtilsTest, EmptyPSSH) { | 171 TEST_F(CencUtilsTest, EmptyPSSH) { |
170 std::vector<std::vector<uint8>> key_ids; | 172 KeyIdList key_ids; |
171 EXPECT_TRUE(ValidatePsshInput(nullptr, 0)); | 173 EXPECT_TRUE(ValidatePsshInput(std::vector<uint8_t>())); |
172 EXPECT_TRUE(GetKeyIdsForCommonSystemId(nullptr, 0, &key_ids)); | 174 EXPECT_TRUE(GetKeyIdsForCommonSystemId(std::vector<uint8_t>(), &key_ids)); |
173 EXPECT_EQ(0u, key_ids.size()); | 175 EXPECT_EQ(0u, key_ids.size()); |
174 } | 176 } |
175 | 177 |
176 TEST_F(CencUtilsTest, PSSHVersion0) { | 178 TEST_F(CencUtilsTest, PSSHVersion0) { |
177 std::vector<uint8> box = MakePSSHBox(0); | 179 std::vector<uint8_t> box = MakePSSHBox(0); |
178 std::vector<std::vector<uint8>> key_ids; | 180 KeyIdList key_ids; |
179 EXPECT_TRUE(ValidatePsshInput(&box[0], box.size())); | 181 EXPECT_TRUE(ValidatePsshInput(box)); |
180 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 182 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
181 EXPECT_EQ(0u, key_ids.size()); | 183 EXPECT_EQ(0u, key_ids.size()); |
182 } | 184 } |
183 | 185 |
184 TEST_F(CencUtilsTest, PSSHVersion1WithNoKeys) { | 186 TEST_F(CencUtilsTest, PSSHVersion1WithNoKeys) { |
185 std::vector<uint8> box = MakePSSHBox(1); | 187 std::vector<uint8_t> box = MakePSSHBox(1); |
186 std::vector<std::vector<uint8>> key_ids; | 188 KeyIdList key_ids; |
187 EXPECT_TRUE(ValidatePsshInput(&box[0], box.size())); | 189 EXPECT_TRUE(ValidatePsshInput(box)); |
188 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 190 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
189 EXPECT_EQ(0u, key_ids.size()); | 191 EXPECT_EQ(0u, key_ids.size()); |
190 } | 192 } |
191 | 193 |
192 TEST_F(CencUtilsTest, PSSHVersion1WithOneKey) { | 194 TEST_F(CencUtilsTest, PSSHVersion1WithOneKey) { |
193 std::vector<uint8> box = MakePSSHBox(1, Key1()); | 195 std::vector<uint8_t> box = MakePSSHBox(1, Key1()); |
194 std::vector<std::vector<uint8>> key_ids; | 196 KeyIdList key_ids; |
195 EXPECT_TRUE(ValidatePsshInput(&box[0], box.size())); | 197 EXPECT_TRUE(ValidatePsshInput(box)); |
196 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 198 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
197 EXPECT_EQ(1u, key_ids.size()); | 199 EXPECT_EQ(1u, key_ids.size()); |
198 EXPECT_EQ(key_ids[0], Key1()); | 200 EXPECT_EQ(key_ids[0], Key1()); |
199 } | 201 } |
200 | 202 |
201 TEST_F(CencUtilsTest, PSSHVersion1WithTwoKeys) { | 203 TEST_F(CencUtilsTest, PSSHVersion1WithTwoKeys) { |
202 std::vector<uint8> box = MakePSSHBox(1, Key1(), Key2()); | 204 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); |
203 std::vector<std::vector<uint8>> key_ids; | 205 KeyIdList key_ids; |
204 EXPECT_TRUE(ValidatePsshInput(&box[0], box.size())); | 206 EXPECT_TRUE(ValidatePsshInput(box)); |
205 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 207 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
206 EXPECT_EQ(2u, key_ids.size()); | 208 EXPECT_EQ(2u, key_ids.size()); |
207 EXPECT_EQ(key_ids[0], Key1()); | 209 EXPECT_EQ(key_ids[0], Key1()); |
208 EXPECT_EQ(key_ids[1], Key2()); | 210 EXPECT_EQ(key_ids[1], Key2()); |
209 } | 211 } |
210 | 212 |
211 TEST_F(CencUtilsTest, PSSHVersion0Plus1) { | 213 TEST_F(CencUtilsTest, PSSHVersion0Plus1) { |
212 std::vector<uint8> box0 = MakePSSHBox(0); | 214 std::vector<uint8_t> box0 = MakePSSHBox(0); |
213 std::vector<uint8> box1 = MakePSSHBox(1, Key1()); | 215 std::vector<uint8_t> box1 = MakePSSHBox(1, Key1()); |
214 | 216 |
215 // Concatentate box1 into box0. | 217 // Concatentate box1 into box0. |
216 for (const auto& value : box1) | 218 for (const auto& value : box1) |
217 box0.push_back(value); | 219 box0.push_back(value); |
218 | 220 |
219 std::vector<std::vector<uint8>> key_ids; | 221 KeyIdList key_ids; |
220 EXPECT_TRUE(ValidatePsshInput(&box0[0], box0.size())); | 222 EXPECT_TRUE(ValidatePsshInput(box0)); |
221 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box0[0], box0.size(), &key_ids)); | 223 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box0, &key_ids)); |
222 EXPECT_EQ(1u, key_ids.size()); | 224 EXPECT_EQ(1u, key_ids.size()); |
223 EXPECT_EQ(key_ids[0], Key1()); | 225 EXPECT_EQ(key_ids[0], Key1()); |
224 } | 226 } |
225 | 227 |
226 TEST_F(CencUtilsTest, PSSHVersion1Plus0) { | 228 TEST_F(CencUtilsTest, PSSHVersion1Plus0) { |
227 std::vector<uint8> box0 = MakePSSHBox(0); | 229 std::vector<uint8_t> box0 = MakePSSHBox(0); |
228 std::vector<uint8> box1 = MakePSSHBox(1, Key1()); | 230 std::vector<uint8_t> box1 = MakePSSHBox(1, Key1()); |
229 | 231 |
230 // Concatentate box0 into box1. | 232 // Concatentate box0 into box1. |
231 for (const auto& value : box0) | 233 for (const auto& value : box0) |
232 box1.push_back(value); | 234 box1.push_back(value); |
233 | 235 |
234 std::vector<std::vector<uint8>> key_ids; | 236 KeyIdList key_ids; |
235 EXPECT_TRUE(ValidatePsshInput(&box1[0], box1.size())); | 237 EXPECT_TRUE(ValidatePsshInput(box1)); |
236 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box1[0], box1.size(), &key_ids)); | 238 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box1, &key_ids)); |
237 EXPECT_EQ(1u, key_ids.size()); | 239 EXPECT_EQ(1u, key_ids.size()); |
238 EXPECT_EQ(key_ids[0], Key1()); | 240 EXPECT_EQ(key_ids[0], Key1()); |
239 } | 241 } |
240 | 242 |
241 TEST_F(CencUtilsTest, MultiplePSSHVersion1) { | 243 TEST_F(CencUtilsTest, MultiplePSSHVersion1) { |
242 std::vector<uint8> box = MakePSSHBox(1, Key1(), Key2()); | 244 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); |
243 std::vector<uint8> box1 = MakePSSHBox(1, Key3()); | 245 std::vector<uint8_t> box1 = MakePSSHBox(1, Key3()); |
244 std::vector<uint8> box2 = MakePSSHBox(1, Key4()); | 246 std::vector<uint8_t> box2 = MakePSSHBox(1, Key4()); |
245 | 247 |
246 // Concatentate box1 into box. | 248 // Concatentate box1 into box. |
247 for (const auto& value : box1) | 249 for (const auto& value : box1) |
248 box.push_back(value); | 250 box.push_back(value); |
249 // Concatentate box2 into box. | 251 // Concatentate box2 into box. |
250 for (const auto& value : box2) | 252 for (const auto& value : box2) |
251 box.push_back(value); | 253 box.push_back(value); |
252 | 254 |
253 std::vector<std::vector<uint8>> key_ids; | 255 KeyIdList key_ids; |
254 EXPECT_TRUE(ValidatePsshInput(&box[0], box.size())); | 256 EXPECT_TRUE(ValidatePsshInput(box)); |
255 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 257 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
256 EXPECT_EQ(4u, key_ids.size()); | 258 EXPECT_EQ(4u, key_ids.size()); |
257 EXPECT_EQ(key_ids[0], Key1()); | 259 EXPECT_EQ(key_ids[0], Key1()); |
258 EXPECT_EQ(key_ids[1], Key2()); | 260 EXPECT_EQ(key_ids[1], Key2()); |
259 EXPECT_EQ(key_ids[2], Key3()); | 261 EXPECT_EQ(key_ids[2], Key3()); |
260 EXPECT_EQ(key_ids[3], Key4()); | 262 EXPECT_EQ(key_ids[3], Key4()); |
261 } | 263 } |
262 | 264 |
263 TEST_F(CencUtilsTest, InvalidPSSH) { | 265 TEST_F(CencUtilsTest, InvalidPSSH) { |
264 std::vector<uint8> box = MakePSSHBox(1, Key1(), Key2()); | 266 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); |
265 std::vector<std::vector<uint8>> key_ids; | 267 KeyIdList key_ids; |
266 for (uint32 i = 1; i < box.size(); ++i) { | 268 for (uint32 i = 1; i < box.size(); ++i) { |
267 // Modify size of data passed to be less than real size. | 269 // Modify size of data passed to be less than real size. |
268 EXPECT_FALSE(ValidatePsshInput(&box[0], i)); | 270 std::vector<uint8_t> truncated(&box[0], &box[0] + i); |
269 EXPECT_FALSE(GetKeyIdsForCommonSystemId(&box[0], i, &key_ids)); | 271 EXPECT_FALSE(ValidatePsshInput(truncated)); |
| 272 EXPECT_FALSE(GetKeyIdsForCommonSystemId(truncated, &key_ids)); |
270 // Modify starting point. | 273 // Modify starting point. |
271 EXPECT_FALSE(ValidatePsshInput(&box[i], box.size() - i)); | 274 std::vector<uint8_t> changed_offset(&box[i], &box[i] + box.size() - i); |
272 EXPECT_FALSE(GetKeyIdsForCommonSystemId(&box[i], box.size() - i, &key_ids)); | 275 EXPECT_FALSE(ValidatePsshInput(changed_offset)); |
| 276 EXPECT_FALSE(GetKeyIdsForCommonSystemId(changed_offset, &key_ids)); |
273 } | 277 } |
274 } | 278 } |
275 | 279 |
276 TEST_F(CencUtilsTest, InvalidSystemID) { | 280 TEST_F(CencUtilsTest, InvalidSystemID) { |
277 std::vector<uint8> box = MakePSSHBox(1, Key1(), Key2()); | 281 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); |
278 | 282 |
279 // Modify the System ID. | 283 // Modify the System ID. |
280 ++box[20]; | 284 ++box[20]; |
281 | 285 |
282 std::vector<std::vector<uint8>> key_ids; | 286 KeyIdList key_ids; |
283 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 287 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
284 EXPECT_EQ(0u, key_ids.size()); | 288 EXPECT_EQ(0u, key_ids.size()); |
285 } | 289 } |
286 | 290 |
287 TEST_F(CencUtilsTest, InvalidFlags) { | 291 TEST_F(CencUtilsTest, InvalidFlags) { |
288 std::vector<uint8> box = MakePSSHBox(1, Key1(), Key2()); | 292 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); |
289 | 293 |
290 // Modify flags. | 294 // Modify flags. |
291 box[10] = 3; | 295 box[10] = 3; |
292 | 296 |
293 std::vector<std::vector<uint8>> key_ids; | 297 KeyIdList key_ids; |
294 // TODO(jrummell): This should fail as the 'pssh' box is skipped. | 298 // TODO(jrummell): This should fail as the 'pssh' box is skipped. |
295 EXPECT_TRUE(GetKeyIdsForCommonSystemId(&box[0], box.size(), &key_ids)); | 299 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); |
296 EXPECT_EQ(0u, key_ids.size()); | 300 EXPECT_EQ(0u, key_ids.size()); |
297 } | 301 } |
298 | 302 |
299 TEST_F(CencUtilsTest, LongSize) { | 303 TEST_F(CencUtilsTest, LongSize) { |
300 const uint8 data[] = { | 304 const uint8_t data[] = { |
301 0x00, 0x00, 0x00, 0x01, // size = 1 | 305 0x00, 0x00, 0x00, 0x01, // size = 1 |
302 0x70, 0x73, 0x73, 0x68, // 'pssh' | 306 0x70, 0x73, 0x73, 0x68, // 'pssh' |
303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, // longsize | 307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, // longsize |
304 0x01, // version | 308 0x01, // version |
305 0x00, 0x00, 0x00, // flags | 309 0x00, 0x00, 0x00, // flags |
306 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID | 310 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID |
307 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, | 311 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, |
308 0x00, 0x00, 0x00, 0x02, // key count | 312 0x00, 0x00, 0x00, 0x02, // key count |
309 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 | 313 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 |
310 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, | 314 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, |
311 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 | 315 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 |
312 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, | 316 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, |
313 0x00, 0x00, 0x00, 0x00 // datasize | 317 0x00, 0x00, 0x00, 0x00 // datasize |
314 }; | 318 }; |
315 | 319 |
316 std::vector<std::vector<uint8>> key_ids; | 320 KeyIdList key_ids; |
317 EXPECT_TRUE(ValidatePsshInput(data, arraysize(data))); | 321 EXPECT_TRUE( |
318 EXPECT_TRUE(GetKeyIdsForCommonSystemId(data, arraysize(data), &key_ids)); | 322 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data)))); |
| 323 EXPECT_TRUE(GetKeyIdsForCommonSystemId( |
| 324 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids)); |
319 EXPECT_EQ(2u, key_ids.size()); | 325 EXPECT_EQ(2u, key_ids.size()); |
320 } | 326 } |
321 | 327 |
322 TEST_F(CencUtilsTest, NoSize) { | 328 TEST_F(CencUtilsTest, NoSize) { |
323 const uint8 data[] = { | 329 const uint8_t data[] = { |
324 0x00, 0x00, 0x00, 0x00, // size = 0 | 330 0x00, 0x00, 0x00, 0x00, // size = 0 |
325 0x70, 0x73, 0x73, 0x68, // 'pssh' | 331 0x70, 0x73, 0x73, 0x68, // 'pssh' |
326 0x01, // version | 332 0x01, // version |
327 0x00, 0x00, 0x00, // flags | 333 0x00, 0x00, 0x00, // flags |
328 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID | 334 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID |
329 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, | 335 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, |
330 0x00, 0x00, 0x00, 0x02, // key count | 336 0x00, 0x00, 0x00, 0x02, // key count |
331 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 | 337 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 |
332 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, | 338 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, |
333 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 | 339 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 |
334 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, | 340 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, |
335 0x00, 0x00, 0x00, 0x00 // datasize | 341 0x00, 0x00, 0x00, 0x00 // datasize |
336 }; | 342 }; |
337 | 343 |
338 std::vector<std::vector<uint8>> key_ids; | 344 KeyIdList key_ids; |
339 EXPECT_TRUE(ValidatePsshInput(data, arraysize(data))); | 345 EXPECT_TRUE( |
340 EXPECT_TRUE(GetKeyIdsForCommonSystemId(data, arraysize(data), &key_ids)); | 346 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data)))); |
| 347 EXPECT_TRUE(GetKeyIdsForCommonSystemId( |
| 348 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids)); |
341 EXPECT_EQ(2u, key_ids.size()); | 349 EXPECT_EQ(2u, key_ids.size()); |
342 } | 350 } |
343 | 351 |
344 TEST_F(CencUtilsTest, HugeSize) { | 352 TEST_F(CencUtilsTest, HugeSize) { |
345 const uint8 data[] = { | 353 const uint8_t data[] = { |
346 0x00, 0x00, 0x00, 0x01, // size = 1 | 354 0x00, 0x00, 0x00, 0x01, // size = 1 |
347 0x70, 0x73, 0x73, 0x68, // 'pssh' | 355 0x70, 0x73, 0x73, 0x68, // 'pssh' |
348 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // longsize = big | 356 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // longsize = big |
349 0x01, // version | 357 0x01, // version |
350 0x00, 0x00, 0x00, // flags | 358 0x00, 0x00, 0x00, // flags |
351 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID | 359 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID |
352 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, | 360 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, |
353 0x00, 0x00, 0x00, 0x02, // key count | 361 0x00, 0x00, 0x00, 0x02, // key count |
354 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 | 362 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 |
355 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, | 363 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, |
356 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 | 364 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 |
357 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, | 365 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, |
358 0x00, 0x00, 0x00, 0x00 // datasize | 366 0x00, 0x00, 0x00, 0x00 // datasize |
359 }; | 367 }; |
360 | 368 |
361 std::vector<std::vector<uint8>> key_ids; | 369 KeyIdList key_ids; |
362 EXPECT_FALSE(ValidatePsshInput(data, arraysize(data))); | 370 EXPECT_FALSE( |
363 EXPECT_FALSE(GetKeyIdsForCommonSystemId(data, arraysize(data), &key_ids)); | 371 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data)))); |
| 372 EXPECT_FALSE(GetKeyIdsForCommonSystemId( |
| 373 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids)); |
364 } | 374 } |
365 | 375 |
366 } // namespace media | 376 } // namespace media |
OLD | NEW |