blob: 10cff742881bf522251f90c95e50c394691bfe9d [file] [log] [blame]
/******************************************************************************
*
* Copyright (C) 1999-2012 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
/******************************************************************************
*
* This file contains the SMP API function external definitions.
*
******************************************************************************/
#ifndef SMP_API_H
#define SMP_API_H
#include "bt_target.h"
#include "smp_api_types.h"
/*****************************************************************************
* External Function Declarations
****************************************************************************/
/* API of SMP */
/*******************************************************************************
*
* Function SMP_Init
*
* Description This function initializes the SMP unit.
*
* Returns void
*
******************************************************************************/
extern void SMP_Init(void);
/*******************************************************************************
*
* Function SMP_SetTraceLevel
*
* Description This function sets the trace level for SMP. If called with
* a value of 0xFF, it simply returns the current trace level.
*
* Returns The new or current trace level
*
******************************************************************************/
extern uint8_t SMP_SetTraceLevel(uint8_t new_level);
/*******************************************************************************
*
* Function SMP_Register
*
* Description This function register for the SMP service callback.
*
* Returns void
*
******************************************************************************/
extern bool SMP_Register(tSMP_CALLBACK* p_cback);
/*******************************************************************************
*
* Function SMP_Pair
*
* Description This function is called to start a SMP pairing.
*
* Returns SMP_STARTED if bond started, else otherwise exception.
*
******************************************************************************/
extern tSMP_STATUS SMP_Pair(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function SMP_BR_PairWith
*
* Description This function is called to start a SMP pairing over BR/EDR.
*
* Returns SMP_STARTED if pairing started, otherwise the reason for the
* failure.
*
******************************************************************************/
extern tSMP_STATUS SMP_BR_PairWith(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function SMP_PairCancel
*
* Description This function is called to cancel a SMP pairing.
*
* Returns true - pairing cancelled
*
******************************************************************************/
extern bool SMP_PairCancel(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function SMP_SecurityGrant
*
* Description This function is called to grant security process.
*
* Parameters bd_addr - peer device bd address.
* res - result of the operation SMP_SUCCESS if success.
* Otherwise, SMP_REPEATED_ATTEMPTS is too many
* attempts.
*
* Returns None
*
******************************************************************************/
extern void SMP_SecurityGrant(const RawAddress& bd_addr, uint8_t res);
/*******************************************************************************
*
* Function SMP_PasskeyReply
*
* Description This function is called after Security Manager submitted
* Passkey request to the application.
*
* Parameters: bd_addr - Address of the device for which PIN was requested
* res - result of the operation SMP_SUCCESS if success
* passkey - numeric value in the range of
* BTM_MIN_PASSKEY_VAL(0) -
* BTM_MAX_PASSKEY_VAL(999999(0xF423F)).
*
******************************************************************************/
extern void SMP_PasskeyReply(const RawAddress& bd_addr, uint8_t res,
uint32_t passkey);
/*******************************************************************************
*
* Function SMP_ConfirmReply
*
* Description This function is called after Security Manager submitted
* numeric comparison request to the application.
*
* Parameters: bd_addr - Address of the device with which numeric
* comparison was requested
* res - comparison result SMP_SUCCESS if success
*
******************************************************************************/
extern void SMP_ConfirmReply(const RawAddress& bd_addr, uint8_t res);
/*******************************************************************************
*
* Function SMP_OobDataReply
*
* Description This function is called to provide the OOB data for
* SMP in response to SMP_OOB_REQ_EVT
*
* Parameters: bd_addr - Address of the peer device
* res - result of the operation SMP_SUCCESS if success
* p_data - SM Randomizer C.
*
******************************************************************************/
extern void SMP_OobDataReply(const RawAddress& bd_addr, tSMP_STATUS res,
uint8_t len, uint8_t* p_data);
/*******************************************************************************
*
* Function SMP_SecureConnectionOobDataReply
*
* Description This function is called to provide the SC OOB data for
* SMP in response to SMP_SC_OOB_REQ_EVT
*
* Parameters: p_data - pointer to the data
*
******************************************************************************/
extern void SMP_SecureConnectionOobDataReply(uint8_t* p_data);
/*******************************************************************************
*
* Function SMP_Encrypt
*
* Description Encrypt the data with the specified key.
*
* Parameters: key - Pointer to key key[0] conatins the MSB
* key_len - key length
* plain_text - Pointer to data to be encrypted
* plain_text[0] conatins the MSB
* pt_len - plain text length
* p_out - pointer to the encrypted outputs
*
* Returns Boolean - true: encryption is successful
******************************************************************************/
extern bool SMP_Encrypt(uint8_t* key, uint8_t key_len, uint8_t* plain_text,
uint8_t pt_len, tSMP_ENC* p_out);
/*******************************************************************************
*
* Function SMP_KeypressNotification
*
* Description Notify SM about Keypress Notification.
*
* Parameters: bd_addr - Address of the device to send keypress
* notification to
* value - keypress notification parameter value
*
******************************************************************************/
extern void SMP_KeypressNotification(const RawAddress& bd_addr, uint8_t value);
/*******************************************************************************
*
* Function SMP_CreateLocalSecureConnectionsOobData
*
* Description This function is called to start creation of local SC OOB
* data set (tSMP_LOC_OOB_DATA).
*
* Parameters: bd_addr - Address of the device to send OOB data block
* to.
*
* Returns Boolean - true: creation of local SC OOB data set started.
******************************************************************************/
extern bool SMP_CreateLocalSecureConnectionsOobData(
tBLE_BD_ADDR* addr_to_send_to);
// Called when LTK request is received from controller.
extern bool smp_proc_ltk_request(const RawAddress& bda);
// Called when link is encrypted and notified to slave device.
// Proceed to send LTK, DIV and ER to master if bonding the devices.
extern void smp_link_encrypted(const RawAddress& bda, uint8_t encr_enable);
//
// The AES-CMAC Generation Function with tlen implemented.
// |key| - CMAC key in little endian order, expect SRK when used by SMP.
// |input| - text to be signed in little endian byte order.
// |length| - length of the input in byte.
// |tlen| - lenth of mac desired
// |p_signature| - data pointer to where signed data to be stored, tlen long.
// Returns false if out of resources, true in other cases.
//
bool aes_cipher_msg_auth_code(BT_OCTET16 key, uint8_t* input, uint16_t length,
uint16_t tlen, uint8_t* p_signature);
#endif /* SMP_API_H */