classic_mceliece_rust/
synd.rs1use crate::gf::{gf_add, gf_inv, gf_mul, Gf};
4use crate::params::{SYS_N, SYS_T};
5use crate::root::eval;
6
7pub(crate) fn synd(
10 out: &mut [Gf; SYS_T * 2],
11 f: &[Gf; SYS_T + 1],
12 l: &[Gf; SYS_N],
13 r: &[u8; SYS_N / 8],
14) {
15 out[0..2 * SYS_T].fill(0);
16
17 for i in 0..SYS_N {
18 let c: Gf = (r[i / 8] >> (i % 8)) as u16 & 1;
19 let e: Gf = eval(f, l[i]);
20 let mut e_inv: Gf = gf_inv(gf_mul(e, e));
21
22 for itr_out in out.iter_mut() {
23 *itr_out = gf_add(*itr_out, gf_mul(e_inv, c));
24 e_inv = gf_mul(e_inv, l[i]);
25 }
26 }
27}