TI BLE5-Stack API Documentation  9.12.00
gapbondmgr.h
Go to the documentation of this file.
1 /******************************************************************************
2 
3  Group: WCS, BTS
4  $Target Device: DEVICES $
5 
6  ******************************************************************************
7  $License: TI_TEXT 2010 $
8  ******************************************************************************
9  $Release Name: PACKAGE NAME $
10  $Release Date: PACKAGE RELEASE DATE $
11  *****************************************************************************/
12 
21 #ifndef GAPBONDMGR_H
22 #define GAPBONDMGR_H
23 
24 #ifdef __cplusplus
25 extern "C"
26 {
27 #endif
28 
29 /*-------------------------------------------------------------------
30  * INCLUDES
31  */
32 #include "ti/ble/host/gap/gap.h"
33 
34 /*-------------------------------------------------------------------
35  * CONSTANTS
36  */
37 
43 // This is a common file for the legacy and sysconfig examples,
44 // the parameters under ifndef SYSCFG are defined in this file for
45 // the legacy examples and generated using the sysconfig tool for
46 // the sysconfig examples
47 #ifndef SYSCFG
48 #if !defined ( GAP_BONDINGS_MAX )
49 #ifdef CC23X0
51 #define GAP_BONDINGS_MAX 5
52 #else
53 #define GAP_BONDINGS_MAX 10
54 #endif // CC23X0
55 #endif
56 
57 
58 #if !defined ( GAP_CHAR_CFG_MAX )
59 #define GAP_CHAR_CFG_MAX 4
61 #endif
62 #endif //SYSCFG
63 
83 #define GAPBOND_PAIRING_MODE 0x400
84 
94 #define GAPBOND_MITM_PROTECTION 0x402
95 
105 #define GAPBOND_IO_CAPABILITIES 0x403
106 
116 #define GAPBOND_OOB_ENABLED 0x404
117 
128 #define GAPBOND_OOB_DATA 0x405
129 
139 #define GAPBOND_BONDING_ENABLED 0x406
140 
153 #define GAPBOND_KEY_DIST_LIST 0x407
154 
160 #define GAPBOND_ERASE_ALLBONDS 0x409
161 
163 #define GAPBOND_AUTO_FAIL_PAIRING 0x40A
164 #define GAPBOND_AUTO_FAIL_REASON 0x40B
165 
176 #define GAPBOND_KEYSIZE 0x40C
177 
191 #define GAPBOND_AUTO_SYNC_AL 0x40D
192 
200 #define GAPBOND_BOND_COUNT 0x40E
201 
212 #define GAPBOND_BOND_FAIL_ACTION 0x40F
213 
226 #define GAPBOND_ERASE_SINGLEBOND 0x410
227 
241 #define GAPBOND_SECURE_CONNECTION 0x411
242 
261 #define GAPBOND_ECCKEY_REGEN_POLICY 0x412
262 
284 #define GAPBOND_ECC_KEYS 0x413
285 
295 #define GAPBOND_SC_HOST_DEBUG 0x414
296 
313 #define GAPBOND_ERASE_BOND_IN_CONN 0x415
314 
332 #define GAPBOND_ALLOW_DEBUG_KEYS 0x416
333 
347 #define GAPBOND_LRU_BOND_REPLACEMENT 0x418
348 
357 #define GAPBOND_ERASE_LOCAL_INFO 0x41A
358 
368 #define GAPBOND_AUTHEN_PAIRING_ONLY 0x41B
369 
380 #define GAPBOND_SAME_IRK_OPTION 0x41C
381 
391 #define GAPBOND_ERASE_BONDS_ON_ADDRESS_CHANGE 0x41D
392 
404 #define GAPBOND_PAIRING_MODE_NO_PAIRING 0x00
406 #define GAPBOND_PAIRING_MODE_WAIT_FOR_REQ 0x01
408 #define GAPBOND_PAIRING_MODE_INITIATE 0x02
410 
416 #define GAPBOND_IO_CAP_DISPLAY_ONLY 0x00
418 #define GAPBOND_IO_CAP_DISPLAY_YES_NO 0x01
420 #define GAPBOND_IO_CAP_KEYBOARD_ONLY 0x02
422 #define GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT 0x03
424 #define GAPBOND_IO_CAP_KEYBOARD_DISPLAY 0x04
426 
432 #define GAPBOND_KEYDIST_PENCKEY 0x01
434 #define GAPBOND_KEYDIST_PIDKEY 0x02
436 #define GAPBOND_KEYDIST_PSIGN 0x04
438 #define GAPBOND_KEYDIST_PLINK 0x08
440 #define GAPBOND_KEYDIST_CENCKEY 0x10
442 #define GAPBOND_KEYDIST_CIDKEY 0x20
444 #define GAPBOND_KEYDIST_CSIGN 0x40
446 #define GAPBOND_KEYDIST_CLINK 0x80
448 
454 #define GAPBOND_SAME_IRK_UPDATE_BOND_REC 0x00
456 #define GAPBOND_SAME_IRK_TERMINATE_LINK 0x01
458 
494 #define GAP_BOND_REC_ID_OFFSET 0
495 #define GAP_BOND_LOCAL_LTK_OFFSET 1
496 #define GAP_BOND_DEV_LTK_OFFSET 2
497 #define GAP_BOND_DEV_IRK_OFFSET 3
498 #define GAP_BOND_DEV_CSRK_OFFSET 4
499 #define GAP_BOND_DEV_SIGN_COUNTER_OFFSET 5
500 #define GAP_BOND_REC_IDS 6
501 
502 // Bonded State Flags
503 #define GAP_BONDED_STATE_NO_RECORD 0xFF
504 #define GAP_BONDED_STATE_UNAUTHENTICATED 0x00
505 #define GAP_BONDED_STATE_AUTHENTICATED 0x01
506 #define GAP_BONDED_STATE_SERVICE_CHANGED 0x02
507 #define GAP_BONDED_STATE_CAR 0x04
508 #define GAP_BONDED_STATE_SECURECONNECTION 0x08
509 #define GAP_BONDED_STATE_RPA_ONLY 0x10
510 
528 #define GAPBOND_PAIRING_STATE_STARTED 0x00
529 
549 #define GAPBOND_PAIRING_STATE_COMPLETE 0x01
550 
568 #define GAPBOND_PAIRING_STATE_ENCRYPTED 0x02
569 #define GAPBOND_PAIRING_STATE_BOND_SAVED 0x03
571 #define GAPBOND_PAIRING_STATE_CAR_READ 0x04
573 #define GAPBOND_PAIRING_STATE_RPAO_READ 0x05
575 #define GAPBOND_GENERATE_ECC_DONE 0x06
577 
592 #define SMP_PAIRING_FAILED_PASSKEY_ENTRY_FAILED 0x01
593 #define SMP_PAIRING_FAILED_OOB_NOT_AVAIL 0x02
595 
599 #define SMP_PAIRING_FAILED_AUTH_REQ 0x03
600 #define SMP_PAIRING_FAILED_CONFIRM_VALUE 0x04
602 #define SMP_PAIRING_FAILED_NOT_SUPPORTED 0x05
604 
608 #define SMP_PAIRING_FAILED_ENC_KEY_SIZE 0x06
609 #define SMP_PAIRING_FAILED_CMD_NOT_SUPPORTED 0x07
611 #define SMP_PAIRING_FAILED_UNSPECIFIED 0x08
613 
617 #define SMP_PAIRING_FAILED_REPEATED_ATTEMPTS 0x09
618 
622 #define SMP_PAIRING_FAILED_INVALID_PARAMETERS 0x0A
623 
627 #define SMP_PAIRING_FAILED_DHKEY_CHECK_FAILED 0x0B
628 
632 #define SMP_PAIRING_FAILED_NUM_COMPARISON_FAILED 0x0C
633 
639 #define GAPBOND_FAIL_NO_ACTION 0x00
641 #define GAPBOND_FAIL_INITIATE_PAIRING 0x01
643 #define GAPBOND_FAIL_TERMINATE_LINK 0x02
645 
649 #define GAPBOND_FAIL_TERMINATE_ERASE_BONDS 0x03
650 
654 #define GAPBOND_FAIL_TERMINATE_ERASE_SINGLE_BOND 0x04
655 
661 #define GAPBOND_SECURE_CONNECTION_NONE 0x00
663 #define GAPBOND_SECURE_CONNECTION_ALLOW 0x01
665 #define GAPBOND_SECURE_CONNECTION_ONLY 0x02
667 
677 #define GAPBOND_REGENERATE_ALWAYS 0x00
679 #define GAPBOND_REGENERATE_NEVER 0xFF
681 
683 #define ECC_KEYLEN 32
685 
691 #define GAPBOND_READ_BY_ADDR 0
693 #define GAPBOND_READ_BY_IDX 1
695 
699 /*-------------------------------------------------------------------
700  * TYPEDEFS
701  */
702 
726 typedef void (*pfnPasscodeCB_t)
727 (
728  uint8_t *deviceAddr,
729  uint16_t connectionHandle,
730  uint8_t uiInputs,
731  uint8_t uiOutputs,
732  uint32_t numComparison
733 );
734 
746 typedef void (*pfnPairStateCB_t)
747 (
748  uint16_t connectionHandle,
749  uint8_t state,
750  uint8_t status
751 );
752 
759 typedef struct
760 {
763 } gapBondCBs_t;
764 
772 typedef struct
774 {
775  uint8_t privateKey[ECC_KEYLEN];
776  uint8_t publicKeyX[ECC_KEYLEN];
777  uint8_t publicKeyY[ECC_KEYLEN];
779 
780 //structure of OOB data
781 typedef struct gapBondOOBData
782 {
783  uint8 confirm[KEYLEN]; //calculated/received confirm value
784  uint8 rand[KEYLEN]; //calculated/received random number
786 
788 typedef struct
789 {
790  uint8_t LTK[KEYLEN]; // Long Term Key (LTK)
791  uint16_t div; //lint -e754 // LTK eDiv
792  uint8_t rand[B_RANDOM_NUM_SIZE]; // LTK random number
793  uint8_t keySize; // LTK key size
794 } gapBondLTK_t;
795 
797 typedef struct
798 {
805  uint8_t addr[B_ADDR_LEN];
815  uint8_t stateFlags;
816 } gapBondRec_t;
817 
819 typedef struct
820 {
821  uint16_t attrHandle; // attribute handle
822  uint8_t value; // attribute value for this device
824 
826 typedef struct
827 {
828  uint8_t pairMode;
829  uint8_t mitm;
830  uint8_t ioCap;
831  uint8_t bonding;
834  uint8_t autoSyncAL;
835  uint8_t eccReGenPolicy;
836  uint8_t KeySize;
837  uint8_t removeLRUBond;
838  uint8_t KeyDistList;
839  uint8_t eccDebugKeys;
841  uint8_t bondFailAction;
842  uint8_t sameIrkAction;
844 
846 typedef struct
847 {
848  gapBondRec_t *pBondRec; // pBondRec - basic bond record
849  gapBondLTK_t *pLocalLtk; // localLTK - LTK used by this device during pairing
850  gapBondLTK_t *pDevLtk; // devLTK - LTK used by the peer device during pairing
851  uint8_t *pIRK; // pIRK - IRK used by the peer device during pairing
852  uint8_t *pSRK; // pSRK - SRK used by the peer device during pairing
853  uint32_t *pSignCount; // signCounter - Sign counter used by the peer device during pairing
854  gapBondCharCfg_t *pCharCfg; // charCfg - GATT characteristic configuration
856 
858 /*-------------------------------------------------------------------
859  * API's
860  */
861 
867 extern void GAPBondMgr_Register(gapBondCBs_t *pCB);
868 
878 uint8_t GAPBondMgr_GetAuthTaskID( void );
879 
891 void GAPBondMgr_ReadIRKFromNV( uint8_t* keyBuff );
892 
900 void GAPBondMgr_ReadCSRKFromNV( uint8_t* keyBuff );
901 
918 extern bStatus_t GAPBondMgr_SetParameter(uint16_t param, uint8_t len,
919  void *pValue);
920 
935 extern bStatus_t GAPBondMgr_GetParameter(uint16_t param, void *pValue);
936 
955 extern bStatus_t GAPBondMgr_Pair(uint16_t connHandle);
956 
985 extern bStatus_t GAPBondMgr_FindAddr(uint8_t *pDevAddr,
986  GAP_Peer_Addr_Types_t addrType,
987  uint8_t *pIdx,
988  GAP_Peer_Addr_Types_t *pIdentityAddrType,
989  uint8_t *pIdentityAddr);
990 
1003 extern bStatus_t GAPBondMgr_ServiceChangeInd(uint16_t connectionHandle,
1004  uint8_t setParam);
1005 
1020 extern bStatus_t GAPBondMgr_PasscodeRsp(uint16_t connectionHandle,
1021  uint8_t status, uint32_t passcode);
1022 
1034 
1048  uint8 OOBDataFlag);
1049 
1058 extern bStatus_t GAPBondMgr_GenerateEccKeys( void );
1059 
1060 /*********************************************************************
1061  * @fn GAPBondMgr_ReadLocalLTK
1062  *
1063  * @brief Read LTK from an existing bond using the device address
1064  * This API is intended to be used by the BLE stack only
1065  *
1066  * @param addrType - peer's address type
1067  * @param pDevAddr - peer's address
1068  * @param pLocalLTK - LTK used by this device during pairing
1069  *
1070  * @return SUCCESS if bond was extracted
1071  * bleGAPNotFound if there is no bond record
1072  */
1074  uint8_t *pDevAddr,
1075  gapBondLTK_t *pLocalLtk);
1076 
1092 uint8_t GapBondMgr_readBondFromNV(uint8_t mode,
1093  uint8_t *pIdentifier,
1094  GAP_Peer_Addr_Types_t addrType,
1095  gapBondNvRecord_t *pBondRecord);
1096 
1111 extern uint8_t GapBondMgr_writeBondToNv(gapBondRec_t *pBondRec,
1112  gapBondLTK_t *pLocalLtk,
1113  gapBondLTK_t *pDevLtk,
1114  uint8_t *pIRK,
1115  uint8_t *pSRK,
1116  uint32_t signCount,
1117  gapBondCharCfg_t *charCfg);
1118 
1135 extern uint8_t GapBondMgr_GetPrevAuth(uint16_t connHandle, uint8_t *pMitmReq, uint8_t *pKeySize);
1136 
1151 extern uint8_t GapBondMgr_StartEnc(uint16_t connHandle);
1152 
1153 bool GAPBondMgr_isEnable( void );
1154 /*-------------------------------------------------------------------
1155 -------------------------------------------------------------------*/
1156 #ifdef __cplusplus
1157 }
1158 #endif
1159 
1160 #endif /* GAPBONDMGR_H */
1161 
GAP_Peer_Addr_Types_t
Address types used for specifying peer address type.
Definition: gap.h:745
Public and Private ECC Keys.
Definition: gapbondmgr.h:773
bStatus_t GAPBondMgr_Pair(uint16_t connHandle)
uint8_t mitm
Definition: gapbondmgr.h:829
#define B_RANDOM_NUM_SIZE
BLE Random Number Size.
Definition: bcomdef.h:124
uint8_t bondFailAction
Definition: gapbondmgr.h:841
uint8_t autoSyncAL
Definition: gapbondmgr.h:834
uint8_t removeLRUBond
Definition: gapbondmgr.h:837
gapBondLTK_t * pLocalLtk
Definition: gapbondmgr.h:849
Structure of NV data for the connected device's encryption information.
Definition: gapbondmgr.h:788
bStatus_t GAPBondMgr_GenerateEccKeys(void)
Generates ECC keys.
uint8_t GapBondMgr_StartEnc(uint16_t connHandle)
uint8_t pairMode
Definition: gapbondmgr.h:828
bStatus_t GAPBondMgr_GetParameter(uint16_t param, void *pValue)
bStatus_t GAPBondMgr_PasscodeRsp(uint16_t connectionHandle, uint8_t status, uint32_t passcode)
void(* pfnPairStateCB_t)(uint16_t connectionHandle, uint8_t state, uint8_t status)
Definition: gapbondmgr.h:747
bStatus_t GAPBondMgr_SCGetLocalOOBParameters(gapBondOOBData_t *localOobData)
Get local Random number and confirm value for secure connection.
uint8_t secureConnection
Definition: gapbondmgr.h:832
uint8_t GAPBondMgr_GetAuthTaskID(void)
Retrieves the Task ID associated with the GAP Bond Manager for authentication purposes.
uint16_t div
Definition: gapbondmgr.h:791
Structure of NV data for the connected device's address information.
Definition: gapbondmgr.h:797
uint8_t eccReGenPolicy
Definition: gapbondmgr.h:835
uint8_t bonding
Definition: gapbondmgr.h:831
uint8_t KeySize
Definition: gapbondmgr.h:836
void GAPBondMgr_ReadCSRKFromNV(uint8_t *keyBuff)
Reads the stored CSRK (Connection Signature Resolving Key) from non-volatile memory into the provided...
gapBondLTK_t * pDevLtk
Definition: gapbondmgr.h:850
uint8_t eccDebugKeys
Definition: gapbondmgr.h:839
uint8 confirm[KEYLEN]
Definition: gapbondmgr.h:783
pfnPasscodeCB_t passcodeCB
Passcode callback.
Definition: gapbondmgr.h:761
bStatus_t GAPBondMgr_FindAddr(uint8_t *pDevAddr, GAP_Peer_Addr_Types_t addrType, uint8_t *pIdx, GAP_Peer_Addr_Types_t *pIdentityAddrType, uint8_t *pIdentityAddr)
Search for an address in the bonding table. If the address is a random private resolvable address...
void GAPBondMgr_Register(gapBondCBs_t *pCB)
Definition: gapbondmgr.h:759
uint32_t * pSignCount
Definition: gapbondmgr.h:853
uint8_t eraseBondWhileInConn
Definition: gapbondmgr.h:840
uint8_t * pSRK
Definition: gapbondmgr.h:852
void(* pfnPasscodeCB_t)(uint8_t *deviceAddr, uint16_t connectionHandle, uint8_t uiInputs, uint8_t uiOutputs, uint32_t numComparison)
Definition: gapbondmgr.h:727
uint8_t GapBondMgr_readBondFromNV(uint8_t mode, uint8_t *pIdentifier, GAP_Peer_Addr_Types_t addrType, gapBondNvRecord_t *pBondRecord)
uint8_t keySize
Definition: gapbondmgr.h:793
Aggregation of values relevant for reading a bond from NV.
Definition: gapbondmgr.h:846
gapBondCharCfg_t * pCharCfg
Definition: gapbondmgr.h:854
uint16_t attrHandle
Definition: gapbondmgr.h:821
Contains part of the GAP Bond Manager Parameters values.
Definition: gapbondmgr.h:826
struct gapBondOOBData gapBondOOBData_t
uint8_t value
Definition: gapbondmgr.h:822
uint8_t GapBondMgr_GetPrevAuth(uint16_t connHandle, uint8_t *pMitmReq, uint8_t *pKeySize)
uint8_t stateFlags
Definition: gapbondmgr.h:815
GAP layer interface.
bStatus_t GAPBondMgr_ServiceChangeInd(uint16_t connectionHandle, uint8_t setParam)
void GAPBondMgr_ReadIRKFromNV(uint8_t *keyBuff)
Reads the Identity Resolving Key (IRK) from non-volatile storage.
GAP_Peer_Addr_Types_t addrType
Definition: gapbondmgr.h:809
#define B_ADDR_LEN
Default Public and Random Address Length.
Definition: bcomdef.h:99
bStatus_t GAPBondMgr_SetParameter(uint16_t param, uint8_t len, void *pValue)
gapBondRec_t * pBondRec
Definition: gapbondmgr.h:848
uint8_t GapBondMgr_writeBondToNv(gapBondRec_t *pBondRec, gapBondLTK_t *pLocalLtk, gapBondLTK_t *pDevLtk, uint8_t *pIRK, uint8_t *pSRK, uint32_t signCount, gapBondCharCfg_t *charCfg)
Write bond record to NV.
uint8_t sameIrkAction
Definition: gapbondmgr.h:842
uint8_t KeyDistList
Definition: gapbondmgr.h:838
uint8_t authenPairingOnly
Definition: gapbondmgr.h:833
#define ECC_KEYLEN
ECC Key Length: 256 bit keys.
Definition: gapbondmgr.h:684
bool GAPBondMgr_isEnable(void)
uint8_t bStatus_t
BLE Generic Status return.
Definition: bcomdef.h:246
uint8 rand[KEYLEN]
Definition: gapbondmgr.h:784
Definition: gapbondmgr.h:781
bStatus_t GAPBondMgr_SCSetRemoteOOBParameters(gapBondOOBData_t *remoteOobData, uint8 OOBDataFlag)
Set remote's OOB parameters for secure connection.
uint8_t ioCap
Definition: gapbondmgr.h:830
bStatus_t GAPBondMgr_ReadLocalLTK(GAP_Peer_Addr_Types_t addrType, uint8_t *pDevAddr, gapBondLTK_t *pLocalLtk)
uint8_t * pIRK
Definition: gapbondmgr.h:851
#define KEYLEN
Default key length.
Definition: bcomdef.h:102
pfnPairStateCB_t pairStateCB
Pairing state callback.
Definition: gapbondmgr.h:762
Structure of NV data for the connected device's characteristic configuration.
Definition: gapbondmgr.h:819
© Copyright 1995-2025, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale