From 28c0663468d3b8cd1805a9aa78f1471002ba34f0 Mon Sep 17 00:00:00 2001 From: Nikolay Morozov Date: Thu, 26 Dec 2019 09:17:06 +0300 Subject: [PATCH] Remove unset local buffer meshing. This removes valgrind errors. --- gost89.c | 9 ++++++--- gost_crypt.c | 5 ++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gost89.c b/gost89.c index c670bb6..593bc23 100644 --- a/gost89.c +++ b/gost89.c @@ -621,15 +621,18 @@ int gost_mac_iv(gost_ctx * ctx, int mac_len, const unsigned char *iv, /* Implements key meshing algorithm by modifing ctx and IV in place */ void cryptopro_key_meshing(gost_ctx * ctx, unsigned char *iv) { - unsigned char newkey[32], newiv[8]; + unsigned char newkey[32]; /* Set static keymeshing key */ /* "Decrypt" key with keymeshing key */ gost_dec(ctx, CryptoProKeyMeshingKey, newkey, 4); /* set new key */ gost_key(ctx, newkey); /* Encrypt iv with new key */ - gostcrypt(ctx, iv, newiv); - memcpy(iv, newiv, 8); + if (iv != NULL ) { + unsigned char newiv[8]; + gostcrypt(ctx, iv, newiv); + memcpy(iv, newiv, 8); + } } void acpkm_magma_key_meshing(gost_ctx * ctx) diff --git a/gost_crypt.c b/gost_crypt.c index 16fb661..7e733df 100644 --- a/gost_crypt.c +++ b/gost_crypt.c @@ -1071,15 +1071,14 @@ static int gost_imit_init_cp_12(EVP_MD_CTX *ctx) static void mac_block_mesh(struct ossl_gost_imit_ctx *c, const unsigned char *data) { - unsigned char buffer[8]; /* - * We are using local buffer for iv because CryptoPro doesn't interpret + * We are using NULL for iv because CryptoPro doesn't interpret * internal state of MAC algorithm as iv during keymeshing (but does * initialize internal state from iv in key transport */ assert(c->count % 8 == 0 && c->count <= 1024); if (c->key_meshing && c->count == 1024) { - cryptopro_key_meshing(&(c->cctx), buffer); + cryptopro_key_meshing(&(c->cctx), NULL); } mac_block(&(c->cctx), c->buffer, data); c->count = c->count % 1024 + 8; -- 2.39.5