OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <string> | 5 #include <string> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "media/base/decoder_buffer.h" | 10 #include "media/base/decoder_buffer.h" |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 const SubsampleEntry kSubsampleEntriesCypherOnly[] = { | 170 const SubsampleEntry kSubsampleEntriesCypherOnly[] = { |
171 { 0, 6 }, | 171 { 0, 6 }, |
172 { 0, 8 }, | 172 { 0, 8 }, |
173 { 0, 10 } | 173 { 0, 10 } |
174 }; | 174 }; |
175 | 175 |
176 static scoped_refptr<DecoderBuffer> CreateEncryptedBuffer( | 176 static scoped_refptr<DecoderBuffer> CreateEncryptedBuffer( |
177 const std::vector<uint8>& data, | 177 const std::vector<uint8>& data, |
178 const std::vector<uint8>& key_id, | 178 const std::vector<uint8>& key_id, |
179 const std::vector<uint8>& iv, | 179 const std::vector<uint8>& iv, |
180 int offset, | |
181 const std::vector<SubsampleEntry>& subsample_entries) { | 180 const std::vector<SubsampleEntry>& subsample_entries) { |
182 DCHECK(!data.empty()); | 181 DCHECK(!data.empty()); |
183 int padded_size = offset + data.size(); | 182 scoped_refptr<DecoderBuffer> encrypted_buffer(new DecoderBuffer(data.size())); |
184 scoped_refptr<DecoderBuffer> encrypted_buffer(new DecoderBuffer(padded_size)); | 183 memcpy(encrypted_buffer->writable_data(), &data[0], data.size()); |
185 memcpy(encrypted_buffer->writable_data() + offset, &data[0], data.size()); | |
186 CHECK(encrypted_buffer.get()); | 184 CHECK(encrypted_buffer.get()); |
187 std::string key_id_string( | 185 std::string key_id_string( |
188 reinterpret_cast<const char*>(key_id.empty() ? NULL : &key_id[0]), | 186 reinterpret_cast<const char*>(key_id.empty() ? NULL : &key_id[0]), |
189 key_id.size()); | 187 key_id.size()); |
190 std::string iv_string( | 188 std::string iv_string( |
191 reinterpret_cast<const char*>(iv.empty() ? NULL : &iv[0]), iv.size()); | 189 reinterpret_cast<const char*>(iv.empty() ? NULL : &iv[0]), iv.size()); |
192 encrypted_buffer->set_decrypt_config(scoped_ptr<DecryptConfig>( | 190 encrypted_buffer->set_decrypt_config(scoped_ptr<DecryptConfig>( |
193 new DecryptConfig(key_id_string, iv_string, offset, subsample_entries))); | 191 new DecryptConfig(key_id_string, iv_string, subsample_entries))); |
194 return encrypted_buffer; | 192 return encrypted_buffer; |
195 } | 193 } |
196 | 194 |
197 class AesDecryptorTest : public testing::Test { | 195 class AesDecryptorTest : public testing::Test { |
198 public: | 196 public: |
199 AesDecryptorTest() | 197 AesDecryptorTest() |
200 : decryptor_(base::Bind(&AesDecryptorTest::OnSessionCreated, | 198 : decryptor_(base::Bind(&AesDecryptorTest::OnSessionCreated, |
201 base::Unretained(this)), | 199 base::Unretained(this)), |
202 base::Bind(&AesDecryptorTest::OnSessionMessage, | 200 base::Bind(&AesDecryptorTest::OnSessionMessage, |
203 base::Unretained(this)), | 201 base::Unretained(this)), |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 uint32 session_id3 = 23; | 372 uint32 session_id3 = 23; |
375 EXPECT_CALL(*this, OnSessionMessage(session_id3, IsEmpty(), "")); | 373 EXPECT_CALL(*this, OnSessionMessage(session_id3, IsEmpty(), "")); |
376 EXPECT_CALL(*this, OnSessionCreated(session_id3, StrNe(std::string()))); | 374 EXPECT_CALL(*this, OnSessionCreated(session_id3, StrNe(std::string()))); |
377 EXPECT_TRUE(decryptor_.CreateSession(session_id3, std::string(), NULL, 0)); | 375 EXPECT_TRUE(decryptor_.CreateSession(session_id3, std::string(), NULL, 0)); |
378 } | 376 } |
379 | 377 |
380 TEST_F(AesDecryptorTest, NormalDecryption) { | 378 TEST_F(AesDecryptorTest, NormalDecryption) { |
381 uint32 session_id = CreateSession(key_id_); | 379 uint32 session_id = CreateSession(key_id_); |
382 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 380 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
383 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 381 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
384 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 382 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
385 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | |
386 } | |
387 | |
388 TEST_F(AesDecryptorTest, DecryptionWithOffset) { | |
389 uint32 session_id = CreateSession(key_id_); | |
390 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | |
391 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | |
392 encrypted_data_, key_id_, iv_, 23, no_subsample_entries_); | |
393 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | 383 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); |
394 } | 384 } |
395 | 385 |
396 TEST_F(AesDecryptorTest, UnencryptedFrame) { | 386 TEST_F(AesDecryptorTest, UnencryptedFrame) { |
397 // An empty iv string signals that the frame is unencrypted. | 387 // An empty iv string signals that the frame is unencrypted. |
398 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 388 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
399 original_data_, key_id_, std::vector<uint8>(), 0, no_subsample_entries_); | 389 original_data_, key_id_, std::vector<uint8>(), no_subsample_entries_); |
400 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | 390 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); |
401 } | 391 } |
402 | 392 |
403 TEST_F(AesDecryptorTest, WrongKey) { | 393 TEST_F(AesDecryptorTest, WrongKey) { |
404 uint32 session_id = CreateSession(key_id_); | 394 uint32 session_id = CreateSession(key_id_); |
405 UpdateSessionAndExpect(session_id, kWrongKeyAsJWK, SESSION_READY); | 395 UpdateSessionAndExpect(session_id, kWrongKeyAsJWK, SESSION_READY); |
406 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 396 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
407 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 397 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
408 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); | 398 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); |
409 } | 399 } |
410 | 400 |
411 TEST_F(AesDecryptorTest, NoKey) { | 401 TEST_F(AesDecryptorTest, NoKey) { |
412 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 402 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
413 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 403 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
414 EXPECT_CALL(*this, BufferDecrypted(AesDecryptor::kNoKey, IsNull())); | 404 EXPECT_CALL(*this, BufferDecrypted(AesDecryptor::kNoKey, IsNull())); |
415 decryptor_.Decrypt(Decryptor::kVideo, encrypted_buffer, decrypt_cb_); | 405 decryptor_.Decrypt(Decryptor::kVideo, encrypted_buffer, decrypt_cb_); |
416 } | 406 } |
417 | 407 |
418 TEST_F(AesDecryptorTest, KeyReplacement) { | 408 TEST_F(AesDecryptorTest, KeyReplacement) { |
419 uint32 session_id = CreateSession(key_id_); | 409 uint32 session_id = CreateSession(key_id_); |
420 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 410 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
421 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 411 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
422 | 412 |
423 UpdateSessionAndExpect(session_id, kWrongKeyAsJWK, SESSION_READY); | 413 UpdateSessionAndExpect(session_id, kWrongKeyAsJWK, SESSION_READY); |
424 ASSERT_NO_FATAL_FAILURE(DecryptAndExpect( | 414 ASSERT_NO_FATAL_FAILURE(DecryptAndExpect( |
425 encrypted_buffer, original_data_, DATA_MISMATCH)); | 415 encrypted_buffer, original_data_, DATA_MISMATCH)); |
426 | 416 |
427 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 417 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
428 ASSERT_NO_FATAL_FAILURE( | 418 ASSERT_NO_FATAL_FAILURE( |
429 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 419 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
430 } | 420 } |
431 | 421 |
432 TEST_F(AesDecryptorTest, WrongSizedKey) { | 422 TEST_F(AesDecryptorTest, WrongSizedKey) { |
433 uint32 session_id = CreateSession(key_id_); | 423 uint32 session_id = CreateSession(key_id_); |
434 UpdateSessionAndExpect(session_id, kWrongSizedKeyAsJWK, SESSION_ERROR); | 424 UpdateSessionAndExpect(session_id, kWrongSizedKeyAsJWK, SESSION_ERROR); |
435 } | 425 } |
436 | 426 |
437 TEST_F(AesDecryptorTest, MultipleKeysAndFrames) { | 427 TEST_F(AesDecryptorTest, MultipleKeysAndFrames) { |
438 uint32 session_id = CreateSession(key_id_); | 428 uint32 session_id = CreateSession(key_id_); |
439 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 429 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
440 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 430 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
441 encrypted_data_, key_id_, iv_, 10, no_subsample_entries_); | 431 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
442 ASSERT_NO_FATAL_FAILURE( | 432 ASSERT_NO_FATAL_FAILURE( |
443 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 433 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
444 | 434 |
445 UpdateSessionAndExpect(session_id, kKey2AsJWK, SESSION_READY); | 435 UpdateSessionAndExpect(session_id, kKey2AsJWK, SESSION_READY); |
446 | 436 |
447 // The first key is still available after we added a second key. | 437 // The first key is still available after we added a second key. |
448 ASSERT_NO_FATAL_FAILURE( | 438 ASSERT_NO_FATAL_FAILURE( |
449 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 439 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
450 | 440 |
451 // The second key is also available. | 441 // The second key is also available. |
452 encrypted_buffer = CreateEncryptedBuffer( | 442 encrypted_buffer = CreateEncryptedBuffer( |
453 std::vector<uint8>(kEncryptedData2, | 443 std::vector<uint8>(kEncryptedData2, |
454 kEncryptedData2 + arraysize(kEncryptedData2)), | 444 kEncryptedData2 + arraysize(kEncryptedData2)), |
455 std::vector<uint8>(kKeyId2, kKeyId2 + arraysize(kKeyId2)), | 445 std::vector<uint8>(kKeyId2, kKeyId2 + arraysize(kKeyId2)), |
456 std::vector<uint8>(kIv2, kIv2 + arraysize(kIv2)), | 446 std::vector<uint8>(kIv2, kIv2 + arraysize(kIv2)), |
457 30, | |
458 no_subsample_entries_); | 447 no_subsample_entries_); |
459 ASSERT_NO_FATAL_FAILURE(DecryptAndExpect( | 448 ASSERT_NO_FATAL_FAILURE(DecryptAndExpect( |
460 encrypted_buffer, | 449 encrypted_buffer, |
461 std::vector<uint8>(kOriginalData2, | 450 std::vector<uint8>(kOriginalData2, |
462 kOriginalData2 + arraysize(kOriginalData2) - 1), | 451 kOriginalData2 + arraysize(kOriginalData2) - 1), |
463 SUCCESS)); | 452 SUCCESS)); |
464 } | 453 } |
465 | 454 |
466 TEST_F(AesDecryptorTest, CorruptedIv) { | 455 TEST_F(AesDecryptorTest, CorruptedIv) { |
467 uint32 session_id = CreateSession(key_id_); | 456 uint32 session_id = CreateSession(key_id_); |
468 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 457 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
469 | 458 |
470 std::vector<uint8> bad_iv = iv_; | 459 std::vector<uint8> bad_iv = iv_; |
471 bad_iv[1]++; | 460 bad_iv[1]++; |
472 | 461 |
473 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 462 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
474 encrypted_data_, key_id_, bad_iv, 0, no_subsample_entries_); | 463 encrypted_data_, key_id_, bad_iv, no_subsample_entries_); |
475 | 464 |
476 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); | 465 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); |
477 } | 466 } |
478 | 467 |
479 TEST_F(AesDecryptorTest, CorruptedData) { | 468 TEST_F(AesDecryptorTest, CorruptedData) { |
480 uint32 session_id = CreateSession(key_id_); | 469 uint32 session_id = CreateSession(key_id_); |
481 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 470 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
482 | 471 |
483 std::vector<uint8> bad_data = encrypted_data_; | 472 std::vector<uint8> bad_data = encrypted_data_; |
484 bad_data[1]++; | 473 bad_data[1]++; |
485 | 474 |
486 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 475 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
487 bad_data, key_id_, iv_, 0, no_subsample_entries_); | 476 bad_data, key_id_, iv_, no_subsample_entries_); |
488 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); | 477 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); |
489 } | 478 } |
490 | 479 |
491 TEST_F(AesDecryptorTest, EncryptedAsUnencryptedFailure) { | 480 TEST_F(AesDecryptorTest, EncryptedAsUnencryptedFailure) { |
492 uint32 session_id = CreateSession(key_id_); | 481 uint32 session_id = CreateSession(key_id_); |
493 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 482 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
494 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 483 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
495 encrypted_data_, key_id_, std::vector<uint8>(), 0, no_subsample_entries_); | 484 encrypted_data_, key_id_, std::vector<uint8>(), no_subsample_entries_); |
496 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); | 485 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); |
497 } | 486 } |
498 | 487 |
499 TEST_F(AesDecryptorTest, SubsampleDecryption) { | 488 TEST_F(AesDecryptorTest, SubsampleDecryption) { |
500 uint32 session_id = CreateSession(key_id_); | 489 uint32 session_id = CreateSession(key_id_); |
501 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 490 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
502 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 491 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
503 subsample_encrypted_data_, key_id_, iv_, 0, normal_subsample_entries_); | 492 subsample_encrypted_data_, key_id_, iv_, normal_subsample_entries_); |
504 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | 493 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); |
505 } | 494 } |
506 | 495 |
507 // Ensures noninterference of data offset and subsample mechanisms. We never | 496 // Ensures noninterference of data offset and subsample mechanisms. We never |
508 // expect to encounter this in the wild, but since the DecryptConfig doesn't | 497 // expect to encounter this in the wild, but since the DecryptConfig doesn't |
509 // disallow such a configuration, it should be covered. | 498 // disallow such a configuration, it should be covered. |
510 TEST_F(AesDecryptorTest, SubsampleDecryptionWithOffset) { | 499 TEST_F(AesDecryptorTest, SubsampleDecryptionWithOffset) { |
511 uint32 session_id = CreateSession(key_id_); | 500 uint32 session_id = CreateSession(key_id_); |
512 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 501 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
513 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 502 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
514 subsample_encrypted_data_, key_id_, iv_, 23, normal_subsample_entries_); | 503 subsample_encrypted_data_, key_id_, iv_, normal_subsample_entries_); |
515 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | 504 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); |
516 } | 505 } |
517 | 506 |
518 TEST_F(AesDecryptorTest, SubsampleWrongSize) { | 507 TEST_F(AesDecryptorTest, SubsampleWrongSize) { |
519 uint32 session_id = CreateSession(key_id_); | 508 uint32 session_id = CreateSession(key_id_); |
520 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 509 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
521 | 510 |
522 std::vector<SubsampleEntry> subsample_entries_wrong_size( | 511 std::vector<SubsampleEntry> subsample_entries_wrong_size( |
523 kSubsampleEntriesWrongSize, | 512 kSubsampleEntriesWrongSize, |
524 kSubsampleEntriesWrongSize + arraysize(kSubsampleEntriesWrongSize)); | 513 kSubsampleEntriesWrongSize + arraysize(kSubsampleEntriesWrongSize)); |
525 | 514 |
526 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 515 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
527 subsample_encrypted_data_, key_id_, iv_, 0, subsample_entries_wrong_size); | 516 subsample_encrypted_data_, key_id_, iv_, subsample_entries_wrong_size); |
528 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); | 517 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); |
529 } | 518 } |
530 | 519 |
531 TEST_F(AesDecryptorTest, SubsampleInvalidTotalSize) { | 520 TEST_F(AesDecryptorTest, SubsampleInvalidTotalSize) { |
532 uint32 session_id = CreateSession(key_id_); | 521 uint32 session_id = CreateSession(key_id_); |
533 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 522 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
534 | 523 |
535 std::vector<SubsampleEntry> subsample_entries_invalid_total_size( | 524 std::vector<SubsampleEntry> subsample_entries_invalid_total_size( |
536 kSubsampleEntriesInvalidTotalSize, | 525 kSubsampleEntriesInvalidTotalSize, |
537 kSubsampleEntriesInvalidTotalSize + | 526 kSubsampleEntriesInvalidTotalSize + |
538 arraysize(kSubsampleEntriesInvalidTotalSize)); | 527 arraysize(kSubsampleEntriesInvalidTotalSize)); |
539 | 528 |
540 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 529 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
541 subsample_encrypted_data_, key_id_, iv_, 0, | 530 subsample_encrypted_data_, key_id_, iv_, |
542 subsample_entries_invalid_total_size); | 531 subsample_entries_invalid_total_size); |
543 DecryptAndExpect(encrypted_buffer, original_data_, DECRYPT_ERROR); | 532 DecryptAndExpect(encrypted_buffer, original_data_, DECRYPT_ERROR); |
544 } | 533 } |
545 | 534 |
546 // No cypher bytes in any of the subsamples. | 535 // No cypher bytes in any of the subsamples. |
547 TEST_F(AesDecryptorTest, SubsampleClearBytesOnly) { | 536 TEST_F(AesDecryptorTest, SubsampleClearBytesOnly) { |
548 uint32 session_id = CreateSession(key_id_); | 537 uint32 session_id = CreateSession(key_id_); |
549 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 538 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
550 | 539 |
551 std::vector<SubsampleEntry> clear_only_subsample_entries( | 540 std::vector<SubsampleEntry> clear_only_subsample_entries( |
552 kSubsampleEntriesClearOnly, | 541 kSubsampleEntriesClearOnly, |
553 kSubsampleEntriesClearOnly + arraysize(kSubsampleEntriesClearOnly)); | 542 kSubsampleEntriesClearOnly + arraysize(kSubsampleEntriesClearOnly)); |
554 | 543 |
555 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 544 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
556 original_data_, key_id_, iv_, 0, clear_only_subsample_entries); | 545 original_data_, key_id_, iv_, clear_only_subsample_entries); |
557 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | 546 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); |
558 } | 547 } |
559 | 548 |
560 // No clear bytes in any of the subsamples. | 549 // No clear bytes in any of the subsamples. |
561 TEST_F(AesDecryptorTest, SubsampleCypherBytesOnly) { | 550 TEST_F(AesDecryptorTest, SubsampleCypherBytesOnly) { |
562 uint32 session_id = CreateSession(key_id_); | 551 uint32 session_id = CreateSession(key_id_); |
563 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 552 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
564 | 553 |
565 std::vector<SubsampleEntry> cypher_only_subsample_entries( | 554 std::vector<SubsampleEntry> cypher_only_subsample_entries( |
566 kSubsampleEntriesCypherOnly, | 555 kSubsampleEntriesCypherOnly, |
567 kSubsampleEntriesCypherOnly + arraysize(kSubsampleEntriesCypherOnly)); | 556 kSubsampleEntriesCypherOnly + arraysize(kSubsampleEntriesCypherOnly)); |
568 | 557 |
569 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 558 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
570 encrypted_data_, key_id_, iv_, 0, cypher_only_subsample_entries); | 559 encrypted_data_, key_id_, iv_, cypher_only_subsample_entries); |
571 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); | 560 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); |
572 } | 561 } |
573 | 562 |
574 TEST_F(AesDecryptorTest, ReleaseSession) { | 563 TEST_F(AesDecryptorTest, ReleaseSession) { |
575 uint32 session_id = CreateSession(key_id_); | 564 uint32 session_id = CreateSession(key_id_); |
576 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 565 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
577 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 566 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
578 | 567 |
579 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 568 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
580 ASSERT_NO_FATAL_FAILURE( | 569 ASSERT_NO_FATAL_FAILURE( |
581 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 570 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
582 | 571 |
583 ReleaseSession(session_id); | 572 ReleaseSession(session_id); |
584 } | 573 } |
585 | 574 |
586 TEST_F(AesDecryptorTest, NoKeyAfterReleaseSession) { | 575 TEST_F(AesDecryptorTest, NoKeyAfterReleaseSession) { |
587 uint32 session_id = CreateSession(key_id_); | 576 uint32 session_id = CreateSession(key_id_); |
588 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 577 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
589 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 578 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
590 | 579 |
591 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); | 580 UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); |
592 ASSERT_NO_FATAL_FAILURE( | 581 ASSERT_NO_FATAL_FAILURE( |
593 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 582 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
594 | 583 |
595 ReleaseSession(session_id); | 584 ReleaseSession(session_id); |
596 ASSERT_NO_FATAL_FAILURE( | 585 ASSERT_NO_FATAL_FAILURE( |
597 DecryptAndExpect(encrypted_buffer, original_data_, NO_KEY)); | 586 DecryptAndExpect(encrypted_buffer, original_data_, NO_KEY)); |
598 } | 587 } |
599 | 588 |
600 TEST_F(AesDecryptorTest, LatestKeyUsed) { | 589 TEST_F(AesDecryptorTest, LatestKeyUsed) { |
601 uint32 session_id1 = CreateSession(key_id_); | 590 uint32 session_id1 = CreateSession(key_id_); |
602 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 591 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
603 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 592 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
604 | 593 |
605 // Add alternate key, buffer should not be decoded properly. | 594 // Add alternate key, buffer should not be decoded properly. |
606 UpdateSessionAndExpect(session_id1, kKeyAlternateAsJWK, SESSION_READY); | 595 UpdateSessionAndExpect(session_id1, kKeyAlternateAsJWK, SESSION_READY); |
607 ASSERT_NO_FATAL_FAILURE( | 596 ASSERT_NO_FATAL_FAILURE( |
608 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH)); | 597 DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH)); |
609 | 598 |
610 // Create a second session with a correct key value for key_id_. | 599 // Create a second session with a correct key value for key_id_. |
611 uint32 session_id2 = CreateSession(key_id_); | 600 uint32 session_id2 = CreateSession(key_id_); |
612 UpdateSessionAndExpect(session_id2, kKeyAsJWK, SESSION_READY); | 601 UpdateSessionAndExpect(session_id2, kKeyAsJWK, SESSION_READY); |
613 | 602 |
614 // Should be able to decode with latest key. | 603 // Should be able to decode with latest key. |
615 ASSERT_NO_FATAL_FAILURE( | 604 ASSERT_NO_FATAL_FAILURE( |
616 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 605 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
617 } | 606 } |
618 | 607 |
619 TEST_F(AesDecryptorTest, LatestKeyUsedAfterReleaseSession) { | 608 TEST_F(AesDecryptorTest, LatestKeyUsedAfterReleaseSession) { |
620 uint32 session_id1 = CreateSession(key_id_); | 609 uint32 session_id1 = CreateSession(key_id_); |
621 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 610 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
622 encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); | 611 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
623 UpdateSessionAndExpect(session_id1, kKeyAsJWK, SESSION_READY); | 612 UpdateSessionAndExpect(session_id1, kKeyAsJWK, SESSION_READY); |
624 ASSERT_NO_FATAL_FAILURE( | 613 ASSERT_NO_FATAL_FAILURE( |
625 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); | 614 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); |
626 | 615 |
627 // Create a second session with a different key value for key_id_. | 616 // Create a second session with a different key value for key_id_. |
628 uint32 session_id2 = CreateSession(key_id_); | 617 uint32 session_id2 = CreateSession(key_id_); |
629 UpdateSessionAndExpect(session_id2, kKeyAlternateAsJWK, SESSION_READY); | 618 UpdateSessionAndExpect(session_id2, kKeyAlternateAsJWK, SESSION_READY); |
630 | 619 |
631 // Should not be able to decode with new key. | 620 // Should not be able to decode with new key. |
632 ASSERT_NO_FATAL_FAILURE( | 621 ASSERT_NO_FATAL_FAILURE( |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 " \"kid\": \"\"," | 753 " \"kid\": \"\"," |
765 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | 754 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" |
766 " }" | 755 " }" |
767 " ]" | 756 " ]" |
768 "}"; | 757 "}"; |
769 UpdateSessionAndExpect(session_id, kJwksWithEmptyKeyId, SESSION_ERROR); | 758 UpdateSessionAndExpect(session_id, kJwksWithEmptyKeyId, SESSION_ERROR); |
770 ReleaseSession(session_id); | 759 ReleaseSession(session_id); |
771 } | 760 } |
772 | 761 |
773 } // namespace media | 762 } // namespace media |
OLD | NEW |