diff --git a/briar-android-tests/src/test/java/org/briarproject/sync/ConstantsTest.java b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java
similarity index 64%
rename from briar-android-tests/src/test/java/org/briarproject/sync/ConstantsTest.java
rename to briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java
index 426a38945f0e4df713a6b2e8e29e6e30ae146412..01157a3e8079c92b886f49d7abd83e01383b73ed 100644
--- a/briar-android-tests/src/test/java/org/briarproject/sync/ConstantsTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTest.java
@@ -1,12 +1,8 @@
-package org.briarproject.sync;
+package org.briarproject;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
 import org.briarproject.api.UniqueId;
 import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.crypto.PrivateKey;
-import org.briarproject.api.crypto.Signature;
 import org.briarproject.api.forum.ForumConstants;
 import org.briarproject.api.forum.ForumPost;
 import org.briarproject.api.forum.ForumPostFactory;
@@ -15,25 +11,21 @@ import org.briarproject.api.identity.AuthorFactory;
 import org.briarproject.api.messaging.MessagingConstants;
 import org.briarproject.api.messaging.PrivateMessage;
 import org.briarproject.api.messaging.PrivateMessageFactory;
+import org.briarproject.api.sync.GroupId;
+import org.briarproject.api.sync.MessageId;
+import org.junit.Test;
+
+import javax.inject.Inject;
+
 import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
 import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
 import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
 import static org.junit.Assert.assertTrue;
 
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.junit.Test;
+public class MessageSizeIntegrationTest extends BriarTestCase {
 
-import java.util.Random;
-
-import javax.inject.Inject;
-
-public class ConstantsTest extends BriarTestCase {
-
-	// TODO: Break this up into tests that are relevant for each package
 	@Inject
 	CryptoComponent crypto;
 	@Inject
@@ -43,52 +35,19 @@ public class ConstantsTest extends BriarTestCase {
 	@Inject
 	ForumPostFactory forumPostFactory;
 
-	private final ConstantsComponent component;
-
-	public ConstantsTest() throws Exception {
-
-		component = DaggerConstantsComponent.builder().build();
+	public MessageSizeIntegrationTest() throws Exception {
+		MessageSizeIntegrationTestComponent component =
+				DaggerMessageSizeIntegrationTestComponent.builder().build();
 		component.inject(this);
 	}
 
-	@Test
-	public void testAgreementPublicKeys() throws Exception {
-		// Generate 10 agreement key pairs
-		for (int i = 0; i < 10; i++) {
-			KeyPair keyPair = crypto.generateSignatureKeyPair();
-			// Check the length of the public key
-			byte[] publicKey = keyPair.getPublic().getEncoded();
-			assertTrue(publicKey.length <= MAX_PUBLIC_KEY_LENGTH);
-		}
-	}
-
-	@Test
-	public void testSignaturePublicKeys() throws Exception {
-		Random random = new Random();
-		Signature sig = crypto.getSignature();
-		// Generate 10 signature key pairs
-		for (int i = 0; i < 10; i++) {
-			KeyPair keyPair = crypto.generateSignatureKeyPair();
-			// Check the length of the public key
-			byte[] publicKey = keyPair.getPublic().getEncoded();
-			assertTrue(publicKey.length <= MAX_PUBLIC_KEY_LENGTH);
-			// Sign some random data and check the length of the signature
-			byte[] toBeSigned = new byte[1234];
-			random.nextBytes(toBeSigned);
-			sig.initSign(keyPair.getPrivate());
-			sig.update(toBeSigned);
-			byte[] signature = sig.sign();
-			assertTrue(signature.length <= MAX_SIGNATURE_LENGTH);
-		}
-	}
-
 	@Test
 	public void testPrivateMessageFitsIntoPacket() throws Exception {
 		// Create a maximum-length private message
 		GroupId groupId = new GroupId(TestUtils.getRandomId());
 		long timestamp = Long.MAX_VALUE;
 		MessageId parent = new MessageId(TestUtils.getRandomId());
-		String contentType = TestUtils.createRandomString(
+		String contentType = TestUtils.getRandomString(
 				MessagingConstants.MAX_CONTENT_TYPE_LENGTH);
 		byte[] body = new byte[MAX_PRIVATE_MESSAGE_BODY_LENGTH];
 		PrivateMessage message = privateMessageFactory.createPrivateMessage(
@@ -104,7 +63,7 @@ public class ConstantsTest extends BriarTestCase {
 	@Test
 	public void testForumPostFitsIntoPacket() throws Exception {
 		// Create a maximum-length author
-		String authorName = TestUtils.createRandomString(
+		String authorName = TestUtils.getRandomString(
 				MAX_AUTHOR_NAME_LENGTH);
 		byte[] authorPublic = new byte[MAX_PUBLIC_KEY_LENGTH];
 		Author author = authorFactory.createAuthor(authorName, authorPublic);
@@ -112,7 +71,7 @@ public class ConstantsTest extends BriarTestCase {
 		GroupId groupId = new GroupId(TestUtils.getRandomId());
 		long timestamp = Long.MAX_VALUE;
 		MessageId parent = new MessageId(TestUtils.getRandomId());
-		String contentType = TestUtils.createRandomString(
+		String contentType = TestUtils.getRandomString(
 				ForumConstants.MAX_CONTENT_TYPE_LENGTH);
 		byte[] body = new byte[MAX_FORUM_POST_BODY_LENGTH];
 		PrivateKey privateKey = crypto.generateSignatureKeyPair().getPrivate();
diff --git a/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ec86f7c7f6976debb7e07b992714a888fe9f7d0
--- /dev/null
+++ b/briar-android-tests/src/test/java/org/briarproject/MessageSizeIntegrationTestComponent.java
@@ -0,0 +1,34 @@
+package org.briarproject;
+
+import org.briarproject.clients.ClientsModule;
+import org.briarproject.crypto.CryptoModule;
+import org.briarproject.data.DataModule;
+import org.briarproject.db.DatabaseModule;
+import org.briarproject.event.EventModule;
+import org.briarproject.forum.ForumModule;
+import org.briarproject.identity.IdentityModule;
+import org.briarproject.messaging.MessagingModule;
+import org.briarproject.sync.SyncModule;
+
+import javax.inject.Singleton;
+
+import dagger.Component;
+
+@Singleton
+@Component(modules = {
+		TestDatabaseModule.class,
+		TestLifecycleModule.class,
+		TestSystemModule.class,
+		ClientsModule.class,
+		CryptoModule.class,
+		DataModule.class,
+		DatabaseModule.class,
+		EventModule.class,
+		ForumModule.class,
+		IdentityModule.class,
+		MessagingModule.class,
+		SyncModule.class
+})
+public interface MessageSizeIntegrationTestComponent {
+	void inject(MessageSizeIntegrationTest testCase);
+}
diff --git a/briar-android-tests/src/test/java/org/briarproject/sync/SimplexMessagingIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java
similarity index 81%
rename from briar-android-tests/src/test/java/org/briarproject/sync/SimplexMessagingIntegrationTest.java
rename to briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java
index 01f615511151b54caac2c6770873708ed38f6208..8a2d43e2c490483d1c7053ffb610b5241b60a97f 100644
--- a/briar-android-tests/src/test/java/org/briarproject/sync/SimplexMessagingIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTest.java
@@ -1,15 +1,9 @@
-package org.briarproject.sync;
+package org.briarproject;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestUtils;
 import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.contact.ContactManager;
 import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
 import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
 import org.briarproject.api.identity.Author;
@@ -21,11 +15,8 @@ import org.briarproject.api.messaging.MessagingManager;
 import org.briarproject.api.messaging.PrivateMessage;
 import org.briarproject.api.messaging.PrivateMessageFactory;
 import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.PacketReader;
-import org.briarproject.api.sync.PacketReaderFactory;
-import org.briarproject.api.sync.PacketWriter;
-import org.briarproject.api.sync.PacketWriterFactory;
 import org.briarproject.api.sync.SyncSession;
+import org.briarproject.api.sync.SyncSessionFactory;
 import org.briarproject.api.transport.KeyManager;
 import org.briarproject.api.transport.StreamContext;
 import org.briarproject.api.transport.StreamReaderFactory;
@@ -54,19 +45,19 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
 	private final File testDir = TestUtils.getTestDirectory();
 	private final File aliceDir = new File(testDir, "alice");
 	private final File bobDir = new File(testDir, "bob");
-	private final SecretKey master = TestUtils.createSecretKey();
+	private final SecretKey master = TestUtils.getSecretKey();
 	private final long timestamp = System.currentTimeMillis();
 	private final AuthorId aliceId = new AuthorId(TestUtils.getRandomId());
 	private final AuthorId bobId = new AuthorId(TestUtils.getRandomId());
 
-	private SimplexMessagingComponent alice, bob;
+	private SimplexMessagingIntegrationTestComponent alice, bob;
 
 	@Before
 	public void setUp() {
 		assertTrue(testDir.mkdirs());
-		alice = DaggerSimplexMessagingComponent.builder()
+		alice = DaggerSimplexMessagingIntegrationTestComponent.builder()
 				.testDatabaseModule(new TestDatabaseModule(aliceDir)).build();
-		bob = DaggerSimplexMessagingComponent.builder()
+		bob = DaggerSimplexMessagingIntegrationTestComponent.builder()
 				.testDatabaseModule(new TestDatabaseModule(bobDir)).build();
 	}
 
@@ -78,18 +69,15 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
 	private byte[] write() throws Exception {
 		// Instantiate Alice's services
 		LifecycleManager lifecycleManager = alice.getLifecycleManager();
-		DatabaseComponent db = alice.getDatabaseComponent();
 		IdentityManager identityManager = alice.getIdentityManager();
 		ContactManager contactManager = alice.getContactManager();
 		MessagingManager messagingManager = alice.getMessagingManager();
 		KeyManager keyManager = alice.getKeyManager();
 		PrivateMessageFactory privateMessageFactory =
 				alice.getPrivateMessageFactory();
-		PacketWriterFactory packetWriterFactory =
-				alice.getPacketWriterFactory();
-		EventBus eventBus = alice.getEventBus();
 		StreamWriterFactory streamWriterFactory =
 				alice.getStreamWriterFactory();
+		SyncSessionFactory syncSessionFactory = alice.getSyncSessionFactory();
 
 		// Start the lifecycle manager
 		lifecycleManager.startServices();
@@ -119,11 +107,8 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
 		OutputStream streamWriter = streamWriterFactory.createStreamWriter(
 				out, ctx);
 		// Create an outgoing sync session
-		PacketWriter packetWriter = packetWriterFactory.createPacketWriter(
-				streamWriter);
-		SyncSession session = new SimplexOutgoingSession(db,
-				new ImmediateExecutor(), eventBus, contactId, MAX_LATENCY,
-				packetWriter);
+		SyncSession session = syncSessionFactory.createSimplexOutgoingSession(
+				contactId, MAX_LATENCY, streamWriter);
 		// Write whatever needs to be written
 		session.run();
 		streamWriter.close();
@@ -139,13 +124,11 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
 	private void read(byte[] stream) throws Exception {
 		// Instantiate Bob's services
 		LifecycleManager lifecycleManager = bob.getLifecycleManager();
-		DatabaseComponent db = bob.getDatabaseComponent();
 		IdentityManager identityManager = bob.getIdentityManager();
 		ContactManager contactManager = bob.getContactManager();
 		KeyManager keyManager = bob.getKeyManager();
 		StreamReaderFactory streamReaderFactory = bob.getStreamReaderFactory();
-		PacketReaderFactory packetReaderFactory = bob.getPacketReaderFactory();
-		EventBus eventBus = bob.getEventBus();
+		SyncSessionFactory syncSessionFactory = bob.getSyncSessionFactory();
 		// Bob needs a MessagingManager even though we're not using it directly
 		bob.getMessagingManager();
 
@@ -176,10 +159,8 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
 		InputStream streamReader = streamReaderFactory.createStreamReader(
 				in, ctx);
 		// Create an incoming sync session
-		PacketReader packetReader = packetReaderFactory.createPacketReader(
-				streamReader);
-		SyncSession session = new IncomingSession(db, new ImmediateExecutor(),
-				eventBus, contactId, packetReader);
+		SyncSession session = syncSessionFactory.createIncomingSession(
+				contactId, streamReader);
 		// No messages should have been added yet
 		assertFalse(listener.messageAdded);
 		// Read whatever needs to be read
diff --git a/briar-android-tests/src/test/java/org/briarproject/sync/SimplexMessagingComponent.java b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java
similarity index 63%
rename from briar-android-tests/src/test/java/org/briarproject/sync/SimplexMessagingComponent.java
rename to briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java
index ea5ae968972378d332fd4f1b062ac72f8e277cff..28480fb1a13c1a0ff44b70cf5d436b33f66a80d3 100644
--- a/briar-android-tests/src/test/java/org/briarproject/sync/SimplexMessagingComponent.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SimplexMessagingIntegrationTestComponent.java
@@ -1,17 +1,12 @@
-package org.briarproject.sync;
+package org.briarproject;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginsModule;
-import org.briarproject.TestSystemModule;
 import org.briarproject.api.contact.ContactManager;
-import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.event.EventBus;
 import org.briarproject.api.identity.IdentityManager;
 import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.messaging.MessagingManager;
 import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.sync.PacketReaderFactory;
-import org.briarproject.api.sync.PacketWriterFactory;
+import org.briarproject.api.sync.SyncSessionFactory;
 import org.briarproject.api.transport.KeyManager;
 import org.briarproject.api.transport.StreamReaderFactory;
 import org.briarproject.api.transport.StreamWriterFactory;
@@ -25,6 +20,7 @@ import org.briarproject.identity.IdentityModule;
 import org.briarproject.lifecycle.LifecycleModule;
 import org.briarproject.messaging.MessagingModule;
 import org.briarproject.plugins.PluginsModule;
+import org.briarproject.sync.SyncModule;
 import org.briarproject.transport.TransportModule;
 
 import javax.inject.Singleton;
@@ -32,20 +28,29 @@ import javax.inject.Singleton;
 import dagger.Component;
 
 @Singleton
-@Component(modules = {TestDatabaseModule.class, TestPluginsModule.class,
-		TestSystemModule.class, LifecycleModule.class, ContactModule.class,
-		CryptoModule.class, DatabaseModule.class, EventModule.class,
-		SyncModule.class, DataModule.class, TransportModule.class,
-		IdentityModule.class, MessagingModule.class, ClientsModule.class,
-		PluginsModule.class})
-public interface SimplexMessagingComponent {
+@Component(modules = {
+		TestDatabaseModule.class,
+		TestPluginsModule.class,
+		TestSystemModule.class,
+		ClientsModule.class,
+		ContactModule.class,
+		CryptoModule.class,
+		DataModule.class,
+		DatabaseModule.class,
+		EventModule.class,
+		IdentityModule.class,
+		LifecycleModule.class,
+		MessagingModule.class,
+		PluginsModule.class,
+		SyncModule.class,
+		TransportModule.class
+})
+public interface SimplexMessagingIntegrationTestComponent {
 
 	void inject(SimplexMessagingIntegrationTest testCase);
 
 	LifecycleManager getLifecycleManager();
 
-	DatabaseComponent getDatabaseComponent();
-
 	IdentityManager getIdentityManager();
 
 	ContactManager getContactManager();
@@ -56,13 +61,11 @@ public interface SimplexMessagingComponent {
 
 	PrivateMessageFactory getPrivateMessageFactory();
 
-	PacketWriterFactory getPacketWriterFactory();
-
 	EventBus getEventBus();
 
 	StreamWriterFactory getStreamWriterFactory();
 
 	StreamReaderFactory getStreamReaderFactory();
 
-	PacketReaderFactory getPacketReaderFactory();
+	SyncSessionFactory getSyncSessionFactory();
 }
diff --git a/briar-android-tests/src/test/java/org/briarproject/protocol/ProtocolIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java
similarity index 78%
rename from briar-android-tests/src/test/java/org/briarproject/protocol/ProtocolIntegrationTest.java
rename to briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java
index cc36c199dd9b6f47aaf1e355cfae81a3821b1300..f47ce400b0cc3452de1391fc26b7725c16cc5384 100644
--- a/briar-android-tests/src/test/java/org/briarproject/protocol/ProtocolIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTest.java
@@ -1,9 +1,8 @@
-package org.briarproject.protocol;
+package org.briarproject;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.sync.Ack;
 import org.briarproject.api.sync.ClientId;
@@ -23,13 +22,6 @@ import org.briarproject.api.transport.StreamReaderFactory;
 import org.briarproject.api.transport.StreamWriterFactory;
 import org.junit.Test;
 
-import static org.briarproject.api.sync.SyncConstants.MAX_GROUP_DESCRIPTOR_LENGTH;
-import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
@@ -39,8 +31,19 @@ import java.util.Collection;
 
 import javax.inject.Inject;
 
-public class ProtocolIntegrationTest extends BriarTestCase {
+import static org.briarproject.api.sync.SyncConstants.MAX_GROUP_DESCRIPTOR_LENGTH;
+import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class SyncIntegrationTest extends BriarTestCase {
 
+	@Inject
+	GroupFactory groupFactory;
+	@Inject
+	MessageFactory messageFactory;
 	@Inject
 	StreamReaderFactory streamReaderFactory;
 	@Inject
@@ -49,37 +52,37 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 	PacketReaderFactory packetReaderFactory;
 	@Inject
 	PacketWriterFactory packetWriterFactory;
+	@Inject
+	CryptoComponent crypto;
 
 	private final ContactId contactId;
 	private final TransportId transportId;
 	private final SecretKey tagKey, headerKey;
+	private final long streamNumber;
 	private final Message message, message1;
 	private final Collection<MessageId> messageIds;
-	private final ProtocolTestComponent component;
 
-	public ProtocolIntegrationTest() throws Exception {
+	public SyncIntegrationTest() throws Exception {
 
-		component = DaggerProtocolTestComponent.builder().build();
+		SyncIntegrationTestComponent component =
+				DaggerSyncIntegrationTestComponent.builder().build();
 		component.inject(this);
 
 		contactId = new ContactId(234);
 		transportId = new TransportId("id");
 		// Create the transport keys
-		tagKey = TestUtils.createSecretKey();
-		headerKey = TestUtils.createSecretKey();
+		tagKey = TestUtils.getSecretKey();
+		headerKey = TestUtils.getSecretKey();
+		streamNumber = 123;
 		// Create a group
-		GroupFactory groupFactory = component.getGroupFactory();
 		ClientId clientId = new ClientId(TestUtils.getRandomId());
 		byte[] descriptor = new byte[MAX_GROUP_DESCRIPTOR_LENGTH];
 		Group group = groupFactory.createGroup(clientId, descriptor);
 		// Add two messages to the group
-		MessageFactory messageFactory = component.getMessageFactory();
 		long timestamp = System.currentTimeMillis();
-		String messageBody = "Hello world";
-		message = messageFactory.createMessage(group.getId(), timestamp,
-				messageBody.getBytes("UTF-8"));
-		message1 = messageFactory.createMessage(group.getId(), timestamp,
-				messageBody.getBytes("UTF-8"));
+		byte[] body = "Hello world".getBytes("UTF-8");
+		message = messageFactory.createMessage(group.getId(), timestamp, body);
+		message1 = messageFactory.createMessage(group.getId(), timestamp, body);
 		messageIds = Arrays.asList(message.getId(), message1.getId());
 	}
 
@@ -91,19 +94,16 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 	private byte[] write() throws Exception {
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		StreamContext ctx = new StreamContext(contactId, transportId, tagKey,
-				headerKey, 0);
-		OutputStream streamWriter =
-				streamWriterFactory.createStreamWriter(out, ctx);
+				headerKey, streamNumber);
+		OutputStream streamWriter = streamWriterFactory.createStreamWriter(out,
+				ctx);
 		PacketWriter packetWriter = packetWriterFactory.createPacketWriter(
 				streamWriter);
 
 		packetWriter.writeAck(new Ack(messageIds));
-
 		packetWriter.writeMessage(message.getRaw());
 		packetWriter.writeMessage(message1.getRaw());
-
 		packetWriter.writeOffer(new Offer(messageIds));
-
 		packetWriter.writeRequest(new Request(messageIds));
 
 		streamWriter.flush();
@@ -111,14 +111,21 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 	}
 
 	private void read(byte[] connectionData) throws Exception {
+		// Calculate the expected tag
+		byte[] expectedTag = new byte[TAG_LENGTH];
+		crypto.encodeTag(expectedTag, tagKey, streamNumber);
+
+		// Read the tag
 		InputStream in = new ByteArrayInputStream(connectionData);
 		byte[] tag = new byte[TAG_LENGTH];
 		assertEquals(TAG_LENGTH, in.read(tag, 0, TAG_LENGTH));
-		// FIXME: Check that the expected tag was received
+		assertArrayEquals(expectedTag, tag);
+
+		// Create the readers
 		StreamContext ctx = new StreamContext(contactId, transportId, tagKey,
 				headerKey, 0);
-		InputStream streamReader =
-				streamReaderFactory.createStreamReader(in, ctx);
+		InputStream streamReader = streamReaderFactory.createStreamReader(in,
+				ctx);
 		PacketReader packetReader = packetReaderFactory.createPacketReader(
 				streamReader);
 
@@ -127,7 +134,7 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 		Ack a = packetReader.readAck();
 		assertEquals(messageIds, a.getMessageIds());
 
-		// Read and verify the messages
+		// Read the messages
 		assertTrue(packetReader.hasMessage());
 		Message m = packetReader.readMessage();
 		checkMessageEquality(message, m);
@@ -150,9 +157,11 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 	}
 
 	private void checkMessageEquality(Message m1, Message m2) {
-		assertEquals(m1.getId(), m2.getId());
+		assertArrayEquals(m1.getId().getBytes(), m2.getId().getBytes());
+		assertArrayEquals(m1.getGroupId().getBytes(),
+				m2.getGroupId().getBytes());
 		assertEquals(m1.getTimestamp(), m2.getTimestamp());
+		assertEquals(m1.getLength(), m2.getLength());
 		assertArrayEquals(m1.getRaw(), m2.getRaw());
 	}
-
 }
diff --git a/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5d55b93574c37f24d11e6a6cb5743adae28a1ca
--- /dev/null
+++ b/briar-android-tests/src/test/java/org/briarproject/SyncIntegrationTestComponent.java
@@ -0,0 +1,20 @@
+package org.briarproject;
+
+import org.briarproject.crypto.CryptoModule;
+import org.briarproject.sync.SyncModule;
+import org.briarproject.transport.TransportModule;
+
+import javax.inject.Singleton;
+
+import dagger.Component;
+
+@Singleton
+@Component(modules = {
+		TestSystemModule.class,
+		CryptoModule.class,
+		SyncModule.class,
+		TransportModule.class
+})
+public interface SyncIntegrationTestComponent {
+	void inject(SyncIntegrationTest testCase);
+}
diff --git a/briar-android-tests/src/test/java/org/briarproject/protocol/ProtocolTestComponent.java b/briar-android-tests/src/test/java/org/briarproject/protocol/ProtocolTestComponent.java
deleted file mode 100644
index 59f58e0cc18f57f99c1bbbe9128c9a2d032a0912..0000000000000000000000000000000000000000
--- a/briar-android-tests/src/test/java/org/briarproject/protocol/ProtocolTestComponent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.briarproject.protocol;
-
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestSystemModule;
-import org.briarproject.api.sync.GroupFactory;
-import org.briarproject.api.sync.MessageFactory;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.data.DataModule;
-import org.briarproject.db.DatabaseModule;
-import org.briarproject.event.EventModule;
-import org.briarproject.sync.SyncModule;
-import org.briarproject.transport.TransportModule;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-@Singleton
-@Component(modules = {TestDatabaseModule.class, TestSystemModule.class,
-		CryptoModule.class, DatabaseModule.class, EventModule.class,
-		SyncModule.class, DataModule.class, TransportModule.class})
-public interface ProtocolTestComponent {
-	void inject(ProtocolIntegrationTest testCase);
-	GroupFactory getGroupFactory();
-	MessageFactory getMessageFactory();
-}
diff --git a/briar-android-tests/src/test/java/org/briarproject/sync/ConstantsComponent.java b/briar-android-tests/src/test/java/org/briarproject/sync/ConstantsComponent.java
deleted file mode 100644
index 6e8b2c7829fbe03fc476dc443a7a77b97a05838b..0000000000000000000000000000000000000000
--- a/briar-android-tests/src/test/java/org/briarproject/sync/ConstantsComponent.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.briarproject.sync;
-
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestLifecycleModule;
-import org.briarproject.TestSystemModule;
-import org.briarproject.clients.ClientsModule;
-import org.briarproject.contact.ContactModule;
-import org.briarproject.crypto.CryptoModule;
-import org.briarproject.data.DataModule;
-import org.briarproject.db.DatabaseModule;
-import org.briarproject.event.EventModule;
-import org.briarproject.forum.ForumModule;
-import org.briarproject.identity.IdentityModule;
-import org.briarproject.messaging.MessagingModule;
-import org.briarproject.transport.TransportModule;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-@Singleton
-@Component(modules = {TestDatabaseModule.class, TestLifecycleModule.class,
-		TestSystemModule.class, ContactModule.class, CryptoModule.class,
-		DatabaseModule.class, EventModule.class, SyncModule.class,
-		DataModule.class, TransportModule.class, ForumModule.class,
-		IdentityModule.class, MessagingModule.class, ClientsModule.class})
-public interface ConstantsComponent {
-	void inject(ConstantsTest testCase);
-}
diff --git a/briar-core/src/org/briarproject/CoreEagerSingletons.java b/briar-core/src/org/briarproject/CoreEagerSingletons.java
index 275b938a6f7f7d995ec312ea120527bd4d7cda19..0823bccbf24c07f0daedc8b77650a332dc4fb7a1 100644
--- a/briar-core/src/org/briarproject/CoreEagerSingletons.java
+++ b/briar-core/src/org/briarproject/CoreEagerSingletons.java
@@ -2,7 +2,7 @@ package org.briarproject;
 
 import org.briarproject.contact.ContactModule;
 import org.briarproject.crypto.CryptoModule;
-import org.briarproject.db.DatabaseModule;
+import org.briarproject.db.DatabaseExecutorModule;
 import org.briarproject.forum.ForumModule;
 import org.briarproject.introduction.IntroductionModule;
 import org.briarproject.lifecycle.LifecycleModule;
@@ -13,16 +13,26 @@ import org.briarproject.sync.SyncModule;
 import org.briarproject.transport.TransportModule;
 
 public interface CoreEagerSingletons {
+
 	void inject(ContactModule.EagerSingletons init);
+
 	void inject(CryptoModule.EagerSingletons init);
-	void inject(DatabaseModule.EagerSingletons init);
+
+	void inject(DatabaseExecutorModule.EagerSingletons init);
+
 	void inject(ForumModule.EagerSingletons init);
+
 	void inject(IntroductionModule.EagerSingletons init);
+
 	void inject(LifecycleModule.EagerSingletons init);
+
 	void inject(MessagingModule.EagerSingletons init);
+
 	void inject(PluginsModule.EagerSingletons init);
+
 	void inject(PropertiesModule.EagerSingletons init);
+
 	void inject(SyncModule.EagerSingletons init);
-	void inject(TransportModule.EagerSingletons init);
 
+	void inject(TransportModule.EagerSingletons init);
 }
diff --git a/briar-core/src/org/briarproject/CoreModule.java b/briar-core/src/org/briarproject/CoreModule.java
index d18e468f6ca31934a0565f50799c90e477a9c225..14f5e4a55cf331d3e83cfa13d0d90363abd7b921 100644
--- a/briar-core/src/org/briarproject/CoreModule.java
+++ b/briar-core/src/org/briarproject/CoreModule.java
@@ -4,6 +4,7 @@ import org.briarproject.clients.ClientsModule;
 import org.briarproject.contact.ContactModule;
 import org.briarproject.crypto.CryptoModule;
 import org.briarproject.data.DataModule;
+import org.briarproject.db.DatabaseExecutorModule;
 import org.briarproject.db.DatabaseModule;
 import org.briarproject.event.EventModule;
 import org.briarproject.forum.ForumModule;
@@ -23,20 +24,35 @@ import org.briarproject.transport.TransportModule;
 
 import dagger.Module;
 
-@Module(includes = {DatabaseModule.class,
-		CryptoModule.class, LifecycleModule.class, ReliabilityModule.class,
-		MessagingModule.class, InvitationModule.class, KeyAgreementModule.class,
+@Module(includes = {
+		ClientsModule.class,
+		ContactModule.class,
+		CryptoModule.class,
+		DataModule.class,
+		DatabaseModule.class,
+		DatabaseExecutorModule.class,
+		EventModule.class,
 		ForumModule.class,
-		IdentityModule.class, EventModule.class, DataModule.class,
-		ContactModule.class, PropertiesModule.class, TransportModule.class,
-		SyncModule.class, SettingsModule.class, ClientsModule.class,
-		SystemModule.class, PluginsModule.class, IntroductionModule.class})
+		IdentityModule.class,
+		IntroductionModule.class,
+		InvitationModule.class,
+		KeyAgreementModule.class,
+		LifecycleModule.class,
+		MessagingModule.class,
+		PluginsModule.class,
+		PropertiesModule.class,
+		ReliabilityModule.class,
+		SettingsModule.class,
+		SyncModule.class,
+		SystemModule.class,
+		TransportModule.class
+})
 public class CoreModule {
 
 	public static void initEagerSingletons(CoreEagerSingletons c) {
 		c.inject(new ContactModule.EagerSingletons());
 		c.inject(new CryptoModule.EagerSingletons());
-		c.inject(new DatabaseModule.EagerSingletons());
+		c.inject(new DatabaseExecutorModule.EagerSingletons());
 		c.inject(new ForumModule.EagerSingletons());
 		c.inject(new LifecycleModule.EagerSingletons());
 		c.inject(new MessagingModule.EagerSingletons());
diff --git a/briar-core/src/org/briarproject/db/DatabaseExecutorModule.java b/briar-core/src/org/briarproject/db/DatabaseExecutorModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0a3bae872f5c76e2627433fa974b546bf817e48
--- /dev/null
+++ b/briar-core/src/org/briarproject/db/DatabaseExecutorModule.java
@@ -0,0 +1,59 @@
+package org.briarproject.db;
+
+import org.briarproject.api.db.DatabaseExecutor;
+import org.briarproject.api.lifecycle.LifecycleManager;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+@Module
+public class DatabaseExecutorModule {
+
+	public static class EagerSingletons {
+		@Inject
+		@DatabaseExecutor
+		ExecutorService executorService;
+	}
+
+	private final ExecutorService databaseExecutor;
+
+	public DatabaseExecutorModule() {
+		// Use an unbounded queue
+		BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
+		// Discard tasks that are submitted during shutdown
+		RejectedExecutionHandler policy =
+				new ThreadPoolExecutor.DiscardPolicy();
+		// Use a single thread and keep it in the pool for 60 secs
+		databaseExecutor = new ThreadPoolExecutor(0, 1, 60, SECONDS, queue,
+				policy);
+	}
+
+	@Provides
+	@Singleton
+	@DatabaseExecutor
+	ExecutorService provideDatabaseExecutorService(
+			LifecycleManager lifecycleManager) {
+		lifecycleManager.registerForShutdown(databaseExecutor);
+		return databaseExecutor;
+	}
+
+	@Provides
+	@Singleton
+	@DatabaseExecutor
+	Executor provideDatabaseExecutor(
+			@DatabaseExecutor ExecutorService dbExecutor) {
+		return dbExecutor;
+	}
+}
diff --git a/briar-core/src/org/briarproject/db/DatabaseModule.java b/briar-core/src/org/briarproject/db/DatabaseModule.java
index 7f590ddd521821f759fff466804e2e6bb6b0e691..d7a4b123eda653da54ecf781813087a9fb9ef1e8 100644
--- a/briar-core/src/org/briarproject/db/DatabaseModule.java
+++ b/briar-core/src/org/briarproject/db/DatabaseModule.java
@@ -2,50 +2,21 @@ package org.briarproject.db;
 
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.db.DatabaseExecutor;
 import org.briarproject.api.event.EventBus;
-import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.lifecycle.ShutdownManager;
 import org.briarproject.api.system.Clock;
 
 import java.security.SecureRandom;
 import java.sql.Connection;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.RejectedExecutionHandler;
-import java.util.concurrent.ThreadPoolExecutor;
 
-import javax.inject.Inject;
 import javax.inject.Singleton;
 
 import dagger.Module;
 import dagger.Provides;
 
-import static java.util.concurrent.TimeUnit.SECONDS;
-
 @Module
 public class DatabaseModule {
 
-	public static class EagerSingletons {
-		@Inject
-		@DatabaseExecutor ExecutorService executorService;
-	}
-
-	private final ExecutorService databaseExecutor;
-
-	public DatabaseModule() {
-		// Use an unbounded queue
-		BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
-		// Discard tasks that are submitted during shutdown
-		RejectedExecutionHandler policy =
-				new ThreadPoolExecutor.DiscardPolicy();
-		// Use a single thread and keep it in the pool for 60 secs
-		databaseExecutor = new ThreadPoolExecutor(0, 1, 60, SECONDS, queue,
-				policy);
-	}
-
 	@Provides
 	@Singleton
 	Database<Connection> provideDatabase(DatabaseConfig config,
@@ -53,21 +24,11 @@ public class DatabaseModule {
 		return new H2Database(config, random, clock);
 	}
 
-	@Provides @Singleton
+	@Provides
+	@Singleton
 	DatabaseComponent provideDatabaseComponent(Database<Connection> db,
 			EventBus eventBus, ShutdownManager shutdown) {
 		return new DatabaseComponentImpl<Connection>(db, Connection.class,
 				eventBus, shutdown);
 	}
-
-	@Provides @Singleton @DatabaseExecutor
-	ExecutorService provideDatabaseExecutorService(LifecycleManager lifecycleManager) {
-		lifecycleManager.registerForShutdown(databaseExecutor);
-		return databaseExecutor;
-	}
-
-	@Provides @Singleton @DatabaseExecutor
-	Executor provideDatabaseExecutor(@DatabaseExecutor ExecutorService dbExecutor) {
-		return dbExecutor;
-	}
 }
diff --git a/briar-core/src/org/briarproject/transport/KeyManagerImpl.java b/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
index 32a6ee3aada1dd7cb4f8b2a03b1382dc7b622765..40311192cb8f2ef4c530ce9f748cad42f040cccd 100644
--- a/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
+++ b/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
@@ -26,7 +26,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
 import javax.inject.Inject;
@@ -41,7 +41,7 @@ class KeyManagerImpl implements KeyManager, Service, EventListener {
 
 	private final DatabaseComponent db;
 	private final CryptoComponent crypto;
-	private final ExecutorService dbExecutor;
+	private final Executor dbExecutor;
 	private final PluginConfig pluginConfig;
 	private final Timer timer;
 	private final Clock clock;
@@ -50,8 +50,8 @@ class KeyManagerImpl implements KeyManager, Service, EventListener {
 
 	@Inject
 	KeyManagerImpl(DatabaseComponent db, CryptoComponent crypto,
-			@DatabaseExecutor ExecutorService dbExecutor,
-			PluginConfig pluginConfig, Timer timer, Clock clock) {
+			@DatabaseExecutor Executor dbExecutor, PluginConfig pluginConfig,
+			Timer timer, Clock clock) {
 		this.db = db;
 		this.crypto = crypto;
 		this.dbExecutor = dbExecutor;
diff --git a/briar-tests/src/org/briarproject/TestDatabaseModule.java b/briar-tests/src/org/briarproject/TestDatabaseModule.java
index b6659315f2ea989b092cd2aac96008d8a19e4cf2..be401e4e28a1e3efe1c6e1a62d6f1947c1f7c9e6 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseModule.java
+++ b/briar-tests/src/org/briarproject/TestDatabaseModule.java
@@ -1,27 +1,28 @@
 package org.briarproject;
 
 import org.briarproject.api.db.DatabaseConfig;
+import org.briarproject.api.db.DatabaseExecutor;
+import org.briarproject.db.DatabaseModule;
 
 import java.io.File;
+import java.util.concurrent.Executor;
+
+import javax.inject.Singleton;
 
 import dagger.Module;
 import dagger.Provides;
 
 @Module
-public class TestDatabaseModule {
+public class TestDatabaseModule extends DatabaseModule {
 
 	private final DatabaseConfig config;
 
 	public TestDatabaseModule() {
-		this(new File("."), Long.MAX_VALUE);
+		this(new File("."));
 	}
 
 	public TestDatabaseModule(File dir) {
-		this(dir, Long.MAX_VALUE);
-	}
-
-	public TestDatabaseModule(File dir, long maxSize) {
-		this.config = new TestDatabaseConfig(dir, maxSize);
+		config = new TestDatabaseConfig(dir, Long.MAX_VALUE);
 	}
 
 	@Provides
@@ -29,4 +30,10 @@ public class TestDatabaseModule {
 		return config;
 	}
 
+	@Provides
+	@Singleton
+	@DatabaseExecutor
+	Executor provideDatabaseExecutor() {
+		return new ImmediateExecutor();
+	}
 }
diff --git a/briar-tests/src/org/briarproject/TestSeedProvider.java b/briar-tests/src/org/briarproject/TestSeedProvider.java
index 2169dcddd0ec3441671507848ecdd02796d891fd..39014d239b2c37cfdb840356d65f20d518386a9d 100644
--- a/briar-tests/src/org/briarproject/TestSeedProvider.java
+++ b/briar-tests/src/org/briarproject/TestSeedProvider.java
@@ -2,15 +2,9 @@ package org.briarproject;
 
 import org.briarproject.api.system.SeedProvider;
 
-import java.util.Random;
-
 public class TestSeedProvider implements SeedProvider {
 
-	private final Random random = new Random();
-
 	public byte[] getSeed() {
-		byte[] seed = new byte[32];
-		random.nextBytes(seed);
-		return seed;
+		return TestUtils.getRandomBytes(32);
 	}
 }
diff --git a/briar-tests/src/org/briarproject/TestUtils.java b/briar-tests/src/org/briarproject/TestUtils.java
index ba677b70cc019403797db127295e015eca1e01b1..023b800d9e55f2766d3a0f30488f4fbe6bce8caa 100644
--- a/briar-tests/src/org/briarproject/TestUtils.java
+++ b/briar-tests/src/org/briarproject/TestUtils.java
@@ -1,15 +1,13 @@
 package org.briarproject;
 
 import org.briarproject.api.UniqueId;
+import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.util.FileUtils;
 
 import java.io.File;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.briarproject.api.UniqueId;
-import org.briarproject.api.crypto.SecretKey;
-
 public class TestUtils {
 
 	private static final AtomicInteger nextTestDir =
@@ -26,28 +24,24 @@ public class TestUtils {
 		testDir.getParentFile().delete(); // Delete if empty
 	}
 
-	public static byte[] getRandomId() {
-		byte[] b = new byte[UniqueId.LENGTH];
-		random.nextBytes(b);
-		return b;
-	}
-
 	public static byte[] getRandomBytes(int length) {
 		byte[] b = new byte[length];
 		random.nextBytes(b);
 		return b;
 	}
 
-	public static String createRandomString(int length) {
+	public static byte[] getRandomId() {
+		return getRandomBytes(UniqueId.LENGTH);
+	}
+
+	public static String getRandomString(int length) {
 		char[] c = new char[length];
 		for (int i = 0; i < length; i++)
 			c[i] = (char) ('a' + random.nextInt(26));
 		return new String(c);
 	}
 
-	public static SecretKey createSecretKey() {
-		byte[] b = new byte[SecretKey.LENGTH];
-		random.nextBytes(b);
-		return new SecretKey(b);
+	public static SecretKey getSecretKey() {
+		return new SecretKey(getRandomBytes(SecretKey.LENGTH));
 	}
 }
diff --git a/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java b/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java
index 17d9768db9fee0524e320a385d3636cbbadf341b..2990e8f460ad5b2296c21bdeb342beb1bd6561aa 100644
--- a/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java
+++ b/briar-tests/src/org/briarproject/crypto/KeyAgreementTest.java
@@ -13,7 +13,7 @@ import static org.junit.Assert.assertArrayEquals;
 public class KeyAgreementTest extends BriarTestCase {
 
 	@Test
-	public void testBTKeyAgreement() throws Exception {
+	public void testDeriveMasterSecret() throws Exception {
 		SeedProvider seedProvider = new TestSeedProvider();
 		CryptoComponent crypto = new CryptoComponentImpl(seedProvider);
 		KeyPair aPair = crypto.generateAgreementKeyPair();
@@ -26,7 +26,7 @@ public class KeyAgreementTest extends BriarTestCase {
 	}
 
 	@Test
-	public void testKeyAgreement() throws Exception {
+	public void testDeriveSharedSecret() throws Exception {
 		SeedProvider seedProvider = new TestSeedProvider();
 		CryptoComponent crypto = new CryptoComponentImpl(seedProvider);
 		KeyPair aPair = crypto.generateAgreementKeyPair();
diff --git a/briar-tests/src/org/briarproject/crypto/KeyDerivationTest.java b/briar-tests/src/org/briarproject/crypto/KeyDerivationTest.java
index 2fc33cdb1316d76c133c1227ff31b72ddd0d70a9..28276a4311bbbec20166a373a4e0d98b7803a66f 100644
--- a/briar-tests/src/org/briarproject/crypto/KeyDerivationTest.java
+++ b/briar-tests/src/org/briarproject/crypto/KeyDerivationTest.java
@@ -24,7 +24,7 @@ public class KeyDerivationTest extends BriarTestCase {
 
 	public KeyDerivationTest() {
 		crypto = new CryptoComponentImpl(new TestSeedProvider());
-		master = TestUtils.createSecretKey();
+		master = TestUtils.getSecretKey();
 	}
 
 	@Test
@@ -120,7 +120,7 @@ public class KeyDerivationTest extends BriarTestCase {
 
 	@Test
 	public void testMasterKeyAffectsOutput() {
-		SecretKey master1 = TestUtils.createSecretKey();
+		SecretKey master1 = TestUtils.getSecretKey();
 		assertFalse(Arrays.equals(master.getBytes(), master1.getBytes()));
 		TransportKeys k = crypto.deriveTransportKeys(transportId, master,
 				123, true);
diff --git a/briar-tests/src/org/briarproject/crypto/KeyEncodingAndParsingTest.java b/briar-tests/src/org/briarproject/crypto/KeyEncodingAndParsingTest.java
index 556deb17147ee850b78c96120297887bac4606d9..d35da2762e08cc1f24e735a486d236162f2abc8b 100644
--- a/briar-tests/src/org/briarproject/crypto/KeyEncodingAndParsingTest.java
+++ b/briar-tests/src/org/briarproject/crypto/KeyEncodingAndParsingTest.java
@@ -2,23 +2,37 @@ package org.briarproject.crypto;
 
 import org.briarproject.BriarTestCase;
 import org.briarproject.TestSeedProvider;
+import org.briarproject.TestUtils;
 import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.crypto.KeyParser;
 import org.briarproject.api.crypto.PrivateKey;
 import org.briarproject.api.crypto.PublicKey;
+import org.briarproject.api.crypto.Signature;
 import org.junit.Test;
 
 import java.security.GeneralSecurityException;
-import java.util.Random;
 
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertTrue;
 
 public class KeyEncodingAndParsingTest extends BriarTestCase {
 
 	private final CryptoComponentImpl crypto =
 			new CryptoComponentImpl(new TestSeedProvider());
 
+	@Test
+	public void testAgreementPublicKeyLength() throws Exception {
+		// Generate 10 agreement key pairs
+		for (int i = 0; i < 10; i++) {
+			KeyPair keyPair = crypto.generateSignatureKeyPair();
+			// Check the length of the public key
+			byte[] publicKey = keyPair.getPublic().getEncoded();
+			assertTrue(publicKey.length <= MAX_PUBLIC_KEY_LENGTH);
+		}
+	}
+
 	@Test
 	public void testAgreementPublicKeyEncodingAndParsing() throws Exception {
 		KeyParser parser = crypto.getAgreementKeyParser();
@@ -61,27 +75,46 @@ public class KeyEncodingAndParsingTest extends BriarTestCase {
 		int pubLength = p.getPublic().getEncoded().length;
 		int privLength = p.getPrivate().getEncoded().length;
 		// Parse some random byte arrays - expect GeneralSecurityException
-		Random random = new Random();
-		byte[] pubFuzz = new byte[pubLength];
-		byte[] privFuzz = new byte[privLength];
 		for (int i = 0; i < 1000; i++) {
-			random.nextBytes(pubFuzz);
 			try {
-				parser.parsePublicKey(pubFuzz);
+				parser.parsePublicKey(TestUtils.getRandomBytes(pubLength));
 			} catch (GeneralSecurityException expected) {
-			} catch (Exception e) {
-				fail();
+				// Expected
 			}
-			random.nextBytes(privFuzz);
 			try {
-				parser.parsePrivateKey(privFuzz);
+				parser.parsePrivateKey(TestUtils.getRandomBytes(privLength));
 			} catch (GeneralSecurityException expected) {
-			} catch (Exception e) {
-				fail();
+				// Expected
 			}
 		}
 	}
 
+	@Test
+	public void testSignaturePublicKeyLength() throws Exception {
+		// Generate 10 signature key pairs
+		for (int i = 0; i < 10; i++) {
+			KeyPair keyPair = crypto.generateSignatureKeyPair();
+			// Check the length of the public key
+			byte[] publicKey = keyPair.getPublic().getEncoded();
+			assertTrue(publicKey.length <= MAX_PUBLIC_KEY_LENGTH);
+		}
+	}
+
+	@Test
+	public void testSignatureLength() throws Exception {
+		Signature sig = crypto.getSignature();
+		// Generate 10 signature key pairs
+		for (int i = 0; i < 10; i++) {
+			KeyPair keyPair = crypto.generateSignatureKeyPair();
+			// Sign some random data and check the length of the signature
+			byte[] toBeSigned = TestUtils.getRandomBytes(1234);
+			sig.initSign(keyPair.getPrivate());
+			sig.update(toBeSigned);
+			byte[] signature = sig.sign();
+			assertTrue(signature.length <= MAX_SIGNATURE_LENGTH);
+		}
+	}
+
 	@Test
 	public void testSignaturePublicKeyEncodingAndParsing() throws Exception {
 		KeyParser parser = crypto.getSignatureKeyParser();
@@ -124,23 +157,16 @@ public class KeyEncodingAndParsingTest extends BriarTestCase {
 		int pubLength = p.getPublic().getEncoded().length;
 		int privLength = p.getPrivate().getEncoded().length;
 		// Parse some random byte arrays - expect GeneralSecurityException
-		Random random = new Random();
-		byte[] pubFuzz = new byte[pubLength];
-		byte[] privFuzz = new byte[privLength];
 		for (int i = 0; i < 1000; i++) {
-			random.nextBytes(pubFuzz);
 			try {
-				parser.parsePublicKey(pubFuzz);
+				parser.parsePublicKey(TestUtils.getRandomBytes(pubLength));
 			} catch (GeneralSecurityException expected) {
-			} catch (Exception e) {
-				fail();
+				// Expected
 			}
-			random.nextBytes(privFuzz);
 			try {
-				parser.parsePrivateKey(privFuzz);
+				parser.parsePrivateKey(TestUtils.getRandomBytes(privLength));
 			} catch (GeneralSecurityException expected) {
-			} catch (Exception e) {
-				fail();
+				// Expected
 			}
 		}
 	}
diff --git a/briar-tests/src/org/briarproject/crypto/PasswordBasedKdfTest.java b/briar-tests/src/org/briarproject/crypto/PasswordBasedKdfTest.java
index e8fc10ce7c98bc348391c9fdd781e5f8be578e1c..98ae7854d005a4ccd85f94b5938e05cf76d97714 100644
--- a/briar-tests/src/org/briarproject/crypto/PasswordBasedKdfTest.java
+++ b/briar-tests/src/org/briarproject/crypto/PasswordBasedKdfTest.java
@@ -2,6 +2,7 @@ package org.briarproject.crypto;
 
 import org.briarproject.BriarTestCase;
 import org.briarproject.TestSeedProvider;
+import org.briarproject.TestUtils;
 import org.junit.Test;
 
 import java.util.Random;
@@ -18,9 +19,7 @@ public class PasswordBasedKdfTest extends BriarTestCase {
 
 	@Test
 	public void testEncryptionAndDecryption() {
-		Random random = new Random();
-		byte[] input = new byte[1234];
-		random.nextBytes(input);
+		byte[] input = TestUtils.getRandomBytes(1234);
 		String password = "password";
 		byte[] ciphertext = crypto.encryptWithPassword(input, password);
 		byte[] output = crypto.decryptWithPassword(ciphertext, password);
@@ -29,13 +28,11 @@ public class PasswordBasedKdfTest extends BriarTestCase {
 
 	@Test
 	public void testInvalidCiphertextReturnsNull() {
-		Random random = new Random();
-		byte[] input = new byte[1234];
-		random.nextBytes(input);
+		byte[] input = TestUtils.getRandomBytes(1234);
 		String password = "password";
 		byte[] ciphertext = crypto.encryptWithPassword(input, password);
 		// Modify the ciphertext
-		int position = random.nextInt(ciphertext.length);
+		int position = new Random().nextInt(ciphertext.length);
 		ciphertext[position] = (byte) (ciphertext[position] ^ 0xFF);
 		byte[] output = crypto.decryptWithPassword(ciphertext, password);
 		assertNull(output);
diff --git a/briar-tests/src/org/briarproject/crypto/StreamDecrypterImplTest.java b/briar-tests/src/org/briarproject/crypto/StreamDecrypterImplTest.java
index f6ae7a155b5add33ec0cc8715552d516ac4734f8..e8f94711fa89bdbe7f681c746805c2515fb76083 100644
--- a/briar-tests/src/org/briarproject/crypto/StreamDecrypterImplTest.java
+++ b/briar-tests/src/org/briarproject/crypto/StreamDecrypterImplTest.java
@@ -9,7 +9,6 @@ import org.junit.Test;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.Random;
 
 import static junit.framework.Assert.assertEquals;
 import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
@@ -18,22 +17,18 @@ import static org.briarproject.api.transport.TransportConstants.MAX_PAYLOAD_LENG
 import static org.briarproject.api.transport.TransportConstants.STREAM_HEADER_IV_LENGTH;
 import static org.briarproject.util.ByteUtils.INT_16_BYTES;
 import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.fail;
 
 public class StreamDecrypterImplTest extends BriarTestCase {
 
 	private final AuthenticatedCipher cipher;
 	private final SecretKey streamHeaderKey, frameKey;
 	private final byte[] streamHeaderIv;
-	private final Random random;
 
 	public StreamDecrypterImplTest() {
 		cipher = new TestAuthenticatedCipher(); // Null cipher
-		streamHeaderKey = TestUtils.createSecretKey();
-		frameKey = TestUtils.createSecretKey();
-		streamHeaderIv = new byte[STREAM_HEADER_IV_LENGTH];
-		random = new Random();
-		random.nextBytes(streamHeaderIv);
+		streamHeaderKey = TestUtils.getSecretKey();
+		frameKey = TestUtils.getSecretKey();
+		streamHeaderIv = TestUtils.getRandomBytes(STREAM_HEADER_IV_LENGTH);
 	}
 
 	@Test
@@ -42,15 +37,13 @@ public class StreamDecrypterImplTest extends BriarTestCase {
 		int payloadLength = 123, paddingLength = 234;
 		FrameEncoder.encodeHeader(frameHeader, false, payloadLength,
 				paddingLength);
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		byte[] frameHeader1 = new byte[FRAME_HEADER_LENGTH];
 		int payloadLength1 = 345, paddingLength1 = 456;
 		FrameEncoder.encodeHeader(frameHeader1, true, payloadLength1,
 				paddingLength1);
-		byte[] payload1 = new byte[payloadLength1];
-		random.nextBytes(payload1);
+		byte[] payload1 = TestUtils.getRandomBytes(payloadLength1);
 
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		out.write(streamHeaderIv);
@@ -88,8 +81,7 @@ public class StreamDecrypterImplTest extends BriarTestCase {
 		int payloadLength = 123, paddingLength = 234;
 		FrameEncoder.encodeHeader(frameHeader, false, payloadLength,
 				paddingLength);
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		out.write(streamHeaderIv);
 		out.write(frameKey.getBytes());
@@ -116,8 +108,7 @@ public class StreamDecrypterImplTest extends BriarTestCase {
 		int payloadLength = MAX_PAYLOAD_LENGTH - 1, paddingLength = 2;
 		ByteUtils.writeUint16(payloadLength, frameHeader, 0);
 		ByteUtils.writeUint16(paddingLength, frameHeader, INT_16_BYTES);
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		out.write(streamHeaderIv);
@@ -143,8 +134,7 @@ public class StreamDecrypterImplTest extends BriarTestCase {
 		int payloadLength = 123, paddingLength = 234;
 		FrameEncoder.encodeHeader(frameHeader, false, payloadLength,
 				paddingLength);
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 		// Set one of the padding bytes non-zero
 		byte[] padding = new byte[paddingLength];
 		padding[paddingLength - 1] = 1;
@@ -173,8 +163,7 @@ public class StreamDecrypterImplTest extends BriarTestCase {
 		int payloadLength = 123, paddingLength = 234;
 		FrameEncoder.encodeHeader(frameHeader, true, payloadLength,
 				paddingLength);
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		out.write(streamHeaderIv);
diff --git a/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java b/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java
index d67980a1cdb84ec8322988b346cd96a86944c10b..d2d5e7eb22c1613f071b47d4cd24eace32c32965 100644
--- a/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java
+++ b/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java
@@ -6,7 +6,6 @@ import org.briarproject.api.crypto.SecretKey;
 import org.junit.Test;
 
 import java.io.ByteArrayOutputStream;
-import java.util.Random;
 
 import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
 import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
@@ -19,17 +18,13 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 	private final AuthenticatedCipher cipher;
 	private final SecretKey streamHeaderKey, frameKey;
 	private final byte[] tag, streamHeaderIv;
-	private final Random random;
 
 	public StreamEncrypterImplTest() {
 		cipher = new TestAuthenticatedCipher(); // Null cipher
-		streamHeaderKey = TestUtils.createSecretKey();
-		frameKey = TestUtils.createSecretKey();
-		tag = new byte[TAG_LENGTH];
-		streamHeaderIv = new byte[STREAM_HEADER_IV_LENGTH];
-		random = new Random();
-		random.nextBytes(tag);
-		random.nextBytes(streamHeaderIv);
+		streamHeaderKey = TestUtils.getSecretKey();
+		frameKey = TestUtils.getSecretKey();
+		tag = TestUtils.getRandomBytes(TAG_LENGTH);
+		streamHeaderIv = TestUtils.getRandomBytes(STREAM_HEADER_IV_LENGTH);
 	}
 
 	@Test
@@ -38,8 +33,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, tag,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, 0, false);
 
@@ -64,8 +58,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, tag,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, 0, true);
 
@@ -90,8 +83,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, null,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, 0, false);
 
@@ -115,8 +107,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, null,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, 0, true);
 
@@ -140,8 +131,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, tag,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123, paddingLength = 234;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, paddingLength, false);
 
@@ -168,8 +158,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, tag,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123, paddingLength = 234;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, paddingLength, true);
 
@@ -196,8 +185,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, null,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123, paddingLength = 234;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, paddingLength, false);
 
@@ -223,8 +211,7 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, null,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123, paddingLength = 234;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 
 		s.writeFrame(payload, payloadLength, paddingLength, true);
 
@@ -250,11 +237,9 @@ public class StreamEncrypterImplTest extends BriarTestCase {
 		StreamEncrypterImpl s = new StreamEncrypterImpl(out, cipher, tag,
 				streamHeaderIv, streamHeaderKey, frameKey);
 		int payloadLength = 123, paddingLength = 234;
-		byte[] payload = new byte[payloadLength];
-		random.nextBytes(payload);
+		byte[] payload = TestUtils.getRandomBytes(payloadLength);
 		int payloadLength1 = 345, paddingLength1 = 456;
-		byte[] payload1 = new byte[payloadLength1];
-		random.nextBytes(payload1);
+		byte[] payload1 = TestUtils.getRandomBytes(payloadLength1);
 
 		s.writeFrame(payload, payloadLength, paddingLength, false);
 		s.writeFrame(payload1, payloadLength1, paddingLength1, true);
diff --git a/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java b/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java
index 8bf3830ab13ebdcbf3ce510a1560b64177c7847e..0f1cbf1d5cdb999580fffc93891bbe21b266d46c 100644
--- a/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java
+++ b/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java
@@ -158,7 +158,7 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test
 	public void testReadString8() throws Exception {
-		String longest = TestUtils.createRandomString(Byte.MAX_VALUE);
+		String longest = TestUtils.getRandomString(Byte.MAX_VALUE);
 		String longHex = StringUtils.toHexString(longest.getBytes("UTF-8"));
 		// "foo", the empty string, and 127 random letters
 		setContents("41" + "03" + "666F6F" + "41" + "00" +
@@ -180,7 +180,7 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test
 	public void testSkipString8() throws Exception {
-		String longest = TestUtils.createRandomString(Byte.MAX_VALUE);
+		String longest = TestUtils.getRandomString(Byte.MAX_VALUE);
 		String longHex = StringUtils.toHexString(longest.getBytes("UTF-8"));
 		// "foo", the empty string, and 127 random letters
 		setContents("41" + "03" + "666F6F" + "41" + "00" +
@@ -193,9 +193,9 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test
 	public void testReadString16() throws Exception {
-		String shortest = TestUtils.createRandomString(Byte.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Byte.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
-		String longest = TestUtils.createRandomString(Short.MAX_VALUE);
+		String longest = TestUtils.getRandomString(Short.MAX_VALUE);
 		String longHex = StringUtils.toHexString(longest.getBytes("UTF-8"));
 		// 128 random letters and 2^15 -1 random letters
 		setContents("42" + "0080" + shortHex + "42" + "7FFF" + longHex);
@@ -206,7 +206,7 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test(expected = FormatException.class)
 	public void testReadString16ChecksMaxLength() throws Exception {
-		String shortest = TestUtils.createRandomString(Byte.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Byte.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
 		// 128 random letters, twice
 		setContents("42" + "0080" + shortHex + "42" + "0080" + shortHex);
@@ -217,9 +217,9 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test
 	public void testSkipString16() throws Exception {
-		String shortest = TestUtils.createRandomString(Byte.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Byte.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
-		String longest = TestUtils.createRandomString(Short.MAX_VALUE);
+		String longest = TestUtils.getRandomString(Short.MAX_VALUE);
 		String longHex = StringUtils.toHexString(longest.getBytes("UTF-8"));
 		// 128 random letters and 2^15 - 1 random letters
 		setContents("42" + "0080" + shortHex + "42" + "7FFF" + longHex);
@@ -230,7 +230,7 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test
 	public void testReadString32() throws Exception {
-		String shortest = TestUtils.createRandomString(Short.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Short.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
 		// 2^15 random letters
 		setContents("44" + "00008000" + shortHex);
@@ -240,7 +240,7 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test(expected = FormatException.class)
 	public void testReadString32ChecksMaxLength() throws Exception {
-		String shortest = TestUtils.createRandomString(Short.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Short.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
 		// 2^15 random letters, twice
 		setContents("44" + "00008000" + shortHex +
@@ -252,7 +252,7 @@ public class BdfReaderImplTest extends BriarTestCase {
 
 	@Test
 	public void testSkipString32() throws Exception {
-		String shortest = TestUtils.createRandomString(Short.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Short.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
 		// 2^15 random letters, twice
 		setContents("44" + "00008000" + shortHex +
diff --git a/briar-tests/src/org/briarproject/data/BdfWriterImplTest.java b/briar-tests/src/org/briarproject/data/BdfWriterImplTest.java
index 8ddd0c2097139e63d66c4765c8d52a02a3eb928a..aa04a43aa737776c6be9835efba1bfee0ac6a661 100644
--- a/briar-tests/src/org/briarproject/data/BdfWriterImplTest.java
+++ b/briar-tests/src/org/briarproject/data/BdfWriterImplTest.java
@@ -81,7 +81,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteString8() throws IOException {
-		String longest = TestUtils.createRandomString(Byte.MAX_VALUE);
+		String longest = TestUtils.getRandomString(Byte.MAX_VALUE);
 		String longHex = StringUtils.toHexString(longest.getBytes("UTF-8"));
 		w.writeString("foo bar baz bam ");
 		w.writeString(longest);
@@ -93,9 +93,9 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteString16() throws IOException {
-		String shortest = TestUtils.createRandomString(Byte.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Byte.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
-		String longest = TestUtils.createRandomString(Short.MAX_VALUE);
+		String longest = TestUtils.getRandomString(Short.MAX_VALUE);
 		String longHex = StringUtils.toHexString(longest.getBytes("UTF-8"));
 		w.writeString(shortest);
 		w.writeString(longest);
@@ -106,7 +106,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteString32() throws IOException {
-		String shortest = TestUtils.createRandomString(Short.MAX_VALUE + 1);
+		String shortest = TestUtils.getRandomString(Short.MAX_VALUE + 1);
 		String shortHex = StringUtils.toHexString(shortest.getBytes("UTF-8"));
 		w.writeString(shortest);
 		// STRING_32 tag, length 2^15, UTF-8 bytes
diff --git a/briar-tests/src/org/briarproject/db/BasicH2Test.java b/briar-tests/src/org/briarproject/db/BasicH2Test.java
index a8b95543b76edcdcde67c41f122b36ecfc40dd26..1802fe2ca20cdc72b8ee32ad42b7d239c7fc886a 100644
--- a/briar-tests/src/org/briarproject/db/BasicH2Test.java
+++ b/briar-tests/src/org/briarproject/db/BasicH2Test.java
@@ -15,7 +15,6 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Random;
 
 import static java.sql.Types.BINARY;
 import static org.junit.Assert.assertEquals;
@@ -48,10 +47,9 @@ public class BasicH2Test extends BriarTestCase {
 		// Create the table
 		createTable(connection);
 		// Generate an ID and two names
-		byte[] id = new byte[32];
-		new Random().nextBytes(id);
-		String oldName = TestUtils.createRandomString(50);
-		String newName = TestUtils.createRandomString(50);
+		byte[] id = TestUtils.getRandomId();
+		String oldName = TestUtils.getRandomString(50);
+		String newName = TestUtils.getRandomString(50);
 		// Insert the ID and old name into the table
 		insertRow(id, oldName);
 		// Check that the old name can be retrieved using the ID
@@ -75,14 +73,13 @@ public class BasicH2Test extends BriarTestCase {
 		// Create the table
 		createTable(connection);
 		// Generate some IDs and two sets of names
-		byte[][] ids = new byte[BATCH_SIZE][32];
+		byte[][] ids = new byte[BATCH_SIZE][];
 		String[] oldNames = new String[BATCH_SIZE];
 		String[] newNames = new String[BATCH_SIZE];
-		Random random = new Random();
 		for (int i = 0; i < BATCH_SIZE; i++) {
-			random.nextBytes(ids[i]);
-			oldNames[i] = TestUtils.createRandomString(50);
-			newNames[i] = TestUtils.createRandomString(50);
+			ids[i] = TestUtils.getRandomId();
+			oldNames[i] = TestUtils.getRandomString(50);
+			newNames[i] = TestUtils.getRandomString(50);
 		}
 		// Insert the IDs and old names into the table as a batch
 		insertBatch(ids, oldNames);
diff --git a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
index eed704adde2acd75842164557f0311ad359b6514..034de653164d6ed5ac3e3e9c09bd7e0697fbe8f2 100644
--- a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
+++ b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
@@ -1382,20 +1382,20 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 	}
 
 	private TransportKeys createTransportKeys() {
-		SecretKey inPrevTagKey = TestUtils.createSecretKey();
-		SecretKey inPrevHeaderKey = TestUtils.createSecretKey();
+		SecretKey inPrevTagKey = TestUtils.getSecretKey();
+		SecretKey inPrevHeaderKey = TestUtils.getSecretKey();
 		IncomingKeys inPrev = new IncomingKeys(inPrevTagKey, inPrevHeaderKey,
 				1, 123, new byte[4]);
-		SecretKey inCurrTagKey = TestUtils.createSecretKey();
-		SecretKey inCurrHeaderKey = TestUtils.createSecretKey();
+		SecretKey inCurrTagKey = TestUtils.getSecretKey();
+		SecretKey inCurrHeaderKey = TestUtils.getSecretKey();
 		IncomingKeys inCurr = new IncomingKeys(inCurrTagKey, inCurrHeaderKey,
 				2, 234, new byte[4]);
-		SecretKey inNextTagKey = TestUtils.createSecretKey();
-		SecretKey inNextHeaderKey = TestUtils.createSecretKey();
+		SecretKey inNextTagKey = TestUtils.getSecretKey();
+		SecretKey inNextHeaderKey = TestUtils.getSecretKey();
 		IncomingKeys inNext = new IncomingKeys(inNextTagKey, inNextHeaderKey,
 				3, 345, new byte[4]);
-		SecretKey outCurrTagKey = TestUtils.createSecretKey();
-		SecretKey outCurrHeaderKey = TestUtils.createSecretKey();
+		SecretKey outCurrTagKey = TestUtils.getSecretKey();
+		SecretKey outCurrHeaderKey = TestUtils.getSecretKey();
 		OutgoingKeys outCurr = new OutgoingKeys(outCurrTagKey, outCurrHeaderKey,
 				2, 456);
 		return new TransportKeys(transportId, inPrev, inCurr, inNext, outCurr);
diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
index 1002900cc41cb6aa2a469d5130933947c412bfd9..24ffe530807fd9a145c7bfd28ffb59f89e167124 100644
--- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
+++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
@@ -63,7 +63,6 @@ public class H2DatabaseTest extends BriarTestCase {
 	private static final int MAX_SIZE = 5 * ONE_MEGABYTE;
 
 	private final File testDir = TestUtils.getTestDirectory();
-	private final Random random = new Random();
 	private final GroupId groupId;
 	private final Group group;
 	private final Author author;
@@ -90,8 +89,7 @@ public class H2DatabaseTest extends BriarTestCase {
 				new byte[MAX_PUBLIC_KEY_LENGTH], new byte[123], timestamp);
 		messageId = new MessageId(TestUtils.getRandomId());
 		size = 1234;
-		raw = new byte[size];
-		random.nextBytes(raw);
+		raw = TestUtils.getRandomBytes(size);
 		message = new Message(messageId, groupId, timestamp, raw);
 		transportId = new TransportId("id");
 		contactId = new ContactId(1);
@@ -747,7 +745,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		db.updateTransportKeys(txn, Collections.singletonMap(contactId, keys));
 
 		// Update the reordering window and retrieve the transport keys
-		random.nextBytes(bitmap);
+		new Random().nextBytes(bitmap);
 		db.setReorderingWindow(txn, contactId, transportId, rotationPeriod,
 				base + 1, bitmap);
 		Map<ContactId, TransportKeys> newKeys =
@@ -1166,20 +1164,20 @@ public class H2DatabaseTest extends BriarTestCase {
 	}
 
 	private TransportKeys createTransportKeys() {
-		SecretKey inPrevTagKey = TestUtils.createSecretKey();
-		SecretKey inPrevHeaderKey = TestUtils.createSecretKey();
+		SecretKey inPrevTagKey = TestUtils.getSecretKey();
+		SecretKey inPrevHeaderKey = TestUtils.getSecretKey();
 		IncomingKeys inPrev = new IncomingKeys(inPrevTagKey, inPrevHeaderKey,
 				1, 123, new byte[4]);
-		SecretKey inCurrTagKey = TestUtils.createSecretKey();
-		SecretKey inCurrHeaderKey = TestUtils.createSecretKey();
+		SecretKey inCurrTagKey = TestUtils.getSecretKey();
+		SecretKey inCurrHeaderKey = TestUtils.getSecretKey();
 		IncomingKeys inCurr = new IncomingKeys(inCurrTagKey, inCurrHeaderKey,
 				2, 234, new byte[4]);
-		SecretKey inNextTagKey = TestUtils.createSecretKey();
-		SecretKey inNextHeaderKey = TestUtils.createSecretKey();
+		SecretKey inNextTagKey = TestUtils.getSecretKey();
+		SecretKey inNextHeaderKey = TestUtils.getSecretKey();
 		IncomingKeys inNext = new IncomingKeys(inNextTagKey, inNextHeaderKey,
 				3, 345, new byte[4]);
-		SecretKey outCurrTagKey = TestUtils.createSecretKey();
-		SecretKey outCurrHeaderKey = TestUtils.createSecretKey();
+		SecretKey outCurrTagKey = TestUtils.getSecretKey();
+		SecretKey outCurrHeaderKey = TestUtils.getSecretKey();
 		OutgoingKeys outCurr = new OutgoingKeys(outCurrTagKey, outCurrHeaderKey,
 				2, 456);
 		return new TransportKeys(transportId, inPrev, inCurr, inNext, outCurr);
diff --git a/briar-tests/src/org/briarproject/keyagreement/KeyAgreementProtocolTest.java b/briar-tests/src/org/briarproject/keyagreement/KeyAgreementProtocolTest.java
index e404c547f48d009081a97493a4422f8cd0d9d200..63f52e82f304d40e5a0f32913322738ee2a79922 100644
--- a/briar-tests/src/org/briarproject/keyagreement/KeyAgreementProtocolTest.java
+++ b/briar-tests/src/org/briarproject/keyagreement/KeyAgreementProtocolTest.java
@@ -8,7 +8,6 @@ import org.briarproject.api.crypto.PublicKey;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.keyagreement.Payload;
 import org.briarproject.api.keyagreement.PayloadEncoder;
-import org.briarproject.util.StringUtils;
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.jmock.integration.junit4.JUnitRuleMockery;
@@ -69,8 +68,8 @@ public class KeyAgreementProtocolTest extends BriarTestCase {
 		final Payload theirPayload = new Payload(BOB_COMMIT, null);
 		final Payload ourPayload = new Payload(ALICE_COMMIT, null);
 		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.createSecretKey();
-		final SecretKey masterSecret = TestUtils.createSecretKey();
+		final SecretKey sharedSecret = TestUtils.getSecretKey();
+		final SecretKey masterSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -133,8 +132,8 @@ public class KeyAgreementProtocolTest extends BriarTestCase {
 		final Payload theirPayload = new Payload(ALICE_COMMIT, null);
 		final Payload ourPayload = new Payload(BOB_COMMIT, null);
 		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.createSecretKey();
-		final SecretKey masterSecret = TestUtils.createSecretKey();
+		final SecretKey sharedSecret = TestUtils.getSecretKey();
+		final SecretKey masterSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -274,7 +273,7 @@ public class KeyAgreementProtocolTest extends BriarTestCase {
 		final Payload theirPayload = new Payload(BOB_COMMIT, null);
 		final Payload ourPayload = new Payload(ALICE_COMMIT, null);
 		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.createSecretKey();
+		final SecretKey sharedSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -339,7 +338,7 @@ public class KeyAgreementProtocolTest extends BriarTestCase {
 		final Payload theirPayload = new Payload(ALICE_COMMIT, null);
 		final Payload ourPayload = new Payload(BOB_COMMIT, null);
 		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.createSecretKey();
+		final SecretKey sharedSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
diff --git a/briar-tests/src/org/briarproject/properties/TransportPropertyValidatorTest.java b/briar-tests/src/org/briarproject/properties/TransportPropertyValidatorTest.java
index 27e44e82f6382b2b25627bd9c891aa6793f17b07..94378cb0130a6d4c098e0d15d56b41e9bb334f7c 100644
--- a/briar-tests/src/org/briarproject/properties/TransportPropertyValidatorTest.java
+++ b/briar-tests/src/org/briarproject/properties/TransportPropertyValidatorTest.java
@@ -118,7 +118,7 @@ public class TransportPropertyValidatorTest extends BriarTestCase {
 
 		/* Generate a string or arbitrary length for the transport id*/
 		String wrongTransportIdString =
-				TestUtils.createRandomString(MAX_TRANSPORT_ID_LENGTH + 1);
+				TestUtils.getRandomString(MAX_TRANSPORT_ID_LENGTH + 1);
 		BdfList body = BdfList.of(deviceId, wrongTransportIdString, 4,
 				bdfDictionary);
 		tpv.validateMessage(message, group, body);
diff --git a/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java b/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java
index 4a8f9ab160b0aee83e2f446bd030d9beb5078fa1..8750d531c4c5935e4fb8f2143bd9eb42cb6f588c 100644
--- a/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java
+++ b/briar-tests/src/org/briarproject/system/LinuxSeedProviderTest.java
@@ -11,7 +11,6 @@ import org.junit.Test;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.HashSet;
-import java.util.Random;
 import java.util.Set;
 
 import static org.briarproject.api.system.SeedProvider.SEED_BYTES;
@@ -68,8 +67,7 @@ public class LinuxSeedProviderTest extends BriarTestCase {
 			return;
 		}
 		// Generate a seed
-		byte[] seed = new byte[SEED_BYTES];
-		new Random().nextBytes(seed);
+		byte[] seed = TestUtils.getRandomBytes(SEED_BYTES);
 		// Write the seed to a file
 		File urandom = new File(testDir, "urandom");
 		urandom.delete();
diff --git a/briar-tests/src/org/briarproject/transport/ReorderingWindowTest.java b/briar-tests/src/org/briarproject/transport/ReorderingWindowTest.java
index 1f18cbe5e363d03800b6b65e984791f98f49f51f..fc30420f09d67d8bc417d25603d9995c9f731d5d 100644
--- a/briar-tests/src/org/briarproject/transport/ReorderingWindowTest.java
+++ b/briar-tests/src/org/briarproject/transport/ReorderingWindowTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.transport;
 
 import org.briarproject.BriarTestCase;
+import org.briarproject.TestUtils;
 import org.briarproject.transport.ReorderingWindow.Change;
 import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Random;
 
 import static org.briarproject.api.transport.TransportConstants.REORDERING_WINDOW_SIZE;
 import static org.junit.Assert.assertArrayEquals;
@@ -14,12 +14,12 @@ import static org.junit.Assert.assertEquals;
 
 public class ReorderingWindowTest extends BriarTestCase {
 
+	private static final int BITMAP_BYTES = REORDERING_WINDOW_SIZE / 8;
+
 	@Test
 	public void testBitmapConversion() {
-		Random random = new Random();
-		byte[] bitmap = new byte[REORDERING_WINDOW_SIZE / 8];
 		for (int i = 0; i < 1000; i++) {
-			random.nextBytes(bitmap);
+			byte[] bitmap = TestUtils.getRandomBytes(BITMAP_BYTES);
 			ReorderingWindow window = new ReorderingWindow(0L, bitmap);
 			assertArrayEquals(bitmap, window.getBitmap());
 		}
@@ -27,7 +27,7 @@ public class ReorderingWindowTest extends BriarTestCase {
 
 	@Test
 	public void testWindowSlidesWhenFirstElementIsSeen() {
-		byte[] bitmap = new byte[REORDERING_WINDOW_SIZE / 8];
+		byte[] bitmap = new byte[BITMAP_BYTES];
 		ReorderingWindow window = new ReorderingWindow(0L, bitmap);
 		// Set the first element seen
 		Change change = window.setSeen(0L);
@@ -42,7 +42,7 @@ public class ReorderingWindowTest extends BriarTestCase {
 
 	@Test
 	public void testWindowDoesNotSlideWhenElementBelowMidpointIsSeen() {
-		byte[] bitmap = new byte[REORDERING_WINDOW_SIZE / 8];
+		byte[] bitmap = new byte[BITMAP_BYTES];
 		ReorderingWindow window = new ReorderingWindow(0L, bitmap);
 		// Set an element below the midpoint seen
 		Change change = window.setSeen(1L);
@@ -57,7 +57,7 @@ public class ReorderingWindowTest extends BriarTestCase {
 
 	@Test
 	public void testWindowSlidesWhenElementAboveMidpointIsSeen() {
-		byte[] bitmap = new byte[REORDERING_WINDOW_SIZE / 8];
+		byte[] bitmap = new byte[BITMAP_BYTES];
 		ReorderingWindow window = new ReorderingWindow(0, bitmap);
 		long aboveMidpoint = REORDERING_WINDOW_SIZE / 2;
 		// Set an element above the midpoint seen
@@ -74,7 +74,7 @@ public class ReorderingWindowTest extends BriarTestCase {
 
 	@Test
 	public void testWindowSlidesUntilLowestElementIsUnseenWhenFirstElementIsSeen() {
-		byte[] bitmap = new byte[REORDERING_WINDOW_SIZE / 8];
+		byte[] bitmap = new byte[BITMAP_BYTES];
 		ReorderingWindow window = new ReorderingWindow(0L, bitmap);
 		window.setSeen(1L);
 		// Set the first element seen
@@ -90,7 +90,7 @@ public class ReorderingWindowTest extends BriarTestCase {
 
 	@Test
 	public void testWindowSlidesUntilLowestElementIsUnseenWhenElementAboveMidpointIsSeen() {
-		byte[] bitmap = new byte[REORDERING_WINDOW_SIZE / 8];
+		byte[] bitmap = new byte[BITMAP_BYTES];
 		ReorderingWindow window = new ReorderingWindow(0L, bitmap);
 		window.setSeen(1L);
 		long aboveMidpoint = REORDERING_WINDOW_SIZE / 2;
diff --git a/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java b/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java
index 24e401a537815ac4856992b33d0d9e6b4cfa4802..0fa3d3cd34714f67d651419cdb9ff7d1d17348b3 100644
--- a/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/transport/TransportIntegrationTest.java
@@ -1,6 +1,7 @@
 package org.briarproject.transport;
 
 import org.briarproject.BriarTestCase;
+import org.briarproject.TestUtils;
 import org.briarproject.api.crypto.StreamDecrypter;
 import org.briarproject.api.crypto.StreamEncrypter;
 import org.junit.Test;
@@ -10,7 +11,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Random;
 
 import static org.briarproject.api.transport.TransportConstants.FRAME_HEADER_LENGTH;
 import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
@@ -21,18 +21,13 @@ import static org.junit.Assert.assertEquals;
 
 public class TransportIntegrationTest extends BriarTestCase {
 
-	private final Random random = new Random();
-
 	@Test
 	public void testWriteAndRead() throws Exception {
 		// Generate a random tag
-		byte[] tag = new byte[TAG_LENGTH];
-		random.nextBytes(tag);
+		byte[] tag = TestUtils.getRandomBytes(TAG_LENGTH);
 		// Generate two frames with random payloads
-		byte[] payload1 = new byte[123];
-		random.nextBytes(payload1);
-		byte[] payload2 = new byte[321];
-		random.nextBytes(payload2);
+		byte[] payload1 = TestUtils.getRandomBytes(123);
+		byte[] payload2 = TestUtils.getRandomBytes(321);
 		// Write the tag and the frames
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		StreamEncrypter encrypter = new TestStreamEncrypter(out, tag);
diff --git a/briar-tests/src/org/briarproject/transport/TransportKeyManagerTest.java b/briar-tests/src/org/briarproject/transport/TransportKeyManagerTest.java
index 7fdfbcf7b3a1aeb30fc0a77b076cc1575487c393..68df77e4138205d0c6368371b8637998b2779fac 100644
--- a/briar-tests/src/org/briarproject/transport/TransportKeyManagerTest.java
+++ b/briar-tests/src/org/briarproject/transport/TransportKeyManagerTest.java
@@ -46,9 +46,9 @@ public class TransportKeyManagerTest extends BriarTestCase {
 	private final long rotationPeriodLength = maxLatency + MAX_CLOCK_DIFFERENCE;
 	private final ContactId contactId = new ContactId(123);
 	private final ContactId contactId1 = new ContactId(234);
-	private final SecretKey tagKey = TestUtils.createSecretKey();
-	private final SecretKey headerKey = TestUtils.createSecretKey();
-	private final SecretKey masterKey = TestUtils.createSecretKey();
+	private final SecretKey tagKey = TestUtils.getSecretKey();
+	private final SecretKey headerKey = TestUtils.getSecretKey();
+	private final SecretKey masterKey = TestUtils.getSecretKey();
 	private final Random random = new Random();
 
 	@Test