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

Side by Side Diff: test/rtpw.c

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 | « test/rtp.c ('k') | test/rtpw_test.sh » ('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 * rtpw.c 2 * rtpw.c
3 * 3 *
4 * rtp word sender/receiver 4 * rtp word sender/receiver
5 * 5 *
6 * David A. McGrew 6 * David A. McGrew
7 * Cisco Systems, Inc. 7 * Cisco Systems, Inc.
8 * 8 *
9 * This app is a simple RTP application intended only for testing 9 * This app is a simple RTP application intended only for testing
10 * libsrtp. It reads one word at a time from /usr/dict/words (or 10 * libsrtp. It reads one word at a time from /usr/dict/words (or
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 48 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
49 * OF THE POSSIBILITY OF SUCH DAMAGE. 49 * OF THE POSSIBILITY OF SUCH DAMAGE.
50 * 50 *
51 */ 51 */
52 52
53 53
54 #ifdef HAVE_CONFIG_H 54 #ifdef HAVE_CONFIG_H
55 #include <config.h> 55 #include <config.h>
56 #endif 56 #endif
57 57
58 #include "datatypes.h"
59 #include "getopt_s.h" /* for local getopt() */ 58 #include "getopt_s.h" /* for local getopt() */
60 59
61 #include <stdio.h> /* for printf, fprintf */ 60 #include <stdio.h> /* for printf, fprintf */
62 #include <stdlib.h> /* for atoi() */ 61 #include <stdlib.h> /* for atoi() */
63 #include <errno.h> 62 #include <errno.h>
64 #include <signal.h> /* for signal() */ 63 #include <signal.h> /* for signal() */
65 64
66 #include <string.h> /* for strncpy() */ 65 #include <string.h> /* for strncpy() */
67 #include <time.h> /* for usleep() */ 66 #include <time.h> /* for usleep() */
68 67
(...skipping 12 matching lines...) Expand all
81 # include <winsock2.h> 80 # include <winsock2.h>
82 # include <ws2tcpip.h> 81 # include <ws2tcpip.h>
83 # define RTPW_USE_WINSOCK2 1 82 # define RTPW_USE_WINSOCK2 1
84 #endif 83 #endif
85 #ifdef HAVE_ARPA_INET_H 84 #ifdef HAVE_ARPA_INET_H
86 # include <arpa/inet.h> 85 # include <arpa/inet.h>
87 #endif 86 #endif
88 87
89 #include "srtp.h" 88 #include "srtp.h"
90 #include "rtp.h" 89 #include "rtp.h"
91 #include "crypto_kernel.h" 90 #include "util.h"
92 91
93 #ifdef RTPW_USE_WINSOCK2 92 #ifdef RTPW_USE_WINSOCK2
94 # define DICT_FILE "words.txt" 93 # define DICT_FILE "words.txt"
95 #else 94 #else
96 # define DICT_FILE "/usr/share/dict/words" 95 # define DICT_FILE "/usr/share/dict/words"
97 #endif 96 #endif
98 #define USEC_RATE (5e5) 97 #define USEC_RATE (5e5)
99 #define MAX_WORD_LEN 128 98 #define MAX_WORD_LEN 128
100 #define ADDR_IS_MULTICAST(a) IN_MULTICAST(htonl(a)) 99 #define ADDR_IS_MULTICAST(a) IN_MULTICAST(htonl(a))
101 #define MAX_KEY_LEN 96 100 #define MAX_KEY_LEN 96
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 FILE *dict; 149 FILE *dict;
151 char word[MAX_WORD_LEN]; 150 char word[MAX_WORD_LEN];
152 int sock, ret; 151 int sock, ret;
153 struct in_addr rcvr_addr; 152 struct in_addr rcvr_addr;
154 struct sockaddr_in name; 153 struct sockaddr_in name;
155 struct ip_mreq mreq; 154 struct ip_mreq mreq;
156 #if BEW 155 #if BEW
157 struct sockaddr_in local; 156 struct sockaddr_in local;
158 #endif 157 #endif
159 program_type prog_type = unknown; 158 program_type prog_type = unknown;
160 sec_serv_t sec_servs = sec_serv_none; 159 srtp_sec_serv_t sec_servs = sec_serv_none;
161 unsigned char ttl = 5; 160 unsigned char ttl = 5;
162 int c; 161 int c;
163 int key_size = 128; 162 int key_size = 128;
164 int tag_size = 8; 163 int tag_size = 8;
165 int gcm_on = 0; 164 int gcm_on = 0;
166 char *input_key = NULL; 165 char *input_key = NULL;
167 int b64_input = 0; 166 int b64_input = 0;
168 char *address = NULL; 167 char *address = NULL;
169 char key[MAX_KEY_LEN]; 168 char key[MAX_KEY_LEN];
170 unsigned short port = 0; 169 unsigned short port = 0;
171 rtp_sender_t snd; 170 rtp_sender_t snd;
172 srtp_policy_t policy; 171 srtp_policy_t policy;
173 err_status_t status; 172 srtp_err_status_t status;
174 int len; 173 int len;
175 int expected_len; 174 int expected_len;
176 int do_list_mods = 0; 175 int do_list_mods = 0;
177 uint32_t ssrc = 0xdeadbeef; /* ssrc value hardcoded for now */ 176 uint32_t ssrc = 0xdeadbeef; /* ssrc value hardcoded for now */
178 #ifdef RTPW_USE_WINSOCK2 177 #ifdef RTPW_USE_WINSOCK2
179 WORD wVersionRequested = MAKEWORD(2, 0); 178 WORD wVersionRequested = MAKEWORD(2, 0);
180 WSADATA wsaData; 179 WSADATA wsaData;
181 180
182 ret = WSAStartup(wVersionRequested, &wsaData); 181 ret = WSAStartup(wVersionRequested, &wsaData);
183 if (ret != 0) { 182 if (ret != 0) {
184 fprintf(stderr, "error: WSAStartup() failed: %d\n", ret); 183 fprintf(stderr, "error: WSAStartup() failed: %d\n", ret);
185 exit(1); 184 exit(1);
186 } 185 }
187 #endif 186 #endif
188 187
188 memset(&policy, 0x0, sizeof(srtp_policy_t));
189
189 printf("Using %s [0x%x]\n", srtp_get_version_string(), srtp_get_version()); 190 printf("Using %s [0x%x]\n", srtp_get_version_string(), srtp_get_version());
190 191
191 if (setup_signal_handler(argv[0]) != 0) { 192 if (setup_signal_handler(argv[0]) != 0) {
192 exit(1); 193 exit(1);
193 } 194 }
194 195
195 /* initialize srtp library */ 196 /* initialize srtp library */
196 status = srtp_init(); 197 status = srtp_init();
197 if (status) { 198 if (status) {
198 printf("error: srtp initialization failed with error code %d\n", status); 199 printf("error: srtp initialization failed with error code %d\n", status);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 gcm_on = 1; 235 gcm_on = 1;
235 sec_servs |= sec_serv_auth; 236 sec_servs |= sec_serv_auth;
236 break; 237 break;
237 case 'r': 238 case 'r':
238 prog_type = receiver; 239 prog_type = receiver;
239 break; 240 break;
240 case 's': 241 case 's':
241 prog_type = sender; 242 prog_type = sender;
242 break; 243 break;
243 case 'd': 244 case 'd':
244 status = crypto_kernel_set_debug_module(optarg_s, 1); 245 status = srtp_set_debug_module(optarg_s, 1);
245 if (status) { 246 if (status) {
246 printf("error: set debug module (%s) failed\n", optarg_s); 247 printf("error: set debug module (%s) failed\n", optarg_s);
247 exit(1); 248 exit(1);
248 } 249 }
249 break; 250 break;
250 case 'l': 251 case 'l':
251 do_list_mods = 1; 252 do_list_mods = 1;
252 break; 253 break;
253 default: 254 default:
254 usage(argv[0]); 255 usage(argv[0]);
255 } 256 }
256 } 257 }
257 258
258 if (prog_type == unknown) { 259 if (prog_type == unknown) {
259 if (do_list_mods) { 260 if (do_list_mods) {
260 status = crypto_kernel_list_debug_modules(); 261 status = srtp_list_debug_modules();
261 if (status) { 262 if (status) {
262 printf("error: list of debug modules failed\n"); 263 printf("error: list of debug modules failed\n");
263 exit(1); 264 exit(1);
264 } 265 }
265 return 0; 266 return 0;
266 } else { 267 } else {
267 printf("error: neither sender [-s] nor receiver [-r] specified\n"); 268 printf("error: neither sender [-s] nor receiver [-r] specified\n");
268 usage(argv[0]); 269 usage(argv[0]);
269 } 270 }
270 } 271 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 printf("security services: "); 350 printf("security services: ");
350 if (sec_servs & sec_serv_conf) 351 if (sec_servs & sec_serv_conf)
351 printf("confidentiality "); 352 printf("confidentiality ");
352 if (sec_servs & sec_serv_auth) 353 if (sec_servs & sec_serv_auth)
353 printf("message authentication"); 354 printf("message authentication");
354 if (sec_servs == sec_serv_none) 355 if (sec_servs == sec_serv_none)
355 printf("none"); 356 printf("none");
356 printf("\n"); 357 printf("\n");
357 358
358 /* set up the srtp policy and master key */ 359 /* set up the srtp policy and master key */
359 memset(&policy, 0, sizeof(policy));
360 if (sec_servs) { 360 if (sec_servs) {
361 /* 361 /*
362 * create policy structure, using the default mechanisms but 362 * create policy structure, using the default mechanisms but
363 * with only the security services requested on the command line, 363 * with only the security services requested on the command line,
364 * using the right SSRC value 364 * using the right SSRC value
365 */ 365 */
366 switch (sec_servs) { 366 switch (sec_servs) {
367 case sec_serv_conf_and_auth: 367 case sec_serv_conf_and_auth:
368 if (gcm_on) { 368 if (gcm_on) {
369 #ifdef OPENSSL 369 #ifdef OPENSSL
370 switch (key_size) { 370 switch (key_size) {
371 case 128: 371 case 128:
372 » crypto_policy_set_aes_gcm_128_8_auth(&policy.rtp); 372 » srtp_crypto_policy_set_aes_gcm_128_8_auth(&policy.rtp);
373 » crypto_policy_set_aes_gcm_128_8_auth(&policy.rtcp); 373 » srtp_crypto_policy_set_aes_gcm_128_8_auth(&policy.rtcp);
374 break; 374 break;
375 case 256: 375 case 256:
376 » crypto_policy_set_aes_gcm_256_8_auth(&policy.rtp); 376 » srtp_crypto_policy_set_aes_gcm_256_8_auth(&policy.rtp);
377 » crypto_policy_set_aes_gcm_256_8_auth(&policy.rtcp); 377 » srtp_crypto_policy_set_aes_gcm_256_8_auth(&policy.rtcp);
378 break; 378 break;
379 } 379 }
380 #else 380 #else
381 printf("error: GCM mode only supported when using the OpenSSL crypto eng ine.\n"); 381 printf("error: GCM mode only supported when using the OpenSSL crypto eng ine.\n");
382 return 0; 382 return 0;
383 #endif 383 #endif
384 } else { 384 } else {
385 switch (key_size) { 385 switch (key_size) {
386 case 128: 386 case 128:
387 crypto_policy_set_rtp_default(&policy.rtp); 387 srtp_crypto_policy_set_rtp_default(&policy.rtp);
388 crypto_policy_set_rtcp_default(&policy.rtcp); 388 srtp_crypto_policy_set_rtcp_default(&policy.rtcp);
389 break; 389 break;
390 case 256: 390 case 256:
391 crypto_policy_set_aes_cm_256_hmac_sha1_80(&policy.rtp); 391 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80(&policy.rtp);
392 crypto_policy_set_rtcp_default(&policy.rtcp); 392 srtp_crypto_policy_set_rtcp_default(&policy.rtcp);
393 break; 393 break;
394 } 394 }
395 } 395 }
396 break; 396 break;
397 case sec_serv_conf: 397 case sec_serv_conf:
398 if (gcm_on) { 398 if (gcm_on) {
399 printf("error: GCM mode must always be used with auth enabled\n"); 399 printf("error: GCM mode must always be used with auth enabled\n");
400 return -1; 400 return -1;
401 } else { 401 } else {
402 switch (key_size) { 402 switch (key_size) {
403 case 128: 403 case 128:
404 crypto_policy_set_aes_cm_128_null_auth(&policy.rtp); 404 srtp_crypto_policy_set_aes_cm_128_null_auth(&policy.rtp);
405 crypto_policy_set_rtcp_default(&policy.rtcp); 405 srtp_crypto_policy_set_rtcp_default(&policy.rtcp);
406 break; 406 break;
407 case 256: 407 case 256:
408 crypto_policy_set_aes_cm_256_null_auth(&policy.rtp); 408 srtp_crypto_policy_set_aes_cm_256_null_auth(&policy.rtp);
409 crypto_policy_set_rtcp_default(&policy.rtcp); 409 srtp_crypto_policy_set_rtcp_default(&policy.rtcp);
410 break; 410 break;
411 } 411 }
412 } 412 }
413 break; 413 break;
414 case sec_serv_auth: 414 case sec_serv_auth:
415 if (gcm_on) { 415 if (gcm_on) {
416 #ifdef OPENSSL 416 #ifdef OPENSSL
417 switch (key_size) { 417 switch (key_size) {
418 case 128: 418 case 128:
419 » crypto_policy_set_aes_gcm_128_8_only_auth(&policy.rtp); 419 » srtp_crypto_policy_set_aes_gcm_128_8_only_auth(&policy.rtp);
420 » crypto_policy_set_aes_gcm_128_8_only_auth(&policy.rtcp); 420 » srtp_crypto_policy_set_aes_gcm_128_8_only_auth(&policy.rtcp);
421 break; 421 break;
422 case 256: 422 case 256:
423 » crypto_policy_set_aes_gcm_256_8_only_auth(&policy.rtp); 423 » srtp_crypto_policy_set_aes_gcm_256_8_only_auth(&policy.rtp);
424 » crypto_policy_set_aes_gcm_256_8_only_auth(&policy.rtcp); 424 » srtp_crypto_policy_set_aes_gcm_256_8_only_auth(&policy.rtcp);
425 break; 425 break;
426 } 426 }
427 #else 427 #else
428 printf("error: GCM mode only supported when using the OpenSSL crypto eng ine.\n"); 428 printf("error: GCM mode only supported when using the OpenSSL crypto eng ine.\n");
429 return 0; 429 return 0;
430 #endif 430 #endif
431 } else { 431 } else {
432 crypto_policy_set_null_cipher_hmac_sha1_80(&policy.rtp); 432 srtp_crypto_policy_set_null_cipher_hmac_sha1_80(&policy.rtp);
433 crypto_policy_set_rtcp_default(&policy.rtcp); 433 srtp_crypto_policy_set_rtcp_default(&policy.rtcp);
434 } 434 }
435 break; 435 break;
436 default: 436 default:
437 printf("error: unknown security service requested\n"); 437 printf("error: unknown security service requested\n");
438 return -1; 438 return -1;
439 } 439 }
440 policy.ssrc.type = ssrc_specific; 440 policy.ssrc.type = ssrc_specific;
441 policy.ssrc.value = ssrc; 441 policy.ssrc.value = ssrc;
442 policy.key = (uint8_t *) key; 442 policy.key = (uint8_t *) key;
443 policy.ekt = NULL; 443 policy.ekt = NULL;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 } else { 488 } else {
489 /* 489 /*
490 * we're not providing security services, so set the policy to the 490 * we're not providing security services, so set the policy to the
491 * null policy 491 * null policy
492 * 492 *
493 * Note that this policy does not conform to the SRTP 493 * Note that this policy does not conform to the SRTP
494 * specification, since RTCP authentication is required. However, 494 * specification, since RTCP authentication is required. However,
495 * the effect of this policy is to turn off SRTP, so that this 495 * the effect of this policy is to turn off SRTP, so that this
496 * application is now a vanilla-flavored RTP application. 496 * application is now a vanilla-flavored RTP application.
497 */ 497 */
498 srtp_crypto_policy_set_null_cipher_hmac_null(&policy.rtp);
499 srtp_crypto_policy_set_null_cipher_hmac_null(&policy.rtcp);
498 policy.key = (uint8_t *)key; 500 policy.key = (uint8_t *)key;
499 policy.ssrc.type = ssrc_specific; 501 policy.ssrc.type = ssrc_specific;
500 policy.ssrc.value = ssrc; 502 policy.ssrc.value = ssrc;
501 policy.rtp.cipher_type = NULL_CIPHER;
502 policy.rtp.cipher_key_len = 0;
503 policy.rtp.auth_type = NULL_AUTH;
504 policy.rtp.auth_key_len = 0;
505 policy.rtp.auth_tag_len = 0;
506 policy.rtp.sec_serv = sec_serv_none;
507 policy.rtcp.cipher_type = NULL_CIPHER;
508 policy.rtcp.cipher_key_len = 0;
509 policy.rtcp.auth_type = NULL_AUTH;
510 policy.rtcp.auth_key_len = 0;
511 policy.rtcp.auth_tag_len = 0;
512 policy.rtcp.sec_serv = sec_serv_none;
513 policy.window_size = 0; 503 policy.window_size = 0;
514 policy.allow_repeat_tx = 0; 504 policy.allow_repeat_tx = 0;
515 policy.ekt = NULL; 505 policy.ekt = NULL;
516 policy.next = NULL; 506 policy.next = NULL;
517 } 507 }
518 508
519 if (prog_type == sender) { 509 if (prog_type == sender) {
520 510
521 #if BEW 511 #if BEW
522 /* bind to local socket (to match crypto policy, if need be) */ 512 /* bind to local socket (to match crypto policy, if need be) */
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 } 694 }
705 #else 695 #else
706 if (signal(SIGTERM, handle_signal) == SIG_ERR) { 696 if (signal(SIGTERM, handle_signal) == SIG_ERR) {
707 fprintf(stderr, "%s: error setting up signal handler", name); 697 fprintf(stderr, "%s: error setting up signal handler", name);
708 perror(""); 698 perror("");
709 return -1; 699 return -1;
710 } 700 }
711 #endif 701 #endif
712 return 0; 702 return 0;
713 } 703 }
OLDNEW
« no previous file with comments | « test/rtp.c ('k') | test/rtpw_test.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698