Initial commit
Diff: mbed-dev-master/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h
- Revision:
- 0:bb348c97df44
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-dev-master/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h Wed Sep 16 01:11:49 2020 +0000 @@ -0,0 +1,387 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Security Manager + * File : cb_bt_sec_man.h + * + * Description : Bluetooth security application support + *-------------------------------------------------------------------------*/ + +/** + * @file cb_bt_sec_man.h + * @brief Bluetooth security application support. This includes bonding, + * security modes, passkey and pin code handling. + */ + +#ifndef _CB_BT_SEC_MAN_H_ +#define _CB_BT_SEC_MAN_H_ + +#include "cb_comdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +#define cbBSM_OK (0) +#define cbBSM_ERROR (-1) + +#define cbBSM_PASSKEY_MAX_VALUE (999999) + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +/** + * cbBSM_SECURITY_MODE_1_DISABLED + * Security disabled + * - Remote Device BT 2.1: Auto accept (No man-in-the-middle attack protection, encryption enabled) + * - Remote Device BT 2.0: Authentication and encryption disabled. + * - Bluetooth Low Energy: Auto accept (No man-in-the-middle attack protection, encryption enabled) + * + * cbBSM_SECURITY_MODE_2_BT_2_0 + * - Enforce BT 2.0 (Service level authentication and encryption enabled) + * Please note that the device is not BT 2.1 qualified for this setting. It is included for backward compatibility. Invalid for Bluetooth Low Energy. + * + * cbBSM_SECURITY_MODE_3_FIXED_PIN + * - Remote Device BT 2.1: Service level authentication and encryption enabled. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. + * - Bluetooth Low Energy: Service level authentication and encryption enabled. + * Please note that this security mode will not work with a general BT 2.1 device. However, it will work between two connectBlue BT 2.1 Serial Port Adapters. Use security mode 4 to make the device work with a general BT 2.1 device. + * + * cbBSM_SECURITY_MODE_4_JUST_WORKS + * - Remote Device BT 2.1: Auto accept (no man-in-the-middle attack protection, encryption enabled) + * - Remote Device BT 2.0: Service level authentication and encryption enabled. + * - Bluetooth Low Energy: Auto accept (no man-in-the-middle attack protection, encryption enabled) + * This security mode is intended for pairing in safe environments. When this mode is set, pairability (see AT*AGPM) is automatically disabled. In data mode, pairing can be enabled for 60 seconds by pressing the "External Connect" button for at least 5 seconds. When the module is pairable, the LED will blink. If the mode is changed from Just Works to another, pairability must be enabled again using the AT*AGPM command. + * + * cbBSM_SECURITY_MODE_5_DISPLAY_ONLY + * - Remote Device BT 2.1: Service level authentication and encryption enabled. User should be presented a passkey. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. No user interaction required. + * - Bluetooth Low Energy: Service level authentication and encryption enabled. User should be presented a passkey. + * This security mode is used when the device has a display that can present a 6-digit value that the user shall enter on the remote device. + * + * cbBSM_SECURITY_MODE_6_DISPLAY_YES_NO + * - Remote Device BT 2.1: Service level authentication and encryption enabled. User should compare two values. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. No user interaction required. + * This security mode is used when the device has a display that can present a 6-digit value that the user shall verify with yes or no to the remote device's presented value. + * Invalid for Bluetooth Low Energy. + * + * cbBSM_SECURITY_MODE_7_KEYBOARD_ONLY + * - Remote Device BT 2.1: Service level authentication and encryption enabled. User should enter a passkey. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. No user interaction required. + * - Bluetooth Low Energy: Service level authentication and encryption enabled. User should enter a passkey. + * This security mode is used when the device only has a keyboard where the user can enter a 6-digit value that is presented on the remote device. + */ +typedef enum +{ + cbBSM_SECURITY_MODE_1_DISABLED = 1, + cbBSM_SECURITY_MODE_2_BT_2_0, + cbBSM_SECURITY_MODE_3_FIXED_PIN, + cbBSM_SECURITY_MODE_4_JUST_WORKS, + cbBSM_SECURITY_MODE_5_DISPLAY_ONLY, + cbBSM_SECURITY_MODE_6_DISPLAY_YES_NO, + cbBSM_SECURITY_MODE_7_KEYBOARD_ONLY +} cbBSM_SecurityMode; + +typedef struct +{ + TPinCode pin; + cb_uint8 nBytes; +} cbBSM_PinCode; + +typedef enum +{ + cbBSM_BOND_TYPE_CLASSIC, + cbBSM_BOND_TYPE_LE, + cbBSM_BOND_TYPE_ALL, +} cbBSM_BondTypes; + +typedef enum +{ + cbBSM_BOND_STATUS_OK = 0, + cbBSM_BOND_STATUS_ERR_PAGE_TMO, + cbBSM_BOND_STATUS_ERR_AUTH_FAIL, + cbBSM_BOND_STATUS_ERR_NO_MITM +} cbBSM_BondStatus; + +/** + * Callback to indicate that bonding is finished. + * @param bdAddress Remote BD address + * @param bondStatus Bond status, e.g. cbBSM_BOND_STATUS_OK + * @return None + */ +typedef void (*cbBSM_BondCnf)( + cbBSM_BondStatus status, + TBdAddr* pBdAddress); + +/** + * Callback to indicate that a pin code is required from upper layer. + * Respond the pin code request with cbBSM_rspFixedPin/cbBSM_rspNegFixedPin + * This is only used when either local or remote side does not support + * BT 2.1 secure simple pairing. + * @param bdAddress Remote BD address + * @return None + */ +typedef void (*cbBSM_RequestPinInd)( + TBdAddr* pBdAddress); + +/** + * Callback to indicate that user confirmation is required. The user should + * compare numericValues on local and remote side and respond the confirmation + * request with cbBSM_rspUserConfirmation if values match and + * cbBSM_rspNegUserConfirmation if they do not match or user wants to interrupt + * the pairing attempt. + * This is only used when both sides support BT 2.1 secure simple pairing and + * security mode cbBSM_SECURITY_MODE_6_DISPLAY_YES_NO is used. + * @param bdAddress Remote BD address + * @param numericValue The numeric value to be compared + * @return None + */ +typedef void (*cbBSM_UserConfirmationInd)( + TBdAddr* pBdAddress, + cb_uint32 numericValue); + +/** + * Callback to indicate that a passkey is required from upper layer. + * Respond the passkey request with cbBSM_rspUserPasskey/cbBSM_rspNegUserPasskey. + * This is only used when both sides support BT 2.1 secure simple pairing and + * security modes cbBSM_SECURITY_MODE_3_FIXED_PIN or cbBSM_SECURITY_MODE_7_KEYBOARD_ONLY is used + * @param bdAddress Remote BD address + * @return None + */ +typedef void (*cbBSM_UserPasskeyInd)( + TBdAddr* pBdAddress); + +/** + * Callback to indicate that a passkey is used in the pairing procedure. + * The passkey should be displayed to the user. + * This is only used when both sides support BT 2.1 secure simple pairing and + * security mode cbBSM_SECURITY_MODE_5_DISPLAY_ONLY is used. + * @param bdAddress Remote BD address + * @param passkey Passkey + * @return None + */ +typedef void (*cbBSM_UserPasskeyEvt)( + TBdAddr* pBdAddress, + cb_uint32 passkey); + +typedef struct +{ + cbBSM_RequestPinInd requestPinInd; + cbBSM_UserConfirmationInd userConfirmationInd; + cbBSM_UserPasskeyInd userPasskeyInd; + cbBSM_UserPasskeyEvt userPasskeyEvt; + cbBSM_BondCnf bondConfirmation; + cbBSM_BondCnf bondEvent; +} cbBSM_Callbacks; + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** + * Initialization of BLuetooth security manager. Called during stack + * initialization. Shall not be called by application. + * + * @return None + */ +extern void cbBSM_init(void); + +/** + * Register security callbacks. Callbacks in the struct that are not + * of any interest can be set to NULL. + * + * @param pPairingCallbacks Pointer to the security callback struct + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_registerCallbacks(cbBSM_Callbacks* pPairingCallbacks); + +/** + * Set security mode. See comments on cbBSM_SecurityMode for + * description of the different security modes. + * + * @param securityMode Security mode. Default security is cbBSM_SECURITY_MODE_1_DISABLED + * @param allowPairingInNonBondableMode Normally FALSE. Set to TRUE if pairing should be allowed when not bondable. + * No link keys will then be stored. + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_setSecurityMode( + cbBSM_SecurityMode securityMode, + cb_boolean allowPairingInNonBondableMode); + +/** + * Read current security mode. + * + * @param pSecurityMode Security mode + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_getSecurityMode(cbBSM_SecurityMode* pSecurityMode); + +/** + * Sets the local device pairable mode. + * + * @param pairable TRUE=pairable, FALSE=not pairable (default) + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_setPairable(boolean pairable); + +/** + * Gets the local device pairable mode. + * + * @param pPairable Pointer to return value + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_getPairable(boolean* pPairable); + +/** + * Performs bonding with a remote device. The cbBSM_BondCnf callback will + * be called upon success/failure. + * + * @param remoteDevice Remote BD address + * @param type Classic or LE + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_reqBond( + TBdAddr remoteDevice, + TBluetoothType type); + +/** + * Responds on the cbBSM_RequestPinInd callback with a pin code + * This is only used when either local or remote side does not support + * BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @param pinCodeLength Length of the provided pin code + * @param pPinCode Pointer to the provided pin code + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspFixedPin( + TBdAddr* pBdAddress, + cb_uint8 pinCodeLength, + cb_uint8 *pPinCode); + +/** + * Responds the cbBSM_RequestPinInd callback. Can be used to interrupt a + * pairing attempt from the remote device. + * This is only used when either local or remote side does not support + * BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspNegFixedPin(TBdAddr* pBdAddress); + +/** + * Responds on the cbBSM_UserPasskeyInd callback. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @param passkey Passkey, range: 0-999999 + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspUserPasskey( + TBdAddr *pBdAddress, + uint32 passkey); + +/** + * Responds on the cbBSM_UserPasskeyInd callback. Can be used to interrupt a + * pairing attempt from the remote device. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspNegUserPasskey(TBdAddr *pBdAddress); + +/** + * Responds on the cbBSM_UserConfirmationInd callback. Accepts the numeric value. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspUserConfirmation(TBdAddr* pBdAddress); + +/** + * Responds on the cbBSM_UserConfirmationInd callback. Rejects the numeric value. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspNegUserConfirmation(TBdAddr* pBdAddress); + +/** + * Get number of bonded devices. + * + * @param type Bond type + * @param pNo Pointer to return value. + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_getAllNumberBondedDevices( + cbBSM_BondTypes type, + uint32* pNo); + +/** +* Get a bonded devices. +* +* @param deviceIndex Index of the bonded device +* @param pBdAddr Pointer to remote BD address. +* @param pIsLe Should be TRUE for LE and FALSE for classic +* @return If the operation is successful cbBSM_OK is returned. +*/ +extern cb_int32 cbBSM_getBondedDevice( + cb_int32 deviceIndex, + TBdAddr* pBdAddr, + cb_boolean pIsLe); + +/** + * Delete a bonded device and its link keys. + * + * @param pBdAddress to the address of the device which bond shall be deleted. + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_deleteBondedDevice(TBdAddr* pBdAddress); + +/** + * Delete all bonded devices and link keys. + * + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_deleteAllBondedDevices(void); + +/** + * Initializes the static Link Keys for both classic and LE. + * nvdsId: nvds id for the static link key, + * (0) disables the use of a static link key. + * + * @return cbBSM_OK. + */ +cb_int32 cbBSM_setStaticLinkKeyNvdsId(cb_int32 nvdsId); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_BT_SEC_MAN_H_ */ + + + + + +