INNER CODE UNIT · Rust

pk_decode

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

    fn pk_decode<const K: usize>(pk: &[u8]) -> Result<([u8; 32], Vector<K>), UnknownCryptoError> {
        if pk.len() != Self::PUBLIC_KEY_SIZE {
            return Err(UnknownCryptoError);
        }

        let mut rho = [0u8; 32];
        rho.copy_from_slice(&pk[..32]);

        let mut t1 = Vector::<K>::zero();

        for (idx, encpoly) in (0..Self::DIM_K).zip(pk[32..].chunks_exact(320)) {
            for (fe, blk) in t1[idx]
                .coefficients
                .chunks_exact_mut(4)
                .zip(encpoly.chunks_exact(5))
            {
                let c = |k: usize| blk[k] as u32;
                fe[0].0 = (c(0) | (c(1) << 8)) & 0x3FF;

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…