OpenCoverage

sm2_crypt.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/sm2/sm2_crypt.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5typedef struct SM2_Ciphertext_st SM2_Ciphertext;-
6SM2_Ciphertext *SM2_Ciphertext_new(void); void SM2_Ciphertext_free(SM2_Ciphertext *a); SM2_Ciphertext *d2i_SM2_Ciphertext(SM2_Ciphertext **a, const unsigned char **in, long len); int i2d_SM2_Ciphertext(SM2_Ciphertext *a, unsigned char **out); extern const ASN1_ITEM SM2_Ciphertext_it;-
7-
8struct SM2_Ciphertext_st {-
9 BIGNUM *C1x;-
10 BIGNUM *C1y;-
11 ASN1_OCTET_STRING *C3;-
12 ASN1_OCTET_STRING *C2;-
13};-
14-
15static const ASN1_TEMPLATE SM2_Ciphertext_seq_tt[] = {-
16 { (0), (0), -
17 __builtin_offsetof (-
18 SM2_Ciphertext-
19 , -
20 C1x-
21 )-
22 , "C1x", (&(BIGNUM_it)) },-
23 { (0), (0), -
24 __builtin_offsetof (-
25 SM2_Ciphertext-
26 , -
27 C1y-
28 )-
29 , "C1y", (&(BIGNUM_it)) },-
30 { (0), (0), -
31 __builtin_offsetof (-
32 SM2_Ciphertext-
33 , -
34 C3-
35 )-
36 , "C3", (&(ASN1_OCTET_STRING_it)) },-
37 { (0), (0), -
38 __builtin_offsetof (-
39 SM2_Ciphertext-
40 , -
41 C2-
42 )-
43 , "C2", (&(ASN1_OCTET_STRING_it)) },-
44} ; const ASN1_ITEM SM2_Ciphertext_it = { 0x1, 16, SM2_Ciphertext_seq_tt, sizeof(SM2_Ciphertext_seq_tt) / sizeof(ASN1_TEMPLATE), -
45 ((void *)0)-
46 , sizeof(SM2_Ciphertext), "SM2_Ciphertext" };-
47-
48SM2_Ciphertext *d2i_SM2_Ciphertext(SM2_Ciphertext **a, const unsigned char **in, long len) { return
executed 4 times by 2 tests: return (SM2_Ciphertext *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SM2_Ciphertext_it)));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
(SM2_Ciphertext *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SM2_Ciphertext_it)));
executed 4 times by 2 tests: return (SM2_Ciphertext *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SM2_Ciphertext_it)));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
} int i2d_SM2_Ciphertext(SM2_Ciphertext *a, unsigned char **out) { return
executed 3 times by 2 tests: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SM2_Ciphertext_it)));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SM2_Ciphertext_it)));
executed 3 times by 2 tests: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SM2_Ciphertext_it)));
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
} SM2_Ciphertext *SM2_Ciphertext_new(void) { return
never executed: return (SM2_Ciphertext *)ASN1_item_new((&(SM2_Ciphertext_it)));
(SM2_Ciphertext *)ASN1_item_new((&(SM2_Ciphertext_it)));
never executed: return (SM2_Ciphertext *)ASN1_item_new((&(SM2_Ciphertext_it)));
} void SM2_Ciphertext_free(SM2_Ciphertext *a) { ASN1_item_free((ASN1_VALUE *)a, (&(SM2_Ciphertext_it))); }
executed 4 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
49-
50static size_t ec_field_size(const EC_GROUP *group)-
51{-
52-
53 BIGNUM *p = BN_new();-
54 BIGNUM *a = BN_new();-
55 BIGNUM *b = BN_new();-
56 size_t field_size = 0;-
57-
58 if (p ==
p == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
59 ((void *)0)
p == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
60 || a ==
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
61 ((void *)0)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
62 || b ==
b == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
63 ((void *)0)
b == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
64 )-
65 goto
never executed: goto done;
done;
never executed: goto done;
0
66-
67 if (!EC_GROUP_get_curve(group, p, a, b,
!EC_GROUP_get_... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
68 ((void *)0)
!EC_GROUP_get_... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-12
69 )
!EC_GROUP_get_... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 12 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
)
0-12
70 goto
never executed: goto done;
done;
never executed: goto done;
0
71 field_size = (BN_num_bits(p) + 7) / 8;-
72-
73 done:
code before this statement executed 12 times by 2 tests: done:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
12
74 BN_free(p);-
75 BN_free(a);-
76 BN_free(b);-
77-
78 return
executed 12 times by 2 tests: return field_size;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
field_size;
executed 12 times by 2 tests: return field_size;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
12
79}-
80-
81int sm2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,-
82 size_t *pt_size)-
83{-
84 const size_t field_size = ec_field_size(EC_KEY_get0_group(key));-
85 const int md_size = EVP_MD_size(digest);-
86 size_t overhead;-
87-
88 if (md_size < 0
md_size < 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
89 ERR_put_error(53,(104),(102),__FILE__,71);-
90 return
never executed: return 0;
0;
never executed: return 0;
0
91 }-
92 if (field_size == 0
field_size == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
93 ERR_put_error(53,(104),(105),__FILE__,75);-
94 return
never executed: return 0;
0;
never executed: return 0;
0
95 }-
96-
97 overhead = 10 + 2 * field_size + (size_t)md_size;-
98 if (msg_len <= overhead
msg_len <= overheadDescription
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
99 ERR_put_error(53,(104),(104),__FILE__,81);-
100 return
never executed: return 0;
0;
never executed: return 0;
0
101 }-
102-
103 *pt_size = msg_len - overhead;-
104 return
executed 3 times by 2 tests: return 1;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
1;
executed 3 times by 2 tests: return 1;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3
105}-
106-
107int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,-
108 size_t *ct_size)-
109{-
110 const size_t field_size = ec_field_size(EC_KEY_get0_group(key));-
111 const int md_size = EVP_MD_size(digest);-
112 size_t sz;-
113-
114 if (field_size == 0
field_size == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sm2_internal_test
|| md_size < 0
md_size < 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sm2_internal_test
)
0-2
115 return
never executed: return 0;
0;
never executed: return 0;
0
116-
117-
118 sz = 2 * ASN1_object_size(0, field_size + 1, 2)-
119 + ASN1_object_size(0, md_size, 4)-
120 + ASN1_object_size(0, msg_len, 4);-
121-
122 *ct_size = ASN1_object_size(1, sz, 16);-
123-
124 return
executed 2 times by 1 test: return 1;
Executed by:
  • sm2_internal_test
1;
executed 2 times by 1 test: return 1;
Executed by:
  • sm2_internal_test
2
125}-
126-
127int sm2_encrypt(const EC_KEY *key,-
128 const EVP_MD *digest,-
129 const uint8_t *msg,-
130 size_t msg_len, uint8_t *ciphertext_buf, size_t *ciphertext_len)-
131{-
132 int rc = 0, ciphertext_leni;-
133 size_t i;-
134 BN_CTX *ctx = -
135 ((void *)0)-
136 ;-
137 BIGNUM *k = -
138 ((void *)0)-
139 ;-
140 BIGNUM *x1 = -
141 ((void *)0)-
142 ;-
143 BIGNUM *y1 = -
144 ((void *)0)-
145 ;-
146 BIGNUM *x2 = -
147 ((void *)0)-
148 ;-
149 BIGNUM *y2 = -
150 ((void *)0)-
151 ;-
152 EVP_MD_CTX *hash = EVP_MD_CTX_new();-
153 struct SM2_Ciphertext_st ctext_struct;-
154 const EC_GROUP *group = EC_KEY_get0_group(key);-
155 const BIGNUM *order = EC_GROUP_get0_order(group);-
156 const EC_POINT *P = EC_KEY_get0_public_key(key);-
157 EC_POINT *kG = -
158 ((void *)0)-
159 ;-
160 EC_POINT *kP = -
161 ((void *)0)-
162 ;-
163 uint8_t *msg_mask = -
164 ((void *)0)-
165 ;-
166 uint8_t *x2y2 = -
167 ((void *)0)-
168 ;-
169 uint8_t *C3 = -
170 ((void *)0)-
171 ;-
172 size_t field_size;-
173 const int C3_size = EVP_MD_size(digest);-
174-
175-
176 ctext_struct.C2 = -
177 ((void *)0)-
178 ;-
179 ctext_struct.C3 = -
180 ((void *)0)-
181 ;-
182-
183 if (hash ==
hash == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
184 ((void *)0)
hash == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
185 || C3_size <= 0
C3_size <= 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
186 ERR_put_error(53,(103),((4|64)),__FILE__,140);-
187 goto
never executed: goto done;
done;
never executed: goto done;
0
188 }-
189-
190 field_size = ec_field_size(group);-
191 if (field_size == 0
field_size == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
192 ERR_put_error(53,(103),((4|64)),__FILE__,146);-
193 goto
never executed: goto done;
done;
never executed: goto done;
0
194 }-
195-
196 kG = EC_POINT_new(group);-
197 kP = EC_POINT_new(group);-
198 ctx = BN_CTX_new();-
199 if (kG ==
kG == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
200 ((void *)0)
kG == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
201 || kP ==
kP == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
202 ((void *)0)
kP == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
203 || ctx ==
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
204 ((void *)0)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
205 ) {-
206 ERR_put_error(53,(103),((1|64)),__FILE__,154);-
207 goto
never executed: goto done;
done;
never executed: goto done;
0
208 }-
209-
210 BN_CTX_start(ctx);-
211 k = BN_CTX_get(ctx);-
212 x1 = BN_CTX_get(ctx);-
213 x2 = BN_CTX_get(ctx);-
214 y1 = BN_CTX_get(ctx);-
215 y2 = BN_CTX_get(ctx);-
216-
217 if (y2 ==
y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
218 ((void *)0)
y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
219 ) {-
220 ERR_put_error(53,(103),(3),__FILE__,166);-
221 goto
never executed: goto done;
done;
never executed: goto done;
0
222 }-
223-
224 x2y2 = CRYPTO_zalloc(2 * field_size, __FILE__, 170);-
225 C3 = CRYPTO_zalloc(C3_size, __FILE__, 171);-
226-
227 if (x2y2 ==
x2y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
228 ((void *)0)
x2y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
229 || C3 ==
C3 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
230 ((void *)0)
C3 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
231 ) {-
232 ERR_put_error(53,(103),((1|64)),__FILE__,174);-
233 goto
never executed: goto done;
done;
never executed: goto done;
0
234 }-
235-
236 memset(ciphertext_buf, 0, *ciphertext_len);-
237-
238 if (!BN_priv_rand_range(k, order)
!BN_priv_rand_range(k, order)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
239 ERR_put_error(53,(103),((4|64)),__FILE__,181);-
240 goto
never executed: goto done;
done;
never executed: goto done;
0
241 }-
242-
243 if (!EC_POINT_mul(group, kG, k,
!EC_POINT_mul(...id *)0) , ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
244 ((void *)0)
!EC_POINT_mul(...id *)0) , ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
245 ,
!EC_POINT_mul(...id *)0) , ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
246 ((void *)0)
!EC_POINT_mul(...id *)0) , ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
247 , ctx)
!EC_POINT_mul(...id *)0) , ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
248 || !EC_POINT_get_affine_coordinates(group, kG, x1, y1, ctx)
!EC_POINT_get_..., x1, y1, ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
249 || !EC_POINT_mul(group, kP,
!EC_POINT_mul(...) , P, k, ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
250 ((void *)0)
!EC_POINT_mul(...) , P, k, ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
251 , P, k, ctx)
!EC_POINT_mul(...) , P, k, ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
252 || !EC_POINT_get_affine_coordinates(group, kP, x2, y2, ctx)
!EC_POINT_get_..., x2, y2, ctx)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
253 ERR_put_error(53,(103),(16),__FILE__,189);-
254 goto
never executed: goto done;
done;
never executed: goto done;
0
255 }-
256-
257 if (BN_bn2binpad(x2, x2y2, field_size) < 0
BN_bn2binpad(x...ield_size) < 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
258 || BN_bn2binpad(y2, x2y2 + field_size, field_size) < 0
BN_bn2binpad(y...ield_size) < 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
259 ERR_put_error(53,(103),((4|64)),__FILE__,195);-
260 goto
never executed: goto done;
done;
never executed: goto done;
0
261 }-
262-
263 msg_mask = CRYPTO_zalloc(msg_len, __FILE__, 199);-
264 if (msg_mask ==
msg_mask == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
265 ((void *)0)
msg_mask == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
266 ) {-
267 ERR_put_error(53,(103),((1|64)),__FILE__,201);-
268 goto
never executed: goto done;
done;
never executed: goto done;
0
269 }-
270-
271-
272 if (!ECDH_KDF_X9_62(msg_mask, msg_len, x2y2, 2 * field_size,
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
273 ((void *)0)
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
274 , 0,
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
275 digest)
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
276 ERR_put_error(53,(103),(6),__FILE__,208);-
277 goto
never executed: goto done;
done;
never executed: goto done;
0
278 }-
279-
280 for (i = 0; i != msg_len
i != msg_lenDescription
TRUEevaluated 42 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
; ++i)
3-42
281 msg_mask[i] ^= msg[i];
executed 42 times by 2 tests: msg_mask[i] ^= msg[i];
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
42
282-
283 if (EVP_DigestInit(hash, digest) == 0
EVP_DigestInit..., digest) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
284 || EVP_DigestUpdate(hash, x2y2, field_size) == 0
EVP_DigestUpda...eld_size) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
285 || EVP_DigestUpdate(hash, msg, msg_len) == 0
EVP_DigestUpda... msg_len) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
286 || EVP_DigestUpdate(hash, x2y2 + field_size, field_size) == 0
EVP_DigestUpda...eld_size) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
287 || EVP_DigestFinal(hash, C3,
EVP_DigestFina...id *)0) ) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
288 ((void *)0)
EVP_DigestFina...id *)0) ) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
289 ) == 0
EVP_DigestFina...id *)0) ) == 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
290 ERR_put_error(53,(103),(6),__FILE__,220);-
291 goto
never executed: goto done;
done;
never executed: goto done;
0
292 }-
293-
294 ctext_struct.C1x = x1;-
295 ctext_struct.C1y = y1;-
296 ctext_struct.C3 = ASN1_OCTET_STRING_new();-
297 ctext_struct.C2 = ASN1_OCTET_STRING_new();-
298-
299 if (ctext_struct.C3 ==
ctext_struct.C3 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
300 ((void *)0)
ctext_struct.C3 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
301 || ctext_struct.C2 ==
ctext_struct.C2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
302 ((void *)0)
ctext_struct.C2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
303 ) {-
304 ERR_put_error(53,(103),((1|64)),__FILE__,230);-
305 goto
never executed: goto done;
done;
never executed: goto done;
0
306 }-
307 if (!ASN1_OCTET_STRING_set(ctext_struct.C3, C3, C3_size)
!ASN1_OCTET_ST..., C3, C3_size)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-3
308 || !ASN1_OCTET_STRING_set(ctext_struct.C2, msg_mask, msg_len)
!ASN1_OCTET_ST...mask, msg_len)Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
309 ERR_put_error(53,(103),((4|64)),__FILE__,235);-
310 goto
never executed: goto done;
done;
never executed: goto done;
0
311 }-
312-
313 ciphertext_leni = i2d_SM2_Ciphertext(&ctext_struct, &ciphertext_buf);-
314-
315 if (ciphertext_leni < 0
ciphertext_leni < 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-3
316 ERR_put_error(53,(103),((4|64)),__FILE__,242);-
317 goto
never executed: goto done;
done;
never executed: goto done;
0
318 }-
319 *ciphertext_len = (size_t)ciphertext_leni;-
320-
321 rc = 1;-
322-
323 done:
code before this statement executed 3 times by 2 tests: done:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3
324 ASN1_OCTET_STRING_free(ctext_struct.C2);-
325 ASN1_OCTET_STRING_free(ctext_struct.C3);-
326 CRYPTO_free(msg_mask, __FILE__, 252);-
327 CRYPTO_free(x2y2, __FILE__, 253);-
328 CRYPTO_free(C3, __FILE__, 254);-
329 EVP_MD_CTX_free(hash);-
330 BN_CTX_free(ctx);-
331 EC_POINT_free(kG);-
332 EC_POINT_free(kP);-
333 return
executed 3 times by 2 tests: return rc;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
rc;
executed 3 times by 2 tests: return rc;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
3
334}-
335-
336int sm2_decrypt(const EC_KEY *key,-
337 const EVP_MD *digest,-
338 const uint8_t *ciphertext,-
339 size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len)-
340{-
341 int rc = 0;-
342 int i;-
343 BN_CTX *ctx = -
344 ((void *)0)-
345 ;-
346 const EC_GROUP *group = EC_KEY_get0_group(key);-
347 EC_POINT *C1 = -
348 ((void *)0)-
349 ;-
350 struct SM2_Ciphertext_st *sm2_ctext = -
351 ((void *)0)-
352 ;-
353 BIGNUM *x2 = -
354 ((void *)0)-
355 ;-
356 BIGNUM *y2 = -
357 ((void *)0)-
358 ;-
359 uint8_t *x2y2 = -
360 ((void *)0)-
361 ;-
362 uint8_t *computed_C3 = -
363 ((void *)0)-
364 ;-
365 const size_t field_size = ec_field_size(group);-
366 const int hash_size = EVP_MD_size(digest);-
367 uint8_t *msg_mask = -
368 ((void *)0)-
369 ;-
370 const uint8_t *C2 = -
371 ((void *)0)-
372 ;-
373 const uint8_t *C3 = -
374 ((void *)0)-
375 ;-
376 int msg_len = 0;-
377 EVP_MD_CTX *hash = -
378 ((void *)0)-
379 ;-
380-
381 if (field_size == 0
field_size == 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
|| hash_size <= 0
hash_size <= 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
)
0-4
382 goto
never executed: goto done;
done;
never executed: goto done;
0
383-
384 memset(ptext_buf, 0xFF, *ptext_len);-
385-
386 sm2_ctext = d2i_SM2_Ciphertext(-
387 ((void *)0)-
388 , &ciphertext, ciphertext_len);-
389-
390 if (sm2_ctext ==
sm2_ctext == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
391 ((void *)0)
sm2_ctext == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
392 ) {-
393 ERR_put_error(53,(102),(100),__FILE__,293);-
394 goto
never executed: goto done;
done;
never executed: goto done;
0
395 }-
396-
397 if (sm2_ctext->C3->length != hash_size
sm2_ctext->C3-...h != hash_sizeDescription
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-4
398 ERR_put_error(53,(102),(104),__FILE__,298);-
399 goto
never executed: goto done;
done;
never executed: goto done;
0
400 }-
401-
402 C2 = sm2_ctext->C2->data;-
403 C3 = sm2_ctext->C3->data;-
404 msg_len = sm2_ctext->C2->length;-
405-
406 ctx = BN_CTX_new();-
407 if (ctx ==
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
408 ((void *)0)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
409 ) {-
410 ERR_put_error(53,(102),((1|64)),__FILE__,308);-
411 goto
never executed: goto done;
done;
never executed: goto done;
0
412 }-
413-
414 BN_CTX_start(ctx);-
415 x2 = BN_CTX_get(ctx);-
416 y2 = BN_CTX_get(ctx);-
417-
418 if (y2 ==
y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
419 ((void *)0)
y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
420 ) {-
421 ERR_put_error(53,(102),(3),__FILE__,317);-
422 goto
never executed: goto done;
done;
never executed: goto done;
0
423 }-
424-
425 msg_mask = CRYPTO_zalloc(msg_len, __FILE__, 321);-
426 x2y2 = CRYPTO_zalloc(2 * field_size, __FILE__, 322);-
427 computed_C3 = CRYPTO_zalloc(hash_size, __FILE__, 323);-
428-
429 if (msg_mask ==
msg_mask == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
430 ((void *)0)
msg_mask == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
431 || x2y2 ==
x2y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
432 ((void *)0)
x2y2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
433 || computed_C3 ==
computed_C3 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
434 ((void *)0)
computed_C3 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
435 ) {-
436 ERR_put_error(53,(102),((1|64)),__FILE__,326);-
437 goto
never executed: goto done;
done;
never executed: goto done;
0
438 }-
439-
440 C1 = EC_POINT_new(group);-
441 if (C1 ==
C1 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
442 ((void *)0)
C1 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
443 ) {-
444 ERR_put_error(53,(102),((1|64)),__FILE__,332);-
445 goto
never executed: goto done;
done;
never executed: goto done;
0
446 }-
447-
448 if (!EC_POINT_set_affine_coordinates(group, C1, sm2_ctext->C1x,
!EC_POINT_set_...ext->C1y, ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
449 sm2_ctext->C1y, ctx)
!EC_POINT_set_...ext->C1y, ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
450 || !EC_POINT_mul(group, C1,
!EC_POINT_mul(...key(key), ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
451 ((void *)0)
!EC_POINT_mul(...key(key), ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
452 , C1, EC_KEY_get0_private_key(key),
!EC_POINT_mul(...key(key), ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
453 ctx)
!EC_POINT_mul(...key(key), ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
454 || !EC_POINT_get_affine_coordinates(group, C1, x2, y2, ctx)
!EC_POINT_get_..., x2, y2, ctx)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-4
455 ERR_put_error(53,(102),(16),__FILE__,341);-
456 goto
never executed: goto done;
done;
never executed: goto done;
0
457 }-
458-
459 if (BN_bn2binpad(x2, x2y2, field_size) < 0
BN_bn2binpad(x...ield_size) < 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
460 || BN_bn2binpad(y2, x2y2 + field_size, field_size) < 0
BN_bn2binpad(y...ield_size) < 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
461 || !ECDH_KDF_X9_62(msg_mask, msg_len, x2y2, 2 * field_size,
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
462 ((void *)0)
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
463 , 0,
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
464 digest)
!ECDH_KDF_X9_6...) , 0, digest)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-4
465 ERR_put_error(53,(102),((4|64)),__FILE__,349);-
466 goto
never executed: goto done;
done;
never executed: goto done;
0
467 }-
468-
469 for (i = 0; i != msg_len
i != msg_lenDescription
TRUEevaluated 76 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
; ++i)
4-76
470 ptext_buf[i] = C2[i] ^ msg_mask[i];
executed 76 times by 2 tests: ptext_buf[i] = C2[i] ^ msg_mask[i];
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
76
471-
472 hash = EVP_MD_CTX_new();-
473 if (hash ==
hash == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
474 ((void *)0)
hash == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
475 ) {-
476 ERR_put_error(53,(102),((1|64)),__FILE__,358);-
477 goto
never executed: goto done;
done;
never executed: goto done;
0
478 }-
479-
480 if (!EVP_DigestInit(hash, digest)
!EVP_DigestInit(hash, digest)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
481 || !EVP_DigestUpdate(hash, x2y2, field_size)
!EVP_DigestUpd...2, field_size)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
482 || !EVP_DigestUpdate(hash, ptext_buf, msg_len)
!EVP_DigestUpd..._buf, msg_len)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
483 || !EVP_DigestUpdate(hash, x2y2 + field_size, field_size)
!EVP_DigestUpd...e, field_size)Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
484 || !EVP_DigestFinal(hash, computed_C3,
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
485 ((void *)0)
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
0-4
486 )
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-4
487 ERR_put_error(53,(102),(6),__FILE__,367);-
488 goto
never executed: goto done;
done;
never executed: goto done;
0
489 }-
490-
491 if (CRYPTO_memcmp(computed_C3, C3, hash_size) != 0
CRYPTO_memcmp(...ash_size) != 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
) {
0-4
492 ERR_put_error(53,(102),(102),__FILE__,372);-
493 goto
never executed: goto done;
done;
never executed: goto done;
0
494 }-
495-
496 rc = 1;-
497 *ptext_len = msg_len;-
498-
499 done:
code before this statement executed 4 times by 2 tests: done:
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4
500 if (rc == 0
rc == 0Description
TRUEnever evaluated
FALSEevaluated 4 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • sm2_internal_test
)
0-4
501 memset(ptext_buf, 0, *ptext_len);
never executed: memset(ptext_buf, 0, *ptext_len);
0
502-
503 CRYPTO_free(msg_mask, __FILE__, 383);-
504 CRYPTO_free(x2y2, __FILE__, 384);-
505 CRYPTO_free(computed_C3, __FILE__, 385);-
506 EC_POINT_free(C1);-
507 BN_CTX_free(ctx);-
508 SM2_Ciphertext_free(sm2_ctext);-
509 EVP_MD_CTX_free(hash);-
510-
511 return
executed 4 times by 2 tests: return rc;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
rc;
executed 4 times by 2 tests: return rc;
Executed by:
  • libcrypto.so.1.1
  • sm2_internal_test
4
512}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2