]> www.wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_pmeth.c
openssl 1.1.0 compatibility
[openssl-gost/engine.git] / gost_pmeth.c
index de35388de63f6c01322e742c458570e974ed874f..6b38e60518c122a4b55c64afa1b1e7f16c7152e8 100644 (file)
@@ -146,8 +146,10 @@ static int pkey_gost_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
     case EVP_PKEY_CTRL_SET_IV:
         OPENSSL_assert(p2 != NULL);
         pctx->shared_ukm = OPENSSL_malloc((int)p1);
-        if (!pctx->shared_ukm)
+        if (pctx->shared_ukm == NULL) {
+            GOSTerr(GOST_F_PKEY_GOST_CTRL, ERR_R_MALLOC_FAILURE);
             return 0;
+        }
         memcpy(pctx->shared_ukm, p2, (int)p1);
         return 1;
     case EVP_PKEY_CTRL_PEER_KEY:
@@ -478,6 +480,7 @@ static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx)
         struct gost_mac_key *key = EVP_PKEY_get0(pkey);
         if (key) {
             data->mac_param_nid = key->mac_param_nid;
+                                               data->mac_size      = key->mac_size;
         }
     }
 
@@ -546,14 +549,6 @@ static int pkey_gost_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
         {
             struct gost_cipher_info *param = p2;
             data->mac_param_nid = param->nid;
-            struct gost_mac_key *key = NULL;
-            EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx);
-            if (pkey) {
-                key = EVP_PKEY_get0(pkey);
-                if (key) {
-                    key->mac_param_nid = param->nid;
-                }
-            }
             return 1;
         }
     case EVP_PKEY_CTRL_DIGESTINIT:
@@ -573,13 +568,12 @@ static int pkey_gost_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
                             GOST_R_MAC_KEY_NOT_SET);
                     return 0;
                 }
-                return mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_SET_KEY, 0,
-                                             key);
+            return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx))
+                (mctx, EVP_MD_CTRL_SET_KEY, 0, key);
             } else {
-                return mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_SET_KEY, 32,
-                                             &(data->key));
+            return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx))
+                (mctx, EVP_MD_CTRL_SET_KEY, 32, &(data->key));
             }
-            return mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_SET_KEY, 32, key);
         }
     case EVP_PKEY_CTRL_MAC_LEN:
         {
@@ -665,6 +659,7 @@ static int pkey_gost_mac_keygen_base(EVP_PKEY_CTX *ctx,
         return 0;
     memcpy(keydata->key, data->key, 32);
     keydata->mac_param_nid = data->mac_param_nid;
+               keydata->mac_size      = data->mac_size;
     EVP_PKEY_assign(pkey, mac_nid, keydata);
     return 1;
 }
@@ -681,6 +676,18 @@ static int pkey_gost_mac_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
 
 static int pkey_gost_mac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)
 {
+    struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx);
+
+               if (data == NULL) {
+                       pkey_gost_mac_init(ctx);
+               }
+
+    data = EVP_PKEY_CTX_get_data(ctx);
+    if (!data) {
+        GOSTerr(GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT, GOST_R_MAC_KEY_NOT_SET);
+        return 0;
+    }
+
     return 1;
 }
 
@@ -701,7 +708,8 @@ static int pkey_gost_mac_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig,
         return 1;
     }
 
-    mctx->digest->md_ctrl(mctx, EVP_MD_CTRL_MAC_LEN, data->mac_size, NULL);
+    EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx))
+        (mctx, EVP_MD_CTRL_MAC_LEN, data->mac_size, NULL);
     ret = EVP_DigestFinal_ex(mctx, sig, &tmpsiglen);
     *siglen = data->mac_size;
     return ret;