Offer IDs no longer need to be calculated or echoed in requests.

The initiator flag in the transport protocol makes this unnecessary by
linking the two sides of a stream-mode connection, making it
impossible for an attacker to replay the responder's side of a
different connection.
This commit is contained in:
akwizgran
2011-09-12 16:21:17 +01:00
parent 7ed747b2a3
commit 64548375cc
27 changed files with 45 additions and 194 deletions

View File

@@ -2,12 +2,9 @@ package net.sf.briar.protocol.writers;
import java.io.IOException;
import java.io.OutputStream;
import java.security.DigestOutputStream;
import java.security.MessageDigest;
import net.sf.briar.api.protocol.MessageId;
import net.sf.briar.api.protocol.Offer;
import net.sf.briar.api.protocol.OfferId;
import net.sf.briar.api.protocol.Tags;
import net.sf.briar.api.protocol.writers.OfferWriter;
import net.sf.briar.api.serial.Writer;
@@ -17,21 +14,17 @@ class OfferWriterImpl implements OfferWriter {
private final OutputStream out;
private final Writer w;
private final MessageDigest messageDigest;
private boolean started = false;
private int idsWritten = 0;
OfferWriterImpl(OutputStream out, WriterFactory writerFactory,
MessageDigest messageDigest) {
this.out = new DigestOutputStream(out, messageDigest);
OfferWriterImpl(OutputStream out, WriterFactory writerFactory) {
this.out = out;
w = writerFactory.createWriter(out);
this.messageDigest = messageDigest;
}
public boolean writeMessageId(MessageId m) throws IOException {
if(!started) {
messageDigest.reset();
w.writeUserDefinedTag(Tags.OFFER);
w.writeListStart();
started = true;
@@ -42,9 +35,8 @@ class OfferWriterImpl implements OfferWriter {
return true;
}
public OfferId finish() throws IOException {
public void finish() throws IOException {
if(!started) {
messageDigest.reset();
w.writeUserDefinedTag(Tags.OFFER);
w.writeListStart();
started = true;
@@ -52,6 +44,5 @@ class OfferWriterImpl implements OfferWriter {
w.writeListEnd();
out.flush();
started = false;
return new OfferId(messageDigest.digest());
}
}

View File

@@ -36,7 +36,7 @@ class ProtocolWriterFactoryImpl implements ProtocolWriterFactory {
}
public OfferWriter createOfferWriter(OutputStream out) {
return new OfferWriterImpl(out, writerFactory, messageDigest);
return new OfferWriterImpl(out, writerFactory);
}
public RequestWriter createRequestWriter(OutputStream out) {

View File

@@ -4,7 +4,6 @@ import java.io.IOException;
import java.io.OutputStream;
import java.util.BitSet;
import net.sf.briar.api.protocol.OfferId;
import net.sf.briar.api.protocol.Tags;
import net.sf.briar.api.protocol.writers.RequestWriter;
import net.sf.briar.api.serial.Writer;
@@ -20,11 +19,9 @@ class RequestWriterImpl implements RequestWriter {
w = writerFactory.createWriter(out);
}
public void writeRequest(OfferId offerId, BitSet b, int length)
public void writeRequest(BitSet b, int length)
throws IOException {
w.writeUserDefinedTag(Tags.REQUEST);
w.writeUserDefinedTag(Tags.OFFER_ID);
w.writeBytes(offerId.getBytes());
// If the number of bits isn't a multiple of 8, round up to a byte
int bytes = length % 8 == 0 ? length / 8 : length / 8 + 1;
byte[] bitmap = new byte[bytes];