OpenCoverage

d1_enc.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/ssl/d1_enc.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: d1_enc.c,v 1.14 2017/01/23 08:08:06 beck Exp $ */-
2/*-
3 * DTLS implementation written by Nagendra Modadugu-
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.-
5 */-
6/* ====================================================================-
7 * Copyright (c) 1998-2005 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 <stdio.h>-
117-
118#include "ssl_locl.h"-
119-
120#include <openssl/evp.h>-
121#include <openssl/hmac.h>-
122#include <openssl/md5.h>-
123-
124/* dtls1_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively.-
125 *-
126 * Returns:-
127 * 0: (in non-constant time) if the record is publically invalid (i.e. too-
128 * short etc).-
129 * 1: if the record's padding is valid / the encryption was successful.-
130 * -1: if the record's padding/AEAD-authenticator is invalid or, if sending,-
131 * an internal error occured. */-
132int-
133dtls1_enc(SSL *s, int send)-
134{-
135 SSL3_RECORD *rec;-
136 EVP_CIPHER_CTX *ds;-
137 unsigned long l;-
138 int bs, i, j, k, mac_size = 0;-
139 const EVP_CIPHER *enc;-
140-
141 if (send) {
sendDescription
TRUEevaluated 176 times by 2 tests
Evaluated by:
  • clienttest
  • ssltest
FALSEevaluated 153 times by 1 test
Evaluated by:
  • ssltest
153-176
142 if (EVP_MD_CTX_md(s->internal->write_hash)) {
EVP_MD_CTX_md(...l->write_hash)Description
TRUEevaluated 66 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 110 times by 2 tests
Evaluated by:
  • clienttest
  • ssltest
66-110
143 mac_size = EVP_MD_CTX_size(s->internal->write_hash);-
144 if (mac_size < 0)
mac_size < 0Description
TRUEnever evaluated
FALSEevaluated 66 times by 1 test
Evaluated by:
  • ssltest
0-66
145 return -1;
never executed: return -1;
0
146 }
executed 66 times by 1 test: end of block
Executed by:
  • ssltest
66
147 ds = s->internal->enc_write_ctx;-
148 rec = &(S3I(s)->wrec);-
149 if (s->internal->enc_write_ctx == NULL)
s->internal->e...== ((void *)0)Description
TRUEevaluated 110 times by 2 tests
Evaluated by:
  • clienttest
  • ssltest
FALSEevaluated 66 times by 1 test
Evaluated by:
  • ssltest
66-110
150 enc = NULL;
executed 110 times by 2 tests: enc = ((void *)0) ;
Executed by:
  • clienttest
  • ssltest
110
151 else {-
152 enc = EVP_CIPHER_CTX_cipher(s->internal->enc_write_ctx);-
153 if (rec->data != rec->input) {
rec->data != rec->inputDescription
TRUEnever evaluated
FALSEevaluated 66 times by 1 test
Evaluated by:
  • ssltest
0-66
154#ifdef DEBUG-
155 /* we can't write into the input stream */-
156 fprintf(stderr, "%s:%d: rec->data != rec->input\n",-
157 __FILE__, __LINE__);-
158#endif-
159 } else if (EVP_CIPHER_block_size(ds->cipher) > 1) {
never executed: end of block
EVP_CIPHER_blo...s->cipher) > 1Description
TRUEevaluated 54 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 12 times by 1 test
Evaluated by:
  • ssltest
0-54
160 arc4random_buf(rec->input,-
161 EVP_CIPHER_block_size(ds->cipher));-
162 }
executed 54 times by 1 test: end of block
Executed by:
  • ssltest
54
163 }
executed 66 times by 1 test: end of block
Executed by:
  • ssltest
66
164 } else {-
165 if (EVP_MD_CTX_md(s->read_hash)) {
EVP_MD_CTX_md(s->read_hash)Description
TRUEevaluated 44 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 109 times by 1 test
Evaluated by:
  • ssltest
44-109
166 mac_size = EVP_MD_CTX_size(s->read_hash);-
167 OPENSSL_assert(mac_size >= 0);-
168 }
executed 44 times by 1 test: end of block
Executed by:
  • ssltest
44
169 ds = s->enc_read_ctx;-
170 rec = &(S3I(s)->rrec);-
171 if (s->enc_read_ctx == NULL)
s->enc_read_ctx == ((void *)0)Description
TRUEevaluated 109 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 44 times by 1 test
Evaluated by:
  • ssltest
44-109
172 enc = NULL;
executed 109 times by 1 test: enc = ((void *)0) ;
Executed by:
  • ssltest
109
173 else-
174 enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx);
executed 44 times by 1 test: enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx);
Executed by:
  • ssltest
44
175 }-
176-
177-
178 if ((s->session == NULL) || (ds == NULL) || (enc == NULL)) {
(s->session == ((void *)0) )Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 318 times by 2 tests
Evaluated by:
  • clienttest
  • ssltest
(ds == ((void *)0) )Description
TRUEevaluated 208 times by 2 tests
Evaluated by:
  • clienttest
  • ssltest
FALSEevaluated 110 times by 1 test
Evaluated by:
  • ssltest
(enc == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 110 times by 1 test
Evaluated by:
  • ssltest
0-318
179 memmove(rec->data, rec->input, rec->length);-
180 rec->input = rec->data;-
181 } else {
executed 219 times by 2 tests: end of block
Executed by:
  • clienttest
  • ssltest
219
182 l = rec->length;-
183 bs = EVP_CIPHER_block_size(ds->cipher);-
184-
185 if ((bs != 1) && send) {
(bs != 1)Description
TRUEevaluated 90 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
sendDescription
TRUEevaluated 54 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 36 times by 1 test
Evaluated by:
  • ssltest
20-90
186 i = bs - ((int)l % bs);-
187-
188 /* Add weird padding of upto 256 bytes */-
189-
190 /* we need to add 'i' padding bytes of value j */-
191 j = i - 1;-
192 for (k = (int)l; k < (int)(l + i); k++)
k < (int)(l + i)Description
TRUEevaluated 436 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 54 times by 1 test
Evaluated by:
  • ssltest
54-436
193 rec->input[k] = j;
executed 436 times by 1 test: rec->input[k] = j;
Executed by:
  • ssltest
436
194 l += i;-
195 rec->length += i;-
196 }
executed 54 times by 1 test: end of block
Executed by:
  • ssltest
54
197-
198-
199 if (!send) {
!sendDescription
TRUEevaluated 44 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 66 times by 1 test
Evaluated by:
  • ssltest
44-66
200 if (l == 0 || l % bs != 0)
l == 0Description
TRUEnever evaluated
FALSEevaluated 44 times by 1 test
Evaluated by:
  • ssltest
l % bs != 0Description
TRUEnever evaluated
FALSEevaluated 44 times by 1 test
Evaluated by:
  • ssltest
0-44
201 return 0;
never executed: return 0;
0
202 }
executed 44 times by 1 test: end of block
Executed by:
  • ssltest
44
203-
204 EVP_Cipher(ds, rec->data, rec->input, l);-
205-
206-
207 if ((bs != 1) && !send)
(bs != 1)Description
TRUEevaluated 90 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
!sendDescription
TRUEevaluated 36 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 54 times by 1 test
Evaluated by:
  • ssltest
20-90
208 return tls1_cbc_remove_padding(s, rec, bs, mac_size);
executed 36 times by 1 test: return tls1_cbc_remove_padding(s, rec, bs, mac_size);
Executed by:
  • ssltest
36
209 }
executed 74 times by 1 test: end of block
Executed by:
  • ssltest
74
210 return (1);
executed 293 times by 2 tests: return (1);
Executed by:
  • clienttest
  • ssltest
293
211}-
212-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2