passkey 보안: 런타임 플래그

- 런타임 플래그 factory_provisioned=0인 경우에만 passkey 쓰기 가능
This commit is contained in:
2026-04-17 12:15:39 +09:00
parent e04e79ac31
commit 2daa8b3690
3 changed files with 16 additions and 2 deletions

View File

@@ -138,11 +138,18 @@ int Cmd_mrs(const ParsedCmd *cmd)
*============================================================================*/
int Cmd_mpz(const ParsedCmd *cmd)
{
if (m_config.factory_provisioned != 0)
{
dr_ble_return_1("rpz:", 0xFFFF);
return 1;
}
char passkey[7] = {0};
dr_get_ascii(cmd, 0, passkey, 6);
memcpy(m_static_passkey, passkey, 6);
memcpy(m_config.static_passkey, m_static_passkey, 6);
m_config.factory_provisioned = 1;
config_save();
ascii_format_data(ble_bin_buffer, "rpz:", passkey, 6);

View File

@@ -112,6 +112,9 @@ void fds_default_value_set(void)
m_config.piezo_num_samples = 100; /* 100 samples */
m_config.piezo_cycles = 7; /* 7 cycles */
m_config.piezo_averaging = 3; /* 3x averaging */
/* Factory provisioning — default: not provisioned */
m_config.factory_provisioned = 0;
}

View File

@@ -5,7 +5,7 @@
* via the Nordic FDS library. Replaces external EEPROM and coexists safely
* with the SoftDevice.
*
* config_data_t (48 bytes, packed):
* config_data_t (49 bytes, packed):
* magic_number (4B) : format validation (0x20231226)
* hw_no (12B): hardware version string
* serial_no (12B): serial number (also used as BLE device name)
@@ -14,6 +14,7 @@
* reset_status (1B) : reset cause code
* life_cycle (4B) : device usage count
* piezo_* (8B) : piezo measurement parameters
* factory_provisioned(1B): passkey provisioning lock flag
*
* API:
* fs_storage_init() : initialise FDS (once at boot)
@@ -65,7 +66,10 @@ typedef struct
uint16_t piezo_averaging; /* 2B - averages per channel (1..10) */
uint16_t piezo_delay_us; /* 2B - delay from TX pulse to ADC start (us) (0..30) */
uint16_t piezo_num_samples; /* 2B - ADC sample count (80..140) */
} config_data_t; /* Total: 48 bytes */
/* Factory provisioning lock */
uint8_t factory_provisioned; /* 1B - 0=passkey not set, 1=passkey set (locked) */
} config_data_t; /* Total: 49 bytes */
extern config_data_t m_config;