OpenCoverage

d1_srtp.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/ssl/d1_srtp.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: d1_srtp.c,v 1.22 2017/08/27 02:58:04 doug Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58/* ====================================================================-
59 * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.-
60 *-
61 * Redistribution and use in source and binary forms, with or without-
62 * modification, are permitted provided that the following conditions-
63 * are met:-
64 *-
65 * 1. Redistributions of source code must retain the above copyright-
66 * notice, this list of conditions and the following disclaimer.-
67 *-
68 * 2. Redistributions in binary form must reproduce the above copyright-
69 * notice, this list of conditions and the following disclaimer in-
70 * the documentation and/or other materials provided with the-
71 * distribution.-
72 *-
73 * 3. All advertising materials mentioning features or use of this-
74 * software must display the following acknowledgment:-
75 * "This product includes software developed by the OpenSSL Project-
76 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"-
77 *-
78 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
79 * endorse or promote products derived from this software without-
80 * prior written permission. For written permission, please contact-
81 * openssl-core@openssl.org.-
82 *-
83 * 5. Products derived from this software may not be called "OpenSSL"-
84 * nor may "OpenSSL" appear in their names without prior written-
85 * permission of the OpenSSL Project.-
86 *-
87 * 6. Redistributions of any form whatsoever must retain the following-
88 * acknowledgment:-
89 * "This product includes software developed by the OpenSSL Project-
90 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"-
91 *-
92 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
93 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
94 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
95 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
96 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
97 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
98 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
99 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
100 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
101 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
102 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
103 * OF THE POSSIBILITY OF SUCH DAMAGE.-
104 * ====================================================================-
105 *-
106 * This product includes cryptographic software written by Eric Young-
107 * (eay@cryptsoft.com). This product includes software written by Tim-
108 * Hudson (tjh@cryptsoft.com).-
109 *-
110 */-
111/*-
112 * DTLS code by Eric Rescorla <ekr@rtfm.com>-
113 *-
114 * Copyright (C) 2006, Network Resonance, Inc.-
115 * Copyright (C) 2011, RTFM, Inc.-
116 */-
117-
118#include <stdio.h>-
119-
120#include <openssl/objects.h>-
121-
122#include "ssl_locl.h"-
123-
124#ifndef OPENSSL_NO_SRTP-
125-
126#include "bytestring.h"-
127#include "srtp.h"-
128-
129static SRTP_PROTECTION_PROFILE srtp_known_profiles[] = {-
130 {-
131 "SRTP_AES128_CM_SHA1_80",-
132 SRTP_AES128_CM_SHA1_80,-
133 },-
134 {-
135 "SRTP_AES128_CM_SHA1_32",-
136 SRTP_AES128_CM_SHA1_32,-
137 },-
138 {0}-
139};-
140-
141int-
142srtp_find_profile_by_name(char *profile_name, SRTP_PROTECTION_PROFILE **pptr,-
143 unsigned len)-
144{-
145 SRTP_PROTECTION_PROFILE *p;-
146-
147 p = srtp_known_profiles;-
148 while (p->name) {
p->nameDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • tlsexttest
FALSEnever evaluated
0-8
149 if ((len == strlen(p->name)) &&
(len == strlen(p->name))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • tlsexttest
FALSEnever evaluated
0-8
150 !strncmp(p->name, profile_name, len)) {
never executed: __result = (((const unsigned char *) (const char *) ( p->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( profile_name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! (__extension...name , len )))Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • tlsexttest
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tlsexttest
__builtin_constant_p ( len )Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • tlsexttest
__builtin_cons..._p ( p->name )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( p->na...ze_t) ( len ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...profile_name )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( profi...ze_t) ( len ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-8
151 *pptr = p;-
152 return 0;
executed 6 times by 1 test: return 0;
Executed by:
  • tlsexttest
6
153 }-
154-
155 p++;-
156 }
executed 2 times by 1 test: end of block
Executed by:
  • tlsexttest
2
157-
158 return 1;
never executed: return 1;
0
159}-
160-
161int-
162srtp_find_profile_by_num(unsigned profile_num, SRTP_PROTECTION_PROFILE **pptr)-
163{-
164 SRTP_PROTECTION_PROFILE *p;-
165-
166 p = srtp_known_profiles;-
167 while (p->name) {
p->nameDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tlsexttest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tlsexttest
3-12
168 if (p->id == profile_num) {
p->id == profile_numDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tlsexttest
FALSEevaluated 8 times by 1 test
Evaluated by:
  • tlsexttest
4-8
169 *pptr = p;-
170 return 0;
executed 4 times by 1 test: return 0;
Executed by:
  • tlsexttest
4
171 }-
172 p++;-
173 }
executed 8 times by 1 test: end of block
Executed by:
  • tlsexttest
8
174-
175 return 1;
executed 3 times by 1 test: return 1;
Executed by:
  • tlsexttest
3
176}-
177-
178static int-
179ssl_ctx_make_profiles(const char *profiles_string,-
180 STACK_OF(SRTP_PROTECTION_PROFILE) **out)-
181{-
182 STACK_OF(SRTP_PROTECTION_PROFILE) *profiles;-
183-
184 char *col;-
185 char *ptr = (char *)profiles_string;-
186-
187 SRTP_PROTECTION_PROFILE *p;-
188-
189 if (!(profiles = sk_SRTP_PROTECTION_PROFILE_new_null())) {
!(profiles = (...k_new_null()))Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tlsexttest
0-3
190 SSLerrorx(SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES);-
191 return 1;
never executed: return 1;
0
192 }-
193-
194 do {-
195 col = strchr(ptr, ':');
__builtin_constant_p ( ':' )Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tlsexttest
FALSEnever evaluated
!__builtin_constant_p ( ptr )Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tlsexttest
FALSEnever evaluated
( ':' ) == '\0'Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • tlsexttest
0-5
196-
197 if (!srtp_find_profile_by_name(ptr, &p,
!srtp_find_pro...t)strlen(ptr))Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tlsexttest
FALSEnever evaluated
0-5
198 col ? col - ptr : (int)strlen(ptr))) {
!srtp_find_pro...t)strlen(ptr))Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • tlsexttest
FALSEnever evaluated
0-5
199 sk_SRTP_PROTECTION_PROFILE_push(profiles, p);-
200 } else {
executed 5 times by 1 test: end of block
Executed by:
  • tlsexttest
5
201 SSLerrorx(SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE);-
202 sk_SRTP_PROTECTION_PROFILE_free(profiles);-
203 return 1;
never executed: return 1;
0
204 }-
205-
206 if (col)
colDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tlsexttest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tlsexttest
2-3
207 ptr = col + 1;
executed 2 times by 1 test: ptr = col + 1;
Executed by:
  • tlsexttest
2
208 } while (col);
executed 5 times by 1 test: end of block
Executed by:
  • tlsexttest
colDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tlsexttest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tlsexttest
2-5
209-
210 *out = profiles;-
211-
212 return 0;
executed 3 times by 1 test: return 0;
Executed by:
  • tlsexttest
3
213}-
214-
215int-
216SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles)-
217{-
218 return ssl_ctx_make_profiles(profiles, &ctx->internal->srtp_profiles);
never executed: return ssl_ctx_make_profiles(profiles, &ctx->internal->srtp_profiles);
0
219}-
220-
221int-
222SSL_set_tlsext_use_srtp(SSL *s, const char *profiles)-
223{-
224 return ssl_ctx_make_profiles(profiles, &s->internal->srtp_profiles);
executed 3 times by 1 test: return ssl_ctx_make_profiles(profiles, &s->internal->srtp_profiles);
Executed by:
  • tlsexttest
3
225}-
226-
227-
228STACK_OF(SRTP_PROTECTION_PROFILE) *-
229SSL_get_srtp_profiles(SSL *s)-
230{-
231 if (s != NULL) {
s != ((void *)0)Description
TRUEevaluated 23 times by 3 tests
Evaluated by:
  • clienttest
  • ssltest
  • tlsexttest
FALSEnever evaluated
0-23
232 if (s->internal->srtp_profiles != NULL) {
s->internal->s...!= ((void *)0)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • tlsexttest
FALSEevaluated 13 times by 3 tests
Evaluated by:
  • clienttest
  • ssltest
  • tlsexttest
10-13
233 return s->internal->srtp_profiles;
executed 10 times by 1 test: return s->internal->srtp_profiles;
Executed by:
  • tlsexttest
10
234 } else if ((s->ctx != NULL) &&
(s->ctx != ((void *)0) )Description
TRUEevaluated 13 times by 3 tests
Evaluated by:
  • clienttest
  • ssltest
  • tlsexttest
FALSEnever evaluated
0-13
235 (s->ctx->internal->srtp_profiles != NULL)) {
(s->ctx->inter... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 13 times by 3 tests
Evaluated by:
  • clienttest
  • ssltest
  • tlsexttest
0-13
236 return s->ctx->internal->srtp_profiles;
never executed: return s->ctx->internal->srtp_profiles;
0
237 }-
238 }
executed 13 times by 3 tests: end of block
Executed by:
  • clienttest
  • ssltest
  • tlsexttest
13
239-
240 return NULL;
executed 13 times by 3 tests: return ((void *)0) ;
Executed by:
  • clienttest
  • ssltest
  • tlsexttest
13
241}-
242-
243SRTP_PROTECTION_PROFILE *-
244SSL_get_selected_srtp_profile(SSL *s)-
245{-
246 return s->internal->srtp_profile;
executed 25 times by 2 tests: return s->internal->srtp_profile;
Executed by:
  • ssltest
  • tlsexttest
25
247}-
248-
249#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2