| 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 |