fix: bug in fido curve config

This commit is contained in:
Suyog Tandel
2026-06-23 00:24:00 +05:30
parent 22708b0e0c
commit cc72224252
3 changed files with 15 additions and 7 deletions
+11 -7
View File
@@ -222,8 +222,9 @@ pub fn read_device_details() -> Result<FullDeviceStatus, PFError> {
}
}
PhyTag::Curves => {
if val.len() >= 4 {
if val.len() == 4 {
let curves_val = u32::from_be_bytes([val[0], val[1], val[2], val[3]]);
config.raw_curves_mask = Some(curves_val);
let curves = RescueCurves::from_bits_truncate(curves_val);
config.enable_secp256k1 = curves.contains(RescueCurves::SECP256K1);
}
@@ -334,15 +335,18 @@ pub fn write_config(config: AppConfigInput) -> Result<String, PFError> {
}
// Curves
if let Some(enabled) = config.enable_secp256k1 {
let mut curves = RescueCurves::empty();
if enabled {
curves.insert(RescueCurves::SECP256K1);
if config.enable_secp256k1.is_some() || config.raw_curves_mask.is_some() {
let mut mask = config.raw_curves_mask.unwrap_or(0);
if let Some(enabled) = config.enable_secp256k1 {
if enabled {
mask |= RescueCurves::SECP256K1.bits();
} else {
mask &= !RescueCurves::SECP256K1.bits();
}
}
tlv.push(PhyTag::Curves as u8);
tlv.push(0x04);
tlv.write_u32::<BigEndian>(curves.bits()).unwrap();
tlv.write_u32::<BigEndian>(mask).unwrap();
}
// LED Driver (Tag 0x0C)
+3
View File
@@ -32,6 +32,8 @@ pub struct AppConfig {
pub led_steady: bool,
pub enable_secp256k1: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw_curves_mask: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub led_order: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled_usb_itf: Option<u8>,
@@ -51,6 +53,7 @@ pub struct AppConfigInput {
pub power_cycle_on_reset: Option<bool>,
pub led_steady: Option<bool>,
pub enable_secp256k1: Option<bool>,
pub raw_curves_mask: Option<u32>,
pub led_order: Option<u8>,
pub enabled_usb_itf: Option<u8>,
}
+1
View File
@@ -496,6 +496,7 @@ impl ConfigView {
power_cycle_on_reset: Some(self.power_cycle),
led_steady: Some(self.led_steady),
enable_secp256k1: Some(self.enable_secp256k1),
raw_curves_mask: current_config.raw_curves_mask,
led_order: current_config.led_order,
enabled_usb_itf: final_enabled_usb_itf,
};