diff --git a/briar-android/res/values/roboguice.xml b/briar-android/res/values/roboguice.xml
index e1ccbebbe..0f6ffcd91 100644
--- a/briar-android/res/values/roboguice.xml
+++ b/briar-android/res/values/roboguice.xml
@@ -9,9 +9,10 @@
- org.briarproject.messaging.MessagingModule
- org.briarproject.messaging.duplex.DuplexMessagingModule
- org.briarproject.messaging.simplex.SimplexMessagingModule
+ - org.briarproject.plugins.AndroidPluginsModule
- org.briarproject.plugins.PluginsModule
- org.briarproject.serial.SerialModule
- - org.briarproject.system.SystemModule
+ - org.briarproject.system.AndroidSystemModule
- org.briarproject.transport.TransportModule
\ No newline at end of file
diff --git a/briar-android/src/org/briarproject/android/AndroidModule.java b/briar-android/src/org/briarproject/android/AndroidModule.java
index df6bfb316..78c7a3a57 100644
--- a/briar-android/src/org/briarproject/android/AndroidModule.java
+++ b/briar-android/src/org/briarproject/android/AndroidModule.java
@@ -4,9 +4,6 @@ import static android.content.Context.MODE_PRIVATE;
import static java.util.concurrent.TimeUnit.SECONDS;
import java.io.File;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
@@ -19,23 +16,11 @@ import javax.inject.Singleton;
import org.briarproject.api.android.AndroidExecutor;
import org.briarproject.api.android.DatabaseUiExecutor;
import org.briarproject.api.android.ReferenceManager;
-import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.db.DatabaseConfig;
import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.plugins.PluginExecutor;
-import org.briarproject.api.plugins.duplex.DuplexPluginConfig;
-import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
-import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
-import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
-import org.briarproject.api.system.FileUtils;
import org.briarproject.api.ui.UiCallback;
-import org.briarproject.plugins.droidtooth.DroidtoothPluginFactory;
-import org.briarproject.plugins.tcp.DroidLanTcpPluginFactory;
-import org.briarproject.plugins.tcp.WanTcpPluginFactory;
-import org.briarproject.plugins.tor.TorPluginFactory;
+
import android.app.Application;
-import android.content.Context;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
@@ -75,7 +60,6 @@ public class AndroidModule extends AbstractModule {
bind(AndroidExecutor.class).to(AndroidExecutorImpl.class);
bind(ReferenceManager.class).to(
ReferenceManagerImpl.class).in(Singleton.class);
- bind(FileUtils.class).to(AndroidFileUtils.class);
bind(UiCallback.class).toInstance(uiCallback);
}
@@ -85,38 +69,6 @@ public class AndroidModule extends AbstractModule {
return databaseUiExecutor;
}
- @Provides
- SimplexPluginConfig getSimplexPluginConfig() {
- return new SimplexPluginConfig() {
- public Collection getFactories() {
- return Collections.emptyList();
- }
- };
- }
-
- @Provides
- DuplexPluginConfig getDuplexPluginConfig(
- @PluginExecutor Executor pluginExecutor,
- AndroidExecutor androidExecutor, Context appContext,
- CryptoComponent crypto, ShutdownManager shutdownManager) {
- DuplexPluginFactory droidtooth = new DroidtoothPluginFactory(
- pluginExecutor, androidExecutor, appContext,
- crypto.getSecureRandom());
- DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
- appContext, shutdownManager);
- DuplexPluginFactory lan = new DroidLanTcpPluginFactory(pluginExecutor,
- appContext);
- DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
- shutdownManager);
- final Collection factories =
- Arrays.asList(droidtooth, tor, lan, wan);
- return new DuplexPluginConfig() {
- public Collection getFactories() {
- return factories;
- }
- };
- }
-
@Provides @Singleton
DatabaseConfig getDatabaseConfig(final Application app) {
final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);
diff --git a/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java b/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java
new file mode 100644
index 000000000..d778a7090
--- /dev/null
+++ b/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java
@@ -0,0 +1,61 @@
+package org.briarproject.plugins;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.Executor;
+
+import org.briarproject.api.android.AndroidExecutor;
+import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.lifecycle.ShutdownManager;
+import org.briarproject.api.plugins.PluginExecutor;
+import org.briarproject.api.plugins.duplex.DuplexPluginConfig;
+import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
+import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
+import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
+import org.briarproject.plugins.droidtooth.DroidtoothPluginFactory;
+import org.briarproject.plugins.tcp.DroidLanTcpPluginFactory;
+import org.briarproject.plugins.tcp.WanTcpPluginFactory;
+import org.briarproject.plugins.tor.TorPluginFactory;
+
+import android.content.Context;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+
+public class AndroidPluginsModule extends AbstractModule {
+
+ protected void configure() {}
+
+ @Provides
+ SimplexPluginConfig getSimplexPluginConfig() {
+ return new SimplexPluginConfig() {
+ public Collection getFactories() {
+ return Collections.emptyList();
+ }
+ };
+ }
+
+ @Provides
+ DuplexPluginConfig getDuplexPluginConfig(
+ @PluginExecutor Executor pluginExecutor,
+ AndroidExecutor androidExecutor, Context appContext,
+ CryptoComponent crypto, ShutdownManager shutdownManager) {
+ DuplexPluginFactory droidtooth = new DroidtoothPluginFactory(
+ pluginExecutor, androidExecutor, appContext,
+ crypto.getSecureRandom());
+ DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
+ appContext, shutdownManager);
+ DuplexPluginFactory lan = new DroidLanTcpPluginFactory(pluginExecutor,
+ appContext);
+ DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
+ shutdownManager);
+ final Collection factories =
+ Arrays.asList(droidtooth, tor, lan, wan);
+ return new DuplexPluginConfig() {
+ public Collection getFactories() {
+ return factories;
+ }
+ };
+ }
+}
diff --git a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java
index 08a44b820..4015185fa 100644
--- a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java
+++ b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPluginFactory.java
@@ -9,7 +9,8 @@ import org.briarproject.api.plugins.duplex.DuplexPlugin;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
+
import android.content.Context;
public class DroidtoothPluginFactory implements DuplexPluginFactory {
diff --git a/briar-android/src/org/briarproject/plugins/tcp/DroidLanTcpPluginFactory.java b/briar-android/src/org/briarproject/plugins/tcp/DroidLanTcpPluginFactory.java
index b9d870fc4..70ce255bc 100644
--- a/briar-android/src/org/briarproject/plugins/tcp/DroidLanTcpPluginFactory.java
+++ b/briar-android/src/org/briarproject/plugins/tcp/DroidLanTcpPluginFactory.java
@@ -7,7 +7,8 @@ import org.briarproject.api.plugins.duplex.DuplexPlugin;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
+
import android.content.Context;
public class DroidLanTcpPluginFactory implements DuplexPluginFactory {
diff --git a/briar-android/src/org/briarproject/android/AndroidFileUtils.java b/briar-android/src/org/briarproject/system/AndroidFileUtils.java
similarity index 93%
rename from briar-android/src/org/briarproject/android/AndroidFileUtils.java
rename to briar-android/src/org/briarproject/system/AndroidFileUtils.java
index 6c1f98a8a..80efdc2a4 100644
--- a/briar-android/src/org/briarproject/android/AndroidFileUtils.java
+++ b/briar-android/src/org/briarproject/system/AndroidFileUtils.java
@@ -1,4 +1,4 @@
-package org.briarproject.android;
+package org.briarproject.system;
import java.io.File;
import java.io.IOException;
diff --git a/briar-android/src/org/briarproject/system/AndroidSeedProvider.java b/briar-android/src/org/briarproject/system/AndroidSeedProvider.java
new file mode 100644
index 000000000..3d20ee25f
--- /dev/null
+++ b/briar-android/src/org/briarproject/system/AndroidSeedProvider.java
@@ -0,0 +1,23 @@
+package org.briarproject.system;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import android.os.Build;
+
+class AndroidSeedProvider extends LinuxSeedProvider {
+
+ @Override
+ void writeToEntropyPool(DataOutputStream out) throws IOException {
+ out.writeInt(android.os.Process.myPid());
+ out.writeInt(android.os.Process.myTid());
+ out.writeInt(android.os.Process.myUid());
+ String fingerprint = Build.FINGERPRINT;
+ if(fingerprint != null) out.writeUTF(fingerprint);
+ if(Build.VERSION.SDK_INT >= 9) {
+ String serial = Build.SERIAL;
+ if(serial != null) out.writeUTF(serial);
+ }
+ super.writeToEntropyPool(out);
+ }
+}
diff --git a/briar-core/src/org/briarproject/system/SystemModule.java b/briar-android/src/org/briarproject/system/AndroidSystemModule.java
similarity index 51%
rename from briar-core/src/org/briarproject/system/SystemModule.java
rename to briar-android/src/org/briarproject/system/AndroidSystemModule.java
index db0b92cb5..570d4fbbc 100644
--- a/briar-core/src/org/briarproject/system/SystemModule.java
+++ b/briar-android/src/org/briarproject/system/AndroidSystemModule.java
@@ -1,16 +1,18 @@
package org.briarproject.system;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
-import org.briarproject.api.system.SystemTimer;
+import org.briarproject.api.system.FileUtils;
+import org.briarproject.api.system.SeedProvider;
import org.briarproject.api.system.Timer;
import com.google.inject.AbstractModule;
-public class SystemModule extends AbstractModule {
+public class AndroidSystemModule extends AbstractModule {
protected void configure() {
bind(Clock.class).to(SystemClock.class);
bind(Timer.class).to(SystemTimer.class);
+ bind(SeedProvider.class).to(AndroidSeedProvider.class);
+ bind(FileUtils.class).to(AndroidFileUtils.class);
}
}
diff --git a/briar-api/src/org/briarproject/api/crypto/SeedProvider.java b/briar-api/src/org/briarproject/api/system/SeedProvider.java
similarity index 82%
rename from briar-api/src/org/briarproject/api/crypto/SeedProvider.java
rename to briar-api/src/org/briarproject/api/system/SeedProvider.java
index 56cc9092a..886fa2df3 100644
--- a/briar-api/src/org/briarproject/api/crypto/SeedProvider.java
+++ b/briar-api/src/org/briarproject/api/system/SeedProvider.java
@@ -1,4 +1,4 @@
-package org.briarproject.api.crypto;
+package org.briarproject.api.system;
/**
* Uses a platform-specific source to provide a seed for a pseudo-random
diff --git a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java b/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
index e6d7c3cdb..49e362b67 100644
--- a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
+++ b/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
@@ -30,8 +30,8 @@ import org.briarproject.api.crypto.PrivateKey;
import org.briarproject.api.crypto.PseudoRandom;
import org.briarproject.api.crypto.PublicKey;
import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.crypto.SeedProvider;
import org.briarproject.api.crypto.Signature;
+import org.briarproject.api.system.SeedProvider;
import org.briarproject.util.ByteUtils;
import org.spongycastle.crypto.AsymmetricCipherKeyPair;
import org.spongycastle.crypto.BlockCipher;
diff --git a/briar-core/src/org/briarproject/crypto/CryptoModule.java b/briar-core/src/org/briarproject/crypto/CryptoModule.java
index 9d097e7e8..f0eb56f05 100644
--- a/briar-core/src/org/briarproject/crypto/CryptoModule.java
+++ b/briar-core/src/org/briarproject/crypto/CryptoModule.java
@@ -14,9 +14,7 @@ import javax.inject.Singleton;
import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.CryptoExecutor;
import org.briarproject.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.api.crypto.SeedProvider;
import org.briarproject.api.lifecycle.LifecycleManager;
-import org.briarproject.util.OsUtils;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
@@ -41,9 +39,6 @@ public class CryptoModule extends AbstractModule {
}
protected void configure() {
- if(OsUtils.isAndroid() || OsUtils.isLinux()) {
- bind(SeedProvider.class).to(LinuxSeedProvider.class);
- }
bind(CryptoComponent.class).to(
CryptoComponentImpl.class).in(Singleton.class);
bind(PasswordStrengthEstimator.class).to(
diff --git a/briar-core/src/org/briarproject/crypto/LinuxSeedProvider.java b/briar-core/src/org/briarproject/crypto/LinuxSeedProvider.java
deleted file mode 100644
index 3db1cd87f..000000000
--- a/briar-core/src/org/briarproject/crypto/LinuxSeedProvider.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.briarproject.crypto;
-
-import java.io.DataInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import org.briarproject.api.crypto.SeedProvider;
-
-class LinuxSeedProvider implements SeedProvider {
-
- public byte[] getSeed() {
- byte[] seed = new byte[SEED_BYTES];
- try {
- DataInputStream in = new DataInputStream(
- new FileInputStream("/dev/urandom"));
- in.readFully(seed);
- in.close();
- } catch(IOException e) {
- throw new RuntimeException(e);
- }
- return seed;
- }
-}
diff --git a/briar-core/src/org/briarproject/db/DatabaseModule.java b/briar-core/src/org/briarproject/db/DatabaseModule.java
index 3457fc696..d8916a591 100644
--- a/briar-core/src/org/briarproject/db/DatabaseModule.java
+++ b/briar-core/src/org/briarproject/db/DatabaseModule.java
@@ -19,7 +19,7 @@ import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.lifecycle.ShutdownManager;
import org.briarproject.api.system.Clock;
import org.briarproject.api.system.FileUtils;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
diff --git a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
index 502418457..3ce4e4af5 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPluginFactory.java
@@ -7,7 +7,7 @@ import org.briarproject.api.plugins.duplex.DuplexPlugin;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
public class LanTcpPluginFactory implements DuplexPluginFactory {
diff --git a/briar-core/src/org/briarproject/reliability/ReliabilityLayerFactoryImpl.java b/briar-core/src/org/briarproject/reliability/ReliabilityLayerFactoryImpl.java
index a71e42672..0cb3716cb 100644
--- a/briar-core/src/org/briarproject/reliability/ReliabilityLayerFactoryImpl.java
+++ b/briar-core/src/org/briarproject/reliability/ReliabilityLayerFactoryImpl.java
@@ -9,7 +9,7 @@ import org.briarproject.api.reliability.ReliabilityLayer;
import org.briarproject.api.reliability.ReliabilityLayerFactory;
import org.briarproject.api.reliability.WriteHandler;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
diff --git a/briar-core/src/org/briarproject/system/LinuxSeedProvider.java b/briar-core/src/org/briarproject/system/LinuxSeedProvider.java
new file mode 100644
index 000000000..49645a776
--- /dev/null
+++ b/briar-core/src/org/briarproject/system/LinuxSeedProvider.java
@@ -0,0 +1,69 @@
+package org.briarproject.system;
+
+import static java.util.logging.Level.WARNING;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.briarproject.api.system.SeedProvider;
+
+class LinuxSeedProvider implements SeedProvider {
+
+ private static final Logger LOG =
+ Logger.getLogger(LinuxSeedProvider.class.getName());
+
+ private final String outputFile, inputFile;
+
+ LinuxSeedProvider() {
+ this("/dev/urandom", "/dev/urandom");
+ }
+
+ LinuxSeedProvider(String outputFile, String inputFile) {
+ this.outputFile = outputFile;
+ this.inputFile = inputFile;
+ }
+
+ public byte[] getSeed() {
+ byte[] seed = new byte[SEED_BYTES];
+ // Contribute whatever slightly unpredictable info we have to the pool
+ try {
+ DataOutputStream out = new DataOutputStream(
+ new FileOutputStream(outputFile));
+ writeToEntropyPool(out);
+ out.flush();
+ out.close();
+ } catch(IOException e) {
+ // On some devices /dev/urandom isn't writable - this isn't fatal
+ if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
+ }
+ // Read the seed from the pool
+ try {
+ DataInputStream in = new DataInputStream(
+ new FileInputStream(inputFile));
+ in.readFully(seed);
+ in.close();
+ } catch(IOException e) {
+ throw new RuntimeException(e);
+ }
+ return seed;
+ }
+
+ void writeToEntropyPool(DataOutputStream out) throws IOException {
+ out.writeLong(System.currentTimeMillis());
+ out.writeLong(System.nanoTime());
+ List ifaces =
+ Collections.list(NetworkInterface.getNetworkInterfaces());
+ for(NetworkInterface i : ifaces) {
+ List addrs = Collections.list(i.getInetAddresses());
+ for(InetAddress a : addrs) out.write(a.getAddress());
+ }
+ }
+}
diff --git a/briar-api/src/org/briarproject/api/system/SystemClock.java b/briar-core/src/org/briarproject/system/SystemClock.java
similarity index 77%
rename from briar-api/src/org/briarproject/api/system/SystemClock.java
rename to briar-core/src/org/briarproject/system/SystemClock.java
index bf8c14872..3117b0a50 100644
--- a/briar-api/src/org/briarproject/api/system/SystemClock.java
+++ b/briar-core/src/org/briarproject/system/SystemClock.java
@@ -1,4 +1,6 @@
-package org.briarproject.api.system;
+package org.briarproject.system;
+
+import org.briarproject.api.system.Clock;
/** Default clock implementation. */
public class SystemClock implements Clock {
diff --git a/briar-api/src/org/briarproject/api/system/SystemTimer.java b/briar-core/src/org/briarproject/system/SystemTimer.java
similarity index 88%
rename from briar-api/src/org/briarproject/api/system/SystemTimer.java
rename to briar-core/src/org/briarproject/system/SystemTimer.java
index bbdf59674..d1bd00735 100644
--- a/briar-api/src/org/briarproject/api/system/SystemTimer.java
+++ b/briar-core/src/org/briarproject/system/SystemTimer.java
@@ -1,7 +1,9 @@
-package org.briarproject.api.system;
+package org.briarproject.system;
import java.util.TimerTask;
+import org.briarproject.api.system.Timer;
+
/** Default timer implementation. */
public class SystemTimer implements Timer {
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
index ad744d766..8e4963f79 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
+++ b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPluginFactory.java
@@ -8,7 +8,7 @@ import org.briarproject.api.plugins.duplex.DuplexPlugin;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
public class BluetoothPluginFactory implements DuplexPluginFactory {
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java b/briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java
index 2dc837522..892f8f541 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java
+++ b/briar-desktop/src/org/briarproject/plugins/modem/ModemFactoryImpl.java
@@ -4,7 +4,7 @@ import java.util.concurrent.Executor;
import org.briarproject.api.reliability.ReliabilityLayerFactory;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
class ModemFactoryImpl implements ModemFactory {
diff --git a/briar-desktop/src/org/briarproject/system/DesktopOsModule.java b/briar-desktop/src/org/briarproject/system/DesktopOsModule.java
deleted file mode 100644
index 7b3c73dc2..000000000
--- a/briar-desktop/src/org/briarproject/system/DesktopOsModule.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.briarproject.system;
-
-import org.briarproject.api.system.FileUtils;
-
-import com.google.inject.AbstractModule;
-
-public class DesktopOsModule extends AbstractModule {
-
- @Override
- protected void configure() {
- bind(FileUtils.class).to(FileUtilsImpl.class);
- }
-}
diff --git a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java
new file mode 100644
index 000000000..5a3badb9f
--- /dev/null
+++ b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java
@@ -0,0 +1,27 @@
+package org.briarproject.system;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.briarproject.api.system.Clock;
+import org.briarproject.api.system.FileUtils;
+import org.briarproject.api.system.SeedProvider;
+import org.briarproject.api.system.Timer;
+import org.briarproject.util.OsUtils;
+
+import com.google.inject.AbstractModule;
+
+public class DesktopSystemModule extends AbstractModule {
+
+ protected void configure() {
+ bind(Clock.class).to(SystemClock.class);
+ bind(Timer.class).to(SystemTimer.class);
+ if(OsUtils.isLinux())
+ bind(SeedProvider.class).to(LinuxSeedProvider.class);
+ bind(FileUtils.class).toInstance(new FileUtils() {
+ public long getFreeSpace(File f) throws IOException {
+ return f.getFreeSpace();
+ }
+ });
+ }
+}
diff --git a/briar-desktop/src/org/briarproject/system/FileUtilsImpl.java b/briar-desktop/src/org/briarproject/system/FileUtilsImpl.java
deleted file mode 100644
index b22a6034f..000000000
--- a/briar-desktop/src/org/briarproject/system/FileUtilsImpl.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.briarproject.system;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.briarproject.api.system.FileUtils;
-
-class FileUtilsImpl implements FileUtils {
-
- public long getFreeSpace(File f) throws IOException {
- return f.getFreeSpace();
- }
-}
diff --git a/briar-tests/build.xml b/briar-tests/build.xml
index 01eca558d..06a023d91 100644
--- a/briar-tests/build.xml
+++ b/briar-tests/build.xml
@@ -123,6 +123,7 @@
+
diff --git a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
index 6676679b5..1fff6b50c 100644
--- a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
@@ -48,9 +48,7 @@ import org.briarproject.messaging.duplex.DuplexMessagingModule;
import org.briarproject.messaging.simplex.SimplexMessagingModule;
import org.briarproject.reliability.ReliabilityModule;
import org.briarproject.serial.SerialModule;
-import org.briarproject.system.SystemModule;
import org.briarproject.transport.TransportModule;
-
import org.junit.Test;
import com.google.inject.Guice;
@@ -79,8 +77,8 @@ public class ProtocolIntegrationTest extends BriarTestCase {
public ProtocolIntegrationTest() throws Exception {
Injector i = Guice.createInjector(new TestDatabaseModule(),
- new TestLifecycleModule(), new TestUiModule(),
- new SystemModule(), new CryptoModule(), new DatabaseModule(),
+ new TestLifecycleModule(), new TestSystemModule(),
+ new TestUiModule(), new CryptoModule(), new DatabaseModule(),
new MessagingModule(), new DuplexMessagingModule(),
new SimplexMessagingModule(), new ReliabilityModule(),
new SerialModule(), new TransportModule());
diff --git a/briar-tests/src/org/briarproject/TestSeedProvider.java b/briar-tests/src/org/briarproject/TestSeedProvider.java
index 6a6ef90d9..aefeeda5c 100644
--- a/briar-tests/src/org/briarproject/TestSeedProvider.java
+++ b/briar-tests/src/org/briarproject/TestSeedProvider.java
@@ -2,7 +2,7 @@ package org.briarproject;
import java.util.Random;
-import org.briarproject.api.crypto.SeedProvider;
+import org.briarproject.api.system.SeedProvider;
public class TestSeedProvider implements SeedProvider {
diff --git a/briar-tests/src/org/briarproject/TestSystemModule.java b/briar-tests/src/org/briarproject/TestSystemModule.java
new file mode 100644
index 000000000..1015deb9e
--- /dev/null
+++ b/briar-tests/src/org/briarproject/TestSystemModule.java
@@ -0,0 +1,18 @@
+package org.briarproject;
+
+import org.briarproject.api.system.Clock;
+import org.briarproject.api.system.SeedProvider;
+import org.briarproject.api.system.Timer;
+import org.briarproject.system.SystemClock;
+import org.briarproject.system.SystemTimer;
+
+import com.google.inject.AbstractModule;
+
+public class TestSystemModule extends AbstractModule {
+
+ protected void configure() {
+ bind(Clock.class).to(SystemClock.class);
+ bind(Timer.class).to(SystemTimer.class);
+ bind(SeedProvider.class).to(TestSeedProvider.class);
+ }
+}
diff --git a/briar-tests/src/org/briarproject/TestUtils.java b/briar-tests/src/org/briarproject/TestUtils.java
index de09fc35b..4c39dec2a 100644
--- a/briar-tests/src/org/briarproject/TestUtils.java
+++ b/briar-tests/src/org/briarproject/TestUtils.java
@@ -1,15 +1,12 @@
package org.briarproject;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.PrintStream;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
-import junit.framework.TestCase;
import org.briarproject.api.UniqueId;
public class TestUtils {
@@ -42,38 +39,12 @@ public class TestUtils {
testDir.getParentFile().delete(); // Delete if empty
}
- public static File getBuildDirectory() {
- File build = new File("build"); // Ant
- if(build.exists() && build.isDirectory()) return build;
- File bin = new File("bin"); // Eclipse
- if(bin.exists() && bin.isDirectory()) return bin;
- throw new RuntimeException("Could not find build directory");
- }
-
- public static File getFontDirectory() {
- File f = new File("i18n");
- if(f.exists() && f.isDirectory()) return f;
- f = new File("../i18n");
- if(f.exists() && f.isDirectory()) return f;
- throw new RuntimeException("Could not find font directory");
- }
-
public static byte[] getRandomId() {
byte[] b = new byte[UniqueId.LENGTH];
random.nextBytes(b);
return b;
}
- public static void readFully(InputStream in, byte[] b) throws IOException {
- int offset = 0;
- while(offset < b.length) {
- int read = in.read(b, offset, b.length - offset);
- if(read == -1) break;
- offset += read;
- }
- TestCase.assertEquals(b.length, offset);
- }
-
public static String createRandomString(int length) throws Exception {
StringBuilder s = new StringBuilder(length);
for(int i = 0; i < length; i++)
diff --git a/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java b/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java
index 1193e60d9..ae8860b68 100644
--- a/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java
+++ b/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java
@@ -6,7 +6,7 @@ import org.briarproject.BriarTestCase;
import org.briarproject.TestSeedProvider;
import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.SeedProvider;
+import org.briarproject.api.system.SeedProvider;
import org.junit.Test;
public class KeyAgreementTest extends BriarTestCase {
diff --git a/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java
index 2442aed79..28b35b54b 100644
--- a/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java
+++ b/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java
@@ -6,9 +6,9 @@ import java.util.concurrent.CountDownLatch;
import org.briarproject.BriarTestCase;
import org.briarproject.api.db.DbException;
-import org.briarproject.api.system.SystemTimer;
import org.briarproject.api.system.Timer;
import org.briarproject.db.DatabaseCleaner.Callback;
+import org.briarproject.system.SystemTimer;
import org.junit.Test;
diff --git a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
index 7f68c99e7..d531116c5 100644
--- a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
+++ b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
@@ -8,8 +8,8 @@ import java.util.Collections;
import org.briarproject.api.db.DatabaseComponent;
import org.briarproject.api.db.DbException;
import org.briarproject.api.lifecycle.ShutdownManager;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.db.DatabaseCleaner.Callback;
+import org.briarproject.system.SystemClock;
import org.jmock.Expectations;
import org.jmock.Mockery;
diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
index dc93ac988..77ee03405 100644
--- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
+++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
@@ -38,9 +38,9 @@ import org.briarproject.api.messaging.GroupId;
import org.briarproject.api.messaging.GroupStatus;
import org.briarproject.api.messaging.Message;
import org.briarproject.api.messaging.MessageId;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.api.transport.Endpoint;
import org.briarproject.api.transport.TemporarySecret;
+import org.briarproject.system.SystemClock;
import org.junit.After;
import org.junit.Before;
diff --git a/briar-tests/src/org/briarproject/messaging/ConstantsTest.java b/briar-tests/src/org/briarproject/messaging/ConstantsTest.java
index 2f457f690..52c40b056 100644
--- a/briar-tests/src/org/briarproject/messaging/ConstantsTest.java
+++ b/briar-tests/src/org/briarproject/messaging/ConstantsTest.java
@@ -19,6 +19,7 @@ import java.util.Random;
import org.briarproject.BriarTestCase;
import org.briarproject.TestDatabaseModule;
import org.briarproject.TestLifecycleModule;
+import org.briarproject.TestSystemModule;
import org.briarproject.TestUtils;
import org.briarproject.api.Author;
import org.briarproject.api.AuthorFactory;
@@ -45,9 +46,7 @@ import org.briarproject.db.DatabaseModule;
import org.briarproject.messaging.duplex.DuplexMessagingModule;
import org.briarproject.messaging.simplex.SimplexMessagingModule;
import org.briarproject.serial.SerialModule;
-import org.briarproject.system.SystemModule;
import org.briarproject.transport.TransportModule;
-
import org.junit.Test;
import com.google.inject.Guice;
@@ -63,7 +62,7 @@ public class ConstantsTest extends BriarTestCase {
public ConstantsTest() throws Exception {
Injector i = Guice.createInjector(new TestDatabaseModule(),
- new TestLifecycleModule(), new SystemModule(),
+ new TestLifecycleModule(), new TestSystemModule(),
new CryptoModule(), new DatabaseModule(), new MessagingModule(),
new DuplexMessagingModule(), new SimplexMessagingModule(),
new SerialModule(), new TransportModule());
diff --git a/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java b/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java
index f3b9d6c01..c01501c92 100644
--- a/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java
+++ b/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java
@@ -14,6 +14,7 @@ import java.util.concurrent.Executors;
import org.briarproject.BriarTestCase;
import org.briarproject.TestLifecycleModule;
+import org.briarproject.TestSystemModule;
import org.briarproject.TestUtils;
import org.briarproject.api.ContactId;
import org.briarproject.api.TransportId;
@@ -30,9 +31,7 @@ import org.briarproject.crypto.CryptoModule;
import org.briarproject.messaging.MessagingModule;
import org.briarproject.messaging.duplex.DuplexMessagingModule;
import org.briarproject.serial.SerialModule;
-import org.briarproject.system.SystemModule;
import org.briarproject.transport.TransportModule;
-
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Test;
@@ -68,7 +67,7 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase {
}
};
Injector i = Guice.createInjector(testModule,
- new TestLifecycleModule(), new SystemModule(),
+ new TestLifecycleModule(), new TestSystemModule(),
new CryptoModule(), new MessagingModule(),
new DuplexMessagingModule(), new SimplexMessagingModule(),
new SerialModule(), new TransportModule());
diff --git a/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java b/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java
index 1c522d458..9fa7f371b 100644
--- a/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java
@@ -12,6 +12,7 @@ import java.util.Random;
import org.briarproject.BriarTestCase;
import org.briarproject.TestDatabaseModule;
import org.briarproject.TestLifecycleModule;
+import org.briarproject.TestSystemModule;
import org.briarproject.TestUtils;
import org.briarproject.api.Author;
import org.briarproject.api.AuthorId;
@@ -42,9 +43,7 @@ import org.briarproject.messaging.MessagingModule;
import org.briarproject.messaging.duplex.DuplexMessagingModule;
import org.briarproject.plugins.ImmediateExecutor;
import org.briarproject.serial.SerialModule;
-import org.briarproject.system.SystemModule;
import org.briarproject.transport.TransportModule;
-
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -87,7 +86,7 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
private Injector createInjector(File dir) {
return Guice.createInjector(new TestDatabaseModule(dir),
- new TestLifecycleModule(), new SystemModule(),
+ new TestLifecycleModule(), new TestSystemModule(),
new CryptoModule(), new DatabaseModule(), new MessagingModule(),
new DuplexMessagingModule(), new SimplexMessagingModule(),
new SerialModule(), new TransportModule());
diff --git a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
index 78ddfb5e8..3d832c472 100644
--- a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
+++ b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
@@ -17,9 +17,9 @@ import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.api.transport.ConnectionDispatcher;
import org.briarproject.api.ui.UiCallback;
+import org.briarproject.system.SystemClock;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Test;
diff --git a/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java b/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java
index 28eef667e..3b86da8a1 100644
--- a/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java
+++ b/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java
@@ -10,8 +10,8 @@ import java.util.concurrent.Executors;
import org.briarproject.api.ContactId;
import org.briarproject.api.TransportConfig;
import org.briarproject.api.TransportProperties;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.plugins.DuplexClientTest;
+import org.briarproject.system.SystemClock;
// This is not a JUnit test - it has to be run manually while the server test
// is running on another machine
diff --git a/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothServerTest.java b/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothServerTest.java
index 99b77e3f2..1dfbf841d 100644
--- a/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothServerTest.java
+++ b/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothServerTest.java
@@ -8,8 +8,8 @@ import java.util.concurrent.Executors;
import org.briarproject.api.TransportConfig;
import org.briarproject.api.TransportProperties;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.plugins.DuplexServerTest;
+import org.briarproject.system.SystemClock;
// This is not a JUnit test - it has to be run manually while the client test
// is running on another machine
diff --git a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java
index 1c7c7b83a..9e9fb77d5 100644
--- a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java
+++ b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java
@@ -10,8 +10,8 @@ import org.briarproject.api.ContactId;
import org.briarproject.api.TransportConfig;
import org.briarproject.api.TransportProperties;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.plugins.DuplexClientTest;
+import org.briarproject.system.SystemClock;
// This is not a JUnit test - it has to be run manually while the server test
// is running on another machine
diff --git a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java
index 38ba8b6a4..832107d52 100644
--- a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java
+++ b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java
@@ -21,7 +21,7 @@ import org.briarproject.api.plugins.duplex.DuplexPlugin;
import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
+import org.briarproject.system.SystemClock;
import org.junit.Test;
diff --git a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpServerTest.java b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpServerTest.java
index d53f77b48..3506de7f7 100644
--- a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpServerTest.java
+++ b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpServerTest.java
@@ -8,8 +8,8 @@ import java.util.concurrent.Executors;
import org.briarproject.api.TransportConfig;
import org.briarproject.api.TransportProperties;
import org.briarproject.api.system.Clock;
-import org.briarproject.api.system.SystemClock;
import org.briarproject.plugins.DuplexServerTest;
+import org.briarproject.system.SystemClock;
// This is not a JUnit test - it has to be run manually while the client test
// is running on another machine
diff --git a/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java b/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java
new file mode 100644
index 000000000..e7ddccf35
--- /dev/null
+++ b/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java
@@ -0,0 +1,77 @@
+package org.briarproject.system;
+
+import static org.briarproject.api.system.SeedProvider.SEED_BYTES;
+import static org.junit.Assert.assertArrayEquals;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.HashSet;
+import java.util.Random;
+import java.util.Set;
+
+import org.briarproject.BriarTestCase;
+import org.briarproject.TestUtils;
+import org.briarproject.api.Bytes;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class LinuxSeedProviderTest extends BriarTestCase {
+
+ private final File testDir = TestUtils.getTestDirectory();
+
+ @Before
+ public void setUp() {
+ testDir.mkdirs();
+ }
+
+ @Test
+ public void testSeedAppearsSane() {
+ Set seeds = new HashSet();
+ LinuxSeedProvider p = new LinuxSeedProvider();
+ for(int i = 0; i < 1000; i++) {
+ byte[] seed = p.getSeed();
+ assertEquals(SEED_BYTES, seed.length);
+ assertTrue(seeds.add(new Bytes(seed)));
+ }
+ }
+
+ @Test
+ public void testEntropyIsWrittenToPool() throws Exception {
+ // Redirect the provider's entropy to a file
+ File urandom = new File(testDir, "urandom");
+ urandom.delete();
+ assertTrue(urandom.createNewFile());
+ assertEquals(0, urandom.length());
+ String path = urandom.getAbsolutePath();
+ LinuxSeedProvider p = new LinuxSeedProvider(path, "/dev/urandom");
+ p.getSeed();
+ // There should be 16 bytes from the clock, plus network interfaces
+ assertTrue(urandom.length() > 20);
+ }
+
+ @Test
+ public void testSeedIsReadFromPool() throws Exception {
+ // Generate a seed
+ byte[] seed = new byte[SEED_BYTES];
+ new Random().nextBytes(seed);
+ // Write the seed to a file
+ File urandom = new File(testDir, "urandom");
+ urandom.delete();
+ FileOutputStream out = new FileOutputStream(urandom);
+ out.write(seed);
+ out.flush();
+ out.close();
+ assertTrue(urandom.exists());
+ assertEquals(SEED_BYTES, urandom.length());
+ // Check that the provider reads the seed from the file
+ String path = urandom.getAbsolutePath();
+ LinuxSeedProvider p = new LinuxSeedProvider("/dev/urandom", path);
+ assertArrayEquals(seed, p.getSeed());
+ }
+
+ @After
+ public void tearDown() {
+ TestUtils.deleteTestDirectory(testDir);
+ }
+}
diff --git a/briar-tests/src/org/briarproject/transport/IncomingEncryptionLayerTest.java b/briar-tests/src/org/briarproject/transport/IncomingEncryptionLayerTest.java
index 631c33fac..cc1a38e1c 100644
--- a/briar-tests/src/org/briarproject/transport/IncomingEncryptionLayerTest.java
+++ b/briar-tests/src/org/briarproject/transport/IncomingEncryptionLayerTest.java
@@ -10,12 +10,12 @@ import java.io.ByteArrayInputStream;
import org.briarproject.BriarTestCase;
import org.briarproject.TestLifecycleModule;
+import org.briarproject.TestSystemModule;
import org.briarproject.api.FormatException;
import org.briarproject.api.crypto.AuthenticatedCipher;
import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.SecretKey;
import org.briarproject.crypto.CryptoModule;
-
import org.junit.Test;
import com.google.inject.Guice;
@@ -35,7 +35,7 @@ public class IncomingEncryptionLayerTest extends BriarTestCase {
public IncomingEncryptionLayerTest() {
Injector i = Guice.createInjector(new CryptoModule(),
- new TestLifecycleModule());
+ new TestLifecycleModule(), new TestSystemModule());
crypto = i.getInstance(CryptoComponent.class);
frameCipher = crypto.getFrameCipher();
frameKey = crypto.generateSecretKey();
diff --git a/briar-tests/src/org/briarproject/transport/OutgoingEncryptionLayerTest.java b/briar-tests/src/org/briarproject/transport/OutgoingEncryptionLayerTest.java
index bf9a12c1b..8a35ce732 100644
--- a/briar-tests/src/org/briarproject/transport/OutgoingEncryptionLayerTest.java
+++ b/briar-tests/src/org/briarproject/transport/OutgoingEncryptionLayerTest.java
@@ -11,11 +11,11 @@ import java.io.ByteArrayOutputStream;
import org.briarproject.BriarTestCase;
import org.briarproject.TestLifecycleModule;
+import org.briarproject.TestSystemModule;
import org.briarproject.api.crypto.AuthenticatedCipher;
import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.SecretKey;
import org.briarproject.crypto.CryptoModule;
-
import org.junit.Test;
import com.google.inject.Guice;
@@ -35,7 +35,7 @@ public class OutgoingEncryptionLayerTest extends BriarTestCase {
public OutgoingEncryptionLayerTest() {
Injector i = Guice.createInjector(new CryptoModule(),
- new TestLifecycleModule());
+ new TestLifecycleModule(), new TestSystemModule());
crypto = i.getInstance(CryptoComponent.class);
frameCipher = crypto.getFrameCipher();
tag = new byte[TAG_LENGTH];
diff --git a/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java b/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java
index 99f4ff452..857bfdb6e 100644
--- a/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java
@@ -13,6 +13,7 @@ import java.util.Random;
import org.briarproject.BriarTestCase;
import org.briarproject.TestLifecycleModule;
+import org.briarproject.TestSystemModule;
import org.briarproject.TestUtils;
import org.briarproject.api.ContactId;
import org.briarproject.api.TransportId;
@@ -23,7 +24,6 @@ import org.briarproject.api.transport.ConnectionContext;
import org.briarproject.api.transport.ConnectionWriter;
import org.briarproject.api.transport.ConnectionWriterFactory;
import org.briarproject.crypto.CryptoModule;
-
import org.junit.Test;
import com.google.inject.AbstractModule;
@@ -52,7 +52,7 @@ public class TransportIntegrationTest extends BriarTestCase {
}
};
Injector i = Guice.createInjector(testModule, new CryptoModule(),
- new TestLifecycleModule());
+ new TestLifecycleModule(), new TestSystemModule());
crypto = i.getInstance(CryptoComponent.class);
connectionWriterFactory = i.getInstance(ConnectionWriterFactory.class);
contactId = new ContactId(234);