X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_ec_keyx.c;h=6efa3e870b06d54d22dd8e8c3c26255f9966a615;hb=38ce652a600ca43db4996f3c2945aff39a323e36;hp=6313a6bfe50962acf93261090be9d4c8162c43b8;hpb=21fa9570fc442044273d2aff3b7677495b75907e;p=openssl-gost%2Fengine.git diff --git a/gost_ec_keyx.c b/gost_ec_keyx.c index 6313a6b..6efa3e8 100644 --- a/gost_ec_keyx.c +++ b/gost_ec_keyx.c @@ -251,8 +251,7 @@ static int pkey_GOST_ECcp_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, EVP_PKEY *sec_key = EVP_PKEY_CTX_get0_peerkey(pctx); if (data->shared_ukm) { memcpy(ukm, data->shared_ukm, 8); - } else if (out) { - + } else { if (RAND_bytes(ukm, 8) <= 0) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_RNG_ERROR); return 0; @@ -391,6 +390,12 @@ static int pkey_gost2018_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, sec_key = EVP_PKEY_CTX_get0_peerkey(pctx); if (!sec_key) { + sec_key = EVP_PKEY_new(); + if (sec_key == NULL) { + GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE ); + goto err; + } + if (!EVP_PKEY_assign(sec_key, EVP_PKEY_base_id(pubk), EC_KEY_new()) || !EVP_PKEY_copy_parameters(sec_key, pubk) || !gost_ec_keygen(EVP_PKEY_get0(sec_key))) { @@ -432,13 +437,12 @@ static int pkey_gost2018_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, goto err; } - EVP_PKEY_free(sec_key); - if ((*out_len = i2d_PSKeyTransport_gost(pst, out ? &out : NULL)) > 0) ret = 1; err: if (key_is_ephemeral) EVP_PKEY_free(sec_key); + PSKeyTransport_gost_free(pst); OPENSSL_free(exp_buf); return ret;