}
fr_radius_encode_chap_password(buffer,
- fr_rand() & 0xff, vector,
+ fr_rand() & 0xff, vector, RADIUS_AUTH_VECTOR_LENGTH,
request->password->vp_strvalue,
request->password->vp_length);
fr_pair_value_memdup(vp, buffer, sizeof(buffer), false);
} else {
vector = request->packet->vector;
}
- fr_radius_encode_chap_password(chap_password, (uint8_t)(fr_rand() & 0xff), vector,
+ fr_radius_encode_chap_password(chap_password, (uint8_t)(fr_rand() & 0xff), vector, RADIUS_AUTH_VECTOR_LENGTH,
in_head->vb_strvalue, in_head->vb_length);
MEM(vb = fr_value_box_alloc_null(ctx));
} else {
vector = request->packet->vector;
}
- fr_radius_encode_chap_password(pass_str, chap->vp_octets[0], vector,
+ fr_radius_encode_chap_password(pass_str, chap->vp_octets[0], vector, RADIUS_AUTH_VECTOR_LENGTH,
known_good->vp_strvalue, known_good->vp_length);
/*
* @param[out] out An output buffer of 17 bytes (id + digest).
* @param[in] id CHAP ID, a random ID for request/response matching.
* @param[in] vector from the original packet or challenge attribute.
+ * @param[in] vector_len Length of the vector.
* @param[in] password Input password to hash.
* @param[in] password_len Length of input password.
*/
void fr_radius_encode_chap_password(uint8_t out[static 1 + RADIUS_CHAP_CHALLENGE_LENGTH],
- uint8_t id, uint8_t const vector[static RADIUS_AUTH_VECTOR_LENGTH],
+ uint8_t id, uint8_t const *vector, size_t vector_len,
char const *password, size_t password_len)
{
fr_md5_ctx_t *md5_ctx;
fr_md5_update(md5_ctx, (uint8_t const *)&id, 1);
fr_md5_update(md5_ctx, (uint8_t const *)password, password_len);
- fr_md5_update(md5_ctx, vector, RADIUS_AUTH_VECTOR_LENGTH);
+ fr_md5_update(md5_ctx, vector, vector_len);
out[0] = id;
fr_md5_final(out + 1, md5_ctx);
fr_md5_ctx_free_from_list(&md5_ctx);
* protocols/radius/encode.c
*/
void fr_radius_encode_chap_password(uint8_t out[static 1 + RADIUS_CHAP_CHALLENGE_LENGTH],
- uint8_t id, uint8_t const vector[static RADIUS_AUTH_VECTOR_LENGTH],
- char const *password, size_t password_len) CC_HINT(nonnull(1,3,4));
+ uint8_t id, uint8_t const *vector, size_t vector_len,
+ char const *password, size_t password_len) CC_HINT(nonnull(1,3,5));
ssize_t fr_radius_encode_pair(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *encode_ctx);