From 2fc6e6bfd280b6391ed1533c443bde301765a3be Mon Sep 17 00:00:00 2001 From: Jakub Pawlowski Date: Tue, 29 Dec 2015 13:19:21 -0800 Subject: [PATCH] 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 --- api/current.txt | 9 +++ api/system-current.txt | 9 +++ .../android/bluetooth/BluetoothDevice.java | 12 ++-- core/java/android/bluetooth/IBluetooth.aidl | 2 + core/java/android/bluetooth/OobData.aidl | 19 ++++++ core/java/android/bluetooth/OobData.java | 63 +++++++++++++++++++ 6 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 core/java/android/bluetooth/OobData.aidl create mode 100644 core/java/android/bluetooth/OobData.java diff --git a/api/current.txt b/api/current.txt index 05c40d175e2f8..20ca35663504c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -7200,6 +7200,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 CREATOR; + } + } package android.bluetooth.le { diff --git a/api/system-current.txt b/api/system-current.txt index fb47833cc3ba1..5dc14d2d8932f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7432,6 +7432,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 CREATOR; + } + } package android.bluetooth.le { diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index cd5c205d14dc3..f43fb30abb186 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -879,18 +879,16 @@ public final class BluetoothDevice implements Parcelable { * *

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; } diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index 66f3418c620f5..74cb0f6cd25cf 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -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); diff --git a/core/java/android/bluetooth/OobData.aidl b/core/java/android/bluetooth/OobData.aidl new file mode 100644 index 0000000000000..d831c647769b7 --- /dev/null +++ b/core/java/android/bluetooth/OobData.aidl @@ -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; diff --git a/core/java/android/bluetooth/OobData.java b/core/java/android/bluetooth/OobData.java new file mode 100644 index 0000000000000..01f72efb22ac4 --- /dev/null +++ b/core/java/android/bluetooth/OobData.java @@ -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 CREATOR + = new Parcelable.Creator() { + public OobData createFromParcel(Parcel in) { + return new OobData(in); + } + + public OobData[] newArray(int size) { + return new OobData[size]; + } + }; +} \ No newline at end of file