From 1a42f6a8fc822d0a8a9ecc334a4ca6f0fd1bd9f3 Mon Sep 17 00:00:00 2001 From: sh123 Date: Thu, 14 Oct 2021 15:52:27 +0300 Subject: [PATCH] Increase version, more settings --- codec2talkie/build.gradle | 2 +- .../codec2talkie/protocol/ScramblerPipe.java | 18 +++++++++++++----- .../codec2talkie/settings/PreferenceKeys.java | 1 + .../codec2talkie/tools/ScramblingTools.java | 8 ++++---- codec2talkie/src/main/res/values/strings.xml | 2 ++ .../src/main/res/xml/preferences_kiss.xml | 8 ++++++++ 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/codec2talkie/build.gradle b/codec2talkie/build.gradle index af13cba..013a337 100644 --- a/codec2talkie/build.gradle +++ b/codec2talkie/build.gradle @@ -11,7 +11,7 @@ android { minSdkVersion 23 targetSdkVersion 30 versionCode 1 - versionName "1.7" + versionName "1.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ScramblerPipe.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ScramblerPipe.java index fc9e966..7c90363 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ScramblerPipe.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/ScramblerPipe.java @@ -1,8 +1,12 @@ package com.radio.codec2talkie.protocol; import android.content.Context; +import android.content.SharedPreferences; + +import androidx.preference.PreferenceManager; import com.radio.codec2talkie.MainActivity; +import com.radio.codec2talkie.settings.PreferenceKeys; import com.radio.codec2talkie.tools.ScramblingTools; import com.radio.codec2talkie.transport.Transport; @@ -20,10 +24,12 @@ public class ScramblerPipe implements Protocol { private static final String TAG = MainActivity.class.getSimpleName(); - Context _context; + private Context _context; - final Protocol _childProtocol; - final String _scramblingKey; + private final Protocol _childProtocol; + private final String _scramblingKey; + + private int _iterationsCount; public ScramblerPipe(Protocol childProtocol, String scramblingKey) { _childProtocol = childProtocol; @@ -33,6 +39,8 @@ public class ScramblerPipe implements Protocol { @Override public void initialize(Transport transport, Context context) throws IOException { _context = context; + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(_context); + _iterationsCount = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.KISS_SCRAMBLER_ITERATIONS, "1000")); _childProtocol.initialize(transport, context); } @@ -40,7 +48,7 @@ public class ScramblerPipe implements Protocol { public void send(byte[] audioFrame) throws IOException { ScramblingTools.ScrambledData data = null; try { - data = ScramblingTools.scramble(_scramblingKey, audioFrame); + data = ScramblingTools.scramble(_scramblingKey, audioFrame, _iterationsCount); } catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeySpecException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException | InvalidAlgorithmParameterException e) { @@ -76,7 +84,7 @@ public class ScramblerPipe implements Protocol { byte[] audioFrame = null; try { - audioFrame = ScramblingTools.unscramble(_scramblingKey, data); + audioFrame = ScramblingTools.unscramble(_scramblingKey, data, _iterationsCount); } catch (NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException | InvalidAlgorithmParameterException e) { diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/settings/PreferenceKeys.java b/codec2talkie/src/main/java/com/radio/codec2talkie/settings/PreferenceKeys.java index 61e68f9..52596b9 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/settings/PreferenceKeys.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/settings/PreferenceKeys.java @@ -23,6 +23,7 @@ public final class PreferenceKeys { public static String KISS_BASIC_TX_TAIL = "kiss_basic_tx_tail"; public static String KISS_SCRAMBLING_ENABLED = "kiss_enable_scrambler"; public static String KISS_SCRAMBLER_KEY = "kiss_scrambler_key"; + public static String KISS_SCRAMBLER_ITERATIONS = "kiss_scrambler_iterations"; public static String KISS_EXTENSIONS_ENABLED = "kiss_extensions_enable"; public static String KISS_EXTENSIONS_RADIO_FREQUENCY = "kiss_extension_radio_frequency"; diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/tools/ScramblingTools.java b/codec2talkie/src/main/java/com/radio/codec2talkie/tools/ScramblingTools.java index 06985f1..7a57d14 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/tools/ScramblingTools.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/tools/ScramblingTools.java @@ -24,7 +24,7 @@ public class ScramblingTools { private static final String SCRAMBLING_ALGORITHM = "AES/CBC/PKCS5Padding"; private static final String PBE_ALGORITHM = "PBEwithSHA256and128BITAES-CBC-BC"; - public static ScrambledData scramble(String masterKey, byte[] rawData) + public static ScrambledData scramble(String masterKey, byte[] rawData, int iterations) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException { @@ -37,7 +37,7 @@ public class ScramblingTools { rnd.nextBytes(encData.salt); rnd.nextBytes(encData.iv); - PBEKeySpec keySpec = new PBEKeySpec(masterKey.toCharArray(), encData.salt, PBK_ITERATIONS); + PBEKeySpec keySpec = new PBEKeySpec(masterKey.toCharArray(), encData.salt, iterations); SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(PBE_ALGORITHM); Key key = secretKeyFactory.generateSecret(keySpec); @@ -51,11 +51,11 @@ public class ScramblingTools { return encData; } - public static byte[] unscramble(String masterKey, ScrambledData scrambledData) + public static byte[] unscramble(String masterKey, ScrambledData scrambledData, int iterations) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException { - PBEKeySpec keySpec = new PBEKeySpec(masterKey.toCharArray(), scrambledData.salt, PBK_ITERATIONS); + PBEKeySpec keySpec = new PBEKeySpec(masterKey.toCharArray(), scrambledData.salt, iterations); SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(PBE_ALGORITHM); Key key = secretKeyFactory.generateSecret(keySpec); diff --git a/codec2talkie/src/main/res/values/strings.xml b/codec2talkie/src/main/res/values/strings.xml index 2e96643..fe42d02 100644 --- a/codec2talkie/src/main/res/values/strings.xml +++ b/codec2talkie/src/main/res/values/strings.xml @@ -162,4 +162,6 @@ Modem reboot requested Play audio through the speaker Output incoming audio through the speaker + (Experimental) Number of iterations preformed + Change to lower value on slow devices, >1000 recommended, should match on all devices \ No newline at end of file diff --git a/codec2talkie/src/main/res/xml/preferences_kiss.xml b/codec2talkie/src/main/res/xml/preferences_kiss.xml index 1417867..40b1c32 100644 --- a/codec2talkie/src/main/res/xml/preferences_kiss.xml +++ b/codec2talkie/src/main/res/xml/preferences_kiss.xml @@ -56,5 +56,13 @@ s app:defaultValue="0"> + + + \ No newline at end of file