OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef MEDIA_CRYPTO_AES_DECRYPTOR_H_ | 5 #ifndef MEDIA_CRYPTO_AES_DECRYPTOR_H_ |
6 #define MEDIA_CRYPTO_AES_DECRYPTOR_H_ | 6 #define MEDIA_CRYPTO_AES_DECRYPTOR_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 const DecryptCB& decrypt_cb) OVERRIDE; | 54 const DecryptCB& decrypt_cb) OVERRIDE; |
55 | 55 |
56 private: | 56 private: |
57 // Helper class that manages the decryption key and HMAC key. The HMAC key | 57 // Helper class that manages the decryption key and HMAC key. The HMAC key |
58 // may be NULL. | 58 // may be NULL. |
59 class DecryptionKey { | 59 class DecryptionKey { |
60 public: | 60 public: |
61 explicit DecryptionKey(const std::string& secret); | 61 explicit DecryptionKey(const std::string& secret); |
62 ~DecryptionKey(); | 62 ~DecryptionKey(); |
63 | 63 |
64 // Creates the encryption key and HMAC. If |derive_webm_keys| is true then | 64 // Creates the encryption key, and derives the WebM decryption key and HMAC. |
65 // the object will derive the decryption key and the HMAC key from | 65 bool Init(); |
66 // |secret_|. | |
67 bool Init(bool derive_webm_keys); | |
68 | 66 |
69 crypto::SymmetricKey* decryption_key() { return decryption_key_.get(); } | 67 crypto::SymmetricKey* decryption_key() { return decryption_key_.get(); } |
| 68 crypto::SymmetricKey* webm_decryption_key() |
| 69 { return webm_decryption_key_.get(); } |
70 base::StringPiece hmac_key() { return base::StringPiece(hmac_key_); } | 70 base::StringPiece hmac_key() { return base::StringPiece(hmac_key_); } |
71 | 71 |
72 private: | 72 private: |
73 // The base secret that is used to derive the decryption key and optionally | 73 // The base secret that is used to derive the decryption key and optionally |
74 // the HMAC key. | 74 // the HMAC key. |
75 const std::string secret_; | 75 const std::string secret_; |
76 | 76 |
77 // The key used to decrypt the data. | 77 // The key used to decrypt the data. |
78 scoped_ptr<crypto::SymmetricKey> decryption_key_; | 78 scoped_ptr<crypto::SymmetricKey> decryption_key_; |
79 | 79 |
| 80 // The key used for decryption of WebM media, derived from the secret. |
| 81 scoped_ptr<crypto::SymmetricKey> webm_decryption_key_; |
| 82 |
80 // The key used to perform the integrity check. Currently the HMAC key is | 83 // The key used to perform the integrity check. Currently the HMAC key is |
81 // defined by the WebM encrypted specification. Current encrypted WebM | 84 // defined by the WebM encrypted specification. Current encrypted WebM |
82 // request for comments specification is here | 85 // request for comments specification is here |
83 // http://wiki.webmproject.org/encryption/webm-encryption-rfc | 86 // http://wiki.webmproject.org/encryption/webm-encryption-rfc |
84 std::string hmac_key_; | 87 std::string hmac_key_; |
85 | 88 |
86 DISALLOW_COPY_AND_ASSIGN(DecryptionKey); | 89 DISALLOW_COPY_AND_ASSIGN(DecryptionKey); |
87 }; | 90 }; |
88 | 91 |
89 // KeyMap owns the DecryptionKey* and must delete them when they are | 92 // KeyMap owns the DecryptionKey* and must delete them when they are |
(...skipping 12 matching lines...) Expand all Loading... |
102 static uint32 next_session_id_; | 105 static uint32 next_session_id_; |
103 | 106 |
104 DecryptorClient* const client_; | 107 DecryptorClient* const client_; |
105 | 108 |
106 DISALLOW_COPY_AND_ASSIGN(AesDecryptor); | 109 DISALLOW_COPY_AND_ASSIGN(AesDecryptor); |
107 }; | 110 }; |
108 | 111 |
109 } // namespace media | 112 } // namespace media |
110 | 113 |
111 #endif // MEDIA_CRYPTO_AES_DECRYPTOR_H_ | 114 #endif // MEDIA_CRYPTO_AES_DECRYPTOR_H_ |
OLD | NEW |