diff --git a/des/src/consts.rs b/des/src/consts.rs index b6414a8c..90f67f68 100644 --- a/des/src/consts.rs +++ b/des/src/consts.rs @@ -58,69 +58,75 @@ pub const SBOXES: [[u8; 64]; 8] = [ ], ]; -pub(crate) static WEAK_KEYS: &[u64; 64] = &[ - u64::from_ne_bytes([0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01]), - u64::from_ne_bytes([0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE]), - u64::from_ne_bytes([0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1]), - u64::from_ne_bytes([0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E]), - u64::from_ne_bytes([0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E]), - u64::from_ne_bytes([0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01]), - u64::from_ne_bytes([0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1]), - u64::from_ne_bytes([0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01]), - u64::from_ne_bytes([0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE]), - u64::from_ne_bytes([0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01]), - u64::from_ne_bytes([0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1]), - u64::from_ne_bytes([0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E]), - u64::from_ne_bytes([0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE]), - u64::from_ne_bytes([0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E]), - u64::from_ne_bytes([0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE]), - u64::from_ne_bytes([0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1]), - u64::from_ne_bytes([0x01, 0x01, 0x1F, 0x1F, 0x01, 0x01, 0x0E, 0x0E]), - u64::from_ne_bytes([0x1F, 0x1F, 0x01, 0x01, 0x0E, 0x0E, 0x01, 0x01]), - u64::from_ne_bytes([0xE0, 0xE0, 0x1F, 0x1F, 0xF1, 0xF1, 0x0E, 0x0E]), - u64::from_ne_bytes([0x01, 0x01, 0xE0, 0xE0, 0x01, 0x01, 0xF1, 0xF1]), - u64::from_ne_bytes([0x1F, 0x1F, 0xE0, 0xE0, 0x0E, 0x0E, 0xF1, 0xF1]), - u64::from_ne_bytes([0xE0, 0xE0, 0xFE, 0xFE, 0xF1, 0xF1, 0xFE, 0xFE]), - u64::from_ne_bytes([0x01, 0x01, 0xFE, 0xFE, 0x01, 0x01, 0xFE, 0xFE]), - u64::from_ne_bytes([0x1F, 0x1F, 0xFE, 0xFE, 0x0E, 0x0E, 0xFE, 0xFE]), - u64::from_ne_bytes([0xE0, 0xFE, 0x01, 0x1F, 0xF1, 0xFE, 0x01, 0x0E]), - u64::from_ne_bytes([0x01, 0x1F, 0x1F, 0x01, 0x01, 0x0E, 0x0E, 0x01]), - u64::from_ne_bytes([0x1F, 0xE0, 0x01, 0xFE, 0x0E, 0xF1, 0x01, 0xFE]), - u64::from_ne_bytes([0xE0, 0xFE, 0x1F, 0x01, 0xF1, 0xFE, 0x0E, 0x01]), - u64::from_ne_bytes([0x01, 0x1F, 0xE0, 0xFE, 0x01, 0x0E, 0xF1, 0xFE]), - u64::from_ne_bytes([0x1F, 0xE0, 0xE0, 0x1F, 0x0E, 0xF1, 0xF1, 0x0E]), - u64::from_ne_bytes([0xE0, 0xFE, 0xFE, 0xE0, 0xF1, 0xFE, 0xFE, 0xF1]), - u64::from_ne_bytes([0x01, 0x1F, 0xFE, 0xE0, 0x01, 0x0E, 0xFE, 0xF1]), - u64::from_ne_bytes([0x1F, 0xE0, 0xFE, 0x01, 0x0E, 0xF1, 0xFE, 0x01]), - u64::from_ne_bytes([0xFE, 0x01, 0x01, 0xFE, 0xFE, 0x01, 0x01, 0xFE]), - u64::from_ne_bytes([0x01, 0xE0, 0x1F, 0xFE, 0x01, 0xF1, 0x0E, 0xFE]), - u64::from_ne_bytes([0x1F, 0xFE, 0x01, 0xE0, 0x0E, 0xFE, 0x01, 0xF1]), - u64::from_ne_bytes([0xFE, 0x01, 0x1F, 0xE0, 0xFE, 0x01, 0x0E, 0xF1]), - u64::from_ne_bytes([0xFE, 0x01, 0xE0, 0x1F, 0xFE, 0x01, 0xF1, 0x0E]), - u64::from_ne_bytes([0x1F, 0xFE, 0xE0, 0x01, 0x0E, 0xFE, 0xF1, 0x01]), - u64::from_ne_bytes([0xFE, 0x1F, 0x01, 0xE0, 0xFE, 0x0E, 0x01, 0xF1]), - u64::from_ne_bytes([0x01, 0xE0, 0xE0, 0x01, 0x01, 0xF1, 0xF1, 0x01]), - u64::from_ne_bytes([0x1F, 0xFE, 0xFE, 0x1F, 0x0E, 0xFE, 0xFE, 0x0E]), - u64::from_ne_bytes([0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0E, 0xF1, 0x01]), - u64::from_ne_bytes([0x01, 0xE0, 0xFE, 0x1F, 0x01, 0xF1, 0xFE, 0x0E]), - u64::from_ne_bytes([0xE0, 0x01, 0x01, 0xE0, 0xF1, 0x01, 0x01, 0xF1]), - u64::from_ne_bytes([0xFE, 0x1F, 0x1F, 0xFE, 0xFE, 0x0E, 0x0E, 0xFE]), - u64::from_ne_bytes([0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0E, 0xF1]), - u64::from_ne_bytes([0xE0, 0x01, 0x1F, 0xFE, 0xF1, 0x01, 0x0E, 0xFE]), - u64::from_ne_bytes([0xFE, 0xE0, 0x01, 0x1F, 0xFE, 0xF1, 0x01, 0x0E]), - u64::from_ne_bytes([0x01, 0xFE, 0xE0, 0x1F, 0x01, 0xFE, 0xF1, 0x0E]), - u64::from_ne_bytes([0xE0, 0x01, 0xFE, 0x1F, 0xF1, 0x01, 0xFE, 0x0E]), - u64::from_ne_bytes([0xFE, 0xE0, 0x1F, 0x01, 0xFE, 0xF1, 0x0E, 0x01]), - u64::from_ne_bytes([0x01, 0xFE, 0xFE, 0x01, 0x01, 0xFE, 0xFE, 0x01]), - u64::from_ne_bytes([0xE0, 0x1F, 0x01, 0xFE, 0xF1, 0x0E, 0x01, 0xFE]), - u64::from_ne_bytes([0xFE, 0xE0, 0xE0, 0xFE, 0xFE, 0xF1, 0xF1, 0xFE]), - u64::from_ne_bytes([0x1F, 0x01, 0x01, 0x1F, 0x0E, 0x01, 0x01, 0x0E]), - u64::from_ne_bytes([0xE0, 0x1F, 0x1F, 0xE0, 0xF1, 0x0E, 0x0E, 0xF1]), - u64::from_ne_bytes([0xFE, 0xFE, 0x01, 0x01, 0xFE, 0xFE, 0x01, 0x01]), - u64::from_ne_bytes([0x1F, 0x01, 0xE0, 0xFE, 0x0E, 0x01, 0xF1, 0xFE]), - u64::from_ne_bytes([0xE0, 0x1F, 0xFE, 0x01, 0xF1, 0x0E, 0xFE, 0x01]), - u64::from_ne_bytes([0xFE, 0xFE, 0x1F, 0x1F, 0xFE, 0xFE, 0x0E, 0x0E]), - u64::from_ne_bytes([0x1F, 0x01, 0xFE, 0xE0, 0x0E, 0x01, 0xFE, 0xF1]), - u64::from_ne_bytes([0xE0, 0xE0, 0x01, 0x01, 0xF1, 0xF1, 0x01, 0x01]), - u64::from_ne_bytes([0xFE, 0xFE, 0xE0, 0xE0, 0xFE, 0xFE, 0xF1, 0xF1]), +macro_rules! as_ne_u64 { + [$($key:expr,)*] => { + [$(u64::from_ne_bytes($key),)*] + }; +} + +pub(crate) static WEAK_KEYS: &[u64; 64] = &as_ne_u64![ + [0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01], + [0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE], + [0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1], + [0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E], + [0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E], + [0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01], + [0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1], + [0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01], + [0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE], + [0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01], + [0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1], + [0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E], + [0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE], + [0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E], + [0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE], + [0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1], + [0x01, 0x01, 0x1F, 0x1F, 0x01, 0x01, 0x0E, 0x0E], + [0x1F, 0x1F, 0x01, 0x01, 0x0E, 0x0E, 0x01, 0x01], + [0xE0, 0xE0, 0x1F, 0x1F, 0xF1, 0xF1, 0x0E, 0x0E], + [0x01, 0x01, 0xE0, 0xE0, 0x01, 0x01, 0xF1, 0xF1], + [0x1F, 0x1F, 0xE0, 0xE0, 0x0E, 0x0E, 0xF1, 0xF1], + [0xE0, 0xE0, 0xFE, 0xFE, 0xF1, 0xF1, 0xFE, 0xFE], + [0x01, 0x01, 0xFE, 0xFE, 0x01, 0x01, 0xFE, 0xFE], + [0x1F, 0x1F, 0xFE, 0xFE, 0x0E, 0x0E, 0xFE, 0xFE], + [0xE0, 0xFE, 0x01, 0x1F, 0xF1, 0xFE, 0x01, 0x0E], + [0x01, 0x1F, 0x1F, 0x01, 0x01, 0x0E, 0x0E, 0x01], + [0x1F, 0xE0, 0x01, 0xFE, 0x0E, 0xF1, 0x01, 0xFE], + [0xE0, 0xFE, 0x1F, 0x01, 0xF1, 0xFE, 0x0E, 0x01], + [0x01, 0x1F, 0xE0, 0xFE, 0x01, 0x0E, 0xF1, 0xFE], + [0x1F, 0xE0, 0xE0, 0x1F, 0x0E, 0xF1, 0xF1, 0x0E], + [0xE0, 0xFE, 0xFE, 0xE0, 0xF1, 0xFE, 0xFE, 0xF1], + [0x01, 0x1F, 0xFE, 0xE0, 0x01, 0x0E, 0xFE, 0xF1], + [0x1F, 0xE0, 0xFE, 0x01, 0x0E, 0xF1, 0xFE, 0x01], + [0xFE, 0x01, 0x01, 0xFE, 0xFE, 0x01, 0x01, 0xFE], + [0x01, 0xE0, 0x1F, 0xFE, 0x01, 0xF1, 0x0E, 0xFE], + [0x1F, 0xFE, 0x01, 0xE0, 0x0E, 0xFE, 0x01, 0xF1], + [0xFE, 0x01, 0x1F, 0xE0, 0xFE, 0x01, 0x0E, 0xF1], + [0xFE, 0x01, 0xE0, 0x1F, 0xFE, 0x01, 0xF1, 0x0E], + [0x1F, 0xFE, 0xE0, 0x01, 0x0E, 0xFE, 0xF1, 0x01], + [0xFE, 0x1F, 0x01, 0xE0, 0xFE, 0x0E, 0x01, 0xF1], + [0x01, 0xE0, 0xE0, 0x01, 0x01, 0xF1, 0xF1, 0x01], + [0x1F, 0xFE, 0xFE, 0x1F, 0x0E, 0xFE, 0xFE, 0x0E], + [0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0E, 0xF1, 0x01], + [0x01, 0xE0, 0xFE, 0x1F, 0x01, 0xF1, 0xFE, 0x0E], + [0xE0, 0x01, 0x01, 0xE0, 0xF1, 0x01, 0x01, 0xF1], + [0xFE, 0x1F, 0x1F, 0xFE, 0xFE, 0x0E, 0x0E, 0xFE], + [0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0E, 0xF1], + [0xE0, 0x01, 0x1F, 0xFE, 0xF1, 0x01, 0x0E, 0xFE], + [0xFE, 0xE0, 0x01, 0x1F, 0xFE, 0xF1, 0x01, 0x0E], + [0x01, 0xFE, 0xE0, 0x1F, 0x01, 0xFE, 0xF1, 0x0E], + [0xE0, 0x01, 0xFE, 0x1F, 0xF1, 0x01, 0xFE, 0x0E], + [0xFE, 0xE0, 0x1F, 0x01, 0xFE, 0xF1, 0x0E, 0x01], + [0x01, 0xFE, 0xFE, 0x01, 0x01, 0xFE, 0xFE, 0x01], + [0xE0, 0x1F, 0x01, 0xFE, 0xF1, 0x0E, 0x01, 0xFE], + [0xFE, 0xE0, 0xE0, 0xFE, 0xFE, 0xF1, 0xF1, 0xFE], + [0x1F, 0x01, 0x01, 0x1F, 0x0E, 0x01, 0x01, 0x0E], + [0xE0, 0x1F, 0x1F, 0xE0, 0xF1, 0x0E, 0x0E, 0xF1], + [0xFE, 0xFE, 0x01, 0x01, 0xFE, 0xFE, 0x01, 0x01], + [0x1F, 0x01, 0xE0, 0xFE, 0x0E, 0x01, 0xF1, 0xFE], + [0xE0, 0x1F, 0xFE, 0x01, 0xF1, 0x0E, 0xFE, 0x01], + [0xFE, 0xFE, 0x1F, 0x1F, 0xFE, 0xFE, 0x0E, 0x0E], + [0x1F, 0x01, 0xFE, 0xE0, 0x0E, 0x01, 0xFE, 0xF1], + [0xE0, 0xE0, 0x01, 0x01, 0xF1, 0xF1, 0x01, 0x01], + [0xFE, 0xFE, 0xE0, 0xE0, 0xFE, 0xFE, 0xF1, 0xF1], ];