#include "poly.h"
#include "common/alloc.h"
#include "common/ec.h"
#include "common/ret.h"
#include "common/utils.h"
#include "eip7594/fft.h"
#include "setup/settings.h"
#include <stdlib.h>
#include <string.h>
void shift_poly(fr_t *p, size_t len, const fr_t *shift_factor) {
fr_t factor_power = FR_ONE;
for (size_t i = 1; i < len; i++) {
fr_mul(&factor_power, &factor_power, shift_factor);
fr_mul(&p[i], &p[i], &factor_power);
}
}
C_KZG_RET poly_lagrange_to_monomial(
fr_t *monomial_out, const fr_t *lagrange, size_t len, const KZGSettings *s
) {
C_KZG_RET ret;
fr_t *lagrange_brp = NULL;
ret = new_fr_array(&lagrange_brp, len);
if (ret != C_KZG_OK) goto out;
memcpy(lagrange_brp, lagrange, sizeof(fr_t) * len);
ret = bit_reversal_permutation(lagrange_brp, sizeof(fr_t), len);
if (ret != C_KZG_OK) goto out;
ret = fr_ifft(monomial_out, lagrange_brp, len, s);
if (ret != C_KZG_OK) goto out;
out:
c_kzg_free(lagrange_brp);
return ret;
}