/* Provenance: openssl/openssl rc4_hmac_md5_set_ctx_params (fixed). * repo: openssl/openssl * commit: 7d56a74a96828985db7354a55227a511615f732b * parent: 55c80c222293a972587004c185dc5653ae207a0e * commit_url: https://github.com/openssl/openssl/commit/7d56a74a96828985db7354a55227a511615f732b * cve: CVE-2022-1434 * license: Apache-2.0 * function: rc4_hmac_md5_set_ctx_params * relpath: providers/implementations/ciphers/cipher_rc4_hmac_md5.c */ static int rc4_hmac_md5_set_ctx_params(void *vctx, const OSSL_PARAM params[]) { PROV_RC4_HMAC_MD5_CTX *ctx = (PROV_RC4_HMAC_MD5_CTX *)vctx; const OSSL_PARAM *p; size_t sz; if (params == NULL) return 1; p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_KEYLEN); if (p != NULL) { if (!OSSL_PARAM_get_size_t(p, &sz)) { ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER); return 0; } if (ctx->base.keylen != sz) { ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH); return 0; } } p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_IVLEN); if (p != NULL) { if (!OSSL_PARAM_get_size_t(p, &sz)) { ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER); return 0; } if (ctx->base.ivlen != sz) { ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH); return 0; } } p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TLS1_AAD); if (p != NULL) { if (p->data_type != OSSL_PARAM_OCTET_STRING) { ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER); return 0; } sz = GET_HW(ctx)->tls_init(&ctx->base, p->data, p->data_size); if (sz == 0) { ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_DATA); return 0; } ctx->tls_aad_pad_sz = sz; } p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_MAC_KEY); if (p != NULL) { if (p->data_type != OSSL_PARAM_OCTET_STRING) { ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER); return 0; } GET_HW(ctx)->init_mackey(&ctx->base, p->data, p->data_size); } p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_TLS_VERSION); if (p != NULL) { if (!OSSL_PARAM_get_uint(p, &ctx->base.tlsversion)) { ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER); return 0; } } return 1; }