]> wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_ec_keyx.c
test_tls: simple TLS connection testing
[openssl-gost/engine.git] / gost_ec_keyx.c
index 6313a6bfe50962acf93261090be9d4c8162c43b8..6efa3e870b06d54d22dd8e8c3c26255f9966a615 100644 (file)
@@ -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;