diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/gost/gostr341001_ameth.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/lib/libcrypto/gost/gostr341001_ameth.c b/src/lib/libcrypto/gost/gostr341001_ameth.c index 16295996dc..27a95f2069 100644 --- a/src/lib/libcrypto/gost/gostr341001_ameth.c +++ b/src/lib/libcrypto/gost/gostr341001_ameth.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: gostr341001_ameth.c,v 1.15 2018/08/24 20:22:15 tb Exp $ */ | 1 | /* $OpenBSD: gostr341001_ameth.c,v 1.16 2020/06/05 17:17:22 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
| 4 | * Copyright (c) 2005-2006 Cryptocom LTD | 4 | * Copyright (c) 2005-2006 Cryptocom LTD |
| @@ -96,15 +96,19 @@ decode_gost01_algor_params(EVP_PKEY *pkey, const unsigned char **p, int len) | |||
| 96 | ec = pkey->pkey.gost; | 96 | ec = pkey->pkey.gost; |
| 97 | if (ec == NULL) { | 97 | if (ec == NULL) { |
| 98 | ec = GOST_KEY_new(); | 98 | ec = GOST_KEY_new(); |
| 99 | if (ec == NULL) | 99 | if (ec == NULL) { |
| 100 | GOSTerror(ERR_R_MALLOC_FAILURE); | ||
| 100 | return 0; | 101 | return 0; |
| 102 | } | ||
| 101 | if (EVP_PKEY_assign_GOST(pkey, ec) == 0) | 103 | if (EVP_PKEY_assign_GOST(pkey, ec) == 0) |
| 102 | return 0; | 104 | return 0; |
| 103 | } | 105 | } |
| 104 | 106 | ||
| 105 | group = EC_GROUP_new_by_curve_name(param_nid); | 107 | group = EC_GROUP_new_by_curve_name(param_nid); |
| 106 | if (group == NULL) | 108 | if (group == NULL) { |
| 109 | GOSTerror(EC_R_EC_GROUP_NEW_BY_NAME_FAILURE); | ||
| 107 | return 0; | 110 | return 0; |
| 111 | } | ||
| 108 | EC_GROUP_set_asn1_flag(group, OPENSSL_EC_NAMED_CURVE); | 112 | EC_GROUP_set_asn1_flag(group, OPENSSL_EC_NAMED_CURVE); |
| 109 | if (GOST_KEY_set_group(ec, group) == 0) { | 113 | if (GOST_KEY_set_group(ec, group) == 0) { |
| 110 | EC_GROUP_free(group); | 114 | EC_GROUP_free(group); |
| @@ -207,8 +211,10 @@ pub_decode_gost01(EVP_PKEY *pk, X509_PUBKEY *pub) | |||
| 207 | return 0; | 211 | return 0; |
| 208 | } | 212 | } |
| 209 | p = pval->data; | 213 | p = pval->data; |
| 210 | if (decode_gost01_algor_params(pk, &p, pval->length) == 0) | 214 | if (decode_gost01_algor_params(pk, &p, pval->length) == 0) { |
| 215 | GOSTerror(GOST_R_BAD_KEY_PARAMETERS_FORMAT); | ||
| 211 | return 0; | 216 | return 0; |
| 217 | } | ||
| 212 | 218 | ||
| 213 | octet = d2i_ASN1_OCTET_STRING(NULL, &pubkey_buf, pub_len); | 219 | octet = d2i_ASN1_OCTET_STRING(NULL, &pubkey_buf, pub_len); |
| 214 | if (octet == NULL) { | 220 | if (octet == NULL) { |
| @@ -407,8 +413,10 @@ priv_decode_gost01(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf) | |||
| 407 | int ptype = V_ASN1_UNDEF; | 413 | int ptype = V_ASN1_UNDEF; |
| 408 | ASN1_STRING *pval = NULL; | 414 | ASN1_STRING *pval = NULL; |
| 409 | 415 | ||
| 410 | if (PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf) == 0) | 416 | if (PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf) == 0) { |
| 417 | GOSTerror(GOST_R_BAD_KEY_PARAMETERS_FORMAT); | ||
| 411 | return 0; | 418 | return 0; |
| 419 | } | ||
| 412 | (void)EVP_PKEY_assign_GOST(pk, NULL); | 420 | (void)EVP_PKEY_assign_GOST(pk, NULL); |
| 413 | X509_ALGOR_get0(NULL, &ptype, (const void **)&pval, palg); | 421 | X509_ALGOR_get0(NULL, &ptype, (const void **)&pval, palg); |
| 414 | if (ptype != V_ASN1_SEQUENCE) { | 422 | if (ptype != V_ASN1_SEQUENCE) { |
| @@ -416,8 +424,10 @@ priv_decode_gost01(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf) | |||
| 416 | return 0; | 424 | return 0; |
| 417 | } | 425 | } |
| 418 | p = pval->data; | 426 | p = pval->data; |
| 419 | if (decode_gost01_algor_params(pk, &p, pval->length) == 0) | 427 | if (decode_gost01_algor_params(pk, &p, pval->length) == 0) { |
| 428 | GOSTerror(GOST_R_BAD_KEY_PARAMETERS_FORMAT); | ||
| 420 | return 0; | 429 | return 0; |
| 430 | } | ||
| 421 | p = pkey_buf; | 431 | p = pkey_buf; |
| 422 | if (V_ASN1_OCTET_STRING == *p) { | 432 | if (V_ASN1_OCTET_STRING == *p) { |
| 423 | /* New format - Little endian octet string */ | 433 | /* New format - Little endian octet string */ |
