我正在为fido2构建一个android身份验证器。我被读/写特性困住了。我正在开发mac-chrome 75。chrome可以检测到我的android身份验证程序。在检测到我的布尔身份验证器之后,onCharacteristicReadRequest()
将从身份验证器端调用。在onCharacteristicReadRequest()
中,我正在使用下面编写的代码,但之后没有来自客户端的响应。
我试过0b1000000版本的u2f。很好用。当我移动fido2版本0b100000时,我面临着这个问题。我是广告fido服务和设备信息服务认证。两个服务都已添加thread.sleep(1000)interval。我无法按顺序添加这两个服务。当我按顺序添加这两个服务时,我将得到ArrayIndexOutofBoundException
。
我不知道这两个问题是否相互关联。如果我做错了什么,请纠正我。
{
...
}else if (characteristic.getUuid().equals(FidoUUIDConstants.FIDO_SERVICE_REVISION_BITFIELD)) {
status = BluetoothGatt.GATT_SUCCESS;
ByteBuffer bb = ByteBuffer.allocate(1);
bb.order(ByteOrder.BIG_ENDIAN);
bb.put((byte) (1 << 5));
bytes = bb.array();
}
mGattServer.sendResponse(device, requestId, status, 0, bytes);
客户端应在要求FidoServiceBitFieldversion之后读取/写入特征。
最佳答案
我无法按顺序添加两个服务
我认为您可以添加device info service
如下:
gattServer = bleManager.openGattServer(this, new BluetoothGattServerCallback() {
@Override
public void onServiceAdded(int status, BluetoothGattService service) {
if (service.getUuid().equals(FidoUUIDConstants.FIDO2_GATT_SERVICE)) {
gattServer.addService(deviceInfoService);
}
}
});
gattServer.addService(fido2GattService)
对于
fidoServiceRevisionBitfield
的特性,我只是在CTAP document的索引a device that only supports FIDO2 Rev 1 will only have a fidoServiceRevisionBitfield characteristic of length 1 with value 0x20.
处遵循这条语句。因此,我的实现是:if(characteristic.getUuid().equals(FIDO2GattService.SERVICE_REVISION_BITFIELD)) {
status = BluetoothGatt.GATT_SUCCESS;
bytes = new byte[] {0x20}
}
gattServer.sendResponse(device, requestId, status, 0, bytes);