pqc/crypto_kem/mceliece460896f/clean/root.c

34 lines
734 B
C
Raw Normal View History

/*
This file is for evaluating a polynomial at one or more field elements
*/
#include "root.h"
#include "params.h"
/* input: polynomial f and field element a */
/* return f(a) */
gf PQCLEAN_MCELIECE460896F_CLEAN_eval(gf *f, gf a) {
int i;
gf r;
r = f[ SYS_T ];
for (i = SYS_T - 1; i >= 0; i--) {
r = PQCLEAN_MCELIECE460896F_CLEAN_gf_mul(r, a);
r = PQCLEAN_MCELIECE460896F_CLEAN_gf_add(r, f[i]);
}
return r;
}
/* input: polynomial f and list of field elements L */
/* output: out = [ f(a) for a in L ] */
void PQCLEAN_MCELIECE460896F_CLEAN_root(gf *out, gf *f, gf *L) {
int i;
for (i = 0; i < SYS_N; i++) {
out[i] = PQCLEAN_MCELIECE460896F_CLEAN_eval(f, L[i]);
}
}