- if (!EVP_CIPHER_CTX_ctrl(c->cmac_ctx->actx, EVP_CTRL_KEY_MESH, *(int *)ptr, NULL))
- return 0;
+ if (EVP_CIPHER_get0_provider(EVP_CIPHER_CTX_cipher(c->cmac_ctx->actx))
+ == NULL) {
+ if (!EVP_CIPHER_CTX_ctrl(c->cmac_ctx->actx, EVP_CTRL_KEY_MESH,
+ *(int *)ptr, NULL))
+ return 0;
+ } else {
+ size_t cipher_key_mesh = (size_t)*(int *)ptr;
+ OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ params[0] = OSSL_PARAM_construct_size_t("key-mesh",
+ &cipher_key_mesh);
+ if (!EVP_CIPHER_CTX_set_params(c->cmac_ctx->actx, params))
+ return 0;
+ }