OpenCoverage

dh_check.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/dh/dh_check.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: dh_check.c,v 1.16 2016/07/05 02:54:35 bcook 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#include <stdio.h>-
60-
61#include <openssl/bn.h>-
62#include <openssl/dh.h>-
63-
64/*-
65 * Check that p is a safe prime and-
66 * if g is 2, 3 or 5, check that it is a suitable generator-
67 * where-
68 * for 2, p mod 24 == 11-
69 * for 3, p mod 12 == 5-
70 * for 5, p mod 10 == 3 or 7-
71 * should hold.-
72 */-
73-
74int-
75DH_check(const DH *dh, int *ret)-
76{-
77 int ok = 0;-
78 BN_CTX *ctx = NULL;-
79 BN_ULONG l;-
80 BIGNUM *q = NULL;-
81-
82 *ret = 0;-
83 ctx = BN_CTX_new();-
84 if (ctx == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
0-1
85 goto err;
never executed: goto err;
0
86 q = BN_new();-
87 if (q == NULL)
q == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
0-1
88 goto err;
never executed: goto err;
0
89-
90 if (BN_is_word(dh->g, DH_GENERATOR_2)) {
(((dh->g))->top == 1)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
FALSEnever evaluated
(((dh->g))->d[...ed long)((2)))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
(((2)) == 0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
(((dh->g))->top == 0)Description
TRUEnever evaluated
FALSEnever evaluated
!(dh->g)->negDescription
TRUEnever evaluated
FALSEnever evaluated
0-1
91 l = BN_mod_word(dh->p, 24);-
92 if (l == (BN_ULONG)-1)
l == (unsigned long)-1Description
TRUEnever evaluated
FALSEnever evaluated
0
93 goto err;
never executed: goto err;
0
94 if (l != 11)
l != 11Description
TRUEnever evaluated
FALSEnever evaluated
0
95 *ret |= DH_NOT_SUITABLE_GENERATOR;
never executed: *ret |= 0x08;
0
96 } else if (BN_is_word(dh->g, DH_GENERATOR_5)) {
never executed: end of block
(((dh->g))->top == 1)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
FALSEnever evaluated
(((dh->g))->d[...ed long)((5)))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
FALSEnever evaluated
(((5)) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
(((dh->g))->top == 0)Description
TRUEnever evaluated
FALSEnever evaluated
!(dh->g)->negDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
FALSEnever evaluated
0-1
97 l = BN_mod_word(dh->p, 10);-
98 if (l == (BN_ULONG)-1)
l == (unsigned long)-1Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
0-1
99 goto err;
never executed: goto err;
0
100 if (l != 3 && l != 7)
l != 3Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
l != 7Description
TRUEnever evaluated
FALSEnever evaluated
0-1
101 *ret |= DH_NOT_SUITABLE_GENERATOR;
never executed: *ret |= 0x08;
0
102 } else
executed 1 time by 1 test: end of block
Executed by:
  • dhtest
1
103 *ret |= DH_UNABLE_TO_CHECK_GENERATOR;
never executed: *ret |= 0x04;
0
104-
105 if (!BN_is_prime_ex(dh->p, BN_prime_checks, ctx, NULL))
!BN_is_prime_e... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
0-1
106 *ret |= DH_CHECK_P_NOT_PRIME;
never executed: *ret |= 0x01;
0
107 else {-
108 if (!BN_rshift1(q, dh->p))
!BN_rshift1(q, dh->p)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
0-1
109 goto err;
never executed: goto err;
0
110 if (!BN_is_prime_ex(q, BN_prime_checks, ctx, NULL))
!BN_is_prime_e... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dhtest
0-1
111 *ret |= DH_CHECK_P_NOT_SAFE_PRIME;
never executed: *ret |= 0x02;
0
112 }
executed 1 time by 1 test: end of block
Executed by:
  • dhtest
1
113 ok = 1;-
114err:
code before this statement executed 1 time by 1 test: err:
Executed by:
  • dhtest
1
115 BN_CTX_free(ctx);-
116 BN_free(q);-
117 return ok;
executed 1 time by 1 test: return ok;
Executed by:
  • dhtest
1
118}-
119-
120int-
121DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret)-
122{-
123 BIGNUM *q = NULL;-
124-
125 *ret = 0;-
126 q = BN_new();-
127 if (q == NULL)
q == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 60 times by 3 tests
Evaluated by:
  • dhtest
  • mont
  • ssltest
0-60
128 return 0;
never executed: return 0;
0
129 BN_set_word(q, 1);-
130 if (BN_cmp(pub_key, q) <= 0)
BN_cmp(pub_key, q) <= 0Description
TRUEnever evaluated
FALSEevaluated 60 times by 3 tests
Evaluated by:
  • dhtest
  • mont
  • ssltest
0-60
131 *ret |= DH_CHECK_PUBKEY_TOO_SMALL;
never executed: *ret |= 0x01;
0
132 BN_copy(q, dh->p);-
133 BN_sub_word(q, 1);-
134 if (BN_cmp(pub_key, q) >= 0)
BN_cmp(pub_key, q) >= 0Description
TRUEnever evaluated
FALSEevaluated 60 times by 3 tests
Evaluated by:
  • dhtest
  • mont
  • ssltest
0-60
135 *ret |= DH_CHECK_PUBKEY_TOO_LARGE;
never executed: *ret |= 0x02;
0
136-
137 BN_free(q);-
138 return 1;
executed 60 times by 3 tests: return 1;
Executed by:
  • dhtest
  • mont
  • ssltest
60
139}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2