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

Side by Side Diff: media/webm/webm_content_encodings_client.cc

Issue 10535029: Add support for encrypted WebM files as defined in the RFC. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: –Fix DecodeEncryptedFrame_WrongKey test. Created 8 years, 6 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
OLDNEW
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 #include "media/webm/webm_content_encodings_client.h" 5 #include "media/webm/webm_content_encodings_client.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "media/webm/webm_constants.h" 9 #include "media/webm/webm_constants.h"
10 10
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 if (id == kWebMIdContentEncryption) { 43 if (id == kWebMIdContentEncryption) {
44 DCHECK(cur_content_encoding_.get()); 44 DCHECK(cur_content_encoding_.get());
45 if (content_encryption_encountered_) { 45 if (content_encryption_encountered_) {
46 DVLOG(1) << "Unexpected multiple ContentEncryption."; 46 DVLOG(1) << "Unexpected multiple ContentEncryption.";
47 return NULL; 47 return NULL;
48 } 48 }
49 content_encryption_encountered_ = true; 49 content_encryption_encountered_ = true;
50 return this; 50 return this;
51 } 51 }
52 52
53 if (id == kWebMIdContentEncAESSettings) {
54 DCHECK(cur_content_encoding_.get());
55 return this;
56 }
57
53 // This should not happen if WebMListParser is working properly. 58 // This should not happen if WebMListParser is working properly.
54 DCHECK(false); 59 DCHECK(false);
55 return NULL; 60 return NULL;
56 } 61 }
57 62
58 // Mandatory occurrence restriction is checked in this function. Multiple 63 // Mandatory occurrence restriction is checked in this function. Multiple
59 // occurrence restriction is checked in OnUInt and OnBinary. 64 // occurrence restriction is checked in OnUInt and OnBinary.
60 bool WebMContentEncodingsClient::OnListEnd(int id) { 65 bool WebMContentEncodingsClient::OnListEnd(int id) {
61 if (id == kWebMIdContentEncodings) { 66 if (id == kWebMIdContentEncodings) {
62 // ContentEncoding element is mandatory. Check this! 67 // ContentEncoding element is mandatory. Check this!
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 DCHECK(cur_content_encoding_.get()); 119 DCHECK(cur_content_encoding_.get());
115 // Specify default value for elements that are not present. 120 // Specify default value for elements that are not present.
116 if (cur_content_encoding_->encryption_algo() == 121 if (cur_content_encoding_->encryption_algo() ==
117 ContentEncoding::kEncAlgoInvalid) { 122 ContentEncoding::kEncAlgoInvalid) {
118 cur_content_encoding_->set_encryption_algo( 123 cur_content_encoding_->set_encryption_algo(
119 ContentEncoding::kEncAlgoNotEncrypted); 124 ContentEncoding::kEncAlgoNotEncrypted);
120 } 125 }
121 return true; 126 return true;
122 } 127 }
123 128
129 if (id == kWebMIdContentEncAESSettings) {
130 if (cur_content_encoding_->cipher_mode() ==
131 ContentEncoding::kCipherModeInvalid)
132 cur_content_encoding_->set_cipher_mode(ContentEncoding::kCipherModeCtr);
133 return true;
134 }
135
124 // This should not happen if WebMListParser is working properly. 136 // This should not happen if WebMListParser is working properly.
125 DCHECK(false); 137 DCHECK(false);
126 return false; 138 return false;
127 } 139 }
128 140
129 // Multiple occurrence restriction and range are checked in this function. 141 // Multiple occurrence restriction and range are checked in this function.
130 // Mandatory occurrence restriction is checked in OnListEnd. 142 // Mandatory occurrence restriction is checked in OnListEnd.
131 bool WebMContentEncodingsClient::OnUInt(int id, int64 val) { 143 bool WebMContentEncodingsClient::OnUInt(int id, int64 val) {
132 DCHECK(cur_content_encoding_.get()); 144 DCHECK(cur_content_encoding_.get());
133 145
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 val > ContentEncoding::kEncAlgoAes) { 211 val > ContentEncoding::kEncAlgoAes) {
200 DVLOG(1) << "Unexpected ContentEncAlgo " << val << "."; 212 DVLOG(1) << "Unexpected ContentEncAlgo " << val << ".";
201 return false; 213 return false;
202 } 214 }
203 215
204 cur_content_encoding_->set_encryption_algo( 216 cur_content_encoding_->set_encryption_algo(
205 static_cast<ContentEncoding::EncryptionAlgo>(val)); 217 static_cast<ContentEncoding::EncryptionAlgo>(val));
206 return true; 218 return true;
207 } 219 }
208 220
221 if (id == kWebMIdAESSettingsCipherMode) {
222 if (cur_content_encoding_->cipher_mode() !=
223 ContentEncoding::kCipherModeInvalid) {
224 DVLOG(1) << "Unexpected multiple AESSettingsCipherMode.";
225 return false;
226 }
227
228 if (val != ContentEncoding::kCipherModeCtr) {
229 DVLOG(1) << "Unexpected AESSettingsCipherMode " << val << ".";
230 return false;
231 }
232
233 cur_content_encoding_->set_cipher_mode(
234 static_cast<ContentEncoding::CipherMode>(val));
235 return true;
236 }
237
209 // This should not happen if WebMListParser is working properly. 238 // This should not happen if WebMListParser is working properly.
210 DCHECK(false); 239 DCHECK(false);
211 return false; 240 return false;
212 } 241 }
213 242
214 // Multiple occurrence restriction is checked in this function. Mandatory 243 // Multiple occurrence restriction is checked in this function. Mandatory
215 // restriction is checked in OnListEnd. 244 // restriction is checked in OnListEnd.
216 bool WebMContentEncodingsClient::OnBinary(int id, const uint8* data, int size) { 245 bool WebMContentEncodingsClient::OnBinary(int id, const uint8* data, int size) {
217 DCHECK(cur_content_encoding_.get()); 246 DCHECK(cur_content_encoding_.get());
218 DCHECK(data); 247 DCHECK(data);
219 DCHECK_GT(size, 0); 248 DCHECK_GT(size, 0);
220 249
221 if (id == kWebMIdContentEncKeyID) { 250 if (id == kWebMIdContentEncKeyID) {
222 if (cur_content_encoding_->encryption_key_id() || 251 if (cur_content_encoding_->encryption_key_id() ||
223 cur_content_encoding_->encryption_key_id_size()) { 252 cur_content_encoding_->encryption_key_id_size()) {
224 DVLOG(1) << "Unexpected multiple ContentEncKeyID"; 253 DVLOG(1) << "Unexpected multiple ContentEncKeyID";
225 return false; 254 return false;
226 } 255 }
227 cur_content_encoding_->SetEncryptionKeyId(data, size); 256 cur_content_encoding_->SetEncryptionKeyId(data, size);
228 return true; 257 return true;
229 } 258 }
230 259
231 // This should not happen if WebMListParser is working properly. 260 // This should not happen if WebMListParser is working properly.
232 DCHECK(false); 261 DCHECK(false);
233 return false; 262 return false;
234 } 263 }
235 264
236 } // namespace media 265 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698