Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: media/cdm/aes_decryptor_unittest.cc

Issue 119203003: Drop DecryptConfig::data_offset_. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix test Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698