Implementation of BluetoothDevice.createBondOutOfBand

This patch implements out of band pairing that uses optional data.
Currently, it works only for LE transport, using Temporary Key value.
In the future fields might be added to OOBData to support other options for
optional data.

Change-Id: I0811182efb72ac5f80521ed4876b32603cb628c1
This commit is contained in:
Jakub Pawlowski
2015-12-29 13:19:21 -08:00
parent 81e7a58754
commit c28caad44b
6 changed files with 107 additions and 7 deletions

View File

@@ -6987,6 +6987,15 @@ package android.bluetooth {
field public static final int TYPE_SCO = 2; // 0x2
}
public class OobData implements android.os.Parcelable {
ctor public OobData();
method public int describeContents();
method public byte[] getSecurityManagerTk();
method public void setSecurityManagerTk(byte[]);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.bluetooth.OobData> CREATOR;
}
}
package android.bluetooth.le {

View File

@@ -7208,6 +7208,15 @@ package android.bluetooth {
field public static final int TYPE_SCO = 2; // 0x2
}
public class OobData implements android.os.Parcelable {
ctor public OobData();
method public int describeContents();
method public byte[] getSecurityManagerTk();
method public void setSecurityManagerTk(byte[]);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.bluetooth.OobData> CREATOR;
}
}
package android.bluetooth.le {

View File

@@ -872,18 +872,16 @@ public final class BluetoothDevice implements Parcelable {
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}.
*
* @param hash - Simple Secure pairing hash
* @param randomizer - The random key obtained using OOB
* @param transport - Transport to use
* @param oobData - Out Of Band data
* @return false on immediate error, true if bonding will begin
*
* @hide
*/
public boolean createBondOutOfBand(byte[] hash, byte[] randomizer) {
//TODO(BT)
/*
public boolean createBondOutOfBand(int transport, OobData oobData) {
try {
return sService.createBondOutOfBand(this, hash, randomizer);
} catch (RemoteException e) {Log.e(TAG, "", e);}*/
return sService.createBondOutOfBand(this, transport, oobData);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return false;
}

View File

@@ -20,6 +20,7 @@ import android.bluetooth.IBluetoothCallback;
import android.bluetooth.IBluetoothStateChangeCallback;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.OobData;
import android.os.ParcelUuid;
import android.os.ParcelFileDescriptor;
@@ -56,6 +57,7 @@ interface IBluetooth
BluetoothDevice[] getBondedDevices();
boolean createBond(in BluetoothDevice device, in int transport);
boolean createBondOutOfBand(in BluetoothDevice device, in int transport, in OobData oobData);
boolean cancelBondProcess(in BluetoothDevice device);
boolean removeBond(in BluetoothDevice device);
int getBondState(in BluetoothDevice device);

View File

@@ -0,0 +1,19 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.bluetooth;
parcelable OobData;

View File

@@ -0,0 +1,63 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.bluetooth;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
/**
* Out Of Band Data for Bluetooth device.
*/
public class OobData implements Parcelable {
private byte[] securityManagerTk;
public byte[] getSecurityManagerTk() {
return securityManagerTk;
}
public void setSecurityManagerTk(byte[] securityManagerTk) {
this.securityManagerTk = securityManagerTk;
}
public OobData() { }
private OobData(Parcel in) {
securityManagerTk = in.createByteArray();
}
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeByteArray(securityManagerTk);
}
public static final Parcelable.Creator<OobData> CREATOR
= new Parcelable.Creator<OobData>() {
public OobData createFromParcel(Parcel in) {
return new OobData(in);
}
public OobData[] newArray(int size) {
return new OobData[size];
}
};
}