第一部分:HCI协议(八)具体的HCI command和event(16、AUTHENTICATION AND ENCRYPTION 八)

第四阶段:Authentication stage 2: DHKey Check

(1)Simple Pairing Complete Event(常用)

这个event用来通知host配对完成。

参数说明:

Status(1 Octets):0x00表示配对成功,其他表示配对失败

BR_ADDR(6 Octets):远端设备地址

举例说明:

0x04:表示HCI Event Packet

0x36:表示这个event是Simple Pairing Complete event

0x07:表示Parameter_Total_Length即7个byte

0x00:表示status为0

0xcc 0xc8 0x17 0xd5 0x13 0x0a:表示远端设备地址BD_ADDR,即远端设备地址是0x0a 0x13 0xd5 0x17 0xc8 0xcc

最后阶段:认证link key并通知host具体的link key值即:Link Key Notification Event

0x04:表示HCI Event Packet

0x18:表示这个event是Link Key Notification event

0x17:表示Parameter_Total_Length即23个byte

0xcc 0xc8 0x17 0xd5 0x13 0x0a:表示远端设备地址BD_ADDR,即远端设备地址是0x0a 0x13 0xd5 0x17 0xc8 0xcc

Link Key: 0xaa 0x6b 0x4b 0x86 0x1f 0xf0 0x80 0xf7 0xf6 0xbe 0xf9 0x6e 0x9a 0x24 0xc1 0x93

0x04:表示key_type是Unauthenticated Combination Key

5、加密时使用的command

(1)Set Connection Encryption Command(常用)

这个命令可以enable/disable ACL连接的加密

参数说明:

Connection_Handle(2 Octet):表示一个ACL连接,用来确定与本地设备连接的远端BR/EDR Controller

Encryption_Enable(1 Octet):0x00表示Turn Link Level Encryption OFF(关闭加密),0x01表示Turn Link Level Encryption ON(开启加密)

注意:当加密改变时,所以的与远端设备所有的ACL通信都会关闭;

当本地和远端设备都支持Secure Connections (Controller Support)和Secure Connections (Host Support) features时,如果Connection_Handle的加密是enable,此时设置Encryption_Enable为Turn Link Level Encryption OFF,controller会报错:Encryption Mode Not Acceptable (0x25).

举例说明:

Command如下:

0x01:表示HCI Command Packet

0x0413:表示是HCI_Set_Connection_Encryption command

指令的OGF是0x01即0000 01

OCF是0x0013即00 0001 0011

所以整个opcode是0000 0100 0001 0011即0x0413

0x3:表示Parameter_Total_Length=0x3,即参数总长度是3个byte

0x0003:表示Connection_Handle

0x01:表示开启连接层加密

对应的Event:

Command Status event:

0x04:表示HCI Event Packet

0x0f:表示这个event是command status event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status为0

0x01:表示Num_HCI_Command_Packets

0x0413:表示是HCI_Set_Connection_Encryption command

当加密完成时,会收到Encryption Change Event

Encryption Change Event

0x04:表示HCI Event Packet

0x08:表示这个event是Encryption Change event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status为0

0x0003:表示Connection_Handle

0x01:表示使用E0方式进行连接层加密(BR/EDR)

(2)Encryption Change Event(常用)

这个event表示加密模式已经修改完成

参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

Connection_Handle(2 Octet):表示一个ACL连接

Encryption_Enabled(1 Octet):表示修改后的加密模式,这个参数值得含义跟Secure_Connections_Host_Support(通过Write Secure Connections Host Support Command进行配置)和Connection_Handle有关:

Secure_Connections_Host_Support是disable时,Encryption_Enabled可以是0x00或者0x01

Connection_Handle表示的是LE连接时,Encryption_Enabled可以是0x00或者0x01

Secure_Connections_Host_Support是enable并且Connection_Handle是一个BR/EDR连接时,Encryption_Enabled可以是0x00、0x01、0x02

具体含义如下:

举例说明:

Encryption Change Event

0x04:表示HCI Event Packet

0x08:表示这个event是Encryption Change event

0x04:表示Parameter_Total_Length即4个byte

0x00:表示status为0

0x0003:表示Connection_Handle

0x01:表示使用E0方式进行连接层加密(BR/EDR)

6、其他command(没用过)

(1)Change Connection Link Key Command

这个命令可以强制与Connection_Handle(ACL)相关的本地和远端设备产生一个新的link key

参数说明:

Connection_Handle(2 Octet):表示一个ACL连接

举例说明:(暂时没有)

(2)Change Connection Link Key Complete Event

这个event表示Change Connection Link Key Command完成

参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

Connection_Handle(2 Octet):表示一个ACL连接

举例说明:(暂时没有)

(3)Master Link Key Command

使用这个命令可以强制使网络中的master设备使用自己的临时link key或者非永久性的link key,临时link key是用来加密广播消息的,非永久性link key是两个设备点对点进行数据交互时用来加密的。

如果网络中的所有slave都支持AES-CCM加密,但是Key_Flag设置的是使用临时key,此时会返回error:Command Disallowed (0x0C);

注意:如果网络中有至少一个设备不支持AES-CCM加密,Controller和Host都支持Secure Connections的设备是收不到加密广播消息的

如果网络中所有设备都支持AES-CCM加密,此时广播数据包是不加密的,所有的设备都可以接收到

参数说明:

Key_Flag(1 Octet):0x00表示使用非永久性link key,0x01表示使用临时link key

举例说明:(暂时没有)

(4)Master Link Key Complete Event

这个event表示Master的Link Key已经发生了改变

参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

Connection_Handle(2 Octet):表示ACL连接

Key_Flag(1 Octet):0x00表示使用非永久性link key,0x01表示使用临时link key

举例说明:(暂时没有)

(5)Read PIN Type Command

这个命令可以获取PIN_Type(可变的PIN code或者固定的PIN code)的配置

参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

PIN_Type(1 Octet):0x00表示可变的PIN code,0x01表示固定的PIN code

举例说明:(暂时没有)

(6)Write PIN Type Command

这个命令可以配置PIN Type

参数说明:

PIN_Type(1 Octet):0x00表示可变的PIN code,0x01表示固定的PIN code

返回参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

举例说明:(暂时没有)

(7)Create New Unit Key Command

这个命令会产生一个新的unit key,所有新的连接会使用这个新的unit key,但是在之前已经建立的连接中还是会使用旧的unit key

返回参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

举例说明:(暂时没有)

(8)Refresh Encryption Key Command

Host可以使用这个命令来刷新encryption key,这个command使用时会暂停并重新开始加密

参数说明:

Connection_Handle(2 Octet):表示ACL连接

举例说明:(暂时没有)

(9)Encryption Key Refresh Complete Event

这个event表示Connection_Handle表示的ACL连接上Encryption Key已经刷新

注意:如果是伴随着change connection link key程序刷新link key,则这个event应该在Change Connection Link Key Complete event.之前;

如果是伴随着role switch程序刷新link key,则这个event应该在Role Change event之前

参数说明:

Status(1 Octet):0x00表示成功,其他值表示失败

Connection_Handle(2 Octet):表示ACL连接

举例说明:(暂时没有)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值