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

Unified Diff: media/crypto/aes_decryptor.cc

Issue 10822013: Code clean-up in AesDecryptor and test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/crypto/aes_decryptor.h ('k') | media/crypto/aes_decryptor_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/crypto/aes_decryptor.cc
diff --git a/media/crypto/aes_decryptor.cc b/media/crypto/aes_decryptor.cc
index 552197bda9304bb9c3a999e98d6483c744cdbace..8fd3ab95a3e7dbb2398c4a1efed42c9551879fdc 100644
--- a/media/crypto/aes_decryptor.cc
+++ b/media/crypto/aes_decryptor.cc
@@ -4,6 +4,8 @@
#include "media/crypto/aes_decryptor.h"
+#include <vector>
+
#include "base/logging.h"
#include "base/stl_util.h"
#include "base/string_number_conversions.h"
@@ -14,6 +16,8 @@
#include "media/base/decrypt_config.h"
#include "media/base/decryptor_client.h"
+using crypto::SymmetricKey;
+
Ryan Sleevi 2012/07/30 06:52:50 FWIW, please see https://groups.google.com/a/chrom
xhwang 2012/07/30 16:22:30 Thanks for the info. Personally I think either way
namespace media {
// The size is from the WebM encrypted specification. Current encrypted WebM
@@ -84,7 +88,7 @@ static bool CheckData(const DecoderBuffer& input,
enum ClearBytesBufferSel {
kSrcContainsClearBytes,
- kDstContainsClearBytes,
+ kDstContainsClearBytes
};
static void CopySubsamples(const std::vector<SubsampleEntry>& subsamples,
@@ -107,7 +111,7 @@ static void CopySubsamples(const std::vector<SubsampleEntry>& subsamples,
// Decrypts |input| using |key|. Returns a DecoderBuffer with the decrypted
// data if decryption succeeded or NULL if decryption failed.
static scoped_refptr<DecoderBuffer> DecryptData(const DecoderBuffer& input,
- crypto::SymmetricKey* key) {
+ SymmetricKey* key) {
CHECK(input.GetDataSize());
CHECK(input.GetDecryptConfig());
CHECK(key);
@@ -250,16 +254,7 @@ void AesDecryptor::AddKey(const std::string& key_system,
return;
}
- {
- base::AutoLock auto_lock(key_map_lock_);
- KeyMap::iterator found = key_map_.find(key_id_string);
- if (found != key_map_.end()) {
- delete found->second;
- key_map_.erase(found);
- }
- key_map_[key_id_string] = decryption_key.release();
- }
-
+ SetKey(key_id_string, decryption_key.Pass());
client_->KeyAdded(key_system, session_id);
}
@@ -272,17 +267,10 @@ void AesDecryptor::Decrypt(const scoped_refptr<DecoderBuffer>& encrypted,
CHECK(encrypted->GetDecryptConfig());
const std::string& key_id = encrypted->GetDecryptConfig()->key_id();
- DecryptionKey* key = NULL;
- {
- base::AutoLock auto_lock(key_map_lock_);
- KeyMap::const_iterator found = key_map_.find(key_id);
- if (found != key_map_.end())
- key = found->second;
- }
-
+ DecryptionKey* key = GetKey(key_id);
if (!key) {
- // TODO(fgalligan): Fire a need_key event here and add a test.
- DVLOG(1) << "Could not find a matching key for given key ID.";
+ // TODO(xhwang): Fire a need_key event here and add a test.
+ DVLOG(1) << "Could not find a matching key for the given key ID.";
decrypt_cb.Run(kError, NULL);
return;
}
@@ -302,7 +290,7 @@ void AesDecryptor::Decrypt(const scoped_refptr<DecoderBuffer>& encrypted,
// TODO(strobe): Currently, presence of checksum is used to indicate the use
// of normal or WebM decryption keys. Consider a more explicit signaling
// mechanism and the removal of the webm_decryption_key member.
- crypto::SymmetricKey* decryption_key = (checksum_size > 0) ?
+ SymmetricKey* decryption_key = (checksum_size > 0) ?
key->webm_decryption_key() : key->decryption_key();
scoped_refptr<DecoderBuffer> decrypted =
DecryptData(*encrypted, decryption_key);
@@ -317,8 +305,28 @@ void AesDecryptor::Decrypt(const scoped_refptr<DecoderBuffer>& encrypted,
decrypt_cb.Run(kSuccess, decrypted);
}
-AesDecryptor::DecryptionKey::DecryptionKey(
- const std::string& secret)
+void AesDecryptor::SetKey(const std::string& key_id,
+ scoped_ptr<DecryptionKey> decryption_key) {
+ base::AutoLock auto_lock(key_map_lock_);
+ KeyMap::iterator found = key_map_.find(key_id);
+ if (found != key_map_.end()) {
+ delete found->second;
+ key_map_.erase(found);
+ }
+ key_map_[key_id] = decryption_key.release();
+}
+
+AesDecryptor::DecryptionKey* AesDecryptor::GetKey(
+ const std::string& key_id) const {
+ base::AutoLock auto_lock(key_map_lock_);
+ KeyMap::const_iterator found = key_map_.find(key_id);
+ if (found == key_map_.end())
+ return NULL;
+
+ return found->second;
+}
+
+AesDecryptor::DecryptionKey::DecryptionKey(const std::string& secret)
: secret_(secret) {
}
@@ -326,28 +334,23 @@ AesDecryptor::DecryptionKey::~DecryptionKey() {}
bool AesDecryptor::DecryptionKey::Init() {
CHECK(!secret_.empty());
- decryption_key_.reset(
- crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, secret_));
- if (!decryption_key_.get()) {
+ decryption_key_.reset(SymmetricKey::Import(SymmetricKey::AES, secret_));
+ if (!decryption_key_.get())
return false;
- }
std::string raw_key = DeriveKey(secret_,
kWebmEncryptionSeed,
secret_.length());
- if (raw_key.empty()) {
+ if (raw_key.empty())
return false;
- }
- webm_decryption_key_.reset(
- crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, raw_key));
- if (!webm_decryption_key_.get()) {
+
+ webm_decryption_key_.reset(SymmetricKey::Import(SymmetricKey::AES, raw_key));
+ if (!webm_decryption_key_.get())
return false;
- }
hmac_key_ = DeriveKey(secret_, kWebmHmacSeed, kWebmSha1DigestSize);
- if (hmac_key_.empty()) {
+ if (hmac_key_.empty())
return false;
- }
return true;
}
« no previous file with comments | « media/crypto/aes_decryptor.h ('k') | media/crypto/aes_decryptor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698