X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_grasshopper_cipher.c;h=528a7ee6c5a35fcb5c376c8949191664eda9a1e5;hb=2be13cb5c7e96d6bdead59b37717c2f49a581e9e;hp=07dfd91a88d937da446844c823dd78e87886e505;hpb=07c957df13588802781cb36d1539e22fba7e071e;p=openssl-gost%2Fengine.git diff --git a/gost_grasshopper_cipher.c b/gost_grasshopper_cipher.c index 07dfd91..528a7ee 100644 --- a/gost_grasshopper_cipher.c +++ b/gost_grasshopper_cipher.c @@ -659,13 +659,16 @@ int gost_grasshopper_cipher_ctl(EVP_CIPHER_CTX* ctx, int type, int arg, void* pt } break; } - case EVP_CTRL_KEY_MESH: - if (arg <= 1 || ((arg - 1) & arg)) - return -1; + case EVP_CTRL_KEY_MESH: { gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); + if (c->c.type != GRASSHOPPER_CIPHER_CTRACPKM || + arg <= 1 || + ((arg - 1) & arg)) + return -1; c->section_size = arg; c->skip_sections = 1; break; + } default: GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_CTL, GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND); return -1;