15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 1999-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This file contains internally used SMP definitions 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SMP_INT_H 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_INT_H 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "smp_api.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MODEL_ENC_ONLY 0 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MODEL_PASSKEY 1 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MODEL_OOB 2 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MODEL_KEY_NOTIF 3 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MODEL_MAX 4 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_ASSO_MODEL; 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SMP_MAX_CONN 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #define SMP_MAX_CONN 2 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_WAIT_FOR_RSP_TOUT 30 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_WAIT_FOR_REL_DELAY_TOUT 5 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP L2CAP command code */ 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_PAIRING_REQ 0x01 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_PAIRING_RSP 0x02 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_CONFIRM 0x03 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_INIT 0x04 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_PAIRING_FAILED 0x05 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_ENCRYPT_INFO 0x06 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_MASTER_ID 0x07 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_IDENTITY_INFO 0x08 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_ID_ADDR 0x09 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_SIGN_INFO 0x0A 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_SEC_REQ 0x0B 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OPCODE_MAX (SMP_OPCODE_SEC_REQ + 1) 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP events */ 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIRING_REQ_EVT SMP_OPCODE_PAIRING_REQ 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIRING_RSP_EVT SMP_OPCODE_PAIRING_RSP 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_CONFIRM_EVT SMP_OPCODE_CONFIRM 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_RAND_EVT SMP_OPCODE_INIT 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIRING_FAILED_EVT SMP_OPCODE_PAIRING_FAILED 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENCRPTION_INFO_EVT SMP_OPCODE_ENCRYPT_INFO 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MASTER_ID_EVT SMP_OPCODE_MASTER_ID 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ID_INFO_EVT SMP_OPCODE_IDENTITY_INFO 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ID_ADDR_EVT SMP_OPCODE_ID_ADDR 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SIGN_INFO_EVT SMP_OPCODE_SIGN_INFO 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SECURITY_REQ_EVT SMP_OPCODE_SEC_REQ 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SELF_DEF_EVT SMP_SECURITY_REQ_EVT 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_KEY_READY_EVT (SMP_SELF_DEF_EVT + 1) 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENCRYPTED_EVT (SMP_SELF_DEF_EVT + 2) 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_L2CAP_CONN_EVT (SMP_SELF_DEF_EVT + 3) 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_L2CAP_DISCONN_EVT (SMP_SELF_DEF_EVT + 4) 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_RSP_EVT (SMP_SELF_DEF_EVT + 5) 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_API_SEC_GRANT_EVT (SMP_SELF_DEF_EVT + 6) 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_TK_REQ_EVT (SMP_SELF_DEF_EVT + 7) 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_CMPL_EVT (SMP_SELF_DEF_EVT + 8) 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENC_REQ_EVT (SMP_SELF_DEF_EVT + 9) 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_BOND_REQ_EVT (SMP_SELF_DEF_EVT + 10) 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_DISCARD_SEC_REQ_EVT (SMP_SELF_DEF_EVT + 11) 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_RELEASE_DELAY_EVT (SMP_SELF_DEF_EVT + 12) 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_RELEASE_DELAY_TOUT_EVT (SMP_SELF_DEF_EVT + 13) 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_EVENT; 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_MAX_EVT SMP_RELEASE_DELAY_TOUT_EVT + 1 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* auumption it's only using the low 8 bits, if bigger than that, need to expand it to be 16 bits */ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_KEY_MASK 0x00ff 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP pairing state */ 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_IDLE, 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_WAIT_APP_RSP, 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_SEC_REQ_PENDING, 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_PAIR_REQ_RSP, 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_WAIT_CONFIRM, 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_CONFIRM, 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_RAND, 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_ENC_PENDING, 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_BOND_PENDING, 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_RELEASE_DELAY, 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_ST_MAX 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_STATE; 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* random and encrption activity state */ 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_COMPARE = 1, 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_CONFIRM, 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_DIV_LTK, 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_DIV_CSRK, 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_RAND_V, 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_TK, 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_SRAND_MRAND, 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_GEN_SRAND_MRAND_CONT 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_KEY_TYPE_TK, 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_KEY_TYPE_CFM, 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_KEY_TYPE_CMP, 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_KEY_TYPE_STK, 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_KEY_TYPE_LTK 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 key_type; 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8* p_data; 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tSMP_KEY; 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_data; /* UINT8 type data pointer */ 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_KEY key; 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 reason; 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tSMP_INT_DATA; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* internal status mask */ 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_FLAGS_WE_STARTED_DD (1) 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_FLAGS_PEER_STARTED_DD (1 << 1) 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_FLAGS_CMD_CONFIRM (1 << SMP_OPCODE_CONFIRM) /* 1 << 3 */ 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_FLAG_ENC_AFTER_PAIR (1 << 4) 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* check if authentication requirement need MITM protection */ 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_NO_MITM_REQUIRED(x) (((x) & SMP_AUTH_YN_BIT) == 0) 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENCRYT_KEY_SIZE 16 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENCRYT_DATA_SIZE 16 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ECNCRPYT_STATUS HCI_SUCCESS 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP control block */ 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_CALLBACK *p_callback; 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TIMER_LIST_ENT rsp_timer_ent; 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 trace_level; 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR pairing_bda; 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_STATE state; 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 failure; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 role; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 flags; 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 cb_evt; 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_SEC_LEVEL sec_level; 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN connect_initialized; 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 confirm; 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 rconfirm; 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 rrand; 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 rand; 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_IO_CAP peer_io_caps; 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_IO_CAP loc_io_caps; 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_OOB_FLAG peer_oob_flag; 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_OOB_FLAG loc_oob_flag; 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_AUTH_REQ peer_auth_req; 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_AUTH_REQ loc_auth_req; 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 peer_enc_size; 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 loc_enc_size; 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 peer_i_key; 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 peer_r_key; 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 loc_i_key; 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 loc_r_key; 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 tk; 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 ltk; 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 div; 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 csrk; /* storage for local CSRK */ 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 ediv; 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET8 enc_rand; 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 rand_enc_proc; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN last_cmd; 201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 addr_type; 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR local_bda; 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN is_pair_cancel; 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN discard_sec_req; 2057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta UINT8 rcvd_cmd_code; 2067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta UINT8 rcvd_cmd_len; 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SMP_CONFORMANCE_TESTING == TRUE 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN enable_test_confirm_val; 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 test_confirm; 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN enable_test_rand_val; 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 test_rand; 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN enable_test_pair_fail; 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 pair_fail_status; 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN remove_fixed_channel_disable; 215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN skip_test_compare_check; 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tSMP_CB; 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Server Action functions are of this type */ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tSMP_ACT)(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern "C" 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SMP_DYNAMIC_MEMORY == FALSE 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_API extern tSMP_CB smp_cb; 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SMP_API extern tSMP_CB *smp_cb_ptr; 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define smp_cb (*smp_cb_ptr) 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Functions provided by att_main.c */ 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSMP_API extern void smp_init (void); 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SMP_CONFORMANCE_TESTING == TRUE 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Used only for conformance testing */ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSMP_API extern void smp_set_test_confirm_value (BOOLEAN enable, UINT8 *p_c_value); 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSMP_API extern void smp_set_test_rand_value (BOOLEAN enable, UINT8 *p_c_value); 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSMP_API extern void smp_set_test_pair_fail_status (BOOLEAN enable, UINT8 status); 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSMP_API extern void smp_remove_fixed_channel_disable (BOOLEAN disable); 249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaSMP_API extern void smp_skip_compare_check (BOOLEAN enable); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* smp main */ 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_sm_event(tSMP_CB *p_cb, tSMP_EVENT event, void *p_data); 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_sec_request(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_pair_req(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_confirm(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_pair_fail(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_init(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_sec_request(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_pair_fail(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_confirm(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_init(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_enc_info(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_master_id(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_id_info(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_id_addr(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_sec_grant(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_sec_req(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_sl_key(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_start_enc(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_enc_cmpl(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_discard(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_release_delay(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_release_delay_tout(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_pairing_cmpl(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_decide_asso_model(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_app_cback(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_compare(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_check_auth_req(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_io_rsp(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_id_info(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_enc_info(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_csrk_info(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_ltk_reply(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_pair_cmd(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_pair_terminate(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_idle_terminate(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_send_pair_rsp(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_key_distribution(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_srk_info(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_generate_csrk(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2926975b4d711142b885af479721cada448952c6b41Andre Eisenbachextern void smp_delay_terminate(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battaextern void smp_fast_conn_param(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 2947fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* smp_l2c */ 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_l2cap_if_init (void); 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* smp utility */ 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN smp_send_cmd(UINT8 cmd_code, tSMP_CB *p_cb); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_cb_cleanup(tSMP_CB *p_cb); 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_reset_control_value(tSMP_CB *p_cb); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_proc_pairing_cmpl(tSMP_CB *p_cb); 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_convert_string_to_tk(BT_OCTET16 tk, UINT32 passkey); 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_mask_enc_key(UINT8 loc_enc_size, UINT8 * p_data); 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_rsp_timeout(TIMER_LIST_ENT *p_tle); 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_xor_128(BT_OCTET16 a, BT_OCTET16 b); 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN smp_encrypt_data (UINT8 *key, UINT8 key_len, 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *plain_text, UINT8 pt_len, 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSMP_ENC *p_out); 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* smp key */ 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_generate_confirm (tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_generate_compare (tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_generate_stk (tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_generate_ltk(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_generate_passkey (tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_genenrate_rand_cont(tSMP_CB *p_cb, tSMP_INT_DATA *p_data); 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* smp main util */ 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void smp_set_state(tSMP_STATE state); 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tSMP_STATE smp_get_state(void); 3217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battaextern void smp_reject_unexp_pair_req(BD_ADDR bd_addr); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* SMP_INT_H */ 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 325