Skip to content

Commit e796f00

Browse files
committed
fix(error): avoid FIPS status query panic
1 parent a087abd commit e796f00

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

src/fips.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@ use crate::{KeyProvider, SecureRandom, ALL_CIPHER_SUITES, ALL_KX_GROUPS, SUPPORT
3131

3232
pub(crate) fn enabled() -> bool {
3333
let mut enabled = 0u8;
34-
unsafe {
35-
BCryptGetFipsAlgorithmMode(&mut enabled).ok().unwrap();
36-
}
37-
enabled != 0
34+
let query_succeeded = unsafe { BCryptGetFipsAlgorithmMode(&mut enabled).ok().is_ok() };
35+
enabled_from_query_result(query_succeeded, enabled)
36+
}
37+
38+
fn enabled_from_query_result(query_succeeded: bool, enabled: u8) -> bool {
39+
query_succeeded && enabled != 0
3840
}
3941

4042
/// Returns a CNG-based [`CryptoProvider`] using FIPS-approved cipher suites and key exchange groups.
@@ -63,6 +65,13 @@ mod tests {
6365

6466
use super::*;
6567

68+
#[test]
69+
fn fips_query_result_is_enabled_only_when_query_succeeds_and_windows_reports_enabled() {
70+
assert!(enabled_from_query_result(true, 1));
71+
assert!(!enabled_from_query_result(true, 0));
72+
assert!(!enabled_from_query_result(false, 1));
73+
}
74+
6675
#[test]
6776
fn fips() {
6877
let provider = provider();

0 commit comments

Comments
 (0)