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: webrtc/pc/srtpfilter.h

Issue 1528843005: Add support for GCM cipher suites from RFC 7714. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Disable GCM if ENABLE_EXTERNAL_AUTH is defined. Created 4 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 unified diff | Download patch
« no previous file with comments | « webrtc/pc/mediasession_unittest.cc ('k') | webrtc/pc/srtpfilter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2009 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 15 matching lines...) Expand all
26 #include "webrtc/media/base/cryptoparams.h" 26 #include "webrtc/media/base/cryptoparams.h"
27 #include "webrtc/p2p/base/sessiondescription.h" 27 #include "webrtc/p2p/base/sessiondescription.h"
28 28
29 // Forward declaration to avoid pulling in libsrtp headers here 29 // Forward declaration to avoid pulling in libsrtp headers here
30 struct srtp_event_data_t; 30 struct srtp_event_data_t;
31 struct srtp_ctx_t; 31 struct srtp_ctx_t;
32 struct srtp_policy_t; 32 struct srtp_policy_t;
33 33
34 namespace cricket { 34 namespace cricket {
35 35
36 // Key is 128 bits and salt is 112 bits == 30 bytes. B64 bloat => 40 bytes.
37 extern const int SRTP_MASTER_KEY_BASE64_LEN;
38
39 // Needed for DTLS-SRTP
40 extern const int SRTP_MASTER_KEY_KEY_LEN;
41 extern const int SRTP_MASTER_KEY_SALT_LEN;
42
43 class SrtpSession; 36 class SrtpSession;
44 class SrtpStat; 37 class SrtpStat;
45 38
46 void EnableSrtpDebugging(); 39 void EnableSrtpDebugging();
47 void ShutdownSrtp(); 40 void ShutdownSrtp();
48 41
49 // Class to transform SRTP to/from RTP. 42 // Class to transform SRTP to/from RTP.
50 // Initialize by calling SetSend with the local security params, then call 43 // Initialize by calling SetSend with the local security params, then call
51 // SetRecv once the remote security params are received. At that point 44 // SetRecv once the remote security params are received. At that point
52 // Protect/UnprotectRt(c)p can be called to encrypt/decrypt data. 45 // Protect/UnprotectRt(c)p can be called to encrypt/decrypt data.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 ContentSource source); 126 ContentSource source);
134 bool ExpectAnswer(ContentSource source); 127 bool ExpectAnswer(ContentSource source);
135 bool DoSetAnswer(const std::vector<CryptoParams>& answer_params, 128 bool DoSetAnswer(const std::vector<CryptoParams>& answer_params,
136 ContentSource source, 129 ContentSource source,
137 bool final); 130 bool final);
138 void CreateSrtpSessions(); 131 void CreateSrtpSessions();
139 bool NegotiateParams(const std::vector<CryptoParams>& answer_params, 132 bool NegotiateParams(const std::vector<CryptoParams>& answer_params,
140 CryptoParams* selected_params); 133 CryptoParams* selected_params);
141 bool ApplyParams(const CryptoParams& send_params, 134 bool ApplyParams(const CryptoParams& send_params,
142 const CryptoParams& recv_params); 135 const CryptoParams& recv_params);
143 static bool ParseKeyParams(const std::string& params, uint8_t* key, int len); 136 static bool ParseKeyParams(const std::string& params,
137 uint8_t* key,
138 size_t len);
144 139
145 private: 140 private:
146 enum State { 141 enum State {
147 ST_INIT, // SRTP filter unused. 142 ST_INIT, // SRTP filter unused.
148 ST_SENTOFFER, // Offer with SRTP parameters sent. 143 ST_SENTOFFER, // Offer with SRTP parameters sent.
149 ST_RECEIVEDOFFER, // Offer with SRTP parameters received. 144 ST_RECEIVEDOFFER, // Offer with SRTP parameters received.
150 ST_SENTPRANSWER_NO_CRYPTO, // Sent provisional answer without crypto. 145 ST_SENTPRANSWER_NO_CRYPTO, // Sent provisional answer without crypto.
151 // Received provisional answer without crypto. 146 // Received provisional answer without crypto.
152 ST_RECEIVEDPRANSWER_NO_CRYPTO, 147 ST_RECEIVEDPRANSWER_NO_CRYPTO,
153 ST_ACTIVE, // Offer and answer set. 148 ST_ACTIVE, // Offer and answer set.
(...skipping 24 matching lines...) Expand all
178 }; 173 };
179 174
180 // Class that wraps a libSRTP session. 175 // Class that wraps a libSRTP session.
181 class SrtpSession { 176 class SrtpSession {
182 public: 177 public:
183 SrtpSession(); 178 SrtpSession();
184 ~SrtpSession(); 179 ~SrtpSession();
185 180
186 // Configures the session for sending data using the specified 181 // Configures the session for sending data using the specified
187 // cipher-suite and key. Receiving must be done by a separate session. 182 // cipher-suite and key. Receiving must be done by a separate session.
188 bool SetSend(int cs, const uint8_t* key, int len); 183 bool SetSend(int cs, const uint8_t* key, size_t len);
189 // Configures the session for receiving data using the specified 184 // Configures the session for receiving data using the specified
190 // cipher-suite and key. Sending must be done by a separate session. 185 // cipher-suite and key. Sending must be done by a separate session.
191 bool SetRecv(int cs, const uint8_t* key, int len); 186 bool SetRecv(int cs, const uint8_t* key, size_t len);
192 187
193 // Encrypts/signs an individual RTP/RTCP packet, in-place. 188 // Encrypts/signs an individual RTP/RTCP packet, in-place.
194 // If an HMAC is used, this will increase the packet size. 189 // If an HMAC is used, this will increase the packet size.
195 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len); 190 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len);
196 // Overloaded version, outputs packet index. 191 // Overloaded version, outputs packet index.
197 bool ProtectRtp(void* data, 192 bool ProtectRtp(void* data,
198 int in_len, 193 int in_len,
199 int max_len, 194 int max_len,
200 int* out_len, 195 int* out_len,
201 int64_t* index); 196 int64_t* index);
202 bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len); 197 bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len);
203 // Decrypts/verifies an invidiual RTP/RTCP packet. 198 // Decrypts/verifies an invidiual RTP/RTCP packet.
204 // If an HMAC is used, this will decrease the packet size. 199 // If an HMAC is used, this will decrease the packet size.
205 bool UnprotectRtp(void* data, int in_len, int* out_len); 200 bool UnprotectRtp(void* data, int in_len, int* out_len);
206 bool UnprotectRtcp(void* data, int in_len, int* out_len); 201 bool UnprotectRtcp(void* data, int in_len, int* out_len);
207 202
208 // Helper method to get authentication params. 203 // Helper method to get authentication params.
209 bool GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len); 204 bool GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len);
210 205
211 // Update the silent threshold (in ms) for signaling errors. 206 // Update the silent threshold (in ms) for signaling errors.
212 void set_signal_silent_time(int signal_silent_time_in_ms); 207 void set_signal_silent_time(int signal_silent_time_in_ms);
213 208
214 // Calls srtp_shutdown if it's initialized. 209 // Calls srtp_shutdown if it's initialized.
215 static void Terminate(); 210 static void Terminate();
216 211
217 sigslot::repeater3<uint32_t, SrtpFilter::Mode, SrtpFilter::Error> 212 sigslot::repeater3<uint32_t, SrtpFilter::Mode, SrtpFilter::Error>
218 SignalSrtpError; 213 SignalSrtpError;
219 214
220 private: 215 private:
221 bool SetKey(int type, int cs, const uint8_t* key, int len); 216 bool SetKey(int type, int cs, const uint8_t* key, size_t len);
222 // Returns send stream current packet index from srtp db. 217 // Returns send stream current packet index from srtp db.
223 bool GetSendStreamPacketIndex(void* data, int in_len, int64_t* index); 218 bool GetSendStreamPacketIndex(void* data, int in_len, int64_t* index);
224 219
225 static bool Init(); 220 static bool Init();
226 void HandleEvent(const srtp_event_data_t* ev); 221 void HandleEvent(const srtp_event_data_t* ev);
227 static void HandleEventThunk(srtp_event_data_t* ev); 222 static void HandleEventThunk(srtp_event_data_t* ev);
228 223
229 rtc::ThreadChecker thread_checker_; 224 rtc::ThreadChecker thread_checker_;
230 srtp_ctx_t* session_; 225 srtp_ctx_t* session_;
231 int rtp_auth_tag_len_; 226 int rtp_auth_tag_len_;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 std::map<FailureKey, FailureStat> failures_; 300 std::map<FailureKey, FailureStat> failures_;
306 // Threshold in ms to silent the signaling errors. 301 // Threshold in ms to silent the signaling errors.
307 int signal_silent_time_; 302 int signal_silent_time_;
308 303
309 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpStat); 304 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpStat);
310 }; 305 };
311 306
312 } // namespace cricket 307 } // namespace cricket
313 308
314 #endif // WEBRTC_PC_SRTPFILTER_H_ 309 #endif // WEBRTC_PC_SRTPFILTER_H_
OLDNEW
« no previous file with comments | « webrtc/pc/mediasession_unittest.cc ('k') | webrtc/pc/srtpfilter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698