mirror of https://github.com/ARMmbed/mbed-os.git
BLE - Devirtualize pal::SecurityManager
The event handler has been extracted out of SecurityManager declaration and instantion of the interface requires the implementation and event handler type.pull/9727/head
parent
e1371f8149
commit
50de4c8a44
|
@ -17,6 +17,7 @@
|
||||||
#ifndef MBED_OS_FEATURES_FEATURE_BLE_BLE_PAL_PALSM_H_
|
#ifndef MBED_OS_FEATURES_FEATURE_BLE_BLE_PAL_PALSM_H_
|
||||||
#define MBED_OS_FEATURES_FEATURE_BLE_BLE_PAL_PALSM_H_
|
#define MBED_OS_FEATURES_FEATURE_BLE_BLE_PAL_PALSM_H_
|
||||||
|
|
||||||
|
#include "ble/common/StaticInterface.h"
|
||||||
#include "platform/Callback.h"
|
#include "platform/Callback.h"
|
||||||
#include "platform/NonCopyable.h"
|
#include "platform/NonCopyable.h"
|
||||||
#include "ble/BLETypes.h"
|
#include "ble/BLETypes.h"
|
||||||
|
@ -201,15 +202,15 @@ private:
|
||||||
uint8_t _value;
|
uint8_t _value;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Adaptation layer of the Security Manager.
|
|
||||||
*/
|
|
||||||
class SecurityManager : private mbed::NonCopyable<SecurityManager> {
|
|
||||||
public:
|
|
||||||
/**
|
/**
|
||||||
* Handle events generated by ble::pal::SecurityManager
|
* Handle events generated by ble::pal::SecurityManager
|
||||||
*/
|
*/
|
||||||
class EventHandler {
|
template<class Impl>
|
||||||
|
class SecurityManagerEventHandler :
|
||||||
|
public StaticInterface<Impl, SecurityManagerEventHandler>
|
||||||
|
{
|
||||||
|
using StaticInterface<Impl, ble::pal::SecurityManagerEventHandler>::impl;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Pairing
|
// Pairing
|
||||||
|
@ -226,13 +227,21 @@ public:
|
||||||
* @param[in] initiator_dist key distribution
|
* @param[in] initiator_dist key distribution
|
||||||
* @param[in] responder_dist key distribution
|
* @param[in] responder_dist key distribution
|
||||||
*/
|
*/
|
||||||
virtual void on_pairing_request(
|
void on_pairing_request(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
bool oob_data_flag,
|
bool oob_data_flag,
|
||||||
AuthenticationMask authentication_requirements,
|
AuthenticationMask authentication_requirements,
|
||||||
KeyDistribution initiator_dist,
|
KeyDistribution initiator_dist,
|
||||||
KeyDistribution responder_dist
|
KeyDistribution responder_dist
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_pairing_request_(
|
||||||
|
connection,
|
||||||
|
oob_data_flag,
|
||||||
|
authentication_requirements,
|
||||||
|
initiator_dist,
|
||||||
|
responder_dist
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that the pairing has failed.
|
* Indicate that the pairing has failed.
|
||||||
|
@ -242,28 +251,34 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] error reason for the failed pairing
|
* @param[in] error reason for the failed pairing
|
||||||
*/
|
*/
|
||||||
virtual void on_pairing_error(
|
void on_pairing_error(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
pairing_failure_t error
|
pairing_failure_t error
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_pairing_error_(connection, error);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that the pairing has timed out.
|
* Indicate that the pairing has timed out.
|
||||||
*
|
*
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
*/
|
*/
|
||||||
virtual void on_pairing_timed_out(
|
void on_pairing_timed_out(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_pairing_timed_out_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that the pairing for the link has completed.
|
* Indicate that the pairing for the link has completed.
|
||||||
*
|
*
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
*/
|
*/
|
||||||
virtual void on_pairing_completed(
|
void on_pairing_completed(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_pairing_completed_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Security
|
// Security
|
||||||
|
@ -276,9 +291,11 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B, 5.4
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B, 5.4
|
||||||
*/
|
*/
|
||||||
virtual void on_valid_mic_timeout(
|
void on_valid_mic_timeout(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_valid_mic_timeout_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ask the stack to evaluate the security request received from the slave.
|
* Ask the stack to evaluate the security request received from the slave.
|
||||||
|
@ -287,10 +304,12 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] authentication authentication requirements from the slave
|
* @param[in] authentication authentication requirements from the slave
|
||||||
*/
|
*/
|
||||||
virtual void on_slave_security_request(
|
void on_slave_security_request(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
AuthenticationMask authentication
|
AuthenticationMask authentication
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_slave_security_request_(connection, authentication);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Encryption
|
// Encryption
|
||||||
|
@ -304,19 +323,23 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] result encryption state of the link
|
* @param[in] result encryption state of the link
|
||||||
*/
|
*/
|
||||||
virtual void on_link_encryption_result(
|
void on_link_encryption_result(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
link_encryption_t result
|
link_encryption_t result
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_link_encryption_result_(connection, result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that the encryption request failed due to timeout.
|
* Indicate that the encryption request failed due to timeout.
|
||||||
*
|
*
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
*/
|
*/
|
||||||
virtual void on_link_encryption_request_timed_out(
|
void on_link_encryption_request_timed_out(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_link_encryption_request_timed_out_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// MITM
|
// MITM
|
||||||
|
@ -328,10 +351,15 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] passkey passkey to be displayed
|
* @param[in] passkey passkey to be displayed
|
||||||
*/
|
*/
|
||||||
virtual void on_passkey_display(
|
void on_passkey_display(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
passkey_num_t passkey
|
passkey_num_t passkey
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_passkey_display_(
|
||||||
|
connection,
|
||||||
|
passkey
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that user confirmation is required to confirm matching
|
* Indicate that user confirmation is required to confirm matching
|
||||||
|
@ -340,9 +368,11 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E, 7.7.42
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E, 7.7.42
|
||||||
*/
|
*/
|
||||||
virtual void on_confirmation_request(
|
void on_confirmation_request(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_confirmation_request_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request the passkey entered during pairing.
|
* Request the passkey entered during pairing.
|
||||||
|
@ -351,9 +381,11 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* or a cancellation of the procedure.
|
* or a cancellation of the procedure.
|
||||||
*/
|
*/
|
||||||
virtual void on_passkey_request(
|
void on_passkey_request(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_passkey_request_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that a key has been pressed by the peer.
|
* Indicate that a key has been pressed by the peer.
|
||||||
|
@ -362,10 +394,12 @@ public:
|
||||||
* @param[in] keypress type of keypress event
|
* @param[in] keypress type of keypress event
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part H, 3.5.8
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part H, 3.5.8
|
||||||
*/
|
*/
|
||||||
virtual void on_keypress_notification(
|
void on_keypress_notification(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
Keypress_t keypress
|
Keypress_t keypress
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keypress_notification_(connection, keypress);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request OOB data from the user application.
|
* Request OOB data from the user application.
|
||||||
|
@ -374,9 +408,11 @@ public:
|
||||||
* @note shall be followed by: pal::SecurityManager::secure_connections_oob_request_reply
|
* @note shall be followed by: pal::SecurityManager::secure_connections_oob_request_reply
|
||||||
* or a cancellation of the procedure.
|
* or a cancellation of the procedure.
|
||||||
*/
|
*/
|
||||||
virtual void on_secure_connections_oob_request(
|
void on_secure_connections_oob_request(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_secure_connections_oob_request_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request OOB data from the user application.
|
* Request OOB data from the user application.
|
||||||
|
@ -385,9 +421,11 @@ public:
|
||||||
* @note shall be followed by: pal::SecurityManager::legacy_pairing_oob_request_reply
|
* @note shall be followed by: pal::SecurityManager::legacy_pairing_oob_request_reply
|
||||||
* or a cancellation of the procedure.
|
* or a cancellation of the procedure.
|
||||||
*/
|
*/
|
||||||
virtual void on_legacy_pairing_oob_request(
|
void on_legacy_pairing_oob_request(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_legacy_pairing_oob_request_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send OOB data to the application for transport to the peer.
|
* Send OOB data to the application for transport to the peer.
|
||||||
|
@ -398,10 +436,12 @@ public:
|
||||||
* in secure connections pairing
|
* in secure connections pairing
|
||||||
* @return BLE_ERROR_NONE or appropriate error code indicating the failure reason.
|
* @return BLE_ERROR_NONE or appropriate error code indicating the failure reason.
|
||||||
*/
|
*/
|
||||||
virtual void on_secure_connections_oob_generated(
|
void on_secure_connections_oob_generated(
|
||||||
const oob_lesc_value_t &random,
|
const oob_lesc_value_t &random,
|
||||||
const oob_confirm_t &confirm
|
const oob_confirm_t &confirm
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_secure_connections_oob_generated_(random, confirm);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Keys
|
// Keys
|
||||||
|
@ -414,10 +454,12 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] ltk long term key from the peer
|
* @param[in] ltk long term key from the peer
|
||||||
*/
|
*/
|
||||||
virtual void on_secure_connections_ltk_generated(
|
void on_secure_connections_ltk_generated(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ltk_t <k
|
const ltk_t <k
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_secure_connections_ltk_generated_(connection, ltk);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the results of key distribution after LTK has been received.
|
* Store the results of key distribution after LTK has been received.
|
||||||
|
@ -425,10 +467,12 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] ltk long term key from the peer
|
* @param[in] ltk long term key from the peer
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_ltk(
|
void on_keys_distributed_ltk(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ltk_t <k
|
const ltk_t <k
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_ltk_(connection, ltk);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the results of key distribution after EDIV and RAND has been received.
|
* Store the results of key distribution after EDIV and RAND has been received.
|
||||||
|
@ -436,11 +480,13 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] ltk long term key from the peer
|
* @param[in] ltk long term key from the peer
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_ediv_rand(
|
void on_keys_distributed_ediv_rand(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ediv_t &ediv,
|
const ediv_t &ediv,
|
||||||
const rand_t &rand
|
const rand_t &rand
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_ediv_rand_(connection, ediv, rand);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the local key, if we are slave now or in the future
|
* Store the local key, if we are slave now or in the future
|
||||||
|
@ -449,10 +495,12 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] ltk key sent to the peer
|
* @param[in] ltk key sent to the peer
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_local_ltk(
|
void on_keys_distributed_local_ltk(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ltk_t <k
|
const ltk_t <k
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_local_ltk_(connection, ltk);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the EDIV and RAND that will be used to identify
|
* Store the EDIV and RAND that will be used to identify
|
||||||
|
@ -464,11 +512,13 @@ public:
|
||||||
* @param[in] ediv identifies LTK
|
* @param[in] ediv identifies LTK
|
||||||
* @param[in] rand identifies LTK
|
* @param[in] rand identifies LTK
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_local_ediv_rand(
|
void on_keys_distributed_local_ediv_rand(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ediv_t &ediv,
|
const ediv_t &ediv,
|
||||||
const rand_t &rand
|
const rand_t &rand
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_local_ediv_rand_(connection, ediv, rand);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the results of key distribution after IRK has been received.
|
* Store the results of key distribution after IRK has been received.
|
||||||
|
@ -476,10 +526,12 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] irk identity resolution key
|
* @param[in] irk identity resolution key
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_irk(
|
void on_keys_distributed_irk(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const irk_t &irk
|
const irk_t &irk
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_irk_(connection, irk);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the identity address of the peer after it has been distributed.
|
* Store the identity address of the peer after it has been distributed.
|
||||||
|
@ -488,11 +540,13 @@ public:
|
||||||
* @param[in] peer_identity_address_type public or private address indication
|
* @param[in] peer_identity_address_type public or private address indication
|
||||||
* @param[in] peer_identity_address peer address
|
* @param[in] peer_identity_address peer address
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_bdaddr(
|
void on_keys_distributed_bdaddr(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
advertising_peer_address_type_t peer_identity_address_type,
|
advertising_peer_address_type_t peer_identity_address_type,
|
||||||
const address_t &peer_identity_address
|
const address_t &peer_identity_address
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_bdaddr_(connection, peer_identity_address_type, peer_identity_address);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the peer's CSRK after it has been distributed.
|
* Store the peer's CSRK after it has been distributed.
|
||||||
|
@ -500,10 +554,12 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @param[in] csrk signing key
|
* @param[in] csrk signing key
|
||||||
*/
|
*/
|
||||||
virtual void on_keys_distributed_csrk(
|
void on_keys_distributed_csrk(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const csrk_t &csrk
|
const csrk_t &csrk
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_keys_distributed_csrk_(connection, csrk);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request the LTK since the peer is asking us to encrypt the link. We need to
|
* Request the LTK since the peer is asking us to encrypt the link. We need to
|
||||||
|
@ -514,11 +570,13 @@ public:
|
||||||
* @param[in] ediv identifies LTK
|
* @param[in] ediv identifies LTK
|
||||||
* @param[in] rand identifies LTK
|
* @param[in] rand identifies LTK
|
||||||
*/
|
*/
|
||||||
virtual void on_ltk_request(
|
void on_ltk_request(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ediv_t &ediv,
|
const ediv_t &ediv,
|
||||||
const rand_t &rand
|
const rand_t &rand
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_ltk_request_(connection, ediv, rand);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request the LTK since the peer is asking us to encrypt the link.
|
* Request the LTK since the peer is asking us to encrypt the link.
|
||||||
|
@ -527,15 +585,28 @@ public:
|
||||||
*
|
*
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
*/
|
*/
|
||||||
virtual void on_ltk_request(
|
void on_ltk_request(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
impl()->on_ltk_request_(connection);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adaptation layer of the Security Manager.
|
||||||
|
*/
|
||||||
|
template<class Impl, class EventHandler>
|
||||||
|
class SecurityManager : private mbed::NonCopyable<SecurityManager<Impl, EventHandler> > {
|
||||||
|
|
||||||
|
Impl* impl() {
|
||||||
|
return static_cast<Impl*>(this);
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SecurityManager() : _pal_event_handler(NULL) { };
|
SecurityManager() : _pal_event_handler(NULL) { };
|
||||||
|
|
||||||
virtual ~SecurityManager() { };
|
~SecurityManager() { };
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// SM lifecycle management
|
// SM lifecycle management
|
||||||
|
@ -546,21 +617,27 @@ public:
|
||||||
*
|
*
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t initialize() = 0;
|
ble_error_t initialize() {
|
||||||
|
return impl()->initialize_();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finalise all actions. Called before shutdown.
|
* Finalise all actions. Called before shutdown.
|
||||||
*
|
*
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t terminate() = 0;
|
ble_error_t terminate() {
|
||||||
|
return impl()->terminate_();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset to same state as after initialize.
|
* Reset to same state as after initialize.
|
||||||
*
|
*
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t reset() = 0;
|
ble_error_t reset() {
|
||||||
|
return impl()->reset_();
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Resolving list management
|
// Resolving list management
|
||||||
|
@ -575,7 +652,9 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.41
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.41
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual uint8_t read_resolving_list_capacity() = 0;
|
uint8_t read_resolving_list_capacity() {
|
||||||
|
return impl()->read_resolving_list_capacity_();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a device definition into the resolving list of the LE subsystem.
|
* Add a device definition into the resolving list of the LE subsystem.
|
||||||
|
@ -586,11 +665,17 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.38
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.38
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t add_device_to_resolving_list(
|
ble_error_t add_device_to_resolving_list(
|
||||||
advertising_peer_address_type_t peer_identity_address_type,
|
advertising_peer_address_type_t peer_identity_address_type,
|
||||||
const address_t &peer_identity_address,
|
const address_t &peer_identity_address,
|
||||||
const irk_t &peer_irk
|
const irk_t &peer_irk
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->add_device_to_resolving_list_(
|
||||||
|
peer_identity_address_type,
|
||||||
|
peer_identity_address,
|
||||||
|
peer_irk
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a device definition from the resolving list of the LE subsystem.
|
* Add a device definition from the resolving list of the LE subsystem.
|
||||||
|
@ -600,10 +685,15 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.39
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.39
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t remove_device_from_resolving_list(
|
ble_error_t remove_device_from_resolving_list(
|
||||||
advertising_peer_address_type_t peer_identity_address_type,
|
advertising_peer_address_type_t peer_identity_address_type,
|
||||||
const address_t &peer_identity_address
|
const address_t &peer_identity_address
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->remove_device_from_resolving_list_(
|
||||||
|
peer_identity_address_type,
|
||||||
|
peer_identity_address
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove all devices from the resolving list.
|
* Remove all devices from the resolving list.
|
||||||
|
@ -611,7 +701,9 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.40
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E: 7.8.40
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t clear_resolving_list() = 0;
|
ble_error_t clear_resolving_list() {
|
||||||
|
return impl()->clear_resolving_list_();
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Pairing
|
// Pairing
|
||||||
|
@ -628,13 +720,21 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part H - 3.5.1
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part H - 3.5.1
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t send_pairing_request(
|
ble_error_t send_pairing_request(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
bool oob_data_flag,
|
bool oob_data_flag,
|
||||||
AuthenticationMask authentication_requirements,
|
AuthenticationMask authentication_requirements,
|
||||||
KeyDistribution initiator_dist,
|
KeyDistribution initiator_dist,
|
||||||
KeyDistribution responder_dist
|
KeyDistribution responder_dist
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->send_pairing_request_(
|
||||||
|
connection,
|
||||||
|
oob_data_flag,
|
||||||
|
authentication_requirements,
|
||||||
|
initiator_dist,
|
||||||
|
responder_dist
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a pairing response to a master.
|
* Send a pairing response to a master.
|
||||||
|
@ -647,13 +747,21 @@ public:
|
||||||
* @param[in] responder_dist key distribution
|
* @param[in] responder_dist key distribution
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t send_pairing_response(
|
ble_error_t send_pairing_response(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
bool oob_data_flag,
|
bool oob_data_flag,
|
||||||
AuthenticationMask authentication_requirements,
|
AuthenticationMask authentication_requirements,
|
||||||
KeyDistribution initiator_dist,
|
KeyDistribution initiator_dist,
|
||||||
KeyDistribution responder_dist
|
KeyDistribution responder_dist
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->send_pairing_response_(
|
||||||
|
connection,
|
||||||
|
oob_data_flag,
|
||||||
|
authentication_requirements,
|
||||||
|
initiator_dist,
|
||||||
|
responder_dist
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel an ongoing pairing.
|
* Cancel an ongoing pairing.
|
||||||
|
@ -663,10 +771,15 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part H - 3.5.5
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part H - 3.5.5
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t cancel_pairing(
|
ble_error_t cancel_pairing(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
pairing_failure_t reason
|
pairing_failure_t reason
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->cancel_pairing_(
|
||||||
|
connection,
|
||||||
|
reason
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Feature support
|
// Feature support
|
||||||
|
@ -678,9 +791,11 @@ public:
|
||||||
* @param[out] enabled true if SC are supported
|
* @param[out] enabled true if SC are supported
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t get_secure_connections_support(
|
ble_error_t get_secure_connections_support(
|
||||||
bool &enabled
|
bool &enabled
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->get_secure_connections_support_(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the IO capability that will be used during pairing feature exchange.
|
* Set the IO capability that will be used during pairing feature exchange.
|
||||||
|
@ -688,9 +803,11 @@ public:
|
||||||
* @param[in] io_capability type of IO capabilities available on the local device
|
* @param[in] io_capability type of IO capabilities available on the local device
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_io_capability(
|
ble_error_t set_io_capability(
|
||||||
io_capability_t io_capability
|
io_capability_t io_capability
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_io_capability_(io_capability);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Security settings
|
// Security settings
|
||||||
|
@ -704,10 +821,15 @@ public:
|
||||||
* @param[in] timeout_in_10ms time measured in units of 10 milliseconds
|
* @param[in] timeout_in_10ms time measured in units of 10 milliseconds
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_authentication_timeout(
|
ble_error_t set_authentication_timeout(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
uint16_t timeout_in_10ms
|
uint16_t timeout_in_10ms
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_authentication_timeout_(
|
||||||
|
connection,
|
||||||
|
timeout_in_10ms
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the time after which an event will be generated unless we received a packet with
|
* Get the time after which an event will be generated unless we received a packet with
|
||||||
|
@ -717,10 +839,15 @@ public:
|
||||||
* @param[out] timeout_in_10ms time measured in units of 10 milliseconds
|
* @param[out] timeout_in_10ms time measured in units of 10 milliseconds
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t get_authentication_timeout(
|
ble_error_t get_authentication_timeout(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
uint16_t &timeout_in_10ms
|
uint16_t &timeout_in_10ms
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->get_authentication_timeout_(
|
||||||
|
connection,
|
||||||
|
timeout_in_10ms
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the key size boundaries that will be used during pairing feature
|
* Set the key size boundaries that will be used during pairing feature
|
||||||
|
@ -735,10 +862,15 @@ public:
|
||||||
*
|
*
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_encryption_key_requirements(
|
ble_error_t set_encryption_key_requirements(
|
||||||
uint8_t min_encryption_key_size,
|
uint8_t min_encryption_key_size,
|
||||||
uint8_t max_encryption_key_size
|
uint8_t max_encryption_key_size
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_encryption_key_requirements_(
|
||||||
|
min_encryption_key_size,
|
||||||
|
max_encryption_key_size
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request change of security level from the master. This is called by the slave when
|
* Request change of security level from the master. This is called by the slave when
|
||||||
|
@ -750,10 +882,15 @@ public:
|
||||||
* @param[in] authentication authentication requirements
|
* @param[in] authentication authentication requirements
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t slave_security_request(
|
ble_error_t slave_security_request(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
AuthenticationMask authentication
|
AuthenticationMask authentication
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->slave_security_request_(
|
||||||
|
connection,
|
||||||
|
authentication
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Encryption
|
// Encryption
|
||||||
|
@ -771,13 +908,21 @@ public:
|
||||||
* @param[in] mitm does the LTK have man in the middle protection
|
* @param[in] mitm does the LTK have man in the middle protection
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t enable_encryption(
|
ble_error_t enable_encryption(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ltk_t <k,
|
const ltk_t <k,
|
||||||
const rand_t &rand,
|
const rand_t &rand,
|
||||||
const ediv_t &ediv,
|
const ediv_t &ediv,
|
||||||
bool mitm
|
bool mitm
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->enable_encryption_(
|
||||||
|
connection,
|
||||||
|
ltk,
|
||||||
|
rand,
|
||||||
|
ediv,
|
||||||
|
mitm
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enabled encryption using the LTK given on a connection established with secure
|
* Enabled encryption using the LTK given on a connection established with secure
|
||||||
|
@ -788,11 +933,17 @@ public:
|
||||||
* @param[in] mitm does the LTK have man in the middle protection
|
* @param[in] mitm does the LTK have man in the middle protection
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t enable_encryption(
|
ble_error_t enable_encryption(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ltk_t <k,
|
const ltk_t <k,
|
||||||
bool mitm
|
bool mitm
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->enable_encryption_(
|
||||||
|
connection,
|
||||||
|
ltk,
|
||||||
|
mitm
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encrypt data with a given key. This uses the facility on the controller to
|
* Encrypt data with a given key. This uses the facility on the controller to
|
||||||
|
@ -802,18 +953,22 @@ public:
|
||||||
* @param[in,out] data data to be encrypted, if successful contains the result
|
* @param[in,out] data data to be encrypted, if successful contains the result
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t encrypt_data(
|
ble_error_t encrypt_data(
|
||||||
const byte_array_t<16> &key,
|
const byte_array_t<16> &key,
|
||||||
encryption_block_t &data
|
encryption_block_t &data
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->encrypt_data_(key, data);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Privacy
|
// Privacy
|
||||||
//
|
//
|
||||||
|
|
||||||
virtual ble_error_t set_private_address_timeout(
|
ble_error_t set_private_address_timeout(
|
||||||
uint16_t timeout_in_seconds
|
uint16_t timeout_in_seconds
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_private_address_timeout(timeout_in_seconds);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Keys
|
// Keys
|
||||||
|
@ -828,12 +983,14 @@ public:
|
||||||
* @param[in] secure_connections is this a secure_connections pairing
|
* @param[in] secure_connections is this a secure_connections pairing
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_ltk(
|
ble_error_t set_ltk(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const ltk_t <k,
|
const ltk_t <k,
|
||||||
bool mitm,
|
bool mitm,
|
||||||
bool secure_connections
|
bool secure_connections
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_ltk_(connection, ltk, mitm, secure_connections);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inform the stack we don't have the LTK.
|
* Inform the stack we don't have the LTK.
|
||||||
|
@ -841,9 +998,11 @@ public:
|
||||||
* @param[in] connection connection handle
|
* @param[in] connection connection handle
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_ltk_not_found(
|
ble_error_t set_ltk_not_found(
|
||||||
connection_handle_t connection
|
connection_handle_t connection
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_ltk_not_found_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the local IRK.
|
* Set the local IRK.
|
||||||
|
@ -851,9 +1010,11 @@ public:
|
||||||
* @param[in] irk identity resolution key
|
* @param[in] irk identity resolution key
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_irk(
|
ble_error_t set_irk(
|
||||||
const irk_t &irk
|
const irk_t &irk
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_irk_(irk);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the local CSRK.
|
* Set the local CSRK.
|
||||||
|
@ -862,10 +1023,12 @@ public:
|
||||||
* @param[in] sign_counter local signing counter
|
* @param[in] sign_counter local signing counter
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_csrk(
|
ble_error_t set_csrk(
|
||||||
const csrk_t &csrk,
|
const csrk_t &csrk,
|
||||||
sign_count_t sign_counter
|
sign_count_t sign_counter
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_csrk_(csrk, sign_counter);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the peer CSRK for particular connection.
|
* Set the peer CSRK for particular connection.
|
||||||
|
@ -876,14 +1039,23 @@ public:
|
||||||
* @param[in] sign_counter signing counter
|
* @param[in] sign_counter signing counter
|
||||||
* @retval BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @retval BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_peer_csrk(
|
ble_error_t set_peer_csrk(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const csrk_t &csrk,
|
const csrk_t &csrk,
|
||||||
bool authenticated,
|
bool authenticated,
|
||||||
sign_count_t sign_counter
|
sign_count_t sign_counter
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_peer_csrk_(
|
||||||
|
connection,
|
||||||
|
csrk,
|
||||||
|
authenticated,
|
||||||
|
sign_counter
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
virtual ble_error_t remove_peer_csrk(connection_handle_t connection) = 0;
|
ble_error_t remove_peer_csrk(connection_handle_t connection) {
|
||||||
|
return impl()->remove_peer_csrk_(connection);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Authentication
|
// Authentication
|
||||||
|
@ -896,9 +1068,11 @@ public:
|
||||||
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part H 2
|
* @see BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part H 2
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t get_random_data(
|
ble_error_t get_random_data(
|
||||||
byte_array_t<8> &random_data
|
byte_array_t<8> &random_data
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->get_random_data_(random_data);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// MITM
|
// MITM
|
||||||
|
@ -924,19 +1098,23 @@ public:
|
||||||
*
|
*
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t set_display_passkey(
|
ble_error_t set_display_passkey(
|
||||||
passkey_num_t passkey
|
passkey_num_t passkey
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->set_display_passkey_(passkey);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reply to a passkey request received from the SecurityManagerEventHandler.
|
* Reply to a passkey request received from the SecurityManagerEventHandler.
|
||||||
*
|
*
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t passkey_request_reply(
|
ble_error_t passkey_request_reply(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
passkey_num_t passkey
|
passkey_num_t passkey
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->passkey_request_reply_(connection, passkey);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reply to a Secure Connections oob data request received from the SecurityManagerEventHandler.
|
* Reply to a Secure Connections oob data request received from the SecurityManagerEventHandler.
|
||||||
|
@ -948,12 +1126,19 @@ public:
|
||||||
* in secure connections pairing
|
* in secure connections pairing
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t secure_connections_oob_request_reply(
|
ble_error_t secure_connections_oob_request_reply(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const oob_lesc_value_t &local_random,
|
const oob_lesc_value_t &local_random,
|
||||||
const oob_lesc_value_t &peer_random,
|
const oob_lesc_value_t &peer_random,
|
||||||
const oob_confirm_t &peer_confirm
|
const oob_confirm_t &peer_confirm
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->secure_connections_oob_request_reply_(
|
||||||
|
connection,
|
||||||
|
local_random,
|
||||||
|
peer_random,
|
||||||
|
peer_confirm
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reply to a legacy pairing oob data request received from the SecurityManagerEventHandler.
|
* Reply to a legacy pairing oob data request received from the SecurityManagerEventHandler.
|
||||||
|
@ -962,10 +1147,12 @@ public:
|
||||||
* @param[in] oob_data pointer to out of band data
|
* @param[in] oob_data pointer to out of band data
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t legacy_pairing_oob_request_reply(
|
ble_error_t legacy_pairing_oob_request_reply(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
const oob_tk_t &oob_data
|
const oob_tk_t &oob_data
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->legacy_pairing_oob_request_reply_(connection, oob_data);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the stack that the user has confirmed the values during numerical
|
* Notify the stack that the user has confirmed the values during numerical
|
||||||
|
@ -975,10 +1162,12 @@ public:
|
||||||
* @param[in] confirmation true if the user indicated the numbers match
|
* @param[in] confirmation true if the user indicated the numbers match
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t confirmation_entered(
|
ble_error_t confirmation_entered(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
bool confirmation
|
bool confirmation
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->confirmation_entered_(connection, confirmation);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the stack that the user pressed a key. This will be sent to the peer and create
|
* Notify the stack that the user pressed a key. This will be sent to the peer and create
|
||||||
|
@ -988,16 +1177,20 @@ public:
|
||||||
* @param[in] keypress type of keypress event
|
* @param[in] keypress type of keypress event
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t send_keypress_notification(
|
ble_error_t send_keypress_notification(
|
||||||
connection_handle_t connection,
|
connection_handle_t connection,
|
||||||
Keypress_t keypress
|
Keypress_t keypress
|
||||||
) = 0;
|
) {
|
||||||
|
return impl()->send_keypress_notification_(connection, keypress);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate local OOB data to be sent to the application which sends it to the peer.
|
* Generate local OOB data to be sent to the application which sends it to the peer.
|
||||||
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
* @return BLE_ERROR_NONE On success, else an error code indicating reason for failure
|
||||||
*/
|
*/
|
||||||
virtual ble_error_t generate_secure_connections_oob() = 0;
|
ble_error_t generate_secure_connections_oob() {
|
||||||
|
return impl()->generate_secure_connections_oob_();
|
||||||
|
}
|
||||||
|
|
||||||
/* Entry points for the underlying stack to report events back to the user. */
|
/* Entry points for the underlying stack to report events back to the user. */
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue