Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | typedef struct SM2_Ciphertext_st SM2_Ciphertext; | - |
6 | SM2_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 | | - |
8 | struct SM2_Ciphertext_st { | - |
9 | BIGNUM *C1x; | - |
10 | BIGNUM *C1y; | - |
11 | ASN1_OCTET_STRING *C3; | - |
12 | ASN1_OCTET_STRING *C2; | - |
13 | }; | - |
14 | | - |
15 | static 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 | | - |
48 | SM2_Ciphertext *d2i_SM2_Ciphertext(SM2_Ciphertext **a, const unsigned char **in, long len) { returnexecuted 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) { returnexecuted 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) { returnnever 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 | | - |
50 | static 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 == TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
59 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
60 | || a == TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
61 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
62 | || b == TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
63 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated 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, TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
68 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-12 |
69 | )TRUE | never evaluated | FALSE | evaluated 12 times by 2 testsEvaluated 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 | returnexecuted 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 | | - |
81 | int 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 < 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 <= overheadTRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 | returnexecuted 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 | | - |
107 | int 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 == 0TRUE | never evaluated | FALSE | evaluated 2 times by 1 test |
|| md_size < 0TRUE | never evaluated | FALSE | evaluated 2 times by 1 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 | returnexecuted 2 times by 1 test: return 1; 1;executed 2 times by 1 test: return 1; | 2 |
125 | } | - |
126 | | - |
127 | int 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 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
184 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
185 | || C3_size <= 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
200 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
201 | || kP == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
202 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
203 | || ctx == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
204 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
218 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
228 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
229 | || C3 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
230 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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, TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
244 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
245 | , TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
246 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
247 | , ctx)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
248 | || !EC_POINT_get_affine_coordinates(group, kG, x1, y1, ctx)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
249 | || !EC_POINT_mul(group, kP, TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
250 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
251 | , P, k, ctx)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
252 | || !EC_POINT_get_affine_coordinates(group, kP, x2, y2, ctx)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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) < 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
258 | || BN_bn2binpad(y2, x2y2 + field_size, field_size) < 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
265 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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, TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
273 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
274 | , 0,TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
275 | digest)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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_lenTRUE | evaluated 42 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
| FALSE | evaluated 3 times by 2 testsEvaluated 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) == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
284 | || EVP_DigestUpdate(hash, x2y2, field_size) == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
285 | || EVP_DigestUpdate(hash, msg, msg_len) == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
286 | || EVP_DigestUpdate(hash, x2y2 + field_size, field_size) == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
287 | || EVP_DigestFinal(hash, C3, TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
288 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
289 | ) == 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
300 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
301 | || ctext_struct.C2 == TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
302 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-3 |
308 | || !ASN1_OCTET_STRING_set(ctext_struct.C2, msg_mask, msg_len)TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 < 0TRUE | never evaluated | FALSE | evaluated 3 times by 2 testsEvaluated 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 | returnexecuted 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 | | - |
336 | int 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 == 0TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
|| hash_size <= 0TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
391 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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_sizeTRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
408 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
419 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
430 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
431 | || x2y2 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
432 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
433 | || computed_C3 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
434 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
442 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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,TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
449 | sm2_ctext->C1y, ctx)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
450 | || !EC_POINT_mul(group, C1, TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
451 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
452 | , C1, EC_KEY_get0_private_key(key),TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
453 | ctx)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
454 | || !EC_POINT_get_affine_coordinates(group, C1, x2, y2, ctx)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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) < 0TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
460 | || BN_bn2binpad(y2, x2y2 + field_size, field_size) < 0TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
461 | || !ECDH_KDF_X9_62(msg_mask, msg_len, x2y2, 2 * field_size, TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
462 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
463 | , 0,TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
464 | digest)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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_lenTRUE | evaluated 76 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
| FALSE | evaluated 4 times by 2 testsEvaluated 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 == TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
474 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
481 | || !EVP_DigestUpdate(hash, x2y2, field_size)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
482 | || !EVP_DigestUpdate(hash, ptext_buf, msg_len)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
483 | || !EVP_DigestUpdate(hash, x2y2 + field_size, field_size)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
484 | || !EVP_DigestFinal(hash, computed_C3, TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
485 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated by:- libcrypto.so.1.1
- sm2_internal_test
|
| 0-4 |
486 | )TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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) != 0TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 == 0TRUE | never evaluated | FALSE | evaluated 4 times by 2 testsEvaluated 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 | returnexecuted 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 | } | - |
| | |