OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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_ |
OLD | NEW |