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