]> www.wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_ec_keyx.c
Opaquization fixes + sources formatting.
[openssl-gost/engine.git] / gost_ec_keyx.c
index 594329b50979c21fe12d5da3c8838bb54d53dbae..8c2af2affef629a0ae5677bd8a505b5a61bd52cd 100644 (file)
@@ -28,8 +28,8 @@ static int VKO_compute_key(unsigned char *shared_key, size_t shared_key_size,
     EC_POINT *pnt = EC_POINT_new(EC_KEY_get0_group(priv_key));
     int i;
     BN_CTX *ctx = BN_CTX_new();
-    EVP_MD_CTX mdctx;
-    const EVP_MD *md;
+    EVP_MD_CTX *mdctx = NULL;
+    const EVP_MD *md = NULL;
     int effective_dgst_nid = (dgst_nid == NID_id_GostR3411_2012_512) ?
         NID_id_GostR3411_2012_256 : dgst_nid;
     int buf_len = (dgst_nid == NID_id_GostR3411_2012_512) ? 128 : 64,
@@ -61,10 +61,11 @@ static int VKO_compute_key(unsigned char *shared_key, size_t shared_key_size,
     Y = BN_CTX_get(ctx);
     EC_GROUP_get_order(EC_KEY_get0_group(priv_key), order, ctx);
     BN_mod_mul(p, key, UKM, order, ctx);
-    if(!EC_POINT_mul(EC_KEY_get0_group(priv_key), pnt, NULL, pub_key, p, ctx)) {
+    if (!EC_POINT_mul
+        (EC_KEY_get0_group(priv_key), pnt, NULL, pub_key, p, ctx)) {
         GOSTerr(GOST_F_VKO_COMPUTE_KEY, GOST_R_ERROR_POINT_MUL);
         goto err;
-               }
+    }
     EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(priv_key),
                                         pnt, X, Y, ctx);
     /*
@@ -76,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];
     }
-    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_cleanup(&mdctx);
+    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);
  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;
 }