summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/evp_pkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/evp_pkey.c')
-rw-r--r--src/lib/libcrypto/evp/evp_pkey.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/src/lib/libcrypto/evp/evp_pkey.c b/src/lib/libcrypto/evp/evp_pkey.c
index 4ab091fa56..8df2874f3c 100644
--- a/src/lib/libcrypto/evp/evp_pkey.c
+++ b/src/lib/libcrypto/evp/evp_pkey.c
@@ -76,7 +76,7 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
76 DSA *dsa = NULL; 76 DSA *dsa = NULL;
77 ASN1_INTEGER *privkey; 77 ASN1_INTEGER *privkey;
78 ASN1_TYPE *t1, *t2, *param = NULL; 78 ASN1_TYPE *t1, *t2, *param = NULL;
79 STACK *ndsa = NULL; 79 STACK_OF(ASN1_TYPE) *ndsa = NULL;
80 BN_CTX *ctx = NULL; 80 BN_CTX *ctx = NULL;
81 int plen; 81 int plen;
82#endif 82#endif
@@ -119,13 +119,13 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
119 119
120 /* Check for broken DSA PKCS#8, UGH! */ 120 /* Check for broken DSA PKCS#8, UGH! */
121 if(*p == (V_ASN1_SEQUENCE|V_ASN1_CONSTRUCTED)) { 121 if(*p == (V_ASN1_SEQUENCE|V_ASN1_CONSTRUCTED)) {
122 if(!(ndsa = ASN1_seq_unpack(p, pkeylen, 122 if(!(ndsa = ASN1_seq_unpack_ASN1_TYPE(p, pkeylen,
123 (char *(*)())d2i_ASN1_TYPE, 123 d2i_ASN1_TYPE,
124 ASN1_TYPE_free))) { 124 ASN1_TYPE_free))) {
125 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); 125 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
126 goto dsaerr; 126 goto dsaerr;
127 } 127 }
128 if(sk_num(ndsa) != 2 ) { 128 if(sk_ASN1_TYPE_num(ndsa) != 2 ) {
129 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); 129 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
130 goto dsaerr; 130 goto dsaerr;
131 } 131 }
@@ -134,8 +134,8 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
134 * SEQUENCE {pub_key, priv_key} 134 * SEQUENCE {pub_key, priv_key}
135 */ 135 */
136 136
137 t1 = (ASN1_TYPE *)sk_value(ndsa, 0); 137 t1 = sk_ASN1_TYPE_value(ndsa, 0);
138 t2 = (ASN1_TYPE *)sk_value(ndsa, 1); 138 t2 = sk_ASN1_TYPE_value(ndsa, 1);
139 if(t1->type == V_ASN1_SEQUENCE) { 139 if(t1->type == V_ASN1_SEQUENCE) {
140 p8->broken = PKCS8_EMBEDDED_PARAM; 140 p8->broken = PKCS8_EMBEDDED_PARAM;
141 param = t1; 141 param = t1;
@@ -193,12 +193,12 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
193 193
194 EVP_PKEY_assign_DSA(pkey, dsa); 194 EVP_PKEY_assign_DSA(pkey, dsa);
195 BN_CTX_free (ctx); 195 BN_CTX_free (ctx);
196 if(ndsa) sk_pop_free(ndsa, ASN1_TYPE_free); 196 if(ndsa) sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
197 else ASN1_INTEGER_free(privkey); 197 else ASN1_INTEGER_free(privkey);
198 break; 198 break;
199 dsaerr: 199 dsaerr:
200 BN_CTX_free (ctx); 200 BN_CTX_free (ctx);
201 sk_pop_free(ndsa, ASN1_TYPE_free); 201 sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
202 DSA_free(dsa); 202 DSA_free(dsa);
203 EVP_PKEY_free(pkey); 203 EVP_PKEY_free(pkey);
204 return NULL; 204 return NULL;
@@ -302,12 +302,13 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
302 ASN1_STRING *params; 302 ASN1_STRING *params;
303 ASN1_INTEGER *prkey; 303 ASN1_INTEGER *prkey;
304 ASN1_TYPE *ttmp; 304 ASN1_TYPE *ttmp;
305 STACK *ndsa; 305 STACK_OF(ASN1_TYPE) *ndsa;
306 unsigned char *p, *q; 306 unsigned char *p, *q;
307 int len; 307 int len;
308
308 p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa); 309 p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa);
309 len = i2d_DSAparams (pkey->pkey.dsa, NULL); 310 len = i2d_DSAparams (pkey->pkey.dsa, NULL);
310 if (!(p = Malloc(len))) { 311 if (!(p = OPENSSL_malloc(len))) {
311 EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); 312 EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
312 PKCS8_PRIV_KEY_INFO_free (p8); 313 PKCS8_PRIV_KEY_INFO_free (p8);
313 return 0; 314 return 0;
@@ -316,7 +317,7 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
316 i2d_DSAparams (pkey->pkey.dsa, &q); 317 i2d_DSAparams (pkey->pkey.dsa, &q);
317 params = ASN1_STRING_new(); 318 params = ASN1_STRING_new();
318 ASN1_STRING_set(params, p, len); 319 ASN1_STRING_set(params, p, len);
319 Free(p); 320 OPENSSL_free(p);
320 /* Get private key into integer */ 321 /* Get private key into integer */
321 if (!(prkey = BN_to_ASN1_INTEGER (pkey->pkey.dsa->priv_key, NULL))) { 322 if (!(prkey = BN_to_ASN1_INTEGER (pkey->pkey.dsa->priv_key, NULL))) {
322 EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR); 323 EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR);
@@ -345,7 +346,7 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
345 346
346 p8->pkeyalg->parameter->value.sequence = params; 347 p8->pkeyalg->parameter->value.sequence = params;
347 p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE; 348 p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE;
348 ndsa = sk_new_null(); 349 ndsa = sk_ASN1_TYPE_new_null();
349 ttmp = ASN1_TYPE_new(); 350 ttmp = ASN1_TYPE_new();
350 if (!(ttmp->value.integer = BN_to_ASN1_INTEGER (pkey->pkey.dsa->pub_key, NULL))) { 351 if (!(ttmp->value.integer = BN_to_ASN1_INTEGER (pkey->pkey.dsa->pub_key, NULL))) {
351 EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR); 352 EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR);
@@ -353,53 +354,53 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
353 return 0; 354 return 0;
354 } 355 }
355 ttmp->type = V_ASN1_INTEGER; 356 ttmp->type = V_ASN1_INTEGER;
356 sk_push(ndsa, (char *)ttmp); 357 sk_ASN1_TYPE_push(ndsa, ttmp);
357 358
358 ttmp = ASN1_TYPE_new(); 359 ttmp = ASN1_TYPE_new();
359 ttmp->value.integer = prkey; 360 ttmp->value.integer = prkey;
360 ttmp->type = V_ASN1_INTEGER; 361 ttmp->type = V_ASN1_INTEGER;
361 sk_push(ndsa, (char *)ttmp); 362 sk_ASN1_TYPE_push(ndsa, ttmp);
362 363
363 p8->pkey->value.octet_string = ASN1_OCTET_STRING_new(); 364 p8->pkey->value.octet_string = ASN1_OCTET_STRING_new();
364 365
365 if (!ASN1_seq_pack(ndsa, i2d_ASN1_TYPE, 366 if (!ASN1_seq_pack_ASN1_TYPE(ndsa, i2d_ASN1_TYPE,
366 &p8->pkey->value.octet_string->data, 367 &p8->pkey->value.octet_string->data,
367 &p8->pkey->value.octet_string->length)) { 368 &p8->pkey->value.octet_string->length)) {
368 369
369 EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); 370 EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
370 sk_pop_free(ndsa, ASN1_TYPE_free); 371 sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
371 M_ASN1_INTEGER_free(prkey); 372 M_ASN1_INTEGER_free(prkey);
372 return 0; 373 return 0;
373 } 374 }
374 sk_pop_free(ndsa, ASN1_TYPE_free); 375 sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
375 break; 376 break;
376 377
377 case PKCS8_EMBEDDED_PARAM: 378 case PKCS8_EMBEDDED_PARAM:
378 379
379 p8->pkeyalg->parameter->type = V_ASN1_NULL; 380 p8->pkeyalg->parameter->type = V_ASN1_NULL;
380 ndsa = sk_new_null(); 381 ndsa = sk_ASN1_TYPE_new_null();
381 ttmp = ASN1_TYPE_new(); 382 ttmp = ASN1_TYPE_new();
382 ttmp->value.sequence = params; 383 ttmp->value.sequence = params;
383 ttmp->type = V_ASN1_SEQUENCE; 384 ttmp->type = V_ASN1_SEQUENCE;
384 sk_push(ndsa, (char *)ttmp); 385 sk_ASN1_TYPE_push(ndsa, ttmp);
385 386
386 ttmp = ASN1_TYPE_new(); 387 ttmp = ASN1_TYPE_new();
387 ttmp->value.integer = prkey; 388 ttmp->value.integer = prkey;
388 ttmp->type = V_ASN1_INTEGER; 389 ttmp->type = V_ASN1_INTEGER;
389 sk_push(ndsa, (char *)ttmp); 390 sk_ASN1_TYPE_push(ndsa, ttmp);
390 391
391 p8->pkey->value.octet_string = ASN1_OCTET_STRING_new(); 392 p8->pkey->value.octet_string = ASN1_OCTET_STRING_new();
392 393
393 if (!ASN1_seq_pack(ndsa, i2d_ASN1_TYPE, 394 if (!ASN1_seq_pack_ASN1_TYPE(ndsa, i2d_ASN1_TYPE,
394 &p8->pkey->value.octet_string->data, 395 &p8->pkey->value.octet_string->data,
395 &p8->pkey->value.octet_string->length)) { 396 &p8->pkey->value.octet_string->length)) {
396 397
397 EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); 398 EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
398 sk_pop_free(ndsa, ASN1_TYPE_free); 399 sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
399 M_ASN1_INTEGER_free (prkey); 400 M_ASN1_INTEGER_free (prkey);
400 return 0; 401 return 0;
401 } 402 }
402 sk_pop_free(ndsa, ASN1_TYPE_free); 403 sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
403 break; 404 break;
404 } 405 }
405 return 1; 406 return 1;