OpenCoverage

d1_clnt.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/ssl/d1_clnt.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: d1_clnt.c,v 1.81 2018/08/30 16:56:16 jsing Exp $ */-
2/*-
3 * DTLS implementation written by Nagendra Modadugu-
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.-
5 */-
6/* ====================================================================-
7 * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.-
8 *-
9 * Redistribution and use in source and binary forms, with or without-
10 * modification, are permitted provided that the following conditions-
11 * are met:-
12 *-
13 * 1. Redistributions of source code must retain the above copyright-
14 * notice, this list of conditions and the following disclaimer.-
15 *-
16 * 2. Redistributions in binary form must reproduce the above copyright-
17 * notice, this list of conditions and the following disclaimer in-
18 * the documentation and/or other materials provided with the-
19 * distribution.-
20 *-
21 * 3. All advertising materials mentioning features or use of this-
22 * software must display the following acknowledgment:-
23 * "This product includes software developed by the OpenSSL Project-
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
25 *-
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
27 * endorse or promote products derived from this software without-
28 * prior written permission. For written permission, please contact-
29 * openssl-core@OpenSSL.org.-
30 *-
31 * 5. Products derived from this software may not be called "OpenSSL"-
32 * nor may "OpenSSL" appear in their names without prior written-
33 * permission of the OpenSSL Project.-
34 *-
35 * 6. Redistributions of any form whatsoever must retain the following-
36 * acknowledgment:-
37 * "This product includes software developed by the OpenSSL Project-
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
39 *-
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
51 * OF THE POSSIBILITY OF SUCH DAMAGE.-
52 * ====================================================================-
53 *-
54 * This product includes cryptographic software written by Eric Young-
55 * (eay@cryptsoft.com). This product includes software written by Tim-
56 * Hudson (tjh@cryptsoft.com).-
57 *-
58 */-
59/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
60 * All rights reserved.-
61 *-
62 * This package is an SSL implementation written-
63 * by Eric Young (eay@cryptsoft.com).-
64 * The implementation was written so as to conform with Netscapes SSL.-
65 *-
66 * This library is free for commercial and non-commercial use as long as-
67 * the following conditions are aheared to. The following conditions-
68 * apply to all code found in this distribution, be it the RC4, RSA,-
69 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
70 * included with this distribution is covered by the same copyright terms-
71 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
72 *-
73 * Copyright remains Eric Young's, and as such any Copyright notices in-
74 * the code are not to be removed.-
75 * If this package is used in a product, Eric Young should be given attribution-
76 * as the author of the parts of the library used.-
77 * This can be in the form of a textual message at program startup or-
78 * in documentation (online or textual) provided with the package.-
79 *-
80 * Redistribution and use in source and binary forms, with or without-
81 * modification, are permitted provided that the following conditions-
82 * are met:-
83 * 1. Redistributions of source code must retain the copyright-
84 * notice, this list of conditions and the following disclaimer.-
85 * 2. Redistributions in binary form must reproduce the above copyright-
86 * notice, this list of conditions and the following disclaimer in the-
87 * documentation and/or other materials provided with the distribution.-
88 * 3. All advertising materials mentioning features or use of this software-
89 * must display the following acknowledgement:-
90 * "This product includes cryptographic software written by-
91 * Eric Young (eay@cryptsoft.com)"-
92 * The word 'cryptographic' can be left out if the rouines from the library-
93 * being used are not cryptographic related :-).-
94 * 4. If you include any Windows specific code (or a derivative thereof) from-
95 * the apps directory (application code) you must include an acknowledgement:-
96 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
97 *-
98 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
99 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
100 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
101 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
102 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
103 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
104 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
105 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
106 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
107 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
108 * SUCH DAMAGE.-
109 *-
110 * The licence and distribution terms for any publically available version or-
111 * derivative of this code cannot be changed. i.e. this code cannot simply be-
112 * copied and put under another distribution licence-
113 * [including the GNU Public Licence.]-
114 */-
115-
116#include <limits.h>-
117#include <stdio.h>-
118-
119#include "ssl_locl.h"-
120-
121#include <openssl/bn.h>-
122#include <openssl/buffer.h>-
123#include <openssl/dh.h>-
124#include <openssl/evp.h>-
125#include <openssl/md5.h>-
126#include <openssl/objects.h>-
127-
128#include "bytestring.h"-
129-
130static const SSL_METHOD_INTERNAL DTLSv1_client_method_internal_data = {-
131 .version = DTLS1_VERSION,-
132 .min_version = DTLS1_VERSION,-
133 .max_version = DTLS1_VERSION,-
134 .ssl_new = dtls1_new,-
135 .ssl_clear = dtls1_clear,-
136 .ssl_free = dtls1_free,-
137 .ssl_accept = ssl_undefined_function,-
138 .ssl_connect = ssl3_connect,-
139 .get_ssl_method = dtls1_get_client_method,-
140 .get_timeout = dtls1_default_timeout,-
141 .ssl_version = ssl_undefined_void_function,-
142 .ssl_renegotiate = ssl3_renegotiate,-
143 .ssl_renegotiate_check = ssl3_renegotiate_check,-
144 .ssl_get_message = dtls1_get_message,-
145 .ssl_read_bytes = dtls1_read_bytes,-
146 .ssl_write_bytes = dtls1_write_app_data_bytes,-
147 .ssl3_enc = &DTLSv1_enc_data,-
148};-
149-
150static const SSL_METHOD DTLSv1_client_method_data = {-
151 .ssl_dispatch_alert = dtls1_dispatch_alert,-
152 .num_ciphers = ssl3_num_ciphers,-
153 .get_cipher = dtls1_get_cipher,-
154 .get_cipher_by_char = ssl3_get_cipher_by_char,-
155 .put_cipher_by_char = ssl3_put_cipher_by_char,-
156 .internal = &DTLSv1_client_method_internal_data,-
157};-
158-
159const SSL_METHOD *-
160DTLSv1_client_method(void)-
161{-
162 return &DTLSv1_client_method_data;
executed 15 times by 4 tests: return &DTLSv1_client_method_data;
Executed by:
  • cipherstest
  • clienttest
  • ssltest
  • tlsexttest
15
163}-
164-
165const SSL_METHOD *-
166dtls1_get_client_method(int ver)-
167{-
168 if (ver == DTLS1_VERSION)
ver == 0xFEFFDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • ssltest
FALSEnever evaluated
0-11
169 return (DTLSv1_client_method());
executed 11 times by 1 test: return (DTLSv1_client_method());
Executed by:
  • ssltest
11
170 return (NULL);
never executed: return ( ((void *)0) );
0
171}-
172-
173int-
174dtls1_get_hello_verify(SSL *s)-
175{-
176 long n;-
177 int al, ok = 0;-
178 size_t cookie_len;-
179 uint16_t ssl_version;-
180 CBS hello_verify_request, cookie;-
181-
182 n = s->method->internal->ssl_get_message(s, DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A,-
183 DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B, -1, s->internal->max_cert_list, &ok);-
184-
185 if (!ok)
!okDescription
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • ssltest
0-11
186 return ((int)n);
never executed: return ((int)n);
0
187-
188 if (S3I(s)->tmp.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) {
(s->s3->intern...sage_type != 3Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • ssltest
FALSEnever evaluated
0-11
189 D1I(s)->send_cookie = 0;-
190 S3I(s)->tmp.reuse_message = 1;-
191 return (1);
executed 11 times by 1 test: return (1);
Executed by:
  • ssltest
11
192 }-
193-
194 if (n < 0)
n < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
195 goto truncated;
never executed: goto truncated;
0
196-
197 CBS_init(&hello_verify_request, s->internal->init_msg, n);-
198-
199 if (!CBS_get_u16(&hello_verify_request, &ssl_version))
!CBS_get_u16(&... &ssl_version)Description
TRUEnever evaluated
FALSEnever evaluated
0
200 goto truncated;
never executed: goto truncated;
0
201-
202 if (ssl_version != s->version) {
ssl_version != s->versionDescription
TRUEnever evaluated
FALSEnever evaluated
0
203 SSLerror(s, SSL_R_WRONG_SSL_VERSION);-
204 s->version = (s->version & 0xff00) | (ssl_version & 0xff);-
205 al = SSL_AD_PROTOCOL_VERSION;-
206 goto f_err;
never executed: goto f_err;
0
207 }-
208-
209 if (!CBS_get_u8_length_prefixed(&hello_verify_request, &cookie))
!CBS_get_u8_le...uest, &cookie)Description
TRUEnever evaluated
FALSEnever evaluated
0
210 goto truncated;
never executed: goto truncated;
0
211-
212 if (!CBS_write_bytes(&cookie, D1I(s)->cookie,
!CBS_write_byt..., &cookie_len)Description
TRUEnever evaluated
FALSEnever evaluated
0
213 sizeof(D1I(s)->cookie), &cookie_len)) {
!CBS_write_byt..., &cookie_len)Description
TRUEnever evaluated
FALSEnever evaluated
0
214 D1I(s)->cookie_len = 0;-
215 al = SSL_AD_ILLEGAL_PARAMETER;-
216 goto f_err;
never executed: goto f_err;
0
217 }-
218 D1I(s)->cookie_len = cookie_len;-
219 D1I(s)->send_cookie = 1;-
220-
221 return 1;
never executed: return 1;
0
222-
223truncated:-
224 al = SSL_AD_DECODE_ERROR;-
225f_err:
code before this statement never executed: f_err:
0
226 ssl3_send_alert(s, SSL3_AL_FATAL, al);-
227 return -1;
never executed: return -1;
0
228}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2