123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- #ifndef SM_INTERNAL_H
- #define SM_INTERNAL_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "bcomdef.h"
- #include "l2cap.h"
- #include "smp.h"
- #include "linkdb.h"
-
-
- #define SM_TIMEOUT_EVT 0x0001
- #define SM_PAIRING_STATE_EVT 0x0002
-
- #define SM_PAIRING_STATE_INITIALIZE 0
- #define SM_PAIRING_STATE_PAIRING_REQ_SENT 1
- #define SM_PAIRING_STATE_WAIT_CONFIRM 2
- #define SM_PAIRING_STATE_WAIT_PASSKEY 3
- #define SM_PAIRING_STATE_WAIT_CONFIRM_PASSKEY 4
- #define SM_PAIRING_STATE_WAIT_RANDOM 5
- #define SM_PAIRING_STATE_WAIT_STK 6
- #define SM_PAIRING_STATE_WAIT_SLAVE_ENCRYPTION_INFO 7
- #define SM_PAIRING_STATE_WAIT_SLAVE_MASTER_INFO 8
- #define SM_PAIRING_STATE_WAIT_SLAVE_IDENTITY_INFO 9
- #define SM_PAIRING_STATE_WAIT_SLAVE_IDENTITY_ADDR_INFO 10
- #define SM_PAIRING_STATE_WAIT_SLAVE_SIGNING_INFO 11
- #define SM_PAIRING_STATE_WAIT_MASTER_ENCRYPTION_INFO 12
- #define SM_PAIRING_STATE_WAIT_MASTER_MASTER_INFO 13
- #define SM_PAIRING_STATE_WAIT_MASTER_IDENTITY_INFO 14
- #define SM_PAIRING_STATE_WAIT_MASTER_IDENTITY_ADDR_INFO 15
- #define SM_PAIRING_STATE_WAIT_MASTER_SIGNING_INFO 16
- #define SM_PAIRING_STATE_WAIT_ENCRYPT 17
- #define SM_PAIRING_STATE_DONE 18
-
- #if defined ( TESTMODES )
-
- #define SM_TESTMODE_OFF 0
- #define SM_TESTMODE_NO_RESPONSE 1
- #define SM_TESTMODE_SEND_BAD_CONFIRM 2
- #define SM_TESTMODE_BAD_CONFIRM_VERIFY 3
- #define SM_TESTMODE_SEND_CONFIRM 4
- #endif
- #define SM_PAIRING_TYPE_INIT 0
- #define SM_PAIRING_TYPE_JUST_WORKS 1
- #define SM_PAIRING_TYPE_PASSKEY_INITIATOR_INPUTS 2
- #define SM_PAIRING_TYPE_PASSKEY_RESPONDER_INPUTS 3
- #define SM_PAIRING_TYPE_PASSKEY_BOTH_INPUTS 4
- #define SM_PAIRING_TYPE_OOB 5
- #define SM_PAIRING_STATE_WAIT 500
- typedef struct
- {
- uint8 confirm[KEYLEN];
- uint8 rand[SMP_RANDOM_LEN];
- } devPairing_t;
- typedef struct
- {
-
- uint8 initiator;
- uint8 state;
- uint8 taskID;
- uint16 connectionHandle;
- smLinkSecurityReq_t *pSecReqs;
- uint8 tk[KEYLEN];
- uint8 authState;
-
-
- smpPairingReq_t *pPairDev;
- uint8 type;
-
-
- devPairing_t myComp;
- devPairing_t devComp;
-
-
- smSecurityInfo_t *pEncParams;
- smSecurityInfo_t *pDevEncParams;
- smIdentityInfo_t *pIdInfo;
- smSigningInfo_t *pSigningInfo;
-
- } smPairingParams_t;
- typedef uint8 (*smProcessMsg_t)( linkDBItem_t *pLinkItem, uint8 cmdID, smpMsgs_t *pParsedMsg );
- typedef void (*smSendNextKeyInfo_t)( void );
- typedef bStatus_t (*smStartEncryption_t)( uint16 connHandle, uint8 *pLTK, uint16 div,
- uint8 *pRandNum, uint8 keyLen );
- typedef uint8 (*smProcessLTKReq_t)( uint16 connectionHandle, uint8 *pRandom, uint16 encDiv );
- typedef struct
- {
- smProcessMsg_t pfnProcessMsg;
- smSendNextKeyInfo_t pfnSendNextKeyInfo;
- smStartEncryption_t pfnStartEncryption;
- } smInitiatorCBs_t;
- typedef struct
- {
- smProcessMsg_t pfnProcessMsg;
- smSendNextKeyInfo_t pfnSendNextKeyInfo;
- smProcessLTKReq_t pfnProcessLTKReq;
- } smResponderCBs_t;
-
- extern uint8 smTaskID;
- extern smPairingParams_t *pPairingParams;
- extern smResponderCBs_t *pfnResponderCBs;
-
- extern void smLinkCheck( uint16 connectionHandle, uint8 changeType );
-
-
- extern uint8 smProcessRandComplete( uint8 status, uint8 *rand );
-
- extern void smTimedOut( void );
-
-
- extern void smStartRspTimer( void );
-
-
- extern void smStopRspTimer( void );
-
-
- extern void smProcessDataMsg( l2capDataEvent_t *pMsg );
-
-
- extern uint8 smProcessEncryptChange( uint16 connectionHandle, uint8 reason );
-
-
- extern uint8 smInProcess( void );
-
- extern bStatus_t sm_d1( uint8 *pK, uint16 d, uint8 *pD1 );
-
- extern bStatus_t sm_ah( uint8 *pK, uint8 *pR, uint8 *pAh );
-
- extern bStatus_t sm_dm( uint8 *pK, uint8 *pR, uint16 *pDm );
-
- extern bStatus_t sm_c1( uint8 *pK, uint8 *pR, uint8 *pC1 );
-
- extern bStatus_t sm_c1new( uint8 *pK, uint8 *pR, uint8 *pRes, uint8 *pReq,
- uint8 iat, uint8 *pIA, uint8 rat, uint8 *pRA, uint8 *pC1 );
-
- extern bStatus_t sm_s1( uint8 *pK, uint8 *pR1, uint8 *pR2, uint8 *pS1 );
-
-
- extern void smGenerateRandBuf( uint8 *pRandNum, uint8 len );
-
- extern void smEncLTK( void );
-
- extern void smNextPairingState( void );
-
-
- extern uint8 smAuthReqToUint8( authReq_t *pAuthReq );
-
- extern void smUint8ToAuthReq( authReq_t *pAuthReq, uint8 authReqUint8 );
-
-
- extern uint8 smpResponderProcessPairingReq( smpPairingReq_t *pParsedMsg );
-
-
- extern bStatus_t smSendFailAndEnd( uint16 connHandle, smpPairingFailed_t *pFailedMsg );
-
- extern bStatus_t smGenerateRandMsg( void );
-
- extern bStatus_t smSavePairInfo( smpPairingReq_t *pPair );
-
- extern bStatus_t smGenerateConfirm( void );
-
- extern void smEndPairing( uint8 status );
-
- extern uint8 smDetermineKeySize( void );
-
- extern bStatus_t smGeneratePairingReqRsp( void );
-
- extern void smPairingSendEncInfo( uint16 connHandle, uint8 *pLTK );
-
- extern void smPairingSendMasterID( uint16 connHandle, uint16 ediv, uint8 *pRand );
-
- extern void smPairingSendIdentityInfo( uint16 connHandle, uint8 *pIRK );
-
- extern void smPairingSendIdentityAddrInfo( uint16 connHandle, uint8 addrType, uint8 *pMACAddr );
-
- extern void smPairingSendSingingInfo( uint16 connHandle, uint8 *pSRK );
-
- extern void smPairingSendEncInfo( uint16 connHandle, uint8 *pLTK );
-
- extern void smProcessPairingReq( linkDBItem_t *pLinkItem, gapPairingReq_t *pPairReq );
-
- extern bStatus_t smStartEncryption( uint16 connHandle, uint8 *pLTK, uint16 div,
- uint8 *pRandNum, uint8 keyLen );
-
- extern void smRegisterInitiator( smInitiatorCBs_t *pfnCBs );
-
- extern void smRegisterResponder( smResponderCBs_t *pfnCBs );
- #ifdef __cplusplus
- }
- #endif
- #endif
|