PR: 2070
[openssl.git] / engines / ccgost / gost_crypt.c
index a9536dd8a4cb23cec3a6e033fa5b363eb793998b..9c9fed5a7b1f77318ed19c18f4c8c982dcbef979 100644 (file)
@@ -371,7 +371,7 @@ static int gost_cipher_do_cnt(EVP_CIPHER_CTX *ctx, unsigned char *out,
 /* Cleaning up of EVP_CIPHER_CTX */
 int gost_cipher_cleanup(EVP_CIPHER_CTX *ctx) 
        {
-       gost_destroy((gost_ctx *)ctx->cipher_data);
+       gost_destroy(&((struct ossl_gost_cipher_ctx *)ctx->cipher_data)->cctx);
        ctx->app_data = NULL;
        return 1;
        }       
@@ -390,6 +390,14 @@ int gost_cipher_ctl(EVP_CIPHER_CTX *ctx,int type,int arg,void *ptr)
                        }
                break;
                }
+               case EVP_CTRL_PBE_PRF_NID:
+                       if (ptr) {
+                               *((int *)ptr)=  NID_id_HMACGostR3411_94;
+                               return 1;
+                       } else {
+                               return 0;
+                       }       
+                               
                default:
                        GOSTerr(GOST_F_GOST_CIPHER_CTL,GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND);
                        return -1;
@@ -550,7 +558,10 @@ int gost_imit_update(EVP_MD_CTX *ctx, const void *data, size_t count)
 int gost_imit_final(EVP_MD_CTX *ctx,unsigned char *md)
        {
        struct ossl_gost_imit_ctx *c = ctx->md_data;
-       if (!c->key_set) return 0;
+       if (!c->key_set) {
+               GOSTerr(GOST_F_GOST_IMIT_FINAL, GOST_R_MAC_KEY_NOT_SET);
+               return 0;
+       }
        if (c->bytes_left)
                {
                int i;