INNER CODE UNIT · Rust

bitpack_ring_element_d

orion-rs/orion · src/hazardous/dsa/ml_dsa/internal/mod.rs:146

    fn bitpack_ring_element_d(w: &RingElement, out: &mut [u8]) {
        debug_assert_eq!(MlDsa44::D, MlDsa65::D);
        debug_assert_eq!(MlDsa65::D, MlDsa87::D);
        debug_assert_eq!(out.len(), Self::D_BITPACK_SIZE);

        let fe_2power12 = FieldElement::new(1 << 12);
        for i in 0..256 / 8 {
            let mut t = [0u32; 8];
            for (j, slot) in t.iter_mut().enumerate() {
                *slot = (fe_2power12 - &w.coefficients[8 * i + j]).0;
            }
            out[13 * i] = t[0] as u8;
            out[13 * i + 1] = ((t[0] >> 8) | (t[1] << 5)) as u8;
            out[13 * i + 2] = (t[1] >> 3) as u8;
            out[13 * i + 3] = ((t[1] >> 11) | (t[2] << 2)) as u8;
            out[13 * i + 4] = ((t[2] >> 6) | (t[3] << 7)) as u8;
            out[13 * i + 5] = (t[3] >> 1) as u8;
            out[13 * i + 6] = ((t[3] >> 9) | (t[4] << 4)) as u8;

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…