/* * NimBLESecurity.cpp * * Created: on Feb 22 2020 * Author H2zero * * Originally: * * BLESecurity.cpp * * Created on: Dec 17, 2017 * Author: chegewara */ #include "sdkconfig.h" #if defined(CONFIG_BT_ENABLED) #include "NimBLESecurity.h" #include "NimBLEDevice.h" /** * @brief This class is for backward compatibility with the bluedroid based library. * Use the new security functions in NimBLEDevice instead. * New callback functions in NimBLEServer and NimBLEClient. */ NimBLESecurity::NimBLESecurity() { } NimBLESecurity::~NimBLESecurity() { } /** * @brief Set requested authentication mode */ void NimBLESecurity::setAuthenticationMode(esp_ble_auth_req_t auth_req) { NimBLEDevice::setSecurityAuth((auth_req & BLE_SM_PAIR_AUTHREQ_BOND)>0, (auth_req & BLE_SM_PAIR_AUTHREQ_MITM)>0, (auth_req & BLE_SM_PAIR_AUTHREQ_SC)>0); } /** * @brief Set our device IO capability to let end user perform authorization * either by displaying or entering generated 6-digits pin code */ void NimBLESecurity::setCapability(esp_ble_io_cap_t iocap) { NimBLEDevice::setSecurityIOCap(iocap); } // setCapability /** * @brief Init encryption key by server * @param key_size is value between 7 and 16 */ void NimBLESecurity::setInitEncryptionKey(uint8_t init_key) { NimBLEDevice::setSecurityInitKey(init_key); } // setInitEncryptionKey /** * @brief Init encryption key by client * @param key_size is value between 7 and 16 */ void NimBLESecurity::setRespEncryptionKey(uint8_t resp_key) { NimBLEDevice::setSecurityRespKey(resp_key); } // setRespEncryptionKey /** *@todo Requires implementation * */ void NimBLESecurity::setKeySize(uint8_t key_size) { //m_keySize = key_size; //esp_ble_gap_set_security_param(ESP_BLE_SM_MAX_KEY_SIZE, &m_keySize, sizeof(uint8_t)); } //setKeySize /** * Setup for static PIN connection. */ void NimBLESecurity::setStaticPIN(uint32_t pin){ //uint32_t passkey = pin; //esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint32_t)); NimBLEDevice::setSecurityPasskey(pin); setCapability(ESP_IO_CAP_OUT); setKeySize(); setAuthenticationMode(ESP_LE_AUTH_REQ_SC_ONLY); setInitEncryptionKey(ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK); } /** * @brief Debug function to display what keys are exchanged by peers */ /* char* BLESecurity::esp_key_type_to_str(esp_ble_key_type_t key_type) { char* key_str = nullptr; switch (key_type) { case ESP_LE_KEY_NONE: key_str = (char*) "ESP_LE_KEY_NONE"; break; case ESP_LE_KEY_PENC: key_str = (char*) "ESP_LE_KEY_PENC"; break; case ESP_LE_KEY_PID: key_str = (char*) "ESP_LE_KEY_PID"; break; case ESP_LE_KEY_PCSRK: key_str = (char*) "ESP_LE_KEY_PCSRK"; break; case ESP_LE_KEY_PLK: key_str = (char*) "ESP_LE_KEY_PLK"; break; case ESP_LE_KEY_LLK: key_str = (char*) "ESP_LE_KEY_LLK"; break; case ESP_LE_KEY_LENC: key_str = (char*) "ESP_LE_KEY_LENC"; break; case ESP_LE_KEY_LID: key_str = (char*) "ESP_LE_KEY_LID"; break; case ESP_LE_KEY_LCSRK: key_str = (char*) "ESP_LE_KEY_LCSRK"; break; default: key_str = (char*) "INVALID BLE KEY TYPE"; break; } return key_str; } // esp_key_type_to_str */ #endif // CONFIG_BT_ENABLED