OpenCoverage

ech_lib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/ecdh/ech_lib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: ech_lib.c,v 1.14 2018/04/14 07:09:21 tb Exp $ */-
2/* ====================================================================-
3 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.-
4 *-
5 * The Elliptic Curve Public-Key Crypto Library (ECC Code) included-
6 * herein is developed by SUN MICROSYSTEMS, INC., and is contributed-
7 * to the OpenSSL project.-
8 *-
9 * The ECC Code is licensed pursuant to the OpenSSL open source-
10 * license provided below.-
11 *-
12 * The ECDH software is originally written by Douglas Stebila of-
13 * Sun Microsystems Laboratories.-
14 *-
15 */-
16/* ====================================================================-
17 * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved.-
18 *-
19 * Redistribution and use in source and binary forms, with or without-
20 * modification, are permitted provided that the following conditions-
21 * are met:-
22 *-
23 * 1. Redistributions of source code must retain the above copyright-
24 * notice, this list of conditions and the following disclaimer.-
25 *-
26 * 2. Redistributions in binary form must reproduce the above copyright-
27 * notice, this list of conditions and the following disclaimer in-
28 * the documentation and/or other materials provided with the-
29 * distribution.-
30 *-
31 * 3. All advertising materials mentioning features or use of this-
32 * software must display the following acknowledgment:-
33 * "This product includes software developed by the OpenSSL Project-
34 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
35 *-
36 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
37 * endorse or promote products derived from this software without-
38 * prior written permission. For written permission, please contact-
39 * openssl-core@OpenSSL.org.-
40 *-
41 * 5. Products derived from this software may not be called "OpenSSL"-
42 * nor may "OpenSSL" appear in their names without prior written-
43 * permission of the OpenSSL Project.-
44 *-
45 * 6. Redistributions of any form whatsoever must retain the following-
46 * acknowledgment:-
47 * "This product includes software developed by the OpenSSL Project-
48 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
49 *-
50 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
51 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
52 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
53 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
54 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
55 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
56 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
57 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
58 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
59 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
60 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
61 * OF THE POSSIBILITY OF SUCH DAMAGE.-
62 * ====================================================================-
63 *-
64 * This product includes cryptographic software written by Eric Young-
65 * (eay@cryptsoft.com). This product includes software written by Tim-
66 * Hudson (tjh@cryptsoft.com).-
67 *-
68 */-
69-
70#include <string.h>-
71-
72#include <openssl/opensslconf.h>-
73-
74#include "ech_locl.h"-
75#ifndef OPENSSL_NO_ENGINE-
76#include <openssl/engine.h>-
77#endif-
78#include <openssl/err.h>-
79-
80static const ECDH_METHOD *default_ECDH_method = NULL;-
81-
82static void *ecdh_data_new(void);-
83static void *ecdh_data_dup(void *);-
84static void ecdh_data_free(void *);-
85-
86void-
87ECDH_set_default_method(const ECDH_METHOD *meth)-
88{-
89 default_ECDH_method = meth;-
90}
never executed: end of block
0
91-
92const ECDH_METHOD *-
93ECDH_get_default_method(void)-
94{-
95 if (!default_ECDH_method) {
!default_ECDH_methodDescription
TRUEevaluated 24 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
FALSEevaluated 58 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
24-58
96 default_ECDH_method = ECDH_OpenSSL();-
97 }
executed 24 times by 2 tests: end of block
Executed by:
  • ecdhtest
  • ssltest
24
98 return default_ECDH_method;
executed 82 times by 2 tests: return default_ECDH_method;
Executed by:
  • ecdhtest
  • ssltest
82
99}-
100-
101int-
102ECDH_set_method(EC_KEY *eckey, const ECDH_METHOD *meth)-
103{-
104 ECDH_DATA *ecdh;-
105-
106 ecdh = ecdh_check(eckey);-
107-
108 if (ecdh == NULL)
ecdh == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
109 return 0;
never executed: return 0;
0
110-
111#ifndef OPENSSL_NO_ENGINE-
112 ENGINE_finish(ecdh->engine);-
113 ecdh->engine = NULL;-
114#endif-
115 ecdh->meth = meth;-
116 return 1;
never executed: return 1;
0
117}-
118-
119static ECDH_DATA *-
120ECDH_DATA_new_method(ENGINE *engine)-
121{-
122 ECDH_DATA *ret;-
123-
124 ret = malloc(sizeof(ECDH_DATA));-
125 if (ret == NULL) {
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 82 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
0-82
126 ECDHerror(ERR_R_MALLOC_FAILURE);-
127 return (NULL);
never executed: return ( ((void *)0) );
0
128 }-
129-
130 ret->init = NULL;-
131-
132 ret->meth = ECDH_get_default_method();-
133 ret->engine = engine;-
134#ifndef OPENSSL_NO_ENGINE-
135 if (!ret->engine)
!ret->engineDescription
TRUEevaluated 82 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
FALSEnever evaluated
0-82
136 ret->engine = ENGINE_get_default_ECDH();
executed 82 times by 2 tests: ret->engine = ENGINE_get_default_ECDH();
Executed by:
  • ecdhtest
  • ssltest
82
137 if (ret->engine) {
ret->engineDescription
TRUEnever evaluated
FALSEevaluated 82 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
0-82
138 ret->meth = ENGINE_get_ECDH(ret->engine);-
139 if (ret->meth == NULL) {
ret->meth == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
140 ECDHerror(ERR_R_ENGINE_LIB);-
141 ENGINE_finish(ret->engine);-
142 free(ret);-
143 return NULL;
never executed: return ((void *)0) ;
0
144 }-
145 }
never executed: end of block
0
146#endif-
147-
148 ret->flags = ret->meth->flags;-
149 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_ECDH, ret, &ret->ex_data);-
150 return (ret);
executed 82 times by 2 tests: return (ret);
Executed by:
  • ecdhtest
  • ssltest
82
151}-
152-
153static void *-
154ecdh_data_new(void)-
155{-
156 return (void *)ECDH_DATA_new_method(NULL);
executed 82 times by 2 tests: return (void *)ECDH_DATA_new_method( ((void *)0) );
Executed by:
  • ecdhtest
  • ssltest
82
157}-
158-
159static void *-
160ecdh_data_dup(void *data)-
161{-
162 ECDH_DATA *r = (ECDH_DATA *)data;-
163-
164 /* XXX: dummy operation */-
165 if (r == NULL)
r == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
166 return NULL;
never executed: return ((void *)0) ;
0
167-
168 return (void *)ecdh_data_new();
never executed: return (void *)ecdh_data_new();
0
169}-
170-
171void-
172ecdh_data_free(void *data)-
173{-
174 ECDH_DATA *r = (ECDH_DATA *)data;-
175-
176#ifndef OPENSSL_NO_ENGINE-
177 ENGINE_finish(r->engine);-
178#endif-
179-
180 CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDH, r, &r->ex_data);-
181-
182 freezero(r, sizeof(ECDH_DATA));-
183}
executed 82 times by 2 tests: end of block
Executed by:
  • ecdhtest
  • ssltest
82
184-
185ECDH_DATA *-
186ecdh_check(EC_KEY *key)-
187{-
188 ECDH_DATA *ecdh_data;-
189-
190 void *data = EC_KEY_get_key_method_data(key, ecdh_data_dup,-
191 ecdh_data_free, ecdh_data_free);-
192 if (data == NULL) {
data == ((void *)0)Description
TRUEevaluated 82 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
FALSEnever evaluated
0-82
193 ecdh_data = (ECDH_DATA *)ecdh_data_new();-
194 if (ecdh_data == NULL)
ecdh_data == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 82 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
0-82
195 return NULL;
never executed: return ((void *)0) ;
0
196 data = EC_KEY_insert_key_method_data(key, (void *)ecdh_data,-
197 ecdh_data_dup, ecdh_data_free, ecdh_data_free);-
198 if (data != NULL) {
data != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 82 times by 2 tests
Evaluated by:
  • ecdhtest
  • ssltest
0-82
199 /* Another thread raced us to install the key_method-
200 * data and won. */-
201 ecdh_data_free(ecdh_data);-
202 ecdh_data = (ECDH_DATA *)data;-
203 }
never executed: end of block
0
204 } else
executed 82 times by 2 tests: end of block
Executed by:
  • ecdhtest
  • ssltest
82
205 ecdh_data = (ECDH_DATA *)data;
never executed: ecdh_data = (ECDH_DATA *)data;
0
206-
207 return ecdh_data;
executed 82 times by 2 tests: return ecdh_data;
Executed by:
  • ecdhtest
  • ssltest
82
208}-
209-
210int-
211ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,-
212 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)-
213{-
214 return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ECDH, argl, argp,
never executed: return CRYPTO_get_ex_new_index(13, argl, argp, new_func, dup_func, free_func);
0
215 new_func, dup_func, free_func);
never executed: return CRYPTO_get_ex_new_index(13, argl, argp, new_func, dup_func, free_func);
0
216}-
217-
218int-
219ECDH_set_ex_data(EC_KEY *d, int idx, void *arg)-
220{-
221 ECDH_DATA *ecdh;-
222 ecdh = ecdh_check(d);-
223 if (ecdh == NULL)
ecdh == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
224 return 0;
never executed: return 0;
0
225 return (CRYPTO_set_ex_data(&ecdh->ex_data, idx, arg));
never executed: return (CRYPTO_set_ex_data(&ecdh->ex_data, idx, arg));
0
226}-
227-
228void *-
229ECDH_get_ex_data(EC_KEY *d, int idx)-
230{-
231 ECDH_DATA *ecdh;-
232 ecdh = ecdh_check(d);-
233 if (ecdh == NULL)
ecdh == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
234 return NULL;
never executed: return ((void *)0) ;
0
235 return (CRYPTO_get_ex_data(&ecdh->ex_data, idx));
never executed: return (CRYPTO_get_ex_data(&ecdh->ex_data, idx));
0
236}-
237-
238int-
239ECDH_size(const EC_KEY *d)-
240{-
241 return ((EC_GROUP_get_degree(EC_KEY_get0_group(d)) + 7) / 8);
executed 131 times by 2 tests: return ((EC_GROUP_get_degree(EC_KEY_get0_group(d)) + 7) / 8);
Executed by:
  • ecdhtest
  • ssltest
131
242}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2