blob: fc843fb8269f2ab378ffef1b8c0579671a78cdd1 [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"
#ifdef __cplusplus
extern "C" {
#endif
/*****************************************************************************
** 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 (BD_ADDR 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 reason for failure.
**
*******************************************************************************/
extern tSMP_STATUS SMP_BR_PairWith (BD_ADDR bd_addr);
/*******************************************************************************
**
** Function SMP_PairCancel
**
** Description This function is called to cancel a SMP pairing.
**
** Returns true - pairing cancelled
**
*******************************************************************************/
extern bool SMP_PairCancel (BD_ADDR 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(BD_ADDR 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 (BD_ADDR 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 (BD_ADDR 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(BD_ADDR 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 This function is called to 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 This function is called to 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 (BD_ADDR 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);
#if (SMP_INCLUDED == TRUE)
// Called when LTK request is received from controller.
extern bool smp_proc_ltk_request(BD_ADDR 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(BD_ADDR bda, uint8_t encr_enable);
#endif /* SMP_INCLUDED == TRUE */
//
// 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);
#ifdef __cplusplus
}
#endif
#endif /* SMP_API_H */