]> www.wagner.pp.ru Git - openssl-gost/engine.git/commitdiff
merge upstream
authorMax <maxamar@mail.ru>
Thu, 8 Sep 2016 08:49:08 +0000 (11:49 +0300)
committerMax <maxamar@mail.ru>
Thu, 8 Sep 2016 08:49:08 +0000 (11:49 +0300)
1  2 
gost_ameth.c
gost_crypt.c
gost_grasshopper_cipher.c

diff --combined gost_ameth.c
index 3d1382e8d517f6721ee019820d8346f8acc289de,8dc47f141c5f9e3ad5b1576014b0ad7fc5d8de1a..27217a827c533ac048fac63355efc5f215cb9078
@@@ -19,8 -19,6 +19,8 @@@
  #include "gost_lcl.h"
  #include "e_gost_err.h"
  
 +#include <internal/evp_int.h>
 +
  /*
   * Pack bignum into byte buffer of given size, filling all leading bytes by
   * zeros
@@@ -255,7 -253,7 +255,7 @@@ static int pkey_ctrl_gost(EVP_PKEY *pke
                  return -1;
              }
              PKCS7_RECIP_INFO_get0_alg((PKCS7_RECIP_INFO *)arg2, &alg1);
-             X509_ALGOR_set0(alg1, OBJ_nid2obj(pkey->type),
+             X509_ALGOR_set0(alg1, OBJ_nid2obj(EVP_PKEY_id(pkey)),
                              V_ASN1_SEQUENCE, params);
          }
          return 1;
              }
              CMS_RecipientInfo_ktri_get0_algs((CMS_RecipientInfo *)arg2, NULL,
                                               NULL, &alg1);
-             X509_ALGOR_set0(alg1, OBJ_nid2obj(pkey->type), V_ASN1_SEQUENCE,
-                             params);
+             X509_ALGOR_set0(alg1, OBJ_nid2obj(EVP_PKEY_id(pkey)),
+                             V_ASN1_SEQUENCE, params);
          }
          return 1;
  #endif
  /* --------------------- free functions * ------------------------------*/
  static void pkey_free_gost_ec(EVP_PKEY *key)
  {
-     EC_KEY_free(key->pkey.ec);
+     EC_KEY_free(EVP_PKEY_get0_EC_KEY(key));
  }
  
  /* ------------------ private key functions  -----------------------------*/
@@@ -706,7 -704,7 +706,7 @@@ static int pub_encode_gost_ec(X509_PUBK
      int ptype = V_ASN1_UNDEF;
  
      algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk));
-     if (pk->save_parameters) {
+     if (EVP_PKEY_save_parameters((EVP_PKEY *)pk, -1)) {
          ASN1_STRING *params = encode_gost_algor_params(pk);
          pval = params;
          ptype = V_ASN1_SEQUENCE;
@@@ -806,7 -804,7 +806,7 @@@ static int pkey_size_gost(const EVP_PKE
  /* ---------------------- ASN1 METHOD for GOST MAC  -------------------*/
  static void mackey_free_gost(EVP_PKEY *pk)
  {
-     OPENSSL_free(pk->pkey.ptr);
+     OPENSSL_free(EVP_PKEY_get0(pk));
  }
  
  static int mac_ctrl_gost(EVP_PKEY *pkey, int op, long arg1, void *arg2)
diff --combined gost_crypt.c
index 4358265b7016e25e4a8b0ac1e52c6d43cee687a0,f9ed2cf22b0c8125252ef354b653e096476b0251..d375a3dc89dd1b237900acf719f1fd371b72afd7
@@@ -51,9 -51,8 +51,8 @@@ const EVP_CIPHER *cipher_gost(void
  {
      if (_hidden_Gost28147_89_cipher == NULL
          && ((_hidden_Gost28147_89_cipher =
-              EVP_CIPHER_meth_new(NID_id_Gost28147_89,
-                                  1  /* block_size */,
-                                  32 /* key_size */)) == NULL
+              EVP_CIPHER_meth_new(NID_id_Gost28147_89, 1 /* block_size */ ,
+                                  32 /* key_size */ )) == NULL
              || !EVP_CIPHER_meth_set_iv_length(_hidden_Gost28147_89_cipher, 8)
              || !EVP_CIPHER_meth_set_flags(_hidden_Gost28147_89_cipher,
                                            EVP_CIPH_CFB_MODE |
              || !EVP_CIPHER_meth_set_cleanup(_hidden_Gost28147_89_cipher,
                                              gost_cipher_cleanup)
              || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_Gost28147_89_cipher,
-                                                   sizeof(struct ossl_gost_cipher_ctx))
-             || !EVP_CIPHER_meth_set_set_asn1_params(_hidden_Gost28147_89_cipher,
-                                                     gost89_set_asn1_parameters)
-             || !EVP_CIPHER_meth_set_get_asn1_params(_hidden_Gost28147_89_cipher,
-                                                     gost89_get_asn1_parameters)
+                                                   sizeof(struct
+                                                          ossl_gost_cipher_ctx))
+             ||
+             !EVP_CIPHER_meth_set_set_asn1_params(_hidden_Gost28147_89_cipher,
+                                                  gost89_set_asn1_parameters)
+             ||
+             !EVP_CIPHER_meth_set_get_asn1_params(_hidden_Gost28147_89_cipher,
+                                                  gost89_get_asn1_parameters)
              || !EVP_CIPHER_meth_set_ctrl(_hidden_Gost28147_89_cipher,
                                           gost_cipher_ctl))) {
          EVP_CIPHER_meth_free(_hidden_Gost28147_89_cipher);
      }
      return _hidden_Gost28147_89_cipher;
  }
-  
  static EVP_CIPHER *_hidden_Gost28147_89_cbc = NULL;
  const EVP_CIPHER *cipher_gost_cbc(void)
  {
      if (_hidden_Gost28147_89_cbc == NULL
          && ((_hidden_Gost28147_89_cbc =
-              EVP_CIPHER_meth_new(NID_gost89_cbc,
-                                  8  /* block_size */,
-                                  32 /* key_size */)) == NULL
+              EVP_CIPHER_meth_new(NID_gost89_cbc, 8 /* block_size */ ,
+                                  32 /* key_size */ )) == NULL
              || !EVP_CIPHER_meth_set_iv_length(_hidden_Gost28147_89_cbc, 8)
              || !EVP_CIPHER_meth_set_flags(_hidden_Gost28147_89_cbc,
-                                        EVP_CIPH_CBC_MODE |
-                                        EVP_CIPH_CUSTOM_IV | 
-                                        EVP_CIPH_RAND_KEY | 
-                                        EVP_CIPH_ALWAYS_CALL_INIT)
+                                           EVP_CIPH_CBC_MODE |
+                                           EVP_CIPH_CUSTOM_IV |
+                                           EVP_CIPH_RAND_KEY |
+                                           EVP_CIPH_ALWAYS_CALL_INIT)
              || !EVP_CIPHER_meth_set_init(_hidden_Gost28147_89_cbc,
                                           gost_cipher_init_cbc)
              || !EVP_CIPHER_meth_set_do_cipher(_hidden_Gost28147_89_cbc,
              || !EVP_CIPHER_meth_set_cleanup(_hidden_Gost28147_89_cbc,
                                              gost_cipher_cleanup)
              || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_Gost28147_89_cbc,
-                                                   sizeof(struct ossl_gost_cipher_ctx))
+                                                   sizeof(struct
+                                                          ossl_gost_cipher_ctx))
              || !EVP_CIPHER_meth_set_set_asn1_params(_hidden_Gost28147_89_cbc,
                                                      gost89_set_asn1_parameters)
              || !EVP_CIPHER_meth_set_get_asn1_params(_hidden_Gost28147_89_cbc,
      }
      return _hidden_Gost28147_89_cbc;
  }
  static EVP_CIPHER *_hidden_gost89_cnt = NULL;
  const EVP_CIPHER *cipher_gost_cpacnt(void)
  {
      if (_hidden_gost89_cnt == NULL
          && ((_hidden_gost89_cnt =
-              EVP_CIPHER_meth_new(NID_gost89_cnt,
-                                  1  /* block_size */,
-                                  32 /* key_size */)) == NULL
+              EVP_CIPHER_meth_new(NID_gost89_cnt, 1 /* block_size */ ,
+                                  32 /* key_size */ )) == NULL
              || !EVP_CIPHER_meth_set_iv_length(_hidden_gost89_cnt, 8)
              || !EVP_CIPHER_meth_set_flags(_hidden_gost89_cnt,
                                            EVP_CIPH_OFB_MODE |
              || !EVP_CIPHER_meth_set_cleanup(_hidden_gost89_cnt,
                                              gost_cipher_cleanup)
              || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_gost89_cnt,
-                                                   sizeof(struct ossl_gost_cipher_ctx))
+                                                   sizeof(struct
+                                                          ossl_gost_cipher_ctx))
              || !EVP_CIPHER_meth_set_set_asn1_params(_hidden_gost89_cnt,
                                                      gost89_set_asn1_parameters)
              || !EVP_CIPHER_meth_set_get_asn1_params(_hidden_gost89_cnt,
@@@ -154,9 -157,8 +157,8 @@@ const EVP_CIPHER *cipher_gost_cpcnt_12(
  {
      if (_hidden_gost89_cnt_12 == NULL
          && ((_hidden_gost89_cnt_12 =
-              EVP_CIPHER_meth_new(NID_gost89_cnt_12,
-                                  1  /* block_size */,
-                                  32 /* key_size */)) == NULL
+              EVP_CIPHER_meth_new(NID_gost89_cnt_12, 1 /* block_size */ ,
+                                  32 /* key_size */ )) == NULL
              || !EVP_CIPHER_meth_set_iv_length(_hidden_gost89_cnt_12, 8)
              || !EVP_CIPHER_meth_set_flags(_hidden_gost89_cnt_12,
                                            EVP_CIPH_OFB_MODE |
              || !EVP_CIPHER_meth_set_cleanup(_hidden_gost89_cnt_12,
                                              gost_cipher_cleanup)
              || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_gost89_cnt_12,
-                                                   sizeof(struct ossl_gost_cipher_ctx))
+                                                   sizeof(struct
+                                                          ossl_gost_cipher_ctx))
              || !EVP_CIPHER_meth_set_set_asn1_params(_hidden_gost89_cnt_12,
                                                      gost89_set_asn1_parameters)
              || !EVP_CIPHER_meth_set_get_asn1_params(_hidden_gost89_cnt_12,
@@@ -196,7 -199,6 +199,6 @@@ void cipher_gost_destroy(void
      _hidden_gost89_cnt_12 = NULL;
  }
  
  /* Implementation of GOST 28147-89 in MAC (imitovstavka) mode */
  /* Init functions which set specific parameters */
  static int gost_imit_init_cpa(EVP_MD_CTX *ctx);
@@@ -223,7 -225,8 +225,8 @@@ EVP_MD *imit_gost_cpa(void
              || !EVP_MD_meth_set_result_size(md, 4)
              || !EVP_MD_meth_set_input_blocksize(md, 8)
              || !EVP_MD_meth_set_app_datasize(md,
-                                              sizeof(struct ossl_gost_imit_ctx))
+                                              sizeof(struct
+                                                     ossl_gost_imit_ctx))
              || !EVP_MD_meth_set_flags(md, 0)
              || !EVP_MD_meth_set_init(md, gost_imit_init_cpa)
              || !EVP_MD_meth_set_update(md, gost_imit_update)
@@@ -254,7 -257,8 +257,8 @@@ EVP_MD *imit_gost_cp_12(void
              || !EVP_MD_meth_set_result_size(md, 4)
              || !EVP_MD_meth_set_input_blocksize(md, 8)
              || !EVP_MD_meth_set_app_datasize(md,
-                                              sizeof(struct ossl_gost_imit_ctx))
+                                              sizeof(struct
+                                                     ossl_gost_imit_ctx))
              || !EVP_MD_meth_set_flags(md, 0)
              || !EVP_MD_meth_set_init(md, gost_imit_init_cp_12)
              || !EVP_MD_meth_set_update(md, gost_imit_update)
@@@ -364,11 -368,11 +368,11 @@@ static int gost_cipher_init_param(EVP_C
                                    const unsigned char *iv, int enc,
                                    int paramNID, int mode)
  {
-     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      if (EVP_CIPHER_CTX_get_app_data(ctx) == NULL) {
          if (!gost_cipher_set_param(c, paramNID))
              return 0;
-         EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_cipher_data(ctx));
+         EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_get_cipher_data(ctx));
      }
      if (key)
          gost_key(&(c->cctx), key);
                 EVP_CIPHER_CTX_iv_length(ctx));
      }
      memcpy(EVP_CIPHER_CTX_iv_noconst(ctx),
-            EVP_CIPHER_CTX_original_iv(ctx),
-            EVP_CIPHER_CTX_iv_length(ctx));
+            EVP_CIPHER_CTX_original_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx));
      return 1;
  }
  
@@@ -387,7 -390,7 +390,7 @@@ static int gost_cipher_init_cnt(EVP_CIP
                                  const unsigned char *iv,
                                  gost_subst_block * block)
  {
-     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      gost_init(&(c->cctx), block);
      c->key_meshing = 1;
      c->count = 0;
                 EVP_CIPHER_CTX_iv_length(ctx));
      }
      memcpy(EVP_CIPHER_CTX_iv_noconst(ctx),
-            EVP_CIPHER_CTX_original_iv(ctx),
-            EVP_CIPHER_CTX_iv_length(ctx));
+            EVP_CIPHER_CTX_original_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx));
      return 1;
  }
  
@@@ -485,16 -487,16 +487,16 @@@ static void gost_cnt_next(void *ctx, un
  int gost_cipher_do_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out,
                         const unsigned char *in, size_t inl)
  {
 -    OPENSSL_assert(inl % 8 == 0);
      unsigned char b[8];
      const unsigned char *in_ptr = in;
      unsigned char *out_ptr = out;
      int i;
-     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx);
 +    OPENSSL_assert(inl % 8 == 0);
      if (EVP_CIPHER_CTX_encrypting(ctx)) {
          while (inl > 0) {
-             
              for (i = 0; i < 8; i++) {
                  b[i] = iv[i] ^ in_ptr[i];
              }
@@@ -528,7 -530,7 +530,7 @@@ int gost_cipher_do_cfb(EVP_CIPHER_CTX *
      size_t i = 0;
      size_t j = 0;
      unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx);
-     unsigned char *iv  = EVP_CIPHER_CTX_iv_noconst(ctx);
+     unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx);
  /* process partial block if any */
      if (EVP_CIPHER_CTX_num(ctx)) {
          for (j = EVP_CIPHER_CTX_num(ctx), i = 0; j < 8 && i < inl;
          /*
           * block cipher current iv
           */
-         gost_crypt_mesh(EVP_CIPHER_CTX_cipher_data(ctx), iv, buf);
+         gost_crypt_mesh(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf);
          /*
           * xor next block of input text with it and output it
           */
      }
  /* Process rest of buffer */
      if (i < inl) {
-         gost_crypt_mesh(EVP_CIPHER_CTX_cipher_data(ctx), iv, buf);
+         gost_crypt_mesh(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf);
          if (!EVP_CIPHER_CTX_encrypting(ctx))
              memcpy(buf + 8, in_ptr, inl - i);
          for (j = 0; i < inl; j++, i++) {
@@@ -594,7 -596,7 +596,7 @@@ static int gost_cipher_do_cnt(EVP_CIPHE
      size_t i = 0;
      size_t j;
      unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx);
-     unsigned char *iv  = EVP_CIPHER_CTX_iv_noconst(ctx);
+     unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx);
  /* process partial block if any */
      if (EVP_CIPHER_CTX_num(ctx)) {
          for (j = EVP_CIPHER_CTX_num(ctx), i = 0; j < 8 && i < inl;
           * block cipher current iv
           */
          /* Encrypt */
-         gost_cnt_next(EVP_CIPHER_CTX_cipher_data(ctx), iv, buf);
+         gost_cnt_next(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf);
          /*
           * xor next block of input text with it and output it
           */
      }
  /* Process rest of buffer */
      if (i < inl) {
-         gost_cnt_next(EVP_CIPHER_CTX_cipher_data(ctx), iv, buf);
+         gost_cnt_next(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf);
          for (j = 0; i < inl; j++, i++) {
              out_ptr[j] = buf[j] ^ in_ptr[j];
          }
  /* Cleaning up of EVP_CIPHER_CTX */
  int gost_cipher_cleanup(EVP_CIPHER_CTX *ctx)
  {
-     gost_destroy(&((struct ossl_gost_cipher_ctx *)EVP_CIPHER_CTX_cipher_data(ctx))->cctx);
+     gost_destroy(&
+                  ((struct ossl_gost_cipher_ctx *)
+                   EVP_CIPHER_CTX_get_cipher_data(ctx))->cctx);
      EVP_CIPHER_CTX_set_app_data(ctx, NULL);
      return 1;
  }
@@@ -653,7 -657,8 +657,8 @@@ int gost_cipher_ctl(EVP_CIPHER_CTX *ctx
  #if 0
      case EVP_CTRL_INIT:
          {
-             struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+             struct ossl_gost_cipher_ctx *c =
+                 EVP_CIPHER_CTX_get_cipher_data(ctx);
              if (c == NULL) {
                  return -1;
              }
  #endif
      case EVP_CTRL_RAND_KEY:
          {
-             if (RAND_bytes((unsigned char *)ptr, EVP_CIPHER_CTX_key_length(ctx)) <= 0) {
+             if (RAND_bytes
+                 ((unsigned char *)ptr, EVP_CIPHER_CTX_key_length(ctx)) <= 0) {
                  GOSTerr(GOST_F_GOST_CIPHER_CTL, GOST_R_RNG_ERROR);
                  return -1;
              }
  
      case EVP_CTRL_SET_SBOX:
          if (ptr) {
-             struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+             struct ossl_gost_cipher_ctx *c =
+                 EVP_CIPHER_CTX_get_cipher_data(ctx);
              int nid;
              int cur_meshing;
              int ret;
              c->key_meshing = cur_meshing;
              return ret;
          } else {
-           return 0;
+             return 0;
          }
      case EVP_CTRL_KEY_MESH:
          {
-             struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+             struct ossl_gost_cipher_ctx *c =
+                 EVP_CIPHER_CTX_get_cipher_data(ctx);
  
              if (c == NULL) {
                  return -1;
@@@ -743,14 -751,15 +751,15 @@@ int gost89_set_asn1_parameters(EVP_CIPH
      int len = 0;
      unsigned char *buf = NULL;
      unsigned char *p = NULL;
-     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      GOST_CIPHER_PARAMS *gcp = GOST_CIPHER_PARAMS_new();
      ASN1_OCTET_STRING *os = NULL;
      if (!gcp) {
          GOSTerr(GOST_F_GOST89_SET_ASN1_PARAMETERS, ERR_R_MALLOC_FAILURE);
          return 0;
      }
-     if (!ASN1_OCTET_STRING_set(gcp->iv, EVP_CIPHER_CTX_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx))) {
+     if (!ASN1_OCTET_STRING_set
+         (gcp->iv, EVP_CIPHER_CTX_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx))) {
          GOST_CIPHER_PARAMS_free(gcp);
          GOSTerr(GOST_F_GOST89_SET_ASN1_PARAMETERS, ERR_R_MALLOC_FAILURE);
          return 0;
@@@ -788,7 -797,7 +797,7 @@@ int gost89_get_asn1_parameters(EVP_CIPH
      int len;
      GOST_CIPHER_PARAMS *gcp = NULL;
      unsigned char *p;
-     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_cipher_data(ctx);
+     struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      int nid;
  
      if (ASN1_TYPE_get(params) != V_ASN1_SEQUENCE) {
          GOST_CIPHER_PARAMS_free(gcp);
          return -1;
      }
-     /*XXX missing non-const accessor*/
+     /*XXX missing non-const accessor */
      memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), gcp->iv->data,
-         EVP_CIPHER_CTX_iv_length(ctx));
+            EVP_CIPHER_CTX_iv_length(ctx));
  
      GOST_CIPHER_PARAMS_free(gcp);
  
@@@ -931,9 -940,10 +940,10 @@@ int gost_imit_ctrl(EVP_MD_CTX *ctx, in
          return 1;
      case EVP_MD_CTRL_SET_KEY:
          {
-             struct ossl_gost_imit_ctx *gost_imit_ctx = EVP_MD_CTX_md_data(ctx);
+             struct ossl_gost_imit_ctx *gost_imit_ctx =
+                 EVP_MD_CTX_md_data(ctx);
  
-             if (EVP_MD_meth_get_init(EVP_MD_CTX_md(ctx))(ctx) <= 0) {
+             if (EVP_MD_meth_get_init(EVP_MD_CTX_md(ctx)) (ctx) <= 0) {
                  GOSTerr(GOST_F_GOST_IMIT_CTRL, GOST_R_MAC_KEY_NOT_SET);
                  return 0;
              }
index f6c4428c30d3387eefaa45b5dc83edebd87709b5,24e389a6cee3c9cf9174a8ba7d09c56558d7c3f8..b3aa4b9aa9009184dae6b9cc20b30f9ba9b4deba
@@@ -96,7 -96,7 +96,7 @@@ static struct GRASSHOPPER_CIPHER_PARAM
                  gost_grasshopper_cipher_do_ctr,
                  gost_grasshopper_cipher_destroy_ctr,
                  1,
 -                sizeof(gost_grasshopper_cipher_ctx),
 +                sizeof(gost_grasshopper_cipher_ctx_ctr),
                  8,
                  false
          },
  
  /* Set 256 bit  key into context */
  static GRASSHOPPER_INLINE void gost_grasshopper_cipher_key(gost_grasshopper_cipher_ctx* c, const uint8_t* k) {
-     for (int i = 0; i < 2; i++) {
+               int i;
+     for (i = 0; i < 2; i++) {
          grasshopper_copy128(&c->key.k.k[i], (const grasshopper_w128_t*) (k + i * 16));
      }
      grasshopper_set_encrypt_key(&c->encrypt_round_keys, &c->key);
  
  /* Cleans up key from context */
  static GRASSHOPPER_INLINE void gost_grasshopper_cipher_destroy(gost_grasshopper_cipher_ctx* c) {
-     for (int i = 0; i < 2; i++) {
+               int i;
+     for (i = 0; i < 2; i++) {
          grasshopper_zero128(&c->key.k.k[i]);
      }
-     for (int i = 0; i < GRASSHOPPER_ROUND_KEYS_COUNT; i++) {
+     for (i = 0; i < GRASSHOPPER_ROUND_KEYS_COUNT; i++) {
          grasshopper_zero128(&c->encrypt_round_keys.k[i]);
      }
-     for (int i = 0; i < GRASSHOPPER_ROUND_KEYS_COUNT; i++) {
+     for (i = 0; i < GRASSHOPPER_ROUND_KEYS_COUNT; i++) {
          grasshopper_zero128(&c->decrypt_round_keys.k[i]);
      }
      grasshopper_zero128(&c->buffer);
@@@ -142,10 -144,10 +144,10 @@@ static GRASSHOPPER_INLINE void gost_gra
  
  static int gost_grasshopper_cipher_init(EVP_CIPHER_CTX* ctx, const unsigned char* key,
                                          const unsigned char* iv, int enc) {
-     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_get_cipher_data(ctx);
  
      if (EVP_CIPHER_CTX_get_app_data(ctx) == NULL) {
-         EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_cipher_data(ctx));
+         EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_get_cipher_data(ctx));
      }
  
      if (key != NULL) {
  static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ecb(EVP_CIPHER_CTX* ctx, const unsigned char* key,
                                                                 const unsigned char* iv,
                                                                 int enc) {
-     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      c->type = GRASSHOPPER_CIPHER_ECB;
      return gost_grasshopper_cipher_init(ctx, key, iv, enc);
  }
  static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_cbc(EVP_CIPHER_CTX* ctx, const unsigned char* key,
                                                                 const unsigned char* iv,
                                                                 int enc) {
-     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      c->type = GRASSHOPPER_CIPHER_CBC;
      return gost_grasshopper_cipher_init(ctx, key, iv, enc);
  }
  static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ofb(EVP_CIPHER_CTX* ctx, const unsigned char* key,
                                                                 const unsigned char* iv,
                                                                 int enc) {
-     gost_grasshopper_cipher_ctx_ofb* c = EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx_ofb* c = EVP_CIPHER_CTX_get_cipher_data(ctx);
  
      c->c.type = GRASSHOPPER_CIPHER_OFB;
  
  static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_cfb(EVP_CIPHER_CTX* ctx, const unsigned char* key,
                                                                 const unsigned char* iv,
                                                                 int enc) {
-     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = EVP_CIPHER_CTX_get_cipher_data(ctx);
      c->type = GRASSHOPPER_CIPHER_CFB;
      return gost_grasshopper_cipher_init(ctx, key, iv, enc);
  }
  static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ctr(EVP_CIPHER_CTX* ctx, const unsigned char* key,
                                                                 const unsigned char* iv,
                                                                 int enc) {
-     gost_grasshopper_cipher_ctx_ctr* c = EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx_ctr* c = EVP_CIPHER_CTX_get_cipher_data(ctx);
  
      c->c.type = GRASSHOPPER_CIPHER_CTR;
  
  
  static GRASSHOPPER_INLINE int gost_grasshopper_cipher_do(EVP_CIPHER_CTX* ctx, unsigned char* out,
                                                           const unsigned char* in, size_t inl) {
-     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      struct GRASSHOPPER_CIPHER_PARAMS* params = &gost_cipher_params[c->type];
  
      return params->do_cipher(ctx, out, in, inl);
  
  static int gost_grasshopper_cipher_do_ecb(EVP_CIPHER_CTX* ctx, unsigned char* out,
                                            const unsigned char* in, size_t inl) {
-     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      bool encrypting = (bool) EVP_CIPHER_CTX_encrypting(ctx);
      const unsigned char* current_in = in;
      unsigned char* current_out = out;
  
  static int gost_grasshopper_cipher_do_cbc(EVP_CIPHER_CTX* ctx, unsigned char* out,
                                            const unsigned char* in, size_t inl) {
-     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      unsigned char* iv = EVP_CIPHER_CTX_iv_noconst(ctx);
      bool encrypting = (bool) EVP_CIPHER_CTX_encrypting(ctx);
      const unsigned char* current_in = in;
  
  static int gost_grasshopper_cipher_do_ctr(EVP_CIPHER_CTX* ctx, unsigned char* out,
                                            const unsigned char* in, size_t inl) {
-     gost_grasshopper_cipher_ctx_ctr* c = (gost_grasshopper_cipher_ctx_ctr*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx_ctr* c = (gost_grasshopper_cipher_ctx_ctr*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      unsigned char* iv = EVP_CIPHER_CTX_iv_noconst(ctx);
      const unsigned char* current_in = in;
      unsigned char* current_out = out;
      grasshopper_w128_t* currentInputBlock;
      grasshopper_w128_t* currentOutputBlock;
      size_t lasted;
 -              size_t i;
 +    size_t i;
  
      memcpy(&c->iv_buffer, iv, 8);
  
      // full parts
 -    for (i = 0; i < blocks; i++, current_in += GRASSHOPPER_BLOCK_SIZE, current_out += GRASSHOPPER_BLOCK_SIZE) {
 +    for (i = 0; i < blocks; i++) {
          currentInputBlock = (grasshopper_w128_t*) current_in;
          currentOutputBlock = (grasshopper_w128_t*) current_out;
          memcpy(c->iv_buffer.b + 8, &c->counter, 8);
          grasshopper_encrypt_block(&c->c.encrypt_round_keys, &c->iv_buffer, currentOutputBlock, &c->c.buffer);
          grasshopper_append128(currentOutputBlock, currentInputBlock);
          c->counter += 1;
 +        current_in += GRASSHOPPER_BLOCK_SIZE;
 +        current_out += GRASSHOPPER_BLOCK_SIZE;
      }
  
      // last part
@@@ -372,7 -372,7 +374,7 @@@ static void gost_grasshopper_cnt_next(g
  
  static int gost_grasshopper_cipher_do_ofb(EVP_CIPHER_CTX* ctx, unsigned char* out,
                                            const unsigned char* in, size_t inl) {
-     gost_grasshopper_cipher_ctx_ofb* c = (gost_grasshopper_cipher_ctx_ofb*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx_ofb* c = (gost_grasshopper_cipher_ctx_ofb*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      const unsigned char* in_ptr = in;
      unsigned char* out_ptr = out;
      unsigned char* buf = EVP_CIPHER_CTX_buf_noconst(ctx);
  
  static int gost_grasshopper_cipher_do_cfb(EVP_CIPHER_CTX* ctx, unsigned char* out,
                                            const unsigned char* in, size_t inl) {
-     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      const unsigned char* in_ptr = in;
      unsigned char* out_ptr = out;
      unsigned char* buf = EVP_CIPHER_CTX_buf_noconst(ctx);
  }
  
  static int gost_grasshopper_cipher_cleanup(EVP_CIPHER_CTX* ctx) {
-     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_cipher_data(ctx);
+     gost_grasshopper_cipher_ctx* c = (gost_grasshopper_cipher_ctx*) EVP_CIPHER_CTX_get_cipher_data(ctx);
      struct GRASSHOPPER_CIPHER_PARAMS* params = &gost_cipher_params[c->type];
  
      gost_grasshopper_cipher_destroy(c);