diff --git a/src/device/rescue/mod.rs b/src/device/rescue/mod.rs index 23874d9..54235b3 100644 --- a/src/device/rescue/mod.rs +++ b/src/device/rescue/mod.rs @@ -222,8 +222,9 @@ pub fn read_device_details() -> Result { } } 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 { } // 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::(curves.bits()).unwrap(); + tlv.write_u32::(mask).unwrap(); } // LED Driver (Tag 0x0C) diff --git a/src/device/types.rs b/src/device/types.rs index 8afdc58..7138eab 100644 --- a/src/device/types.rs +++ b/src/device/types.rs @@ -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, + #[serde(skip_serializing_if = "Option::is_none")] pub led_order: Option, #[serde(skip_serializing_if = "Option::is_none")] pub enabled_usb_itf: Option, @@ -51,6 +53,7 @@ pub struct AppConfigInput { pub power_cycle_on_reset: Option, pub led_steady: Option, pub enable_secp256k1: Option, + pub raw_curves_mask: Option, pub led_order: Option, pub enabled_usb_itf: Option, } diff --git a/src/ui/views/config.rs b/src/ui/views/config.rs index 594c79c..7909557 100644 --- a/src/ui/views/config.rs +++ b/src/ui/views/config.rs @@ -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, };