2011-06-10 01:50:40 +04:00
/*
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 .
*/
2011-02-11 04:38:54 +03:00
# ifndef __SMP_H
# define __SMP_H
struct smp_command_hdr {
__u8 code ;
} __packed ;
# define SMP_CMD_PAIRING_REQ 0x01
# define SMP_CMD_PAIRING_RSP 0x02
struct smp_cmd_pairing {
__u8 io_capability ;
__u8 oob_flag ;
__u8 auth_req ;
__u8 max_key_size ;
__u8 init_key_dist ;
__u8 resp_key_dist ;
} __packed ;
2011-06-10 01:50:42 +04:00
# define SMP_IO_DISPLAY_ONLY 0x00
# define SMP_IO_DISPLAY_YESNO 0x01
# define SMP_IO_KEYBOARD_ONLY 0x02
# define SMP_IO_NO_INPUT_OUTPUT 0x03
# define SMP_IO_KEYBOARD_DISPLAY 0x04
# define SMP_OOB_NOT_PRESENT 0x00
# define SMP_OOB_PRESENT 0x01
# define SMP_DIST_ENC_KEY 0x01
# define SMP_DIST_ID_KEY 0x02
# define SMP_DIST_SIGN 0x04
# define SMP_AUTH_NONE 0x00
# define SMP_AUTH_BONDING 0x01
# define SMP_AUTH_MITM 0x04
2011-02-11 04:38:54 +03:00
# define SMP_CMD_PAIRING_CONFIRM 0x03
struct smp_cmd_pairing_confirm {
__u8 confirm_val [ 16 ] ;
} __packed ;
# define SMP_CMD_PAIRING_RANDOM 0x04
struct smp_cmd_pairing_random {
__u8 rand_val [ 16 ] ;
} __packed ;
# define SMP_CMD_PAIRING_FAIL 0x05
struct smp_cmd_pairing_fail {
__u8 reason ;
} __packed ;
# define SMP_CMD_ENCRYPT_INFO 0x06
struct smp_cmd_encrypt_info {
__u8 ltk [ 16 ] ;
} __packed ;
# define SMP_CMD_MASTER_IDENT 0x07
struct smp_cmd_master_ident {
2012-03-12 14:13:06 +04:00
__le16 ediv ;
2014-02-28 04:00:28 +04:00
__le64 rand ;
2011-02-11 04:38:54 +03:00
} __packed ;
# define SMP_CMD_IDENT_INFO 0x08
struct smp_cmd_ident_info {
__u8 irk [ 16 ] ;
} __packed ;
# define SMP_CMD_IDENT_ADDR_INFO 0x09
struct smp_cmd_ident_addr_info {
__u8 addr_type ;
bdaddr_t bdaddr ;
} __packed ;
# define SMP_CMD_SIGN_INFO 0x0a
struct smp_cmd_sign_info {
__u8 csrk [ 16 ] ;
} __packed ;
# define SMP_CMD_SECURITY_REQ 0x0b
struct smp_cmd_security_req {
__u8 auth_req ;
} __packed ;
# define SMP_PASSKEY_ENTRY_FAILED 0x01
# define SMP_OOB_NOT_AVAIL 0x02
# define SMP_AUTH_REQUIREMENTS 0x03
# define SMP_CONFIRM_FAILED 0x04
# define SMP_PAIRING_NOTSUPP 0x05
# define SMP_ENC_KEY_SIZE 0x06
2012-07-19 18:03:44 +04:00
# define SMP_CMD_NOTSUPP 0x07
# define SMP_UNSPECIFIED 0x08
2011-02-11 04:38:54 +03:00
# define SMP_REPEATED_ATTEMPTS 0x09
2014-05-08 15:19:11 +04:00
# define SMP_INVALID_PARAMS 0x0a
2011-02-11 04:38:54 +03:00
2011-06-14 20:37:42 +04:00
# define SMP_MIN_ENC_KEY_SIZE 7
# define SMP_MAX_ENC_KEY_SIZE 16
2014-06-16 20:25:16 +04:00
/* LTK types used in internal storage (struct smp_ltk) */
enum {
SMP_STK ,
SMP_LTK ,
SMP_LTK_SLAVE ,
} ;
2011-06-10 01:50:40 +04:00
/* SMP Commands */
2013-05-14 19:05:12 +04:00
bool smp_sufficient_security ( struct hci_conn * hcon , u8 sec_level ) ;
2012-08-24 04:32:43 +04:00
int smp_conn_security ( struct hci_conn * hcon , __u8 sec_level ) ;
2011-06-10 01:50:40 +04:00
int smp_sig_channel ( struct l2cap_conn * conn , struct sk_buff * skb ) ;
2014-02-27 01:33:45 +04:00
int smp_distribute_keys ( struct l2cap_conn * conn ) ;
2011-12-22 04:12:12 +04:00
int smp_user_confirm_reply ( struct hci_conn * conn , u16 mgmt_op , __le32 passkey ) ;
2011-06-10 01:50:40 +04:00
2011-09-05 21:31:31 +04:00
void smp_chan_destroy ( struct l2cap_conn * conn ) ;
2014-02-18 12:19:31 +04:00
bool smp_irk_matches ( struct crypto_blkcipher * tfm , u8 irk [ 16 ] ,
bdaddr_t * bdaddr ) ;
2014-02-23 21:42:19 +04:00
int smp_generate_rpa ( struct crypto_blkcipher * tfm , u8 irk [ 16 ] , bdaddr_t * rpa ) ;
2014-02-18 12:19:31 +04:00
2011-02-11 04:38:54 +03:00
# endif /* __SMP_H */