@@ -4,7 +4,6 @@ use crate::{utils::gen_keys, Des};
4
4
use cipher:: {
5
5
consts:: { U1 , U16 , U24 , U8 } ,
6
6
crypto_common:: WeakKeyError ,
7
- typenum:: Unsigned ,
8
7
AlgorithmName , Block , BlockCipherDecBackend , BlockCipherDecClosure , BlockCipherDecrypt ,
9
8
BlockCipherEncBackend , BlockCipherEncClosure , BlockCipherEncrypt , BlockSizeUser , InOut , Key ,
10
9
KeyInit , KeySizeUser , ParBlocksSizeUser ,
@@ -15,15 +14,34 @@ use core::fmt;
15
14
use cipher:: zeroize:: ZeroizeOnDrop ;
16
15
17
16
#[ inline]
18
- fn weak_key_test ( key : & [ u8 ] ) -> Result < ( ) , WeakKeyError > {
19
- let sub_key_size = < Des as KeySizeUser > :: KeySize :: USIZE ;
20
- assert_eq ! ( key. len ( ) % sub_key_size , 0 ) ;
17
+ fn weak_key_test2 ( key : & [ u8 ; 16 ] ) -> Result < ( ) , WeakKeyError > {
18
+ let k1 = u64 :: from_ne_bytes ( key [ .. 8 ] . try_into ( ) . unwrap ( ) ) ;
19
+ let k2 = u64 :: from_ne_bytes ( key[ 8 .. 16 ] . try_into ( ) . unwrap ( ) ) ;
21
20
22
21
let mut is_weak = 0u8 ;
23
- for des_key in key. chunks_exact ( sub_key_size) {
24
- let des_key = des_key. try_into ( ) . unwrap ( ) ;
25
- is_weak |= super :: weak_key_test ( des_key) ;
22
+ is_weak |= super :: weak_key_test ( k1) ;
23
+ is_weak |= super :: weak_key_test ( k2) ;
24
+ is_weak |= u8:: from ( k1 == k2) ;
25
+
26
+ match is_weak {
27
+ 0 => Ok ( ( ) ) ,
28
+ _ => Err ( WeakKeyError ) ,
26
29
}
30
+ }
31
+
32
+ #[ inline]
33
+ fn weak_key_test3 ( key : & [ u8 ; 24 ] ) -> Result < ( ) , WeakKeyError > {
34
+ let k1 = u64:: from_ne_bytes ( key[ ..8 ] . try_into ( ) . unwrap ( ) ) ;
35
+ let k2 = u64:: from_ne_bytes ( key[ 8 ..16 ] . try_into ( ) . unwrap ( ) ) ;
36
+ let k3 = u64:: from_ne_bytes ( key[ 16 ..24 ] . try_into ( ) . unwrap ( ) ) ;
37
+
38
+ let mut is_weak = 0u8 ;
39
+ is_weak |= super :: weak_key_test ( k1) ;
40
+ is_weak |= super :: weak_key_test ( k2) ;
41
+ is_weak |= super :: weak_key_test ( k3) ;
42
+ is_weak |= u8:: from ( k1 == k2) ;
43
+ is_weak |= u8:: from ( k1 == k3) ;
44
+ is_weak |= u8:: from ( k2 == k3) ;
27
45
28
46
match is_weak {
29
47
0 => Ok ( ( ) ) ,
@@ -57,7 +75,7 @@ impl KeyInit for TdesEde3 {
57
75
58
76
#[ inline]
59
77
fn weak_key_test ( key : & Key < Self > ) -> Result < ( ) , WeakKeyError > {
60
- weak_key_test ( key)
78
+ weak_key_test3 ( & key. 0 )
61
79
}
62
80
}
63
81
@@ -146,7 +164,7 @@ impl KeyInit for TdesEee3 {
146
164
147
165
#[ inline]
148
166
fn weak_key_test ( key : & Key < Self > ) -> Result < ( ) , WeakKeyError > {
149
- weak_key_test ( key)
167
+ weak_key_test3 ( & key. 0 )
150
168
}
151
169
}
152
170
@@ -232,7 +250,7 @@ impl KeyInit for TdesEde2 {
232
250
233
251
#[ inline]
234
252
fn weak_key_test ( key : & Key < Self > ) -> Result < ( ) , WeakKeyError > {
235
- weak_key_test ( key)
253
+ weak_key_test2 ( & key. 0 )
236
254
}
237
255
}
238
256
@@ -318,7 +336,7 @@ impl KeyInit for TdesEee2 {
318
336
319
337
#[ inline]
320
338
fn weak_key_test ( key : & Key < Self > ) -> Result < ( ) , WeakKeyError > {
321
- weak_key_test ( key)
339
+ weak_key_test2 ( & key. 0 )
322
340
}
323
341
}
324
342
0 commit comments