From: Max Date: Thu, 8 Sep 2016 08:49:08 +0000 (+0300) Subject: merge upstream X-Git-Tag: v1.1.0.2~22^2~2^2~3 X-Git-Url: http://www.wagner.pp.ru/gitweb/?a=commitdiff_plain;h=e2d3705da37abfa9edf270b52178c8c66abc51e7;hp=-c;p=openssl-gost%2Fengine.git merge upstream --- e2d3705da37abfa9edf270b52178c8c66abc51e7 diff --combined gost_ameth.c index 3d1382e,8dc47f1..27217a8 --- a/gost_ameth.c +++ b/gost_ameth.c @@@ -19,8 -19,6 +19,8 @@@ #include "gost_lcl.h" #include "e_gost_err.h" +#include + /* * 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; @@@ -268,8 -266,8 +268,8 @@@ } 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 @@@ -284,7 -282,7 +284,7 @@@ /* --------------------- 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 4358265,f9ed2cf..d375a3d --- a/gost_crypt.c +++ b/gost_crypt.c @@@ -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 | @@@ -68,11 -67,14 +67,14 @@@ || !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); @@@ -80,21 -82,20 +82,20 @@@ } 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, @@@ -102,7 -103,8 +103,8 @@@ || !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, @@@ -114,14 -116,14 +116,14 @@@ } 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 | @@@ -136,7 -138,8 +138,8 @@@ || !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 | @@@ -171,7 -173,8 +173,8 @@@ || !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); @@@ -377,8 -381,7 +381,7 @@@ 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; @@@ -398,8 -401,7 +401,7 @@@ 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; @@@ -552,7 -554,7 +554,7 @@@ /* * 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 */ @@@ -571,7 -573,7 +573,7 @@@ } /* 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; @@@ -614,7 -616,7 +616,7 @@@ * 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 */ @@@ -627,7 -629,7 +629,7 @@@ } /* 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]; } @@@ -641,7 -643,9 +643,9 @@@ /* 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; } @@@ -662,7 -667,8 +667,8 @@@ #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; } @@@ -689,7 -695,8 +695,8 @@@ 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; @@@ -712,11 -719,12 +719,12 @@@ 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) { @@@ -819,9 -828,9 +828,9 @@@ 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; } diff --combined gost_grasshopper_cipher.c index f6c4428,24e389a..b3aa4b9 --- a/gost_grasshopper_cipher.c +++ b/gost_grasshopper_cipher.c @@@ -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 }, @@@ -104,7 -104,8 +104,8 @@@ /* 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); @@@ -113,13 -114,14 +114,14 @@@ /* 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) { @@@ -169,7 -171,7 +171,7 @@@ 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); } @@@ -177,7 -179,7 +179,7 @@@ 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); } @@@ -185,7 -187,7 +187,7 @@@ 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; @@@ -197,7 -199,7 +199,7 @@@ 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); } @@@ -205,7 -207,7 +207,7 @@@ 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; @@@ -219,7 -221,7 +221,7 @@@ 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); @@@ -227,7 -229,7 +229,7 @@@ 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; @@@ -251,7 -253,7 +253,7 @@@ 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; @@@ -283,7 -285,7 +285,7 @@@ 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; @@@ -291,20 -293,18 +293,20 @@@ 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); @@@ -430,7 -430,7 +432,7 @@@ 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); @@@ -508,7 -508,7 +510,7 @@@ } 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);