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

Side by Side Diff: 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 | « include/rtp_priv.h ('k') | 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
1 /* 1 /*
2 * srtp.h 2 * srtp.h
3 * 3 *
4 * interface to libsrtp 4 * interface to libsrtp
5 * 5 *
6 * David A. McGrew 6 * David A. McGrew
7 * Cisco Systems, Inc. 7 * Cisco Systems, Inc.
8 */ 8 */
9 /* 9 /*
10 * 10 *
(...skipping 28 matching lines...) Expand all
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41 * OF THE POSSIBILITY OF SUCH DAMAGE. 41 * OF THE POSSIBILITY OF SUCH DAMAGE.
42 * 42 *
43 */ 43 */
44 44
45 45
46 #ifndef SRTP_H 46 #ifndef SRTP_H
47 #define SRTP_H 47 #define SRTP_H
48 48
49 #include <stdint.h>
50
49 #ifdef __cplusplus 51 #ifdef __cplusplus
50 extern "C" { 52 extern "C" {
51 #endif 53 #endif
52 54
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 /** 55 /**
74 * @defgroup SRTP Secure RTP 56 * @defgroup SRTP Secure RTP
75 * 57 *
76 * @brief libSRTP provides functions for protecting RTP and RTCP. See 58 * @brief libSRTP provides functions for protecting RTP and RTCP. See
77 * Section @ref Overview for an introduction to the use of the library. 59 * Section @ref Overview for an introduction to the use of the library.
78 * 60 *
79 * @{ 61 * @{
80 */ 62 */
81 63
82 /* 64 /*
(...skipping 22 matching lines...) Expand all
105 * @brief the maximum number of octets added by srtp_protect(). 87 * @brief the maximum number of octets added by srtp_protect().
106 */ 88 */
107 #define SRTP_MAX_TRAILER_LEN SRTP_MAX_TAG_LEN 89 #define SRTP_MAX_TRAILER_LEN SRTP_MAX_TAG_LEN
108 90
109 /* 91 /*
110 * SRTP_AEAD_SALT_LEN is the length of the SALT values used with 92 * 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 93 * 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. 94 * as part of the IV formation logic applied to each RTP packet.
113 */ 95 */
114 #define SRTP_AEAD_SALT_LEN 12 96 #define SRTP_AEAD_SALT_LEN 12
115 #define AES_128_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 16 97 #define SRTP_AES_128_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 16
116 #define AES_192_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 24 98 #define SRTP_AES_192_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 24
117 #define AES_256_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 32 99 #define SRTP_AES_256_GCM_KEYSIZE_WSALT SRTP_AEAD_SALT_LEN + 32
100
101 /*
102 * an srtp_hdr_t represents the srtp header
103 *
104 * in this implementation, an srtp_hdr_t is assumed to be 32-bit aligned
105 *
106 * (note that this definition follows that of RFC 1889 Appendix A, but
107 * is not identical)
108 */
109
110 #ifndef WORDS_BIGENDIAN
111
112 /*
113 * srtp_hdr_t represents an RTP or SRTP header. The bit-fields in
114 * this structure should be declared "unsigned int" instead of
115 * "unsigned char", but doing so causes the MS compiler to not
116 * fully pack the bit fields.
117 */
118
119 typedef struct {
120 unsigned char cc:4;» /* CSRC count */
121 unsigned char x:1;» /* header extension flag */
122 unsigned char p:1;» /* padding flag */
123 unsigned char version:2; /* protocol version */
124 unsigned char pt:7;» /* payload type */
125 unsigned char m:1;» /* marker bit */
126 uint16_t seq;»» /* sequence number */
127 uint32_t ts;» » /* timestamp */
128 uint32_t ssrc;» /* synchronization source */
129 } srtp_hdr_t;
130
131 #else /* BIG_ENDIAN */
132
133 typedef struct {
134 unsigned char version:2; /* protocol version */
135 unsigned char p:1;» /* padding flag */
136 unsigned char x:1;» /* header extension flag */
137 unsigned char cc:4;» /* CSRC count */
138 unsigned char m:1;» /* marker bit */
139 unsigned char pt:7;» /* payload type */
140 uint16_t seq;»» /* sequence number */
141 uint32_t ts;» » /* timestamp */
142 uint32_t ssrc;» /* synchronization source */
143 } srtp_hdr_t;
144
145 #endif
146
147 typedef struct {
148 uint16_t profile_specific; /* profile-specific info */
149 uint16_t length; /* number of 32-bit words in extension */
150 } srtp_hdr_xtnd_t;
151
152
153 /*
154 * srtcp_hdr_t represents a secure rtcp header
155 *
156 * in this implementation, an srtcp header is assumed to be 32-bit
157 * alinged
158 */
159
160 #ifndef WORDS_BIGENDIAN
161
162 typedef struct {
163 unsigned char rc:5;» » /* reception report count */
164 unsigned char p:1;» » /* padding flag */
165 unsigned char version:2;» /* protocol version */
166 unsigned char pt:8;» » /* payload type */
167 uint16_t len;»» » /* length */
168 uint32_t ssrc;» »/* synchronization source */
169 } srtcp_hdr_t;
170
171 typedef struct {
172 unsigned int index:31; /* srtcp packet index in network order! */
173 unsigned int e:1; /* encrypted? 1=yes */
174 /* optional mikey/etc go here */
175 /* and then the variable-length auth tag */
176 } srtcp_trailer_t;
177
178
179 #else /* BIG_ENDIAN */
180
181 typedef struct {
182 unsigned char version:2;» /* protocol version */
183 unsigned char p:1;» » /* padding flag */
184 unsigned char rc:5;» » /* reception report count */
185 unsigned char pt:8;» » /* payload type */
186 uint16_t len;»» » /* length */
187 uint32_t ssrc;» »/* synchronization source */
188 } srtcp_hdr_t;
189
190 typedef struct {
191 unsigned int version:2; /* protocol version */
192 unsigned int p:1; /* padding flag */
193 unsigned int count:5; /* varies by packet type */
194 unsigned int pt:8; /* payload type */
195 uint16_t length; /* len of uint32s of packet less header */
196 } rtcp_common_t;
197
198 typedef struct {
199 unsigned int e:1; /* encrypted? 1=yes */
200 unsigned int index:31; /* srtcp packet index */
201 /* optional mikey/etc go here */
202 /* and then the variable-length auth tag */
203 } srtcp_trailer_t;
204
205 #endif
118 206
119 207
120 208
209 /**
210 * @brief A srtp_cipher_type_id_t is an identifier for a particular cipher
211 * type.
212 *
213 * A srtp_cipher_type_id_t is an integer that represents a particular
214 * cipher type, e.g. the Advanced Encryption Standard (AES). A
215 * SRTP_NULL_CIPHER is avaliable; this cipher leaves the data unchanged,
216 * and can be selected to indicate that no encryption is to take
217 * place.
218 *
219 * @ingroup Ciphers
220 */
221 typedef uint32_t srtp_cipher_type_id_t;
222
223 /**
224 * @brief An srtp_auth_type_id_t is an identifier for a particular authenticati on
225 * function.
226 *
227 * An srtp_auth_type_id_t is an integer that represents a particular
228 * authentication function type, e.g. HMAC-SHA1. A SRTP_NULL_AUTH is
229 * avaliable; this authentication function performs no computation,
230 * and can be selected to indicate that no authentication is to take
231 * place.
232 *
233 * @ingroup Authentication
234 */
235 typedef uint32_t srtp_auth_type_id_t;
236
237 /*
238 * @brief srtp_err_status_t defines error codes.
239 *
240 * The enumeration srtp_err_status_t defines error codes. Note that the
241 * value of srtp_err_status_ok is equal to zero, which can simplify error
242 * checking somewhat.
243 *
244 */
245 typedef enum {
246 srtp_err_status_ok = 0, /**< nothing to report */
247 srtp_err_status_fail = 1, /**< unspecified failure */
248 srtp_err_status_bad_param = 2, /**< unsupported parameter */
249 srtp_err_status_alloc_fail = 3, /**< couldn't allocate memory */
250 srtp_err_status_dealloc_fail = 4, /**< couldn't deallocate properly */
251 srtp_err_status_init_fail = 5, /**< couldn't initialize */
252 srtp_err_status_terminus = 6, /**< can't process as much data as requeste d */
253 srtp_err_status_auth_fail = 7, /**< authentication failure */
254 srtp_err_status_cipher_fail = 8, /**< cipher failure */
255 srtp_err_status_replay_fail = 9, /**< replay check failed (bad index) */
256 srtp_err_status_replay_old = 10, /**< replay check failed (index too old) */
257 srtp_err_status_algo_fail = 11, /**< algorithm failed test routine */
258 srtp_err_status_no_such_op = 12, /**< unsupported operation */
259 srtp_err_status_no_ctx = 13, /**< no appropriate context found */
260 srtp_err_status_cant_check = 14, /**< unable to perform desired validation */
261 srtp_err_status_key_expired = 15, /**< can't use key any more */
262 srtp_err_status_socket_err = 16, /**< error in use of socket */
263 srtp_err_status_signal_err = 17, /**< error in use POSIX signals */
264 srtp_err_status_nonce_bad = 18, /**< nonce check failed */
265 srtp_err_status_read_fail = 19, /**< couldn't read data */
266 srtp_err_status_write_fail = 20, /**< couldn't write data */
267 srtp_err_status_parse_err = 21, /**< error parsing data */
268 srtp_err_status_encode_err = 22, /**< error encoding data */
269 srtp_err_status_semaphore_err = 23,/**< error while using semaphores */
270 srtp_err_status_pfkey_err = 24 /**< error while using pfkey */
271 } srtp_err_status_t;
272
273 typedef struct srtp_stream_ctx_t_ srtp_stream_ctx_t;
274 typedef struct srtp_ctx_t_ srtp_ctx_t;
275
121 /* 276 /*
122 * nota bene: since libSRTP doesn't support the use of the MKI, the 277 * 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 278 * SRTP_MAX_TRAILER_LEN value is just the maximum tag length
124 */ 279 */
125 280
126 /** 281 /**
127 * @brief sec_serv_t describes a set of security services. 282 * @brief srtp_sec_serv_t describes a set of security services.
128 * 283 *
129 * A sec_serv_t enumeration is used to describe the particular 284 * A srtp_sec_serv_t enumeration is used to describe the particular
130 * security services that will be applied by a particular crypto 285 * security services that will be applied by a particular crypto
131 * policy (or other mechanism). 286 * policy (or other mechanism).
132 */ 287 */
133 288
134 typedef enum { 289 typedef enum {
135 sec_serv_none = 0, /**< no services */ 290 sec_serv_none = 0, /**< no services */
136 sec_serv_conf = 1, /**< confidentiality */ 291 sec_serv_conf = 1, /**< confidentiality */
137 sec_serv_auth = 2, /**< authentication */ 292 sec_serv_auth = 2, /**< authentication */
138 sec_serv_conf_and_auth = 3 /**< confidentiality and authentication */ 293 sec_serv_conf_and_auth = 3 /**< confidentiality and authentication */
139 } sec_serv_t; 294 } srtp_sec_serv_t;
140 295
141 /** 296 /**
142 * @brief crypto_policy_t describes a particular crypto policy that 297 * @brief srtp_crypto_policy_t describes a particular crypto policy that
143 * can be applied to an SRTP stream. 298 * can be applied to an SRTP stream.
144 * 299 *
145 * A crypto_policy_t describes a particular cryptographic policy that 300 * A srtp_crypto_policy_t describes a particular cryptographic policy that
146 * can be applied to an SRTP or SRTCP stream. An SRTP session policy 301 * 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 302 * consists of a list of these policies, one for each SRTP stream
148 * in the session. 303 * in the session.
149 */ 304 */
150 305
151 typedef struct crypto_policy_t { 306 typedef struct srtp_crypto_policy_t {
152 cipher_type_id_t cipher_type; /**< An integer representing 307 srtp_cipher_type_id_t cipher_type; /**< An integer representing
153 » » » » * the type of cipher. */ 308 » » » » * the type of cipher. */
154 int cipher_key_len; /**< The length of the cipher key 309 int cipher_key_len; /**< The length of the cipher key
155 * in octets. */ 310 * in octets. */
156 auth_type_id_t auth_type; /**< An integer representing the 311 srtp_auth_type_id_t auth_type; /**< An integer representing the
157 » » » » * authentication function. */ 312 » » » » * authentication function. */
158 int auth_key_len; /**< The length of the authentication 313 int auth_key_len; /**< The length of the authentication
159 * function key in octets. */ 314 * function key in octets. */
160 int auth_tag_len; /**< The length of the authentication 315 int auth_tag_len; /**< The length of the authentication
161 * tag in octets. */ 316 * tag in octets. */
162 sec_serv_t sec_serv; /**< The flag indicating the security 317 srtp_sec_serv_t sec_serv; /**< The flag indicating the security
163 * services to be applied. */ 318 * services to be applied. */
164 } crypto_policy_t; 319 } srtp_crypto_policy_t;
165 320
166 321
167 /** 322 /**
168 * @brief ssrc_type_t describes the type of an SSRC. 323 * @brief srtp_ssrc_type_t describes the type of an SSRC.
169 * 324 *
170 * An ssrc_type_t enumeration is used to indicate a type of SSRC. See 325 * An srtp_ssrc_type_t enumeration is used to indicate a type of SSRC. See
171 * @ref srtp_policy_t for more informataion. 326 * @ref srtp_policy_t for more informataion.
172 */ 327 */
173 328
174 typedef enum { 329 typedef enum {
175 ssrc_undefined = 0, /**< Indicates an undefined SSRC type. */ 330 ssrc_undefined = 0, /**< Indicates an undefined SSRC type. */
176 ssrc_specific = 1, /**< Indicates a specific SSRC value */ 331 ssrc_specific = 1, /**< Indicates a specific SSRC value */
177 ssrc_any_inbound = 2, /**< Indicates any inbound SSRC value 332 ssrc_any_inbound = 2, /**< Indicates any inbound SSRC value
178 (i.e. a value that is used in the 333 (i.e. a value that is used in the
179 function srtp_unprotect()) */ 334 function srtp_unprotect()) */
180 ssrc_any_outbound = 3 /**< Indicates any outbound SSRC value 335 ssrc_any_outbound = 3 /**< Indicates any outbound SSRC value
181 (i.e. a value that is used in the 336 (i.e. a value that is used in the
182 function srtp_protect()) */ 337 function srtp_protect()) */
183 } ssrc_type_t; 338 } srtp_ssrc_type_t;
184 339
185 /** 340 /**
186 * @brief An ssrc_t represents a particular SSRC value, or a `wildcard' SSRC. 341 * @brief An srtp_ssrc_t represents a particular SSRC value, or a `wildcard' SSR C.
187 * 342 *
188 * An ssrc_t represents a particular SSRC value (if its type is 343 * An srtp_ssrc_t represents a particular SSRC value (if its type is
189 * ssrc_specific), or a wildcard SSRC value that will match all 344 * ssrc_specific), or a wildcard SSRC value that will match all
190 * outbound SSRCs (if its type is ssrc_any_outbound) or all inbound 345 * outbound SSRCs (if its type is ssrc_any_outbound) or all inbound
191 * SSRCs (if its type is ssrc_any_inbound). 346 * SSRCs (if its type is ssrc_any_inbound).
192 * 347 *
193 */ 348 */
194 349
195 typedef struct { 350 typedef struct {
196 ssrc_type_t type; /**< The type of this particular SSRC */ 351 srtp_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 */ 352 unsigned int value; /**< The value of this SSRC, if it is not a wildcard * /
198 } ssrc_t; 353 } srtp_ssrc_t;
199 354
200 355
201 /** 356 /**
202 * @brief points to an EKT policy 357 * @brief points to an EKT policy
203 */ 358 */
204 typedef struct ekt_policy_ctx_t *ekt_policy_t; 359 typedef struct srtp_ekt_policy_ctx_t *srtp_ekt_policy_t;
205 360
206 361
207 /** 362 /**
208 * @brief points to EKT stream data 363 * @brief points to EKT stream data
209 */ 364 */
210 typedef struct ekt_stream_ctx_t *ekt_stream_t; 365 typedef struct srtp_ekt_stream_ctx_t *srtp_ekt_stream_t;
211 366
212 367
213 /** 368 /**
214 * @brief represents the policy for an SRTP session. 369 * @brief represents the policy for an SRTP session.
215 * 370 *
216 * A single srtp_policy_t struct represents the policy for a single 371 * A single srtp_policy_t struct represents the policy for a single
217 * SRTP stream, and a linked list of these elements represents the 372 * SRTP stream, and a linked list of these elements represents the
218 * policy for an entire SRTP session. Each element contains the SRTP 373 * policy for an entire SRTP session. Each element contains the SRTP
219 * and SRTCP crypto policies for that stream, a pointer to the SRTP 374 * 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 375 * master key for that stream, the SSRC describing that stream, or a
(...skipping 10 matching lines...) Expand all
231 * is intentional, and it allows libSRTP to ensure that no security 386 * is intentional, and it allows libSRTP to ensure that no security
232 * lapses result from accidental re-use of SSRC values during key 387 * lapses result from accidental re-use of SSRC values during key
233 * sharing. 388 * sharing.
234 * 389 *
235 * 390 *
236 * @warning The final element of the list @b must have its `next' pointer 391 * @warning The final element of the list @b must have its `next' pointer
237 * set to NULL. 392 * set to NULL.
238 */ 393 */
239 394
240 typedef struct srtp_policy_t { 395 typedef struct srtp_policy_t {
241 ssrc_t ssrc; /**< The SSRC value of stream, or the 396 srtp_ssrc_t ssrc; /**< The SSRC value of stream, or the
242 * flags SSRC_ANY_INBOUND or 397 * flags SSRC_ANY_INBOUND or
243 * SSRC_ANY_OUTBOUND if key sharing 398 * SSRC_ANY_OUTBOUND if key sharing
244 * is used for this policy element. 399 * is used for this policy element.
245 */ 400 */
246 crypto_policy_t rtp; /**< SRTP crypto policy. */ 401 srtp_crypto_policy_t rtp; /**< SRTP crypto policy. */
247 crypto_policy_t rtcp; /**< SRTCP crypto policy. */ 402 srtp_crypto_policy_t rtcp; /**< SRTCP crypto policy. */
248 unsigned char *key; /**< Pointer to the SRTP master key for 403 unsigned char *key; /**< Pointer to the SRTP master key for
249 * this stream. */ 404 * this stream. */
250 ekt_policy_t ekt; /**< Pointer to the EKT policy structure 405 srtp_ekt_policy_t ekt; /**< Pointer to the EKT policy structure
251 * for this stream (if any) */ 406 * for this stream (if any) */
252 unsigned long window_size; /**< The window size to use for replay 407 unsigned long window_size; /**< The window size to use for replay
253 * protection. */ 408 * protection. */
254 int allow_repeat_tx; /**< Whether retransmissions of 409 int allow_repeat_tx; /**< Whether retransmissions of
255 * packets with the same sequence number 410 * packets with the same sequence number
256 * are allowed. (Note that such repeated 411 * are allowed. (Note that such repeated
257 * transmissions must have the same RTP 412 * transmissions must have the same RTP
258 * payload, or a severe security weakness 413 * payload, or a severe security weakness
259 * is introduced!) */ 414 * is introduced!) */
260 int *enc_xtn_hdr; /**< List of header ids to encrypt. */ 415 int *enc_xtn_hdr; /**< List of header ids to encrypt. */
(...skipping 10 matching lines...) Expand all
271 * The typedef srtp_t is a pointer to a structure that represents 426 * The typedef srtp_t is a pointer to a structure that represents
272 * an SRTP session. This datatype is intentially opaque in 427 * an SRTP session. This datatype is intentially opaque in
273 * order to separate the interface from the implementation. 428 * order to separate the interface from the implementation.
274 * 429 *
275 * An SRTP session consists of all of the traffic sent to the RTP and 430 * An SRTP session consists of all of the traffic sent to the RTP and
276 * RTCP destination transport addresses, using the RTP/SAVP (Secure 431 * RTCP destination transport addresses, using the RTP/SAVP (Secure
277 * Audio/Video Profile). A session can be viewed as a set of SRTP 432 * Audio/Video Profile). A session can be viewed as a set of SRTP
278 * streams, each of which originates with a different participant. 433 * streams, each of which originates with a different participant.
279 */ 434 */
280 435
281 typedef struct srtp_ctx_t *srtp_t; 436 typedef srtp_ctx_t *srtp_t;
282 437
283 438
284 /** 439 /**
285 * @brief An srtp_stream_t points to an SRTP stream structure. 440 * @brief An srtp_stream_t points to an SRTP stream structure.
286 * 441 *
287 * The typedef srtp_stream_t is a pointer to a structure that 442 * The typedef srtp_stream_t is a pointer to a structure that
288 * represents an SRTP stream. This datatype is intentionally 443 * represents an SRTP stream. This datatype is intentionally
289 * opaque in order to separate the interface from the implementation. 444 * opaque in order to separate the interface from the implementation.
290 * 445 *
291 * An SRTP stream consists of all of the traffic sent to an SRTP 446 * 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 447 * session by a single participant. A session can be viewed as
293 * a set of streams. 448 * a set of streams.
294 * 449 *
295 */ 450 */
296 typedef struct srtp_stream_ctx_t *srtp_stream_t; 451 typedef srtp_stream_ctx_t *srtp_stream_t;
297 452
298 453
299 454
300 /** 455 /**
301 * @brief srtp_init() initializes the srtp library. 456 * @brief srtp_init() initializes the srtp library.
302 * 457 *
303 * @warning This function @b must be called before any other srtp 458 * @warning This function @b must be called before any other srtp
304 * functions. 459 * functions.
305 */ 460 */
306 461
307 err_status_t 462 srtp_err_status_t srtp_init(void);
308 srtp_init(void);
309 463
310 /** 464 /**
311 * @brief srtp_shutdown() de-initializes the srtp library. 465 * @brief srtp_shutdown() de-initializes the srtp library.
312 * 466 *
313 * @warning No srtp functions may be called after calling this function. 467 * @warning No srtp functions may be called after calling this function.
314 */ 468 */
315 469
316 err_status_t 470 srtp_err_status_t srtp_shutdown(void);
317 srtp_shutdown(void);
318 471
319 /** 472 /**
320 * @brief srtp_protect() is the Secure RTP sender-side packet processing 473 * @brief srtp_protect() is the Secure RTP sender-side packet processing
321 * function. 474 * function.
322 * 475 *
323 * The function call srtp_protect(ctx, rtp_hdr, len_ptr) applies SRTP 476 * 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 477 * 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 478 * the SRTP context ctx. If srtp_err_status_ok is returned, then rtp_hdr
326 * points to the resulting SRTP packet and *len_ptr is the number of 479 * points to the resulting SRTP packet and *len_ptr is the number of
327 * octets in that packet; otherwise, no assumptions should be made 480 * octets in that packet; otherwise, no assumptions should be made
328 * about the value of either data elements. 481 * about the value of either data elements.
329 * 482 *
330 * The sequence numbers of the RTP packets presented to this function 483 * 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 484 * need not be consecutive, but they @b must be out of order by less
332 * than 2^15 = 32,768 packets. 485 * than 2^15 = 32,768 packets.
333 * 486 *
334 * @warning This function assumes that it can write the authentication 487 * @warning This function assumes that it can write the authentication
335 * tag into the location in memory immediately following the RTP 488 * tag into the location in memory immediately following the RTP
336 * packet, and assumes that the RTP packet is aligned on a 32-bit 489 * packet, and assumes that the RTP packet is aligned on a 32-bit
337 * boundary. 490 * boundary.
338 * 491 *
339 * @warning This function assumes that it can write SRTP_MAX_TRAILER_LEN 492 * @warning This function assumes that it can write SRTP_MAX_TRAILER_LEN
340 * into the location in memory immediately following the RTP packet. 493 * into the location in memory immediately following the RTP packet.
341 * Callers MUST ensure that this much writable memory is available in 494 * Callers MUST ensure that this much writable memory is available in
342 * the buffer that holds the RTP packet. 495 * the buffer that holds the RTP packet.
343 * 496 *
344 * @param ctx is the SRTP context to use in processing the packet. 497 * @param ctx is the SRTP context to use in processing the packet.
345 * 498 *
346 * @param rtp_hdr is a pointer to the RTP packet (before the call); after 499 * @param rtp_hdr is a pointer to the RTP packet (before the call); after
347 * the function returns, it points to the srtp packet. 500 * the function returns, it points to the srtp packet.
348 * 501 *
349 * @param len_ptr is a pointer to the length in octets of the complete 502 * @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 503 * 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. 504 * complete SRTP packet after the call, if srtp_err_status_ok was returned.
352 * Otherwise, the value of the data to which it points is undefined. 505 * Otherwise, the value of the data to which it points is undefined.
353 * 506 *
354 * @return 507 * @return
355 * - err_status_ok no problems 508 * - srtp_err_status_ok no problems
356 * - err_status_replay_fail rtp sequence number was non-increasing 509 * - srtp_err_status_replay_fail rtp sequence number was non-increasing
357 * - @e other failure in cryptographic mechanisms 510 * - @e other failure in cryptographic mechanisms
358 */ 511 */
359 512
360 err_status_t 513 srtp_err_status_t srtp_protect(srtp_t ctx, void *rtp_hdr, int *len_ptr);
361 srtp_protect(srtp_t ctx, void *rtp_hdr, int *len_ptr);
362 514
363 /** 515 /**
364 * @brief srtp_unprotect() is the Secure RTP receiver-side packet 516 * @brief srtp_unprotect() is the Secure RTP receiver-side packet
365 * processing function. 517 * processing function.
366 * 518 *
367 * The function call srtp_unprotect(ctx, srtp_hdr, len_ptr) verifies 519 * 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 520 * 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 521 * (which has length *len_ptr), using the SRTP context ctx. If
370 * err_status_ok is returned, then srtp_hdr points to the resulting 522 * srtp_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; 523 * 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 524 * otherwise, no assumptions should be made about the value of either
373 * data elements. 525 * data elements.
374 * 526 *
375 * The sequence numbers of the RTP packets presented to this function 527 * 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 528 * need not be consecutive, but they @b must be out of order by less
377 * than 2^15 = 32,768 packets. 529 * than 2^15 = 32,768 packets.
378 * 530 *
379 * @warning This function assumes that the SRTP packet is aligned on a 531 * @warning This function assumes that the SRTP packet is aligned on a
380 * 32-bit boundary. 532 * 32-bit boundary.
381 * 533 *
382 * @param ctx is the SRTP session which applies to the particular packet. 534 * @param ctx is the SRTP session which applies to the particular packet.
383 * 535 *
384 * @param srtp_hdr is a pointer to the header of the SRTP packet 536 * @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 537 * (before the call). after the function returns, it points to the
386 * rtp packet if err_status_ok was returned; otherwise, the value of 538 * rtp packet if srtp_err_status_ok was returned; otherwise, the value of
387 * the data to which it points is undefined. 539 * the data to which it points is undefined.
388 * 540 *
389 * @param len_ptr is a pointer to the length in octets of the complete 541 * @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 542 * 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. 543 * complete rtp packet after the call, if srtp_err_status_ok was returned.
392 * Otherwise, the value of the data to which it points is undefined. 544 * Otherwise, the value of the data to which it points is undefined.
393 * 545 *
394 * @return 546 * @return
395 * - err_status_ok if the RTP packet is valid. 547 * - srtp_err_status_ok if the RTP packet is valid.
396 * - err_status_auth_fail if the SRTP packet failed the message 548 * - srtp_err_status_auth_fail if the SRTP packet failed the message
397 * authentication check. 549 * authentication check.
398 * - err_status_replay_fail if the SRTP packet is a replay (e.g. packet has 550 * - srtp_err_status_replay_fail if the SRTP packet is a replay (e.g. packet has
399 * already been processed and accepted). 551 * already been processed and accepted).
400 * - [other] if there has been an error in the cryptographic mechanisms. 552 * - [other] if there has been an error in the cryptographic mechanisms.
401 * 553 *
402 */ 554 */
403 555
404 err_status_t 556 srtp_err_status_t srtp_unprotect(srtp_t ctx, void *srtp_hdr, int *len_ptr);
405 srtp_unprotect(srtp_t ctx, void *srtp_hdr, int *len_ptr);
406 557
407 558
408 /** 559 /**
409 * @brief srtp_create() allocates and initializes an SRTP session. 560 * @brief srtp_create() allocates and initializes an SRTP session.
410 561
411 * The function call srtp_create(session, policy, key) allocates and 562 * The function call srtp_create(session, policy) allocates and
412 * initializes an SRTP session context, applying the given policy and 563 * initializes an SRTP session context, applying the given policy.
413 * key.
414 * 564 *
415 * @param session is a pointer to the SRTP session to which the policy is 565 * @param session is a pointer to the SRTP session to which the policy is
416 * to be added. 566 * to be added.
417 * 567 *
418 * @param policy is the srtp_policy_t struct that describes the policy 568 * @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 569 * 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 570 * 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 571 * 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 572 * later using srtp_add_stream(). The final element of the list @b must
423 * have its `next' field set to NULL. 573 * have its `next' field set to NULL.
424 * 574 *
425 * @return 575 * @return
426 * - err_status_ok if creation succeded. 576 * - srtp_err_status_ok if creation succeded.
427 * - err_status_alloc_fail if allocation failed. 577 * - srtp_err_status_alloc_fail if allocation failed.
428 * - err_status_init_fail if initialization failed. 578 * - srtp_err_status_init_fail if initialization failed.
429 */ 579 */
430 580
431 err_status_t 581 srtp_err_status_t srtp_create(srtp_t *session, const srtp_policy_t *policy);
432 srtp_create(srtp_t *session, const srtp_policy_t *policy);
433 582
434 583
435 /** 584 /**
436 * @brief srtp_add_stream() allocates and initializes an SRTP stream 585 * @brief srtp_add_stream() allocates and initializes an SRTP stream
437 * within a given SRTP session. 586 * within a given SRTP session.
438 * 587 *
439 * The function call srtp_add_stream(session, policy) allocates and 588 * The function call srtp_add_stream(session, policy) allocates and
440 * initializes a new SRTP stream within a given, previously created 589 * initializes a new SRTP stream within a given, previously created
441 * session, applying the policy given as the other argument to that 590 * session, applying the policy given as the other argument to that
442 * stream. 591 * stream.
443 * 592 *
444 * @return values: 593 * @return values:
445 * - err_status_ok if stream creation succeded. 594 * - srtp_err_status_ok if stream creation succeded.
446 * - err_status_alloc_fail if stream allocation failed 595 * - srtp_err_status_alloc_fail if stream allocation failed
447 * - err_status_init_fail if stream initialization failed. 596 * - srtp_err_status_init_fail if stream initialization failed.
448 */ 597 */
449 598
450 err_status_t 599 srtp_err_status_t srtp_add_stream(srtp_t session, const srtp_policy_t *policy);
451 srtp_add_stream(srtp_t session,
452 » » const srtp_policy_t *policy);
453 600
454 601
455 /** 602 /**
456 * @brief srtp_remove_stream() deallocates an SRTP stream. 603 * @brief srtp_remove_stream() deallocates an SRTP stream.
457 * 604 *
458 * The function call srtp_remove_stream(session, ssrc) removes 605 * The function call srtp_remove_stream(session, ssrc) removes
459 * the SRTP stream with the SSRC value ssrc from the SRTP session 606 * the SRTP stream with the SSRC value ssrc from the SRTP session
460 * context given by the argument session. 607 * context given by the argument session.
461 * 608 *
462 * @param session is the SRTP session from which the stream 609 * @param session is the SRTP session from which the stream
463 * will be removed. 610 * will be removed.
464 * 611 *
465 * @param ssrc is the SSRC value of the stream to be removed. 612 * @param ssrc is the SSRC value of the stream to be removed
613 * in network byte order.
466 * 614 *
467 * @warning Wildcard SSRC values cannot be removed from a 615 * @warning Wildcard SSRC values cannot be removed from a
468 * session. 616 * session.
469 * 617 *
470 * @return 618 * @return
471 * - err_status_ok if the stream deallocation succeded. 619 * - srtp_err_status_ok if the stream deallocation succeded.
472 * - [other] otherwise. 620 * - [other] otherwise.
473 * 621 *
474 */ 622 */
475 623
476 err_status_t 624 srtp_err_status_t srtp_remove_stream(srtp_t session, unsigned int ssrc);
477 srtp_remove_stream(srtp_t session, unsigned int ssrc);
478 625
479 /** 626 /**
480 * @brief crypto_policy_set_rtp_default() sets a crypto policy 627 * @brief srtp_update() udpates all streams in the session.
628 *
629 * The function call srtp_update(session, policy) updates
630 * all the streams in the session applying the given policy
631 * and key. The exsisting ROC value of all streams will be
632 * preserved.
633 *
634 * @param session is the SRTP session that contains the streams
635 * to be updated.
636 *
637 * @param policy is the srtp_policy_t struct that describes the policy
638 * for the session. The struct may be a single element, or it may be
639 * the head of a list, in which case each element of the list is
640 * processed. The final element of the list @b must
641 * have its `next' field set to NULL.
642 *
643 * @return
644 * - srtp_err_status_ok if stream creation succeded.
645 * - srtp_err_status_alloc_fail if stream allocation failed
646 * - srtp_err_status_init_fail if stream initialization failed.
647 * - [other] otherwise.
648 *
649 */
650
651 srtp_err_status_t srtp_update(srtp_t session, const srtp_policy_t *policy);
652
653 /**
654 * @brief srtp_update_stream() udpates a SRTP stream.
655 *
656 * The function call srtp_update_stream(session, policy) updates
657 * the stream(s) in the session that match applying the given
658 * policy and key. The exsisting ROC value of all stream(s) will
659 * be preserved.
660 *
661 * @param session is the SRTP session that contains the streams
662 * to be updated.
663 *
664 * @param policy is the srtp_policy_t struct that describes the policy
665 * for the session.
666 *
667 * @return
668 * - srtp_err_status_ok if stream creation succeded.
669 * - srtp_err_status_alloc_fail if stream allocation failed
670 * - srtp_err_status_init_fail if stream initialization failed.
671 * - [other] otherwise.
672 *
673 */
674
675 srtp_err_status_t srtp_update_stream(srtp_t session, const srtp_policy_t *policy );
676
677 /**
678 * @brief srtp_crypto_policy_set_rtp_default() sets a crypto policy
481 * structure to the SRTP default policy for RTP protection. 679 * structure to the SRTP default policy for RTP protection.
482 * 680 *
483 * @param p is a pointer to the policy structure to be set 681 * @param p is a pointer to the policy structure to be set
484 * 682 *
485 * The function call crypto_policy_set_rtp_default(&p) sets the 683 * 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 684 * crypto_policy_t at location p to the SRTP default policy for RTP
487 * protection, as defined in the specification. This function is a 685 * protection, as defined in the specification. This function is a
488 * convenience that helps to avoid dealing directly with the policy 686 * convenience that helps to avoid dealing directly with the policy
489 * data structure. You are encouraged to initialize policy elements 687 * data structure. You are encouraged to initialize policy elements
490 * with this function call. Doing so may allow your code to be 688 * with this function call. Doing so may allow your code to be
491 * forward compatible with later versions of libSRTP that include more 689 * forward compatible with later versions of libSRTP that include more
492 * elements in the crypto_policy_t datatype. 690 * elements in the crypto_policy_t datatype.
493 * 691 *
494 * @return void. 692 * @return void.
495 * 693 *
496 */ 694 */
497 695
498 void 696 void srtp_crypto_policy_set_rtp_default(srtp_crypto_policy_t *p);
499 crypto_policy_set_rtp_default(crypto_policy_t *p);
500 697
501 /** 698 /**
502 * @brief crypto_policy_set_rtcp_default() sets a crypto policy 699 * @brief srtp_crypto_policy_set_rtcp_default() sets a crypto policy
503 * structure to the SRTP default policy for RTCP protection. 700 * structure to the SRTP default policy for RTCP protection.
504 * 701 *
505 * @param p is a pointer to the policy structure to be set 702 * @param p is a pointer to the policy structure to be set
506 * 703 *
507 * The function call crypto_policy_set_rtcp_default(&p) sets the 704 * The function call srtp_crypto_policy_set_rtcp_default(&p) sets the
508 * crypto_policy_t at location p to the SRTP default policy for RTCP 705 * srtp_crypto_policy_t at location p to the SRTP default policy for RTCP
509 * protection, as defined in the specification. This function is a 706 * protection, as defined in the specification. This function is a
510 * convenience that helps to avoid dealing directly with the policy 707 * convenience that helps to avoid dealing directly with the policy
511 * data structure. You are encouraged to initialize policy elements 708 * data structure. You are encouraged to initialize policy elements
512 * with this function call. Doing so may allow your code to be 709 * with this function call. Doing so may allow your code to be
513 * forward compatible with later versions of libSRTP that include more 710 * forward compatible with later versions of libSRTP that include more
514 * elements in the crypto_policy_t datatype. 711 * elements in the srtp_crypto_policy_t datatype.
515 * 712 *
516 * @return void. 713 * @return void.
517 * 714 *
518 */ 715 */
519 716
520 void 717 void srtp_crypto_policy_set_rtcp_default(srtp_crypto_policy_t *p);
521 crypto_policy_set_rtcp_default(crypto_policy_t *p);
522 718
523 /** 719 /**
524 * @brief crypto_policy_set_aes_cm_128_hmac_sha1_80() sets a crypto 720 * @brief srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80() sets a crypto
525 * policy structure to the SRTP default policy for RTP protection. 721 * policy structure to the SRTP default policy for RTP protection.
526 * 722 *
527 * @param p is a pointer to the policy structure to be set 723 * @param p is a pointer to the policy structure to be set
528 * 724 *
529 * The function crypto_policy_set_aes_cm_128_hmac_sha1_80() is a 725 * The function srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80() is a
530 * synonym for crypto_policy_set_rtp_default(). It conforms to the 726 * synonym for srtp_crypto_policy_set_rtp_default(). It conforms to the
531 * naming convention used in RFC 4568 (SDP Security Descriptions for 727 * naming convention used in RFC 4568 (SDP Security Descriptions for
532 * Media Streams). 728 * Media Streams).
533 * 729 *
534 * @return void. 730 * @return void.
535 * 731 *
536 */ 732 */
537 733
538 #define crypto_policy_set_aes_cm_128_hmac_sha1_80(p) crypto_policy_set_rtp_defau lt(p) 734 #define srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(p) srtp_crypto_policy_set _rtp_default(p)
539 735
540 736
541 /** 737 /**
542 * @brief crypto_policy_set_aes_cm_128_hmac_sha1_32() sets a crypto 738 * @brief srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32() sets a crypto
543 * policy structure to a short-authentication tag policy 739 * policy structure to a short-authentication tag policy
544 * 740 *
545 * @param p is a pointer to the policy structure to be set 741 * @param p is a pointer to the policy structure to be set
546 * 742 *
547 * The function call crypto_policy_set_aes_cm_128_hmac_sha1_32(&p) 743 * The function call srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32(&p)
548 * sets the crypto_policy_t at location p to use policy 744 * sets the srtp_crypto_policy_t at location p to use policy
549 * AES_CM_128_HMAC_SHA1_32 as defined in RFC 4568. 745 * AES_CM_128_HMAC_SHA1_32 as defined in RFC 4568.
550 * This policy uses AES-128 746 * This policy uses AES-128
551 * Counter Mode encryption and HMAC-SHA1 authentication, with an 747 * Counter Mode encryption and HMAC-SHA1 authentication, with an
552 * authentication tag that is only 32 bits long. This length is 748 * authentication tag that is only 32 bits long. This length is
553 * considered adequate only for protecting audio and video media that 749 * considered adequate only for protecting audio and video media that
554 * use a stateless playback function. See Section 7.5 of RFC 3711 750 * use a stateless playback function. See Section 7.5 of RFC 3711
555 * (http://www.ietf.org/rfc/rfc3711.txt). 751 * (http://www.ietf.org/rfc/rfc3711.txt).
556 * 752 *
557 * This function is a convenience that helps to avoid dealing directly 753 * This function is a convenience that helps to avoid dealing directly
558 * with the policy data structure. You are encouraged to initialize 754 * with the policy data structure. You are encouraged to initialize
559 * policy elements with this function call. Doing so may allow your 755 * policy elements with this function call. Doing so may allow your
560 * code to be forward compatible with later versions of libSRTP that 756 * code to be forward compatible with later versions of libSRTP that
561 * include more elements in the crypto_policy_t datatype. 757 * include more elements in the srtp_crypto_policy_t datatype.
562 * 758 *
563 * @warning This crypto policy is intended for use in SRTP, but not in 759 * @warning This crypto policy is intended for use in SRTP, but not in
564 * SRTCP. It is recommended that a policy that uses longer 760 * SRTCP. It is recommended that a policy that uses longer
565 * authentication tags be used for SRTCP. See Section 7.5 of RFC 3711 761 * authentication tags be used for SRTCP. See Section 7.5 of RFC 3711
566 * (http://www.ietf.org/rfc/rfc3711.txt). 762 * (http://www.ietf.org/rfc/rfc3711.txt).
567 * 763 *
568 * @return void. 764 * @return void.
569 * 765 *
570 */ 766 */
571 767
572 void 768 void srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32(srtp_crypto_policy_t *p);
573 crypto_policy_set_aes_cm_128_hmac_sha1_32(crypto_policy_t *p);
574 769
575 770
576 771
577 /** 772 /**
578 * @brief crypto_policy_set_aes_cm_128_null_auth() sets a crypto 773 * @brief srtp_crypto_policy_set_aes_cm_128_null_auth() sets a crypto
579 * policy structure to an encryption-only policy 774 * policy structure to an encryption-only policy
580 * 775 *
581 * @param p is a pointer to the policy structure to be set 776 * @param p is a pointer to the policy structure to be set
582 * 777 *
583 * The function call crypto_policy_set_aes_cm_128_null_auth(&p) sets 778 * The function call srtp_crypto_policy_set_aes_cm_128_null_auth(&p) sets
584 * the crypto_policy_t at location p to use the SRTP default cipher 779 * the srtp_crypto_policy_t at location p to use the SRTP default cipher
585 * (AES-128 Counter Mode), but to use no authentication method. This 780 * (AES-128 Counter Mode), but to use no authentication method. This
586 * policy is NOT RECOMMENDED unless it is unavoidable; see Section 7.5 781 * policy is NOT RECOMMENDED unless it is unavoidable; see Section 7.5
587 * of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt). 782 * of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
588 * 783 *
589 * This function is a convenience that helps to avoid dealing directly 784 * This function is a convenience that helps to avoid dealing directly
590 * with the policy data structure. You are encouraged to initialize 785 * with the policy data structure. You are encouraged to initialize
591 * policy elements with this function call. Doing so may allow your 786 * policy elements with this function call. Doing so may allow your
592 * code to be forward compatible with later versions of libSRTP that 787 * code to be forward compatible with later versions of libSRTP that
593 * include more elements in the crypto_policy_t datatype. 788 * include more elements in the srtp_crypto_policy_t datatype.
594 * 789 *
595 * @warning This policy is NOT RECOMMENDED for SRTP unless it is 790 * @warning This policy is NOT RECOMMENDED for SRTP unless it is
596 * unavoidable, and it is NOT RECOMMENDED at all for SRTCP; see 791 * 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). 792 * Section 7.5 of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
598 * 793 *
599 * @return void. 794 * @return void.
600 * 795 *
601 */ 796 */
602 797
603 void 798 void srtp_crypto_policy_set_aes_cm_128_null_auth(srtp_crypto_policy_t *p);
604 crypto_policy_set_aes_cm_128_null_auth(crypto_policy_t *p);
605 799
606 800
607 /** 801 /**
608 * @brief crypto_policy_set_null_cipher_hmac_sha1_80() sets a crypto 802 * @brief srtp_crypto_policy_set_null_cipher_hmac_sha1_80() sets a crypto
609 * policy structure to an authentication-only policy 803 * policy structure to an authentication-only policy
610 * 804 *
611 * @param p is a pointer to the policy structure to be set 805 * @param p is a pointer to the policy structure to be set
612 * 806 *
613 * The function call crypto_policy_set_null_cipher_hmac_sha1_80(&p) 807 * The function call srtp_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 808 * sets the srtp_crypto_policy_t at location p to use HMAC-SHA1 with an 80
615 * bit authentication tag to provide message authentication, but to 809 * bit authentication tag to provide message authentication, but to
616 * use no encryption. This policy is NOT RECOMMENDED for SRTP unless 810 * use no encryption. This policy is NOT RECOMMENDED for SRTP unless
617 * there is a requirement to forego encryption. 811 * there is a requirement to forego encryption.
618 * 812 *
619 * This function is a convenience that helps to avoid dealing directly 813 * This function is a convenience that helps to avoid dealing directly
620 * with the policy data structure. You are encouraged to initialize 814 * with the policy data structure. You are encouraged to initialize
621 * policy elements with this function call. Doing so may allow your 815 * policy elements with this function call. Doing so may allow your
622 * code to be forward compatible with later versions of libSRTP that 816 * code to be forward compatible with later versions of libSRTP that
623 * include more elements in the crypto_policy_t datatype. 817 * include more elements in the srtp_crypto_policy_t datatype.
624 * 818 *
625 * @warning This policy is NOT RECOMMENDED for SRTP unless there is a 819 * @warning This policy is NOT RECOMMENDED for SRTP unless there is a
626 * requirement to forego encryption. 820 * requirement to forego encryption.
627 * 821 *
628 * @return void. 822 * @return void.
629 * 823 *
630 */ 824 */
825 void srtp_crypto_policy_set_null_cipher_hmac_sha1_80(srtp_crypto_policy_t *p);
631 826
632 void 827 /**
633 crypto_policy_set_null_cipher_hmac_sha1_80(crypto_policy_t *p); 828 * @brief srtp_crypto_policy_set_null_cipher_hmac_null() sets a crypto
829 * policy structure to use no encryption or authentication.
830 *
831 * @param p is a pointer to the policy structure to be set
832 *
833 * The function call srtp_crypto_policy_set_null_cipher_hmac_null(&p)
834 * sets the srtp_crypto_policy_t at location p to use no encryption and
835 * no authentication. This policy should only be used for testing and
836 * troubleshootingl.
837 *
838 * This function is a convenience that helps to avoid dealing directly
839 * with the policy data structure. You are encouraged to initialize
840 * policy elements with this function call. Doing so may allow your
841 * code to be forward compatible with later versions of libSRTP that
842 * include more elements in the srtp_crypto_policy_t datatype.
843 *
844 * @warning This policy is NOT RECOMMENDED for SRTP unless there is a
845 * requirement to forego encryption and authentication.
846 *
847 * @return void.
848 *
849 */
850 void srtp_crypto_policy_set_null_cipher_hmac_null(srtp_crypto_policy_t *p);
634 851
635 852
636 /** 853 /**
637 * @brief crypto_policy_set_aes_cm_256_hmac_sha1_80() sets a crypto 854 * @brief srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80() sets a crypto
638 * policy structure to a encryption and authentication policy using AES-256 855 * policy structure to a encryption and authentication policy using AES-256
639 * for RTP protection. 856 * for RTP protection.
640 * 857 *
641 * @param p is a pointer to the policy structure to be set 858 * @param p is a pointer to the policy structure to be set
642 * 859 *
643 * The function call crypto_policy_set_aes_cm_256_hmac_sha1_80(&p) 860 * The function call srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80(&p)
644 * sets the crypto_policy_t at location p to use policy 861 * sets the srtp_crypto_policy_t at location p to use policy
645 * AES_CM_256_HMAC_SHA1_80 as defined in 862 * AES_CM_256_HMAC_SHA1_80 as defined in
646 * draft-ietf-avt-srtp-big-aes-03.txt. This policy uses AES-256 863 * 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 864 * Counter Mode encryption and HMAC-SHA1 authentication, with an 80 bit
648 * authentication tag. 865 * authentication tag.
649 * 866 *
650 * This function is a convenience that helps to avoid dealing directly 867 * This function is a convenience that helps to avoid dealing directly
651 * with the policy data structure. You are encouraged to initialize 868 * with the policy data structure. You are encouraged to initialize
652 * policy elements with this function call. Doing so may allow your 869 * policy elements with this function call. Doing so may allow your
653 * code to be forward compatible with later versions of libSRTP that 870 * code to be forward compatible with later versions of libSRTP that
654 * include more elements in the crypto_policy_t datatype. 871 * include more elements in the srtp_crypto_policy_t datatype.
655 * 872 *
656 * @return void. 873 * @return void.
657 * 874 *
658 */ 875 */
659 876
660 void crypto_policy_set_aes_cm_256_hmac_sha1_80(crypto_policy_t *p); 877 void srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80(srtp_crypto_policy_t *p);
661 878
662 879
663 /** 880 /**
664 * @brief crypto_policy_set_aes_cm_256_hmac_sha1_32() sets a crypto 881 * @brief srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32() sets a crypto
665 * policy structure to a short-authentication tag policy using AES-256 882 * policy structure to a short-authentication tag policy using AES-256
666 * encryption. 883 * encryption.
667 * 884 *
668 * @param p is a pointer to the policy structure to be set 885 * @param p is a pointer to the policy structure to be set
669 * 886 *
670 * The function call crypto_policy_set_aes_cm_256_hmac_sha1_32(&p) 887 * The function call srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32(&p)
671 * sets the crypto_policy_t at location p to use policy 888 * sets the srtp_crypto_policy_t at location p to use policy
672 * AES_CM_256_HMAC_SHA1_32 as defined in 889 * AES_CM_256_HMAC_SHA1_32 as defined in
673 * draft-ietf-avt-srtp-big-aes-03.txt. This policy uses AES-256 890 * draft-ietf-avt-srtp-big-aes-03.txt. This policy uses AES-256
674 * Counter Mode encryption and HMAC-SHA1 authentication, with an 891 * Counter Mode encryption and HMAC-SHA1 authentication, with an
675 * authentication tag that is only 32 bits long. This length is 892 * authentication tag that is only 32 bits long. This length is
676 * considered adequate only for protecting audio and video media that 893 * considered adequate only for protecting audio and video media that
677 * use a stateless playback function. See Section 7.5 of RFC 3711 894 * use a stateless playback function. See Section 7.5 of RFC 3711
678 * (http://www.ietf.org/rfc/rfc3711.txt). 895 * (http://www.ietf.org/rfc/rfc3711.txt).
679 * 896 *
680 * This function is a convenience that helps to avoid dealing directly 897 * This function is a convenience that helps to avoid dealing directly
681 * with the policy data structure. You are encouraged to initialize 898 * with the policy data structure. You are encouraged to initialize
682 * policy elements with this function call. Doing so may allow your 899 * policy elements with this function call. Doing so may allow your
683 * code to be forward compatible with later versions of libSRTP that 900 * code to be forward compatible with later versions of libSRTP that
684 * include more elements in the crypto_policy_t datatype. 901 * include more elements in the srtp_crypto_policy_t datatype.
685 * 902 *
686 * @warning This crypto policy is intended for use in SRTP, but not in 903 * @warning This crypto policy is intended for use in SRTP, but not in
687 * SRTCP. It is recommended that a policy that uses longer 904 * SRTCP. It is recommended that a policy that uses longer
688 * authentication tags be used for SRTCP. See Section 7.5 of RFC 3711 905 * authentication tags be used for SRTCP. See Section 7.5 of RFC 3711
689 * (http://www.ietf.org/rfc/rfc3711.txt). 906 * (http://www.ietf.org/rfc/rfc3711.txt).
690 * 907 *
691 * @return void. 908 * @return void.
692 * 909 *
693 */ 910 */
694 911
695 void 912 void srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32(srtp_crypto_policy_t *p);
696 crypto_policy_set_aes_cm_256_hmac_sha1_32(crypto_policy_t *p);
697 913
698 /** 914 /**
699 * @brief crypto_policy_set_aes_cm_256_null_auth() sets a crypto 915 * @brief srtp_crypto_policy_set_aes_cm_256_null_auth() sets a crypto
700 * policy structure to an encryption-only policy 916 * policy structure to an encryption-only policy
701 * 917 *
702 * @param p is a pointer to the policy structure to be set 918 * @param p is a pointer to the policy structure to be set
703 * 919 *
704 * The function call crypto_policy_set_aes_cm_256_null_auth(&p) sets 920 * The function call srtp_crypto_policy_set_aes_cm_256_null_auth(&p) sets
705 * the crypto_policy_t at location p to use the SRTP default cipher 921 * the srtp_crypto_policy_t at location p to use the SRTP default cipher
706 * (AES-256 Counter Mode), but to use no authentication method. This 922 * (AES-256 Counter Mode), but to use no authentication method. This
707 * policy is NOT RECOMMENDED unless it is unavoidable; see Section 7.5 923 * policy is NOT RECOMMENDED unless it is unavoidable; see Section 7.5
708 * of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt). 924 * of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
709 * 925 *
710 * This function is a convenience that helps to avoid dealing directly 926 * This function is a convenience that helps to avoid dealing directly
711 * with the policy data structure. You are encouraged to initialize 927 * with the policy data structure. You are encouraged to initialize
712 * policy elements with this function call. Doing so may allow your 928 * policy elements with this function call. Doing so may allow your
713 * code to be forward compatible with later versions of libSRTP that 929 * code to be forward compatible with later versions of libSRTP that
714 * include more elements in the crypto_policy_t datatype. 930 * include more elements in the srtp_crypto_policy_t datatype.
715 * 931 *
716 * @warning This policy is NOT RECOMMENDED for SRTP unless it is 932 * @warning This policy is NOT RECOMMENDED for SRTP unless it is
717 * unavoidable, and it is NOT RECOMMENDED at all for SRTCP; see 933 * 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). 934 * Section 7.5 of RFC 3711 (http://www.ietf.org/rfc/rfc3711.txt).
719 * 935 *
720 * @return void. 936 * @return void.
721 * 937 *
722 */ 938 */
723 void 939 void srtp_crypto_policy_set_aes_cm_256_null_auth(srtp_crypto_policy_t *p);
724 crypto_policy_set_aes_cm_256_null_auth(crypto_policy_t *p);
725 940
726 /** 941 /**
727 * @brief crypto_policy_set_aes_gcm_128_8_auth() sets a crypto 942 * @brief srtp_crypto_policy_set_aes_gcm_128_8_auth() sets a crypto
728 * policy structure to an AEAD encryption policy. 943 * policy structure to an AEAD encryption policy.
729 * 944 *
730 * @param p is a pointer to the policy structure to be set 945 * @param p is a pointer to the policy structure to be set
731 * 946 *
732 * The function call crypto_policy_set_aes_gcm_128_8_auth(&p) sets 947 * The function call srtp_crypto_policy_set_aes_gcm_128_8_auth(&p) sets
733 * the crypto_policy_t at location p to use the SRTP default cipher 948 * the srtp_crypto_policy_t at location p to use the SRTP default cipher
734 * (AES-128 Galois Counter Mode) with 8 octet auth tag. This 949 * (AES-128 Galois Counter Mode) with 8 octet auth tag. This
735 * policy applies confidentiality and authentication to both the 950 * policy applies confidentiality and authentication to both the
736 * RTP and RTCP packets. 951 * RTP and RTCP packets.
737 * 952 *
738 * This function is a convenience that helps to avoid dealing directly 953 * This function is a convenience that helps to avoid dealing directly
739 * with the policy data structure. You are encouraged to initialize 954 * with the policy data structure. You are encouraged to initialize
740 * policy elements with this function call. Doing so may allow your 955 * policy elements with this function call. Doing so may allow your
741 * code to be forward compatible with later versions of libSRTP that 956 * code to be forward compatible with later versions of libSRTP that
742 * include more elements in the crypto_policy_t datatype. 957 * include more elements in the srtp_crypto_policy_t datatype.
743 * 958 *
744 * @return void. 959 * @return void.
745 * 960 *
746 */ 961 */
747 void 962 void srtp_crypto_policy_set_aes_gcm_128_8_auth(srtp_crypto_policy_t *p);
748 crypto_policy_set_aes_gcm_128_8_auth(crypto_policy_t *p);
749 963
750 /** 964 /**
751 * @brief crypto_policy_set_aes_gcm_256_8_auth() sets a crypto 965 * @brief srtp_crypto_policy_set_aes_gcm_256_8_auth() sets a crypto
752 * policy structure to an AEAD encryption policy 966 * policy structure to an AEAD encryption policy
753 * 967 *
754 * @param p is a pointer to the policy structure to be set 968 * @param p is a pointer to the policy structure to be set
755 * 969 *
756 * The function call crypto_policy_set_aes_gcm_256_8_auth(&p) sets 970 * The function call srtp_crypto_policy_set_aes_gcm_256_8_auth(&p) sets
757 * the crypto_policy_t at location p to use the SRTP default cipher 971 * the srtp_crypto_policy_t at location p to use the SRTP default cipher
758 * (AES-256 Galois Counter Mode) with 8 octet auth tag. This 972 * (AES-256 Galois Counter Mode) with 8 octet auth tag. This
759 * policy applies confidentiality and authentication to both the 973 * policy applies confidentiality and authentication to both the
760 * RTP and RTCP packets. 974 * RTP and RTCP packets.
761 * 975 *
762 * This function is a convenience that helps to avoid dealing directly 976 * This function is a convenience that helps to avoid dealing directly
763 * with the policy data structure. You are encouraged to initialize 977 * with the policy data structure. You are encouraged to initialize
764 * policy elements with this function call. Doing so may allow your 978 * policy elements with this function call. Doing so may allow your
765 * code to be forward compatible with later versions of libSRTP that 979 * code to be forward compatible with later versions of libSRTP that
766 * include more elements in the crypto_policy_t datatype. 980 * include more elements in the srtp_crypto_policy_t datatype.
767 * 981 *
768 * @return void. 982 * @return void.
769 * 983 *
770 */ 984 */
771 void 985 void srtp_crypto_policy_set_aes_gcm_256_8_auth(srtp_crypto_policy_t *p);
772 crypto_policy_set_aes_gcm_256_8_auth(crypto_policy_t *p);
773 986
774 /** 987 /**
775 * @brief crypto_policy_set_aes_gcm_128_8_only_auth() sets a crypto 988 * @brief srtp_crypto_policy_set_aes_gcm_128_8_only_auth() sets a crypto
776 * policy structure to an AEAD authentication-only policy 989 * policy structure to an AEAD authentication-only policy
777 * 990 *
778 * @param p is a pointer to the policy structure to be set 991 * @param p is a pointer to the policy structure to be set
779 * 992 *
780 * The function call crypto_policy_set_aes_gcm_128_8_only_auth(&p) sets 993 * The function call srtp_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 994 * the srtp_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 995 * (AES-128 Galois Counter Mode) with 8 octet auth tag. This policy
783 * applies confidentiality and authentication to the RTP packets, 996 * applies confidentiality and authentication to the RTP packets,
784 * but only authentication to the RTCP packets. 997 * but only authentication to the RTCP packets.
785 * 998 *
786 * This function is a convenience that helps to avoid dealing directly 999 * This function is a convenience that helps to avoid dealing directly
787 * with the policy data structure. You are encouraged to initialize 1000 * with the policy data structure. You are encouraged to initialize
788 * policy elements with this function call. Doing so may allow your 1001 * policy elements with this function call. Doing so may allow your
789 * code to be forward compatible with later versions of libSRTP that 1002 * code to be forward compatible with later versions of libSRTP that
790 * include more elements in the crypto_policy_t datatype. 1003 * include more elements in the srtp_crypto_policy_t datatype.
791 * 1004 *
792 * @return void. 1005 * @return void.
793 * 1006 *
794 */ 1007 */
795 void 1008 void srtp_crypto_policy_set_aes_gcm_128_8_only_auth(srtp_crypto_policy_t *p);
796 crypto_policy_set_aes_gcm_128_8_only_auth(crypto_policy_t *p);
797 1009
798 /** 1010 /**
799 * @brief crypto_policy_set_aes_gcm_256_8_only_auth() sets a crypto 1011 * @brief srtp_crypto_policy_set_aes_gcm_256_8_only_auth() sets a crypto
800 * policy structure to an AEAD authentication-only policy 1012 * policy structure to an AEAD authentication-only policy
801 * 1013 *
802 * @param p is a pointer to the policy structure to be set 1014 * @param p is a pointer to the policy structure to be set
803 * 1015 *
804 * The function call crypto_policy_set_aes_gcm_256_8_only_auth(&p) sets 1016 * The function call srtp_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 1017 * the srtp_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 1018 * (AES-256 Galois Counter Mode) with 8 octet auth tag. This policy
807 * applies confidentiality and authentication to the RTP packets, 1019 * applies confidentiality and authentication to the RTP packets,
808 * but only authentication to the RTCP packets. 1020 * but only authentication to the RTCP packets.
809 * 1021 *
810 * This function is a convenience that helps to avoid dealing directly 1022 * This function is a convenience that helps to avoid dealing directly
811 * with the policy data structure. You are encouraged to initialize 1023 * with the policy data structure. You are encouraged to initialize
812 * policy elements with this function call. Doing so may allow your 1024 * policy elements with this function call. Doing so may allow your
813 * code to be forward compatible with later versions of libSRTP that 1025 * code to be forward compatible with later versions of libSRTP that
814 * include more elements in the crypto_policy_t datatype. 1026 * include more elements in the srtp_crypto_policy_t datatype.
815 * 1027 *
816 * @return void. 1028 * @return void.
817 * 1029 *
818 */ 1030 */
819 void 1031 void srtp_crypto_policy_set_aes_gcm_256_8_only_auth(srtp_crypto_policy_t *p);
820 crypto_policy_set_aes_gcm_256_8_only_auth(crypto_policy_t *p);
821 1032
822 /** 1033 /**
823 * @brief crypto_policy_set_aes_gcm_128_16_auth() sets a crypto 1034 * @brief srtp_crypto_policy_set_aes_gcm_128_16_auth() sets a crypto
824 * policy structure to an AEAD encryption policy. 1035 * policy structure to an AEAD encryption policy.
825 * 1036 *
826 * @param p is a pointer to the policy structure to be set 1037 * @param p is a pointer to the policy structure to be set
827 * 1038 *
828 * The function call crypto_policy_set_aes_gcm_128_16_auth(&p) sets 1039 * The function call srtp_crypto_policy_set_aes_gcm_128_16_auth(&p) sets
829 * the crypto_policy_t at location p to use the SRTP default cipher 1040 * the srtp_crypto_policy_t at location p to use the SRTP default cipher
830 * (AES-128 Galois Counter Mode) with 16 octet auth tag. This 1041 * (AES-128 Galois Counter Mode) with 16 octet auth tag. This
831 * policy applies confidentiality and authentication to both the 1042 * policy applies confidentiality and authentication to both the
832 * RTP and RTCP packets. 1043 * RTP and RTCP packets.
833 * 1044 *
834 * This function is a convenience that helps to avoid dealing directly 1045 * This function is a convenience that helps to avoid dealing directly
835 * with the policy data structure. You are encouraged to initialize 1046 * with the policy data structure. You are encouraged to initialize
836 * policy elements with this function call. Doing so may allow your 1047 * policy elements with this function call. Doing so may allow your
837 * code to be forward compatible with later versions of libSRTP that 1048 * code to be forward compatible with later versions of libSRTP that
838 * include more elements in the crypto_policy_t datatype. 1049 * include more elements in the srtp_crypto_policy_t datatype.
839 * 1050 *
840 * @return void. 1051 * @return void.
841 * 1052 *
842 */ 1053 */
843 void 1054 void srtp_crypto_policy_set_aes_gcm_128_16_auth(srtp_crypto_policy_t *p);
844 crypto_policy_set_aes_gcm_128_16_auth(crypto_policy_t *p);
845 1055
846 /** 1056 /**
847 * @brief crypto_policy_set_aes_gcm_256_16_auth() sets a crypto 1057 * @brief srtp_crypto_policy_set_aes_gcm_256_16_auth() sets a crypto
848 * policy structure to an AEAD encryption policy 1058 * policy structure to an AEAD encryption policy
849 * 1059 *
850 * @param p is a pointer to the policy structure to be set 1060 * @param p is a pointer to the policy structure to be set
851 * 1061 *
852 * The function call crypto_policy_set_aes_gcm_256_16_auth(&p) sets 1062 * The function call srtp_crypto_policy_set_aes_gcm_256_16_auth(&p) sets
853 * the crypto_policy_t at location p to use the SRTP default cipher 1063 * the srtp_crypto_policy_t at location p to use the SRTP default cipher
854 * (AES-256 Galois Counter Mode) with 16 octet auth tag. This 1064 * (AES-256 Galois Counter Mode) with 16 octet auth tag. This
855 * policy applies confidentiality and authentication to both the 1065 * policy applies confidentiality and authentication to both the
856 * RTP and RTCP packets. 1066 * RTP and RTCP packets.
857 * 1067 *
858 * This function is a convenience that helps to avoid dealing directly 1068 * This function is a convenience that helps to avoid dealing directly
859 * with the policy data structure. You are encouraged to initialize 1069 * with the policy data structure. You are encouraged to initialize
860 * policy elements with this function call. Doing so may allow your 1070 * policy elements with this function call. Doing so may allow your
861 * code to be forward compatible with later versions of libSRTP that 1071 * code to be forward compatible with later versions of libSRTP that
862 * include more elements in the crypto_policy_t datatype. 1072 * include more elements in the srtp_crypto_policy_t datatype.
863 * 1073 *
864 * @return void. 1074 * @return void.
865 * 1075 *
866 */ 1076 */
867 void 1077 void srtp_crypto_policy_set_aes_gcm_256_16_auth(srtp_crypto_policy_t *p);
868 crypto_policy_set_aes_gcm_256_16_auth(crypto_policy_t *p);
869 1078
870 1079
871 /** 1080 /**
872 * @brief srtp_dealloc() deallocates storage for an SRTP session 1081 * @brief srtp_dealloc() deallocates storage for an SRTP session
873 * context. 1082 * context.
874 * 1083 *
875 * The function call srtp_dealloc(s) deallocates storage for the 1084 * The function call srtp_dealloc(s) deallocates storage for the
876 * SRTP session context s. This function should be called no more 1085 * SRTP session context s. This function should be called no more
877 * than one time for each of the contexts allocated by the function 1086 * than one time for each of the contexts allocated by the function
878 * srtp_create(). 1087 * srtp_create().
879 * 1088 *
880 * @param s is the srtp_t for the session to be deallocated. 1089 * @param s is the srtp_t for the session to be deallocated.
881 * 1090 *
882 * @return 1091 * @return
883 * - err_status_ok if there no problems. 1092 * - srtp_err_status_ok if there no problems.
884 * - err_status_dealloc_fail a memory deallocation failure occured. 1093 * - srtp_err_status_dealloc_fail a memory deallocation failure occured.
885 */ 1094 */
886 1095
887 err_status_t 1096 srtp_err_status_t srtp_dealloc(srtp_t s);
888 srtp_dealloc(srtp_t s);
889 1097
890 1098
891 /* 1099 /*
892 * @brief identifies a particular SRTP profile 1100 * @brief identifies a particular SRTP profile
893 * 1101 *
894 * An srtp_profile_t enumeration is used to identify a particular SRTP 1102 * An srtp_profile_t enumeration is used to identify a particular SRTP
895 * profile (that is, a set of algorithms and parameters). These 1103 * profile (that is, a set of algorithms and parameters). These
896 * profiles are defined in the DTLS-SRTP draft. 1104 * profiles are defined in the DTLS-SRTP draft.
897 */ 1105 */
898 1106
899 typedef enum { 1107 typedef enum {
900 srtp_profile_reserved = 0, 1108 srtp_profile_reserved = 0,
901 srtp_profile_aes128_cm_sha1_80 = 1, 1109 srtp_profile_aes128_cm_sha1_80 = 1,
902 srtp_profile_aes128_cm_sha1_32 = 2, 1110 srtp_profile_aes128_cm_sha1_32 = 2,
903 srtp_profile_aes256_cm_sha1_80 = 3, 1111 srtp_profile_aes256_cm_sha1_80 = 3,
904 srtp_profile_aes256_cm_sha1_32 = 4, 1112 srtp_profile_aes256_cm_sha1_32 = 4,
905 srtp_profile_null_sha1_80 = 5, 1113 srtp_profile_null_sha1_80 = 5,
906 srtp_profile_null_sha1_32 = 6, 1114 srtp_profile_null_sha1_32 = 6,
907 } srtp_profile_t; 1115 } srtp_profile_t;
908 1116
909 1117
910 /** 1118 /**
911 * @brief crypto_policy_set_from_profile_for_rtp() sets a crypto policy 1119 * @brief srtp_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 1120 * structure to the appropriate value for RTP based on an srtp_profile_t
913 * 1121 *
914 * @param p is a pointer to the policy structure to be set 1122 * @param p is a pointer to the policy structure to be set
915 * 1123 *
916 * The function call crypto_policy_set_rtp_default(&policy, profile) 1124 * The function call srtp_crypto_policy_set_rtp_default(&policy, profile)
917 * sets the crypto_policy_t at location policy to the policy for RTP 1125 * sets the srtp_crypto_policy_t at location policy to the policy for RTP
918 * protection, as defined by the srtp_profile_t profile. 1126 * protection, as defined by the srtp_profile_t profile.
919 * 1127 *
920 * This function is a convenience that helps to avoid dealing directly 1128 * This function is a convenience that helps to avoid dealing directly
921 * with the policy data structure. You are encouraged to initialize 1129 * with the policy data structure. You are encouraged to initialize
922 * policy elements with this function call. Doing so may allow your 1130 * policy elements with this function call. Doing so may allow your
923 * code to be forward compatible with later versions of libSRTP that 1131 * code to be forward compatible with later versions of libSRTP that
924 * include more elements in the crypto_policy_t datatype. 1132 * include more elements in the srtp_crypto_policy_t datatype.
925 * 1133 *
926 * @return values 1134 * @return values
927 * - err_status_ok no problems were encountered 1135 * - srtp_err_status_ok no problems were encountered
928 * - err_status_bad_param the profile is not supported 1136 * - srtp_err_status_bad_param the profile is not supported
929 * 1137 *
930 */ 1138 */
931 err_status_t 1139 srtp_err_status_t srtp_crypto_policy_set_from_profile_for_rtp(srtp_crypto_policy _t *policy, srtp_profile_t profile);
932 crypto_policy_set_from_profile_for_rtp(crypto_policy_t *policy,
933 » » » » srtp_profile_t profile);
934 1140
935 1141
936 1142
937 1143
938 /** 1144 /**
939 * @brief crypto_policy_set_from_profile_for_rtcp() sets a crypto policy 1145 * @brief srtp_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 1146 * structure to the appropriate value for RTCP based on an srtp_profile_t
941 * 1147 *
942 * @param p is a pointer to the policy structure to be set 1148 * @param p is a pointer to the policy structure to be set
943 * 1149 *
944 * The function call crypto_policy_set_rtcp_default(&policy, profile) 1150 * The function call srtp_crypto_policy_set_rtcp_default(&policy, profile)
945 * sets the crypto_policy_t at location policy to the policy for RTCP 1151 * sets the srtp_crypto_policy_t at location policy to the policy for RTCP
946 * protection, as defined by the srtp_profile_t profile. 1152 * protection, as defined by the srtp_profile_t profile.
947 * 1153 *
948 * This function is a convenience that helps to avoid dealing directly 1154 * This function is a convenience that helps to avoid dealing directly
949 * with the policy data structure. You are encouraged to initialize 1155 * with the policy data structure. You are encouraged to initialize
950 * policy elements with this function call. Doing so may allow your 1156 * policy elements with this function call. Doing so may allow your
951 * code to be forward compatible with later versions of libSRTP that 1157 * code to be forward compatible with later versions of libSRTP that
952 * include more elements in the crypto_policy_t datatype. 1158 * include more elements in the srtp_crypto_policy_t datatype.
953 * 1159 *
954 * @return values 1160 * @return values
955 * - err_status_ok no problems were encountered 1161 * - srtp_err_status_ok no problems were encountered
956 * - err_status_bad_param the profile is not supported 1162 * - srtp_err_status_bad_param the profile is not supported
957 * 1163 *
958 */ 1164 */
959 err_status_t 1165 srtp_err_status_t srtp_crypto_policy_set_from_profile_for_rtcp(srtp_crypto_polic y_t *policy, srtp_profile_t profile);
960 crypto_policy_set_from_profile_for_rtcp(crypto_policy_t *policy,
961 » » » » srtp_profile_t profile);
962 1166
963 /** 1167 /**
964 * @brief returns the master key length for a given SRTP profile 1168 * @brief returns the master key length for a given SRTP profile
965 */ 1169 */
966 unsigned int 1170 unsigned int
967 srtp_profile_get_master_key_length(srtp_profile_t profile); 1171 srtp_profile_get_master_key_length(srtp_profile_t profile);
968 1172
969 1173
970 /** 1174 /**
971 * @brief returns the master salt length for a given SRTP profile 1175 * @brief returns the master salt length for a given SRTP profile
972 */ 1176 */
973 unsigned int 1177 unsigned int
974 srtp_profile_get_master_salt_length(srtp_profile_t profile); 1178 srtp_profile_get_master_salt_length(srtp_profile_t profile);
975 1179
976 /** 1180 /**
977 * @brief appends the salt to the key 1181 * @brief appends the salt to the key
978 * 1182 *
979 * The function call append_salt_to_key(k, klen, s, slen) 1183 * The function call srtp_append_salt_to_key(k, klen, s, slen)
980 * copies the string s to the location at klen bytes following 1184 * copies the string s to the location at klen bytes following
981 * the location k. 1185 * the location k.
982 * 1186 *
983 * @warning There must be at least bytes_in_salt + bytes_in_key bytes 1187 * @warning There must be at least bytes_in_salt + bytes_in_key bytes
984 * available at the location pointed to by key. 1188 * available at the location pointed to by key.
985 * 1189 *
986 */ 1190 */
987 1191
988 void 1192 void
989 append_salt_to_key(unsigned char *key, unsigned int bytes_in_key, 1193 srtp_append_salt_to_key(unsigned char *key, unsigned int bytes_in_key,
990 » » unsigned char *salt, unsigned int bytes_in_salt); 1194 » » unsigned char *salt, unsigned int bytes_in_salt);
991 1195
992 1196
993 1197
994 /** 1198 /**
995 * @} 1199 * @}
996 */ 1200 */
997 1201
998 1202
999 1203
1000 /** 1204 /**
(...skipping 14 matching lines...) Expand all
1015 * 1219 *
1016 * @{ 1220 * @{
1017 */ 1221 */
1018 1222
1019 /** 1223 /**
1020 * @brief srtp_protect_rtcp() is the Secure RTCP sender-side packet 1224 * @brief srtp_protect_rtcp() is the Secure RTCP sender-side packet
1021 * processing function. 1225 * processing function.
1022 * 1226 *
1023 * The function call srtp_protect_rtcp(ctx, rtp_hdr, len_ptr) applies 1227 * The function call srtp_protect_rtcp(ctx, rtp_hdr, len_ptr) applies
1024 * SRTCP protection to the RTCP packet rtcp_hdr (which has length 1228 * 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 1229 * *len_ptr) using the SRTP session context ctx. If srtp_err_status_ok is
1026 * returned, then rtp_hdr points to the resulting SRTCP packet and 1230 * returned, then rtp_hdr points to the resulting SRTCP packet and
1027 * *len_ptr is the number of octets in that packet; otherwise, no 1231 * *len_ptr is the number of octets in that packet; otherwise, no
1028 * assumptions should be made about the value of either data elements. 1232 * assumptions should be made about the value of either data elements.
1029 * 1233 *
1030 * @warning This function assumes that it can write the authentication 1234 * @warning This function assumes that it can write the authentication
1031 * tag into the location in memory immediately following the RTCP 1235 * tag into the location in memory immediately following the RTCP
1032 * packet, and assumes that the RTCP packet is aligned on a 32-bit 1236 * packet, and assumes that the RTCP packet is aligned on a 32-bit
1033 * boundary. 1237 * boundary.
1034 * 1238 *
1035 * @warning This function assumes that it can write SRTP_MAX_TRAILER_LEN+4 1239 * @warning This function assumes that it can write SRTP_MAX_TRAILER_LEN+4
1036 * into the location in memory immediately following the RTCP packet. 1240 * into the location in memory immediately following the RTCP packet.
1037 * Callers MUST ensure that this much writable memory is available in 1241 * Callers MUST ensure that this much writable memory is available in
1038 * the buffer that holds the RTCP packet. 1242 * the buffer that holds the RTCP packet.
1039 * 1243 *
1040 * @param ctx is the SRTP context to use in processing the packet. 1244 * @param ctx is the SRTP context to use in processing the packet.
1041 * 1245 *
1042 * @param rtcp_hdr is a pointer to the RTCP packet (before the call); after 1246 * @param rtcp_hdr is a pointer to the RTCP packet (before the call); after
1043 * the function returns, it points to the srtp packet. 1247 * the function returns, it points to the srtp packet.
1044 * 1248 *
1045 * @param pkt_octet_len is a pointer to the length in octets of the 1249 * @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, 1250 * complete RTCP packet (header and body) before the function call,
1047 * and of the complete SRTCP packet after the call, if err_status_ok 1251 * and of the complete SRTCP packet after the call, if srtp_err_status_ok
1048 * was returned. Otherwise, the value of the data to which it points 1252 * was returned. Otherwise, the value of the data to which it points
1049 * is undefined. 1253 * is undefined.
1050 * 1254 *
1051 * @return 1255 * @return
1052 * - err_status_ok if there were no problems. 1256 * - srtp_err_status_ok if there were no problems.
1053 * - [other] if there was a failure in 1257 * - [other] if there was a failure in
1054 * the cryptographic mechanisms. 1258 * the cryptographic mechanisms.
1055 */ 1259 */
1056 1260
1057 1261
1058 err_status_t 1262 srtp_err_status_t srtp_protect_rtcp(srtp_t ctx, void *rtcp_hdr, int *pkt_octet_l en);
1059 srtp_protect_rtcp(srtp_t ctx, void *rtcp_hdr, int *pkt_octet_len);
1060 1263
1061 /** 1264 /**
1062 * @brief srtp_unprotect_rtcp() is the Secure RTCP receiver-side packet 1265 * @brief srtp_unprotect_rtcp() is the Secure RTCP receiver-side packet
1063 * processing function. 1266 * processing function.
1064 * 1267 *
1065 * The function call srtp_unprotect_rtcp(ctx, srtp_hdr, len_ptr) 1268 * The function call srtp_unprotect_rtcp(ctx, srtp_hdr, len_ptr)
1066 * verifies the Secure RTCP protection of the SRTCP packet pointed to 1269 * verifies the Secure RTCP protection of the SRTCP packet pointed to
1067 * by srtcp_hdr (which has length *len_ptr), using the SRTP session 1270 * 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 1271 * context ctx. If srtp_err_status_ok is returned, then srtcp_hdr points
1069 * to the resulting RTCP packet and *len_ptr is the number of octets 1272 * 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 1273 * in that packet; otherwise, no assumptions should be made about the
1071 * value of either data elements. 1274 * value of either data elements.
1072 * 1275 *
1073 * @warning This function assumes that the SRTCP packet is aligned on a 1276 * @warning This function assumes that the SRTCP packet is aligned on a
1074 * 32-bit boundary. 1277 * 32-bit boundary.
1075 * 1278 *
1076 * @param ctx is a pointer to the srtp_t which applies to the 1279 * @param ctx is a pointer to the srtp_t which applies to the
1077 * particular packet. 1280 * particular packet.
1078 * 1281 *
1079 * @param srtcp_hdr is a pointer to the header of the SRTCP packet 1282 * @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 1283 * (before the call). After the function returns, it points to the
1081 * rtp packet if err_status_ok was returned; otherwise, the value of 1284 * rtp packet if srtp_err_status_ok was returned; otherwise, the value of
1082 * the data to which it points is undefined. 1285 * the data to which it points is undefined.
1083 * 1286 *
1084 * @param pkt_octet_len is a pointer to the length in octets of the 1287 * @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, 1288 * 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 1289 * and of the complete rtp packet after the call, if srtp_err_status_ok was
1087 * returned. Otherwise, the value of the data to which it points is 1290 * returned. Otherwise, the value of the data to which it points is
1088 * undefined. 1291 * undefined.
1089 * 1292 *
1090 * @return 1293 * @return
1091 * - err_status_ok if the RTCP packet is valid. 1294 * - srtp_err_status_ok if the RTCP packet is valid.
1092 * - err_status_auth_fail if the SRTCP packet failed the message 1295 * - srtp_err_status_auth_fail if the SRTCP packet failed the message
1093 * authentication check. 1296 * authentication check.
1094 * - err_status_replay_fail if the SRTCP packet is a replay (e.g. has 1297 * - srtp_err_status_replay_fail if the SRTCP packet is a replay (e.g. has
1095 * already been processed and accepted). 1298 * already been processed and accepted).
1096 * - [other] if there has been an error in the cryptographic mechanisms. 1299 * - [other] if there has been an error in the cryptographic mechanisms.
1097 * 1300 *
1098 */ 1301 */
1099 1302
1100 err_status_t 1303 srtp_err_status_t srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octe t_len);
1101 srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len);
1102 1304
1103 /** 1305 /**
1104 * @} 1306 * @}
1105 */ 1307 */
1106 1308
1107 1309
1108 /** 1310 /**
1109 * @defgroup User data associated to a SRTP session. 1311 * @defgroup User data associated to a SRTP session.
1110 * @ingroup SRTP 1312 * @ingroup SRTP
1111 * 1313 *
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 * @brief srtp_event_t defines events that need to be handled 1385 * @brief srtp_event_t defines events that need to be handled
1184 * 1386 *
1185 * The enum srtp_event_t defines events that need to be handled 1387 * The enum srtp_event_t defines events that need to be handled
1186 * outside the `data plane', such as SSRC collisions and 1388 * outside the `data plane', such as SSRC collisions and
1187 * key expirations. 1389 * key expirations.
1188 * 1390 *
1189 * When a key expires or the maximum number of packets has been 1391 * 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 1392 * reached, an SRTP stream will enter an `expired' state in which no
1191 * more packets can be protected or unprotected. When this happens, 1393 * more packets can be protected or unprotected. When this happens,
1192 * it is likely that you will want to either deallocate the stream 1394 * it is likely that you will want to either deallocate the stream
1193 * (using srtp_stream_dealloc()), and possibly allocate a new one. 1395 * (using srtp_remove_stream()), and possibly allocate a new one.
1194 * 1396 *
1195 * When an SRTP stream expires, the other streams in the same session 1397 * 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 1398 * are unaffected, unless key sharing is used by that stream. In the
1197 * latter case, all of the streams in the session will expire. 1399 * latter case, all of the streams in the session will expire.
1198 */ 1400 */
1199 1401
1200 typedef enum { 1402 typedef enum {
1201 event_ssrc_collision, /**< 1403 event_ssrc_collision, /**<
1202 * An SSRC collision occured. 1404 * An SSRC collision occured.
1203 */ 1405 */
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 * The function call srtp_install_event_handler(func) sets the event 1447 * The function call srtp_install_event_handler(func) sets the event
1246 * handler function to the value func. The value NULL is acceptable 1448 * handler function to the value func. The value NULL is acceptable
1247 * as an argument; in this case, events will be ignored rather than 1449 * as an argument; in this case, events will be ignored rather than
1248 * handled. 1450 * handled.
1249 * 1451 *
1250 * @param func is a pointer to a fuction that takes an srtp_event_data_t 1452 * @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 1453 * pointer as an argument and returns void. This function
1252 * will be used by libSRTP to handle events. 1454 * will be used by libSRTP to handle events.
1253 */ 1455 */
1254 1456
1255 err_status_t 1457 srtp_err_status_t srtp_install_event_handler(srtp_event_handler_func_t func);
1256 srtp_install_event_handler(srtp_event_handler_func_t func);
1257 1458
1258 /** 1459 /**
1259 * @brief Returns the version string of the library. 1460 * @brief Returns the version string of the library.
1260 * 1461 *
1261 */ 1462 */
1262 const char *srtp_get_version_string(void); 1463 const char *srtp_get_version_string(void);
1263 1464
1264 /** 1465 /**
1265 * @brief Returns the numeric representation of the library version. 1466 * @brief Returns the numeric representation of the library version.
1266 * 1467 *
1267 */ 1468 */
1268 unsigned int srtp_get_version(void); 1469 unsigned int srtp_get_version(void);
1269 1470
1270 /** 1471 /**
1472 * @brief srtp_set_debug_module(mod_name, v)
1473 *
1474 * sets dynamic debugging to the value v (0 for off, 1 for on) for the
1475 * debug module with the name mod_name
1476 *
1477 * returns err_status_ok on success, err_status_fail otherwise
1478 */
1479 srtp_err_status_t srtp_set_debug_module(char *mod_name, int v);
1480
1481 /**
1482 * @brief srtp_list_debug_modules() outputs a list of debugging modules
1483 *
1484 */
1485 srtp_err_status_t srtp_list_debug_modules(void);
1486
1487
1488 /**
1271 * @} 1489 * @}
1272 */ 1490 */
1273 /* in host order, so outside the #if */ 1491 /* in host order, so outside the #if */
1274 #define SRTCP_E_BIT 0x80000000 1492 #define SRTCP_E_BIT 0x80000000
1275 /* for byte-access */ 1493 /* for byte-access */
1276 #define SRTCP_E_BYTE_BIT 0x80 1494 #define SRTCP_E_BYTE_BIT 0x80
1277 #define SRTCP_INDEX_MASK 0x7fffffff 1495 #define SRTCP_INDEX_MASK 0x7fffffff
1278 1496
1279 #ifdef __cplusplus 1497 #ifdef __cplusplus
1280 } 1498 }
1281 #endif 1499 #endif
1282 1500
1283 #endif /* SRTP_H */ 1501 #endif /* SRTP_H */
OLDNEW
« no previous file with comments | « include/rtp_priv.h ('k') | include/srtp_priv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698