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

Side by Side Diff: media/cast/transport/transport_audio_sender.cc

Issue 138843011: Cast: Adding helper crypto classes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/cast/transport/transport_audio_sender.h" 5 #include "media/cast/transport/transport_audio_sender.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "crypto/encryptor.h"
11 #include "crypto/symmetric_key.h"
12 #include "media/cast/transport/rtp_sender/rtp_sender.h" 10 #include "media/cast/transport/rtp_sender/rtp_sender.h"
13 11
14 namespace media { 12 namespace media {
15 namespace cast { 13 namespace cast {
16 namespace transport { 14 namespace transport {
17 15
18 // TODO(mikhal): Add a base class for encryption.
19 TransportAudioSender::TransportAudioSender( 16 TransportAudioSender::TransportAudioSender(
20 const CastTransportConfig& config, 17 const CastTransportConfig& config,
21 base::TickClock* clock, 18 base::TickClock* clock,
22 PacedSender* const paced_packet_sender) 19 PacedSender* const paced_packet_sender)
23 : rtp_sender_(clock, config, true, paced_packet_sender), 20 : rtp_sender_(clock, config, true, paced_packet_sender),
24 initialized_(true) { 21 encryptor_() {
25 if (config.aes_iv_mask.size() == kAesKeySize && 22 initialized_ = encryptor_.Initialize(config.aes_key, config.aes_iv_mask);
26 config.aes_key.size() == kAesKeySize) {
27 iv_mask_ = config.aes_iv_mask;
28 key_.reset(crypto::SymmetricKey::Import(
29 crypto::SymmetricKey::AES, config.aes_key));
30 encryptor_.reset(new crypto::Encryptor());
31 encryptor_->Init(key_.get(), crypto::Encryptor::CTR, std::string());
32 } else if (config.aes_iv_mask.size() != 0 ||
33 config.aes_key.size() != 0) {
34 initialized_ = false;
35 DCHECK_EQ(config.aes_iv_mask.size(), 0u)
36 << "Invalid Crypto configuration: aes_iv_mask.size" ;
37 DCHECK_EQ(config.aes_key.size(), 0u)
38 << "Invalid Crypto configuration: aes_key.size";
39 }
40 } 23 }
41 24
42 TransportAudioSender::~TransportAudioSender() {} 25 TransportAudioSender::~TransportAudioSender() {}
43 26
44 void TransportAudioSender::InsertCodedAudioFrame( 27 void TransportAudioSender::InsertCodedAudioFrame(
45 const EncodedAudioFrame* audio_frame, 28 const EncodedAudioFrame* audio_frame,
46 const base::TimeTicks& recorded_time) { 29 const base::TimeTicks& recorded_time) {
47 if (encryptor_) { 30 if (encryptor_.initialized()) {
48 EncodedAudioFrame encrypted_frame; 31 EncodedAudioFrame encrypted_frame;
49 if (!EncryptAudioFrame(*audio_frame, &encrypted_frame)) { 32 if (!EncryptAudioFrame(*audio_frame, &encrypted_frame)) {
50 return; 33 return;
51 } 34 }
52 rtp_sender_.IncomingEncodedAudioFrame(&encrypted_frame, recorded_time); 35 rtp_sender_.IncomingEncodedAudioFrame(&encrypted_frame, recorded_time);
53 } else { 36 } else {
54 rtp_sender_.IncomingEncodedAudioFrame(audio_frame, recorded_time); 37 rtp_sender_.IncomingEncodedAudioFrame(audio_frame, recorded_time);
55 } 38 }
56 } 39 }
57 40
58 bool TransportAudioSender::EncryptAudioFrame( 41 bool TransportAudioSender::EncryptAudioFrame(
59 const EncodedAudioFrame& audio_frame, 42 const EncodedAudioFrame& audio_frame,
60 EncodedAudioFrame* encrypted_frame) { 43 EncodedAudioFrame* encrypted_frame) {
61 if (!encryptor_->SetCounter(GetAesNonce(audio_frame.frame_id, iv_mask_))) { 44 if (!encryptor_.Encrypt(
62 NOTREACHED() << "Failed to set counter"; 45 audio_frame.frame_id, audio_frame.data, &encrypted_frame->data))
63 return false; 46 return false;
64 } 47
65 if (!encryptor_->Encrypt(audio_frame.data, &encrypted_frame->data)) {
66 NOTREACHED() << "Encrypt error";
67 return false;
68 }
69 encrypted_frame->codec = audio_frame.codec; 48 encrypted_frame->codec = audio_frame.codec;
70 encrypted_frame->frame_id = audio_frame.frame_id; 49 encrypted_frame->frame_id = audio_frame.frame_id;
71 encrypted_frame->samples = audio_frame.samples; 50 encrypted_frame->samples = audio_frame.samples;
72 return true; 51 return true;
73 } 52 }
74 53
75 void TransportAudioSender::ResendPackets( 54 void TransportAudioSender::ResendPackets(
76 const MissingFramesAndPacketsMap& missing_frames_and_packets) { 55 const MissingFramesAndPacketsMap& missing_frames_and_packets) {
77 rtp_sender_.ResendPackets(missing_frames_and_packets); 56 rtp_sender_.ResendPackets(missing_frames_and_packets);
78 } 57 }
79 58
80 void TransportAudioSender::GetStatistics(const base::TimeTicks& now, 59 void TransportAudioSender::GetStatistics(const base::TimeTicks& now,
81 RtcpSenderInfo* sender_info) { 60 RtcpSenderInfo* sender_info) {
82 rtp_sender_.RtpStatistics(now, sender_info); 61 rtp_sender_.RtpStatistics(now, sender_info);
83 } 62 }
84 63
85 } // namespace transport 64 } // namespace transport
86 } // namespace cast 65 } // namespace cast
87 } // namespace media 66 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698