From c6406d856dd7559341e9f4f64e3a0f1d23ebdc8b Mon Sep 17 00:00:00 2001 From: Arran Cudbard-Bell Date: Wed, 22 Dec 2021 20:30:42 -0600 Subject: [PATCH] Yes, OpenSSL now wants the size of the buffer passed into EVP_DigestSignFinal --- src/lib/eap_aka_sim/crypto.c | 12 ++++++------ .../rlm_eap/types/rlm_eap_fast/eap_fast_crypto.c | 8 ++++---- src/modules/rlm_wimax/rlm_wimax.c | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lib/eap_aka_sim/crypto.c b/src/lib/eap_aka_sim/crypto.c index a5dcc42ade..7efa392918 100644 --- a/src/lib/eap_aka_sim/crypto.c +++ b/src/lib/eap_aka_sim/crypto.c @@ -289,7 +289,7 @@ ssize_t fr_aka_sim_crypto_sign_packet(uint8_t out[static AKA_SIM_MAC_DIGEST_SIZE EVP_PKEY *pkey; uint8_t digest[SHA256_DIGEST_LENGTH]; - size_t digest_len = 0; + size_t digest_len = sizeof(digest); uint8_t const *mac; uint8_t *p = eap_packet->type.data, *end = p + eap_packet->type.length; @@ -644,7 +644,7 @@ int fr_aka_sim_crypto_umts_kdf_0(fr_aka_sim_keys_t *keys) static int ck_ik_prime_derive(fr_aka_sim_keys_t *keys) { uint8_t digest[sizeof(keys->ik_prime) + sizeof(keys->ck_prime)]; - size_t len; + size_t digest_len = sizeof(digest); uint8_t sqn_ak_buff[MILENAGE_SQN_SIZE]; uint16_t l0, l1; @@ -730,7 +730,7 @@ static int ck_ik_prime_derive(fr_aka_sim_keys_t *keys) } if (EVP_DigestSignUpdate(md_ctx, s, s_len) != 1) goto error; - if (EVP_DigestSignFinal(md_ctx, digest, &len) != 1) goto error; + if (EVP_DigestSignFinal(md_ctx, digest, &digest_len) != 1) goto error; memcpy(keys->ik_prime, digest, sizeof(keys->ik_prime)); memcpy(keys->ck_prime, digest + sizeof(keys->ik_prime), sizeof(keys->ck_prime)); @@ -799,7 +799,7 @@ static int aka_prime_prf(uint8_t *out, size_t outlen, } while (p < end) { - size_t len; + size_t digest_len = sizeof(digest); size_t copy; c++; @@ -808,10 +808,10 @@ static int aka_prime_prf(uint8_t *out, size_t outlen, if ((p != out) && EVP_DigestSignUpdate(md_ctx, digest, sizeof(digest)) != 1) goto error;/* Ingest last round */ if (EVP_DigestSignUpdate(md_ctx, in, in_len) != 1) goto error; /* Ingest s */ if (EVP_DigestSignUpdate(md_ctx, &c, sizeof(c)) != 1) goto error; /* Ingest round number */ - if (EVP_DigestSignFinal(md_ctx, digest, &len) != 1) goto error; /* Output T(i) */ + if (EVP_DigestSignFinal(md_ctx, digest, &digest_len) != 1) goto error; /* Output T(i) */ copy = end - p; - if (copy > SHA256_DIGEST_LENGTH) copy = SHA256_DIGEST_LENGTH; + if (copy > digest_len) copy = digest_len; memcpy(p, digest, copy); p += copy; diff --git a/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast_crypto.c b/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast_crypto.c index d948592dcb..f08c047884 100644 --- a/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast_crypto.c +++ b/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast_crypto.c @@ -244,7 +244,7 @@ static void crypto_rfc4346_p_hash(uint8_t *out, size_t out_len, /* * OpenSSL <= 1.1.1 requires a non-null pointer for len */ - EVP_DigestSignFinal(ctx_a, a, &(size_t){ 0 }); + EVP_DigestSignFinal(ctx_a, a, &(size_t){ sizeof(a) }); while (1) { /* Calculate next part of output */ @@ -253,13 +253,13 @@ static void crypto_rfc4346_p_hash(uint8_t *out, size_t out_len, /* Check if last part */ if (out_len < size) { - EVP_DigestSignFinal(ctx_out, a, &(size_t){ 0 }); + EVP_DigestSignFinal(ctx_out, a, &(size_t){ sizeof(a) }); memcpy(out, a, out_len); break; } /* Place digest in output buffer */ - EVP_DigestSignFinal(ctx_out, out, &(size_t){ 0 }); + EVP_DigestSignFinal(ctx_out, out, &(size_t){ EVP_MAX_MD_SIZE }); EVP_MD_CTX_reset(ctx_out); EVP_DigestSignInit(ctx_out, NULL, evp_md, NULL, pkey); @@ -270,7 +270,7 @@ static void crypto_rfc4346_p_hash(uint8_t *out, size_t out_len, EVP_MD_CTX_reset(ctx_a); EVP_DigestSignInit(ctx_a, NULL, evp_md, NULL, pkey); EVP_DigestSignUpdate(ctx_a, a, size); - EVP_DigestSignFinal(ctx_a, a, &(size_t){ 0 }); + EVP_DigestSignFinal(ctx_a, a, &(size_t){ EVP_MAX_MD_SIZE }); } EVP_PKEY_free(pkey); diff --git a/src/modules/rlm_wimax/rlm_wimax.c b/src/modules/rlm_wimax/rlm_wimax.c index 013c3ad9e7..4f80a6693c 100644 --- a/src/modules/rlm_wimax/rlm_wimax.c +++ b/src/modules/rlm_wimax/rlm_wimax.c @@ -167,11 +167,11 @@ static unlang_action_t CC_HINT(nonnull) mod_post_auth(rlm_rcode_t *p_result, mod fr_pair_t *mn_nai, *ip, *fa_rk; EVP_MD_CTX *hmac_ctx; EVP_PKEY *hmac_pkey; - size_t rk1_len, rk2_len, rk_len; uint32_t mip_spi; uint8_t usage_data[24]; uint8_t mip_rk_1[EVP_MAX_MD_SIZE], mip_rk_2[EVP_MAX_MD_SIZE]; uint8_t mip_rk[2 * EVP_MAX_MD_SIZE]; + size_t rk1_len = sizeof(mip_rk_1), rk2_len = sizeof(mip_rk_2), rk_len = sizeof(mip_rk); msk = fr_pair_find_by_da_idx(&request->reply_pairs, attr_eap_msk, 0); emsk = fr_pair_find_by_da_idx(&request->reply_pairs, attr_eap_emsk, 0); -- 2.47.2