diff --git a/app/build.gradle b/app/build.gradle index 632ed64..9cf6f03 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { - applicationId "io.skygrid.bluetoothtest" + applicationId "io.craftbox.rpiconf" minSdkVersion 19 targetSdkVersion 23 versionCode 1 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce41638..7ae3ad3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="io.craftbox.rpiconf"> @@ -11,7 +11,7 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/io/brendanmyers/rpiconf/DeviceAdapter.java b/app/src/main/java/io/craftbox/rpiconf/DeviceAdapter.java similarity index 98% rename from app/src/main/java/io/brendanmyers/rpiconf/DeviceAdapter.java rename to app/src/main/java/io/craftbox/rpiconf/DeviceAdapter.java index 39955b9..9ce235d 100644 --- a/app/src/main/java/io/brendanmyers/rpiconf/DeviceAdapter.java +++ b/app/src/main/java/io/craftbox/rpiconf/DeviceAdapter.java @@ -1,4 +1,4 @@ -package io.brendanmyers.rpiconf; +package io.craftbox.rpiconf; import android.bluetooth.BluetoothDevice; import android.content.Context; diff --git a/app/src/main/java/io/brendanmyers/rpiconf/MainActivity.java b/app/src/main/java/io/craftbox/rpiconf/MainActivity.java similarity index 85% rename from app/src/main/java/io/brendanmyers/rpiconf/MainActivity.java rename to app/src/main/java/io/craftbox/rpiconf/MainActivity.java index 49f6da0..1f14167 100644 --- a/app/src/main/java/io/brendanmyers/rpiconf/MainActivity.java +++ b/app/src/main/java/io/craftbox/rpiconf/MainActivity.java @@ -1,11 +1,4 @@ -package io.brendanmyers.rpiconf; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Set; -import java.util.UUID; +package io.craftbox.rpiconf; import android.app.Activity; import android.bluetooth.BluetoothAdapter; @@ -18,6 +11,20 @@ import android.widget.Spinner; import android.widget.TextView; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Set; +import java.util.UUID; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; + + public class MainActivity extends Activity { BluetoothSocket mmSocket; @@ -25,7 +32,7 @@ public class MainActivity extends Activity { Spinner devicesSpinner; Button refreshDevicesButton; TextView ssidTextView; - TextView pskTextView; + TextView passphraseTextView; Button startButton; TextView messageTextView; @@ -41,8 +48,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); ssidTextView = (TextView) findViewById(R.id.ssid_text); - pskTextView = (TextView) findViewById(R.id.psk_text); messageTextView = (TextView) findViewById(R.id.messages_text); + passphraseTextView = (TextView) findViewById(R.id.passphrase_text); devicesSpinner = (Spinner) findViewById(R.id.devices_spinner); @@ -60,7 +67,19 @@ public void onClick(View v) { @Override public void onClick(View v) { String ssid = ssidTextView.getText().toString(); - String psk = pskTextView.getText().toString(); + String passphrase = passphraseTextView.getText().toString(); + String psk = ""; + + PBEKeySpec key_spec = new PBEKeySpec(passphrase.toCharArray(), + ssid.getBytes(), 4096, 256); + + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + try { + SecretKey psk_key = skf.generateSecret(key_spec); + psk = Utils.bytesToHex(psk_key.getEncoded()).toString().toLowerCase(); + } catch (InvalidKeySpecException e) {} + } catch (NoSuchAlgorithmException e) {} BluetoothDevice device = (BluetoothDevice) devicesSpinner.getSelectedItem(); (new Thread(new workerThread(ssid, psk, device))).start(); diff --git a/app/src/main/java/io/craftbox/rpiconf/Utils.java b/app/src/main/java/io/craftbox/rpiconf/Utils.java new file mode 100644 index 0000000..61d719e --- /dev/null +++ b/app/src/main/java/io/craftbox/rpiconf/Utils.java @@ -0,0 +1,25 @@ +package io.craftbox.rpiconf; + +public class Utils { + final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); + + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + + public static byte[] hexToBytes(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i+1), 16)); + } + return data; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9e847a1..a10755f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -49,29 +49,27 @@ android:layout_below="@+id/ssid_label" android:layout_alignParentStart="true" /> - -