mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-15 08:30:02 +00:00
use constant-time password verification
The password verification in RootKeys compared hashed passwords byte-by-byte with an early return on mismatch. This leaks how many leading bytes match through timing, weakening the protection that bcrypt provides. Replace the loop with subtle::ConstantTimeEq::ct_eq, which is already used elsewhere in this crate (backups.rs, FPGA key check). Signed-off-by: Finn Glas <finn@finnmglas.com>
This commit is contained in:
parent
0b3b481322
commit
2eeacada70
1 changed files with 4 additions and 20 deletions
|
|
@ -882,28 +882,12 @@ impl<'a> RootKeys {
|
|||
unsafe {
|
||||
match pw_type {
|
||||
PasswordType::Boot => {
|
||||
if (*pcache_ptr).hashed_boot_pw_valid == 1 {
|
||||
for (&src, &dst) in digest.iter().zip((*pcache_ptr).hashed_boot_pw.iter()) {
|
||||
if dst != src {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
(*pcache_ptr).hashed_boot_pw_valid == 1
|
||||
&& bool::from(digest.ct_eq(&(*pcache_ptr).hashed_boot_pw))
|
||||
}
|
||||
PasswordType::Update => {
|
||||
if (*pcache_ptr).hashed_update_pw_valid == 1 {
|
||||
for (&src, &dst) in digest.iter().zip((*pcache_ptr).hashed_update_pw.iter()) {
|
||||
if dst != src {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
(*pcache_ptr).hashed_update_pw_valid == 1
|
||||
&& bool::from(digest.ct_eq(&(*pcache_ptr).hashed_update_pw))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue