OpenCoverage

gostr341001_ameth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/gost/gostr341001_ameth.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7static void-
8pkey_free_gost01(EVP_PKEY *key)-
9{-
10 GOST_KEY_free(key->pkey.gost);-
11}
never executed: end of block
0
12-
13-
14-
15-
16-
17static int-
18decode_gost01_algor_params(EVP_PKEY *pkey, const unsigned char **p, int len)-
19{-
20 int param_nid = 0, digest_nid = 0;-
21 GOST_KEY_PARAMS *gkp = -
22 ((void *)0)-
23 ;-
24 EC_GROUP *group;-
25 GOST_KEY *ec;-
26-
27 gkp = d2i_GOST_KEY_PARAMS(-
28 ((void *)0)-
29 , p, len);-
30 if (gkp ==
gkp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
31 ((void *)0)
gkp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
32 ) {-
33 ERR_put_error(50,(0xfff),(105),__FILE__,89);-
34 return
never executed: return 0;
0;
never executed: return 0;
0
35 }-
36 param_nid = OBJ_obj2nid(gkp->key_params);-
37 digest_nid = OBJ_obj2nid(gkp->hash_params);-
38 GOST_KEY_PARAMS_free(gkp);-
39-
40 ec = pkey->pkey.gost;-
41 if (ec ==
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
42 ((void *)0)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
43 ) {-
44 ec = GOST_KEY_new();-
45 if (ec ==
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
46 ((void *)0)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
47 )-
48 return
never executed: return 0;
0;
never executed: return 0;
0
49 if (EVP_PKEY_assign((pkey),811, (char *)(ec)) == 0
EVP_PKEY_assig...r *)(ec)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
50 return
never executed: return 0;
0;
never executed: return 0;
0
51 }
never executed: end of block
0
52-
53 group = EC_GROUP_new_by_curve_name(param_nid);-
54 if (group ==
group == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
55 ((void *)0)
group == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
56 )-
57 return
never executed: return 0;
0;
never executed: return 0;
0
58 EC_GROUP_set_asn1_flag(group, 0x001);-
59 if (GOST_KEY_set_group(ec, group) == 0
GOST_KEY_set_g...c, group) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
60 EC_GROUP_free(group);-
61 return
never executed: return 0;
0;
never executed: return 0;
0
62 }-
63 EC_GROUP_free(group);-
64 if (GOST_KEY_set_digest(ec, digest_nid) == 0
GOST_KEY_set_d...gest_nid) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
65 return
never executed: return 0;
0;
never executed: return 0;
0
66 return
never executed: return 1;
1;
never executed: return 1;
0
67}-
68-
69static ASN1_STRING *-
70encode_gost01_algor_params(const EVP_PKEY *key)-
71{-
72 ASN1_STRING *params = ASN1_STRING_new();-
73 GOST_KEY_PARAMS *gkp = GOST_KEY_PARAMS_new();-
74 int pkey_param_nid = 0;-
75-
76 if (params ==
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
77 ((void *)0)
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
78 || gkp ==
gkp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
79 ((void *)0)
gkp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
80 ) {-
81 ERR_put_error(50,(0xfff),((1|64)),__FILE__,127);-
82 ASN1_STRING_free(params);-
83 params = -
84 ((void *)0)-
85 ;-
86 goto
never executed: goto err;
err;
never executed: goto err;
0
87 }-
88-
89 pkey_param_nid =-
90 EC_GROUP_get_curve_name(GOST_KEY_get0_group(key->pkey.gost));-
91 gkp->key_params = OBJ_nid2obj(pkey_param_nid);-
92 gkp->hash_params = OBJ_nid2obj(GOST_KEY_get_digest(key->pkey.gost));-
93-
94 params->length = i2d_GOST_KEY_PARAMS(gkp, &params->data);-
95 if (params->length <= 0
params->length <= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
96 ERR_put_error(50,(0xfff),((1|64)),__FILE__,140);-
97 ASN1_STRING_free(params);-
98 params = -
99 ((void *)0)-
100 ;-
101 goto
never executed: goto err;
err;
never executed: goto err;
0
102 }-
103 params->type = 16;-
104err:
code before this statement never executed: err:
0
105 GOST_KEY_PARAMS_free(gkp);-
106 return
never executed: return params;
params;
never executed: return params;
0
107}-
108-
109static int-
110pub_cmp_gost01(const EVP_PKEY *a, const EVP_PKEY *b)-
111{-
112 const GOST_KEY *ea = a->pkey.gost;-
113 const GOST_KEY *eb = b->pkey.gost;-
114 const EC_POINT *ka, *kb;-
115 int ret = 0;-
116-
117 if (ea ==
ea == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
118 ((void *)0)
ea == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
119 || eb ==
eb == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
120 ((void *)0)
eb == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
121 )-
122 return
never executed: return 0;
0;
never executed: return 0;
0
123 ka = GOST_KEY_get0_public_key(ea);-
124 kb = GOST_KEY_get0_public_key(eb);-
125 if (ka ==
ka == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
126 ((void *)0)
ka == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
127 || kb ==
kb == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
128 ((void *)0)
kb == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
129 )-
130 return
never executed: return 0;
0;
never executed: return 0;
0
131 ret = (0 == EC_POINT_cmp(GOST_KEY_get0_group(ea), ka, kb, -
132 ((void *)0)-
133 ));-
134 return
never executed: return ret;
ret;
never executed: return ret;
0
135}-
136-
137static int-
138pkey_size_gost01(const EVP_PKEY *pk)-
139{-
140 if (GOST_KEY_get_digest(pk->pkey.gost) == 942
GOST_KEY_get_d...y.gost) == 942Description
TRUEnever evaluated
FALSEnever evaluated
)
0
141 return
never executed: return 128;
128;
never executed: return 128;
0
142 return
never executed: return 64;
64;
never executed: return 64;
0
143}-
144-
145static int-
146pkey_bits_gost01(const EVP_PKEY *pk)-
147{-
148 if (GOST_KEY_get_digest(pk->pkey.gost) == 942
GOST_KEY_get_d...y.gost) == 942Description
TRUEnever evaluated
FALSEnever evaluated
)
0
149 return
never executed: return 512;
512;
never executed: return 512;
0
150 return
never executed: return 256;
256;
never executed: return 256;
0
151}-
152-
153static int-
154pub_decode_gost01(EVP_PKEY *pk, X509_PUBKEY *pub)-
155{-
156 X509_ALGOR *palg = -
157 ((void *)0)-
158 ;-
159 const unsigned char *pubkey_buf = -
160 ((void *)0)-
161 ;-
162 const unsigned char *p;-
163 ASN1_OBJECT *palgobj = -
164 ((void *)0)-
165 ;-
166 int pub_len;-
167 BIGNUM *X, *Y;-
168 ASN1_OCTET_STRING *octet = -
169 ((void *)0)-
170 ;-
171 int len;-
172 int ret;-
173 int ptype = -1;-
174 ASN1_STRING *pval = -
175 ((void *)0)-
176 ;-
177-
178 if (X509_PUBKEY_get0_param(&palgobj, &pubkey_buf, &pub_len, &palg, pub)
X509_PUBKEY_ge...alg, pub) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
179 == 0
X509_PUBKEY_ge...alg, pub) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
180 return
never executed: return 0;
0;
never executed: return 0;
0
181 (void)EVP_PKEY_assign((pk),811, (char *)(-
182 ((void *)0)-
183 ));-
184 X509_ALGOR_get0(-
185 ((void *)0)-
186 , &ptype, (const void **)&pval, palg);-
187 if (ptype != 16
ptype != 16Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
188 ERR_put_error(50,(0xfff),(104),__FILE__,206);-
189 return
never executed: return 0;
0;
never executed: return 0;
0
190 }-
191 p = pval->data;-
192 if (decode_gost01_algor_params(pk, &p, pval->length) == 0
decode_gost01_...->length) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
193 return
never executed: return 0;
0;
never executed: return 0;
0
194-
195 octet = d2i_ASN1_OCTET_STRING(-
196 ((void *)0)-
197 , &pubkey_buf, pub_len);-
198 if (octet ==
octet == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
199 ((void *)0)
octet == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
200 ) {-
201 ERR_put_error(50,(0xfff),((1|64)),__FILE__,215);-
202 return
never executed: return 0;
0;
never executed: return 0;
0
203 }-
204 len = octet->length / 2;-
205-
206 X = GOST_le2bn(octet->data, len, -
207 ((void *)0)-
208 );-
209 Y = GOST_le2bn(octet->data + len, len, -
210 ((void *)0)-
211 );-
212-
213 ASN1_OCTET_STRING_free(octet);-
214-
215 ret = GOST_KEY_set_public_key_affine_coordinates(pk->pkey.gost, X, Y);-
216 if (ret == 0
ret == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
217 ERR_put_error(50,(0xfff),(16),__FILE__,227);
never executed: ERR_put_error(50,(0xfff),(16),__FILE__,227);
0
218-
219 BN_free(X);-
220 BN_free(Y);-
221-
222 return
never executed: return ret;
ret;
never executed: return ret;
0
223}-
224-
225static int-
226pub_encode_gost01(X509_PUBKEY *pub, const EVP_PKEY *pk)-
227{-
228 ASN1_OBJECT *algobj = -
229 ((void *)0)-
230 ;-
231 ASN1_OCTET_STRING *octet = -
232 ((void *)0)-
233 ;-
234 ASN1_STRING *params = -
235 ((void *)0)-
236 ;-
237 void *pval = -
238 ((void *)0)-
239 ;-
240 unsigned char *buf = -
241 ((void *)0)-
242 , *sptr;-
243 int key_size, ret = 0;-
244 const EC_POINT *pub_key;-
245 BIGNUM *X = -
246 ((void *)0)-
247 , *Y = -
248 ((void *)0)-
249 ;-
250 const GOST_KEY *ec = pk->pkey.gost;-
251 int ptype = -1;-
252-
253 algobj = OBJ_nid2obj(GostR3410_get_pk_digest(GOST_KEY_get_digest(ec)));-
254 if (pk->save_parameters
pk->save_parametersDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
255 params = encode_gost01_algor_params(pk);-
256 if (params ==
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
257 ((void *)0)
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
258 )-
259 return
never executed: return 0;
0;
never executed: return 0;
0
260 pval = params;-
261 ptype = 16;-
262 }
never executed: end of block
0
263-
264 key_size = GOST_KEY_get_size(ec);-
265-
266 pub_key = GOST_KEY_get0_public_key(ec);-
267 if (pub_key ==
pub_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
268 ((void *)0)
pub_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
269 ) {-
270 ERR_put_error(50,(0xfff),(118),__FILE__,262);-
271 goto
never executed: goto err;
err;
never executed: goto err;
0
272 }-
273-
274 octet = ASN1_OCTET_STRING_new();-
275 if (octet ==
octet == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
276 ((void *)0)
octet == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
277 ) {-
278 ERR_put_error(50,(0xfff),((1|64)),__FILE__,268);-
279 goto
never executed: goto err;
err;
never executed: goto err;
0
280 }-
281-
282 ret = ASN1_STRING_set(octet, -
283 ((void *)0)-
284 , 2 * key_size);-
285 if (ret == 0
ret == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
286 ERR_put_error(50,(0xfff),((4|64)),__FILE__,274);-
287 goto
never executed: goto err;
err;
never executed: goto err;
0
288 }-
289-
290 sptr = ASN1_STRING_data(octet);-
291-
292 X = BN_new();-
293 Y = BN_new();-
294 if (X ==
X == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
295 ((void *)0)
X == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
296 || Y ==
Y == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
297 ((void *)0)
Y == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
298 ) {-
299 ERR_put_error(50,(0xfff),((1|64)),__FILE__,283);-
300 goto
never executed: goto err;
err;
never executed: goto err;
0
301 }-
302-
303 if (EC_POINT_get_affine_coordinates_GFp(GOST_KEY_get0_group(ec),
EC_POINT_get_a...id *)0) ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
304 pub_key, X, Y,
EC_POINT_get_a...id *)0) ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
305 ((void *)0)
EC_POINT_get_a...id *)0) ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
306 ) == 0
EC_POINT_get_a...id *)0) ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
307 ERR_put_error(50,(0xfff),(16),__FILE__,289);-
308 goto
never executed: goto err;
err;
never executed: goto err;
0
309 }-
310-
311 GOST_bn2le(X, sptr, key_size);-
312 GOST_bn2le(Y, sptr + key_size, key_size);-
313-
314 BN_free(Y);-
315 BN_free(X);-
316-
317 ret = i2d_ASN1_OCTET_STRING(octet, &buf);-
318 ASN1_BIT_STRING_free(octet);-
319 if (ret < 0
ret < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
320 return
never executed: return 0;
0;
never executed: return 0;
0
321-
322 return
never executed: return X509_PUBKEY_set0_param(pub, algobj, ptype, pval, buf, ret);
X509_PUBKEY_set0_param(pub, algobj, ptype, pval, buf, ret);
never executed: return X509_PUBKEY_set0_param(pub, algobj, ptype, pval, buf, ret);
0
323-
324err:-
325 BN_free(Y);-
326 BN_free(X);-
327 ASN1_BIT_STRING_free(octet);-
328 ASN1_STRING_free(params);-
329 return
never executed: return 0;
0;
never executed: return 0;
0
330}-
331-
332static int-
333param_print_gost01(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)-
334{-
335 int param_nid =-
336 EC_GROUP_get_curve_name(GOST_KEY_get0_group(pkey->pkey.gost));-
337-
338 if (BIO_indent(out, indent, 128) == 0
BIO_indent(out...ent, 128) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
339 return
never executed: return 0;
0;
never executed: return 0;
0
340 BIO_printf(out, "Parameter set: %s\n", OBJ_nid2ln(param_nid));-
341 if (BIO_indent(out, indent, 128) == 0
BIO_indent(out...ent, 128) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
342 return
never executed: return 0;
0;
never executed: return 0;
0
343 BIO_printf(out, "Digest Algorithm: %s\n",-
344 OBJ_nid2ln(GOST_KEY_get_digest(pkey->pkey.gost)));-
345 return
never executed: return 1;
1;
never executed: return 1;
0
346}-
347-
348static int-
349pub_print_gost01(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)-
350{-
351 BN_CTX *ctx = BN_CTX_new();-
352 BIGNUM *X, *Y;-
353 const EC_POINT *pubkey;-
354 const EC_GROUP *group;-
355-
356 if (ctx ==
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
357 ((void *)0)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
358 ) {-
359 ERR_put_error(50,(0xfff),((1|64)),__FILE__,339);-
360 return
never executed: return 0;
0;
never executed: return 0;
0
361 }-
362 BN_CTX_start(ctx);-
363 if ((
(X = BN_CTX_ge...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
X = BN_CTX_get(ctx)) ==
(X = BN_CTX_ge...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
364 ((void *)0)
(X = BN_CTX_ge...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
365 )-
366 goto
never executed: goto err;
err;
never executed: goto err;
0
367 if ((
(Y = BN_CTX_ge...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
Y = BN_CTX_get(ctx)) ==
(Y = BN_CTX_ge...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
368 ((void *)0)
(Y = BN_CTX_ge...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
369 )-
370 goto
never executed: goto err;
err;
never executed: goto err;
0
371 pubkey = GOST_KEY_get0_public_key(pkey->pkey.gost);-
372 group = GOST_KEY_get0_group(pkey->pkey.gost);-
373 if (EC_POINT_get_affine_coordinates_GFp(group, pubkey, X, Y,
EC_POINT_get_a..., Y, ctx) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
374 ctx) == 0
EC_POINT_get_a..., Y, ctx) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
375 ERR_put_error(50,(0xfff),(16),__FILE__,351);-
376 goto
never executed: goto err;
err;
never executed: goto err;
0
377 }-
378 if (BIO_indent(out, indent, 128) == 0
BIO_indent(out...ent, 128) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
379 goto
never executed: goto err;
err;
never executed: goto err;
0
380 BIO_printf(out, "Public key:\n");-
381 if (BIO_indent(out, indent + 3, 128) == 0
BIO_indent(out...+ 3, 128) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
382 goto
never executed: goto err;
err;
never executed: goto err;
0
383 BIO_printf(out, "X:");-
384 BN_print(out, X);-
385 BIO_printf(out, "\n");-
386 BIO_indent(out, indent + 3, 128);-
387 BIO_printf(out, "Y:");-
388 BN_print(out, Y);-
389 BIO_printf(out, "\n");-
390-
391 BN_CTX_end(ctx);-
392 BN_CTX_free(ctx);-
393-
394 return
never executed: return param_print_gost01(out, pkey, indent, pctx);
param_print_gost01(out, pkey, indent, pctx);
never executed: return param_print_gost01(out, pkey, indent, pctx);
0
395-
396err:-
397 BN_CTX_end(ctx);-
398 BN_CTX_free(ctx);-
399 return
never executed: return 0;
0;
never executed: return 0;
0
400}-
401-
402static int-
403priv_print_gost01(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)-
404{-
405 const BIGNUM *key;-
406-
407 if (BIO_indent(out, indent, 128) == 0
BIO_indent(out...ent, 128) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
408 return
never executed: return 0;
0;
never executed: return 0;
0
409 BIO_printf(out, "Private key: ");-
410 key = GOST_KEY_get0_private_key(pkey->pkey.gost);-
411 if (key ==
key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
412 ((void *)0)
key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
413 )-
414 BIO_printf(out, "<undefined)");
never executed: BIO_printf(out, "<undefined)");
0
415 else-
416 BN_print(out, key);
never executed: BN_print(out, key);
0
417 BIO_printf(out, "\n");-
418-
419 return
never executed: return pub_print_gost01(out, pkey, indent, pctx);
pub_print_gost01(out, pkey, indent, pctx);
never executed: return pub_print_gost01(out, pkey, indent, pctx);
0
420}-
421-
422static int-
423priv_decode_gost01(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf)-
424{-
425 const unsigned char *pkey_buf = -
426 ((void *)0)-
427 , *p = -
428 ((void *)0)-
429 ;-
430 int priv_len = 0;-
431 BIGNUM *pk_num = -
432 ((void *)0)-
433 ;-
434 int ret = 0;-
435 const X509_ALGOR *palg = -
436 ((void *)0)-
437 ;-
438 const ASN1_OBJECT *palg_obj = -
439 ((void *)0)-
440 ;-
441 ASN1_INTEGER *priv_key = -
442 ((void *)0)-
443 ;-
444 GOST_KEY *ec;-
445 int ptype = -1;-
446 ASN1_STRING *pval = -
447 ((void *)0)-
448 ;-
449-
450 if (PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf) == 0
PKCS8_pkey_get...g, p8inf) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
451 return
never executed: return 0;
0;
never executed: return 0;
0
452 (void)EVP_PKEY_assign((pk),811, (char *)(-
453 ((void *)0)-
454 ));-
455 X509_ALGOR_get0(-
456 ((void *)0)-
457 , &ptype, (const void **)&pval, palg);-
458 if (ptype != 16
ptype != 16Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
459 ERR_put_error(50,(0xfff),(104),__FILE__,415);-
460 return
never executed: return 0;
0;
never executed: return 0;
0
461 }-
462 p = pval->data;-
463 if (decode_gost01_algor_params(pk, &p, pval->length) == 0
decode_gost01_...->length) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
464 return
never executed: return 0;
0;
never executed: return 0;
0
465 p = pkey_buf;-
466 if (4 == *p
4 == *pDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
467-
468 ASN1_OCTET_STRING *s =-
469 d2i_ASN1_OCTET_STRING(-
470 ((void *)0)-
471 , &p, priv_len);-
472-
473 if (s ==
s == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
474 ((void *)0)
s == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
475 ) {-
476 ERR_put_error(50,(0xfff),(114),__FILE__,428);-
477 ASN1_STRING_free(s);-
478 return
never executed: return 0;
0;
never executed: return 0;
0
479 }-
480-
481 pk_num = GOST_le2bn(s->data, s->length, -
482 ((void *)0)-
483 );-
484 ASN1_STRING_free(s);-
485 }
never executed: end of block
else {
0
486 priv_key = d2i_ASN1_INTEGER(-
487 ((void *)0)-
488 , &p, priv_len);-
489 if (priv_key ==
priv_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
490 ((void *)0)
priv_key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
491 )-
492 return
never executed: return 0;
0;
never executed: return 0;
0
493 ret = ((pk_num = ASN1_INTEGER_to_BN(priv_key, -
494 ((void *)0)-
495 )) != -
496 ((void *)0)-
497 );-
498 ASN1_INTEGER_free(priv_key);-
499 if (ret == 0
ret == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
500 ERR_put_error(50,(0xfff),(114),__FILE__,442);-
501 return
never executed: return 0;
0;
never executed: return 0;
0
502 }-
503 }
never executed: end of block
0
504-
505 ec = pk->pkey.gost;-
506 if (ec ==
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
507 ((void *)0)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
508 ) {-
509 ec = GOST_KEY_new();-
510 if (ec ==
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
511 ((void *)0)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
512 ) {-
513 BN_free(pk_num);-
514 return
never executed: return 0;
0;
never executed: return 0;
0
515 }-
516 if (EVP_PKEY_assign((pk),811, (char *)(ec)) == 0
EVP_PKEY_assig...r *)(ec)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
517 BN_free(pk_num);-
518 GOST_KEY_free(ec);-
519 return
never executed: return 0;
0;
never executed: return 0;
0
520 }-
521 }
never executed: end of block
0
522 if (GOST_KEY_set_private_key(ec, pk_num) == 0
GOST_KEY_set_p..., pk_num) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
523 BN_free(pk_num);-
524 return
never executed: return 0;
0;
never executed: return 0;
0
525 }-
526 ret = 0;-
527 if (EVP_PKEY_missing_parameters(pk) == 0
EVP_PKEY_missi...eters(pk) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
528 ret = gost2001_compute_public(ec) != 0;
never executed: ret = gost2001_compute_public(ec) != 0;
0
529 BN_free(pk_num);-
530-
531 return
never executed: return ret;
ret;
never executed: return ret;
0
532}-
533-
534static int-
535priv_encode_gost01(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk)-
536{-
537 ASN1_OBJECT *algobj =-
538 OBJ_nid2obj(GostR3410_get_pk_digest(GOST_KEY_get_digest(pk->pkey.gost)));-
539 ASN1_STRING *params = encode_gost01_algor_params(pk);-
540 unsigned char *priv_buf = -
541 ((void *)0)-
542 ;-
543 int priv_len;-
544 ASN1_INTEGER *asn1key = -
545 ((void *)0)-
546 ;-
547-
548 if (params ==
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
549 ((void *)0)
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
550 )-
551 return
never executed: return 0;
0;
never executed: return 0;
0
552-
553 asn1key = BN_to_ASN1_INTEGER(GOST_KEY_get0_private_key(pk->pkey.gost),-
554 -
555 ((void *)0)-
556 );-
557 if (asn1key ==
asn1key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
558 ((void *)0)
asn1key == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
559 ) {-
560 ASN1_STRING_free(params);-
561 return
never executed: return 0;
0;
never executed: return 0;
0
562 }-
563 priv_len = i2d_ASN1_INTEGER(asn1key, &priv_buf);-
564 ASN1_INTEGER_free(asn1key);-
565 return
never executed: return PKCS8_pkey_set0(p8, algobj, 0, 16, params, priv_buf, priv_len);
PKCS8_pkey_set0(p8, algobj, 0, 16, params, priv_buf,
never executed: return PKCS8_pkey_set0(p8, algobj, 0, 16, params, priv_buf, priv_len);
0
566 priv_len);
never executed: return PKCS8_pkey_set0(p8, algobj, 0, 16, params, priv_buf, priv_len);
0
567}-
568-
569static int-
570param_encode_gost01(const EVP_PKEY *pkey, unsigned char **pder)-
571{-
572 ASN1_STRING *params = encode_gost01_algor_params(pkey);-
573 int len;-
574-
575 if (params ==
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
576 ((void *)0)
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
577 )-
578 return
never executed: return 0;
0;
never executed: return 0;
0
579 len = params->length;-
580 if (pder !=
pder != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
581 ((void *)0)
pder != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
582 )-
583 memcpy(*pder, params->data, params->length);
never executed: memcpy(*pder, params->data, params->length);
0
584 ASN1_STRING_free(params);-
585 return
never executed: return len;
len;
never executed: return len;
0
586}-
587-
588static int-
589param_decode_gost01(EVP_PKEY *pkey, const unsigned char **pder, int derlen)-
590{-
591 ASN1_OBJECT *obj = -
592 ((void *)0)-
593 ;-
594 int nid;-
595 GOST_KEY *ec;-
596 EC_GROUP *group;-
597 int ret;-
598-
599-
600 if ((
(16 | 0x20) == **pderDescription
TRUEnever evaluated
FALSEnever evaluated
16 | 0x20) == **pder
(16 | 0x20) == **pderDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
601 return
never executed: return decode_gost01_algor_params(pkey, pder, derlen);
decode_gost01_algor_params(pkey, pder, derlen);
never executed: return decode_gost01_algor_params(pkey, pder, derlen);
0
602-
603-
604 if (d2i_ASN1_OBJECT(&obj, pder, derlen) ==
d2i_ASN1_OBJEC...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
605 ((void *)0)
d2i_ASN1_OBJEC...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
606 ) {-
607 ERR_put_error(50,(0xfff),((1|64)),__FILE__,527);-
608 return
never executed: return 0;
0;
never executed: return 0;
0
609 }-
610 nid = OBJ_obj2nid(obj);-
611 ASN1_OBJECT_free(obj);-
612-
613 ec = GOST_KEY_new();-
614 if (ec ==
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
615 ((void *)0)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
616 ) {-
617 ERR_put_error(50,(0xfff),((1|64)),__FILE__,535);-
618 return
never executed: return 0;
0;
never executed: return 0;
0
619 }-
620 group = EC_GROUP_new_by_curve_name(nid);-
621 if (group ==
group == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
622 ((void *)0)
group == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
623 ) {-
624 ERR_put_error(50,(0xfff),(119),__FILE__,540);-
625 GOST_KEY_free(ec);-
626 return
never executed: return 0;
0;
never executed: return 0;
0
627 }-
628-
629 EC_GROUP_set_asn1_flag(group, 0x001);-
630 if (GOST_KEY_set_group(ec, group) == 0
GOST_KEY_set_g...c, group) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
631 ERR_put_error(50,(0xfff),(16),__FILE__,547);-
632 EC_GROUP_free(group);-
633 GOST_KEY_free(ec);-
634 return
never executed: return 0;
0;
never executed: return 0;
0
635 }-
636 EC_GROUP_free(group);-
637 if (GOST_KEY_set_digest(ec,
GOST_KEY_set_d...(ec, 822) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
638 822) == 0
GOST_KEY_set_d...(ec, 822) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
639 ERR_put_error(50,(0xfff),(100),__FILE__,555);-
640 GOST_KEY_free(ec);-
641 return
never executed: return 0;
0;
never executed: return 0;
0
642 }-
643 ret = EVP_PKEY_assign((pkey),811, (char *)(ec));-
644 if (ret == 0
ret == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
645 GOST_KEY_free(ec);
never executed: GOST_KEY_free(ec);
0
646 return
never executed: return ret;
ret;
never executed: return ret;
0
647}-
648-
649static int-
650param_missing_gost01(const EVP_PKEY *pk)-
651{-
652 const GOST_KEY *ec = pk->pkey.gost;-
653-
654 if (ec ==
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
655 ((void *)0)
ec == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
656 )-
657 return
never executed: return 1;
1;
never executed: return 1;
0
658 if (GOST_KEY_get0_group(ec) ==
GOST_KEY_get0_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
659 ((void *)0)
GOST_KEY_get0_...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
660 )-
661 return
never executed: return 1;
1;
never executed: return 1;
0
662 if (GOST_KEY_get_digest(ec) == 0
GOST_KEY_get_digest(ec) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
663 return
never executed: return 1;
1;
never executed: return 1;
0
664 return
never executed: return 0;
0;
never executed: return 0;
0
665}-
666-
667static int-
668param_copy_gost01(EVP_PKEY *to, const EVP_PKEY *from)-
669{-
670 GOST_KEY *eto = to->pkey.gost;-
671 const GOST_KEY *efrom = from->pkey.gost;-
672 int ret = 1;-
673-
674 if (EVP_PKEY_base_id(from) != EVP_PKEY_base_id(to)
EVP_PKEY_base_...EY_base_id(to)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
675 ERR_put_error(50,(0xfff),(110),__FILE__,587);-
676 return
never executed: return 0;
0;
never executed: return 0;
0
677 }-
678 if (efrom ==
efrom == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
679 ((void *)0)
efrom == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
680 ) {-
681 ERR_put_error(50,(0xfff),(113),__FILE__,591);-
682 return
never executed: return 0;
0;
never executed: return 0;
0
683 }-
684 if (eto ==
eto == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
685 ((void *)0)
eto == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
686 ) {-
687 eto = GOST_KEY_new();-
688 if (eto ==
eto == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
689 ((void *)0)
eto == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
690 ) {-
691 ERR_put_error(50,(0xfff),((1|64)),__FILE__,597);-
692 return
never executed: return 0;
0;
never executed: return 0;
0
693 }-
694 if (EVP_PKEY_assign(to, EVP_PKEY_base_id(from), eto) == 0
EVP_PKEY_assig...om), eto) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
695 GOST_KEY_free(eto);-
696 return
never executed: return 0;
0;
never executed: return 0;
0
697 }-
698 }
never executed: end of block
0
699 GOST_KEY_set_group(eto, GOST_KEY_get0_group(efrom));-
700 GOST_KEY_set_digest(eto, GOST_KEY_get_digest(efrom));-
701 if (GOST_KEY_get0_private_key(eto) !=
GOST_KEY_get0_...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
702 ((void *)0)
GOST_KEY_get0_...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
703 )-
704 ret = gost2001_compute_public(eto);
never executed: ret = gost2001_compute_public(eto);
0
705-
706 return
never executed: return ret;
ret;
never executed: return ret;
0
707}-
708-
709static int-
710param_cmp_gost01(const EVP_PKEY *a, const EVP_PKEY *b)-
711{-
712 if (EC_GROUP_get_curve_name(GOST_KEY_get0_group(a->pkey.gost)) !=
EC_GROUP_get_c...b->pkey.gost))Description
TRUEnever evaluated
FALSEnever evaluated
0
713 EC_GROUP_get_curve_name(GOST_KEY_get0_group(b->pkey.gost))
EC_GROUP_get_c...b->pkey.gost))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
714 return
never executed: return 0;
0;
never executed: return 0;
0
715-
716 if (GOST_KEY_get_digest(a->pkey.gost) !=
GOST_KEY_get_d...(b->pkey.gost)Description
TRUEnever evaluated
FALSEnever evaluated
0
717 GOST_KEY_get_digest(b->pkey.gost)
GOST_KEY_get_d...(b->pkey.gost)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
718 return
never executed: return 0;
0;
never executed: return 0;
0
719-
720 return
never executed: return 1;
1;
never executed: return 1;
0
721}-
722-
723static int-
724pkey_ctrl_gost01(EVP_PKEY *pkey, int op, long arg1, void *arg2)-
725{-
726 X509_ALGOR *alg1 = -
727 ((void *)0)-
728 , *alg2 = -
729 ((void *)0)-
730 , *alg3 = -
731 ((void *)0)-
732 ;-
733 int digest = GOST_KEY_get_digest(pkey->pkey.gost);-
734-
735 switch (op) {-
736 case
never executed: case 0x1:
0x1:
never executed: case 0x1:
0
737 if (arg1 == 0
arg1 == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
738 PKCS7_SIGNER_INFO_get0_algs(arg2,
never executed: PKCS7_SIGNER_INFO_get0_algs(arg2, ((void *)0) , &alg1, &alg2);
0
739 ((void *)0)
never executed: PKCS7_SIGNER_INFO_get0_algs(arg2, ((void *)0) , &alg1, &alg2);
0
740 , &alg1, &alg2);
never executed: PKCS7_SIGNER_INFO_get0_algs(arg2, ((void *)0) , &alg1, &alg2);
0
741 break;
never executed: break;
0
742-
743 case
never executed: case 0x2:
0x2:
never executed: case 0x2:
0
744 if (arg1 == 0
arg1 == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
745 PKCS7_RECIP_INFO_get0_alg(arg2, &alg3);
never executed: PKCS7_RECIP_INFO_get0_alg(arg2, &alg3);
0
746 break;
never executed: break;
0
747 case
never executed: case 0x3:
0x3:
never executed: case 0x3:
0
748 *(int *)arg2 = GostR3410_get_md_digest(digest);-
749 return
never executed: return 2;
2;
never executed: return 2;
0
750-
751 default
never executed: default:
:
never executed: default:
0
752 return
never executed: return -2;
-2;
never executed: return -2;
0
753 }-
754-
755 if (alg1
alg1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
756 X509_ALGOR_set0(alg1, OBJ_nid2obj(GostR3410_get_md_digest(digest)), 5, 0);
never executed: X509_ALGOR_set0(alg1, OBJ_nid2obj(GostR3410_get_md_digest(digest)), 5, 0);
0
757 if (alg2
alg2Description
TRUEnever evaluated
FALSEnever evaluated
)
0
758 X509_ALGOR_set0(alg2, OBJ_nid2obj(GostR3410_get_pk_digest(digest)), 5, 0);
never executed: X509_ALGOR_set0(alg2, OBJ_nid2obj(GostR3410_get_pk_digest(digest)), 5, 0);
0
759 if (alg3
alg3Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
760 ASN1_STRING *params = encode_gost01_algor_params(pkey);-
761 if (params ==
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
762 ((void *)0)
params == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
763 ) {-
764 return
never executed: return -1;
-1;
never executed: return -1;
0
765 }-
766 X509_ALGOR_set0(alg3,-
767 OBJ_nid2obj(GostR3410_get_pk_digest(digest)),-
768 16, params);-
769 }
never executed: end of block
0
770-
771 return
never executed: return 1;
1;
never executed: return 1;
0
772}-
773-
774const EVP_PKEY_ASN1_METHOD gostr01_asn1_meths[] = {-
775 {-
776 .pkey_id = 811,-
777 .pkey_base_id = 811,-
778 .pkey_flags = 0x4,-
779-
780 .pem_str = "GOST2001",-
781 .info = "GOST R 34.10-2001",-
782-
783 .pkey_free = pkey_free_gost01,-
784 .pkey_ctrl = pkey_ctrl_gost01,-
785-
786 .priv_decode = priv_decode_gost01,-
787 .priv_encode = priv_encode_gost01,-
788 .priv_print = priv_print_gost01,-
789-
790 .param_decode = param_decode_gost01,-
791 .param_encode = param_encode_gost01,-
792 .param_missing = param_missing_gost01,-
793 .param_copy = param_copy_gost01,-
794 .param_cmp = param_cmp_gost01,-
795 .param_print = param_print_gost01,-
796-
797 .pub_decode = pub_decode_gost01,-
798 .pub_encode = pub_encode_gost01,-
799 .pub_cmp = pub_cmp_gost01,-
800 .pub_print = pub_print_gost01,-
801 .pkey_size = pkey_size_gost01,-
802 .pkey_bits = pkey_bits_gost01,-
803 },-
804 {-
805 .pkey_id = 946,-
806 .pkey_base_id = 811,-
807 .pkey_flags = 0x1-
808 },-
809 {-
810 .pkey_id = 947,-
811 .pkey_base_id = 811,-
812 .pkey_flags = 0x1-
813 },-
814};-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2