]> www.wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_pmeth.c
Remove duplicates
[openssl-gost/engine.git] / gost_pmeth.c
index de35388de63f6c01322e742c458570e974ed874f..ca824ffce78948b8f222ad3b903cbb1e300f3128 100644 (file)
@@ -478,6 +478,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 +547,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:
@@ -640,11 +633,13 @@ static int pkey_gost_mac_ctrl_str(EVP_PKEY_CTX *ctx,
         }
 
         param = get_encryption_params(obj);
+                               ASN1_OBJECT_free(obj);
         if (param == NULL) {
             GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_PARAMS);
             return 0;
         }
 
+
         return pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_GOST_PARAMSET, 0,
                                   (void *)param);
     }
@@ -665,6 +660,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 +677,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;
 }