INNER CODE UNIT · Rust

bitunpack_ring_element_d

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

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

        let fe_2power12 = FieldElement::new(1 << 12);
        for (fe, blk) in w.coefficients.chunks_exact_mut(8).zip(v.chunks_exact(13)) {
            let b = |k: usize| blk[k] as u32;
            let t = [
                b(0) | (b(1) << 8),
                (b(1) >> 5) | (b(2) << 3) | (b(3) << 11),
                (b(3) >> 2) | (b(4) << 6),
                (b(4) >> 7) | (b(5) << 1) | (b(6) << 9),
                (b(6) >> 4) | (b(7) << 4) | (b(8) << 12),
                (b(8) >> 1) | (b(9) << 7),
                (b(9) >> 6) | (b(10) << 2) | (b(11) << 10),
                (b(11) >> 3) | (b(12) << 5),
            ];

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…