/* NB: setting type makes EVP do_cipher callback useless */
c->c.type = GRASSHOPPER_CIPHER_CTRACPKM;
EVP_CIPHER_CTX_set_num(ctx, 0);
- c->section_size = 0; /* by default meshing is turned off */
- c->skip_sections = 0; /* will be set to 1 on EVP_CTRL_KEY_MESH */
+ c->section_size = 4096;
+ c->skip_sections = 1;
return gost_grasshopper_cipher_init(ctx, key, iv, enc);
}
}
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;