]> wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_ec_keyx.c
Bugfix according to real behaviour
[openssl-gost/engine.git] / gost_ec_keyx.c
index af773e2eb39b740408b59e068b78fbf8a77b4e9b..325d962c271c5e2592457e5c10ebf9b63c5f79d5 100644 (file)
@@ -77,20 +77,26 @@ static int VKO_compute_key(unsigned char *shared_key, size_t shared_key_size,
     for (i = 0; i < buf_len; i++) {
         hashbuf[buf_len - 1 - i] = databuf[i];
     }
+    mdctx = EVP_MD_CTX_new();
+    if (!mdctx) {
+        GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_MALLOC_FAILURE);
+        goto err;
+    }
     EVP_MD_CTX_init(mdctx);
     EVP_DigestInit_ex(mdctx, md, NULL);
     EVP_DigestUpdate(mdctx, hashbuf, buf_len);
     EVP_DigestFinal_ex(mdctx, shared_key, NULL);
-    EVP_MD_CTX_free(mdctx);
  err:
     BN_free(UKM);
     BN_CTX_end(ctx);
     BN_CTX_free(ctx);
+
     EC_POINT_free(pnt);
-    if (databuf)
-        OPENSSL_free(databuf);
-    if (hashbuf)
-        OPENSSL_free(hashbuf);
+
+    EVP_MD_CTX_free(mdctx);
+
+    OPENSSL_free(databuf);
+    OPENSSL_free(hashbuf);
 
     return 32;
 }
@@ -118,7 +124,7 @@ int pkey_gost_ec_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)
 
     if (key == NULL) {
         *keylen = 32;
-        return 32;
+        return 1;
     }
 
     EVP_PKEY_get_default_digest_nid(my_key, &dgst_nid);