OpenCoverage

bn_lib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/bn/bn_lib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include <assert.h>-
11#include <limits.h>-
12#include "internal/cryptlib.h"-
13#include "bn_lcl.h"-
14#include <openssl/opensslconf.h>-
15#include "internal/constant_time_locl.h"-
16-
17/* This stuff appears to be completely unused, so is deprecated */-
18#if OPENSSL_API_COMPAT < 0x00908000L-
19/*--
20 * For a 32 bit machine-
21 * 2 - 4 == 128-
22 * 3 - 8 == 256-
23 * 4 - 16 == 512-
24 * 5 - 32 == 1024-
25 * 6 - 64 == 2048-
26 * 7 - 128 == 4096-
27 * 8 - 256 == 8192-
28 */-
29static int bn_limit_bits = 0;-
30static int bn_limit_num = 8; /* (1<<bn_limit_bits) */-
31static int bn_limit_bits_low = 0;-
32static int bn_limit_num_low = 8; /* (1<<bn_limit_bits_low) */-
33static int bn_limit_bits_high = 0;-
34static int bn_limit_num_high = 8; /* (1<<bn_limit_bits_high) */-
35static int bn_limit_bits_mont = 0;-
36static int bn_limit_num_mont = 8; /* (1<<bn_limit_bits_mont) */-
37-
38void BN_set_params(int mult, int high, int low, int mont)-
39{-
40 if (mult >= 0) {
mult >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
41 if (mult > (int)(sizeof(int) * 8) - 1)
mult > (int)(s...(int) * 8) - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
42 mult = sizeof(int) * 8 - 1;
never executed: mult = sizeof(int) * 8 - 1;
0
43 bn_limit_bits = mult;-
44 bn_limit_num = 1 << mult;-
45 }
never executed: end of block
0
46 if (high >= 0) {
high >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
47 if (high > (int)(sizeof(int) * 8) - 1)
high > (int)(s...(int) * 8) - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
48 high = sizeof(int) * 8 - 1;
never executed: high = sizeof(int) * 8 - 1;
0
49 bn_limit_bits_high = high;-
50 bn_limit_num_high = 1 << high;-
51 }
never executed: end of block
0
52 if (low >= 0) {
low >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
53 if (low > (int)(sizeof(int) * 8) - 1)
low > (int)(si...(int) * 8) - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
54 low = sizeof(int) * 8 - 1;
never executed: low = sizeof(int) * 8 - 1;
0
55 bn_limit_bits_low = low;-
56 bn_limit_num_low = 1 << low;-
57 }
never executed: end of block
0
58 if (mont >= 0) {
mont >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
59 if (mont > (int)(sizeof(int) * 8) - 1)
mont > (int)(s...(int) * 8) - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
60 mont = sizeof(int) * 8 - 1;
never executed: mont = sizeof(int) * 8 - 1;
0
61 bn_limit_bits_mont = mont;-
62 bn_limit_num_mont = 1 << mont;-
63 }
never executed: end of block
0
64}
never executed: end of block
0
65-
66int BN_get_params(int which)-
67{-
68 if (which == 0)
which == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
69 return bn_limit_bits;
never executed: return bn_limit_bits;
0
70 else if (which == 1)
which == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
71 return bn_limit_bits_high;
never executed: return bn_limit_bits_high;
0
72 else if (which == 2)
which == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
73 return bn_limit_bits_low;
never executed: return bn_limit_bits_low;
0
74 else if (which == 3)
which == 3Description
TRUEnever evaluated
FALSEnever evaluated
0
75 return bn_limit_bits_mont;
never executed: return bn_limit_bits_mont;
0
76 else-
77 return 0;
never executed: return 0;
0
78}-
79#endif-
80-
81const BIGNUM *BN_value_one(void)-
82{-
83 static const BN_ULONG data_one = 1L;-
84 static const BIGNUM const_one =-
85 { (BN_ULONG *)&data_one, 1, 1, 0, BN_FLG_STATIC_DATA };-
86-
87 return &const_one;
executed 167455 times by 2 tests: return &const_one;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
167455
88}-
89-
90int BN_num_bits_word(BN_ULONG l)-
91{-
92 BN_ULONG x, mask;-
93 int bits = (l != 0);-
94-
95#if BN_BITS2 > 32-
96 x = l >> 32;-
97 mask = (0 - x) & BN_MASK2;-
98 mask = (0 - (mask >> (BN_BITS2 - 1)));-
99 bits += 32 & mask;-
100 l ^= (x ^ l) & mask;-
101#endif-
102-
103 x = l >> 16;-
104 mask = (0 - x) & BN_MASK2;-
105 mask = (0 - (mask >> (BN_BITS2 - 1)));-
106 bits += 16 & mask;-
107 l ^= (x ^ l) & mask;-
108-
109 x = l >> 8;-
110 mask = (0 - x) & BN_MASK2;-
111 mask = (0 - (mask >> (BN_BITS2 - 1)));-
112 bits += 8 & mask;-
113 l ^= (x ^ l) & mask;-
114-
115 x = l >> 4;-
116 mask = (0 - x) & BN_MASK2;-
117 mask = (0 - (mask >> (BN_BITS2 - 1)));-
118 bits += 4 & mask;-
119 l ^= (x ^ l) & mask;-
120-
121 x = l >> 2;-
122 mask = (0 - x) & BN_MASK2;-
123 mask = (0 - (mask >> (BN_BITS2 - 1)));-
124 bits += 2 & mask;-
125 l ^= (x ^ l) & mask;-
126-
127 x = l >> 1;-
128 mask = (0 - x) & BN_MASK2;-
129 mask = (0 - (mask >> (BN_BITS2 - 1)));-
130 bits += 1 & mask;-
131-
132 return bits;
executed 27251278 times by 2 tests: return bits;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
27251278
133}-
134-
135int BN_num_bits(const BIGNUM *a)-
136{-
137 int i = a->top - 1;-
138 bn_check_top(a);-
139-
140 if (BN_is_zero(a))
BN_is_zero(a)Description
TRUEevaluated 11962 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23356888 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
11962-23356888
141 return 0;
executed 11962 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
11962
142 return ((i * BN_BITS2) + BN_num_bits_word(a->d[i]));
executed 23356888 times by 2 tests: return ((i * (8 * 8)) + BN_num_bits_word(a->d[i]));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
23356888
143}-
144-
145static void bn_free_d(BIGNUM *a)-
146{-
147 if (BN_get_flags(a, BN_FLG_SECURE))
BN_get_flags(a, 0x08)Description
TRUEevaluated 74763 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 4855179 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
74763-4855179
148 OPENSSL_secure_free(a->d);
executed 74763 times by 2 tests: CRYPTO_secure_free(a->d, __FILE__, 148);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
74763
149 else-
150 OPENSSL_free(a->d);
executed 4855179 times by 2 tests: CRYPTO_free(a->d, __FILE__, 150);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4855179
151}-
152-
153-
154void BN_clear_free(BIGNUM *a)-
155{-
156 if (a == NULL)
a == ((void *)0)Description
TRUEevaluated 346187 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 1926437 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
346187-1926437
157 return;
executed 346187 times by 2 tests: return;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
346187
158 if (a->d != NULL && !BN_get_flags(a, BN_FLG_STATIC_DATA)) {
a->d != ((void *)0)Description
TRUEevaluated 1763832 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 162605 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
!BN_get_flags(a, 0x02)Description
TRUEevaluated 1763830 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-1763832
159 OPENSSL_cleanse(a->d, a->dmax * sizeof(a->d[0]));-
160 bn_free_d(a);-
161 }
executed 1763830 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1763830
162 if (BN_get_flags(a, BN_FLG_MALLOCED)) {
BN_get_flags(a, 0x01)Description
TRUEevaluated 198408 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 1728029 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
198408-1728029
163 OPENSSL_cleanse(a, sizeof(*a));-
164 OPENSSL_free(a);-
165 }
executed 198408 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
198408
166}
executed 1926437 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1926437
167-
168void BN_free(BIGNUM *a)-
169{-
170 if (a == NULL)
a == ((void *)0)Description
TRUEevaluated 325716 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 1181122 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
325716-1181122
171 return;
executed 325716 times by 2 tests: return;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
325716
172 if (!BN_get_flags(a, BN_FLG_STATIC_DATA))
!BN_get_flags(a, 0x02)Description
TRUEevaluated 1176667 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 4455 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4455-1176667
173 bn_free_d(a);
executed 1176667 times by 2 tests: bn_free_d(a);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1176667
174 if (a->flags & BN_FLG_MALLOCED)
a->flags & 0x01Description
TRUEevaluated 1179966 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 1156 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1156-1179966
175 OPENSSL_free(a);
executed 1179966 times by 2 tests: CRYPTO_free(a, __FILE__, 175);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1179966
176}
executed 1181122 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1181122
177-
178void bn_init(BIGNUM *a)-
179{-
180 static BIGNUM nilbn;-
181-
182 *a = nilbn;-
183 bn_check_top(a);-
184}
executed 5213480 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
5213480
185-
186BIGNUM *BN_new(void)-
187{-
188 BIGNUM *ret;-
189-
190 if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
(ret = CRYPTO_...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1378374 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-1378374
191 BNerr(BN_F_BN_NEW, ERR_R_MALLOC_FAILURE);-
192 return NULL;
never executed: return ((void *)0) ;
0
193 }-
194 ret->flags = BN_FLG_MALLOCED;-
195 bn_check_top(ret);-
196 return ret;
executed 1378374 times by 2 tests: return ret;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1378374
197}-
198-
199 BIGNUM *BN_secure_new(void)-
200 {-
201 BIGNUM *ret = BN_new();-
202 if (ret != NULL)
ret != ((void *)0)Description
TRUEevaluated 75262 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-75262
203 ret->flags |= BN_FLG_SECURE;
executed 75262 times by 1 test: ret->flags |= 0x08;
Executed by:
  • libcrypto.so.1.1
75262
204 return ret;
executed 75262 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
75262
205 }-
206-
207/* This is used by bn_expand2() */-
208/* The caller MUST check that words > b->dmax before calling this */-
209static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words)-
210{-
211 BN_ULONG *a = NULL;-
212-
213 if (words > (INT_MAX / (4 * BN_BITS2))) {
words > (0x7ff...(4 * (8 * 8)))Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4889508 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3-4889508
214 BNerr(BN_F_BN_EXPAND_INTERNAL, BN_R_BIGNUM_TOO_LONG);-
215 return NULL;
executed 3 times by 1 test: return ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
3
216 }-
217 if (BN_get_flags(b, BN_FLG_STATIC_DATA)) {
BN_get_flags(b, 0x02)Description
TRUEnever evaluated
FALSEevaluated 4889508 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4889508
218 BNerr(BN_F_BN_EXPAND_INTERNAL, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA);-
219 return NULL;
never executed: return ((void *)0) ;
0
220 }-
221 if (BN_get_flags(b, BN_FLG_SECURE))
BN_get_flags(b, 0x08)Description
TRUEevaluated 74760 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 4814748 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
74760-4814748
222 a = OPENSSL_secure_zalloc(words * sizeof(*a));
executed 74760 times by 2 tests: a = CRYPTO_secure_zalloc(words * sizeof(*a), __FILE__, 222);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
74760
223 else-
224 a = OPENSSL_zalloc(words * sizeof(*a));
executed 4814748 times by 2 tests: a = CRYPTO_zalloc(words * sizeof(*a), __FILE__, 224);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4814748
225 if (a == NULL) {
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4889508 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4889508
226 BNerr(BN_F_BN_EXPAND_INTERNAL, ERR_R_MALLOC_FAILURE);-
227 return NULL;
never executed: return ((void *)0) ;
0
228 }-
229-
230 assert(b->top <= words);-
231 if (b->top > 0)
b->top > 0Description
TRUEevaluated 430883 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 4458625 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
430883-4458625
232 memcpy(a, b->d, sizeof(*a) * b->top);
executed 430883 times by 2 tests: memcpy(a, b->d, sizeof(*a) * b->top);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
430883
233-
234 return a;
executed 4889508 times by 2 tests: return a;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4889508
235}-
236-
237/*-
238 * This is an internal function that should not be used in applications. It-
239 * ensures that 'b' has enough room for a 'words' word number and initialises-
240 * any unused part of b->d with leading zeros. It is mostly used by the-
241 * various BIGNUM routines. If there is an error, NULL is returned. If not,-
242 * 'b' is returned.-
243 */-
244-
245BIGNUM *bn_expand2(BIGNUM *b, int words)-
246{-
247 if (words > b->dmax) {
words > b->dmaxDescription
TRUEevaluated 4889511 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEnever evaluated
0-4889511
248 BN_ULONG *a = bn_expand_internal(b, words);-
249 if (!a)
!aDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4889508 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3-4889508
250 return NULL;
executed 3 times by 1 test: return ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
3
251 if (b->d) {
b->dDescription
TRUEevaluated 1989445 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 2900063 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
1989445-2900063
252 OPENSSL_cleanse(b->d, b->dmax * sizeof(b->d[0]));-
253 bn_free_d(b);-
254 }
executed 1989445 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1989445
255 b->d = a;-
256 b->dmax = words;-
257 }
executed 4889508 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4889508
258-
259 return b;
executed 4889508 times by 2 tests: return b;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4889508
260}-
261-
262BIGNUM *BN_dup(const BIGNUM *a)-
263{-
264 BIGNUM *t;-
265-
266 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 46612 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-46612
267 return NULL;
never executed: return ((void *)0) ;
0
268 bn_check_top(a);-
269-
270 t = BN_get_flags(a, BN_FLG_SECURE) ? BN_secure_new() : BN_new();
BN_get_flags(a, 0x08)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 46611 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
1-46611
271 if (t == NULL)
t == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 46612 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-46612
272 return NULL;
never executed: return ((void *)0) ;
0
273 if (!BN_copy(t, a)) {
!BN_copy(t, a)Description
TRUEnever evaluated
FALSEevaluated 46612 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-46612
274 BN_free(t);-
275 return NULL;
never executed: return ((void *)0) ;
0
276 }-
277 bn_check_top(t);-
278 return t;
executed 46612 times by 2 tests: return t;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
46612
279}-
280-
281BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)-
282{-
283 bn_check_top(b);-
284-
285 if (a == b)
a == bDescription
TRUEevaluated 1712 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3248124 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
1712-3248124
286 return a;
executed 1712 times by 1 test: return a;
Executed by:
  • libcrypto.so.1.1
1712
287 if (bn_wexpand(a, b->top) == NULL)
bn_wexpand(a, ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3248124 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3248124
288 return NULL;
never executed: return ((void *)0) ;
0
289-
290 if (b->top > 0)
b->top > 0Description
TRUEevaluated 3168135 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 79989 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
79989-3168135
291 memcpy(a->d, b->d, sizeof(b->d[0]) * b->top);
executed 3168135 times by 2 tests: memcpy(a->d, b->d, sizeof(b->d[0]) * b->top);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3168135
292-
293 a->neg = b->neg;-
294 a->top = b->top;-
295 a->flags |= b->flags & BN_FLG_FIXED_TOP;-
296 bn_check_top(a);-
297 return a;
executed 3248124 times by 2 tests: return a;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3248124
298}-
299-
300#define FLAGS_DATA(flags) ((flags) & (BN_FLG_STATIC_DATA \-
301 | BN_FLG_CONSTTIME \-
302 | BN_FLG_SECURE \-
303 | BN_FLG_FIXED_TOP))-
304#define FLAGS_STRUCT(flags) ((flags) & (BN_FLG_MALLOCED))-
305-
306void BN_swap(BIGNUM *a, BIGNUM *b)-
307{-
308 int flags_old_a, flags_old_b;-
309 BN_ULONG *tmp_d;-
310 int tmp_top, tmp_dmax, tmp_neg;-
311-
312 bn_check_top(a);-
313 bn_check_top(b);-
314-
315 flags_old_a = a->flags;-
316 flags_old_b = b->flags;-
317-
318 tmp_d = a->d;-
319 tmp_top = a->top;-
320 tmp_dmax = a->dmax;-
321 tmp_neg = a->neg;-
322-
323 a->d = b->d;-
324 a->top = b->top;-
325 a->dmax = b->dmax;-
326 a->neg = b->neg;-
327-
328 b->d = tmp_d;-
329 b->top = tmp_top;-
330 b->dmax = tmp_dmax;-
331 b->neg = tmp_neg;-
332-
333 a->flags = FLAGS_STRUCT(flags_old_a) | FLAGS_DATA(flags_old_b);-
334 b->flags = FLAGS_STRUCT(flags_old_b) | FLAGS_DATA(flags_old_a);-
335 bn_check_top(a);-
336 bn_check_top(b);-
337}
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
338-
339void BN_clear(BIGNUM *a)-
340{-
341 bn_check_top(a);-
342 if (a->d != NULL)
a->d != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
343 OPENSSL_cleanse(a->d, sizeof(*a->d) * a->dmax);
never executed: OPENSSL_cleanse(a->d, sizeof(*a->d) * a->dmax);
0
344 a->neg = 0;-
345 a->top = 0;-
346 a->flags &= ~BN_FLG_FIXED_TOP;-
347}
never executed: end of block
0
348-
349BN_ULONG BN_get_word(const BIGNUM *a)-
350{-
351 if (a->top > 1)
a->top > 1Description
TRUEevaluated 582 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 879 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
582-879
352 return BN_MASK2;
executed 582 times by 1 test: return (0xffffffffffffffffL);
Executed by:
  • libcrypto.so.1.1
582
353 else if (a->top == 1)
a->top == 1Description
TRUEevaluated 876 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3-876
354 return a->d[0];
executed 876 times by 1 test: return a->d[0];
Executed by:
  • libcrypto.so.1.1
876
355 /* a->top == 0 */-
356 return 0;
executed 3 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
3
357}-
358-
359int BN_set_word(BIGNUM *a, BN_ULONG w)-
360{-
361 bn_check_top(a);-
362 if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)
bn_expand(a, (...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 97681932 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-97681932
363 return 0;
never executed: return 0;
0
364 a->neg = 0;-
365 a->d[0] = w;-
366 a->top = (w ? 1 : 0);
wDescription
TRUEevaluated 174034 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 97507898 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
174034-97507898
367 a->flags &= ~BN_FLG_FIXED_TOP;-
368 bn_check_top(a);-
369 return 1;
executed 97681932 times by 2 tests: return 1;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
97681932
370}-
371-
372BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret)-
373{-
374 unsigned int i, m;-
375 unsigned int n;-
376 BN_ULONG l;-
377 BIGNUM *bn = NULL;-
378-
379 if (ret == NULL)
ret == ((void *)0)Description
TRUEevaluated 228973 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 323799 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
228973-323799
380 ret = bn = BN_new();
executed 228973 times by 2 tests: ret = bn = BN_new();
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
228973
381 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 552772 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-552772
382 return NULL;
never executed: return ((void *)0) ;
0
383 bn_check_top(ret);-
384 /* Skip leading zero's. */-
385 for ( ; len > 0 && *s == 0; s++, len--)
len > 0Description
TRUEevaluated 1060628 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 11110 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
*s == 0Description
TRUEevaluated 518966 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 541662 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
11110-1060628
386 continue;
executed 518966 times by 2 tests: continue;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
518966
387 n = len;-
388 if (n == 0) {
n == 0Description
TRUEevaluated 11107 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 541665 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
11107-541665
389 ret->top = 0;-
390 return ret;
executed 11107 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
11107
391 }-
392 i = ((n - 1) / BN_BYTES) + 1;-
393 m = ((n - 1) % (BN_BYTES));-
394 if (bn_wexpand(ret, (int)i) == NULL) {
bn_wexpand(ret...== ((void *)0)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 541662 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3-541662
395 BN_free(bn);-
396 return NULL;
executed 3 times by 1 test: return ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
3
397 }-
398 ret->top = i;-
399 ret->neg = 0;-
400 l = 0;-
401 while (n--) {
n--Description
TRUEevaluated 28215531 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 541662 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
541662-28215531
402 l = (l << 8L) | *(s++);-
403 if (m-- == 0) {
m-- == 0Description
TRUEevaluated 3668371 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 24547160 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3668371-24547160
404 ret->d[--i] = l;-
405 l = 0;-
406 m = BN_BYTES - 1;-
407 }
executed 3668371 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3668371
408 }
executed 28215531 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
28215531
409 /*-
410 * need to call this due to clear byte at top if avoiding having the top-
411 * bit set (-ve number)-
412 */-
413 bn_correct_top(ret);-
414 return ret;
executed 541662 times by 2 tests: return ret;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
541662
415}-
416-
417/* ignore negative */-
418static int bn2binpad(const BIGNUM *a, unsigned char *to, int tolen)-
419{-
420 int n;-
421 size_t i, lasti, j, atop, mask;-
422 BN_ULONG l;-
423-
424 /*-
425 * In case |a| is fixed-top, BN_num_bytes can return bogus length,-
426 * but it's assumed that fixed-top inputs ought to be "nominated"-
427 * even for padded output, so it works out...-
428 */-
429 n = BN_num_bytes(a);-
430 if (tolen == -1) {
tolen == -1Description
TRUEevaluated 60919 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 6501 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
6501-60919
431 tolen = n;-
432 } else if (tolen < n) { /* uncommon/unlike case */
executed 60919 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
tolen < nDescription
TRUEevaluated 78 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 6423 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
78-60919
433 BIGNUM temp = *a;-
434-
435 bn_correct_top(&temp);-
436 n = BN_num_bytes(&temp);-
437 if (tolen < n)
tolen < nDescription
TRUEevaluated 78 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-78
438 return -1;
executed 78 times by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
78
439 }
never executed: end of block
0
440-
441 /* Swipe through whole available data and don't give away padded zero. */-
442 atop = a->dmax * BN_BYTES;-
443 if (atop == 0) {
atop == 0Description
TRUEevaluated 807 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 66535 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
807-66535
444 OPENSSL_cleanse(to, tolen);-
445 return tolen;
executed 807 times by 1 test: return tolen;
Executed by:
  • libcrypto.so.1.1
807
446 }-
447-
448 lasti = atop - 1;-
449 atop = a->top * BN_BYTES;-
450 for (i = 0, j = 0, to += tolen; j < (size_t)tolen; j++) {
j < (size_t)tolenDescription
TRUEevaluated 3658384 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 66535 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
66535-3658384
451 l = a->d[i / BN_BYTES];-
452 mask = 0 - ((j - atop) >> (8 * sizeof(i) - 1));-
453 *--to = (unsigned char)(l >> (8 * (i % BN_BYTES)) & mask);-
454 i += (i - lasti) >> (8 * sizeof(i) - 1); /* stay on last limb */-
455 }
executed 3658384 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3658384
456-
457 return tolen;
executed 66535 times by 2 tests: return tolen;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
66535
458}-
459-
460int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen)-
461{-
462 if (tolen < 0)
tolen < 0Description
TRUEnever evaluated
FALSEevaluated 6501 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-6501
463 return -1;
never executed: return -1;
0
464 return bn2binpad(a, to, tolen);
executed 6501 times by 2 tests: return bn2binpad(a, to, tolen);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
6501
465}-
466-
467int BN_bn2bin(const BIGNUM *a, unsigned char *to)-
468{-
469 return bn2binpad(a, to, -1);
executed 60919 times by 2 tests: return bn2binpad(a, to, -1);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
60919
470}-
471-
472BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret)-
473{-
474 unsigned int i, m;-
475 unsigned int n;-
476 BN_ULONG l;-
477 BIGNUM *bn = NULL;-
478-
479 if (ret == NULL)
ret == ((void *)0)Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-15
480 ret = bn = BN_new();
executed 15 times by 1 test: ret = bn = BN_new();
Executed by:
  • libcrypto.so.1.1
15
481 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15
482 return NULL;
never executed: return ((void *)0) ;
0
483 bn_check_top(ret);-
484 s += len;-
485 /* Skip trailing zeroes. */-
486 for ( ; len > 0 && s[-1] == 0; s--, len--)
len > 0Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
s[-1] == 0Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15
487 continue;
never executed: continue;
0
488 n = len;-
489 if (n == 0) {
n == 0Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15
490 ret->top = 0;-
491 return ret;
never executed: return ret;
0
492 }-
493 i = ((n - 1) / BN_BYTES) + 1;-
494 m = ((n - 1) % (BN_BYTES));-
495 if (bn_wexpand(ret, (int)i) == NULL) {
bn_wexpand(ret...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15
496 BN_free(bn);-
497 return NULL;
never executed: return ((void *)0) ;
0
498 }-
499 ret->top = i;-
500 ret->neg = 0;-
501 l = 0;-
502 while (n--) {
n--Description
TRUEevaluated 1404 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
15-1404
503 s--;-
504 l = (l << 8L) | *s;-
505 if (m-- == 0) {
m-- == 0Description
TRUEevaluated 177 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1227 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
177-1227
506 ret->d[--i] = l;-
507 l = 0;-
508 m = BN_BYTES - 1;-
509 }
executed 177 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
177
510 }
executed 1404 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1404
511 /*-
512 * need to call this due to clear byte at top if avoiding having the top-
513 * bit set (-ve number)-
514 */-
515 bn_correct_top(ret);-
516 return ret;
executed 15 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
15
517}-
518-
519int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen)-
520{-
521 int i;-
522 BN_ULONG l;-
523 bn_check_top(a);-
524 i = BN_num_bytes(a);-
525 if (tolen < i)
tolen < iDescription
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-24
526 return -1;
never executed: return -1;
0
527 /* Add trailing zeroes if necessary */-
528 if (tolen > i)
tolen > iDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 20 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4-20
529 memset(to + i, 0, tolen - i);
executed 4 times by 1 test: memset(to + i, 0, tolen - i);
Executed by:
  • libcrypto.so.1.1
4
530 to += i;-
531 while (i--) {
i--Description
TRUEevaluated 1884 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
24-1884
532 l = a->d[i / BN_BYTES];-
533 to--;-
534 *to = (unsigned char)(l >> (8 * (i % BN_BYTES))) & 0xff;-
535 }
executed 1884 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1884
536 return tolen;
executed 24 times by 1 test: return tolen;
Executed by:
  • libcrypto.so.1.1
24
537}-
538-
539int BN_ucmp(const BIGNUM *a, const BIGNUM *b)-
540{-
541 int i;-
542 BN_ULONG t1, t2, *ap, *bp;-
543-
544 bn_check_top(a);-
545 bn_check_top(b);-
546-
547 i = a->top - b->top;-
548 if (i != 0)
i != 0Description
TRUEevaluated 5553445 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 17957942 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
5553445-17957942
549 return i;
executed 5553445 times by 2 tests: return i;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
5553445
550 ap = a->d;-
551 bp = b->d;-
552 for (i = a->top - 1; i >= 0; i--) {
i >= 0Description
TRUEevaluated 18873871 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 277374 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
277374-18873871
553 t1 = ap[i];-
554 t2 = bp[i];-
555 if (t1 != t2)
t1 != t2Description
TRUEevaluated 17680568 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 1193303 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
1193303-17680568
556 return ((t1 > t2) ? 1 : -1);
executed 17680568 times by 2 tests: return ((t1 > t2) ? 1 : -1);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
(t1 > t2)Description
TRUEevaluated 5030131 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 12650437 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
5030131-17680568
557 }
executed 1193303 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1193303
558 return 0;
executed 277374 times by 2 tests: return 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
277374
559}-
560-
561int BN_cmp(const BIGNUM *a, const BIGNUM *b)-
562{-
563 int i;-
564 int gt, lt;-
565 BN_ULONG t1, t2;-
566-
567 if ((a == NULL) || (b == NULL)) {
(a == ((void *)0) )Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3486604 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
(b == ((void *)0) )Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3486601 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3-3486604
568 if (a != NULL)
a != ((void *)0)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3
569 return -1;
executed 3 times by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
3
570 else if (b != NULL)
b != ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-2
571 return 1;
executed 1 time by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1
572 else-
573 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
2
574 }-
575-
576 bn_check_top(a);-
577 bn_check_top(b);-
578-
579 if (a->neg != b->neg) {
a->neg != b->negDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3486587 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
14-3486587
580 if (a->neg)
a->negDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4-10
581 return -1;
executed 4 times by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
4
582 else-
583 return 1;
executed 10 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
10
584 }-
585 if (a->neg == 0) {
a->neg == 0Description
TRUEevaluated 3483236 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 3351 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3351-3483236
586 gt = 1;-
587 lt = -1;-
588 } else {
executed 3483236 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3483236
589 gt = -1;-
590 lt = 1;-
591 }
executed 3351 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
3351
592-
593 if (a->top > b->top)
a->top > b->topDescription
TRUEevaluated 816003 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 2670584 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
816003-2670584
594 return gt;
executed 816003 times by 2 tests: return gt;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
816003
595 if (a->top < b->top)
a->top < b->topDescription
TRUEevaluated 44279 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2626305 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
44279-2626305
596 return lt;
executed 44279 times by 1 test: return lt;
Executed by:
  • libcrypto.so.1.1
44279
597 for (i = a->top - 1; i >= 0; i--) {
i >= 0Description
TRUEevaluated 3358288 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 122509 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
122509-3358288
598 t1 = a->d[i];-
599 t2 = b->d[i];-
600 if (t1 > t2)
t1 > t2Description
TRUEevaluated 909111 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 2449177 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
909111-2449177
601 return gt;
executed 909111 times by 2 tests: return gt;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
909111
602 if (t1 < t2)
t1 < t2Description
TRUEevaluated 1594685 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 854492 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
854492-1594685
603 return lt;
executed 1594685 times by 2 tests: return lt;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1594685
604 }
executed 854492 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
854492
605 return 0;
executed 122509 times by 2 tests: return 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
122509
606}-
607-
608int BN_set_bit(BIGNUM *a, int n)-
609{-
610 int i, j, k;-
611-
612 if (n < 0)
n < 0Description
TRUEnever evaluated
FALSEevaluated 170758 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-170758
613 return 0;
never executed: return 0;
0
614-
615 i = n / BN_BITS2;-
616 j = n % BN_BITS2;-
617 if (a->top <= i) {
a->top <= iDescription
TRUEevaluated 170138 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 620 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
620-170138
618 if (bn_wexpand(a, i + 1) == NULL)
bn_wexpand(a, ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 170138 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-170138
619 return 0;
never executed: return 0;
0
620 for (k = a->top; k < i + 1; k++)
k < i + 1Description
TRUEevaluated 1585657 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 170138 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
170138-1585657
621 a->d[k] = 0;
executed 1585657 times by 2 tests: a->d[k] = 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1585657
622 a->top = i + 1;-
623 a->flags &= ~BN_FLG_FIXED_TOP;-
624 }
executed 170138 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
170138
625-
626 a->d[i] |= (((BN_ULONG)1) << j);-
627 bn_check_top(a);-
628 return 1;
executed 170758 times by 2 tests: return 1;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
170758
629}-
630-
631int BN_clear_bit(BIGNUM *a, int n)-
632{-
633 int i, j;-
634-
635 bn_check_top(a);-
636 if (n < 0)
n < 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
637 return 0;
never executed: return 0;
0
638-
639 i = n / BN_BITS2;-
640 j = n % BN_BITS2;-
641 if (a->top <= i)
a->top <= iDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
642 return 0;
never executed: return 0;
0
643-
644 a->d[i] &= (~(((BN_ULONG)1) << j));-
645 bn_correct_top(a);-
646 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2
647}-
648-
649int BN_is_bit_set(const BIGNUM *a, int n)-
650{-
651 int i, j;-
652-
653 bn_check_top(a);-
654 if (n < 0)
n < 0Description
TRUEevaluated 627 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 20344838 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
627-20344838
655 return 0;
executed 627 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
627
656 i = n / BN_BITS2;-
657 j = n % BN_BITS2;-
658 if (a->top <= i)
a->top <= iDescription
TRUEevaluated 3521 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 20341317 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3521-20341317
659 return 0;
executed 3521 times by 2 tests: return 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3521
660 return (int)(((a->d[i]) >> j) & ((BN_ULONG)1));
executed 20341317 times by 2 tests: return (int)(((a->d[i]) >> j) & ((unsigned long)1));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
20341317
661}-
662-
663int BN_mask_bits(BIGNUM *a, int n)-
664{-
665 int b, w;-
666-
667 bn_check_top(a);-
668 if (n < 0)
n < 0Description
TRUEnever evaluated
FALSEevaluated 106 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-106
669 return 0;
never executed: return 0;
0
670-
671 w = n / BN_BITS2;-
672 b = n % BN_BITS2;-
673 if (w >= a->top)
w >= a->topDescription
TRUEnever evaluated
FALSEevaluated 106 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-106
674 return 0;
never executed: return 0;
0
675 if (b == 0)
b == 0Description
TRUEnever evaluated
FALSEevaluated 106 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-106
676 a->top = w;
never executed: a->top = w;
0
677 else {-
678 a->top = w + 1;-
679 a->d[w] &= ~(BN_MASK2 << b);-
680 }
executed 106 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
106
681 bn_correct_top(a);-
682 return 1;
executed 106 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
106
683}-
684-
685void BN_set_negative(BIGNUM *a, int b)-
686{-
687 if (b && !BN_is_zero(a))
bDescription
TRUEevaluated 4277 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 273582 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
!BN_is_zero(a)Description
TRUEevaluated 4233 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 44 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
44-273582
688 a->neg = 1;
executed 4233 times by 1 test: a->neg = 1;
Executed by:
  • libcrypto.so.1.1
4233
689 else-
690 a->neg = 0;
executed 273626 times by 2 tests: a->neg = 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
273626
691}-
692-
693int bn_cmp_words(const BN_ULONG *a, const BN_ULONG *b, int n)-
694{-
695 int i;-
696 BN_ULONG aa, bb;-
697-
698 aa = a[n - 1];-
699 bb = b[n - 1];-
700 if (aa != bb)
aa != bbDescription
TRUEevaluated 591616 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 104887 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
104887-591616
701 return ((aa > bb) ? 1 : -1);
executed 591616 times by 1 test: return ((aa > bb) ? 1 : -1);
Executed by:
  • libcrypto.so.1.1
(aa > bb)Description
TRUEevaluated 312691 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 278925 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
278925-591616
702 for (i = n - 2; i >= 0; i--) {
i >= 0Description
TRUEevaluated 759648 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 45640 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
45640-759648
703 aa = a[i];-
704 bb = b[i];-
705 if (aa != bb)
aa != bbDescription
TRUEevaluated 59247 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 700401 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
59247-700401
706 return ((aa > bb) ? 1 : -1);
executed 59247 times by 1 test: return ((aa > bb) ? 1 : -1);
Executed by:
  • libcrypto.so.1.1
(aa > bb)Description
TRUEevaluated 36019 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23228 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
23228-59247
707 }
executed 700401 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
700401
708 return 0;
executed 45640 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
45640
709}-
710-
711/*-
712 * Here follows a specialised variants of bn_cmp_words(). It has the-
713 * capability of performing the operation on arrays of different sizes. The-
714 * sizes of those arrays is expressed through cl, which is the common length-
715 * ( basically, min(len(a),len(b)) ), and dl, which is the delta between the-
716 * two lengths, calculated as len(a)-len(b). All lengths are the number of-
717 * BN_ULONGs...-
718 */-
719-
720int bn_cmp_part_words(const BN_ULONG *a, const BN_ULONG *b, int cl, int dl)-
721{-
722 int n, i;-
723 n = cl - 1;-
724-
725 if (dl < 0) {
dl < 0Description
TRUEevaluated 40010 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 677866 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
40010-677866
726 for (i = dl; i < 0; i++) {
i < 0Description
TRUEevaluated 66274 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3985 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3985-66274
727 if (b[n - i] != 0)
b[n - i] != 0Description
TRUEevaluated 36025 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 30249 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
30249-36025
728 return -1; /* a < b */
executed 36025 times by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
36025
729 }
executed 30249 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
30249
730 }
executed 3985 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
3985
731 if (dl > 0) {
dl > 0Description
TRUEevaluated 38964 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 642887 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
38964-642887
732 for (i = dl; i > 0; i--) {
i > 0Description
TRUEevaluated 145592 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 8644 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
8644-145592
733 if (a[n + i] != 0)
a[n + i] != 0Description
TRUEevaluated 30320 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 115272 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
30320-115272
734 return 1; /* a > b */
executed 30320 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
30320
735 }
executed 115272 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
115272
736 }
executed 8644 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
8644
737 return bn_cmp_words(a, b, cl);
executed 651531 times by 1 test: return bn_cmp_words(a, b, cl);
Executed by:
  • libcrypto.so.1.1
651531
738}-
739-
740/*-
741 * Constant-time conditional swap of a and b.-
742 * a and b are swapped if condition is not 0. The code assumes that at most one bit of condition is set.-
743 * nwords is the number of words to swap. The code assumes that at least nwords are allocated in both a and b,-
744 * and that no more than nwords are used by either a or b.-
745 * a and b cannot be the same number-
746 */-
747void BN_consttime_swap(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords)-
748{-
749 BN_ULONG t;-
750 int i;-
751-
752 bn_wcheck_size(a, nwords);-
753 bn_wcheck_size(b, nwords);-
754-
755 assert(a != b);-
756 assert((condition & (condition - 1)) == 0);-
757 assert(sizeof(BN_ULONG) >= sizeof(int));-
758-
759 condition = ((condition - 1) >> (BN_BITS2 - 1)) - 1;-
760-
761 t = (a->top ^ b->top) & condition;-
762 a->top ^= t;-
763 b->top ^= t;-
764-
765 t = (a->neg ^ b->neg) & condition;-
766 a->neg ^= t;-
767 b->neg ^= t;-
768-
769 /*--
770 * Idea behind BN_FLG_STATIC_DATA is actually to-
771 * indicate that data may not be written to.-
772 * Intention is actually to treat it as it's-
773 * read-only data, and some (if not most) of it does-
774 * reside in read-only segment. In other words-
775 * observation of BN_FLG_STATIC_DATA in-
776 * BN_consttime_swap should be treated as fatal-
777 * condition. It would either cause SEGV or-
778 * effectively cause data corruption.-
779 * BN_FLG_MALLOCED refers to BN structure itself,-
780 * and hence must be preserved. Remaining flags are-
781 * BN_FLG_CONSTIME and BN_FLG_SECURE. Latter must be-
782 * preserved, because it determines how x->d was-
783 * allocated and hence how to free it. This leaves-
784 * BN_FLG_CONSTTIME that one can do something about.-
785 * To summarize it's sufficient to mask and swap-
786 * BN_FLG_CONSTTIME alone. BN_FLG_STATIC_DATA should-
787 * be treated as fatal.-
788 */-
789 t = ((a->flags ^ b->flags) & BN_FLG_CONSTTIME) & condition;-
790 a->flags ^= t;-
791 b->flags ^= t;-
792-
793#define BN_CONSTTIME_SWAP(ind) \-
794 do { \-
795 t = (a->d[ind] ^ b->d[ind]) & condition; \-
796 a->d[ind] ^= t; \-
797 b->d[ind] ^= t; \-
798 } while (0)-
799-
800 switch (nwords) {-
801 default:
executed 8 times by 1 test: default:
Executed by:
  • libcrypto.so.1.1
8
802 for (i = 10; i < nwords; i++)
i < nwordsDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
8-38
803 BN_CONSTTIME_SWAP(i);
executed 38 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
38
804 /* Fallthrough */-
805 case 10:
code before this statement executed 8 times by 1 test: case 10:
Executed by:
  • libcrypto.so.1.1
executed 651 times by 1 test: case 10:
Executed by:
  • libcrypto.so.1.1
8-651
806 BN_CONSTTIME_SWAP(9); /* Fallthrough */-
807 case 9:
code before this statement executed 659 times by 1 test: case 9:
Executed by:
  • libcrypto.so.1.1
executed 1045899 times by 1 test: case 9:
Executed by:
  • libcrypto.so.1.1
659-1045899
808 BN_CONSTTIME_SWAP(8); /* Fallthrough */-
809 case 8:
code before this statement executed 1046558 times by 1 test: case 8:
Executed by:
  • libcrypto.so.1.1
executed 115648 times by 1 test: case 8:
Executed by:
  • libcrypto.so.1.1
115648-1046558
810 BN_CONSTTIME_SWAP(7); /* Fallthrough */-
811 case 7:
code before this statement executed 1162206 times by 1 test: case 7:
Executed by:
  • libcrypto.so.1.1
executed 277790 times by 1 test: case 7:
Executed by:
  • libcrypto.so.1.1
277790-1162206
812 BN_CONSTTIME_SWAP(6); /* Fallthrough */-
813 case 6:
code before this statement executed 1439996 times by 1 test: case 6:
Executed by:
  • libcrypto.so.1.1
executed 451358 times by 1 test: case 6:
Executed by:
  • libcrypto.so.1.1
451358-1439996
814 BN_CONSTTIME_SWAP(5); /* Fallthrough */-
815 case 5:
code before this statement executed 1891354 times by 1 test: case 5:
Executed by:
  • libcrypto.so.1.1
executed 279640 times by 2 tests: case 5:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
279640-1891354
816 BN_CONSTTIME_SWAP(4); /* Fallthrough */-
817 case 4:
code before this statement executed 2170994 times by 2 tests: case 4:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
executed 738108 times by 2 tests: case 4:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
738108-2170994
818 BN_CONSTTIME_SWAP(3); /* Fallthrough */-
819 case 3:
code before this statement executed 2909102 times by 2 tests: case 3:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
executed 595031 times by 1 test: case 3:
Executed by:
  • libcrypto.so.1.1
595031-2909102
820 BN_CONSTTIME_SWAP(2); /* Fallthrough */-
821 case 2:
code before this statement executed 3504133 times by 2 tests: case 2:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
executed 93368 times by 1 test: case 2:
Executed by:
  • libcrypto.so.1.1
93368-3504133
822 BN_CONSTTIME_SWAP(1); /* Fallthrough */-
823 case 1:
code before this statement executed 3597501 times by 2 tests: case 1:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
executed 3597501 times by 2 tests: case 1:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3597501
824 BN_CONSTTIME_SWAP(0);-
825 }
executed 3597501 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3597501
826#undef BN_CONSTTIME_SWAP-
827}-
828-
829/* Bits of security, see SP800-57 */-
830-
831int BN_security_bits(int L, int N)-
832{-
833 int secbits, bits;-
834 if (L >= 15360)
L >= 15360Description
TRUEnever evaluated
FALSEevaluated 11236 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11236
835 secbits = 256;
never executed: secbits = 256;
0
836 else if (L >= 7680)
L >= 7680Description
TRUEnever evaluated
FALSEevaluated 11236 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11236
837 secbits = 192;
never executed: secbits = 192;
0
838 else if (L >= 3072)
L >= 3072Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 11228 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
8-11228
839 secbits = 128;
executed 8 times by 1 test: secbits = 128;
Executed by:
  • libcrypto.so.1.1
8
840 else if (L >= 2048)
L >= 2048Description
TRUEevaluated 8765 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2463 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2463-8765
841 secbits = 112;
executed 8765 times by 1 test: secbits = 112;
Executed by:
  • libcrypto.so.1.1
8765
842 else if (L >= 1024)
L >= 1024Description
TRUEevaluated 2456 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
7-2456
843 secbits = 80;
executed 2456 times by 1 test: secbits = 80;
Executed by:
  • libcrypto.so.1.1
2456
844 else-
845 return 0;
executed 7 times by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
7
846 if (N == -1)
N == -1Description
TRUEevaluated 9187 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2042 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2042-9187
847 return secbits;
executed 9187 times by 1 test: return secbits;
Executed by:
  • libcrypto.so.1.1
9187
848 bits = N / 2;-
849 if (bits < 80)
bits < 80Description
TRUEnever evaluated
FALSEevaluated 2042 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2042
850 return 0;
never executed: return 0;
0
851 return bits >= secbits ? secbits : bits;
executed 2042 times by 1 test: return bits >= secbits ? secbits : bits;
Executed by:
  • libcrypto.so.1.1
bits >= secbitsDescription
TRUEevaluated 2042 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2042
852}-
853-
854void BN_zero_ex(BIGNUM *a)-
855{-
856 a->neg = 0;-
857 a->top = 0;-
858 a->flags &= ~BN_FLG_FIXED_TOP;-
859}
never executed: end of block
0
860-
861int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w)-
862{-
863 return ((a->top == 1) && (a->d[0] == w)) || ((w == 0) && (a->top == 0));
executed 3905302 times by 2 tests: return ((a->top == 1) && (a->d[0] == w)) || ((w == 0) && (a->top == 0));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
(a->top == 1)Description
TRUEevaluated 431978 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 3473324 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
(a->d[0] == w)Description
TRUEevaluated 245241 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 186737 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
(w == 0)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3660057 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
(a->top == 0)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-3905302
864}-
865-
866int BN_is_zero(const BIGNUM *a)-
867{-
868 return a->top == 0;
executed 52453965 times by 2 tests: return a->top == 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
52453965
869}-
870-
871int BN_is_one(const BIGNUM *a)-
872{-
873 return BN_abs_is_word(a, 1) && !a->neg;
executed 3786971 times by 2 tests: return BN_abs_is_word(a, 1) && !a->neg;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
BN_abs_is_word(a, 1)Description
TRUEevaluated 239441 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 3547530 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
!a->negDescription
TRUEevaluated 239441 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEnever evaluated
0-3786971
874}-
875-
876int BN_is_word(const BIGNUM *a, const BN_ULONG w)-
877{-
878 return BN_abs_is_word(a, w) && (!w || !a->neg);
executed 30470 times by 1 test: return BN_abs_is_word(a, w) && (!w || !a->neg);
Executed by:
  • libcrypto.so.1.1
BN_abs_is_word(a, w)Description
TRUEevaluated 5762 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 24708 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!wDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5760 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!a->negDescription
TRUEevaluated 5759 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-30470
879}-
880-
881int BN_is_odd(const BIGNUM *a)-
882{-
883 return (a->top > 0) && (a->d[0] & 1);
executed 5599741 times by 2 tests: return (a->top > 0) && (a->d[0] & 1);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
(a->top > 0)Description
TRUEevaluated 5599302 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 439 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(a->d[0] & 1)Description
TRUEevaluated 3481920 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 2117382 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
439-5599741
884}-
885-
886int BN_is_negative(const BIGNUM *a)-
887{-
888 return (a->neg != 0);
executed 44625 times by 2 tests: return (a->neg != 0);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
44625
889}-
890-
891int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont,-
892 BN_CTX *ctx)-
893{-
894 return BN_mod_mul_montgomery(r, a, &(mont->RR), mont, ctx);
executed 180462 times by 2 tests: return BN_mod_mul_montgomery(r, a, &(mont->RR), mont, ctx);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
180462
895}-
896-
897void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags)-
898{-
899 dest->d = b->d;-
900 dest->top = b->top;-
901 dest->dmax = b->dmax;-
902 dest->neg = b->neg;-
903 dest->flags = ((dest->flags & BN_FLG_MALLOCED)-
904 | (b->flags & ~BN_FLG_MALLOCED)-
905 | BN_FLG_STATIC_DATA | flags);-
906}
executed 2427751 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2427751
907-
908BN_GENCB *BN_GENCB_new(void)-
909{-
910 BN_GENCB *ret;-
911-
912 if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) {
(ret = CRYPTO_...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 23 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23
913 BNerr(BN_F_BN_GENCB_NEW, ERR_R_MALLOC_FAILURE);-
914 return NULL;
never executed: return ((void *)0) ;
0
915 }-
916-
917 return ret;
executed 23 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
23
918}-
919-
920void BN_GENCB_free(BN_GENCB *cb)-
921{-
922 if (cb == NULL)
cb == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-23
923 return;
executed 1 time by 1 test: return;
Executed by:
  • libcrypto.so.1.1
1
924 OPENSSL_free(cb);-
925}
executed 23 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
23
926-
927void BN_set_flags(BIGNUM *b, int n)-
928{-
929 b->flags |= n;-
930}
executed 71162 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
71162
931-
932int BN_get_flags(const BIGNUM *b, int n)-
933{-
934 return b->flags & n;
executed 31803222 times by 2 tests: return b->flags & n;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
31803222
935}-
936-
937/* Populate a BN_GENCB structure with an "old"-style callback */-
938void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *),-
939 void *cb_arg)-
940{-
941 BN_GENCB *tmp_gencb = gencb;-
942 tmp_gencb->ver = 1;-
943 tmp_gencb->arg = cb_arg;-
944 tmp_gencb->cb.cb_1 = callback;-
945}
never executed: end of block
0
946-
947/* Populate a BN_GENCB structure with a "new"-style callback */-
948void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *),-
949 void *cb_arg)-
950{-
951 BN_GENCB *tmp_gencb = gencb;-
952 tmp_gencb->ver = 2;-
953 tmp_gencb->arg = cb_arg;-
954 tmp_gencb->cb.cb_2 = callback;-
955}
executed 23 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
23
956-
957void *BN_GENCB_get_arg(BN_GENCB *cb)-
958{-
959 return cb->arg;
executed 5332 times by 1 test: return cb->arg;
Executed by:
  • libcrypto.so.1.1
5332
960}-
961-
962BIGNUM *bn_wexpand(BIGNUM *a, int words)-
963{-
964 return (words <= a->dmax) ? a : bn_expand2(a, words);
executed 244086374 times by 2 tests: return (words <= a->dmax) ? a : bn_expand2(a, words);
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
(words <= a->dmax)Description
TRUEevaluated 240600694 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 3485680 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
3485680-244086374
965}-
966-
967void bn_correct_top(BIGNUM *a)-
968{-
969 BN_ULONG *ftl;-
970 int tmp_top = a->top;-
971-
972 if (tmp_top > 0) {
tmp_top > 0Description
TRUEevaluated 195880464 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 218082 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
218082-195880464
973 for (ftl = &(a->d[tmp_top]); tmp_top > 0; tmp_top--) {
tmp_top > 0Description
TRUEevaluated 634226577 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 459604 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
459604-634226577
974 ftl--;-
975 if (*ftl != 0)
*ftl != 0Description
TRUEevaluated 195420860 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 438805717 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
195420860-438805717
976 break;
executed 195420860 times by 2 tests: break;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
195420860
977 }
executed 438805717 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
438805717
978 a->top = tmp_top;-
979 }
executed 195880464 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
195880464
980 if (a->top == 0)
a->top == 0Description
TRUEevaluated 677686 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 195420860 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
677686-195420860
981 a->neg = 0;
executed 677686 times by 2 tests: a->neg = 0;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
677686
982 a->flags &= ~BN_FLG_FIXED_TOP;-
983 bn_pollute(a);-
984}
executed 196098546 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
196098546
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2