一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种MACOS系统下访问蓝牙设备的方法及系统与流程

2022-02-19 12:38:52 来源:中国专利 TAG:

一种mac os系统下访问蓝牙设备的方法及系统
技术领域
1.本发明涉及通信领域,特别涉及一种mac os系统下访问蓝牙设备的方法及系统。


背景技术:

2.由于苹果的mac os系统不支持webauthen接口类的应用程序,例如浏览器,对fido蓝牙设备的访问,影响了fido蓝牙设备的使用。


技术实现要素:

3.本发明提供了一种的mac os系统下访问蓝牙设备的方法及系统,解决了上述技术问题。
4.本发明提供的一种mac os系统下访问蓝牙设备的方法,该方法包括:代理程序调用系统的轮询接口函数获取系统发送的蓝牙设备列表,判断蓝牙设备列表中是否有符合预定条件的蓝牙设备;当代理程序判断蓝牙设备列表中有符合预定条件的蓝牙设备时,代理程序调用系统的连接函数与蓝牙设备建立连接,从系统返回的连接结果中获取蓝牙设备的蓝牙设备句柄并保存;代理程序调用系统的获取匹配服务函数查找特定服务名称的驱动,接收系统返回的驱动的驱动句柄;代理程序以预置参数,驱动句柄和创建标识为参数,调用系统的连接标量方法函数使系统发送创建指令给驱动;当驱动接收到系统发送的创建指令时,驱动向系统发送注册请求使系统根据预置参数在系统中注册一个虚拟fido hid设备,接收系统返回的虚拟fido hid设备的虚拟fido hid设备句柄,并向系统返回创建指令的响应;当代理程序接收到系统返回的创建成功响应时,代理程序以通知标识,回调函数的地址和驱动句柄为参数,调用系统的连接标量方法函数向系统发送通知指令;当驱动接收到系统发送通知指令时,获取通知指令中回调函数的地址并存储,向系统返回通知指令响应;当驱动接收到系统通过虚拟fido hid设备的设置报告接口函数发送的fido hid格式的应用程序通信指令时,驱动将应用程序通信指令转换为fido ble 格式的应用程序通信指令,向系统返回fido ble 格式的应用程序通信指令和回调函数的地址,并通过系统调用代理程序的回调函数;当代理程序的回调函数被系统调用时,代理程序接收系统根据回调函数的地址发送的fido ble 格式的应用程序通信指令,以蓝牙设备句柄和fido ble 格式的应用程序通信指令为参数调用系统的特征值写入函数使系统将fido ble 格式的通信指令发送给蓝牙设备;代理程序接收系统发送的蓝牙设备返回的fido ble格式的蓝牙设备通信指令响
应,以驱动句柄和fido ble格式的通信指令响应为参数调用系统的连接标量方法函数将fido ble格式的蓝牙设备通信指令响应通过系统发送给驱动;当驱动接收到系统发送的fido ble格式的蓝牙设备通信指令响应时,将蓝牙设备通信指令响应转换为fido hid格式的蓝牙设备通信指令响应,并根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将fido hid格式的蓝牙设备通信指令响应发送给系统以使系统根据虚拟fido hid设备句柄将fido hid格式的蓝牙设备通信指令响应返回给应用程序。
5.本发明还提供了一种mac os系统下访问蓝牙设备的方法,该方法包括:代理程序调用系统的轮询接口函数获取系统发送的蓝牙设备列表,判断蓝牙设备列表中是否有符合预定条件的蓝牙设备;当代理程序判断蓝牙设备列表中有符合预定条件的蓝牙设备时,代理程序调用系统的连接函数与蓝牙设备建立连接,从系统返回的连接结果中获取蓝牙设备的蓝牙设备句柄并保存;代理程序调用系统的获取匹配服务函数查找特定服务名称的驱动,接收系统返回的驱动的驱动句柄;代理程序以预置参数,驱动句柄和创建标识为参数,调用系统的连接标量方法函数使系统发送创建指令给驱动以触发驱动请求系统根据预置参数在系统中注册一个虚拟fido hid设备;当代理程序接收到系统返回的创建成功响应时,代理程序以通知标识,回调函数的地址和驱动句柄为参数,调用系统的连接标量方法函数以使系统向驱动发送通知指令触发驱动保存通知指令中的回调函数的地址;当代理程序的回调函数被系统调用时,代理程序接收系统发送的由驱动转换得到fido ble 格式的应用程序通信指令,以蓝牙设备句柄和fido ble 格式的应用程序通信指令为参数调用系统的特征值写入函数使系统将fido ble 格式的通信指令发送给蓝牙设备;代理程序接收系统发送的蓝牙设备返回的fido ble格式的蓝牙设备通信指令响应,以驱动句柄和fido ble格式的通信指令响应为参数调用系统的连接标量方法函数以使系统将fido ble格式的蓝牙设备通信指令响应发送给驱动进行转换得到fido hid格式的蓝牙设备通信指令响应后发送给应用程序。
6.本发明还提供了一种mac os系统下访问蓝牙设备的方法,包括:驱动被系统加载;当接收到系统发送的创建指令时,驱动向系统发送注册请求使系统在系统中注册一个虚拟fido hid设备,接收系统返回的虚拟fido hid设备句柄,并向系统返回创建指令的响应给代理程序;当接收到系统发送的通知指令时,驱动接收系统发送通知指令,获取通知指令中回调函数的地址并存储,向系统返回通知指令响应;当驱动接收到系统通过虚拟fido hid设备的设置报告接口函数发送的fido hid格式的应用程序通信指令时,驱动将应用程序通信指令转换为fido ble 格式的应用程序通信指令,向系统返回fido ble 格式的应用程序通信指令和回调函数的地址,以使系统以
回调函数的地址为参数调用代理程序的回调函数将fido ble格式数据通过代理程序发送给蓝牙设备;当驱动接收到系统发送的fido ble格式的蓝牙设备通信指令响应时,驱动将蓝牙设备通信指令响应转换为fido hid格式的蓝牙设备通信指令响应,并根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将fido hid格式的蓝牙设备通信指令响应发送给系统以使系统将fido hid格式的蓝牙设备通信指令响应返回给应用程序。
7.本发明的有益效果:本发明提供了一种mac os系统下访问蓝牙设备的方法及系统,通过注册虚拟fidohid设备,实现了10.15及以下版本的苹果的mac os系统的webauthen接口类的应用程序,例如浏览器,可以访问fido蓝牙设备。
附图说明
8.图1、图2、图3和图4为本发明实施例二提供的一种mac os系统下访问蓝牙设备的方法的流程图。
具体实施方式
9.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
10.实施例一本实施例提供了一种mac os系统下访问蓝牙设备的方法,包括:代理程序调用系统的轮询接口函数获取系统发送的蓝牙设备列表,判断蓝牙设备列表中是否有符合预定条件的蓝牙设备;当代理程序判断蓝牙设备列表中有符合预定条件的蓝牙设备时,代理程序调用系统的连接函数与蓝牙设备建立连接,从系统返回的连接结果中获取蓝牙设备的蓝牙设备句柄并保存;代理程序调用系统的获取匹配服务函数查找特定服务名称的驱动,接收系统返回的驱动的驱动句柄;代理程序以预置参数,驱动句柄和创建标识为参数,调用系统的连接标量方法函数使系统发送创建指令给驱动;当驱动接收到系统发送的创建指令时,驱动向系统发送注册请求使系统根据预置参数在系统中注册一个虚拟fido hid设备,接收系统返回的虚拟fido hid设备句柄,并向系统返回创建指令的响应;当代理程序接收到系统返回的创建成功响应时,代理程序以通知标识,回调函数的地址和驱动句柄为参数,调用系统的连接标量方法函数向系统发送通知指令;当驱动接收到系统发送通知指令时,获取通知指令中回调函数的地址并存储,向系统返回通知指令响应;当驱动接收到系统通过虚拟fido hid设备的设置报告接口函数发送的fido hid
格式的应用程序通信指令时,驱动将应用程序通信指令转换为fido ble 格式的应用程序通信指令,向系统返回fido ble 格式的应用程序通信指令和回调函数的地址,并通过系统调用代理程序的回调函数;当代理程序的回调函数被系统调用时,代理程序接收系统根据回调函数的地址发送的fido ble 格式的应用程序通信指令,以蓝牙设备句柄和fido ble 格式的应用程序通信指令为参数调用系统的特征值写入函数使系统将fido ble 格式的通信指令发送给蓝牙设备;代理程序接收系统发送的蓝牙设备返回的fido ble格式的蓝牙设备通信指令响应,以驱动句柄和fido ble格式的通信指令响应为参数调用系统的连接标量方法函数将fido ble格式的蓝牙设备通信指令响应通过系统发送给驱动;当驱动接收到系统发送的fido ble格式的蓝牙设备通信指令响应时,将蓝牙设备通信指令响应转换为fido hid格式的蓝牙设备通信指令响应,并根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将fido hid格式的蓝牙设备通信指令响应发送给系统以使系统根据虚拟fido hid设备句柄将fido hid格式的蓝牙设备通信指令响应返回给应用程序。
11.在一种可能的实施方式中,当驱动接收到系统发送的创建指令时具体为,当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为创建标识和预置参数;当驱动接收系统发送通知指令时具体为:当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为通知标识和回调函数的地址;当驱动接收系统发送的fido ble格式的蓝牙设备通信指令响应时具体为:当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为发送标识和fido ble格式的蓝牙设备通信指令响应。
12.在一种可能的实施方式中,本方法还包括:当代理程序接收到系统发送的蓝牙设备断开消息时,代理程序以驱动句柄和毁坏标识为参数,调用系统的连接标量方法函数使系统发送毁坏指令给驱动;当驱动接收到系统发送的毁坏指令时,驱动根据虚拟fido hid设备的句柄调用虚拟fido hid设备,使虚拟fido hid设备以虚拟fido hid设备句柄作为参数调用系统的终止函数使系统将注册的虚拟fido hid设备删除。
13.在一种可能的实施方式中,当驱动接收到系统发送的毁坏指令时,具体为:当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为毁坏标识和虚拟fido hid设备句柄。
14.在一种可能的实施方式中,驱动向系统发送注册请求使系统根据预置参数在系统中注册一个虚拟fido hid设备具体为:驱动向系统申请一个io hid设备对象,并将预置参数发送给系统,并请求系统在在系统中注册一个虚拟 fido hid设备后根据预置参数设置虚拟fido hid设备,并将虚拟fido hid设备附加到io hid设备列表中。
15.在一种可能的实施方式中,驱动向系统申请一个io hid设备对象,并将预置参数发送给系统,并请求系统在系统中注册一个虚拟 fido hid设备后根据预置参数设置虚拟fido hid设备,并将虚拟fido hid设备附加到io hid设备列表中具体为:
驱动调用系统的类型分配函数向系统申请一个io hid设备对象,以预置参数为参数调用系统的预置参数设置函数将预置参数发送给系统,并请求系统在系统中注册一个虚拟 fido hid设备后根据预置参数设置虚拟fido hid设备,调用系统的附加函数使系统将虚拟fido hid设备附加到io hid设备列表中。
16.在一种可能的实施方式中,当驱动接收到系统通过虚拟fido hid设备的设置报告接口发送的fido hid格式的应用程序协商通信通道指令时,驱动生成伪数据,根据伪数据生成协商通道指令的响应,并根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将协商通道指令的响应发送给系统以使系统根据虚拟fido hid设备的句柄将协商通道指令的响应返回给应用程序。
17.实施例二本实施例提供了一种mac os系统下访问蓝牙设备的方法,如图1、图2、图3和图4所示,包括注册过程和使用过程,在本实施例中,应用程序可以为浏览器。
18.注册过程包括:步骤1,系统打开蓝牙扫描功能,接收蓝牙设备广播消息,根据接收到的蓝牙设备广播消息创建蓝牙设备列表; 系统加载驱动,为驱动分配驱动句柄,并在系统中将驱动的服务名称注册为virtual fido hid;在本步骤中,根据接收到的蓝牙设备广播消息创建蓝牙设备列表包括:系统为扫描到的每个蓝牙设备分配蓝牙设备句柄,创建蓝牙设备列表,所述蓝牙设备列表中包括扫描到的蓝牙设备的蓝牙设备句柄,其中蓝牙设备句柄映射了每个蓝牙设备的特征,其中每个蓝牙设备的特征包括:蓝牙设备的标识,蓝牙设备的名称,通信允许的最大包的长度,蓝牙设备的状态,服务特征和接收信号强度。
19.在本步骤中,系统加载驱动,为驱动分配驱动句柄,并在系统中将驱动的服务名称注册为virtual fido hid具体为:系统加载驱动,为驱动分配驱动句柄,读取驱动配置文件info.plist文件,获取配置文件中的iokitpersonalities项的值为virtualfidohid,即,在系统中将驱动的服务名称注册为virtualfido hid。
20.步骤2,蓝牙设备发送广播;在本实施例中,步骤1和步骤2的顺序可以互换,也可以同时执行。
21.步骤3,代理程序调用系统的轮询接口函数;在本实施例中,代理程序在开机后自动启动。
22.具体的,在本实施例中,代理程序调用系统的corebluetooth.framework接口下的scanforperipheralswithservices接口函数。
23.步骤4,系统向代理程序发送蓝牙设备列表;步骤5,代理程序根据预定的特征值判断蓝牙设备列表中是否有所需蓝牙设备,如果是,执行步骤6,否则,返回步骤3;具体的,本步骤中,代理程序根据预定的特征值对蓝牙设备列表中的蓝牙设备进行遍历,判断列表中的每个蓝牙设备的特征值是否与预定的特征值相同,如果是,执行步骤6,如果否,返回步骤3。
24.具体的,在本步骤中,代理程序判断蓝牙设备列表中的服务特征中的读和写的特
征值是否与代理程序预定的特征值相同,如果是,执行步骤6,否则,执行步骤3。
25.例如,读的特征值为:"f1d0fff1

deaa

ecee

b42f

c9ba7ed623bb";写的特征值为:"f1d0fff2

deaa

ecee

b42f

c9ba7ed623bb";步骤6,代理程序调用系统的连接函数;具体的,代理程序调用系统的连接函数:(void)connectperipheral:(cbperipheral *)peripheral options:(nullable nsdictionary<nsstring *, id> *)options; 其中参数为 蓝牙设备列表中枚举的预定的特征值相同的设备的设备句柄和null。
26.步骤7,系统向蓝牙设备发送连接请求;步骤8,蓝牙设备向系统返回连接结果;步骤9,系统向代理程序发送连接结果;具体的,在本步骤中,系统调用 (void)centralmanager:(cbcentralmanager *)central didconnectperipheral:(cbperipheral *)peripheral函数向代理程序发送连接结果。
27.步骤10,代理程序根据连接结果判断连接是否成功,如果是,执行步骤11,如果否,返回步骤3;步骤11,代理程序保存连接结果中的蓝牙设备的蓝牙设备句柄;步骤12,代理程序调用系统的匹配服务函数查找特定服务名称的驱动;具体的,在本步骤中,代理程序调用系统的匹配服务函数:ioservicegetmatchingservices函数,查找服务名称为virtual fido hid 的驱动;步骤13,系统向代理程序返回服务名称为virtual fido hid 的驱动句柄;步骤14, 代理程序打开名称为virtual fido hid 的驱动句柄,以预置参数,驱动句柄和创建标识为参数调用系统的连接标量方法函数;本步骤具体为:代理程序打开名称为virtual fido hid 的驱动句柄,调用系统的连接标量方法函数ioconnectcallscalarmethod,其中,参数为创建标识create、驱动句柄和预置参数;其中预置参数可以包括虚拟fido hid设备的供应商标识、产品标识、序列号、设备描述信息,例如,虚拟fido hid设备的名称为:“feitian bsoft fido”虚拟fido hid设备的供应商标识为:0x096e产品标识为: 2341序列号为:“sn 123456”设备描述信息为:static unsigned char report_descriptor[] = {
ꢀꢀꢀꢀ
0x06, 0xd0, 0xf1,
ꢀꢀꢀ
// usage page (reserved 0xf1d0)
ꢀꢀꢀꢀ
0x09, 0x01,
ꢀꢀꢀꢀꢀꢀꢀꢀ
// usage (0x01)
ꢀꢀꢀꢀ
0xa1, 0x01,
ꢀꢀꢀꢀꢀꢀꢀꢀ
// collection (application)
ꢀꢀꢀꢀ
0x09, 0x20,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
usage (0x20)
ꢀꢀꢀꢀ
0x15, 0x00,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
logical minimum (0)
ꢀꢀꢀꢀ
0x26, 0xff, 0x00,
ꢀꢀ
//
ꢀꢀꢀ
logical maximum (255)
ꢀꢀꢀꢀ
0x75, 0x08,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
report size (8)
ꢀꢀꢀꢀ
0x95, 0x40,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
report count (64)
ꢀꢀꢀꢀ
0x81, 0x02,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
input
ꢀꢀꢀꢀ
0x09, 0x21,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
usage (0x21)
ꢀꢀꢀꢀ
0x15, 0x00,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
logical minimum (0)
ꢀꢀꢀꢀ
0x26, 0xff, 0x00,
ꢀꢀ
//
ꢀꢀꢀ
logical maximum (255)
ꢀꢀꢀꢀ
0x75, 0x08,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
report size (8)
ꢀꢀꢀꢀ
0x95, 0x40,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
report count (64)
ꢀꢀꢀꢀ
0x91, 0x02,
ꢀꢀꢀꢀꢀꢀꢀꢀ
//
ꢀꢀꢀ
output
ꢀꢀꢀꢀ
0xc0,
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// end collection};其中, usage page (reserved 0xf1d0)中的f1d0表示fido hid设备类的用途特征。
[0028]
步骤15,系统根据驱动句柄调用驱动的外部方法函数将创建指令发送给驱动;本步骤具体为:系统根据驱动句柄调用驱动的externalmethod 函数将创建指令发送给驱动。
[0029]
步骤16,驱动向系统发送注册请求;本步骤具体为:步骤a1, 驱动向系统申请一个iohiddevice 对象;具体的,驱动调用系统函数ostypealloc(virtualhiddevice)向系统申请一个io hid device 对象;其中,virtualhiddevice 是iohiddevice的子类。
[0030]
步骤a2, 驱动将预置参数发送给系统;具体的,驱动调用系统的设置函数,将预置参数发送给系统,具体的,驱动调用setserialnumberstring(serial_number_s)将序列号发送给系统; 驱动调用setvendorid(vendor_id)将供应商标识发送给系统; 驱动调用setproductid(product_id)将产品标识发送给系统,驱动调用setname(key)将产品的名称发送给系统,驱动调用setreportdescriptor将设备描述符发送给系统;步骤a3, 驱动向系统发送附加请求;具体的,驱动调用附加指令attach指令,请求系统将注册的虚拟fido hid 设备附加到iohiddevice列表。
[0031]
步骤17,系统在系统中注册一个虚拟fido hid设备并生成虚拟fido hid设备句柄,并将虚拟fido hid设备句柄发送给驱动;具体的,在本步骤中,系统在系统中注册一个为虚拟fido hid设备,并生成虚拟fido hid设备相关的虚拟fido hid设备句柄,并对虚拟fidohid设备根据预置参数进行设置,并将注册的虚拟fido hid设备附加到io hid设备列表,并将虚拟fido hid设备句柄发
}......}其中,navigator.credentials.create接口的参数为:依赖方的标识、用户标识,用户名,显示名称,密钥类型以及算法。
[0035]
在本实施例中,当应用程序接收到用户的确认操作时,应用程序调用javascript的webauthen接口中的credential 接口,将用户输入的信息,如依赖方的标识、用户标识,用户名,显示名称,凭证参数发送给系统。
[0036]
步骤27,系统向应用程序返回fido hid设备列表;在本步骤中,系统向应用程序返回的fido hid设备列表中包含设备的句柄。
[0037]
具体的,在本实施例中,设备的句柄为注册的虚拟fido hid设备的虚拟fido hid设备句柄。
[0038]
步骤28,应用程序根据fido hid设备列表获取设备的句柄;具体的,应用程序根据fido hid设备列表获取虚拟设备的虚拟fido hid设备句柄。
[0039]
步骤29,应用程序向系统发送协商通道指令;本步骤具体为:应用程序根据虚拟fido hid设备句柄向系统发送协商通道指令;步骤30,系统调用系统注册的虚拟hid设备的setreport接口,将协商通道指令发送给驱动;步骤31,驱动生成伪数据,根据伪数据生成协商通道指令的响应,并将协商通道指令的响应发送给系统;本步骤具体为:当驱动接收到系统通过所述虚拟fido hid设备的setreport接口发送的fido hid格式的应用程序协商通信通道指令时,驱动生成伪数据,根据伪数据生成协商通道指令的响应,并根据所述虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将协商通道指令的响应发送给系统。
[0040]
在本步骤中,驱动接收到系统发送的协商通道指令,对协商通道指令进行解析得到
ꢀ“
ff ff ff ff86 00 08 40ed 9f c2 096c a3 d9
”ꢀ
,根据得到的数据ff ff ff ff86 00 08 40ed 9f c2 096c a3 d9生成伪数据“ff ff ff ff86 00 11 40ed 9f c2 09 6c a3 d9 00 00 00 01 0201 00 01 07”,其中,00 00 00 01表示协商的通道号,按照fido hid协议组成协商通道指令的响应,将协商通道指令的响应发送给系统。
[0041]
步骤32,系统将协商通道指令的响应发送给应用程序;本步骤具体为:系统根据所述虚拟fido hid设备的句柄将协商通道指令的响应返回给应用程序。
[0042]
步骤33,应用程序向系统发送获取设备信息指令/创建凭证指令;本步骤具体为:应用程序根据虚拟fido hid设备句柄向系统发送取设备信息指令/创建凭证指令;步骤34,系统调用注册的虚拟hid设备的setreport接口,将获取设备信息指令/创建凭证指令发送给驱动;步骤35,驱动接收获取设备信息指令/创建凭证指令,将指令数据由fido hid格式
数据转换为fido ble格式的指令数据,根据回调函数的地址调用系统函数sendasyncresult64,将fido ble格式的指令数据发送给系统;具体的,在本实施例中,当驱动接收创建凭证指令时,本步骤具体为,驱动对获取的创建凭证指令的数据进行cbor解析,得到依赖方的标识、用户标识,用户名,显示名称,密钥类型以及算法,根据依赖方的标识对创建凭证指令的数据的合法性进行判断,当创建凭证指令的数据为合法时,驱动将数据由fido hid格式的创建凭证指令数据转换为fido ble格式数据, 根据回调函数的地址调用系统函数sendasyncresult64,将fido ble格式的指令数据发送给系统,当创建凭证指令的数据不合法时,驱动生成报错响应,并将报错响应返回给系统;其中,根据依赖方的标识对创建凭证指令的数据的合法性进行判断具体可以为:判断依赖方的标识是否为预定的值,如果是,则创建凭证指令的数据合法,如果否,则创建凭证指令的数据不合法。例如,驱动接收到的创建凭证指令的数据为:首包数据:00 00 00 01
ꢀꢀ
90 00 9f 01
ꢀꢀ
a6 01 58 20
ꢀꢀ
a6 cb 97 932a 23 d9 da
ꢀꢀ
7f 87 22 1a
ꢀꢀ
b6 1d 43 2b
ꢀꢀ
2b c2 8e 66ee 94 39 7c
ꢀꢀ
1d c7 1f ed
ꢀꢀ
f4 78 97 cb
ꢀꢀ
02 a2 62 6964 6c 53 65
ꢀꢀ
6c 65 63 74
ꢀꢀ
44 65 76 69
ꢀꢀ
63 65 64 6e第二包数据为:00 00 00 01
ꢀꢀ
00 61 6d 65
ꢀꢀ
6c 53 65 6c
ꢀꢀ
65 63 74 4465 76 69 63
ꢀꢀ
65 03 a3 62
ꢀꢀ
69 64 49 11
ꢀꢀ
22 33 44 5544 33 22 11
ꢀꢀ
64 6e 61 6d
ꢀꢀ
65 6c 53 65
ꢀꢀ
6c 65 63 7444 65 76 69
ꢀꢀ
63 65 6b 64
ꢀꢀ
69 73 70 6c
ꢀꢀ
61 79 4e 61第三包数据为:00 00 00 01
ꢀꢀ
01 6d 65 6c
ꢀꢀ
53 65 6c 65
ꢀꢀ
63 74 44 6576 69 63 65
ꢀꢀ
04 81 a2 63
ꢀꢀ
61 6c 67 26
ꢀꢀ
64 74 79 7065 6a 70 75
ꢀꢀ
62 6c 69 63
ꢀꢀ
2d 6b 65 79
ꢀꢀ
08 40 09 0100 00 00 00
ꢀꢀ
00 00 00 00
ꢀꢀ
00 00 00 00
ꢀꢀ
00 00 00 00驱动将接收到的创建凭证指令的数据进行cbor解析后得到:{1: h'a6cb97932a23d9da7f87221ab61d432b2bc28e66ee94397c1dc71fedf47897cb', 2: {"id": "selectdevice", "name": "selectdevice"}, 3: {"id": h'112233445544332211', "name": "selectdevice", "displayname": "selectdevice"}, 4: [{"alg":
ꢀ‑
7, "type": "public

key"}], 8: h'', 9: 1}其中,"id": "selectdevice"为依赖方的id,"name": "selectdevice"为用户名,"id": h'112233445544332211',为用户标识,"displayname": "selectdevice"为显示名称,"alg":
ꢀ‑
7为算法, type": "public

key"为密钥类型。
[0043]
在本步骤中,驱动将数据由fido hid格式的创建凭证指令数据转换为fido ble格式数据具体为:驱动将首包数据进行解析,得到预设的协商通道号,指令类型标识,fido hid格式数据的总长度和首包数据中要获取的数据,其中预设的协商通道号为四个字节数据,指令
类型标识为1个字节数据,指令长度为2个字节数据;驱动将fido hid格式数据的非首包数据进行如下处理:将非首包数据进行解析,得到预设的协商通道号、数据包序列号和非首包数据中要获取的数据,其中,预设的协商通道号为4个字节数据,数据包序列号为1个字节数据,剩余的数据为非首包数据中要获取的数据;驱动将首包数据中要获取的数据和非首包数据中要获取的数据进行依次拼接,得到fido ble格式数据。
[0044]
在本实施例中,以上述创建凭证指令的示例数据为例,驱动将创建凭证指令的数据由fido hid格式数据转换为fido ble格式数据具体为:驱动将fido hid格式数据的首包数据进行解析:首包数据:00 00 00 01
ꢀꢀ
90 00 9f 01
ꢀꢀ
a6 01 58 20
ꢀꢀ
a6 cb 97 932a 23 d9 da
ꢀꢀ
7f 87 22 1a
ꢀꢀ
b6 1d 43 2b
ꢀꢀ
2b c2 8e 66ee 94 39 7c
ꢀꢀ
1d c7 1f ed
ꢀꢀ
f4 78 97 cb
ꢀꢀ
02 a2 62 6964 6c 53 65
ꢀꢀ
6c 65 63 74
ꢀꢀ
44 65 76 69
ꢀꢀ
63 65 64 6e得到预设的协商通道号00 00 00 01,指令类型标识90,fido hid格式数据的总长度00 9f和首包数据中要获取的数据01
ꢀꢀ
a6 01 58 20
ꢀꢀ
a6 cb 97 93 2a 23 d9 da
ꢀꢀ
7f 87 22 1a
ꢀꢀ
b6 1d 43 2b
ꢀꢀ
2b c2 8e 66 ee 94 39 7c
ꢀꢀ
1d c7 1f ed
ꢀꢀ
f4 78 97 cb
ꢀꢀ
02 a2 62 6964 6c 53 65
ꢀꢀ
6c 65 63 74
ꢀꢀ
44 65 76 69
ꢀꢀ
63 65 64 6e;虚拟fido hid设备对fido hid格式数据的第二包数据进行解析:第二包数据为:00 00 00 01
ꢀꢀ
00 61 6d 65
ꢀꢀ
6c 53 65 6c
ꢀꢀ
65 63 74 4465 76 69 63
ꢀꢀ
65 03 a3 62
ꢀꢀ
69 64 49 11
ꢀꢀ
22 33 44 5544 33 22 11
ꢀꢀ
64 6e 61 6d
ꢀꢀ
65 6c 53 65
ꢀꢀ
6c 65 63 7444 65 76 69
ꢀꢀ
63 65 6b 64
ꢀꢀ
69 73 70 6c
ꢀꢀ
61 79 4e 61得到预设的协商通道号00 00 00 01,数据包序列号00 和非首包数据中要获取的数据61 6d 65
ꢀꢀ
6c 53 65 6c
ꢀꢀ
65 63 74 4465 76 69 63
ꢀꢀ
65 03 a3 62
ꢀꢀ
69 64 49 11
ꢀꢀ
22 33 44 5544 33 22 11
ꢀꢀ
64 6e 61 6d
ꢀꢀ
65 6c 53 65
ꢀꢀ
6c 65 63 7444 65 76 69
ꢀꢀ
63 65 6b 64
ꢀꢀ
69 73 70 6c
ꢀꢀ
61 79 4e 61虚拟fido hid设备对fido hid格式数据的第三包数据进行解析:第三包数据为:00 00 00 01
ꢀꢀ
01 6d 65 6c
ꢀꢀ
53 65 6c 65
ꢀꢀ
63 74 44 6576 69 63 65
ꢀꢀ
04 81 a2 63
ꢀꢀ
61 6c 67 26
ꢀꢀ
64 74 79 7065 6a 70 75
ꢀꢀ
62 6c 69 63
ꢀꢀ
2d 6b 65 79
ꢀꢀ
08 40 09 0100 00 00 00
ꢀꢀ
00 00 00 00
ꢀꢀ
00 00 00 00
ꢀꢀ
00 00 00 00,得到预设的协商通道号00 00 00 01,数据包序列号01 和非首包数据中要获取的数据6d 65 6c
ꢀꢀ
53 65 6c 65
ꢀꢀ
63 74 44 65
76 69 63 65
ꢀꢀ
04 81 a2 63
ꢀꢀ
61 6c 67 26
ꢀꢀ
64 74 79 7065 6a 70 75
ꢀꢀ
62 6c 69 63
ꢀꢀ
2d 6b 65 79
ꢀꢀ
08 40 09 0100 00 00 00
ꢀꢀ
00 00 00 00
ꢀꢀ
00 00 00 00
ꢀꢀ
00 00 00 00,驱动将首包数据中要获取的数据和非首包数据中要获取的数据进行依次拼接,得到转化为fido ble格式数据:01 a6 01 58 20 a6 cb 97 93 2a 23 d9 da 7f 87 22 1ab6 1d 43 2b 2b c2 8e 66 ee 94 39 7c 1d c7 1f ed f478 97 cb 02 a2 62 69 64 6c 53 65 6c 65 63 74 44 6576 69 63 65 64 6e 61 6d 65 6c 53 65 6c 65 63 74 4465 76 69 63 65 03 a3 62 69 64 49 11 22 33 44 55 4433 22 11 64 6e 61 6d 65 6c 53 65 6c 65 63 74 44 6576 69 63 65 6b 64 69 73 70 6c 61 79 4e 61 6d 65 6c53 65 6c 65 63 74 44 65 76 69 63 65 04 81 a2 63 616c 67 26 64 74 79 70 65 6a 70 75 62 6c 69 63 2d 6b65 79 08 40 09 01 00 00 00 00 00 00 00 00 00 00。
[0045]
步骤36,系统调用代理程序的回调函数将fido ble格式的指令数据发送给代理程序;步骤37,代理程序调用系统函数
‑ꢀ
(void)writevalue:(nsdata *)data forcharacteristic:(cbcharacteristic *)characteristic type:(cbcharacteristicwritetype)type 函数,参数为蓝牙设备句柄,和fido ble格式的指令数据;步骤38,系统根据蓝牙设备句柄将fido ble格式的指令数据发送给蓝牙设备;步骤39,蓝牙设备生成获取设备信息指令/创建凭证指令的响应,并将获取设备信息指令/创建凭证指令的响应发送给系统;步骤40,系统调用系统函数void)peripheral:(cbperipheral *)peripheral didupdatevalueforcharacteristic:(cbcharacteristic *)characteristic error:(nserror *)error, 将ble格式的获取设备信息指令/创建凭证指令的响应发送给代理程序;步骤41,代理程序调用系统函数ioconnectcallscalarmethod,参数为send、驱动句柄和获取设备信息指令/创建凭证指令的响应,将获取设备信息指令/创建凭证指令的响应发送给系统;具体的,在本步骤中,参数还包括虚拟fido hid设备的名称。
[0046]
步骤42,系统调用驱动的externalmethod函数,向驱动发送发送指令;本步骤具体为:系统以send和获取设备信息指令/创建凭证指令的响应为参数,调用externalmethod函数向驱动发送发送指令;步骤43,驱动获取发送指令中的设备信息指令/创建凭证指令的响应数据,将响应数据由fido ble格式数据转换为fido hid格式的响应数据,根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的handlereport 函数,参数为fido hid格式的响应数据,将fido hid格式的响应数据发送给系统;
在本步骤中,驱动将fido ble格式数据转换为fido hid格式的响应数据具体为: 将获取的fido ble格式的响应数据按照预定的分包字节数组成首包数据,具体组包方式如下:驱动将预先协商的通道号、指令类型标识和的获取的fido ble格式的数据的总长度和截取的fido ble格式的部分数据组成预定分包字节数的首包数据,其中截取的fido ble格式的部分数据的字节数为预定的分包字节数减去协商的通道号的字节数、指令类型标识的字节数和fido ble格式的数据的总长度的字节数的数值;驱动将剩余的fido ble格式数据分别进行组包,具体组包方式如下:驱动将预先协商的通道号、数据包序列号和截取的剩余的fido ble格式的部分数据进行依次组包,其中每包中截取的剩余的fido ble格式的部分数据的字节数为预定的分包字节数减去预先协商的通道号的字节数和数据包序列号的字节数。
[0047]
在本步骤中,以创建凭证指令的响应数据为例,驱动将创建凭证指令的响应数据由fido ble格式转换为fido hid格式;例如,fido ble格式的创建凭证指令的响应数据为:00a301667061636b65640258e4a95fedc6083dce5a5d2185dd67d3485458c81f4757087b4df2d0e88431f6f5c045000000e13e22415d7fdf4ea48a0cdd60c4249b9d0060710925c50838e9053f054606787cc1abf549c89d142a57eb171634296e67b815d9c115f57c46c4301a1a01928708d4b980ed092ad244dedf010f729e67cea3d72019b117437d9815f3b7e035f8a1301d052d254f18fc8804eec711370fadf274a501020326200121582089f4f823f8bbc2aaa68929f10f4fa4e92dfe0bb891d7f3eaef3dcc90e074dfc1225820fca69aa75b35c00f43197f44493af83151cf046fc629d3a54f319413d862777e03a363616c6726637369675846304402201acabf3194330d861a35864acdca650cb091762fce201fced644e6019206dcc602202eb01197776b918bdd9f5f1217436c572afe475b7144bb5b1859e7b44444cd5563783563825902403082023c308201e2a00302010202101df2b55a51dc4b6885a3d99e697fed18300a06082a8648ce3d0403023049310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f67696573311b301906035504030c124665697469616e204649444f2043412030363020170d3139303932323030303030305a180f32303334303932313233353935395a3069310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f6769657331223020060355040b0c1941757468656e74696361746f72204174746573746174696f6e3117301506035504030c0e4654204649444f322030353230693059301306072a8648ce3d020106082a8648ce3d0301070342000474a4636c9a498f61e81e9434603208dfca75f76927bfcb1b8ecc2bf29b61cd220e7781d893ecd8fe48fac5666187672d35ae4707017e83b87e33cef71da0220ba38189308186301d0603551d0e04160414561dd7d67991eb7b842a88fb529305a04afc9f0a301f0603551d2304183016801432
ae8dc45cc5cd8275302385feb7c26a43124e40300c0603551d130101ff040230003013060b2b0601040182e51c0201010404030205203021060b2b0601040182e51c010104041204103e22415d7fdf4ea48a0cdd60c4249b9d300a06082a8648ce3d0403020348003045022073ae72d10e7d071aae4362979224d0b86152f61b8edd6aa284680bec3ecb05c1022100b4ce642b34b3a7ace79c7ae5951fbf130e3ec780767c67c11904660aef3e36d85901fe308201fa308201a0a003020102021018152b41b743ae6db41599c3b17d820b300a06082a8648ce3d040302304b310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f67696573311d301b06035504030c144665697469616e204649444f20526f6f742043413020170d3138303532303030303030305a180f32303338303531393233353935395a3049310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f67696573311b301906035504030c124665697469616e204649444f2043412030363059301306072a8648ce3d020106082a8648ce3d03010703420004ee1af2a0a6b9e89b5a9a50a7691256255332ea88ad83cd08223b5b930e4b69ea88000c6ed4996a02753d55609e4b748d94e5da61a86eaab6c9acbcd7c5da487ca3663064301d0603551d0e0416041432ae8dc45cc5cd8275302385feb7c26a43124e40301f0603551d230418301680144bbd872611ad1c89cf0458be70d2088c6b1623b730120603551d130101ff040830060101ff020100300e0603551d0f0101ff040403020106300a06082a8648ce3d0403020348003045022023c7afd70addf6650a4aa3471e03792a0674af3669c80d459919729da6436023022100c510973ac92376bb2877930e34dd8773b53b4f38f7d4288ab9a616e32f170d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000驱动将预先协商的通道号00 00 00 01、指令类型标识90和获取的fido ble格式的数据的总长度05 8d和截取的fido ble格式的部分数据组成预定分包字节数的首包数据,其中截取的fido ble格式的部分数据的字节数为预定的分包字节数64减去协商的通道号的字节数4、指令类型标识的字节数1和fido ble格式的数据的总长度的字节数2得到的数值57;根据截取的fido ble格式的部分数据的字节数57从fido ble格式的获取指令响应数据的首字节截取数据得到:00 a3 01 66 70 61 63 6b 65 64 02 58 e4 a9 5f ed c6 08 3d ce 5a 5d 21 85 dd 67 d3 48 54 58 c8 1f 47 57 08 7b 4d f2 d0 e8 84 31 f6 f5 c0 45 00 00 00 e1 3e 22 41 5d 7f df 4e;因此首包数据为:00 00 00 01 90 05 8d 00 a3 01 66 70 61 63 6b 65 64 02 58 e4 a9 5f ed c608 3d ce 5a 5d 21 85 dd 67 d3 48 54 58 c8 1f 47 57 08 7b 4d f2 d0 e8 84 31 f6 f5 c0 45 00 00 00 e1 3e 22 41 5d 7f df 4e;驱动将预先协商的通道号、数据包的序列号和截取的剩余的fido ble格式的部分数据进行依次组包,其中每包中截取的剩余的fido ble格式的部分数据的字节数为预定的
03 0c 12 46 65 69 74 69 61 6e 20 46 49 44 4f 20 43 41 20 30 36 30 20 17 0d 31 39 30 39 32 32 30 30 30 30 30 30 5a 18 0f 32;第九包数据:00 00 00 01 07 30 33 34 30 39 32 31 32 33 35 39 35 39 5a 30 69 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 1d 30 1b 06 03 55 04 0a 0c 14 46 65 69 74 69 61 6e 20 54 65 63 68 6e 6f 6c 6f 67 69 65;第十包数据:00 00 00 01 08 73 31 22 30 20 06 03 55 04 0b 0c 19 41 75 74 68 65 6e 74 69 63 61 74 6f 72 20 41 74 74 65 73 74 61 74 69 6f 6e 31 17 30 15 06 03 55 04 03 0c 0e 46 54 20 46 49 44 4f 32 20 30 35;第十一包数据:00 00 00 01 09 32 30 69 30 59 30 13 06 07 2a 86 48 ce 3d 02 01 06 08 2a 86 48 ce 3d 03 01 07 03 42 00 04 74 a4 63 6c 9a 49 8f 61 e8 1e 94 34 60 32 08 df ca 75 f7 69 27 bf cb 1b 8e cc 2b f2 9b;第十二包数据:00 00 00 01 0a 61 cd 22 0e 77 81 d8 93 ec d8 fe 48 fa c5 66 61 87 67 2d 35 ae 47 07 01 7e 83 b8 7e 33 ce f7 1d a0 22 0b a3 81 89 30 81 86 30 1d 06 03 55 1d 0e 04 16 04 14 56 1d d7 d6 79 91 eb;第十三包数据:00 00 00 01 0b 7b 84 2a 88 fb 52 93 05 a0 4a fc 9f 0a 30 1f 06 03 55 1d 23 04 18 30 16 80 14 32 ae 8d c4 5c c5 cd 82 75 30 23 85 fe b7 c2 6a 43 12 4e 40 30 0c 06 03 55 1d 13 01 01 ff 04 02 30;第十四包数据:00 00 00 01 0c 00 30 13 06 0b 2b 06 01 04 01 82 e5 1c 02 01 01 04 04 03 02 05 20 30 21 06 0b 2b 06 01 04 01 82 e5 1c 01 01 04 04 12 04 10 3e 22 41 5d 7f df 4e a4 8a 0c dd 60 c4 24 9b 9d 30 0a;第十五包数据:00 00 00 01 0d 06 08 2a 86 48 ce 3d 04 03 02 03 48 00 30 45 02 20 73 ae 72 d1 0e 7d 07 1a ae 43 62 97 92 24 d0 b8 61 52 f6 1b 8e dd 6a a2 84 68 0b ec 3e cb 05 c1 02 21 00 b4 ce 64 2b 34 b3 a7;第十六包数据:00 00 00 01 0e ac e7 9c 7a e5 95 1f bf 13 0e 3e c7 80 76 7c 67 c1 19 04 66 0a ef 3e 36 d8 59 01 fe 30 82 01 fa 30 82 01 a0 a0 03 02 01 02 02 10 18 15 2b 41 b7 43 ae 6d b4 15 99 c3 b1 7d 82 0b;第十七包数据:00 00 00 01 0f ac e7 9c 7a e5 95 1f bf 13 0e 3e c7 80 76 7c 67 c1 19 04 66 0a ef 3e 36 d8 59 01 fe 30 82 01 fa 30 82 01 a0 a0 03 02 01 02 02 10 18 15 2b 41 b7 43 ae 6d b4 15 99 c3 b1 7d 82 0b;第十八包数据:
00 00 00 01 0f 30 0a 06 08 2a 86 48 ce 3d 04 03 02 30 4b 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 1d 30 1b 06 03 55 04 0a 0c 14 46 65 69 74 69 61 6e 20 54 65 63 68 6e 6f 6c 6f 67 69 65 73 31;第十九包数据:00 00 00 01 10 1d 30 1b 06 03 55 04 03 0c 14 46 65 69 74 69 61 6e 20 46 49 44 4f 20 52 6f 6f 74 20 43 41 30 20 17 0d 31 38 30 35 32 30 30 30 30 30 30 30 5a 18 0f 32 30 33 38 30 35 31 39 32 33;第二十包数据:00 00 00 01 11 35 39 35 39 5a 30 49 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 1d 30 1b 06 03 55 04 0a 0c 14 46 65 69 74 69 61 6e 20 54 65 63 68 6e 6f 6c 6f 67 69 65 73 31 1b 30 19 06 03 55 04;第二十一包数据:00 00 00 01 12 03 0c 12 46 65 69 74 69 61 6e 20 46 49 44 4f 20 43 41 20 30 36 30 59 30 13 06 07 2a 86 48 ce 3d 02 01 06 08 2a 86 48 ce 3d 03 01 07 03 42 00 04 ee 1a f2 a0 a6 b9 e8 9b 5a 9a 50;第二十二包数据:00 00 00 01 13 a7 69 12 56 25 53 32 ea 88 ad 83 cd 08 22 3b 5b 93 0e 4b 69 ea 88 00 0c 6e d4 99 6a 02 75 3d 55 60 9e 4b 74 8d 94 e5 da 61 a8 6e aa b6 c9 ac bc d7 c5 da 48 7c a3 66 30 64 30 1d;第二十三包数据:00 00 00 01 14 06 03 55 1d 0e 04 16 04 14 32 ae 8d c4 5c c5 cd 82 75 30 23 85 fe b7 c2 6a 43 12 4e 40 30 1f 06 03 55 1d 23 04 18 30 16 80 14 4b bd 87 26 11 ad 1c 89 cf 04 58 be 70 d2 08 8c 6b;第二十四包数据:00 00 00 01 15 16 23 b7 30 12 06 03 55 1d 13 01 01 ff 04 08 30 06 01 01 ff 02 01 00 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 01 06 30 0a 06 08 2a 86 48 ce 3d 04 03 02 03 48 00 30 45 02 20 23;第二十五包数据:00 00 00 01 16 c7 af d7 0a dd f6 65 0a 4a a3 47 1e 03 79 2a 06 74 af 36 69 c8 0d 45 99 19 72 9d a6 43 60 23 02 21 00 c5 10 97 3a c9 23 76 bb 28 77 93 0e 34 dd 87 73 b5 3b 4f 38 f7 d4 28 8a b9;第二十六包数据:00 00 00 01 17 a6 16 e3 2f 17 0d 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00。
[0049]
步骤44,系统向驱动返回接收响应数据成功的响应;步骤45,驱动向系统返回发送指令的响应;步骤46,系统向代理程序返回接收响应数据成功的响应;步骤47,系统将fido hid格式的响应数据发送给应用程序;
本步骤具体为:系统根据所述虚拟fido hid设备的句柄将fido hid格式的响应数据发送给应用程序;步骤48,应用程序接收fido hid格式的响应数据。
[0050]
例如,应用程序接收fido hid格式的创建凭证指令的响应数据。
[0051]
进一步地,应用程序对接收到的fido hid格式的创建凭证指令的响应数据进行cobr解析,并判断响应数据是否合法,如果是,获取凭证,如果否,报错。
[0052]
在本实施例中,例如,应用程序接收到上述创建凭证指令的响应数据后,将创建凭证指令的响应数据进行cobr解析得到解析结果如下:{1:"packed",2:h'a95fedc6083dce5a5d2185dd67d3485458c81f4757087b4df2d0e88431f6f5c045000000e13e22415d7fdf4ea48a0cdd60c4249b9d0060710925c50838e9053f054606787cc1abf549c89d142a57eb171634296e67b815d9c115f57c46c4301a1a01928708d4b980ed092ad244dedf010f729e67cea3d72019b117437d9815f3b7e035f8a1301d052d254f18fc8804eec711370fadf274a501020326200121582089f4f823f8bbc2aaa68929f10f4fa4e92dfe0bb891d7f3eaef3dcc90e074dfc1225820fca69aa75b35c00f43197f44493af83151cf046fc629d3a54f319413d862777e', 3: {"alg":
ꢀ‑
7,"sig":h'304402201acabf3194330d861a35864acdca650cb091762fce201fced644e6019206dcc602202eb01197776b918bdd9f5f1217436c572afe475b7144bb5b1859e7b44444cd55',"x5c":[h'3082023c308201e2a00302010202101df2b55a51dc4b6885a3d99e697fed18300a06082a8648ce3d0403023049310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f67696573311b301906035504030c124665697469616e204649444f2043412030363020170d3139303932323030303030305a180f32303334303932313233353935395a3069310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f6769657331223020060355040b0c1941757468656e74696361746f72204174746573746174696f6e3117301506035504030c0e4654204649444f322030353230693059301306072a8648ce3d020106082a8648ce3d0301070342000474a4636c9a498f61e81e9434603208dfca75f76927bfcb1b8ecc2bf29b61cd220e7781d893ecd8fe48fac5666187672d35ae4707017e83b87e33cef71da0220ba38189308186301d0603551d0e04160414561dd7d67991eb7b842a88fb529305a04afc9f0a301f0603551d2304183016801432ae8dc45cc5cd8275302385feb7c26a43124e40300c0603551d130101ff040230003013060b2b0601040182e51c0201010404030205203021060b2b0601040182e51c010104041204103e22415d7fdf4ea48a0cdd60c4249b9d300a06082a8648ce3d0403020348003045022073ae72d10e7d071aae4362979224d0b86152f61b8edd6aa284680bec3ecb05c1022100b4ce642b34b3a7ace79c7ae5951fbf130e3ec780767c67c11904660aef3e36d8',h'308201fa308201a0a003020102021018152b41b743ae6db41599c3b17d820b300a06082a8648ce3d040302304b310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f67696573311d301b06035504030c144665697469616e204649444f20526f6f742043413020170d3138303532303030303030305a180f32303338303531393233353935395a3049310b3009060355040613025553311d301b060355040a0c144665697469616e20546563686e6f6c6f67696573311b301906035504030c124665697469616e204649444f2043412030363059301306072a8648ce3d020106082a8648ce3d03010703420004ee1af2a0a6b9e89b5a9a50a769125625
5332ea88ad83cd08223b5b930e4b69ea88000c6ed4996a02753d55609e4b748d94e5da61a86eaab6c9acbcd7c5da487ca3663064301d0603551d0e0416041432ae8dc45cc5cd8275302385feb7c26a43124e40301f0603551d230418301680144bbd872611ad1c89cf0458be70d2088c6b1623b730120603551d130101ff040830060101ff020100300e0603551d0f0101ff040403020106300a06082a8648ce3d0403020348003045022023c7afd70addf6650a4aa3471e03792a0674af3669c80d459919729da6436023022100c510973ac92376bb2877930e34dd8773b53b4f38f7d4288ab9a616e32f170d80']}}其中,第二项结构为{rpidhash,flag,signcount,attestedcredentialdata{aaguidcredentialidlengthcredentialidcredentialpublickey}}其中,第二项结构中的前32字节为依赖方rp的id的哈希值:a95fedc6083dce5a5d2185dd67d3485458c81f4757087b4df2d0e88431f6f5c0,应用程序根据依赖方的id的哈希值来验证创建凭证数据的响应是否合法。
[0053]
具体的,在本实施例中,应用程序对依赖方的id根据预定的hash算法进行运算,判断运算结果是否与上述第二项结构中的依赖方的id的哈希值是否相同,如果相同,则创建凭证响应数据合法,如果不相同,则创建凭证响应数据不合法。
[0054]
在本实施例提供的方法中,还包括注销过程:当系统检测到蓝牙设备断开时,系统调用系统函数
‑ꢀ
(void)centralmanager:(cbcentralmanager *)central diddisconnectperipheral:(cbperipheral *)peripheral error:(nserror *)error,向代理程序发送蓝牙设备断开的消息,代理程序接收到断开消息后,调用系统函数ioconnectcallscalarmethod,参数为destroy、驱动的句柄和虚拟fido hid设备的名称作为参数,系统则向驱动发送毁坏指令,驱动接收到系统发送的毁坏指令后根据虚拟fido hid设备的句柄调用虚拟fido hid设备,使虚拟fido hid设备调用系统的terminate函数,并将虚拟fido hid设备句柄作为参数,系统将注册的虚拟fido hid设备删除。
[0055]
实施例三本实施例提供了一种mac os系统下访问蓝牙设备的方法,包括:代理程序调用系统的轮询接口函数获取系统发送的蓝牙设备列表,判断蓝牙设备列表中是否有符合预定条件的蓝牙设备;当代理程序判断到蓝牙设备列表中有符合预定条件的蓝牙设备时,代理程序调用系统的连接函数与蓝牙设备建立连接,从系统返回的连接结果中获取蓝牙设备的蓝牙设备句柄并保存;
代理程序调用系统的获取匹配服务函数查找特定服务名称的驱动,接收系统返回的驱动的驱动句柄;代理程序以预置参数,驱动句柄和创建标识为参数,调用系统的连接标量方法函数使系统发送创建指令给驱动以触发驱动请求系统根据预置参数在系统中注册一个虚拟fido hid设备;当接收到系统返回的创建成功响应时,代理程序以通知标识,回调函数的地址和驱动句柄为参数,调用系统的连接标量方法函数以使系统向驱动发送通知指令触发驱动保存通知指令中的回调函数的地址;当代理程序的回调函数被系统调用时,代理程序接收系统发送的由驱动转换得到fido ble 格式的应用程序通信指令,以蓝牙设备句柄和fido ble 格式的应用程序通信指令为参数调用系统的特征值写入函数使系统将fido ble 格式的通信指令发送给蓝牙设备;代理程序接收系统发送的蓝牙设备返回的fido ble格式的蓝牙设备通信指令响应,以驱动句柄和fido ble格式的通信指令响应为参数调用系统的连接标量方法函数以使系统将fido ble格式的蓝牙设备通信指令响应发送给驱动进行转换得到fido hid格式的蓝牙设备通信指令响应后发送给应用程序。
[0056]
在一种可能的实施方式中,本方法还包括:代理程序接收到系统发送的蓝牙设备断开消息时,代理程序以驱动句柄和毁坏标识为参数,调用系统的连接标量方法函数使系统向驱动发送毁坏请求触发驱动请求系统将注册的虚拟fido hid设备删除。
[0057]
实施例四本实施例提供了一种mac os系统下访问蓝牙设备的方法,包括:驱动被系统加载;当接收到系统发送的创建指令时,驱动向系统发送注册请求使系统在系统中注册一个虚拟fido hid设备,接收系统返回的虚拟fido hid设备句柄,并向系统返回创建指令的响应给代理程序;当接收到系统发送的通知指令时,驱动接收系统发送通知指令,获取通知指令中回调函数的地址并存储,向系统返回通知指令响应;当驱动接收到系统通过虚拟fido hid设备的设置报告接口函数发送的fido hid格式的应用程序通信指令时,驱动将应用程序通信指令转换为fido ble 格式的应用程序通信指令,向系统返回fido ble 格式的应用程序通信指令和回调函数的地址,以使系统以回调函数的地址为参数调用代理程序的回调函数将fido ble格式数据通过代理程序发送给蓝牙设备;当驱动接收系统发送的fido ble格式的蓝牙设备通信指令响应时,驱动将蓝牙设备通信指令响应转换为fido hid格式的蓝牙设备通信指令响应,并根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将fido hid格式的蓝牙设备通信指令响应发送给系统以使系统将fido hid格式的蓝牙设备通信指令响应返回给应用程序。
[0058]
在一种可能的实施方式中,当驱动接收到系统发送的创建指令时具体为:当驱动
的外部方法函数被系统调用时,其中外部方法函数的参数为创建标识和预置参数;当驱动接收到系统发送的通知指令时具体为:当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为通知标识和回调函数的地址;当驱动接收到系统发送的fido ble格式的蓝牙设备通信指令响应时具体为:当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为发送标识和fido ble格式的蓝牙设备通信指令响应。
[0059]
在一种可能的实施方式中,本方法还包括:当驱动接收到系统发送的毁坏指令时,驱动根据虚拟fido hid设备的句柄调用虚拟fido hid设备,使虚拟fido hid设备以虚拟fido hid设备句柄作为参数调用系统的终止函数使系统将注册的虚拟fido hid设备删除。
[0060]
在一种可能的实施方式中,当驱动接收系统发送的毁坏指令时,具体为:当驱动的外部方法函数被系统调用时,其中外部方法函数的参数为毁坏标识和虚拟fido hid设备句柄。
[0061]
在一种可能的实施方式中,驱动向系统发送注册请求使系统在系统中注册一个虚拟fido hid设备具体为:驱动向系统申请一个io hid设备对象,并将预置参数发送给系统,并请求系统在系统中注册一个虚拟 fido hid设备后根据预置参数设置虚拟fido hid设备,并将虚拟fido hid设备附加到io hid设备列表中。
[0062]
在一种可能的实施方式中,驱动向系统申请一个io hid设备对象,并将预置参数发送给系统,并请求系统在系统中注册一个虚拟 fido hid设备后根据预置参数设置虚拟fido hid设备,并将虚拟fido hid设备附加到io hid设备列表中具体为:驱动调用系统的类型分配函数向系统申请一个io hid设备对象,以预置参数为参数调用系统的预置参数设置函数将预置参数发送给系统,并请求系统在系统中注册一个虚拟 fido hid设备后根据预置参数设置虚拟fido hid设备,调用系统的附加函数使系统将虚拟fido hid设备附加到io hid设备列表中。
[0063]
在一种可能的实施方式中,本方法还包括:当驱动接收到系统通过虚拟fido hid设备的报告接口函数接口发送的fido hid格式的应用程序协商通信通道指令时,驱动生成伪数据,根据伪数据生成协商通道指令的响应,并根据虚拟fido hid设备句柄调用虚拟fido hid设备,使虚拟fido hid 设备调用系统的处理报告函数将协商通道指令的响应发送给系统以使系统根据虚拟fido hid设备的句柄将协商通道指令的响应返回给应用程序。
[0064]
可选的,本技术的实施例还提供了一种代理程序装置,此装置包括至少一个处理器、存储器及存储在该存储器上并可被至少一个处理器执行的指令,至少一个处理器执行该指令以实现上述实施例中的方法。该装置是芯片系统时,可以由芯片构成,也可以包含芯片和其他分立器件,本技术实施例对此不作具体限定;该芯片与存储器耦合,用于执行存储器中存储的计算机程序,以执行上述实施例中公开的该装置的执行方法。
[0065]
可选的,本技术的实施例还提供了一种驱动装置,此装置包括至少一个处理器、存储器及存储在该存储器上并可被至少一个处理器执行的指令,至少一个处理器执行该指令以实现上述实施例中的方法。该装置是芯片系统时,可以由芯片构成,也可以包含芯片和其
他分立器件,本技术实施例对此不作具体限定;该芯片与存储器耦合,用于执行存储器中存储的计算机程序,以执行上述实施例中公开的该装置的执行方法。
[0066]
可选的,本技术的实施例还提供了一种mac os系统下访问蓝牙设备的系统,该系统包括上述代理程序装置和驱动装置。
[0067]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机程序。在加载和执行计算机程序时,全部或部分地产生按照本技术实施例所述的流程或功能。该计算机程序可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个基站、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个基站、服务器或数据中心进行传输。所述计算机可读存储介质可以是本发明的装置能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,dvd)、 或者半导体介质(例如固态硬盘(solid state disk,ssd))等。
[0068]
尽管在此结合各实施例对本技术进行了描述,然而,在实施所要求保护的本技术过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
[0069]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献