diff --git a/features/FEATURE_BLE/ble/generic/SecurityDb.h b/features/FEATURE_BLE/ble/generic/SecurityDb.h index f24ad0b09e..009d769554 100644 --- a/features/FEATURE_BLE/ble/generic/SecurityDb.h +++ b/features/FEATURE_BLE/ble/generic/SecurityDb.h @@ -36,7 +36,6 @@ struct SecurityDistributionFlags_t { encryption_key_size(0), peer_address_is_public(false), csrk_stored(false), - csrk_sent(false), ltk_stored(false), ltk_sent(false), irk_stored(false), @@ -56,7 +55,6 @@ struct SecurityDistributionFlags_t { /** CSRK (Connection Signature Resolving Key) has been distributed and stored */ uint8_t csrk_stored:1; - uint8_t csrk_sent:1; /** LTK (Long Term Key) has been distributed and stored */ uint8_t ltk_stored:1; uint8_t ltk_sent:1; diff --git a/features/FEATURE_BLE/source/generic/FileSecurityDb.cpp b/features/FEATURE_BLE/source/generic/FileSecurityDb.cpp index 1181a1455c..76fedd8262 100644 --- a/features/FEATURE_BLE/source/generic/FileSecurityDb.cpp +++ b/features/FEATURE_BLE/source/generic/FileSecurityDb.cpp @@ -170,6 +170,8 @@ void FileSecurityDb::set_entry_local_ltk( return; } + entry->flags.ltk_sent = true; + fseek(_db_file, entry->file_offset + DB_STORE_OFFSET_LOCAL_KEYS_LTK, SEEK_SET); fwrite(<k, sizeof(ltk_t), 1, _db_file); } @@ -203,6 +205,8 @@ void FileSecurityDb::set_entry_peer_ltk( return; } + entry->flags.ltk_stored = true; + fseek(_db_file, entry->file_offset + DB_STORE_OFFSET_PEER_KEYS_LTK, SEEK_SET); fwrite(<k, sizeof(ltk_t), 1, _db_file); } @@ -263,6 +267,8 @@ void FileSecurityDb::set_entry_peer_csrk( return; } + entry->flags.csrk_stored = true; + fseek(_db_file, entry->file_offset + DB_STORE_OFFSET_PEER_SIGNING, SEEK_SET); /* only write in the csrk */ fwrite(&csrk, sizeof(csrk_t), 1, _db_file); diff --git a/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp b/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp index 96b2385dfc..655bd2f88a 100644 --- a/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp +++ b/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp @@ -354,7 +354,7 @@ ble_error_t GenericSecurityManager::enableSigning( if (enabled && !cb->signing_requested && !_default_key_distribution.get_signing()) { cb->signing_requested = true; - if (flags->csrk_stored && flags->csrk_sent) { + if (flags->csrk_stored) { /* used the stored ones when available */ _db->get_entry_peer_csrk( mbed::callback(this, &GenericSecurityManager::set_peer_csrk_cb), @@ -1344,7 +1344,6 @@ void GenericSecurityManager::on_secure_connections_ltk_generated( flags->ltk_mitm_protected = cb->mitm_performed; flags->secure_connections_paired = true; - flags->ltk_stored = true; _db->set_entry_peer_ltk(cb->db_entry, ltk); } @@ -1365,7 +1364,7 @@ void GenericSecurityManager::on_keys_distributed_ltk( } flags->ltk_mitm_protected = cb->mitm_performed; - flags->ltk_stored = true; + _db->set_entry_peer_ltk(cb->db_entry, ltk); } @@ -1398,7 +1397,6 @@ void GenericSecurityManager::on_keys_distributed_local_ltk( return; } - flags->ltk_sent = true; _db->set_entry_local_ltk(cb->db_entry, ltk); } @@ -1431,7 +1429,6 @@ void GenericSecurityManager::on_keys_distributed_irk( return; } - flags->irk_stored = true; _db->set_entry_peer_irk(cb->db_entry, irk); } @@ -1469,8 +1466,6 @@ void GenericSecurityManager::on_keys_distributed_csrk( } flags->csrk_mitm_protected = cb->mitm_performed; - flags->csrk_stored = true; - _db->set_entry_peer_csrk(cb->db_entry, csrk); eventHandler->signingKey(