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

Side by Side Diff: srtp/include/srtp.h

Issue 2344973002: Update libsrtp to version 2.0 (Closed)
Patch Set: Add '.' back to include_dirs Created 4 years, 2 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 | « srtp/include/rtp_priv.h ('k') | srtp/include/srtp_priv.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * srtp.h
3 *
4 * interface to libsrtp
5 *
6 * David A. McGrew
7 * Cisco Systems, Inc.
8 */
9 /*
10 *
11 * Copyright (c) 2001-2006, Cisco Systems, Inc.
12 * All rights reserved.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions
16 * are met:
17 *
18 * Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 *
21 * Redistributions in binary form must reproduce the above
22 * copyright notice, this list of conditions and the following
23 * disclaimer in the documentation and/or other materials provided
24 * with the distribution.
25 *
26 * Neither the name of the Cisco Systems, Inc. nor the names of its
27 * contributors may be used to endorse or promote products derived
28 * from this software without specific prior written permission.
29 *
30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
33 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
34 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
35 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
36 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
37 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41 * OF THE POSSIBILITY OF SUCH DAMAGE.
42 *
43 */
44
45
46 #ifndef SRTP_H
47 #define SRTP_H
48
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52
53 #include <stdint.h>
54 #include "crypto.h"
55 #include "crypto_types.h"
56 #include "err.h"
57
58 /*
59 * Compatibility shim for v1->v2 transition.
60 */
61
62 #define srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32 \
63 crypto_policy_set_aes_cm_128_hmac_sha1_32
64 #define srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80 \
65 crypto_policy_set_aes_cm_128_hmac_sha1_80
66 #define srtp_crypto_policy_set_aes_gcm_128_16_auth \
67 crypto_policy_set_aes_gcm_128_16_auth
68 #define srtp_crypto_policy_set_aes_gcm_256_16_auth \
69 crypto_policy_set_aes_gcm_256_16_auth
70
71 #define srtp_ssrc_type_t ssrc_type_t
72
73 /**
74 * @defgroup SRTP Secure RTP
75 *
76 * @brief libSRTP provides functions for protecting RTP and RTCP. See
77 * Section @ref Overview for an introduction to the use of the library.
78 *
79 * @{
80 */
81
82 /*
83 * SRTP_MASTER_KEY_LEN is the nominal master key length supported by libSRTP
84 */
85
86 #define SRTP_MASTER_KEY_LEN 30
87
88 /*
89 * SRTP_MAX_KEY_LEN is the maximum key length supported by libSRTP
90 */
91 #define SRTP_MAX_KEY_LEN 64
92
93 /*
94 * SRTP_MAX_TAG_LEN is the maximum tag length supported by libSRTP
95 */
96
97 #define SRTP_MAX_TAG_LEN 16
98
99 /**
100 * SRTP_MAX_TRAILER_LEN is the maximum length of the SRTP trailer
101 * (authentication tag and MKI) supported by libSRTP. This value is
102 * the maximum number of octets that will be added to an RTP packet by
103 * srtp_protect().
104 *
105 * @brief the maximum number of octets added by srtp_protect().
106 */
107 #define SRTP_MAX_TRAILER_LEN SRTP_MAX_TAG_LEN
108
109 /*
110 * SRTP_AEAD_SALT_LEN is the length of the SALT values used with
111 * GCM mode. GCM mode requires an IV. The SALT value is used
112 * as part of the IV formation logic applied to each RTP packet.
113 */
114 #define SRTP_AEAD_SALT_LEN 12
115 #define AES_128_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 16
116 #define AES_192_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 24
117 #define AES_256_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 32
118
119
120
121 /*
122 * nota bene: since libSRTP doesn't support the use of the MKI, the
123 * SRTP_MAX_TRAILER_LEN value is just the maximum tag length
124 */
125
126 /**
127 * @brief sec_serv_t describes a set of security services.
128 *
129 * A sec_serv_t enumeration is used to describe the particular
130 * security services that will be applied by a particular crypto
131 * policy (or other mechanism).
132 */
133
134 typedef enum {
135 sec_serv_none = 0, /**< no services */
136 sec_serv_conf = 1, /**< confidentiality */
137 sec_serv_auth = 2, /**< authentication */
138 sec_serv_conf_and_auth = 3 /**< confidentiality and authentication */
139 } sec_serv_t;
140
141 /**
142 * @brief crypto_policy_t describes a particular crypto policy that
143 * can be applied to an SRTP stream.
144 *
145 * A crypto_policy_t describes a particular cryptographic policy that
146 * can be applied to an SRTP or SRTCP stream. An SRTP session policy
147 * consists of a list of these policies, one for each SRTP stream
148 * in the session.
149 */
150
151 typedef struct crypto_policy_t {
152 cipher_type_id_t cipher_type; /**< An integer representing
153 * the type of cipher. */
154 int cipher_key_len; /**< The length of the cipher key
155 * in octets. */
156 auth_type_id_t auth_type; /**< An integer representing the
157 * authentication function. */
158 int auth_key_len; /**< The length of the authentication
159 * function key in octets. */
160 int auth_tag_len; /**< The length of the authentication
161 * tag in octets. */
162 sec_serv_t sec_serv; /**< The flag indicating the security
163 * services to be applied. */
164 } crypto_policy_t;
165
166
167 /**
168 * @brief ssrc_type_t describes the type of an SSRC.
169 *
170 * An ssrc_type_t enumeration is used to indicate a type of SSRC. See
171 * @ref srtp_policy_t for more informataion.
172 */
173
174 typedef enum {
175 ssrc_undefined = 0, /**< Indicates an undefined SSRC type. */
176 ssrc_specific = 1, /**< Indicates a specific SSRC value */
177 ssrc_any_inbound = 2, /**< Indicates any inbound SSRC value
178 (i.e. a value that is used in the
179 function srtp_unprotect()) */
180 ssrc_any_outbound = 3 /**< Indicates any outbound SSRC value
181 (i.e. a value that is used in the
182 function srtp_protect()) */
183 } ssrc_type_t;
184
185 /**
186 * @brief An ssrc_t represents a particular SSRC value, or a `wildcard' SSRC.
187 *
188 * An ssrc_t represents a particular SSRC value (if its type is
189 * ssrc_specific), or a wildcard SSRC value that will match all
190 * outbound SSRCs (if its type is ssrc_any_outbound) or all inbound
191 * SSRCs (if its type is ssrc_any_inbound).
192 *
193 */
194
195 typedef struct {
196 ssrc_type_t type; /**< The type of this particular SSRC */
197 unsigned int value; /**< The value of this SSRC, if it is not a wildcard */
198 } ssrc_t;
199
200
201 /**
202 * @brief points to an EKT policy
203 */
204 typedef struct ekt_policy_ctx_t *ekt_policy_t;
205
206
207 /**
208 * @brief points to EKT stream data
209 */
210 typedef struct ekt_stream_ctx_t *ekt_stream_t;
211
212
213 /**
214 * @brief represents the policy for an SRTP session.
215 *
216 * A single srtp_policy_t struct represents the policy for a single
217 * SRTP stream, and a linked list of these elements represents the
218 * policy for an entire SRTP session. Each element contains the SRTP
219 * and SRTCP crypto policies for that stream, a pointer to the SRTP
220 * master key for that stream, the SSRC describing that stream, or a
221 * flag indicating a `wildcard' SSRC value, and a `next' field that
222 * holds a pointer to the next element in the list of policy elements,
223 * or NULL if it is the last element.
224 *
225 * The wildcard value SSRC_ANY_INBOUND matches any SSRC from an
226 * inbound stream that for which there is no explicit SSRC entry in
227 * another policy element. Similarly, the value SSRC_ANY_OUTBOUND
228 * will matches any SSRC from an outbound stream that does not appear
229 * in another policy element. Note that wildcard SSRCs &b cannot be
230 * used to match both inbound and outbound traffic. This restriction
231 * is intentional, and it allows libSRTP to ensure that no security
232 * lapses result from accidental re-use of SSRC values during key
233 * sharing.
234 *
235 *
236 * @warning The final element of the list @b must have its `next' pointer
237 * set to NULL.
238 */
239
240 typedef struct srtp_policy_t {
241 ssrc_t ssrc; /**< The SSRC value of stream, or the
242 * flags SSRC_ANY_INBOUND or
243 * SSRC_ANY_OUTBOUND if key sharing
244 * is used for this policy element.
245 */
246 crypto_policy_t rtp; /**< SRTP crypto policy. */
247 crypto_policy_t rtcp; /**< SRTCP crypto policy. */
248 unsigned char *key; /**< Pointer to the SRTP master key for
249 * this stream. */
250 ekt_policy_t ekt; /**< Pointer to the EKT policy structure
251 * for this stream (if any) */
252 unsigned long window_size; /**< The window size to use for replay
253 * protection. */
254 int allow_repeat_tx; /**< Whether retransmissions of
255 * packets with the same sequence number
256 * are allowed. (Note that such repeated
257 * transmissions must have the same RTP
258 * payload, or a severe security weakness
259 * is introduced!) */
260 int *enc_xtn_hdr; /**< List of header ids to encrypt. */
261 int enc_xtn_hdr_count; /**< Number of entries in list of header ids. */
262 struct srtp_policy_t *next; /**< Pointer to next stream policy. */
263 } srtp_policy_t;
264
265
266
267
268 /**
269 * @brief An srtp_t points to an SRTP session structure.
270 *
271 * The typedef srtp_t is a pointer to a structure that represents
272 * an SRTP session. This datatype is intentially opaque in
273 * order to separate the interface from the implementation.
274 *
275 * An SRTP session consists of all of the traffic sent to the RTP and
276 * RTCP destination transport addresses, using the RTP/SAVP (Secure
277 * Audio/Video Profile). A session can be viewed as a set of SRTP
278 * streams, each of which originates with a different participant.
279 */
280
281 typedef struct srtp_ctx_t *srtp_t;
282
283
284 /**
285 * @brief An srtp_stream_t points to an SRTP stream structure.
286 *
287 * The typedef srtp_stream_t is a pointer to a structure that
288 * represents an SRTP stream. This datatype is intentionally
289 * opaque in order to separate the interface from the implementation.
290 *
291 * An SRTP stream consists of all of the traffic sent to an SRTP
292 * session by a single participant. A session can be viewed as
293 * a set of streams.
294 *
295 */
296 typedef struct srtp_stream_ctx_t *srtp_stream_t;
297
298
299
300 /**
301 * @brief srtp_init() initializes the srtp library.
302 *
303 * @warning This function @b must be called before any other srtp
304 * functions.
305 */
306
307 err_status_t
308 srtp_init(void);
309
310 /**
311 * @brief srtp_shutdown() de-initializes the srtp library.
312 *
313 * @warning No srtp functions may be called after calling this function.
314 */
315
316 err_status_t
317 srtp_shutdown(void);
318
319 /**
320 * @brief srtp_protect() is the Secure RTP sender-side packet processing
321 * function.
322 *
323 * The function call srtp_protect(ctx, rtp_hdr, len_ptr) applies SRTP
324 * protection to the RTP packet rtp_hdr (which has length *len_ptr) using
325 * the SRTP context ctx. If err_status_ok is returned, then rtp_hdr
326 * points to the resulting SRTP packet and *len_ptr is the number of
327 * octets in that packet; otherwise, no assumptions should be made
328 * about the value of either data elements.
329 *
330 * The sequence numbers of the RTP packets presented to this function
331 * need not be consecutive, but they @b must be out of order by less
332 * than 2^15 = 32,768 packets.
333 *
334 * @warning This function assumes that it can write the authentication
335 * tag into the location in memory immediately following the RTP
336 * packet, and assumes that the RTP packet is aligned on a 32-bit
337 * boundary.
338 *
339 * @warning This function assumes that it can write SRTP_MAX_TRAILER_LEN
340 * into the location in memory immediately following the RTP packet.
341 * Callers MUST ensure that this much writable memory is available in
342 * the buffer that holds the RTP packet.
343 *
344 * @param ctx is the SRTP context to use in processing the packet.
345 *
346 * @param rtp_hdr is a pointer to the RTP packet (before the call); after
347 * the function returns, it points to the srtp packet.
348 *
349 * @param len_ptr is a pointer to the length in octets of the complete
350 * RTP packet (header and body) before the function call, and of the
351 * complete SRTP packet after the call, if err_status_ok was returned.
352 * Otherwise, the value of the data to which it points is undefined.
353 *
354 * @return
355 * - err_status_ok no problems
356 * - err_status_replay_fail rtp sequence number was non-increasing
357 * - @e other failure in cryptographic mechanisms
358 */
359
360 err_status_t
361 srtp_protect(srtp_t ctx, void *rtp_hdr, int *len_ptr);
362
363 /**
364 * @brief srtp_unprotect() is the Secure RTP receiver-side packet
365 * processing function.
366 *
367 * The function call srtp_unprotect(ctx, srtp_hdr, len_ptr) verifies
368 * the Secure RTP protection of the SRTP packet pointed to by srtp_hdr
369 * (which has length *len_ptr), using the SRTP context ctx. If
370 * err_status_ok is returned, then srtp_hdr points to the resulting
371 * RTP packet and *len_ptr is the number of octets in that packet;
372 * otherwise, no assumptions should be made about the value of either
373 * data elements.
374 *
375 * The sequence numbers of the RTP packets presented to this function
376 * need not be consecutive, but they @b must be out of order by less
377 * than 2^15 = 32,768 packets.
378 *
379 * @warning This function assumes that the SRTP packet is aligned on a
380 * 32-bit boundary.
381 *
382 * @param ctx is the SRTP session which applies to the particular packet.
383 *
384 * @param srtp_hdr is a pointer to the header of the SRTP packet
385 * (before the call). after the function returns, it points to the
386 * rtp packet if err_status_ok was returned; otherwise, the value of
387 * the data to which it points is undefined.
388 *
389 * @param len_ptr is a pointer to the length in octets of the complete
390 * srtp packet (header and body) before the function call, and of the
391 * complete rtp packet after the call, if err_status_ok was returned.
392 * Otherwise, the value of the data to which it points is undefined.
393 *
394 * @return
395 * - err_status_ok if the RTP packet is valid.
396 * - err_status_auth_fail if the SRTP packet failed the message
397 * authentication check.
398 * - err_status_replay_fail if the SRTP packet is a replay (e.g. packet has
399 * already been processed and accepted).
400 * - [other] if there has been an error in the cryptographic mechanisms.
401 *
402 */
403
404 err_status_t
405 srtp_unprotect(srtp_t ctx, void *srtp_hdr, int *len_ptr);
406
407
408 /**
409 * @brief srtp_create() allocates and initializes an SRTP session.
410
411 * The function call srtp_create(session, policy, key) allocates and
412 * initializes an SRTP session context, applying the given policy and
413 * key.
414 *
415 * @param session is a pointer to the SRTP session to which the policy is
416 * to be added.
417 *
418 * @param policy is the srtp_policy_t struct that describes the policy
419 * for the session. The struct may be a single element, or it may be
420 * the head of a list, in which case each element of the list is
421 * processed. It may also be NULL, in which case streams should be added
422 * later using srtp_add_stream(). The final element of the list @b must
423 * have its `next' field set to NULL.
424 *
425 * @return
426 * - err_status_ok if creation succeded.
427 * - err_status_alloc_fail if allocation failed.
428 * - err_status_init_fail if initialization failed.
429 */
430
431 err_status_t
432 srtp_create(srtp_t *session, const srtp_policy_t *policy);
433
434
435 /**
436 * @brief srtp_add_stream() allocates and initializes an SRTP stream
437 * within a given SRTP session.
438 *
439 * The function call srtp_add_stream(session, policy) allocates and
440 * initializes a new SRTP stream within a given, previously created
441 * session, applying the policy given as the other argument to that
442 * stream.
443 *
444 * @return values:
445 * - err_status_ok if stream creation succeded.
446 * - err_status_alloc_fail if stream allocation failed
447 * - err_status_init_fail if stream initialization failed.
448 */
449
450 err_status_t
451 srtp_add_stream(srtp_t session,
452 const srtp_policy_t *policy);
453
454
455 /**
456 * @brief srtp_remove_stream() deallocates an SRTP stream.
457 *
458 * The function call srtp_remove_stream(session, ssrc) removes
459 * the SRTP stream with the SSRC value ssrc from the SRTP session
460 * context given by the argument session.
461 *
462 * @param session is the SRTP session from which the stream
463 * will be removed.
464 *
465 * @param ssrc is the SSRC value of the stream to be removed.
466 *
467 * @warning Wildcard SSRC values cannot be removed from a
468 * session.
469 *
470 * @return
471 * - err_status_ok if the stream deallocation succeded.
472 * - [other] otherwise.
473 *
474 */
475
476 err_status_t
477 srtp_remove_stream(srtp_t session, unsigned int ssrc);
478
479 /**
480 * @brief crypto_policy_set_rtp_default() sets a crypto policy
481 * structure to the SRTP default policy for RTP protection.
482 *
483 * @param p is a pointer to the policy structure to be set
484 *
485 * The function call crypto_policy_set_rtp_default(&p) sets the
486 * crypto_policy_t at location p to the SRTP default policy for RTP
487 * protection, as defined in the specification. This function is a
488 * convenience that helps to avoid dealing directly with the policy
489 * data structure. You are encouraged to initialize policy elements
490 * with this function call. Doing so may allow your code to be
491 * forward compatible with later versions of libSRTP that include more
492 * elements in the crypto_policy_t datatype.
493 *
494 * @return void.
495 *
496 */
497
498 void
499 crypto_policy_set_rtp_default(crypto_policy_t *p);
500
501 /**
502 * @brief crypto_policy_set_rtcp_default() sets a crypto policy
503 * structure to the SRTP default policy for RTCP protection.
504 *
505 * @param p is a pointer to the policy structure to be set
506 *
507 * The function call crypto_policy_set_rtcp_default(&p) sets the
508 * crypto_policy_t at location p to the SRTP default policy for RTCP
509 * protection, as defined in the specification. This function is a
510 * convenience that helps to avoid dealing directly with the policy
511 * data structure. You are encouraged to initialize policy elements
512 * with this function call. Doing so may allow your code to be
513 * forward compatible with later versions of libSRTP that include more
514 * elements in the crypto_policy_t datatype.
515 *
516 * @return void.
517 *
518 */
519
520 void
521 crypto_policy_set_rtcp_default(crypto_policy_t *p);
522
523 /**
524 * @brief crypto_policy_set_aes_cm_128_hmac_sha1_80() sets a crypto
525 * policy structure to the SRTP default policy for RTP protection.
526 *
527 * @param p is a pointer to the policy structure to be set
528 *
529 * The function crypto_policy_set_aes_cm_128_hmac_sha1_80() is a
530 * synonym for crypto_policy_set_rtp_default(). It conforms to the
531 * naming convention used in RFC 4568 (SDP Security Descriptions for
532 * Media Streams).
533 *
534 * @return void.
535 *
536 */
537
538 #define crypto_policy_set_aes_cm_128_hmac_sha1_80(p) crypto_policy_set_rtp_defau lt(p)
539
540
541 /**
542 * @brief crypto_policy_set_aes_cm_128_hmac_sha1_32() sets a crypto
543 * policy structure to a short-authentication tag policy
544 *
545 * @param p is a pointer to the policy structure to be set
546 *
547 * The function call crypto_policy_set_aes_cm_128_hmac_sha1_32(&p)
548 * sets the crypto_policy_t at location p to use policy
549 * AES_CM_128_HMAC_SHA1_32 as defined in RFC 4568.
550 * This policy uses AES-128
551 * Counter Mode encryption and HMAC-SHA1 authentication, with an
552 * authentication tag that is only 32 bits long. This length is
553 * considered adequate only for protecting audio and video media that
554 * use a stateless playback function. See Section 7.5 of RFC 3711
555 * (http://www.ietf.org/rfc/rfc3711.txt).
556 *
557 * This function is a convenience that helps to avoid dealing directly
558 * with the policy data structure. You are encouraged to initialize
559 * policy elements with this function call. Doing so may allow your
560 * code to be forward compatible with later versions of libSRTP that
561 * include more elements in the crypto_policy_t datatype.
562 *
563 * @warning This crypto policy is intended for use in SRTP, but not in
564 * SRTCP. It is recommended that a policy that uses longer
565 * authentication tags be used for SRTCP. See Section 7.5 of RFC 3711
566 * (http://www.ietf.org/rfc/rfc3711.txt).
567 *
568 * @return void.
569 *
570 */
571
572 void
573 crypto_policy_set_aes_cm_128_hmac_sha1_32(crypto_policy_t *p);
574
575
576
577 /**
578 * @brief crypto_policy_set_aes_cm_128_null_auth() sets a crypto
579 * policy structure to an encryption-only policy
580 *
581 * @param p is a pointer to the policy structure to be set
582 *
583 * The function call crypto_policy_set_aes_cm_128_null_auth(&p) sets
584 * the crypto_policy_t at location p to use the SRTP default cipher
585 * (AES-128 Counter Mode), but to use no authentication method. This
586 * policy is NOT RECOMMENDED unless it is unavoidable; see Section 7.5
587 * of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
588 *
589 * This function is a convenience that helps to avoid dealing directly
590 * with the policy data structure. You are encouraged to initialize
591 * policy elements with this function call. Doing so may allow your
592 * code to be forward compatible with later versions of libSRTP that
593 * include more elements in the crypto_policy_t datatype.
594 *
595 * @warning This policy is NOT RECOMMENDED for SRTP unless it is
596 * unavoidable, and it is NOT RECOMMENDED at all for SRTCP; see
597 * Section 7.5 of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
598 *
599 * @return void.
600 *
601 */
602
603 void
604 crypto_policy_set_aes_cm_128_null_auth(crypto_policy_t *p);
605
606
607 /**
608 * @brief crypto_policy_set_null_cipher_hmac_sha1_80() sets a crypto
609 * policy structure to an authentication-only policy
610 *
611 * @param p is a pointer to the policy structure to be set
612 *
613 * The function call crypto_policy_set_null_cipher_hmac_sha1_80(&p)
614 * sets the crypto_policy_t at location p to use HMAC-SHA1 with an 80
615 * bit authentication tag to provide message authentication, but to
616 * use no encryption. This policy is NOT RECOMMENDED for SRTP unless
617 * there is a requirement to forego encryption.
618 *
619 * This function is a convenience that helps to avoid dealing directly
620 * with the policy data structure. You are encouraged to initialize
621 * policy elements with this function call. Doing so may allow your
622 * code to be forward compatible with later versions of libSRTP that
623 * include more elements in the crypto_policy_t datatype.
624 *
625 * @warning This policy is NOT RECOMMENDED for SRTP unless there is a
626 * requirement to forego encryption.
627 *
628 * @return void.
629 *
630 */
631
632 void
633 crypto_policy_set_null_cipher_hmac_sha1_80(crypto_policy_t *p);
634
635
636 /**
637 * @brief crypto_policy_set_aes_cm_256_hmac_sha1_80() sets a crypto
638 * policy structure to a encryption and authentication policy using AES-256
639 * for RTP protection.
640 *
641 * @param p is a pointer to the policy structure to be set
642 *
643 * The function call crypto_policy_set_aes_cm_256_hmac_sha1_80(&p)
644 * sets the crypto_policy_t at location p to use policy
645 * AES_CM_256_HMAC_SHA1_80 as defined in
646 * draft-ietf-avt-srtp-big-aes-03.txt. This policy uses AES-256
647 * Counter Mode encryption and HMAC-SHA1 authentication, with an 80 bit
648 * authentication tag.
649 *
650 * This function is a convenience that helps to avoid dealing directly
651 * with the policy data structure. You are encouraged to initialize
652 * policy elements with this function call. Doing so may allow your
653 * code to be forward compatible with later versions of libSRTP that
654 * include more elements in the crypto_policy_t datatype.
655 *
656 * @return void.
657 *
658 */
659
660 void crypto_policy_set_aes_cm_256_hmac_sha1_80(crypto_policy_t *p);
661
662
663 /**
664 * @brief crypto_policy_set_aes_cm_256_hmac_sha1_32() sets a crypto
665 * policy structure to a short-authentication tag policy using AES-256
666 * encryption.
667 *
668 * @param p is a pointer to the policy structure to be set
669 *
670 * The function call crypto_policy_set_aes_cm_256_hmac_sha1_32(&p)
671 * sets the crypto_policy_t at location p to use policy
672 * AES_CM_256_HMAC_SHA1_32 as defined in
673 * draft-ietf-avt-srtp-big-aes-03.txt. This policy uses AES-256
674 * Counter Mode encryption and HMAC-SHA1 authentication, with an
675 * authentication tag that is only 32 bits long. This length is
676 * considered adequate only for protecting audio and video media that
677 * use a stateless playback function. See Section 7.5 of RFC 3711
678 * (http://www.ietf.org/rfc/rfc3711.txt).
679 *
680 * This function is a convenience that helps to avoid dealing directly
681 * with the policy data structure. You are encouraged to initialize
682 * policy elements with this function call. Doing so may allow your
683 * code to be forward compatible with later versions of libSRTP that
684 * include more elements in the crypto_policy_t datatype.
685 *
686 * @warning This crypto policy is intended for use in SRTP, but not in
687 * SRTCP. It is recommended that a policy that uses longer
688 * authentication tags be used for SRTCP. See Section 7.5 of RFC 3711
689 * (http://www.ietf.org/rfc/rfc3711.txt).
690 *
691 * @return void.
692 *
693 */
694
695 void
696 crypto_policy_set_aes_cm_256_hmac_sha1_32(crypto_policy_t *p);
697
698 /**
699 * @brief crypto_policy_set_aes_cm_256_null_auth() sets a crypto
700 * policy structure to an encryption-only policy
701 *
702 * @param p is a pointer to the policy structure to be set
703 *
704 * The function call crypto_policy_set_aes_cm_256_null_auth(&p) sets
705 * the crypto_policy_t at location p to use the SRTP default cipher
706 * (AES-256 Counter Mode), but to use no authentication method. This
707 * policy is NOT RECOMMENDED unless it is unavoidable; see Section 7.5
708 * of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
709 *
710 * This function is a convenience that helps to avoid dealing directly
711 * with the policy data structure. You are encouraged to initialize
712 * policy elements with this function call. Doing so may allow your
713 * code to be forward compatible with later versions of libSRTP that
714 * include more elements in the crypto_policy_t datatype.
715 *
716 * @warning This policy is NOT RECOMMENDED for SRTP unless it is
717 * unavoidable, and it is NOT RECOMMENDED at all for SRTCP; see
718 * Section 7.5 of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
719 *
720 * @return void.
721 *
722 */
723 void
724 crypto_policy_set_aes_cm_256_null_auth(crypto_policy_t *p);
725
726 /**
727 * @brief crypto_policy_set_aes_gcm_128_8_auth() sets a crypto
728 * policy structure to an AEAD encryption policy.
729 *
730 * @param p is a pointer to the policy structure to be set
731 *
732 * The function call crypto_policy_set_aes_gcm_128_8_auth(&p) sets
733 * the crypto_policy_t at location p to use the SRTP default cipher
734 * (AES-128 Galois Counter Mode) with 8 octet auth tag. This
735 * policy applies confidentiality and authentication to both the
736 * RTP and RTCP packets.
737 *
738 * This function is a convenience that helps to avoid dealing directly
739 * with the policy data structure. You are encouraged to initialize
740 * policy elements with this function call. Doing so may allow your
741 * code to be forward compatible with later versions of libSRTP that
742 * include more elements in the crypto_policy_t datatype.
743 *
744 * @return void.
745 *
746 */
747 void
748 crypto_policy_set_aes_gcm_128_8_auth(crypto_policy_t *p);
749
750 /**
751 * @brief crypto_policy_set_aes_gcm_256_8_auth() sets a crypto
752 * policy structure to an AEAD encryption policy
753 *
754 * @param p is a pointer to the policy structure to be set
755 *
756 * The function call crypto_policy_set_aes_gcm_256_8_auth(&p) sets
757 * the crypto_policy_t at location p to use the SRTP default cipher
758 * (AES-256 Galois Counter Mode) with 8 octet auth tag. This
759 * policy applies confidentiality and authentication to both the
760 * RTP and RTCP packets.
761 *
762 * This function is a convenience that helps to avoid dealing directly
763 * with the policy data structure. You are encouraged to initialize
764 * policy elements with this function call. Doing so may allow your
765 * code to be forward compatible with later versions of libSRTP that
766 * include more elements in the crypto_policy_t datatype.
767 *
768 * @return void.
769 *
770 */
771 void
772 crypto_policy_set_aes_gcm_256_8_auth(crypto_policy_t *p);
773
774 /**
775 * @brief crypto_policy_set_aes_gcm_128_8_only_auth() sets a crypto
776 * policy structure to an AEAD authentication-only policy
777 *
778 * @param p is a pointer to the policy structure to be set
779 *
780 * The function call crypto_policy_set_aes_gcm_128_8_only_auth(&p) sets
781 * the crypto_policy_t at location p to use the SRTP default cipher
782 * (AES-128 Galois Counter Mode) with 8 octet auth tag. This policy
783 * applies confidentiality and authentication to the RTP packets,
784 * but only authentication to the RTCP packets.
785 *
786 * This function is a convenience that helps to avoid dealing directly
787 * with the policy data structure. You are encouraged to initialize
788 * policy elements with this function call. Doing so may allow your
789 * code to be forward compatible with later versions of libSRTP that
790 * include more elements in the crypto_policy_t datatype.
791 *
792 * @return void.
793 *
794 */
795 void
796 crypto_policy_set_aes_gcm_128_8_only_auth(crypto_policy_t *p);
797
798 /**
799 * @brief crypto_policy_set_aes_gcm_256_8_only_auth() sets a crypto
800 * policy structure to an AEAD authentication-only policy
801 *
802 * @param p is a pointer to the policy structure to be set
803 *
804 * The function call crypto_policy_set_aes_gcm_256_8_only_auth(&p) sets
805 * the crypto_policy_t at location p to use the SRTP default cipher
806 * (AES-256 Galois Counter Mode) with 8 octet auth tag. This policy
807 * applies confidentiality and authentication to the RTP packets,
808 * but only authentication to the RTCP packets.
809 *
810 * This function is a convenience that helps to avoid dealing directly
811 * with the policy data structure. You are encouraged to initialize
812 * policy elements with this function call. Doing so may allow your
813 * code to be forward compatible with later versions of libSRTP that
814 * include more elements in the crypto_policy_t datatype.
815 *
816 * @return void.
817 *
818 */
819 void
820 crypto_policy_set_aes_gcm_256_8_only_auth(crypto_policy_t *p);
821
822 /**
823 * @brief crypto_policy_set_aes_gcm_128_16_auth() sets a crypto
824 * policy structure to an AEAD encryption policy.
825 *
826 * @param p is a pointer to the policy structure to be set
827 *
828 * The function call crypto_policy_set_aes_gcm_128_16_auth(&p) sets
829 * the crypto_policy_t at location p to use the SRTP default cipher
830 * (AES-128 Galois Counter Mode) with 16 octet auth tag. This
831 * policy applies confidentiality and authentication to both the
832 * RTP and RTCP packets.
833 *
834 * This function is a convenience that helps to avoid dealing directly
835 * with the policy data structure. You are encouraged to initialize
836 * policy elements with this function call. Doing so may allow your
837 * code to be forward compatible with later versions of libSRTP that
838 * include more elements in the crypto_policy_t datatype.
839 *
840 * @return void.
841 *
842 */
843 void
844 crypto_policy_set_aes_gcm_128_16_auth(crypto_policy_t *p);
845
846 /**
847 * @brief crypto_policy_set_aes_gcm_256_16_auth() sets a crypto
848 * policy structure to an AEAD encryption policy
849 *
850 * @param p is a pointer to the policy structure to be set
851 *
852 * The function call crypto_policy_set_aes_gcm_256_16_auth(&p) sets
853 * the crypto_policy_t at location p to use the SRTP default cipher
854 * (AES-256 Galois Counter Mode) with 16 octet auth tag. This
855 * policy applies confidentiality and authentication to both the
856 * RTP and RTCP packets.
857 *
858 * This function is a convenience that helps to avoid dealing directly
859 * with the policy data structure. You are encouraged to initialize
860 * policy elements with this function call. Doing so may allow your
861 * code to be forward compatible with later versions of libSRTP that
862 * include more elements in the crypto_policy_t datatype.
863 *
864 * @return void.
865 *
866 */
867 void
868 crypto_policy_set_aes_gcm_256_16_auth(crypto_policy_t *p);
869
870
871 /**
872 * @brief srtp_dealloc() deallocates storage for an SRTP session
873 * context.
874 *
875 * The function call srtp_dealloc(s) deallocates storage for the
876 * SRTP session context s. This function should be called no more
877 * than one time for each of the contexts allocated by the function
878 * srtp_create().
879 *
880 * @param s is the srtp_t for the session to be deallocated.
881 *
882 * @return
883 * - err_status_ok if there no problems.
884 * - err_status_dealloc_fail a memory deallocation failure occured.
885 */
886
887 err_status_t
888 srtp_dealloc(srtp_t s);
889
890
891 /*
892 * @brief identifies a particular SRTP profile
893 *
894 * An srtp_profile_t enumeration is used to identify a particular SRTP
895 * profile (that is, a set of algorithms and parameters). These
896 * profiles are defined in the DTLS-SRTP draft.
897 */
898
899 typedef enum {
900 srtp_profile_reserved = 0,
901 srtp_profile_aes128_cm_sha1_80 = 1,
902 srtp_profile_aes128_cm_sha1_32 = 2,
903 srtp_profile_aes256_cm_sha1_80 = 3,
904 srtp_profile_aes256_cm_sha1_32 = 4,
905 srtp_profile_null_sha1_80 = 5,
906 srtp_profile_null_sha1_32 = 6,
907 } srtp_profile_t;
908
909
910 /**
911 * @brief crypto_policy_set_from_profile_for_rtp() sets a crypto policy
912 * structure to the appropriate value for RTP based on an srtp_profile_t
913 *
914 * @param p is a pointer to the policy structure to be set
915 *
916 * The function call crypto_policy_set_rtp_default(&policy, profile)
917 * sets the crypto_policy_t at location policy to the policy for RTP
918 * protection, as defined by the srtp_profile_t profile.
919 *
920 * This function is a convenience that helps to avoid dealing directly
921 * with the policy data structure. You are encouraged to initialize
922 * policy elements with this function call. Doing so may allow your
923 * code to be forward compatible with later versions of libSRTP that
924 * include more elements in the crypto_policy_t datatype.
925 *
926 * @return values
927 * - err_status_ok no problems were encountered
928 * - err_status_bad_param the profile is not supported
929 *
930 */
931 err_status_t
932 crypto_policy_set_from_profile_for_rtp(crypto_policy_t *policy,
933 srtp_profile_t profile);
934
935
936
937
938 /**
939 * @brief crypto_policy_set_from_profile_for_rtcp() sets a crypto policy
940 * structure to the appropriate value for RTCP based on an srtp_profile_t
941 *
942 * @param p is a pointer to the policy structure to be set
943 *
944 * The function call crypto_policy_set_rtcp_default(&policy, profile)
945 * sets the crypto_policy_t at location policy to the policy for RTCP
946 * protection, as defined by the srtp_profile_t profile.
947 *
948 * This function is a convenience that helps to avoid dealing directly
949 * with the policy data structure. You are encouraged to initialize
950 * policy elements with this function call. Doing so may allow your
951 * code to be forward compatible with later versions of libSRTP that
952 * include more elements in the crypto_policy_t datatype.
953 *
954 * @return values
955 * - err_status_ok no problems were encountered
956 * - err_status_bad_param the profile is not supported
957 *
958 */
959 err_status_t
960 crypto_policy_set_from_profile_for_rtcp(crypto_policy_t *policy,
961 srtp_profile_t profile);
962
963 /**
964 * @brief returns the master key length for a given SRTP profile
965 */
966 unsigned int
967 srtp_profile_get_master_key_length(srtp_profile_t profile);
968
969
970 /**
971 * @brief returns the master salt length for a given SRTP profile
972 */
973 unsigned int
974 srtp_profile_get_master_salt_length(srtp_profile_t profile);
975
976 /**
977 * @brief appends the salt to the key
978 *
979 * The function call append_salt_to_key(k, klen, s, slen)
980 * copies the string s to the location at klen bytes following
981 * the location k.
982 *
983 * @warning There must be at least bytes_in_salt + bytes_in_key bytes
984 * available at the location pointed to by key.
985 *
986 */
987
988 void
989 append_salt_to_key(unsigned char *key, unsigned int bytes_in_key,
990 unsigned char *salt, unsigned int bytes_in_salt);
991
992
993
994 /**
995 * @}
996 */
997
998
999
1000 /**
1001 * @defgroup SRTCP Secure RTCP
1002 * @ingroup SRTP
1003 *
1004 * @brief Secure RTCP functions are used to protect RTCP traffic.
1005 *
1006 * RTCP is the control protocol for RTP. libSRTP protects RTCP
1007 * traffic in much the same way as it does RTP traffic. The function
1008 * srtp_protect_rtcp() applies cryptographic protections to outbound
1009 * RTCP packets, and srtp_unprotect_rtcp() verifies the protections on
1010 * inbound RTCP packets.
1011 *
1012 * A note on the naming convention: srtp_protect_rtcp() has an srtp_t
1013 * as its first argument, and thus has `srtp_' as its prefix. The
1014 * trailing `_rtcp' indicates the protocol on which it acts.
1015 *
1016 * @{
1017 */
1018
1019 /**
1020 * @brief srtp_protect_rtcp() is the Secure RTCP sender-side packet
1021 * processing function.
1022 *
1023 * The function call srtp_protect_rtcp(ctx, rtp_hdr, len_ptr) applies
1024 * SRTCP protection to the RTCP packet rtcp_hdr (which has length
1025 * *len_ptr) using the SRTP session context ctx. If err_status_ok is
1026 * returned, then rtp_hdr points to the resulting SRTCP packet and
1027 * *len_ptr is the number of octets in that packet; otherwise, no
1028 * assumptions should be made about the value of either data elements.
1029 *
1030 * @warning This function assumes that it can write the authentication
1031 * tag into the location in memory immediately following the RTCP
1032 * packet, and assumes that the RTCP packet is aligned on a 32-bit
1033 * boundary.
1034 *
1035 * @warning This function assumes that it can write SRTP_MAX_TRAILER_LEN+4
1036 * into the location in memory immediately following the RTCP packet.
1037 * Callers MUST ensure that this much writable memory is available in
1038 * the buffer that holds the RTCP packet.
1039 *
1040 * @param ctx is the SRTP context to use in processing the packet.
1041 *
1042 * @param rtcp_hdr is a pointer to the RTCP packet (before the call); after
1043 * the function returns, it points to the srtp packet.
1044 *
1045 * @param pkt_octet_len is a pointer to the length in octets of the
1046 * complete RTCP packet (header and body) before the function call,
1047 * and of the complete SRTCP packet after the call, if err_status_ok
1048 * was returned. Otherwise, the value of the data to which it points
1049 * is undefined.
1050 *
1051 * @return
1052 * - err_status_ok if there were no problems.
1053 * - [other] if there was a failure in
1054 * the cryptographic mechanisms.
1055 */
1056
1057
1058 err_status_t
1059 srtp_protect_rtcp(srtp_t ctx, void *rtcp_hdr, int *pkt_octet_len);
1060
1061 /**
1062 * @brief srtp_unprotect_rtcp() is the Secure RTCP receiver-side packet
1063 * processing function.
1064 *
1065 * The function call srtp_unprotect_rtcp(ctx, srtp_hdr, len_ptr)
1066 * verifies the Secure RTCP protection of the SRTCP packet pointed to
1067 * by srtcp_hdr (which has length *len_ptr), using the SRTP session
1068 * context ctx. If err_status_ok is returned, then srtcp_hdr points
1069 * to the resulting RTCP packet and *len_ptr is the number of octets
1070 * in that packet; otherwise, no assumptions should be made about the
1071 * value of either data elements.
1072 *
1073 * @warning This function assumes that the SRTCP packet is aligned on a
1074 * 32-bit boundary.
1075 *
1076 * @param ctx is a pointer to the srtp_t which applies to the
1077 * particular packet.
1078 *
1079 * @param srtcp_hdr is a pointer to the header of the SRTCP packet
1080 * (before the call). After the function returns, it points to the
1081 * rtp packet if err_status_ok was returned; otherwise, the value of
1082 * the data to which it points is undefined.
1083 *
1084 * @param pkt_octet_len is a pointer to the length in octets of the
1085 * complete SRTCP packet (header and body) before the function call,
1086 * and of the complete rtp packet after the call, if err_status_ok was
1087 * returned. Otherwise, the value of the data to which it points is
1088 * undefined.
1089 *
1090 * @return
1091 * - err_status_ok if the RTCP packet is valid.
1092 * - err_status_auth_fail if the SRTCP packet failed the message
1093 * authentication check.
1094 * - err_status_replay_fail if the SRTCP packet is a replay (e.g. has
1095 * already been processed and accepted).
1096 * - [other] if there has been an error in the cryptographic mechanisms.
1097 *
1098 */
1099
1100 err_status_t
1101 srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len);
1102
1103 /**
1104 * @}
1105 */
1106
1107
1108 /**
1109 * @defgroup User data associated to a SRTP session.
1110 * @ingroup SRTP
1111 *
1112 * @brief Store custom user data within a SRTP session.
1113 *
1114 * @{
1115 */
1116
1117 /**
1118 * @brief srtp_set_user_data() stores the given pointer into the SRTP
1119 * session for later retrieval.
1120 *
1121 * @param ctx is the srtp_t context in which the given data pointer is
1122 * stored.
1123 *
1124 * @param data is a pointer to the custom information (struct, function,
1125 * etc) associated with the SRTP session.
1126 *
1127 * @return void.
1128 *
1129 */
1130
1131 void
1132 srtp_set_user_data(srtp_t ctx, void *data);
1133
1134 /**
1135 * @brief srtp_get_user_data() retrieves the pointer to the custom data
1136 * previously stored with srtp_set_user_data().
1137 *
1138 * This function is mostly useful for retrieving data associated to a
1139 * SRTP session when an event fires. The user can then get such a custom
1140 * data by calling this function with the session field of the
1141 * srtp_event_data_t struct as argument.
1142 *
1143 * @param ctx is the srtp_t context in which the given data pointer was
1144 * stored.
1145 *
1146 * @return void* pointer to the user data.
1147 *
1148 */
1149
1150 void*
1151 srtp_get_user_data(srtp_t ctx);
1152
1153 /**
1154 * @}
1155 */
1156
1157
1158 /**
1159 * @defgroup SRTPevents SRTP events and callbacks
1160 * @ingroup SRTP
1161 *
1162 * @brief libSRTP can use a user-provided callback function to
1163 * handle events.
1164 *
1165 *
1166 * libSRTP allows a user to provide a callback function to handle
1167 * events that need to be dealt with outside of the data plane (see
1168 * the enum srtp_event_t for a description of these events). Dealing
1169 * with these events is not a strict necessity; they are not
1170 * security-critical, but the application may suffer if they are not
1171 * handled. The function srtp_set_event_handler() is used to provide
1172 * the callback function.
1173 *
1174 * A default event handler that merely reports on the events as they
1175 * happen is included. It is also possible to set the event handler
1176 * function to NULL, in which case all events will just be silently
1177 * ignored.
1178 *
1179 * @{
1180 */
1181
1182 /**
1183 * @brief srtp_event_t defines events that need to be handled
1184 *
1185 * The enum srtp_event_t defines events that need to be handled
1186 * outside the `data plane', such as SSRC collisions and
1187 * key expirations.
1188 *
1189 * When a key expires or the maximum number of packets has been
1190 * reached, an SRTP stream will enter an `expired' state in which no
1191 * more packets can be protected or unprotected. When this happens,
1192 * it is likely that you will want to either deallocate the stream
1193 * (using srtp_stream_dealloc()), and possibly allocate a new one.
1194 *
1195 * When an SRTP stream expires, the other streams in the same session
1196 * are unaffected, unless key sharing is used by that stream. In the
1197 * latter case, all of the streams in the session will expire.
1198 */
1199
1200 typedef enum {
1201 event_ssrc_collision, /**<
1202 * An SSRC collision occured.
1203 */
1204 event_key_soft_limit, /**< An SRTP stream reached the soft key
1205 * usage limit and will expire soon.
1206 */
1207 event_key_hard_limit, /**< An SRTP stream reached the hard
1208 * key usage limit and has expired.
1209 */
1210 event_packet_index_limit /**< An SRTP stream reached the hard
1211 * packet limit (2^48 packets).
1212 */
1213 } srtp_event_t;
1214
1215 /**
1216 * @brief srtp_event_data_t is the structure passed as a callback to
1217 * the event handler function
1218 *
1219 * The struct srtp_event_data_t holds the data passed to the event
1220 * handler function.
1221 */
1222
1223 typedef struct srtp_event_data_t {
1224 srtp_t session; /**< The session in which the event happend. */
1225 srtp_stream_t stream; /**< The stream in which the event happend. */
1226 srtp_event_t event; /**< An enum indicating the type of event. */
1227 } srtp_event_data_t;
1228
1229 /**
1230 * @brief srtp_event_handler_func_t is the function prototype for
1231 * the event handler.
1232 *
1233 * The typedef srtp_event_handler_func_t is the prototype for the
1234 * event handler function. It has as its only argument an
1235 * srtp_event_data_t which describes the event that needs to be handled.
1236 * There can only be a single, global handler for all events in
1237 * libSRTP.
1238 */
1239
1240 typedef void (srtp_event_handler_func_t)(srtp_event_data_t *data);
1241
1242 /**
1243 * @brief sets the event handler to the function supplied by the caller.
1244 *
1245 * The function call srtp_install_event_handler(func) sets the event
1246 * handler function to the value func. The value NULL is acceptable
1247 * as an argument; in this case, events will be ignored rather than
1248 * handled.
1249 *
1250 * @param func is a pointer to a fuction that takes an srtp_event_data_t
1251 * pointer as an argument and returns void. This function
1252 * will be used by libSRTP to handle events.
1253 */
1254
1255 err_status_t
1256 srtp_install_event_handler(srtp_event_handler_func_t func);
1257
1258 /**
1259 * @brief Returns the version string of the library.
1260 *
1261 */
1262 const char *srtp_get_version_string(void);
1263
1264 /**
1265 * @brief Returns the numeric representation of the library version.
1266 *
1267 */
1268 unsigned int srtp_get_version(void);
1269
1270 /**
1271 * @}
1272 */
1273 /* in host order, so outside the #if */
1274 #define SRTCP_E_BIT 0x80000000
1275 /* for byte-access */
1276 #define SRTCP_E_BYTE_BIT 0x80
1277 #define SRTCP_INDEX_MASK 0x7fffffff
1278
1279 #ifdef __cplusplus
1280 }
1281 #endif
1282
1283 #endif /* SRTP_H */
OLDNEW
« no previous file with comments | « srtp/include/rtp_priv.h ('k') | srtp/include/srtp_priv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698