mirror of
https://github.com/librekeys/picoforge.git
synced 2026-07-28 08:01:19 -07:00
fix: bug in fido curve config
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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>,
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user