linux/net/bluetooth/smp.h

/*
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
   SOFTWARE IS DISCLAIMED.
*/

#ifndef __SMP_H
#define __SMP_H

struct smp_command_hdr {} __packed;

#define SMP_CMD_PAIRING_REQ
#define SMP_CMD_PAIRING_RSP
struct smp_cmd_pairing {} __packed;

#define SMP_IO_DISPLAY_ONLY
#define SMP_IO_DISPLAY_YESNO
#define SMP_IO_KEYBOARD_ONLY
#define SMP_IO_NO_INPUT_OUTPUT
#define SMP_IO_KEYBOARD_DISPLAY

#define SMP_OOB_NOT_PRESENT
#define SMP_OOB_PRESENT

#define SMP_DIST_ENC_KEY
#define SMP_DIST_ID_KEY
#define SMP_DIST_SIGN
#define SMP_DIST_LINK_KEY

#define SMP_AUTH_NONE
#define SMP_AUTH_BONDING
#define SMP_AUTH_MITM
#define SMP_AUTH_SC
#define SMP_AUTH_KEYPRESS
#define SMP_AUTH_CT2

#define SMP_CMD_PAIRING_CONFIRM
struct smp_cmd_pairing_confirm {} __packed;

#define SMP_CMD_PAIRING_RANDOM
struct smp_cmd_pairing_random {} __packed;

#define SMP_CMD_PAIRING_FAIL
struct smp_cmd_pairing_fail {} __packed;

#define SMP_CMD_ENCRYPT_INFO
struct smp_cmd_encrypt_info {} __packed;

#define SMP_CMD_INITIATOR_IDENT
struct smp_cmd_initiator_ident {} __packed;

#define SMP_CMD_IDENT_INFO
struct smp_cmd_ident_info {} __packed;

#define SMP_CMD_IDENT_ADDR_INFO
struct smp_cmd_ident_addr_info {} __packed;

#define SMP_CMD_SIGN_INFO
struct smp_cmd_sign_info {} __packed;

#define SMP_CMD_SECURITY_REQ
struct smp_cmd_security_req {} __packed;

#define SMP_CMD_PUBLIC_KEY
struct smp_cmd_public_key {} __packed;

#define SMP_CMD_DHKEY_CHECK
struct smp_cmd_dhkey_check {} __packed;

#define SMP_CMD_KEYPRESS_NOTIFY
struct smp_cmd_keypress_notify {} __packed;

#define SMP_CMD_MAX

#define SMP_PASSKEY_ENTRY_FAILED
#define SMP_OOB_NOT_AVAIL
#define SMP_AUTH_REQUIREMENTS
#define SMP_CONFIRM_FAILED
#define SMP_PAIRING_NOTSUPP
#define SMP_ENC_KEY_SIZE
#define SMP_CMD_NOTSUPP
#define SMP_UNSPECIFIED
#define SMP_REPEATED_ATTEMPTS
#define SMP_INVALID_PARAMS
#define SMP_DHKEY_CHECK_FAILED
#define SMP_NUMERIC_COMP_FAILED
#define SMP_BREDR_PAIRING_IN_PROGRESS
#define SMP_CROSS_TRANSP_NOT_ALLOWED

#define SMP_MIN_ENC_KEY_SIZE
#define SMP_MAX_ENC_KEY_SIZE

/* LTK types used in internal storage (struct smp_ltk) */
enum {};

static inline bool smp_ltk_is_sc(struct smp_ltk *key)
{}

static inline u8 smp_ltk_sec_level(struct smp_ltk *key)
{}

/* Key preferences for smp_sufficient security */
enum smp_key_pref {};

/* SMP Commands */
int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
				  u8 addr_type);
bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
			     enum smp_key_pref key_pref);
int smp_conn_security(struct hci_conn *hcon, __u8 sec_level);
int smp_user_confirm_reply(struct hci_conn *conn, u16 mgmt_op, __le32 passkey);

bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16],
		     const bdaddr_t *bdaddr);
int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa);
int smp_generate_oob(struct hci_dev *hdev, u8 hash[16], u8 rand[16]);

int smp_force_bredr(struct hci_dev *hdev, bool enable);

int smp_register(struct hci_dev *hdev);
void smp_unregister(struct hci_dev *hdev);

#if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)

int bt_selftest_smp(void);

#else

static inline int bt_selftest_smp(void)
{
	return 0;
}

#endif

#endif /* __SMP_H */