From 65be63dc0cb18ab8fd970a347c9a106ac99d137f Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Sat, 23 Jul 2011 18:50:40 +0100 Subject: [PATCH] Moved writers into their own package, replaced public static fields in CryptoModule with provider methods. --- .../sf/briar/api/db/DatabaseComponent.java | 8 ++-- .../api/protocol/{ => writers}/AckWriter.java | 4 +- .../protocol/{ => writers}/BatchWriter.java | 4 +- .../protocol/writers/PacketWriterFactory.java | 14 ++++++ .../{ => writers}/SubscriptionWriter.java | 4 +- .../{ => writers}/TransportWriter.java | 2 +- api/net/sf/briar/api/serial/Writer.java | 1 - .../net/sf/briar/crypto/CryptoModule.java | 43 +++++++++++++++-- .../db/ReadWriteLockDatabaseComponent.java | 8 ++-- .../db/SynchronizedDatabaseComponent.java | 8 ++-- .../protocol/{ => writers}/AckWriterImpl.java | 4 +- .../{ => writers}/BatchWriterImpl.java | 4 +- .../writers/PacketWriterFactoryImpl.java | 44 ++++++++++++++++++ .../briar/protocol/writers/WritersModule.java | 14 ++++++ .../sf/briar/db/DatabaseComponentTest.java | 2 +- .../sf/briar/protocol/BatchReaderTest.java | 5 +- test/net/sf/briar/protocol/ConsumersTest.java | 46 +++++++++++-------- .../sf/briar/protocol/FileReadWriteTest.java | 25 +++++----- .../SigningDigestingOutputStreamTest.java | 43 ++++++++--------- 19 files changed, 205 insertions(+), 78 deletions(-) rename api/net/sf/briar/api/protocol/{ => writers}/AckWriter.java (78%) rename api/net/sf/briar/api/protocol/{ => writers}/BatchWriter.java (84%) create mode 100644 api/net/sf/briar/api/protocol/writers/PacketWriterFactory.java rename api/net/sf/briar/api/protocol/{ => writers}/SubscriptionWriter.java (73%) rename api/net/sf/briar/api/protocol/{ => writers}/TransportWriter.java (85%) rename components/net/sf/briar/protocol/{ => writers}/AckWriterImpl.java (92%) rename components/net/sf/briar/protocol/{ => writers}/BatchWriterImpl.java (94%) create mode 100644 components/net/sf/briar/protocol/writers/PacketWriterFactoryImpl.java create mode 100644 components/net/sf/briar/protocol/writers/WritersModule.java diff --git a/api/net/sf/briar/api/db/DatabaseComponent.java b/api/net/sf/briar/api/db/DatabaseComponent.java index b3e08351b7..fffeb2dec8 100644 --- a/api/net/sf/briar/api/db/DatabaseComponent.java +++ b/api/net/sf/briar/api/db/DatabaseComponent.java @@ -7,17 +7,17 @@ import java.util.Map; import net.sf.briar.api.ContactId; import net.sf.briar.api.Rating; import net.sf.briar.api.protocol.Ack; -import net.sf.briar.api.protocol.AckWriter; import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.Batch; -import net.sf.briar.api.protocol.BatchWriter; import net.sf.briar.api.protocol.Group; import net.sf.briar.api.protocol.GroupId; import net.sf.briar.api.protocol.Message; -import net.sf.briar.api.protocol.SubscriptionWriter; import net.sf.briar.api.protocol.Subscriptions; -import net.sf.briar.api.protocol.TransportWriter; import net.sf.briar.api.protocol.Transports; +import net.sf.briar.api.protocol.writers.AckWriter; +import net.sf.briar.api.protocol.writers.BatchWriter; +import net.sf.briar.api.protocol.writers.SubscriptionWriter; +import net.sf.briar.api.protocol.writers.TransportWriter; /** * Encapsulates the database implementation and exposes high-level operations diff --git a/api/net/sf/briar/api/protocol/AckWriter.java b/api/net/sf/briar/api/protocol/writers/AckWriter.java similarity index 78% rename from api/net/sf/briar/api/protocol/AckWriter.java rename to api/net/sf/briar/api/protocol/writers/AckWriter.java index 0d9a18a297..846b36144c 100644 --- a/api/net/sf/briar/api/protocol/AckWriter.java +++ b/api/net/sf/briar/api/protocol/writers/AckWriter.java @@ -1,7 +1,9 @@ -package net.sf.briar.api.protocol; +package net.sf.briar.api.protocol.writers; import java.io.IOException; +import net.sf.briar.api.protocol.BatchId; + /** An interface for creating an ack. */ public interface AckWriter { diff --git a/api/net/sf/briar/api/protocol/BatchWriter.java b/api/net/sf/briar/api/protocol/writers/BatchWriter.java similarity index 84% rename from api/net/sf/briar/api/protocol/BatchWriter.java rename to api/net/sf/briar/api/protocol/writers/BatchWriter.java index 87a5fd3df1..4b6ecc0e1a 100644 --- a/api/net/sf/briar/api/protocol/BatchWriter.java +++ b/api/net/sf/briar/api/protocol/writers/BatchWriter.java @@ -1,7 +1,9 @@ -package net.sf.briar.api.protocol; +package net.sf.briar.api.protocol.writers; import java.io.IOException; +import net.sf.briar.api.protocol.BatchId; + /** An interface for creating a batch of messages. */ public interface BatchWriter { diff --git a/api/net/sf/briar/api/protocol/writers/PacketWriterFactory.java b/api/net/sf/briar/api/protocol/writers/PacketWriterFactory.java new file mode 100644 index 0000000000..ac4d3c292c --- /dev/null +++ b/api/net/sf/briar/api/protocol/writers/PacketWriterFactory.java @@ -0,0 +1,14 @@ +package net.sf.briar.api.protocol.writers; + +import java.io.OutputStream; + +public interface PacketWriterFactory { + + AckWriter createAckWriter(OutputStream out); + + BatchWriter createBatchWriter(OutputStream out); + + SubscriptionWriter createSubscriptionWriter(OutputStream out); + + TransportWriter createTransportWriter(OutputStream out); +} diff --git a/api/net/sf/briar/api/protocol/SubscriptionWriter.java b/api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java similarity index 73% rename from api/net/sf/briar/api/protocol/SubscriptionWriter.java rename to api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java index 0cddd424bf..7e7d340d0c 100644 --- a/api/net/sf/briar/api/protocol/SubscriptionWriter.java +++ b/api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java @@ -1,7 +1,9 @@ -package net.sf.briar.api.protocol; +package net.sf.briar.api.protocol.writers; import java.io.IOException; +import net.sf.briar.api.protocol.Group; + /** An interface for creating a subscription update. */ public interface SubscriptionWriter { diff --git a/api/net/sf/briar/api/protocol/TransportWriter.java b/api/net/sf/briar/api/protocol/writers/TransportWriter.java similarity index 85% rename from api/net/sf/briar/api/protocol/TransportWriter.java rename to api/net/sf/briar/api/protocol/writers/TransportWriter.java index 637017cfe7..5caa756c42 100644 --- a/api/net/sf/briar/api/protocol/TransportWriter.java +++ b/api/net/sf/briar/api/protocol/writers/TransportWriter.java @@ -1,4 +1,4 @@ -package net.sf.briar.api.protocol; +package net.sf.briar.api.protocol.writers; import java.io.IOException; import java.util.Map; diff --git a/api/net/sf/briar/api/serial/Writer.java b/api/net/sf/briar/api/serial/Writer.java index b3b7942b32..6b53486e27 100644 --- a/api/net/sf/briar/api/serial/Writer.java +++ b/api/net/sf/briar/api/serial/Writer.java @@ -6,7 +6,6 @@ import java.util.Map; public interface Writer { - // FIXME: Remove this method long getBytesWritten(); void writeBoolean(boolean b) throws IOException; diff --git a/components/net/sf/briar/crypto/CryptoModule.java b/components/net/sf/briar/crypto/CryptoModule.java index 93ee654ddd..93240a4839 100644 --- a/components/net/sf/briar/crypto/CryptoModule.java +++ b/components/net/sf/briar/crypto/CryptoModule.java @@ -1,22 +1,59 @@ package net.sf.briar.crypto; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.security.Signature; import net.sf.briar.api.crypto.KeyParser; import com.google.inject.AbstractModule; +import com.google.inject.Provides; public class CryptoModule extends AbstractModule { - public static final String DIGEST_ALGO = "SHA-256"; - public static final String KEY_PAIR_ALGO = "RSA"; - public static final String SIGNATURE_ALGO = "SHA256withRSA"; + private static final String DIGEST_ALGO = "SHA-256"; + private static final String KEY_PAIR_ALGO = "RSA"; + private static final String SIGNATURE_ALGO = "SHA256withRSA"; @Override protected void configure() { try { bind(KeyParser.class).toInstance(new KeyParserImpl(KEY_PAIR_ALGO)); } catch(NoSuchAlgorithmException e) { + // FIXME: Can modules throw? + throw new RuntimeException(e); + } + } + + @Provides + MessageDigest getMessageDigest() { + try { + return MessageDigest.getInstance(DIGEST_ALGO); + } catch(NoSuchAlgorithmException e) { + // FIXME: Providers should not throw + throw new RuntimeException(e); + } + } + + @Provides + Signature getSignature() { + try { + return Signature.getInstance(SIGNATURE_ALGO); + } catch(NoSuchAlgorithmException e) { + // FIXME: Providers should not throw + throw new RuntimeException(e); + } + } + + @Provides + KeyPair generateKeyPair() { + try { + KeyPairGenerator gen = KeyPairGenerator.getInstance(KEY_PAIR_ALGO); + return gen.generateKeyPair(); + } catch(NoSuchAlgorithmException e) { + // FIXME: Providers should not throw throw new RuntimeException(e); } } diff --git a/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java b/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java index 0d8ae61524..15cee66876 100644 --- a/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java +++ b/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java @@ -16,19 +16,19 @@ import net.sf.briar.api.Rating; import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.NoSuchContactException; import net.sf.briar.api.protocol.Ack; -import net.sf.briar.api.protocol.AckWriter; import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.BatchId; -import net.sf.briar.api.protocol.BatchWriter; import net.sf.briar.api.protocol.Group; import net.sf.briar.api.protocol.GroupId; import net.sf.briar.api.protocol.Message; import net.sf.briar.api.protocol.MessageId; -import net.sf.briar.api.protocol.SubscriptionWriter; import net.sf.briar.api.protocol.Subscriptions; -import net.sf.briar.api.protocol.TransportWriter; import net.sf.briar.api.protocol.Transports; +import net.sf.briar.api.protocol.writers.AckWriter; +import net.sf.briar.api.protocol.writers.BatchWriter; +import net.sf.briar.api.protocol.writers.SubscriptionWriter; +import net.sf.briar.api.protocol.writers.TransportWriter; import com.google.inject.Inject; diff --git a/components/net/sf/briar/db/SynchronizedDatabaseComponent.java b/components/net/sf/briar/db/SynchronizedDatabaseComponent.java index 1de25c0bf4..1377739517 100644 --- a/components/net/sf/briar/db/SynchronizedDatabaseComponent.java +++ b/components/net/sf/briar/db/SynchronizedDatabaseComponent.java @@ -15,19 +15,19 @@ import net.sf.briar.api.Rating; import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.NoSuchContactException; import net.sf.briar.api.protocol.Ack; -import net.sf.briar.api.protocol.AckWriter; import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.BatchId; -import net.sf.briar.api.protocol.BatchWriter; import net.sf.briar.api.protocol.Group; import net.sf.briar.api.protocol.GroupId; import net.sf.briar.api.protocol.Message; import net.sf.briar.api.protocol.MessageId; -import net.sf.briar.api.protocol.SubscriptionWriter; import net.sf.briar.api.protocol.Subscriptions; -import net.sf.briar.api.protocol.TransportWriter; import net.sf.briar.api.protocol.Transports; +import net.sf.briar.api.protocol.writers.AckWriter; +import net.sf.briar.api.protocol.writers.BatchWriter; +import net.sf.briar.api.protocol.writers.SubscriptionWriter; +import net.sf.briar.api.protocol.writers.TransportWriter; import com.google.inject.Inject; diff --git a/components/net/sf/briar/protocol/AckWriterImpl.java b/components/net/sf/briar/protocol/writers/AckWriterImpl.java similarity index 92% rename from components/net/sf/briar/protocol/AckWriterImpl.java rename to components/net/sf/briar/protocol/writers/AckWriterImpl.java index 1d5282a505..ebb6f9fe86 100644 --- a/components/net/sf/briar/protocol/AckWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/AckWriterImpl.java @@ -1,12 +1,12 @@ -package net.sf.briar.protocol; +package net.sf.briar.protocol.writers; import java.io.IOException; import java.io.OutputStream; import net.sf.briar.api.protocol.Ack; -import net.sf.briar.api.protocol.AckWriter; import net.sf.briar.api.protocol.BatchId; import net.sf.briar.api.protocol.Tags; +import net.sf.briar.api.protocol.writers.AckWriter; import net.sf.briar.api.serial.Writer; import net.sf.briar.api.serial.WriterFactory; diff --git a/components/net/sf/briar/protocol/BatchWriterImpl.java b/components/net/sf/briar/protocol/writers/BatchWriterImpl.java similarity index 94% rename from components/net/sf/briar/protocol/BatchWriterImpl.java rename to components/net/sf/briar/protocol/writers/BatchWriterImpl.java index e19da45396..99a06fcf75 100644 --- a/components/net/sf/briar/protocol/BatchWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/BatchWriterImpl.java @@ -1,4 +1,4 @@ -package net.sf.briar.protocol; +package net.sf.briar.protocol.writers; import java.io.IOException; import java.io.OutputStream; @@ -7,8 +7,8 @@ import java.security.MessageDigest; import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.BatchId; -import net.sf.briar.api.protocol.BatchWriter; import net.sf.briar.api.protocol.Tags; +import net.sf.briar.api.protocol.writers.BatchWriter; import net.sf.briar.api.serial.Writer; import net.sf.briar.api.serial.WriterFactory; diff --git a/components/net/sf/briar/protocol/writers/PacketWriterFactoryImpl.java b/components/net/sf/briar/protocol/writers/PacketWriterFactoryImpl.java new file mode 100644 index 0000000000..3b99500486 --- /dev/null +++ b/components/net/sf/briar/protocol/writers/PacketWriterFactoryImpl.java @@ -0,0 +1,44 @@ +package net.sf.briar.protocol.writers; + +import java.io.OutputStream; +import java.security.MessageDigest; + +import net.sf.briar.api.protocol.writers.AckWriter; +import net.sf.briar.api.protocol.writers.BatchWriter; +import net.sf.briar.api.protocol.writers.PacketWriterFactory; +import net.sf.briar.api.protocol.writers.SubscriptionWriter; +import net.sf.briar.api.protocol.writers.TransportWriter; +import net.sf.briar.api.serial.WriterFactory; + +import com.google.inject.Inject; + +class PacketWriterFactoryImpl implements PacketWriterFactory { + + private final MessageDigest messageDigest; + private final WriterFactory writerFactory; + + @Inject + PacketWriterFactoryImpl(MessageDigest messageDigest, + WriterFactory writerFactory) { + this.messageDigest = messageDigest; + this.writerFactory = writerFactory; + } + + public AckWriter createAckWriter(OutputStream out) { + return new AckWriterImpl(out, writerFactory); + } + + public BatchWriter createBatchWriter(OutputStream out) { + return new BatchWriterImpl(out, writerFactory, messageDigest); + } + + public SubscriptionWriter createSubscriptionWriter(OutputStream out) { + // TODO Auto-generated method stub + return null; + } + + public TransportWriter createTransportWriter(OutputStream out) { + // TODO Auto-generated method stub + return null; + } +} diff --git a/components/net/sf/briar/protocol/writers/WritersModule.java b/components/net/sf/briar/protocol/writers/WritersModule.java new file mode 100644 index 0000000000..abb7540ed5 --- /dev/null +++ b/components/net/sf/briar/protocol/writers/WritersModule.java @@ -0,0 +1,14 @@ +package net.sf.briar.protocol.writers; + + +import net.sf.briar.api.protocol.writers.PacketWriterFactory; + +import com.google.inject.AbstractModule; + +public class WritersModule extends AbstractModule { + + @Override + protected void configure() { + bind(PacketWriterFactory.class).to(PacketWriterFactoryImpl.class); + } +} diff --git a/test/net/sf/briar/db/DatabaseComponentTest.java b/test/net/sf/briar/db/DatabaseComponentTest.java index 65ba87ad8d..c46107aad5 100644 --- a/test/net/sf/briar/db/DatabaseComponentTest.java +++ b/test/net/sf/briar/db/DatabaseComponentTest.java @@ -14,13 +14,13 @@ import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.NoSuchContactException; import net.sf.briar.api.db.Status; import net.sf.briar.api.protocol.Ack; -import net.sf.briar.api.protocol.AckWriter; import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.BatchId; import net.sf.briar.api.protocol.Group; import net.sf.briar.api.protocol.GroupId; import net.sf.briar.api.protocol.Message; import net.sf.briar.api.protocol.MessageId; +import net.sf.briar.api.protocol.writers.AckWriter; import org.jmock.Expectations; import org.jmock.Mockery; diff --git a/test/net/sf/briar/protocol/BatchReaderTest.java b/test/net/sf/briar/protocol/BatchReaderTest.java index c7f18b0e57..f53641057f 100644 --- a/test/net/sf/briar/protocol/BatchReaderTest.java +++ b/test/net/sf/briar/protocol/BatchReaderTest.java @@ -38,10 +38,11 @@ public class BatchReaderTest extends TestCase { public BatchReaderTest() throws Exception { super(); - Injector i = Guice.createInjector(new SerialModule()); + Injector i = Guice.createInjector(new SerialModule(), + new CryptoModule()); readerFactory = i.getInstance(ReaderFactory.class); writerFactory = i.getInstance(WriterFactory.class); - messageDigest = MessageDigest.getInstance(CryptoModule.DIGEST_ALGO); + messageDigest = i.getInstance(MessageDigest.class); context = new Mockery(); message = context.mock(Message.class); } diff --git a/test/net/sf/briar/protocol/ConsumersTest.java b/test/net/sf/briar/protocol/ConsumersTest.java index 01af2ba690..c2d16bf84f 100644 --- a/test/net/sf/briar/protocol/ConsumersTest.java +++ b/test/net/sf/briar/protocol/ConsumersTest.java @@ -1,7 +1,6 @@ package net.sf.briar.protocol; import java.security.KeyPair; -import java.security.KeyPairGenerator; import java.security.MessageDigest; import java.security.Signature; import java.util.Arrays; @@ -11,48 +10,59 @@ import junit.framework.TestCase; import net.sf.briar.api.serial.FormatException; import net.sf.briar.crypto.CryptoModule; +import org.junit.Before; import org.junit.Test; +import com.google.inject.Guice; +import com.google.inject.Injector; + public class ConsumersTest extends TestCase { + private Signature signature = null; + private KeyPair keyPair = null; + private MessageDigest messageDigest = null; + + @Before + public void setUp() { + Injector i = Guice.createInjector(new CryptoModule()); + signature = i.getInstance(Signature.class); + keyPair = i.getInstance(KeyPair.class); + messageDigest = i.getInstance(MessageDigest.class); + } + @Test public void testSigningConsumer() throws Exception { - Signature s = Signature.getInstance(CryptoModule.SIGNATURE_ALGO); - KeyPairGenerator gen = - KeyPairGenerator.getInstance(CryptoModule.KEY_PAIR_ALGO); - KeyPair k = gen.genKeyPair(); byte[] data = new byte[1234]; // Generate some random data and sign it new Random().nextBytes(data); - s.initSign(k.getPrivate()); - s.update(data); - byte[] sig = s.sign(); + signature.initSign(keyPair.getPrivate()); + signature.update(data); + byte[] sig = signature.sign(); // Check that feeding a SigningConsumer generates the same signature - s.initSign(k.getPrivate()); - SigningConsumer sc = new SigningConsumer(s); + signature.initSign(keyPair.getPrivate()); + SigningConsumer sc = new SigningConsumer(signature); sc.write(data[0]); sc.write(data, 1, data.length - 2); sc.write(data[data.length - 1]); - byte[] sig1 = s.sign(); + byte[] sig1 = signature.sign(); assertTrue(Arrays.equals(sig, sig1)); } @Test public void testDigestingConsumer() throws Exception { - MessageDigest m = MessageDigest.getInstance(CryptoModule.DIGEST_ALGO); byte[] data = new byte[1234]; // Generate some random data and digest it new Random().nextBytes(data); - m.reset(); - m.update(data); - byte[] dig = m.digest(); + messageDigest.reset(); + messageDigest.update(data); + byte[] dig = messageDigest.digest(); // Check that feeding a DigestingConsumer generates the same digest - m.reset(); - DigestingConsumer dc = new DigestingConsumer(m); + messageDigest.reset(); + DigestingConsumer dc = new DigestingConsumer(messageDigest); dc.write(data[0]); dc.write(data, 1, data.length - 2); dc.write(data[data.length - 1]); - byte[] dig1 = m.digest(); + byte[] dig1 = messageDigest.digest(); assertTrue(Arrays.equals(dig, dig1)); } diff --git a/test/net/sf/briar/protocol/FileReadWriteTest.java b/test/net/sf/briar/protocol/FileReadWriteTest.java index 3d6b9c4b88..f355d01e37 100644 --- a/test/net/sf/briar/protocol/FileReadWriteTest.java +++ b/test/net/sf/briar/protocol/FileReadWriteTest.java @@ -4,7 +4,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.KeyPair; -import java.security.KeyPairGenerator; import java.security.MessageDigest; import java.security.Signature; import java.util.Arrays; @@ -15,20 +14,22 @@ import junit.framework.TestCase; import net.sf.briar.TestUtils; import net.sf.briar.api.crypto.KeyParser; import net.sf.briar.api.protocol.Ack; -import net.sf.briar.api.protocol.AckWriter; import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.BatchId; -import net.sf.briar.api.protocol.BatchWriter; import net.sf.briar.api.protocol.GroupId; import net.sf.briar.api.protocol.Message; import net.sf.briar.api.protocol.MessageEncoder; import net.sf.briar.api.protocol.MessageId; import net.sf.briar.api.protocol.Tags; import net.sf.briar.api.protocol.UniqueId; +import net.sf.briar.api.protocol.writers.AckWriter; +import net.sf.briar.api.protocol.writers.BatchWriter; +import net.sf.briar.api.protocol.writers.PacketWriterFactory; import net.sf.briar.api.serial.Reader; import net.sf.briar.api.serial.ReaderFactory; import net.sf.briar.api.serial.WriterFactory; import net.sf.briar.crypto.CryptoModule; +import net.sf.briar.protocol.writers.WritersModule; import net.sf.briar.serial.SerialModule; import org.junit.After; @@ -50,6 +51,7 @@ public class FileReadWriteTest extends TestCase { private final ReaderFactory readerFactory; private final WriterFactory writerFactory; + private final PacketWriterFactory packetWriterFactory; private final Signature signature; private final MessageDigest messageDigest, batchDigest; private final KeyParser keyParser; @@ -58,21 +60,20 @@ public class FileReadWriteTest extends TestCase { public FileReadWriteTest() throws Exception { super(); Injector i = Guice.createInjector(new SerialModule(), - new CryptoModule()); + new CryptoModule(), new WritersModule()); readerFactory = i.getInstance(ReaderFactory.class); writerFactory = i.getInstance(WriterFactory.class); + packetWriterFactory = i.getInstance(PacketWriterFactory.class); keyParser = i.getInstance(KeyParser.class); - signature = Signature.getInstance(CryptoModule.SIGNATURE_ALGO); - messageDigest = MessageDigest.getInstance(CryptoModule.DIGEST_ALGO); - batchDigest = MessageDigest.getInstance(CryptoModule.DIGEST_ALGO); + signature = i.getInstance(Signature.class); + messageDigest = i.getInstance(MessageDigest.class); + batchDigest = i.getInstance(MessageDigest.class); assertEquals(messageDigest.getDigestLength(), UniqueId.LENGTH); assertEquals(batchDigest.getDigestLength(), UniqueId.LENGTH); // Create and encode a test message MessageEncoder messageEncoder = new MessageEncoderImpl(signature, messageDigest, writerFactory); - KeyPairGenerator gen = - KeyPairGenerator.getInstance(CryptoModule.KEY_PAIR_ALGO); - KeyPair keyPair = gen.generateKeyPair(); + KeyPair keyPair = i.getInstance(KeyPair.class); message = messageEncoder.encodeMessage(MessageId.NONE, sub, nick, keyPair, messageBody.getBytes("UTF-8")); } @@ -86,11 +87,11 @@ public class FileReadWriteTest extends TestCase { public void testWriteFile() throws Exception { FileOutputStream out = new FileOutputStream(file); - AckWriter a = new AckWriterImpl(out, writerFactory); + AckWriter a = packetWriterFactory.createAckWriter(out); a.addBatchId(ack); a.finish(); - BatchWriter b = new BatchWriterImpl(out, writerFactory, batchDigest); + BatchWriter b = packetWriterFactory.createBatchWriter(out); b.addMessage(message.getBytes()); b.finish(); diff --git a/test/net/sf/briar/protocol/SigningDigestingOutputStreamTest.java b/test/net/sf/briar/protocol/SigningDigestingOutputStreamTest.java index f86f62114c..a82f75e982 100644 --- a/test/net/sf/briar/protocol/SigningDigestingOutputStreamTest.java +++ b/test/net/sf/briar/protocol/SigningDigestingOutputStreamTest.java @@ -3,7 +3,6 @@ package net.sf.briar.protocol; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.security.KeyPair; -import java.security.KeyPairGenerator; import java.security.MessageDigest; import java.security.Signature; import java.util.Arrays; @@ -15,19 +14,21 @@ import net.sf.briar.crypto.CryptoModule; import org.junit.Before; import org.junit.Test; +import com.google.inject.Guice; +import com.google.inject.Injector; + public class SigningDigestingOutputStreamTest extends TestCase { + private Signature signature = null; private KeyPair keyPair = null; - private Signature sig = null; - private MessageDigest dig = null; + private MessageDigest messageDigest = null; @Before public void setUp() throws Exception { - KeyPairGenerator gen = - KeyPairGenerator.getInstance(CryptoModule.KEY_PAIR_ALGO); - keyPair = gen.generateKeyPair(); - sig = Signature.getInstance(CryptoModule.SIGNATURE_ALGO); - dig = MessageDigest.getInstance(CryptoModule.DIGEST_ALGO); + Injector i = Guice.createInjector(new CryptoModule()); + signature = i.getInstance(Signature.class); + keyPair = i.getInstance(KeyPair.class); + messageDigest = i.getInstance(MessageDigest.class); } @Test @@ -36,9 +37,9 @@ public class SigningDigestingOutputStreamTest extends TestCase { new Random().nextBytes(input); ByteArrayOutputStream out = new ByteArrayOutputStream(input.length); SigningDigestingOutputStream s = - new SigningDigestingOutputStream(out, sig, dig); - sig.initSign(keyPair.getPrivate()); - dig.reset(); + new SigningDigestingOutputStream(out, signature, messageDigest); + signature.initSign(keyPair.getPrivate()); + messageDigest.reset(); // Sign the first 256 bytes, digest all but the last 256 bytes s.setDigesting(true); s.setSigning(true); @@ -49,20 +50,20 @@ public class SigningDigestingOutputStreamTest extends TestCase { s.write(input, 768, 256); s.close(); // Get the signature and the digest - byte[] signature = sig.sign(); - byte[] digest = dig.digest(); + byte[] sig = signature.sign(); + byte[] digest = messageDigest.digest(); // Check that the output matches the input assertTrue(Arrays.equals(input, out.toByteArray())); // Check that the signature matches a signature over the first 256 bytes - sig.initSign(keyPair.getPrivate()); - sig.update(input, 0, 256); - byte[] directSignature = sig.sign(); - assertTrue(Arrays.equals(directSignature, signature)); + signature.initSign(keyPair.getPrivate()); + signature.update(input, 0, 256); + byte[] directSig = signature.sign(); + assertTrue(Arrays.equals(directSig, sig)); // Check that the digest matches a digest over all but the last 256 // bytes - dig.reset(); - dig.update(input, 0, 768); - byte[] directDigest = dig.digest(); + messageDigest.reset(); + messageDigest.update(input, 0, 768); + byte[] directDigest = messageDigest.digest(); assertTrue(Arrays.equals(directDigest, digest)); } @@ -70,7 +71,7 @@ public class SigningDigestingOutputStreamTest extends TestCase { public void testSignatureExceptionThrowsIOException() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); SigningDigestingOutputStream s = - new SigningDigestingOutputStream(out, sig, dig); + new SigningDigestingOutputStream(out, signature, messageDigest); s.setSigning(true); // Signature hasn't been initialised yet try { s.write((byte) 0); -- GitLab