From a12d5ac340ce57afb83a9a29d02651d46c2872fb Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 19 Oct 2012 21:19:52 +0100 Subject: [PATCH] Removed tag from connection context. --- api/net/sf/briar/api/transport/ConnectionContext.java | 9 ++------- .../briar/api/transport/ConnectionReaderFactory.java | 3 +-- .../briar/api/transport/ConnectionWriterFactory.java | 3 +-- .../briar/transport/ConnectionWriterFactoryImpl.java | 10 ++++++++-- .../briar/transport/TransportConnectionRecogniser.java | 4 ++-- test/net/sf/briar/ProtocolIntegrationTest.java | 5 ++--- .../simplex/OutgoingSimplexConnectionTest.java | 9 +++------ .../simplex/SimplexProtocolIntegrationTest.java | 4 +--- .../sf/briar/transport/TransportIntegrationTest.java | 6 ++---- 9 files changed, 22 insertions(+), 31 deletions(-) diff --git a/api/net/sf/briar/api/transport/ConnectionContext.java b/api/net/sf/briar/api/transport/ConnectionContext.java index f9f547a4fd..dac9544982 100644 --- a/api/net/sf/briar/api/transport/ConnectionContext.java +++ b/api/net/sf/briar/api/transport/ConnectionContext.java @@ -7,15 +7,14 @@ public class ConnectionContext { private final ContactId contactId; private final TransportId transportId; - private final byte[] tag, secret; + private final byte[] secret; private final long connection; private final boolean alice; public ConnectionContext(ContactId contactId, TransportId transportId, - byte[] tag, byte[] secret, long connection, boolean alice) { + byte[] secret, long connection, boolean alice) { this.contactId = contactId; this.transportId = transportId; - this.tag = tag; this.secret = secret; this.connection = connection; this.alice = alice; @@ -29,10 +28,6 @@ public class ConnectionContext { return transportId; } - public byte[] getTag() { - return tag; - } - public byte[] getSecret() { return secret; } diff --git a/api/net/sf/briar/api/transport/ConnectionReaderFactory.java b/api/net/sf/briar/api/transport/ConnectionReaderFactory.java index 171a594bd9..9d7f7d4b58 100644 --- a/api/net/sf/briar/api/transport/ConnectionReaderFactory.java +++ b/api/net/sf/briar/api/transport/ConnectionReaderFactory.java @@ -5,8 +5,7 @@ import java.io.InputStream; public interface ConnectionReaderFactory { /** - * Creates a connection reader for a simplex connection or one side of a - * duplex connection. The secret is erased before this method returns. + * Creates a connection reader for one side of a connection. */ ConnectionReader createConnectionReader(InputStream in, ConnectionContext ctx, boolean initiator); diff --git a/api/net/sf/briar/api/transport/ConnectionWriterFactory.java b/api/net/sf/briar/api/transport/ConnectionWriterFactory.java index f2fd8aaf07..452cbeba6d 100644 --- a/api/net/sf/briar/api/transport/ConnectionWriterFactory.java +++ b/api/net/sf/briar/api/transport/ConnectionWriterFactory.java @@ -5,8 +5,7 @@ import java.io.OutputStream; public interface ConnectionWriterFactory { /** - * Creates a connection writer for a simplex connection or one side of a - * duplex connection. The secret is erased before this method returns. + * Creates a connection writer for one side of a connection. */ ConnectionWriter createConnectionWriter(OutputStream out, long capacity, ConnectionContext ctx, boolean initiator); diff --git a/components/net/sf/briar/transport/ConnectionWriterFactoryImpl.java b/components/net/sf/briar/transport/ConnectionWriterFactoryImpl.java index d853371d8a..b0a2b8c848 100644 --- a/components/net/sf/briar/transport/ConnectionWriterFactoryImpl.java +++ b/components/net/sf/briar/transport/ConnectionWriterFactoryImpl.java @@ -1,9 +1,12 @@ package net.sf.briar.transport; import static net.sf.briar.api.transport.TransportConstants.MAX_FRAME_LENGTH; +import static net.sf.briar.api.transport.TransportConstants.TAG_LENGTH; import java.io.OutputStream; +import javax.crypto.Cipher; + import net.sf.briar.api.crypto.CryptoComponent; import net.sf.briar.api.crypto.ErasableKey; import net.sf.briar.api.transport.ConnectionContext; @@ -30,9 +33,12 @@ class ConnectionWriterFactoryImpl implements ConnectionWriterFactory { initiator); FrameWriter encryption; if(initiator) { + byte[] tag = new byte[TAG_LENGTH]; + Cipher tagCipher = crypto.getTagCipher(); + ErasableKey tagKey = crypto.deriveTagKey(secret, alice); + TagEncoder.encodeTag(tag, tagCipher, tagKey, connection); encryption = new OutgoingEncryptionLayer(out, capacity, - crypto.getFrameCipher(), frameKey, MAX_FRAME_LENGTH, - ctx.getTag()); + crypto.getFrameCipher(), frameKey, MAX_FRAME_LENGTH, tag); } else { encryption = new OutgoingEncryptionLayer(out, capacity, crypto.getFrameCipher(), frameKey, MAX_FRAME_LENGTH); diff --git a/components/net/sf/briar/transport/TransportConnectionRecogniser.java b/components/net/sf/briar/transport/TransportConnectionRecogniser.java index d5bbb12dd0..33b8fe4a79 100644 --- a/components/net/sf/briar/transport/TransportConnectionRecogniser.java +++ b/components/net/sf/briar/transport/TransportConnectionRecogniser.java @@ -59,7 +59,7 @@ class TransportConnectionRecogniser { assert old == null; } else { ConnectionContext ctx1 = new ConnectionContext(contactId, - transportId, tag1, secret, connection1, alice); + transportId, secret, connection1, alice); WindowContext wctx1 = new WindowContext(window, ctx1, period); WindowContext old = tagMap.put(new Bytes(tag1), wctx1); assert old == null; @@ -83,7 +83,7 @@ class TransportConnectionRecogniser { byte[] tag = new byte[TAG_LENGTH]; TagEncoder.encodeTag(tag, cipher, key, connection); ConnectionContext ctx = new ConnectionContext(contactId, - transportId, tag, secret, connection, alice); + transportId, secret, connection, alice); WindowContext wctx = new WindowContext(window, ctx, period); WindowContext old = tagMap.put(new Bytes(tag), wctx); assert old == null; diff --git a/test/net/sf/briar/ProtocolIntegrationTest.java b/test/net/sf/briar/ProtocolIntegrationTest.java index 8b8f7eba92..ebe526173b 100644 --- a/test/net/sf/briar/ProtocolIntegrationTest.java +++ b/test/net/sf/briar/ProtocolIntegrationTest.java @@ -141,9 +141,8 @@ public class ProtocolIntegrationTest extends BriarTestCase { private byte[] write() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] tag = new byte[TAG_LENGTH]; ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, secret.clone(), 0L, true); + secret.clone(), 0L, true); ConnectionWriter conn = connectionWriterFactory.createConnectionWriter( out, Long.MAX_VALUE, ctx, true); OutputStream out1 = conn.getOutputStream(); @@ -192,7 +191,7 @@ public class ProtocolIntegrationTest extends BriarTestCase { assertEquals(TAG_LENGTH, in.read(tag, 0, TAG_LENGTH)); assertArrayEquals(new byte[TAG_LENGTH], tag); ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, secret.clone(), 0L, true); + secret.clone(), 0L, true); ConnectionReader conn = connectionReaderFactory.createConnectionReader( in, ctx, true); InputStream in1 = conn.getInputStream(); diff --git a/test/net/sf/briar/protocol/simplex/OutgoingSimplexConnectionTest.java b/test/net/sf/briar/protocol/simplex/OutgoingSimplexConnectionTest.java index 09109ee844..853b5ffbe5 100644 --- a/test/net/sf/briar/protocol/simplex/OutgoingSimplexConnectionTest.java +++ b/test/net/sf/briar/protocol/simplex/OutgoingSimplexConnectionTest.java @@ -91,9 +91,8 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase { ByteArrayOutputStream out = new ByteArrayOutputStream(); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( out, MAX_PACKET_LENGTH, true); - byte[] tag = new byte[TAG_LENGTH]; ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, secret, 0L, true); + secret, 0L, true); OutgoingSimplexConnection connection = new OutgoingSimplexConnection(db, connRegistry, connFactory, protoFactory, ctx, transport); connection.write(); @@ -109,9 +108,8 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase { ByteArrayOutputStream out = new ByteArrayOutputStream(); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( out, MIN_CONNECTION_LENGTH, true); - byte[] tag = new byte[TAG_LENGTH]; ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, secret, 0L, true); + secret, 0L, true); OutgoingSimplexConnection connection = new OutgoingSimplexConnection(db, connRegistry, connFactory, protoFactory, ctx, transport); context.checking(new Expectations() {{ @@ -142,9 +140,8 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase { ByteArrayOutputStream out = new ByteArrayOutputStream(); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( out, MIN_CONNECTION_LENGTH, true); - byte[] tag = new byte[TAG_LENGTH]; ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, secret, 0L, true); + secret, 0L, true); OutgoingSimplexConnection connection = new OutgoingSimplexConnection(db, connRegistry, connFactory, protoFactory, ctx, transport); final Ack ack = context.mock(Ack.class); diff --git a/test/net/sf/briar/protocol/simplex/SimplexProtocolIntegrationTest.java b/test/net/sf/briar/protocol/simplex/SimplexProtocolIntegrationTest.java index 906da6bb26..f5495b205a 100644 --- a/test/net/sf/briar/protocol/simplex/SimplexProtocolIntegrationTest.java +++ b/test/net/sf/briar/protocol/simplex/SimplexProtocolIntegrationTest.java @@ -115,10 +115,8 @@ public class SimplexProtocolIntegrationTest extends BriarTestCase { alice.getInstance(ProtocolWriterFactory.class); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( out, Long.MAX_VALUE, false); - // FIXME: Encode the tag - byte[] tag = new byte[TAG_LENGTH]; ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, aliceToBobSecret, 0L, true); + aliceToBobSecret, 0L, true); OutgoingSimplexConnection simplex = new OutgoingSimplexConnection(db, connRegistry, connFactory, protoFactory, ctx, transport); // Write whatever needs to be written diff --git a/test/net/sf/briar/transport/TransportIntegrationTest.java b/test/net/sf/briar/transport/TransportIntegrationTest.java index 2c61124e0b..7f6247aaed 100644 --- a/test/net/sf/briar/transport/TransportIntegrationTest.java +++ b/test/net/sf/briar/transport/TransportIntegrationTest.java @@ -2,7 +2,6 @@ package net.sf.briar.transport; import static net.sf.briar.api.protocol.ProtocolConstants.MAX_PACKET_LENGTH; import static net.sf.briar.api.transport.TransportConstants.MIN_CONNECTION_LENGTH; -import static net.sf.briar.api.transport.TransportConstants.TAG_LENGTH; import static org.junit.Assert.assertArrayEquals; import java.io.ByteArrayInputStream; @@ -128,9 +127,8 @@ public class TransportIntegrationTest extends BriarTestCase { public void testOverheadWithTag() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(MIN_CONNECTION_LENGTH); - byte[] tag = new byte[TAG_LENGTH]; ConnectionContext ctx = new ConnectionContext(contactId, transportId, - tag, secret, 0L, true); + secret, 0L, true); ConnectionWriter w = connectionWriterFactory.createConnectionWriter(out, MIN_CONNECTION_LENGTH, ctx, true); // Check that the connection writer thinks there's room for a packet @@ -151,7 +149,7 @@ public class TransportIntegrationTest extends BriarTestCase { ByteArrayOutputStream out = new ByteArrayOutputStream(MIN_CONNECTION_LENGTH); ConnectionContext ctx = new ConnectionContext(contactId, transportId, - null, secret, 0L, true); + secret, 0L, true); ConnectionWriter w = connectionWriterFactory.createConnectionWriter(out, MIN_CONNECTION_LENGTH, ctx, false); // Check that the connection writer thinks there's room for a packet -- GitLab