Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/gost/gostr341001_ameth.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | - | |||||||||||||
7 | static void | - | ||||||||||||
8 | pkey_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 | - | |||||||||||||
17 | static int | - | ||||||||||||
18 | decode_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 ==
| 0 | ||||||||||||
31 | ((void *)0)
| 0 | ||||||||||||
32 | ) { | - | ||||||||||||
33 | ERR_put_error(50,(0xfff),(105),__FILE__,89); | - | ||||||||||||
34 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
42 | ((void *)0)
| 0 | ||||||||||||
43 | ) { | - | ||||||||||||
44 | ec = GOST_KEY_new(); | - | ||||||||||||
45 | if (ec ==
| 0 | ||||||||||||
46 | ((void *)0)
| 0 | ||||||||||||
47 | ) | - | ||||||||||||
48 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
49 | if (EVP_PKEY_assign((pkey),811, (char *)(ec)) == 0
| 0 | ||||||||||||
50 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
55 | ((void *)0)
| 0 | ||||||||||||
56 | ) | - | ||||||||||||
57 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
58 | EC_GROUP_set_asn1_flag(group, 0x001); | - | ||||||||||||
59 | if (GOST_KEY_set_group(ec, group) == 0
| 0 | ||||||||||||
60 | EC_GROUP_free(group); | - | ||||||||||||
61 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
62 | } | - | ||||||||||||
63 | EC_GROUP_free(group); | - | ||||||||||||
64 | if (GOST_KEY_set_digest(ec, digest_nid) == 0
| 0 | ||||||||||||
65 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
66 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
67 | } | - | ||||||||||||
68 | - | |||||||||||||
69 | static ASN1_STRING * | - | ||||||||||||
70 | encode_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 ==
| 0 | ||||||||||||
77 | ((void *)0)
| 0 | ||||||||||||
78 | || gkp ==
| 0 | ||||||||||||
79 | ((void *)0)
| 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: err;goto 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, ¶ms->data); | - | ||||||||||||
95 | if (params->length <= 0
| 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: err;goto err; never executed: goto err; | 0 | ||||||||||||
102 | } | - | ||||||||||||
103 | params->type = 16; | - | ||||||||||||
104 | err: code before this statement never executed: err: | 0 | ||||||||||||
105 | GOST_KEY_PARAMS_free(gkp); | - | ||||||||||||
106 | return never executed: params;return params; never executed: return params; | 0 | ||||||||||||
107 | } | - | ||||||||||||
108 | - | |||||||||||||
109 | static int | - | ||||||||||||
110 | pub_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 ==
| 0 | ||||||||||||
118 | ((void *)0)
| 0 | ||||||||||||
119 | || eb ==
| 0 | ||||||||||||
120 | ((void *)0)
| 0 | ||||||||||||
121 | ) | - | ||||||||||||
122 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
126 | ((void *)0)
| 0 | ||||||||||||
127 | || kb ==
| 0 | ||||||||||||
128 | ((void *)0)
| 0 | ||||||||||||
129 | ) | - | ||||||||||||
130 | return never executed: 0;return 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: ret;return ret; never executed: return ret; | 0 | ||||||||||||
135 | } | - | ||||||||||||
136 | - | |||||||||||||
137 | static int | - | ||||||||||||
138 | pkey_size_gost01(const EVP_PKEY *pk) | - | ||||||||||||
139 | { | - | ||||||||||||
140 | if (GOST_KEY_get_digest(pk->pkey.gost) == 942
| 0 | ||||||||||||
141 | return never executed: 128;return 128; never executed: return 128; | 0 | ||||||||||||
142 | return never executed: 64;return 64; never executed: return 64; | 0 | ||||||||||||
143 | } | - | ||||||||||||
144 | - | |||||||||||||
145 | static int | - | ||||||||||||
146 | pkey_bits_gost01(const EVP_PKEY *pk) | - | ||||||||||||
147 | { | - | ||||||||||||
148 | if (GOST_KEY_get_digest(pk->pkey.gost) == 942
| 0 | ||||||||||||
149 | return never executed: 512;return 512; never executed: return 512; | 0 | ||||||||||||
150 | return never executed: 256;return 256; never executed: return 256; | 0 | ||||||||||||
151 | } | - | ||||||||||||
152 | - | |||||||||||||
153 | static int | - | ||||||||||||
154 | pub_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)
| 0 | ||||||||||||
179 | == 0
| 0 | ||||||||||||
180 | return never executed: 0;return 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
| 0 | ||||||||||||
188 | ERR_put_error(50,(0xfff),(104),__FILE__,206); | - | ||||||||||||
189 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
190 | } | - | ||||||||||||
191 | p = pval->data; | - | ||||||||||||
192 | if (decode_gost01_algor_params(pk, &p, pval->length) == 0
| 0 | ||||||||||||
193 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
194 | - | |||||||||||||
195 | octet = d2i_ASN1_OCTET_STRING( | - | ||||||||||||
196 | ((void *)0) | - | ||||||||||||
197 | , &pubkey_buf, pub_len); | - | ||||||||||||
198 | if (octet ==
| 0 | ||||||||||||
199 | ((void *)0)
| 0 | ||||||||||||
200 | ) { | - | ||||||||||||
201 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,215); | - | ||||||||||||
202 | return never executed: 0;return 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
| 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: ret;return ret; never executed: return ret; | 0 | ||||||||||||
223 | } | - | ||||||||||||
224 | - | |||||||||||||
225 | static int | - | ||||||||||||
226 | pub_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
| 0 | ||||||||||||
255 | params = encode_gost01_algor_params(pk); | - | ||||||||||||
256 | if (params ==
| 0 | ||||||||||||
257 | ((void *)0)
| 0 | ||||||||||||
258 | ) | - | ||||||||||||
259 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
268 | ((void *)0)
| 0 | ||||||||||||
269 | ) { | - | ||||||||||||
270 | ERR_put_error(50,(0xfff),(118),__FILE__,262); | - | ||||||||||||
271 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
272 | } | - | ||||||||||||
273 | - | |||||||||||||
274 | octet = ASN1_OCTET_STRING_new(); | - | ||||||||||||
275 | if (octet ==
| 0 | ||||||||||||
276 | ((void *)0)
| 0 | ||||||||||||
277 | ) { | - | ||||||||||||
278 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,268); | - | ||||||||||||
279 | goto never executed: err;goto 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
| 0 | ||||||||||||
286 | ERR_put_error(50,(0xfff),((4|64)),__FILE__,274); | - | ||||||||||||
287 | goto never executed: err;goto 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 ==
| 0 | ||||||||||||
295 | ((void *)0)
| 0 | ||||||||||||
296 | || Y ==
| 0 | ||||||||||||
297 | ((void *)0)
| 0 | ||||||||||||
298 | ) { | - | ||||||||||||
299 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,283); | - | ||||||||||||
300 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
301 | } | - | ||||||||||||
302 | - | |||||||||||||
303 | if (EC_POINT_get_affine_coordinates_GFp(GOST_KEY_get0_group(ec),
| 0 | ||||||||||||
304 | pub_key, X, Y,
| 0 | ||||||||||||
305 | ((void *)0)
| 0 | ||||||||||||
306 | ) == 0
| 0 | ||||||||||||
307 | ERR_put_error(50,(0xfff),(16),__FILE__,289); | - | ||||||||||||
308 | goto never executed: err;goto 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
| 0 | ||||||||||||
320 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
321 | - | |||||||||||||
322 | return never executed: X509_PUBKEY_set0_param(pub, algobj, ptype, pval, buf, ret);return 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 | - | |||||||||||||
324 | err: | - | ||||||||||||
325 | BN_free(Y); | - | ||||||||||||
326 | BN_free(X); | - | ||||||||||||
327 | ASN1_BIT_STRING_free(octet); | - | ||||||||||||
328 | ASN1_STRING_free(params); | - | ||||||||||||
329 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
330 | } | - | ||||||||||||
331 | - | |||||||||||||
332 | static int | - | ||||||||||||
333 | param_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
| 0 | ||||||||||||
339 | return never executed: 0;return 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
| 0 | ||||||||||||
342 | return never executed: 0;return 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: 1;return 1; never executed: return 1; | 0 | ||||||||||||
346 | } | - | ||||||||||||
347 | - | |||||||||||||
348 | static int | - | ||||||||||||
349 | pub_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 ==
| 0 | ||||||||||||
357 | ((void *)0)
| 0 | ||||||||||||
358 | ) { | - | ||||||||||||
359 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,339); | - | ||||||||||||
360 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
361 | } | - | ||||||||||||
362 | BN_CTX_start(ctx); | - | ||||||||||||
363 | if ((
| 0 | ||||||||||||
364 | ((void *)0)
| 0 | ||||||||||||
365 | ) | - | ||||||||||||
366 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
367 | if ((
| 0 | ||||||||||||
368 | ((void *)0)
| 0 | ||||||||||||
369 | ) | - | ||||||||||||
370 | goto never executed: err;goto 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,
| 0 | ||||||||||||
374 | ctx) == 0
| 0 | ||||||||||||
375 | ERR_put_error(50,(0xfff),(16),__FILE__,351); | - | ||||||||||||
376 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
377 | } | - | ||||||||||||
378 | if (BIO_indent(out, indent, 128) == 0
| 0 | ||||||||||||
379 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
380 | BIO_printf(out, "Public key:\n"); | - | ||||||||||||
381 | if (BIO_indent(out, indent + 3, 128) == 0
| 0 | ||||||||||||
382 | goto never executed: err;goto 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: param_print_gost01(out, pkey, indent, pctx);return param_print_gost01(out, pkey, indent, pctx); never executed: return param_print_gost01(out, pkey, indent, pctx); | 0 | ||||||||||||
395 | - | |||||||||||||
396 | err: | - | ||||||||||||
397 | BN_CTX_end(ctx); | - | ||||||||||||
398 | BN_CTX_free(ctx); | - | ||||||||||||
399 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
400 | } | - | ||||||||||||
401 | - | |||||||||||||
402 | static int | - | ||||||||||||
403 | priv_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
| 0 | ||||||||||||
408 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
412 | ((void *)0)
| 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: pub_print_gost01(out, pkey, indent, pctx);return pub_print_gost01(out, pkey, indent, pctx); never executed: return pub_print_gost01(out, pkey, indent, pctx); | 0 | ||||||||||||
420 | } | - | ||||||||||||
421 | - | |||||||||||||
422 | static int | - | ||||||||||||
423 | priv_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
| 0 | ||||||||||||
451 | return never executed: 0;return 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
| 0 | ||||||||||||
459 | ERR_put_error(50,(0xfff),(104),__FILE__,415); | - | ||||||||||||
460 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
461 | } | - | ||||||||||||
462 | p = pval->data; | - | ||||||||||||
463 | if (decode_gost01_algor_params(pk, &p, pval->length) == 0
| 0 | ||||||||||||
464 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
465 | p = pkey_buf; | - | ||||||||||||
466 | if (4 == *p
| 0 | ||||||||||||
467 | - | |||||||||||||
468 | ASN1_OCTET_STRING *s = | - | ||||||||||||
469 | d2i_ASN1_OCTET_STRING( | - | ||||||||||||
470 | ((void *)0) | - | ||||||||||||
471 | , &p, priv_len); | - | ||||||||||||
472 | - | |||||||||||||
473 | if (s ==
| 0 | ||||||||||||
474 | ((void *)0)
| 0 | ||||||||||||
475 | ) { | - | ||||||||||||
476 | ERR_put_error(50,(0xfff),(114),__FILE__,428); | - | ||||||||||||
477 | ASN1_STRING_free(s); | - | ||||||||||||
478 | return never executed: 0;return 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: else {end of block | 0 | ||||||||||||
486 | priv_key = d2i_ASN1_INTEGER( | - | ||||||||||||
487 | ((void *)0) | - | ||||||||||||
488 | , &p, priv_len); | - | ||||||||||||
489 | if (priv_key ==
| 0 | ||||||||||||
490 | ((void *)0)
| 0 | ||||||||||||
491 | ) | - | ||||||||||||
492 | return never executed: 0;return 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
| 0 | ||||||||||||
500 | ERR_put_error(50,(0xfff),(114),__FILE__,442); | - | ||||||||||||
501 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
502 | } | - | ||||||||||||
503 | } never executed: end of block | 0 | ||||||||||||
504 | - | |||||||||||||
505 | ec = pk->pkey.gost; | - | ||||||||||||
506 | if (ec ==
| 0 | ||||||||||||
507 | ((void *)0)
| 0 | ||||||||||||
508 | ) { | - | ||||||||||||
509 | ec = GOST_KEY_new(); | - | ||||||||||||
510 | if (ec ==
| 0 | ||||||||||||
511 | ((void *)0)
| 0 | ||||||||||||
512 | ) { | - | ||||||||||||
513 | BN_free(pk_num); | - | ||||||||||||
514 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
515 | } | - | ||||||||||||
516 | if (EVP_PKEY_assign((pk),811, (char *)(ec)) == 0
| 0 | ||||||||||||
517 | BN_free(pk_num); | - | ||||||||||||
518 | GOST_KEY_free(ec); | - | ||||||||||||
519 | return never executed: 0;return 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
| 0 | ||||||||||||
523 | BN_free(pk_num); | - | ||||||||||||
524 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
525 | } | - | ||||||||||||
526 | ret = 0; | - | ||||||||||||
527 | if (EVP_PKEY_missing_parameters(pk) == 0
| 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: ret;return ret; never executed: return ret; | 0 | ||||||||||||
532 | } | - | ||||||||||||
533 | - | |||||||||||||
534 | static int | - | ||||||||||||
535 | priv_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 ==
| 0 | ||||||||||||
549 | ((void *)0)
| 0 | ||||||||||||
550 | ) | - | ||||||||||||
551 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
558 | ((void *)0)
| 0 | ||||||||||||
559 | ) { | - | ||||||||||||
560 | ASN1_STRING_free(params); | - | ||||||||||||
561 | return never executed: 0;return 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: PKCS8_pkey_set0(p8, algobj, 0, 16, params, priv_buf,return PKCS8_pkey_set0(p8, algobj, 0, 16, params, priv_buf, priv_len); 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 | - | |||||||||||||
569 | static int | - | ||||||||||||
570 | param_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 ==
| 0 | ||||||||||||
576 | ((void *)0)
| 0 | ||||||||||||
577 | ) | - | ||||||||||||
578 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
579 | len = params->length; | - | ||||||||||||
580 | if (pder !=
| 0 | ||||||||||||
581 | ((void *)0)
| 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: len;return len; never executed: return len; | 0 | ||||||||||||
586 | } | - | ||||||||||||
587 | - | |||||||||||||
588 | static int | - | ||||||||||||
589 | param_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 ((
| 0 | ||||||||||||
601 | return never executed: decode_gost01_algor_params(pkey, pder, derlen);return 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) ==
| 0 | ||||||||||||
605 | ((void *)0)
| 0 | ||||||||||||
606 | ) { | - | ||||||||||||
607 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,527); | - | ||||||||||||
608 | return never executed: 0;return 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 ==
| 0 | ||||||||||||
615 | ((void *)0)
| 0 | ||||||||||||
616 | ) { | - | ||||||||||||
617 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,535); | - | ||||||||||||
618 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
619 | } | - | ||||||||||||
620 | group = EC_GROUP_new_by_curve_name(nid); | - | ||||||||||||
621 | if (group ==
| 0 | ||||||||||||
622 | ((void *)0)
| 0 | ||||||||||||
623 | ) { | - | ||||||||||||
624 | ERR_put_error(50,(0xfff),(119),__FILE__,540); | - | ||||||||||||
625 | GOST_KEY_free(ec); | - | ||||||||||||
626 | return never executed: 0;return 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
| 0 | ||||||||||||
631 | ERR_put_error(50,(0xfff),(16),__FILE__,547); | - | ||||||||||||
632 | EC_GROUP_free(group); | - | ||||||||||||
633 | GOST_KEY_free(ec); | - | ||||||||||||
634 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
635 | } | - | ||||||||||||
636 | EC_GROUP_free(group); | - | ||||||||||||
637 | if (GOST_KEY_set_digest(ec,
| 0 | ||||||||||||
638 | 822) == 0
| 0 | ||||||||||||
639 | ERR_put_error(50,(0xfff),(100),__FILE__,555); | - | ||||||||||||
640 | GOST_KEY_free(ec); | - | ||||||||||||
641 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
642 | } | - | ||||||||||||
643 | ret = EVP_PKEY_assign((pkey),811, (char *)(ec)); | - | ||||||||||||
644 | if (ret == 0
| 0 | ||||||||||||
645 | GOST_KEY_free(ec); never executed: GOST_KEY_free(ec); | 0 | ||||||||||||
646 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
647 | } | - | ||||||||||||
648 | - | |||||||||||||
649 | static int | - | ||||||||||||
650 | param_missing_gost01(const EVP_PKEY *pk) | - | ||||||||||||
651 | { | - | ||||||||||||
652 | const GOST_KEY *ec = pk->pkey.gost; | - | ||||||||||||
653 | - | |||||||||||||
654 | if (ec ==
| 0 | ||||||||||||
655 | ((void *)0)
| 0 | ||||||||||||
656 | ) | - | ||||||||||||
657 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
658 | if (GOST_KEY_get0_group(ec) ==
| 0 | ||||||||||||
659 | ((void *)0)
| 0 | ||||||||||||
660 | ) | - | ||||||||||||
661 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
662 | if (GOST_KEY_get_digest(ec) == 0
| 0 | ||||||||||||
663 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
664 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
665 | } | - | ||||||||||||
666 | - | |||||||||||||
667 | static int | - | ||||||||||||
668 | param_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)
| 0 | ||||||||||||
675 | ERR_put_error(50,(0xfff),(110),__FILE__,587); | - | ||||||||||||
676 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
677 | } | - | ||||||||||||
678 | if (efrom ==
| 0 | ||||||||||||
679 | ((void *)0)
| 0 | ||||||||||||
680 | ) { | - | ||||||||||||
681 | ERR_put_error(50,(0xfff),(113),__FILE__,591); | - | ||||||||||||
682 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
683 | } | - | ||||||||||||
684 | if (eto ==
| 0 | ||||||||||||
685 | ((void *)0)
| 0 | ||||||||||||
686 | ) { | - | ||||||||||||
687 | eto = GOST_KEY_new(); | - | ||||||||||||
688 | if (eto ==
| 0 | ||||||||||||
689 | ((void *)0)
| 0 | ||||||||||||
690 | ) { | - | ||||||||||||
691 | ERR_put_error(50,(0xfff),((1|64)),__FILE__,597); | - | ||||||||||||
692 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
693 | } | - | ||||||||||||
694 | if (EVP_PKEY_assign(to, EVP_PKEY_base_id(from), eto) == 0
| 0 | ||||||||||||
695 | GOST_KEY_free(eto); | - | ||||||||||||
696 | return never executed: 0;return 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) !=
| 0 | ||||||||||||
702 | ((void *)0)
| 0 | ||||||||||||
703 | ) | - | ||||||||||||
704 | ret = gost2001_compute_public(eto); never executed: ret = gost2001_compute_public(eto); | 0 | ||||||||||||
705 | - | |||||||||||||
706 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
707 | } | - | ||||||||||||
708 | - | |||||||||||||
709 | static int | - | ||||||||||||
710 | param_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)) !=
| 0 | ||||||||||||
713 | EC_GROUP_get_curve_name(GOST_KEY_get0_group(b->pkey.gost))
| 0 | ||||||||||||
714 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
715 | - | |||||||||||||
716 | if (GOST_KEY_get_digest(a->pkey.gost) !=
| 0 | ||||||||||||
717 | GOST_KEY_get_digest(b->pkey.gost)
| 0 | ||||||||||||
718 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
719 | - | |||||||||||||
720 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
721 | } | - | ||||||||||||
722 | - | |||||||||||||
723 | static int | - | ||||||||||||
724 | pkey_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: 0x1:case 0x1: never executed: case 0x1: | 0 | ||||||||||||
737 | if (arg1 == 0
| 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: 0x2:case 0x2: never executed: case 0x2: | 0 | ||||||||||||
744 | if (arg1 == 0
| 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: 0x3:case 0x3: never executed: case 0x3: | 0 | ||||||||||||
748 | *(int *)arg2 = GostR3410_get_md_digest(digest); | - | ||||||||||||
749 | return never executed: 2;return 2; never executed: return 2; | 0 | ||||||||||||
750 | - | |||||||||||||
751 | default never executed: :default: never executed: default: | 0 | ||||||||||||
752 | return never executed: -2;return -2; never executed: return -2; | 0 | ||||||||||||
753 | } | - | ||||||||||||
754 | - | |||||||||||||
755 | if (alg1
| 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
| 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
| 0 | ||||||||||||
760 | ASN1_STRING *params = encode_gost01_algor_params(pkey); | - | ||||||||||||
761 | if (params ==
| 0 | ||||||||||||
762 | ((void *)0)
| 0 | ||||||||||||
763 | ) { | - | ||||||||||||
764 | return never executed: -1;return -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: 1;return 1; never executed: return 1; | 0 | ||||||||||||
772 | } | - | ||||||||||||
773 | - | |||||||||||||
774 | const 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 code | Preprocessed file |