- sec_key = EVP_PKEY_new();
- 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))) {
+ 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))) {