diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-08 22:23:17 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-08 22:23:17 +0000 |
commit | dcd57350ed464493780247174db6a7c3628c01a2 (patch) | |
tree | c0ee4511c106a7825b8894c6620f6fabb3aead9a /media/cdm | |
parent | 3b10e258f6ebf230e6c0a2c8096346eb002461c6 (diff) | |
download | chromium_src-dcd57350ed464493780247174db6a7c3628c01a2.zip chromium_src-dcd57350ed464493780247174db6a7c3628c01a2.tar.gz chromium_src-dcd57350ed464493780247174db6a7c3628c01a2.tar.bz2 |
Drop DecryptConfig::data_offset_.
This CL drops DecryptConfig::data_offset_ and moves the offset parsing code into WebM demuxers. This allows us to remove offset passing/calculation code in several layers of the media pipeline.
Background:
We used to have HMAC check in encrypted WebM RFC, which requires us to keep the IV together with the encrypted frame, hence the offset. Now the HMAC check is dropped from the RFC so offset is not necessary anymore.
BUG=298569
Review URL: https://codereview.chromium.org/119203003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243672 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/cdm')
-rw-r--r-- | media/cdm/aes_decryptor.cc | 12 | ||||
-rw-r--r-- | media/cdm/aes_decryptor_unittest.cc | 55 | ||||
-rw-r--r-- | media/cdm/ppapi/external_clear_key/clear_key_cdm.cc | 4 |
3 files changed, 28 insertions, 43 deletions
diff --git a/media/cdm/aes_decryptor.cc b/media/cdm/aes_decryptor.cc index de6f834..9f9f080 100644 --- a/media/cdm/aes_decryptor.cc +++ b/media/cdm/aes_decryptor.cc @@ -141,11 +141,8 @@ static scoped_refptr<DecoderBuffer> DecryptData(const DecoderBuffer& input, return NULL; } - const int data_offset = input.decrypt_config()->data_offset(); - const char* sample = - reinterpret_cast<const char*>(input.data() + data_offset); - DCHECK_GT(input.data_size(), data_offset); - size_t sample_size = static_cast<size_t>(input.data_size() - data_offset); + const char* sample = reinterpret_cast<const char*>(input.data()); + size_t sample_size = static_cast<size_t>(input.data_size()); DCHECK_GT(sample_size, 0U) << "No sample data to be decrypted."; if (sample_size == 0) @@ -333,9 +330,8 @@ void AesDecryptor::Decrypt(StreamType stream_type, scoped_refptr<DecoderBuffer> decrypted; // An empty iv string signals that the frame is unencrypted. if (encrypted->decrypt_config()->iv().empty()) { - int data_offset = encrypted->decrypt_config()->data_offset(); - decrypted = DecoderBuffer::CopyFrom(encrypted->data() + data_offset, - encrypted->data_size() - data_offset); + decrypted = DecoderBuffer::CopyFrom(encrypted->data(), + encrypted->data_size()); } else { const std::string& key_id = encrypted->decrypt_config()->key_id(); DecryptionKey* key = GetKey(key_id); diff --git a/media/cdm/aes_decryptor_unittest.cc b/media/cdm/aes_decryptor_unittest.cc index 3076d5a..8fb6a56 100644 --- a/media/cdm/aes_decryptor_unittest.cc +++ b/media/cdm/aes_decryptor_unittest.cc @@ -177,12 +177,10 @@ static scoped_refptr<DecoderBuffer> CreateEncryptedBuffer( const std::vector<uint8>& data, const std::vector<uint8>& key_id, const std::vector<uint8>& iv, - int offset, const std::vector<SubsampleEntry>& subsample_entries) { DCHECK(!data.empty()); - int padded_size = offset + data.size(); - scoped_refptr<DecoderBuffer> encrypted_buffer(new DecoderBuffer(padded_size)); - memcpy(encrypted_buffer->writable_data() + offset, &data[0], data.size()); + scoped_refptr<DecoderBuffer> encrypted_buffer(new DecoderBuffer(data.size())); + memcpy(encrypted_buffer->writable_data(), &data[0], data.size()); CHECK(encrypted_buffer.get()); std::string key_id_string( reinterpret_cast<const char*>(key_id.empty() ? NULL : &key_id[0]), @@ -190,7 +188,7 @@ static scoped_refptr<DecoderBuffer> CreateEncryptedBuffer( std::string iv_string( reinterpret_cast<const char*>(iv.empty() ? NULL : &iv[0]), iv.size()); encrypted_buffer->set_decrypt_config(scoped_ptr<DecryptConfig>( - new DecryptConfig(key_id_string, iv_string, offset, subsample_entries))); + new DecryptConfig(key_id_string, iv_string, subsample_entries))); return encrypted_buffer; } @@ -381,22 +379,14 @@ TEST_F(AesDecryptorTest, NormalDecryption) { uint32 session_id = CreateSession(key_id_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); - DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); -} - -TEST_F(AesDecryptorTest, DecryptionWithOffset) { - uint32 session_id = CreateSession(key_id_); - UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); - scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 23, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); } TEST_F(AesDecryptorTest, UnencryptedFrame) { // An empty iv string signals that the frame is unencrypted. scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - original_data_, key_id_, std::vector<uint8>(), 0, no_subsample_entries_); + original_data_, key_id_, std::vector<uint8>(), no_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); } @@ -404,13 +394,13 @@ TEST_F(AesDecryptorTest, WrongKey) { uint32 session_id = CreateSession(key_id_); UpdateSessionAndExpect(session_id, kWrongKeyAsJWK, SESSION_READY); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); } TEST_F(AesDecryptorTest, NoKey) { scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); EXPECT_CALL(*this, BufferDecrypted(AesDecryptor::kNoKey, IsNull())); decryptor_.Decrypt(Decryptor::kVideo, encrypted_buffer, decrypt_cb_); } @@ -418,7 +408,7 @@ TEST_F(AesDecryptorTest, NoKey) { TEST_F(AesDecryptorTest, KeyReplacement) { uint32 session_id = CreateSession(key_id_); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); UpdateSessionAndExpect(session_id, kWrongKeyAsJWK, SESSION_READY); ASSERT_NO_FATAL_FAILURE(DecryptAndExpect( @@ -438,7 +428,7 @@ TEST_F(AesDecryptorTest, MultipleKeysAndFrames) { uint32 session_id = CreateSession(key_id_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 10, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); ASSERT_NO_FATAL_FAILURE( DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); @@ -454,7 +444,6 @@ TEST_F(AesDecryptorTest, MultipleKeysAndFrames) { kEncryptedData2 + arraysize(kEncryptedData2)), std::vector<uint8>(kKeyId2, kKeyId2 + arraysize(kKeyId2)), std::vector<uint8>(kIv2, kIv2 + arraysize(kIv2)), - 30, no_subsample_entries_); ASSERT_NO_FATAL_FAILURE(DecryptAndExpect( encrypted_buffer, @@ -471,7 +460,7 @@ TEST_F(AesDecryptorTest, CorruptedIv) { bad_iv[1]++; scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, bad_iv, 0, no_subsample_entries_); + encrypted_data_, key_id_, bad_iv, no_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); } @@ -484,7 +473,7 @@ TEST_F(AesDecryptorTest, CorruptedData) { bad_data[1]++; scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - bad_data, key_id_, iv_, 0, no_subsample_entries_); + bad_data, key_id_, iv_, no_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); } @@ -492,7 +481,7 @@ TEST_F(AesDecryptorTest, EncryptedAsUnencryptedFailure) { uint32 session_id = CreateSession(key_id_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, std::vector<uint8>(), 0, no_subsample_entries_); + encrypted_data_, key_id_, std::vector<uint8>(), no_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); } @@ -500,7 +489,7 @@ TEST_F(AesDecryptorTest, SubsampleDecryption) { uint32 session_id = CreateSession(key_id_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - subsample_encrypted_data_, key_id_, iv_, 0, normal_subsample_entries_); + subsample_encrypted_data_, key_id_, iv_, normal_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); } @@ -511,7 +500,7 @@ TEST_F(AesDecryptorTest, SubsampleDecryptionWithOffset) { uint32 session_id = CreateSession(key_id_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - subsample_encrypted_data_, key_id_, iv_, 23, normal_subsample_entries_); + subsample_encrypted_data_, key_id_, iv_, normal_subsample_entries_); DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); } @@ -524,7 +513,7 @@ TEST_F(AesDecryptorTest, SubsampleWrongSize) { kSubsampleEntriesWrongSize + arraysize(kSubsampleEntriesWrongSize)); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - subsample_encrypted_data_, key_id_, iv_, 0, subsample_entries_wrong_size); + subsample_encrypted_data_, key_id_, iv_, subsample_entries_wrong_size); DecryptAndExpect(encrypted_buffer, original_data_, DATA_MISMATCH); } @@ -538,7 +527,7 @@ TEST_F(AesDecryptorTest, SubsampleInvalidTotalSize) { arraysize(kSubsampleEntriesInvalidTotalSize)); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - subsample_encrypted_data_, key_id_, iv_, 0, + subsample_encrypted_data_, key_id_, iv_, subsample_entries_invalid_total_size); DecryptAndExpect(encrypted_buffer, original_data_, DECRYPT_ERROR); } @@ -553,7 +542,7 @@ TEST_F(AesDecryptorTest, SubsampleClearBytesOnly) { kSubsampleEntriesClearOnly + arraysize(kSubsampleEntriesClearOnly)); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - original_data_, key_id_, iv_, 0, clear_only_subsample_entries); + original_data_, key_id_, iv_, clear_only_subsample_entries); DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); } @@ -567,14 +556,14 @@ TEST_F(AesDecryptorTest, SubsampleCypherBytesOnly) { kSubsampleEntriesCypherOnly + arraysize(kSubsampleEntriesCypherOnly)); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, cypher_only_subsample_entries); + encrypted_data_, key_id_, iv_, cypher_only_subsample_entries); DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS); } TEST_F(AesDecryptorTest, ReleaseSession) { uint32 session_id = CreateSession(key_id_); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); ASSERT_NO_FATAL_FAILURE( @@ -586,7 +575,7 @@ TEST_F(AesDecryptorTest, ReleaseSession) { TEST_F(AesDecryptorTest, NoKeyAfterReleaseSession) { uint32 session_id = CreateSession(key_id_); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); UpdateSessionAndExpect(session_id, kKeyAsJWK, SESSION_READY); ASSERT_NO_FATAL_FAILURE( @@ -600,7 +589,7 @@ TEST_F(AesDecryptorTest, NoKeyAfterReleaseSession) { TEST_F(AesDecryptorTest, LatestKeyUsed) { uint32 session_id1 = CreateSession(key_id_); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); // Add alternate key, buffer should not be decoded properly. UpdateSessionAndExpect(session_id1, kKeyAlternateAsJWK, SESSION_READY); @@ -619,7 +608,7 @@ TEST_F(AesDecryptorTest, LatestKeyUsed) { TEST_F(AesDecryptorTest, LatestKeyUsedAfterReleaseSession) { uint32 session_id1 = CreateSession(key_id_); scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( - encrypted_data_, key_id_, iv_, 0, no_subsample_entries_); + encrypted_data_, key_id_, iv_, no_subsample_entries_); UpdateSessionAndExpect(session_id1, kKeyAsJWK, SESSION_READY); ASSERT_NO_FATAL_FAILURE( DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc index a67eb2e..9dfea99 100644 --- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc +++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc @@ -85,7 +85,7 @@ static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom( return media::DecoderBuffer::CreateEOSBuffer(); } - // TODO(tomfinegan): Get rid of this copy. + // TODO(xhwang): Get rid of this copy. scoped_refptr<media::DecoderBuffer> output_buffer = media::DecoderBuffer::CopyFrom(input_buffer.data, input_buffer.data_size); @@ -97,12 +97,12 @@ static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom( subsamples.push_back(subsample); } + DCHECK_EQ(input_buffer.data_offset, 0u); scoped_ptr<media::DecryptConfig> decrypt_config(new media::DecryptConfig( std::string(reinterpret_cast<const char*>(input_buffer.key_id), input_buffer.key_id_size), std::string(reinterpret_cast<const char*>(input_buffer.iv), input_buffer.iv_size), - input_buffer.data_offset, subsamples)); output_buffer->set_decrypt_config(decrypt_config.Pass()); |