Merge pull request #31 from pan-/signing-nordic-fix

BLE: Add stub for signing API in Nordic pal security manager.
pull/6932/head
Paul Szczepanek 2018-04-11 15:19:07 +01:00 committed by GitHub
commit 1f81d20914
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 14 deletions

View File

@ -85,6 +85,7 @@ struct nRF5xSecurityManager::pairing_control_block_t {
nRF5xSecurityManager::nRF5xSecurityManager() nRF5xSecurityManager::nRF5xSecurityManager()
: ::ble::pal::SecurityManager(), : ::ble::pal::SecurityManager(),
_sign_counter(),
_io_capability(io_capability_t::NO_INPUT_NO_OUTPUT), _io_capability(io_capability_t::NO_INPUT_NO_OUTPUT),
_min_encryption_key_size(7), _min_encryption_key_size(7),
_max_encryption_key_size(16), _max_encryption_key_size(16),
@ -508,12 +509,24 @@ ble_error_t nRF5xSecurityManager::set_irk(const irk_t& irk)
return convert_sd_error(err); return convert_sd_error(err);
} }
ble_error_t nRF5xSecurityManager::set_csrk(const csrk_t& csrk) ble_error_t nRF5xSecurityManager::set_csrk(
{ const csrk_t& csrk,
sign_count_t sign_counter
) {
_csrk = csrk; _csrk = csrk;
_sign_counter = sign_counter;
return BLE_ERROR_NONE; return BLE_ERROR_NONE;
} }
ble_error_t nRF5xSecurityManager::set_peer_csrk(
connection_handle_t connection,
const csrk_t &csrk,
bool authenticated,
sign_count_t sign_counter
) {
return BLE_ERROR_NOT_IMPLEMENTED;
}
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// Authentication // Authentication
// //
@ -630,23 +643,21 @@ ble_error_t nRF5xSecurityManager::send_keypress_notification(
} }
ble_error_t nRF5xSecurityManager::generate_secure_connections_oob( ble_error_t nRF5xSecurityManager::generate_secure_connections_oob()
connection_handle_t connection {
) {
ble_gap_lesc_p256_pk_t own_secret; ble_gap_lesc_p256_pk_t own_secret;
ble_gap_lesc_oob_data_t oob_data; ble_gap_lesc_oob_data_t oob_data;
memcpy(own_secret.pk, secret.data(), secret.size()); memcpy(own_secret.pk, secret.data(), secret.size());
uint32_t err = sd_ble_gap_lesc_oob_data_get( uint32_t err = sd_ble_gap_lesc_oob_data_get(
connection, BLE_CONN_HANDLE_INVALID,
&own_secret, &own_secret,
&oob_data &oob_data
); );
if (!err) { if (!err) {
get_event_handler()->on_secure_connections_oob_generated( get_event_handler()->on_secure_connections_oob_generated(
connection,
oob_data.r, oob_data.r,
oob_data.c oob_data.c
); );

View File

@ -237,7 +237,18 @@ public:
/** /**
* @see ::ble::pal::SecurityManager::set_csrk * @see ::ble::pal::SecurityManager::set_csrk
*/ */
virtual ble_error_t set_csrk(const csrk_t &csrk); virtual ble_error_t set_csrk(const csrk_t &csrk, sign_count_t sign_counter);
/**
* @see ::ble::pal::SecurityManager::set_peer_csrk
*/
virtual ble_error_t set_peer_csrk(
connection_handle_t connection,
const csrk_t &csrk,
bool authenticated,
sign_count_t sign_counter
);
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// Authentication // Authentication
@ -300,9 +311,7 @@ public:
/** /**
* @see ::ble::pal::SecurityManager::generate_secure_connections_oob * @see ::ble::pal::SecurityManager::generate_secure_connections_oob
*/ */
virtual ble_error_t generate_secure_connections_oob( virtual ble_error_t generate_secure_connections_oob();
connection_handle_t connection
);
// singleton of nordic Security Manager // singleton of nordic Security Manager
static nRF5xSecurityManager& get_security_manager(); static nRF5xSecurityManager& get_security_manager();
@ -312,6 +321,7 @@ public:
private: private:
csrk_t _csrk; csrk_t _csrk;
sign_count_t _sign_counter;
io_capability_t _io_capability; io_capability_t _io_capability;
uint8_t _min_encryption_key_size; uint8_t _min_encryption_key_size;
uint8_t _max_encryption_key_size; uint8_t _max_encryption_key_size;

View File

@ -125,7 +125,7 @@ ble_error_t nRF5xn::init(BLE::InstanceID_t instanceID, FunctionPointerWithContex
return BLE_ERROR_ALREADY_INITIALIZED; return BLE_ERROR_ALREADY_INITIALIZED;
} }
instanceID = instanceID; this->instanceID = instanceID;
/* ToDo: Clear memory contents, reset the SD, etc. */ /* ToDo: Clear memory contents, reset the SD, etc. */
if (btle_init() != ERROR_NONE) { if (btle_init() != ERROR_NONE) {
@ -209,11 +209,17 @@ SecurityManager& nRF5xn::getSecurityManager()
const SecurityManager& nRF5xn::getSecurityManager() const const SecurityManager& nRF5xn::getSecurityManager() const
{ {
static ble::pal::MemorySecurityDb m_db; static ble::pal::MemorySecurityDb m_db;
ble::pal::vendor::nordic::nRF5xSecurityManager &m_pal = ble::pal::vendor::nordic::nRF5xSecurityManager::get_security_manager(); ble::pal::vendor::nordic::nRF5xSecurityManager &m_pal =
ble::pal::vendor::nordic::nRF5xSecurityManager::get_security_manager();
static struct : ble::pal::SigningEventMonitor {
virtual void set_signing_event_handler(EventHandler *signing_event_handler) { }
} dummy_signing_event_monitor;
static ble::generic::GenericSecurityManager m_instance( static ble::generic::GenericSecurityManager m_instance(
m_pal, m_pal,
m_db, m_db,
const_cast<nRF5xGap&>(getGap()) const_cast<nRF5xGap&>(getGap()),
dummy_signing_event_monitor
); );
return m_instance; return m_instance;