/* * * Copyright 2023 The Android Open Source Project * * 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. * */ #pragma once #include #include #include #include #include "btm_ble_api_types.h" #include "btm_ble_sec_api_types.h" #include "stack/include/bt_device_type.h" #include "types/raw_address.h" /******************************************************************************* * * Function BTM_SecAddBleDevice * * Description Add/modify device. This function will be normally called * during host startup to restore all required information * for a LE device stored in the NVRAM. * * Parameters: bd_addr - BD address of the peer * dev_type - Remote device's device type. * addr_type - LE device address type. * ******************************************************************************/ void BTM_SecAddBleDevice(const RawAddress& bd_addr, tBT_DEVICE_TYPE dev_type, tBLE_ADDR_TYPE addr_type); /******************************************************************************* * * Function BTM_SecAddBleKey * * Description Add/modify LE device information. This function will be * normally called during host startup to restore all required * information stored in the NVRAM. * * Parameters: bd_addr - BD address of the peer * p_le_key - LE key values. * key_type - LE SMP key type. * ******************************************************************************/ void BTM_SecAddBleKey(const RawAddress& bd_addr, tBTM_LE_KEY_VALUE* p_le_key, tBTM_LE_KEY_TYPE key_type); /** Returns local device encryption root (ER) */ const Octet16& BTM_GetDeviceEncRoot(); /** Returns local device identity root (IR) */ const Octet16& BTM_GetDeviceIDRoot(); /** Return local device DHK. */ const Octet16& BTM_GetDeviceDHK(); /******************************************************************************* * * Function BTM_SecurityGrant * * Description This function is called to grant security process. * * Parameters bd_addr - peer device bd address. * res - result of the operation BTM_SUCCESS if success. * Otherwise, BTM_REPEATED_ATTEMPTS is too many * attempts. * * Returns None * ******************************************************************************/ void BTM_SecurityGrant(const RawAddress& bd_addr, uint8_t res); /******************************************************************************* * * Function BTM_BlePasskeyReply * * Description This function is called after Security Manager submitted * passkey request to the application. * * Parameters: bd_addr - Address of the device for which passkey 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)). * ******************************************************************************/ void BTM_BlePasskeyReply(const RawAddress& bd_addr, uint8_t res, uint32_t passkey); /******************************************************************************* * * Function BTM_BleConfirmReply * * 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 BTM_SUCCESS if success * ******************************************************************************/ void BTM_BleConfirmReply(const RawAddress& bd_addr, uint8_t res); /******************************************************************************* * * Function BTM_LeOobDataReply * * Description This function is called to provide the OOB data for * SMP in response to BTM_LE_OOB_REQ_EVT * * Parameters: bd_addr - Address of the peer device * res - result of the operation SMP_SUCCESS if success * p_data - simple pairing Randomizer C. * ******************************************************************************/ void BTM_BleOobDataReply(const RawAddress& bd_addr, uint8_t res, uint8_t len, uint8_t* p_data); /******************************************************************************* * * Function BTM_BleSecureConnectionOobDataReply * * Description This function is called to provide the OOB data for * SMP in response to BTM_LE_OOB_REQ_EVT when secure connection * data is available * * Parameters: bd_addr - Address of the peer device * p_c - pointer to Confirmation * p_r - pointer to Randomizer. * ******************************************************************************/ void BTM_BleSecureConnectionOobDataReply(const RawAddress& bd_addr, uint8_t* p_c, uint8_t* p_r); /******************************************************************************* * * Function BTM_BleDataSignature * * Description This function is called to sign the data using AES128 CMAC * algorithm. * * Parameter bd_addr: target device the data to be signed for. * p_text: singing data * len: length of the signing data * signature: output parameter where data signature is going to * be stored. * * Returns true if signing sucessul, otherwise false. * ******************************************************************************/ bool BTM_BleDataSignature(const RawAddress& bd_addr, uint8_t* p_text, uint16_t len, BLE_SIGNATURE signature); /******************************************************************************* * * Function BTM_BleVerifySignature * * Description This function is called to verify the data signature * * Parameter bd_addr: target device the data to be signed for. * p_orig: original data before signature. * len: length of the signing data * counter: counter used when doing data signing * p_comp: signature to be compared against. * Returns true if signature verified correctly; otherwise false. * ******************************************************************************/ bool BTM_BleVerifySignature(const RawAddress& bd_addr, uint8_t* p_orig, uint16_t len, uint32_t counter, uint8_t* p_comp); /******************************************************************************* * * Function BTM_BleLoadLocalKeys * * Description Local local identity key, encryption root or sign counter. * * Parameters: key_type: type of key, can be BTM_BLE_KEY_TYPE_ID, * BTM_BLE_KEY_TYPE_ER * or BTM_BLE_KEY_TYPE_COUNTER. * p_key: pointer to the key. * * Returns non2. * ******************************************************************************/ void BTM_BleLoadLocalKeys(uint8_t key_type, tBTM_BLE_LOCAL_KEYS* p_key); /******************************************************************************* * * Function BTM_BleGetPeerLTK * * Description This function is used to get the long term key of * a bonded peer (LE) device. * * Parameters: address: address of the peer device * * Returns the ltk contained in std::optional if the remote device * is present in security database * std::nullopt if the device is not present * ******************************************************************************/ std::optional BTM_BleGetPeerLTK(const RawAddress address); /******************************************************************************* * * Function BTM_BleGetPeerIRK * * Description This function is used to get the IRK of a bonded * peer (LE) device. * * Parameters: address: address of the peer device * * Returns the ltk contained in std::optional if the remote device * is present in security database * std::nullopt if the device is not present * ******************************************************************************/ std::optional BTM_BleGetPeerIRK(const RawAddress address); /******************************************************************************* * * Function BTM_BleIsLinkKeyKnown * * Description This function is used to check whether the link key * of a peer (LE) device is known or not * * Parameters: address: address of the peer device * * Returns true if the link key is known * false otherwise * ******************************************************************************/ bool BTM_BleIsLinkKeyKnown(const RawAddress address); /******************************************************************************* * * Function BTM_BleGetIdentityAddress * * Description This function is called to get the identity address * (with type) of a peer (LE) device. * * Parameters: address: address of the peer device * * Returns the identity address in std::optional if the remote device * is present in security database * std::nullopt if the device is not present * ******************************************************************************/ std::optional BTM_BleGetIdentityAddress(const RawAddress address);