Update data format to match BDF spec.

This commit is contained in:
akwizgran
2016-01-04 15:29:57 +00:00
parent 25c9cff8d6
commit 7be7ce8eda
36 changed files with 338 additions and 409 deletions

View File

@@ -2,7 +2,7 @@ package org.briarproject.api.data;
import java.io.IOException; import java.io.IOException;
public interface Reader { public interface BdfReader {
boolean eof() throws IOException; boolean eof() throws IOException;
void close() throws IOException; void close() throws IOException;
@@ -40,9 +40,9 @@ public interface Reader {
void readListEnd() throws IOException; void readListEnd() throws IOException;
void skipList() throws IOException; void skipList() throws IOException;
boolean hasMap() throws IOException; boolean hasDictionary() throws IOException;
void readMapStart() throws IOException; void readDictionaryStart() throws IOException;
boolean hasMapEnd() throws IOException; boolean hasDictionaryEnd() throws IOException;
void readMapEnd() throws IOException; void readDictionaryEnd() throws IOException;
void skipMap() throws IOException; void skipDictionary() throws IOException;
} }

View File

@@ -0,0 +1,8 @@
package org.briarproject.api.data;
import java.io.InputStream;
public interface BdfReaderFactory {
BdfReader createReader(InputStream in);
}

View File

@@ -4,7 +4,7 @@ import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
public interface Writer { public interface BdfWriter {
void flush() throws IOException; void flush() throws IOException;
void close() throws IOException; void close() throws IOException;
@@ -23,7 +23,7 @@ public interface Writer {
void writeListStart() throws IOException; void writeListStart() throws IOException;
void writeListEnd() throws IOException; void writeListEnd() throws IOException;
void writeMap(Map<?, ?> m) throws IOException; void writeDictionary(Map<?, ?> m) throws IOException;
void writeMapStart() throws IOException; void writeDictionaryStart() throws IOException;
void writeMapEnd() throws IOException; void writeDictionaryEnd() throws IOException;
} }

View File

@@ -0,0 +1,8 @@
package org.briarproject.api.data;
import java.io.OutputStream;
public interface BdfWriterFactory {
BdfWriter createWriter(OutputStream out);
}

View File

@@ -4,5 +4,5 @@ import java.io.IOException;
public interface ObjectReader<T> { public interface ObjectReader<T> {
T readObject(Reader r) throws IOException; T readObject(BdfReader r) throws IOException;
} }

View File

@@ -1,8 +0,0 @@
package org.briarproject.api.data;
import java.io.InputStream;
public interface ReaderFactory {
Reader createReader(InputStream in);
}

View File

@@ -1,8 +0,0 @@
package org.briarproject.api.data;
import java.io.OutputStream;
public interface WriterFactory {
Writer createWriter(OutputStream out);
}

View File

@@ -0,0 +1,13 @@
package org.briarproject.data;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.BdfReaderFactory;
import java.io.InputStream;
class BdfReaderFactoryImpl implements BdfReaderFactory {
public BdfReader createReader(InputStream in) {
return new BdfReaderImpl(in);
}
}

View File

@@ -1,5 +1,15 @@
package org.briarproject.data; package org.briarproject.data;
import org.briarproject.api.FormatException;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.Consumer;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import static org.briarproject.data.Types.DICTIONARY;
import static org.briarproject.data.Types.END; import static org.briarproject.data.Types.END;
import static org.briarproject.data.Types.FALSE; import static org.briarproject.data.Types.FALSE;
import static org.briarproject.data.Types.FLOAT_64; import static org.briarproject.data.Types.FLOAT_64;
@@ -8,7 +18,6 @@ import static org.briarproject.data.Types.INT_32;
import static org.briarproject.data.Types.INT_64; import static org.briarproject.data.Types.INT_64;
import static org.briarproject.data.Types.INT_8; import static org.briarproject.data.Types.INT_8;
import static org.briarproject.data.Types.LIST; import static org.briarproject.data.Types.LIST;
import static org.briarproject.data.Types.MAP;
import static org.briarproject.data.Types.NULL; import static org.briarproject.data.Types.NULL;
import static org.briarproject.data.Types.RAW_16; import static org.briarproject.data.Types.RAW_16;
import static org.briarproject.data.Types.RAW_32; import static org.briarproject.data.Types.RAW_32;
@@ -18,17 +27,8 @@ import static org.briarproject.data.Types.STRING_32;
import static org.briarproject.data.Types.STRING_8; import static org.briarproject.data.Types.STRING_8;
import static org.briarproject.data.Types.TRUE; import static org.briarproject.data.Types.TRUE;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import org.briarproject.api.FormatException;
import org.briarproject.api.data.Consumer;
import org.briarproject.api.data.Reader;
// This class is not thread-safe // This class is not thread-safe
class ReaderImpl implements Reader { class BdfReaderImpl implements BdfReader {
private static final byte[] EMPTY_BUFFER = new byte[] {}; private static final byte[] EMPTY_BUFFER = new byte[] {};
@@ -39,7 +39,7 @@ class ReaderImpl implements Reader {
private byte next; private byte next;
private byte[] buf = new byte[8]; private byte[] buf = new byte[8];
ReaderImpl(InputStream in) { BdfReaderImpl(InputStream in) {
this.in = in; this.in = in;
} }
@@ -88,14 +88,14 @@ class ReaderImpl implements Reader {
} }
private void skipObject() throws IOException { private void skipObject() throws IOException {
if (hasBoolean()) skipBoolean(); if (hasNull()) skipNull();
else if (hasBoolean()) skipBoolean();
else if (hasInteger()) skipInteger(); else if (hasInteger()) skipInteger();
else if (hasFloat()) skipFloat(); else if (hasFloat()) skipFloat();
else if (hasString()) skipString(); else if (hasString()) skipString();
else if (hasRaw()) skipRaw(); else if (hasRaw()) skipRaw();
else if (hasList()) skipList(); else if (hasList()) skipList();
else if (hasMap()) skipMap(); else if (hasDictionary()) skipDictionary();
else if (hasNull()) skipNull();
else throw new FormatException(); else throw new FormatException();
} }
@@ -173,18 +173,13 @@ class ReaderImpl implements Reader {
private short readInt16(boolean consume) throws IOException { private short readInt16(boolean consume) throws IOException {
readIntoBuffer(2, consume); readIntoBuffer(2, consume);
short value = (short) (((buf[0] & 0xFF) << 8) + (buf[1] & 0xFF)); return (short) (((buf[0] & 0xFF) << 8) + (buf[1] & 0xFF));
if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE)
throw new FormatException();
return value;
} }
private int readInt32(boolean consume) throws IOException { private int readInt32(boolean consume) throws IOException {
readIntoBuffer(4, consume); readIntoBuffer(4, consume);
int value = 0; int value = 0;
for (int i = 0; i < 4; i++) value |= (buf[i] & 0xFF) << (24 - i * 8); for (int i = 0; i < 4; i++) value |= (buf[i] & 0xFF) << (24 - i * 8);
if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE)
throw new FormatException();
return value; return value;
} }
@@ -192,8 +187,6 @@ class ReaderImpl implements Reader {
readIntoBuffer(8, consume); readIntoBuffer(8, consume);
long value = 0; long value = 0;
for (int i = 0; i < 8; i++) value |= (buf[i] & 0xFFL) << (56 - i * 8); for (int i = 0; i < 8; i++) value |= (buf[i] & 0xFFL) << (56 - i * 8);
if (value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE)
throw new FormatException();
return value; return value;
} }
@@ -327,30 +320,30 @@ class ReaderImpl implements Reader {
hasLookahead = false; hasLookahead = false;
} }
public boolean hasMap() throws IOException { public boolean hasDictionary() throws IOException {
if (!hasLookahead) readLookahead(); if (!hasLookahead) readLookahead();
if (eof) return false; if (eof) return false;
return next == MAP; return next == DICTIONARY;
} }
public void readMapStart() throws IOException { public void readDictionaryStart() throws IOException {
if (!hasMap()) throw new FormatException(); if (!hasDictionary()) throw new FormatException();
consumeLookahead(); consumeLookahead();
} }
public boolean hasMapEnd() throws IOException { public boolean hasDictionaryEnd() throws IOException {
return hasEnd(); return hasEnd();
} }
public void readMapEnd() throws IOException { public void readDictionaryEnd() throws IOException {
readEnd(); readEnd();
} }
public void skipMap() throws IOException { public void skipDictionary() throws IOException {
if (!hasMap()) throw new FormatException(); if (!hasDictionary()) throw new FormatException();
hasLookahead = false; hasLookahead = false;
while (!hasMapEnd()) { while (!hasDictionaryEnd()) {
skipObject(); skipString();
skipObject(); skipObject();
} }
hasLookahead = false; hasLookahead = false;

View File

@@ -0,0 +1,13 @@
package org.briarproject.data;
import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.BdfWriterFactory;
import java.io.OutputStream;
class BdfWriterFactoryImpl implements BdfWriterFactory {
public BdfWriter createWriter(OutputStream out) {
return new BdfWriterImpl(out);
}
}

View File

@@ -1,22 +1,9 @@
package org.briarproject.data; package org.briarproject.data;
import static org.briarproject.data.Types.END; import org.briarproject.api.Bytes;
import static org.briarproject.data.Types.FALSE; import org.briarproject.api.FormatException;
import static org.briarproject.data.Types.FLOAT_64; import org.briarproject.api.data.BdfWriter;
import static org.briarproject.data.Types.INT_16; import org.briarproject.api.data.Consumer;
import static org.briarproject.data.Types.INT_32;
import static org.briarproject.data.Types.INT_64;
import static org.briarproject.data.Types.INT_8;
import static org.briarproject.data.Types.LIST;
import static org.briarproject.data.Types.MAP;
import static org.briarproject.data.Types.NULL;
import static org.briarproject.data.Types.RAW_16;
import static org.briarproject.data.Types.RAW_32;
import static org.briarproject.data.Types.RAW_8;
import static org.briarproject.data.Types.STRING_16;
import static org.briarproject.data.Types.STRING_32;
import static org.briarproject.data.Types.STRING_8;
import static org.briarproject.data.Types.TRUE;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
@@ -26,17 +13,31 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.briarproject.api.Bytes; import static org.briarproject.data.Types.DICTIONARY;
import org.briarproject.api.data.Consumer; import static org.briarproject.data.Types.END;
import org.briarproject.api.data.Writer; import static org.briarproject.data.Types.FALSE;
import static org.briarproject.data.Types.FLOAT_64;
import static org.briarproject.data.Types.INT_16;
import static org.briarproject.data.Types.INT_32;
import static org.briarproject.data.Types.INT_64;
import static org.briarproject.data.Types.INT_8;
import static org.briarproject.data.Types.LIST;
import static org.briarproject.data.Types.NULL;
import static org.briarproject.data.Types.RAW_16;
import static org.briarproject.data.Types.RAW_32;
import static org.briarproject.data.Types.RAW_8;
import static org.briarproject.data.Types.STRING_16;
import static org.briarproject.data.Types.STRING_32;
import static org.briarproject.data.Types.STRING_8;
import static org.briarproject.data.Types.TRUE;
// This class is not thread-safe // This class is not thread-safe
class WriterImpl implements Writer { class BdfWriterImpl implements BdfWriter {
private final OutputStream out; private final OutputStream out;
private final Collection<Consumer> consumers = new ArrayList<Consumer>(0); private final Collection<Consumer> consumers = new ArrayList<Consumer>(0);
WriterImpl(OutputStream out) { BdfWriterImpl(OutputStream out) {
this.out = out; this.out = out;
} }
@@ -145,7 +146,8 @@ class WriterImpl implements Writer {
} }
private void writeObject(Object o) throws IOException { private void writeObject(Object o) throws IOException {
if (o instanceof Boolean) writeBoolean((Boolean) o); if (o == null) writeNull();
else if (o instanceof Boolean) writeBoolean((Boolean) o);
else if (o instanceof Byte) writeInteger((Byte) o); else if (o instanceof Byte) writeInteger((Byte) o);
else if (o instanceof Short) writeInteger((Short) o); else if (o instanceof Short) writeInteger((Short) o);
else if (o instanceof Integer) writeInteger((Integer) o); else if (o instanceof Integer) writeInteger((Integer) o);
@@ -155,10 +157,9 @@ class WriterImpl implements Writer {
else if (o instanceof String) writeString((String) o); else if (o instanceof String) writeString((String) o);
else if (o instanceof byte[]) writeRaw((byte[]) o); else if (o instanceof byte[]) writeRaw((byte[]) o);
else if (o instanceof Bytes) writeRaw(((Bytes) o).getBytes()); else if (o instanceof Bytes) writeRaw(((Bytes) o).getBytes());
else if (o instanceof List<?>) writeList((List<?>) o); else if (o instanceof List) writeList((List) o);
else if (o instanceof Map<?, ?>) writeMap((Map<?, ?>) o); else if (o instanceof Map) writeDictionary((Map) o);
else if (o == null) writeNull(); else throw new FormatException();
else throw new IllegalStateException();
} }
public void writeListStart() throws IOException { public void writeListStart() throws IOException {
@@ -169,20 +170,21 @@ class WriterImpl implements Writer {
write(END); write(END);
} }
public void writeMap(Map<?, ?> m) throws IOException { public void writeDictionary(Map<?, ?> m) throws IOException {
write(MAP); write(DICTIONARY);
for (Entry<?, ?> e : m.entrySet()) { for (Entry<?, ?> e : m.entrySet()) {
writeObject(e.getKey()); if (!(e.getKey() instanceof String)) throw new FormatException();
writeString((String) e.getKey());
writeObject(e.getValue()); writeObject(e.getValue());
} }
write(END); write(END);
} }
public void writeMapStart() throws IOException { public void writeDictionaryStart() throws IOException {
write(MAP); write(DICTIONARY);
} }
public void writeMapEnd() throws IOException { public void writeDictionaryEnd() throws IOException {
write(END); write(END);
} }

View File

@@ -1,15 +1,15 @@
package org.briarproject.data; package org.briarproject.data;
import org.briarproject.api.data.ReaderFactory;
import org.briarproject.api.data.WriterFactory;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.BdfWriterFactory;
public class DataModule extends AbstractModule { public class DataModule extends AbstractModule {
@Override @Override
protected void configure() { protected void configure() {
bind(ReaderFactory.class).to(ReaderFactoryImpl.class); bind(BdfReaderFactory.class).to(BdfReaderFactoryImpl.class);
bind(WriterFactory.class).to(WriterFactoryImpl.class); bind(BdfWriterFactory.class).to(BdfWriterFactoryImpl.class);
} }
} }

View File

@@ -1,13 +0,0 @@
package org.briarproject.data;
import java.io.InputStream;
import org.briarproject.api.data.Reader;
import org.briarproject.api.data.ReaderFactory;
class ReaderFactoryImpl implements ReaderFactory {
public Reader createReader(InputStream in) {
return new ReaderImpl(in);
}
}

View File

@@ -17,6 +17,6 @@ interface Types {
byte RAW_16 = 0x52; byte RAW_16 = 0x52;
byte RAW_32 = 0x54; byte RAW_32 = 0x54;
byte LIST = 0x60; byte LIST = 0x60;
byte MAP = 0x70; byte DICTIONARY = 0x70;
byte END = (byte) 0x80; byte END = (byte) 0x80;
} }

View File

@@ -1,13 +0,0 @@
package org.briarproject.data;
import java.io.OutputStream;
import org.briarproject.api.data.Writer;
import org.briarproject.api.data.WriterFactory;
class WriterFactoryImpl implements WriterFactory {
public Writer createWriter(OutputStream out) {
return new WriterImpl(out);
}
}

View File

@@ -6,10 +6,10 @@ import org.briarproject.api.contact.ContactManager;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.PseudoRandom; import org.briarproject.api.crypto.PseudoRandom;
import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.crypto.SecretKey;
import org.briarproject.api.data.Reader; import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.ReaderFactory; import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
@@ -42,7 +42,7 @@ class AliceConnector extends Connector {
Logger.getLogger(AliceConnector.class.getName()); Logger.getLogger(AliceConnector.class.getName());
AliceConnector(CryptoComponent crypto, AliceConnector(CryptoComponent crypto,
ReaderFactory readerFactory, WriterFactory writerFactory, BdfReaderFactory bdfReaderFactory, BdfWriterFactory bdfWriterFactory,
StreamReaderFactory streamReaderFactory, StreamReaderFactory streamReaderFactory,
StreamWriterFactory streamWriterFactory, StreamWriterFactory streamWriterFactory,
AuthorFactory authorFactory, GroupFactory groupFactory, AuthorFactory authorFactory, GroupFactory groupFactory,
@@ -53,7 +53,7 @@ class AliceConnector extends Connector {
LocalAuthor localAuthor, LocalAuthor localAuthor,
Map<TransportId, TransportProperties> localProps, Map<TransportId, TransportProperties> localProps,
PseudoRandom random) { PseudoRandom random) {
super(crypto, readerFactory, writerFactory, streamReaderFactory, super(crypto, bdfReaderFactory, bdfWriterFactory, streamReaderFactory,
streamWriterFactory, authorFactory, groupFactory, streamWriterFactory, authorFactory, groupFactory,
keyManager, connectionManager, contactManager, keyManager, connectionManager, contactManager,
messagingManager, transportPropertyManager, clock, messagingManager, transportPropertyManager, clock,
@@ -76,14 +76,14 @@ class AliceConnector extends Connector {
// Carry out the key agreement protocol // Carry out the key agreement protocol
InputStream in; InputStream in;
OutputStream out; OutputStream out;
Reader r; BdfReader r;
Writer w; BdfWriter w;
SecretKey master; SecretKey master;
try { try {
in = conn.getReader().getInputStream(); in = conn.getReader().getInputStream();
out = conn.getWriter().getOutputStream(); out = conn.getWriter().getOutputStream();
r = readerFactory.createReader(in); r = bdfReaderFactory.createReader(in);
w = writerFactory.createWriter(out); w = bdfWriterFactory.createWriter(out);
// Alice goes first // Alice goes first
sendPublicKeyHash(w); sendPublicKeyHash(w);
byte[] hash = receivePublicKeyHash(r); byte[] hash = receivePublicKeyHash(r);
@@ -144,12 +144,12 @@ class AliceConnector extends Connector {
InputStream streamReader = InputStream streamReader =
streamReaderFactory.createInvitationStreamReader(in, streamReaderFactory.createInvitationStreamReader(in,
bobHeaderKey); bobHeaderKey);
r = readerFactory.createReader(streamReader); r = bdfReaderFactory.createReader(streamReader);
// Create the writers // Create the writers
OutputStream streamWriter = OutputStream streamWriter =
streamWriterFactory.createInvitationStreamWriter(out, streamWriterFactory.createInvitationStreamWriter(out,
aliceHeaderKey); aliceHeaderKey);
w = writerFactory.createWriter(streamWriter); w = bdfWriterFactory.createWriter(streamWriter);
// Derive the invitation nonces // Derive the invitation nonces
byte[] aliceNonce = crypto.deriveSignatureNonce(master, true); byte[] aliceNonce = crypto.deriveSignatureNonce(master, true);
byte[] bobNonce = crypto.deriveSignatureNonce(master, false); byte[] bobNonce = crypto.deriveSignatureNonce(master, false);

View File

@@ -6,10 +6,10 @@ import org.briarproject.api.contact.ContactManager;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.PseudoRandom; import org.briarproject.api.crypto.PseudoRandom;
import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.crypto.SecretKey;
import org.briarproject.api.data.Reader; import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.ReaderFactory; import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
@@ -42,7 +42,7 @@ class BobConnector extends Connector {
Logger.getLogger(BobConnector.class.getName()); Logger.getLogger(BobConnector.class.getName());
BobConnector(CryptoComponent crypto, BobConnector(CryptoComponent crypto,
ReaderFactory readerFactory, WriterFactory writerFactory, BdfReaderFactory bdfReaderFactory, BdfWriterFactory bdfWriterFactory,
StreamReaderFactory streamReaderFactory, StreamReaderFactory streamReaderFactory,
StreamWriterFactory streamWriterFactory, StreamWriterFactory streamWriterFactory,
AuthorFactory authorFactory, GroupFactory groupFactory, AuthorFactory authorFactory, GroupFactory groupFactory,
@@ -53,7 +53,7 @@ class BobConnector extends Connector {
LocalAuthor localAuthor, LocalAuthor localAuthor,
Map<TransportId, TransportProperties> localProps, Map<TransportId, TransportProperties> localProps,
PseudoRandom random) { PseudoRandom random) {
super(crypto, readerFactory, writerFactory, streamReaderFactory, super(crypto, bdfReaderFactory, bdfWriterFactory, streamReaderFactory,
streamWriterFactory, authorFactory, groupFactory, streamWriterFactory, authorFactory, groupFactory,
keyManager, connectionManager, contactManager, keyManager, connectionManager, contactManager,
messagingManager, transportPropertyManager, clock, messagingManager, transportPropertyManager, clock,
@@ -70,14 +70,14 @@ class BobConnector extends Connector {
// Carry out the key agreement protocol // Carry out the key agreement protocol
InputStream in; InputStream in;
OutputStream out; OutputStream out;
Reader r; BdfReader r;
Writer w; BdfWriter w;
SecretKey master; SecretKey master;
try { try {
in = conn.getReader().getInputStream(); in = conn.getReader().getInputStream();
out = conn.getWriter().getOutputStream(); out = conn.getWriter().getOutputStream();
r = readerFactory.createReader(in); r = bdfReaderFactory.createReader(in);
w = writerFactory.createWriter(out); w = bdfWriterFactory.createWriter(out);
// Alice goes first // Alice goes first
byte[] hash = receivePublicKeyHash(r); byte[] hash = receivePublicKeyHash(r);
// Don't proceed with more than one connection // Don't proceed with more than one connection
@@ -144,12 +144,12 @@ class BobConnector extends Connector {
InputStream streamReader = InputStream streamReader =
streamReaderFactory.createInvitationStreamReader(in, streamReaderFactory.createInvitationStreamReader(in,
aliceHeaderKey); aliceHeaderKey);
r = readerFactory.createReader(streamReader); r = bdfReaderFactory.createReader(streamReader);
// Create the writers // Create the writers
OutputStream streamWriter = OutputStream streamWriter =
streamWriterFactory.createInvitationStreamWriter(out, streamWriterFactory.createInvitationStreamWriter(out,
bobHeaderKey); bobHeaderKey);
w = writerFactory.createWriter(streamWriter); w = bdfWriterFactory.createWriter(streamWriter);
// Derive the nonces // Derive the nonces
byte[] aliceNonce = crypto.deriveSignatureNonce(master, true); byte[] aliceNonce = crypto.deriveSignatureNonce(master, true);
byte[] bobNonce = crypto.deriveSignatureNonce(master, false); byte[] bobNonce = crypto.deriveSignatureNonce(master, false);

View File

@@ -12,10 +12,10 @@ import org.briarproject.api.crypto.MessageDigest;
import org.briarproject.api.crypto.PseudoRandom; import org.briarproject.api.crypto.PseudoRandom;
import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.crypto.SecretKey;
import org.briarproject.api.crypto.Signature; import org.briarproject.api.crypto.Signature;
import org.briarproject.api.data.Reader; import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.ReaderFactory; import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
@@ -56,8 +56,8 @@ abstract class Connector extends Thread {
Logger.getLogger(Connector.class.getName()); Logger.getLogger(Connector.class.getName());
protected final CryptoComponent crypto; protected final CryptoComponent crypto;
protected final ReaderFactory readerFactory; protected final BdfReaderFactory bdfReaderFactory;
protected final WriterFactory writerFactory; protected final BdfWriterFactory bdfWriterFactory;
protected final StreamReaderFactory streamReaderFactory; protected final StreamReaderFactory streamReaderFactory;
protected final StreamWriterFactory streamWriterFactory; protected final StreamWriterFactory streamWriterFactory;
protected final AuthorFactory authorFactory; protected final AuthorFactory authorFactory;
@@ -83,7 +83,7 @@ abstract class Connector extends Thread {
private volatile ContactId contactId = null; private volatile ContactId contactId = null;
Connector(CryptoComponent crypto, Connector(CryptoComponent crypto,
ReaderFactory readerFactory, WriterFactory writerFactory, BdfReaderFactory bdfReaderFactory, BdfWriterFactory bdfWriterFactory,
StreamReaderFactory streamReaderFactory, StreamReaderFactory streamReaderFactory,
StreamWriterFactory streamWriterFactory, StreamWriterFactory streamWriterFactory,
AuthorFactory authorFactory, GroupFactory groupFactory, AuthorFactory authorFactory, GroupFactory groupFactory,
@@ -96,8 +96,8 @@ abstract class Connector extends Thread {
PseudoRandom random) { PseudoRandom random) {
super("Connector"); super("Connector");
this.crypto = crypto; this.crypto = crypto;
this.readerFactory = readerFactory; this.bdfReaderFactory = bdfReaderFactory;
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
this.streamReaderFactory = streamReaderFactory; this.streamReaderFactory = streamReaderFactory;
this.streamWriterFactory = streamWriterFactory; this.streamWriterFactory = streamWriterFactory;
this.authorFactory = authorFactory; this.authorFactory = authorFactory;
@@ -126,13 +126,13 @@ abstract class Connector extends Thread {
return plugin.createInvitationConnection(random, CONNECTION_TIMEOUT); return plugin.createInvitationConnection(random, CONNECTION_TIMEOUT);
} }
protected void sendPublicKeyHash(Writer w) throws IOException { protected void sendPublicKeyHash(BdfWriter w) throws IOException {
w.writeRaw(messageDigest.digest(keyPair.getPublic().getEncoded())); w.writeRaw(messageDigest.digest(keyPair.getPublic().getEncoded()));
w.flush(); w.flush();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent hash"); if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent hash");
} }
protected byte[] receivePublicKeyHash(Reader r) throws IOException { protected byte[] receivePublicKeyHash(BdfReader r) throws IOException {
int hashLength = messageDigest.getDigestLength(); int hashLength = messageDigest.getDigestLength();
byte[] b = r.readRaw(hashLength); byte[] b = r.readRaw(hashLength);
if (b.length < hashLength) throw new FormatException(); if (b.length < hashLength) throw new FormatException();
@@ -140,14 +140,14 @@ abstract class Connector extends Thread {
return b; return b;
} }
protected void sendPublicKey(Writer w) throws IOException { protected void sendPublicKey(BdfWriter w) throws IOException {
byte[] key = keyPair.getPublic().getEncoded(); byte[] key = keyPair.getPublic().getEncoded();
w.writeRaw(key); w.writeRaw(key);
w.flush(); w.flush();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent key"); if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent key");
} }
protected byte[] receivePublicKey(Reader r) throws GeneralSecurityException, protected byte[] receivePublicKey(BdfReader r) throws GeneralSecurityException,
IOException { IOException {
byte[] b = r.readRaw(MAX_PUBLIC_KEY_LENGTH); byte[] b = r.readRaw(MAX_PUBLIC_KEY_LENGTH);
keyParser.parsePublicKey(b); keyParser.parsePublicKey(b);
@@ -169,7 +169,7 @@ abstract class Connector extends Thread {
return crypto.deriveMasterSecret(key, keyPair, alice); return crypto.deriveMasterSecret(key, keyPair, alice);
} }
protected void sendConfirmation(Writer w, boolean confirmed) protected void sendConfirmation(BdfWriter w, boolean confirmed)
throws IOException { throws IOException {
w.writeBoolean(confirmed); w.writeBoolean(confirmed);
w.flush(); w.flush();
@@ -177,14 +177,14 @@ abstract class Connector extends Thread {
LOG.info(pluginName + " sent confirmation: " + confirmed); LOG.info(pluginName + " sent confirmation: " + confirmed);
} }
protected boolean receiveConfirmation(Reader r) throws IOException { protected boolean receiveConfirmation(BdfReader r) throws IOException {
boolean confirmed = r.readBoolean(); boolean confirmed = r.readBoolean();
if (LOG.isLoggable(INFO)) if (LOG.isLoggable(INFO))
LOG.info(pluginName + " received confirmation: " + confirmed); LOG.info(pluginName + " received confirmation: " + confirmed);
return confirmed; return confirmed;
} }
protected void sendPseudonym(Writer w, byte[] nonce) protected void sendPseudonym(BdfWriter w, byte[] nonce)
throws GeneralSecurityException, IOException { throws GeneralSecurityException, IOException {
// Sign the nonce // Sign the nonce
Signature signature = crypto.getSignature(); Signature signature = crypto.getSignature();
@@ -201,7 +201,7 @@ abstract class Connector extends Thread {
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent pseudonym"); if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent pseudonym");
} }
protected Author receivePseudonym(Reader r, byte[] nonce) protected Author receivePseudonym(BdfReader r, byte[] nonce)
throws GeneralSecurityException, IOException { throws GeneralSecurityException, IOException {
// Read the name, public key and signature // Read the name, public key and signature
String name = r.readString(MAX_AUTHOR_NAME_LENGTH); String name = r.readString(MAX_AUTHOR_NAME_LENGTH);
@@ -221,24 +221,24 @@ abstract class Connector extends Thread {
return authorFactory.createAuthor(name, publicKey); return authorFactory.createAuthor(name, publicKey);
} }
protected void sendTimestamp(Writer w, long timestamp) throws IOException { protected void sendTimestamp(BdfWriter w, long timestamp) throws IOException {
w.writeInteger(timestamp); w.writeInteger(timestamp);
w.flush(); w.flush();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent timestamp"); if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent timestamp");
} }
protected long receiveTimestamp(Reader r) throws IOException { protected long receiveTimestamp(BdfReader r) throws IOException {
long timestamp = r.readInteger(); long timestamp = r.readInteger();
if (timestamp < 0) throw new FormatException(); if (timestamp < 0) throw new FormatException();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " received timestamp"); if (LOG.isLoggable(INFO)) LOG.info(pluginName + " received timestamp");
return timestamp; return timestamp;
} }
protected void sendTransportProperties(Writer w) throws IOException { protected void sendTransportProperties(BdfWriter w) throws IOException {
w.writeListStart(); w.writeListStart();
for (Entry<TransportId, TransportProperties> e : localProps.entrySet()) { for (Entry<TransportId, TransportProperties> e : localProps.entrySet()) {
w.writeString(e.getKey().getString()); w.writeString(e.getKey().getString());
w.writeMap(e.getValue()); w.writeDictionary(e.getValue());
} }
w.writeListEnd(); w.writeListEnd();
w.flush(); w.flush();
@@ -247,7 +247,7 @@ abstract class Connector extends Thread {
} }
protected Map<TransportId, TransportProperties> receiveTransportProperties( protected Map<TransportId, TransportProperties> receiveTransportProperties(
Reader r) throws IOException { BdfReader r) throws IOException {
Map<TransportId, TransportProperties> remoteProps = Map<TransportId, TransportProperties> remoteProps =
new HashMap<TransportId, TransportProperties>(); new HashMap<TransportId, TransportProperties>();
r.readListStart(); r.readListStart();
@@ -256,15 +256,15 @@ abstract class Connector extends Thread {
if (idString.length() == 0) throw new FormatException(); if (idString.length() == 0) throw new FormatException();
TransportId id = new TransportId(idString); TransportId id = new TransportId(idString);
Map<String, String> p = new HashMap<String, String>(); Map<String, String> p = new HashMap<String, String>();
r.readMapStart(); r.readDictionaryStart();
for (int i = 0; !r.hasMapEnd(); i++) { for (int i = 0; !r.hasDictionaryEnd(); i++) {
if (i == MAX_PROPERTIES_PER_TRANSPORT) if (i == MAX_PROPERTIES_PER_TRANSPORT)
throw new FormatException(); throw new FormatException();
String key = r.readString(MAX_PROPERTY_LENGTH); String key = r.readString(MAX_PROPERTY_LENGTH);
String value = r.readString(MAX_PROPERTY_LENGTH); String value = r.readString(MAX_PROPERTY_LENGTH);
p.put(key, value); p.put(key, value);
} }
r.readMapEnd(); r.readDictionaryEnd();
remoteProps.put(id, new TransportProperties(p)); remoteProps.put(id, new TransportProperties(p));
} }
r.readListEnd(); r.readListEnd();

View File

@@ -5,8 +5,8 @@ import org.briarproject.api.TransportProperties;
import org.briarproject.api.contact.ContactManager; import org.briarproject.api.contact.ContactManager;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.PseudoRandom; import org.briarproject.api.crypto.PseudoRandom;
import org.briarproject.api.data.ReaderFactory; import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
@@ -48,8 +48,8 @@ class ConnectorGroup extends Thread implements InvitationTask {
Logger.getLogger(ConnectorGroup.class.getName()); Logger.getLogger(ConnectorGroup.class.getName());
private final CryptoComponent crypto; private final CryptoComponent crypto;
private final ReaderFactory readerFactory; private final BdfReaderFactory bdfReaderFactory;
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
private final StreamReaderFactory streamReaderFactory; private final StreamReaderFactory streamReaderFactory;
private final StreamWriterFactory streamWriterFactory; private final StreamWriterFactory streamWriterFactory;
private final AuthorFactory authorFactory; private final AuthorFactory authorFactory;
@@ -78,7 +78,7 @@ class ConnectorGroup extends Thread implements InvitationTask {
private String remoteName = null; private String remoteName = null;
ConnectorGroup(CryptoComponent crypto, ConnectorGroup(CryptoComponent crypto,
ReaderFactory readerFactory, WriterFactory writerFactory, BdfReaderFactory bdfReaderFactory, BdfWriterFactory bdfWriterFactory,
StreamReaderFactory streamReaderFactory, StreamReaderFactory streamReaderFactory,
StreamWriterFactory streamWriterFactory, StreamWriterFactory streamWriterFactory,
AuthorFactory authorFactory, GroupFactory groupFactory, AuthorFactory authorFactory, GroupFactory groupFactory,
@@ -91,8 +91,8 @@ class ConnectorGroup extends Thread implements InvitationTask {
boolean reuseConnection) { boolean reuseConnection) {
super("ConnectorGroup"); super("ConnectorGroup");
this.crypto = crypto; this.crypto = crypto;
this.readerFactory = readerFactory; this.bdfReaderFactory = bdfReaderFactory;
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
this.streamReaderFactory = streamReaderFactory; this.streamReaderFactory = streamReaderFactory;
this.streamWriterFactory = streamWriterFactory; this.streamWriterFactory = streamWriterFactory;
this.authorFactory = authorFactory; this.authorFactory = authorFactory;
@@ -197,7 +197,7 @@ class ConnectorGroup extends Thread implements InvitationTask {
Map<TransportId, TransportProperties> localProps) { Map<TransportId, TransportProperties> localProps) {
PseudoRandom random = crypto.getPseudoRandom(localInvitationCode, PseudoRandom random = crypto.getPseudoRandom(localInvitationCode,
remoteInvitationCode); remoteInvitationCode);
return new AliceConnector(crypto, readerFactory, writerFactory, return new AliceConnector(crypto, bdfReaderFactory, bdfWriterFactory,
streamReaderFactory, streamWriterFactory, authorFactory, streamReaderFactory, streamWriterFactory, authorFactory,
groupFactory, keyManager, connectionManager, contactManager, groupFactory, keyManager, connectionManager, contactManager,
messagingManager, transportPropertyManager, clock, messagingManager, transportPropertyManager, clock,
@@ -209,7 +209,7 @@ class ConnectorGroup extends Thread implements InvitationTask {
Map<TransportId, TransportProperties> localProps) { Map<TransportId, TransportProperties> localProps) {
PseudoRandom random = crypto.getPseudoRandom(remoteInvitationCode, PseudoRandom random = crypto.getPseudoRandom(remoteInvitationCode,
localInvitationCode); localInvitationCode);
return new BobConnector(crypto, readerFactory, writerFactory, return new BobConnector(crypto, bdfReaderFactory, bdfWriterFactory,
streamReaderFactory, streamWriterFactory, authorFactory, streamReaderFactory, streamWriterFactory, authorFactory,
groupFactory, keyManager, connectionManager, contactManager, groupFactory, keyManager, connectionManager, contactManager,
messagingManager, transportPropertyManager, clock, messagingManager, transportPropertyManager, clock,

View File

@@ -2,8 +2,8 @@ package org.briarproject.invitation;
import org.briarproject.api.contact.ContactManager; import org.briarproject.api.contact.ContactManager;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.data.ReaderFactory; import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
import org.briarproject.api.identity.AuthorId; import org.briarproject.api.identity.AuthorId;
import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.identity.IdentityManager;
@@ -24,8 +24,8 @@ import javax.inject.Inject;
class InvitationTaskFactoryImpl implements InvitationTaskFactory { class InvitationTaskFactoryImpl implements InvitationTaskFactory {
private final CryptoComponent crypto; private final CryptoComponent crypto;
private final ReaderFactory readerFactory; private final BdfReaderFactory bdfReaderFactory;
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
private final StreamReaderFactory streamReaderFactory; private final StreamReaderFactory streamReaderFactory;
private final StreamWriterFactory streamWriterFactory; private final StreamWriterFactory streamWriterFactory;
private final AuthorFactory authorFactory; private final AuthorFactory authorFactory;
@@ -41,7 +41,7 @@ class InvitationTaskFactoryImpl implements InvitationTaskFactory {
@Inject @Inject
InvitationTaskFactoryImpl(CryptoComponent crypto, InvitationTaskFactoryImpl(CryptoComponent crypto,
ReaderFactory readerFactory, WriterFactory writerFactory, BdfReaderFactory bdfReaderFactory, BdfWriterFactory bdfWriterFactory,
StreamReaderFactory streamReaderFactory, StreamReaderFactory streamReaderFactory,
StreamWriterFactory streamWriterFactory, StreamWriterFactory streamWriterFactory,
AuthorFactory authorFactory, GroupFactory groupFactory, AuthorFactory authorFactory, GroupFactory groupFactory,
@@ -51,8 +51,8 @@ class InvitationTaskFactoryImpl implements InvitationTaskFactory {
TransportPropertyManager transportPropertyManager, TransportPropertyManager transportPropertyManager,
Clock clock, PluginManager pluginManager) { Clock clock, PluginManager pluginManager) {
this.crypto = crypto; this.crypto = crypto;
this.readerFactory = readerFactory; this.bdfReaderFactory = bdfReaderFactory;
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
this.streamReaderFactory = streamReaderFactory; this.streamReaderFactory = streamReaderFactory;
this.streamWriterFactory = streamWriterFactory; this.streamWriterFactory = streamWriterFactory;
this.authorFactory = authorFactory; this.authorFactory = authorFactory;
@@ -69,7 +69,7 @@ class InvitationTaskFactoryImpl implements InvitationTaskFactory {
public InvitationTask createTask(AuthorId localAuthorId, int localCode, public InvitationTask createTask(AuthorId localAuthorId, int localCode,
int remoteCode, boolean reuseConnection) { int remoteCode, boolean reuseConnection) {
return new ConnectorGroup(crypto, readerFactory, writerFactory, return new ConnectorGroup(crypto, bdfReaderFactory, bdfWriterFactory,
streamReaderFactory, streamWriterFactory, authorFactory, streamReaderFactory, streamWriterFactory, authorFactory,
groupFactory, keyManager, connectionManager, identityManager, groupFactory, keyManager, connectionManager, identityManager,
contactManager, messagingManager, transportPropertyManager, contactManager, messagingManager, transportPropertyManager,

View File

@@ -2,8 +2,8 @@ package org.briarproject.sync;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.MessageDigest; import org.briarproject.api.crypto.MessageDigest;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
import org.briarproject.api.identity.AuthorId; import org.briarproject.api.identity.AuthorId;
@@ -18,14 +18,14 @@ import javax.inject.Inject;
class AuthorFactoryImpl implements AuthorFactory { class AuthorFactoryImpl implements AuthorFactory {
private final CryptoComponent crypto; private final CryptoComponent crypto;
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
private final Clock clock; private final Clock clock;
@Inject @Inject
AuthorFactoryImpl(CryptoComponent crypto, WriterFactory writerFactory, AuthorFactoryImpl(CryptoComponent crypto, BdfWriterFactory bdfWriterFactory,
Clock clock) { Clock clock) {
this.crypto = crypto; this.crypto = crypto;
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
this.clock = clock; this.clock = clock;
} }
@@ -41,7 +41,7 @@ class AuthorFactoryImpl implements AuthorFactory {
private AuthorId getId(String name, byte[] publicKey) { private AuthorId getId(String name, byte[] publicKey) {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
try { try {
w.writeListStart(); w.writeListStart();
w.writeString(name); w.writeString(name);

View File

@@ -3,8 +3,8 @@ package org.briarproject.sync;
import org.briarproject.api.FormatException; import org.briarproject.api.FormatException;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.MessageDigest; import org.briarproject.api.crypto.MessageDigest;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.ObjectReader; import org.briarproject.api.data.ObjectReader;
import org.briarproject.api.data.Reader;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorId; import org.briarproject.api.identity.AuthorId;
@@ -21,7 +21,7 @@ class AuthorReader implements ObjectReader<Author> {
messageDigest = crypto.getMessageDigest(); messageDigest = crypto.getMessageDigest();
} }
public Author readObject(Reader r) throws IOException { public Author readObject(BdfReader r) throws IOException {
// Set up the reader // Set up the reader
DigestingConsumer digesting = new DigestingConsumer(messageDigest); DigestingConsumer digesting = new DigestingConsumer(messageDigest);
r.addConsumer(digesting); r.addConsumer(digesting);

View File

@@ -2,8 +2,8 @@ package org.briarproject.sync;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.MessageDigest; import org.briarproject.api.crypto.MessageDigest;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.sync.Group; import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.GroupFactory; import org.briarproject.api.sync.GroupFactory;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
@@ -18,12 +18,12 @@ import static org.briarproject.api.sync.MessagingConstants.GROUP_SALT_LENGTH;
class GroupFactoryImpl implements GroupFactory { class GroupFactoryImpl implements GroupFactory {
private final CryptoComponent crypto; private final CryptoComponent crypto;
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
@Inject @Inject
GroupFactoryImpl(CryptoComponent crypto, WriterFactory writerFactory) { GroupFactoryImpl(CryptoComponent crypto, BdfWriterFactory bdfWriterFactory) {
this.crypto = crypto; this.crypto = crypto;
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
} }
public Group createGroup(String name) { public Group createGroup(String name) {
@@ -34,7 +34,7 @@ class GroupFactoryImpl implements GroupFactory {
public Group createGroup(String name, byte[] salt) { public Group createGroup(String name, byte[] salt) {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
try { try {
w.writeListStart(); w.writeListStart();
w.writeString(name); w.writeString(name);

View File

@@ -3,8 +3,8 @@ package org.briarproject.sync;
import org.briarproject.api.FormatException; import org.briarproject.api.FormatException;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.MessageDigest; import org.briarproject.api.crypto.MessageDigest;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.ObjectReader; import org.briarproject.api.data.ObjectReader;
import org.briarproject.api.data.Reader;
import org.briarproject.api.sync.Group; import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
@@ -21,7 +21,7 @@ class GroupReader implements ObjectReader<Group> {
messageDigest = crypto.getMessageDigest(); messageDigest = crypto.getMessageDigest();
} }
public Group readObject(Reader r) throws IOException { public Group readObject(BdfReader r) throws IOException {
DigestingConsumer digesting = new DigestingConsumer(messageDigest); DigestingConsumer digesting = new DigestingConsumer(messageDigest);
// Read and digest the data // Read and digest the data
r.addConsumer(digesting); r.addConsumer(digesting);

View File

@@ -4,9 +4,9 @@ import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.MessageDigest; import org.briarproject.api.crypto.MessageDigest;
import org.briarproject.api.crypto.PrivateKey; import org.briarproject.api.crypto.PrivateKey;
import org.briarproject.api.crypto.Signature; import org.briarproject.api.crypto.Signature;
import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.data.Consumer; import org.briarproject.api.data.Consumer;
import org.briarproject.api.data.Writer;
import org.briarproject.api.data.WriterFactory;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.sync.Group; import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.Message; import org.briarproject.api.sync.Message;
@@ -32,14 +32,14 @@ class MessageFactoryImpl implements MessageFactory {
private final Signature signature; private final Signature signature;
private final SecureRandom random; private final SecureRandom random;
private final MessageDigest messageDigest; private final MessageDigest messageDigest;
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
@Inject @Inject
MessageFactoryImpl(CryptoComponent crypto, WriterFactory writerFactory) { MessageFactoryImpl(CryptoComponent crypto, BdfWriterFactory bdfWriterFactory) {
signature = crypto.getSignature(); signature = crypto.getSignature();
random = crypto.getSecureRandom(); random = crypto.getSecureRandom();
messageDigest = crypto.getMessageDigest(); messageDigest = crypto.getMessageDigest();
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
} }
public Message createAnonymousMessage(MessageId parent, Group group, public Message createAnonymousMessage(MessageId parent, Group group,
@@ -69,7 +69,7 @@ class MessageFactoryImpl implements MessageFactory {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
// Serialise the message to a buffer // Serialise the message to a buffer
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
// Initialise the consumers // Initialise the consumers
CountingConsumer counting = new CountingConsumer(MAX_PAYLOAD_LENGTH); CountingConsumer counting = new CountingConsumer(MAX_PAYLOAD_LENGTH);
w.addConsumer(counting); w.addConsumer(counting);
@@ -113,14 +113,14 @@ class MessageFactoryImpl implements MessageFactory {
timestamp, out.toByteArray(), bodyStart, body.length); timestamp, out.toByteArray(), bodyStart, body.length);
} }
private void writeGroup(Writer w, Group g) throws IOException { private void writeGroup(BdfWriter w, Group g) throws IOException {
w.writeListStart(); w.writeListStart();
w.writeString(g.getName()); w.writeString(g.getName());
w.writeRaw(g.getSalt()); w.writeRaw(g.getSalt());
w.writeListEnd(); w.writeListEnd();
} }
private void writeAuthor(Writer w, Author a) throws IOException { private void writeAuthor(BdfWriter w, Author a) throws IOException {
w.writeListStart(); w.writeListStart();
w.writeString(a.getName()); w.writeString(a.getName());
w.writeRaw(a.getPublicKey()); w.writeRaw(a.getPublicKey());

View File

@@ -2,8 +2,8 @@ package org.briarproject.sync;
import org.briarproject.api.FormatException; import org.briarproject.api.FormatException;
import org.briarproject.api.UniqueId; import org.briarproject.api.UniqueId;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.ObjectReader; import org.briarproject.api.data.ObjectReader;
import org.briarproject.api.data.Reader;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.api.sync.Group; import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
@@ -28,7 +28,7 @@ class MessageReader implements ObjectReader<UnverifiedMessage> {
this.authorReader = authorReader; this.authorReader = authorReader;
} }
public UnverifiedMessage readObject(Reader r) throws IOException { public UnverifiedMessage readObject(BdfReader r) throws IOException {
CopyingConsumer copying = new CopyingConsumer(); CopyingConsumer copying = new CopyingConsumer();
CountingConsumer counting = new CountingConsumer(MAX_PAYLOAD_LENGTH); CountingConsumer counting = new CountingConsumer(MAX_PAYLOAD_LENGTH);
r.addConsumer(copying); r.addConsumer(copying);

View File

@@ -1,7 +1,7 @@
package org.briarproject.sync; package org.briarproject.sync;
import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.ObjectReader; import org.briarproject.api.data.ObjectReader;
import org.briarproject.api.data.ReaderFactory;
import org.briarproject.api.sync.PacketReader; import org.briarproject.api.sync.PacketReader;
import org.briarproject.api.sync.PacketReaderFactory; import org.briarproject.api.sync.PacketReaderFactory;
import org.briarproject.api.sync.SubscriptionUpdate; import org.briarproject.api.sync.SubscriptionUpdate;
@@ -13,21 +13,21 @@ import javax.inject.Inject;
class PacketReaderFactoryImpl implements PacketReaderFactory { class PacketReaderFactoryImpl implements PacketReaderFactory {
private final ReaderFactory readerFactory; private final BdfReaderFactory bdfReaderFactory;
private final ObjectReader<UnverifiedMessage> messageReader; private final ObjectReader<UnverifiedMessage> messageReader;
private final ObjectReader<SubscriptionUpdate> subscriptionUpdateReader; private final ObjectReader<SubscriptionUpdate> subscriptionUpdateReader;
@Inject @Inject
PacketReaderFactoryImpl(ReaderFactory readerFactory, PacketReaderFactoryImpl(BdfReaderFactory bdfReaderFactory,
ObjectReader<UnverifiedMessage> messageReader, ObjectReader<UnverifiedMessage> messageReader,
ObjectReader<SubscriptionUpdate> subscriptionUpdateReader) { ObjectReader<SubscriptionUpdate> subscriptionUpdateReader) {
this.readerFactory = readerFactory; this.bdfReaderFactory = bdfReaderFactory;
this.messageReader = messageReader; this.messageReader = messageReader;
this.subscriptionUpdateReader = subscriptionUpdateReader; this.subscriptionUpdateReader = subscriptionUpdateReader;
} }
public PacketReader createPacketReader(InputStream in) { public PacketReader createPacketReader(InputStream in) {
return new PacketReaderImpl(readerFactory, messageReader, return new PacketReaderImpl(bdfReaderFactory, messageReader,
subscriptionUpdateReader, in); subscriptionUpdateReader, in);
} }
} }

View File

@@ -4,9 +4,9 @@ import org.briarproject.api.FormatException;
import org.briarproject.api.TransportId; import org.briarproject.api.TransportId;
import org.briarproject.api.TransportProperties; import org.briarproject.api.TransportProperties;
import org.briarproject.api.UniqueId; import org.briarproject.api.UniqueId;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.ObjectReader; import org.briarproject.api.data.ObjectReader;
import org.briarproject.api.data.Reader;
import org.briarproject.api.data.ReaderFactory;
import org.briarproject.api.sync.Ack; import org.briarproject.api.sync.Ack;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
import org.briarproject.api.sync.Offer; import org.briarproject.api.sync.Offer;
@@ -48,7 +48,7 @@ class PacketReaderImpl implements PacketReader {
private enum State { BUFFER_EMPTY, BUFFER_FULL, EOF } private enum State { BUFFER_EMPTY, BUFFER_FULL, EOF }
private final ReaderFactory readerFactory; private final BdfReaderFactory bdfReaderFactory;
private final ObjectReader<UnverifiedMessage> messageReader; private final ObjectReader<UnverifiedMessage> messageReader;
private final ObjectReader<SubscriptionUpdate> subscriptionUpdateReader; private final ObjectReader<SubscriptionUpdate> subscriptionUpdateReader;
private final InputStream in; private final InputStream in;
@@ -57,11 +57,11 @@ class PacketReaderImpl implements PacketReader {
private State state = State.BUFFER_EMPTY; private State state = State.BUFFER_EMPTY;
private int payloadLength = 0; private int payloadLength = 0;
PacketReaderImpl(ReaderFactory readerFactory, PacketReaderImpl(BdfReaderFactory bdfReaderFactory,
ObjectReader<UnverifiedMessage> messageReader, ObjectReader<UnverifiedMessage> messageReader,
ObjectReader<SubscriptionUpdate> subscriptionUpdateReader, ObjectReader<SubscriptionUpdate> subscriptionUpdateReader,
InputStream in) { InputStream in) {
this.readerFactory = readerFactory; this.bdfReaderFactory = bdfReaderFactory;
this.messageReader = messageReader; this.messageReader = messageReader;
this.subscriptionUpdateReader = subscriptionUpdateReader; this.subscriptionUpdateReader = subscriptionUpdateReader;
this.in = in; this.in = in;
@@ -111,7 +111,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasAck()) throw new FormatException(); if (!hasAck()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read the start of the payload // Read the start of the payload
r.readListStart(); r.readListStart();
// Read the message IDs // Read the message IDs
@@ -141,7 +141,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasMessage()) throw new FormatException(); if (!hasMessage()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read and build the message // Read and build the message
UnverifiedMessage m = messageReader.readObject(r); UnverifiedMessage m = messageReader.readObject(r);
if (!r.eof()) throw new FormatException(); if (!r.eof()) throw new FormatException();
@@ -157,7 +157,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasOffer()) throw new FormatException(); if (!hasOffer()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read the start of the payload // Read the start of the payload
r.readListStart(); r.readListStart();
// Read the message IDs // Read the message IDs
@@ -187,7 +187,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasRequest()) throw new FormatException(); if (!hasRequest()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read the start of the payload // Read the start of the payload
r.readListStart(); r.readListStart();
// Read the message IDs // Read the message IDs
@@ -217,7 +217,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasSubscriptionAck()) throw new FormatException(); if (!hasSubscriptionAck()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read the start of the payload // Read the start of the payload
r.readListStart(); r.readListStart();
// Read the version // Read the version
@@ -239,7 +239,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasSubscriptionUpdate()) throw new FormatException(); if (!hasSubscriptionUpdate()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read and build the subscription update // Read and build the subscription update
SubscriptionUpdate u = subscriptionUpdateReader.readObject(r); SubscriptionUpdate u = subscriptionUpdateReader.readObject(r);
if (!r.eof()) throw new FormatException(); if (!r.eof()) throw new FormatException();
@@ -255,7 +255,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasTransportAck()) throw new FormatException(); if (!hasTransportAck()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read the start of the payload // Read the start of the payload
r.readListStart(); r.readListStart();
// Read the transport ID and version // Read the transport ID and version
@@ -280,7 +280,7 @@ class PacketReaderImpl implements PacketReader {
if (!hasTransportUpdate()) throw new FormatException(); if (!hasTransportUpdate()) throw new FormatException();
// Set up the reader // Set up the reader
InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength); InputStream bais = new ByteArrayInputStream(payload, 0, payloadLength);
Reader r = readerFactory.createReader(bais); BdfReader r = bdfReaderFactory.createReader(bais);
// Read the start of the payload // Read the start of the payload
r.readListStart(); r.readListStart();
// Read the transport ID // Read the transport ID
@@ -289,15 +289,15 @@ class PacketReaderImpl implements PacketReader {
TransportId id = new TransportId(idString); TransportId id = new TransportId(idString);
// Read the transport properties // Read the transport properties
Map<String, String> p = new HashMap<String, String>(); Map<String, String> p = new HashMap<String, String>();
r.readMapStart(); r.readDictionaryStart();
for (int i = 0; !r.hasMapEnd(); i++) { for (int i = 0; !r.hasDictionaryEnd(); i++) {
if (i == MAX_PROPERTIES_PER_TRANSPORT) if (i == MAX_PROPERTIES_PER_TRANSPORT)
throw new FormatException(); throw new FormatException();
String key = r.readString(MAX_PROPERTY_LENGTH); String key = r.readString(MAX_PROPERTY_LENGTH);
String value = r.readString(MAX_PROPERTY_LENGTH); String value = r.readString(MAX_PROPERTY_LENGTH);
p.put(key, value); p.put(key, value);
} }
r.readMapEnd(); r.readDictionaryEnd();
// Read the version number // Read the version number
long version = r.readInteger(); long version = r.readInteger();
if (version < 0) throw new FormatException(); if (version < 0) throw new FormatException();

View File

@@ -1,6 +1,6 @@
package org.briarproject.sync; package org.briarproject.sync;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.sync.PacketWriter; import org.briarproject.api.sync.PacketWriter;
import org.briarproject.api.sync.PacketWriterFactory; import org.briarproject.api.sync.PacketWriterFactory;
@@ -10,14 +10,14 @@ import javax.inject.Inject;
class PacketWriterFactoryImpl implements PacketWriterFactory { class PacketWriterFactoryImpl implements PacketWriterFactory {
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
@Inject @Inject
PacketWriterFactoryImpl(WriterFactory writerFactory) { PacketWriterFactoryImpl(BdfWriterFactory bdfWriterFactory) {
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
} }
public PacketWriter createPacketWriter(OutputStream out) { public PacketWriter createPacketWriter(OutputStream out) {
return new PacketWriterImpl(writerFactory, out); return new PacketWriterImpl(bdfWriterFactory, out);
} }
} }

View File

@@ -1,7 +1,7 @@
package org.briarproject.sync; package org.briarproject.sync;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.api.sync.Ack; import org.briarproject.api.sync.Ack;
import org.briarproject.api.sync.Group; import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
@@ -36,13 +36,13 @@ import static org.briarproject.api.sync.PacketTypes.TRANSPORT_UPDATE;
// This class is not thread-safe // This class is not thread-safe
class PacketWriterImpl implements PacketWriter { class PacketWriterImpl implements PacketWriter {
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
private final OutputStream out; private final OutputStream out;
private final byte[] header; private final byte[] header;
private final ByteArrayOutputStream payload; private final ByteArrayOutputStream payload;
PacketWriterImpl(WriterFactory writerFactory, OutputStream out) { PacketWriterImpl(BdfWriterFactory bdfWriterFactory, OutputStream out) {
this.writerFactory = writerFactory; this.bdfWriterFactory = bdfWriterFactory;
this.out = out; this.out = out;
header = new byte[HEADER_LENGTH]; header = new byte[HEADER_LENGTH];
header[0] = PROTOCOL_VERSION; header[0] = PROTOCOL_VERSION;
@@ -78,7 +78,7 @@ class PacketWriterImpl implements PacketWriter {
public void writeAck(Ack a) throws IOException { public void writeAck(Ack a) throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
for (MessageId m : a.getMessageIds()) w.writeRaw(m.getBytes()); for (MessageId m : a.getMessageIds()) w.writeRaw(m.getBytes());
@@ -96,7 +96,7 @@ class PacketWriterImpl implements PacketWriter {
public void writeOffer(Offer o) throws IOException { public void writeOffer(Offer o) throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
for (MessageId m : o.getMessageIds()) w.writeRaw(m.getBytes()); for (MessageId m : o.getMessageIds()) w.writeRaw(m.getBytes());
@@ -107,7 +107,7 @@ class PacketWriterImpl implements PacketWriter {
public void writeRequest(Request r) throws IOException { public void writeRequest(Request r) throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
for (MessageId m : r.getMessageIds()) w.writeRaw(m.getBytes()); for (MessageId m : r.getMessageIds()) w.writeRaw(m.getBytes());
@@ -118,7 +118,7 @@ class PacketWriterImpl implements PacketWriter {
public void writeSubscriptionAck(SubscriptionAck a) throws IOException { public void writeSubscriptionAck(SubscriptionAck a) throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeInteger(a.getVersion()); w.writeInteger(a.getVersion());
w.writeListEnd(); w.writeListEnd();
@@ -128,7 +128,7 @@ class PacketWriterImpl implements PacketWriter {
public void writeSubscriptionUpdate(SubscriptionUpdate u) public void writeSubscriptionUpdate(SubscriptionUpdate u)
throws IOException { throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
for (Group g : u.getGroups()) { for (Group g : u.getGroups()) {
@@ -145,7 +145,7 @@ class PacketWriterImpl implements PacketWriter {
public void writeTransportAck(TransportAck a) throws IOException { public void writeTransportAck(TransportAck a) throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeString(a.getId().getString()); w.writeString(a.getId().getString());
w.writeInteger(a.getVersion()); w.writeInteger(a.getVersion());
@@ -155,10 +155,10 @@ class PacketWriterImpl implements PacketWriter {
public void writeTransportUpdate(TransportUpdate u) throws IOException { public void writeTransportUpdate(TransportUpdate u) throws IOException {
assert payload.size() == 0; assert payload.size() == 0;
Writer w = writerFactory.createWriter(payload); BdfWriter w = bdfWriterFactory.createWriter(payload);
w.writeListStart(); w.writeListStart();
w.writeString(u.getId().getString()); w.writeString(u.getId().getString());
w.writeMap(u.getProperties()); w.writeDictionary(u.getProperties());
w.writeInteger(u.getVersion()); w.writeInteger(u.getVersion());
w.writeListEnd(); w.writeListEnd();
writePacket(TRANSPORT_UPDATE); writePacket(TRANSPORT_UPDATE);

View File

@@ -1,9 +1,9 @@
package org.briarproject.sync; package org.briarproject.sync;
import org.briarproject.api.FormatException; import org.briarproject.api.FormatException;
import org.briarproject.api.data.BdfReader;
import org.briarproject.api.data.Consumer; import org.briarproject.api.data.Consumer;
import org.briarproject.api.data.ObjectReader; import org.briarproject.api.data.ObjectReader;
import org.briarproject.api.data.Reader;
import org.briarproject.api.sync.Group; import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.SubscriptionUpdate; import org.briarproject.api.sync.SubscriptionUpdate;
@@ -26,7 +26,7 @@ class SubscriptionUpdateReader implements ObjectReader<SubscriptionUpdate> {
this.groupReader = groupReader; this.groupReader = groupReader;
} }
public SubscriptionUpdate readObject(Reader r) throws IOException { public SubscriptionUpdate readObject(BdfReader r) throws IOException {
// Set up the reader // Set up the reader
Consumer counting = new CountingConsumer(MAX_PAYLOAD_LENGTH); Consumer counting = new CountingConsumer(MAX_PAYLOAD_LENGTH);
r.addConsumer(counting); r.addConsumer(counting);

View File

@@ -105,8 +105,8 @@
<test name='org.briarproject.crypto.StreamDecrypterImplTest'/> <test name='org.briarproject.crypto.StreamDecrypterImplTest'/>
<test name='org.briarproject.crypto.StreamEncrypterImplTest'/> <test name='org.briarproject.crypto.StreamEncrypterImplTest'/>
<test name='org.briarproject.crypto.XSalsa20Poly1305AuthenticatedCipherTest'/> <test name='org.briarproject.crypto.XSalsa20Poly1305AuthenticatedCipherTest'/>
<test name='org.briarproject.data.ReaderImplTest'/> <test name='org.briarproject.data.BdfReaderImplTest'/>
<test name='org.briarproject.data.WriterImplTest'/> <test name='org.briarproject.data.BdfWriterImplTest'/>
<test name='org.briarproject.db.BasicH2Test'/> <test name='org.briarproject.db.BasicH2Test'/>
<test name='org.briarproject.db.DatabaseComponentImplTest'/> <test name='org.briarproject.db.DatabaseComponentImplTest'/>
<test name='org.briarproject.db.ExponentialBackoffTest'/> <test name='org.briarproject.db.ExponentialBackoffTest'/>

View File

@@ -108,7 +108,7 @@ public class LockFairnessTest extends BriarTestCase {
} }
}; };
first.start(); first.start();
// Writer // BdfWriter
Thread writer = new Thread() { Thread writer = new Thread() {
@Override @Override
public void run() { public void run() {

View File

@@ -14,10 +14,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
public class ReaderImplTest extends BriarTestCase { public class BdfReaderImplTest extends BriarTestCase {
private ByteArrayInputStream in = null; private BdfReaderImpl r = null;
private ReaderImpl r = null;
@Test @Test
public void testReadEmptyInput() throws Exception { public void testReadEmptyInput() throws Exception {
@@ -127,49 +126,6 @@ public class ReaderImplTest extends BriarTestCase {
assertTrue(r.eof()); assertTrue(r.eof());
} }
@Test
public void testIntegersMustHaveMinimalLength() throws Exception {
// INTEGER_16 could be encoded as INTEGER_8
setContents("21" + "7F" + "22" + "007F");
assertEquals(Byte.MAX_VALUE, r.readInteger());
try {
r.readInteger();
fail();
} catch (FormatException expected) {}
setContents("21" + "80" + "22" + "FF80");
assertEquals(Byte.MIN_VALUE, r.readInteger());
try {
r.readInteger();
fail();
} catch (FormatException expected) {}
// INTEGER_32 could be encoded as INTEGER_16
setContents("22" + "7FFF" + "24" + "00007FFF");
assertEquals(Short.MAX_VALUE, r.readInteger());
try {
r.readInteger();
fail();
} catch (FormatException expected) {}
setContents("22" + "8000" + "24" + "FFFF8000");
assertEquals(Short.MIN_VALUE, r.readInteger());
try {
r.readInteger();
fail();
} catch (FormatException expected) {}
// INTEGER_64 could be encoded as INTEGER_32
setContents("24" + "7FFFFFFF" + "28" + "000000007FFFFFFF");
assertEquals(Integer.MAX_VALUE, r.readInteger());
try {
r.readInteger();
fail();
} catch (FormatException expected) {}
setContents("24" + "80000000" + "28" + "FFFFFFFF80000000");
assertEquals(Integer.MIN_VALUE, r.readInteger());
try {
r.readInteger();
fail();
} catch (FormatException expected) {}
}
@Test @Test
public void testReadFloat() throws Exception { public void testReadFloat() throws Exception {
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html // http://babbage.cs.qc.edu/IEEE-754/Decimal.html
@@ -218,7 +174,9 @@ public class ReaderImplTest extends BriarTestCase {
try { try {
r.readString(2); r.readString(2);
fail(); fail();
} catch (FormatException expected) {} } catch (FormatException expected) {
// Expected
}
} }
@Test @Test
@@ -258,7 +216,9 @@ public class ReaderImplTest extends BriarTestCase {
try { try {
r.readString(Byte.MAX_VALUE); r.readString(Byte.MAX_VALUE);
fail(); fail();
} catch (FormatException expected) {} } catch (FormatException expected) {
// Expected
}
} }
@Test @Test
@@ -296,7 +256,9 @@ public class ReaderImplTest extends BriarTestCase {
try { try {
r.readString(Short.MAX_VALUE); r.readString(Short.MAX_VALUE);
fail(); fail();
} catch (FormatException expected) {} } catch (FormatException expected) {
// Expected
}
} }
@Test @Test
@@ -311,28 +273,6 @@ public class ReaderImplTest extends BriarTestCase {
assertTrue(r.eof()); assertTrue(r.eof());
} }
@Test
public void testStringsMustHaveMinimalLength() throws Exception {
// STRING_16 could be encoded as STRING_8
String longest8 = TestUtils.createRandomString(Byte.MAX_VALUE);
String long8Hex = StringUtils.toHexString(longest8.getBytes("UTF-8"));
setContents("41" + "7F" + long8Hex + "42" + "007F" + long8Hex);
assertEquals(longest8, r.readString(Integer.MAX_VALUE));
try {
r.readString(Integer.MAX_VALUE);
fail();
} catch (FormatException expected) {}
// STRING_32 could be encoded as STRING_16
String longest16 = TestUtils.createRandomString(Short.MAX_VALUE);
String long16Hex = StringUtils.toHexString(longest16.getBytes("UTF-8"));
setContents("42" + "7FFF" + long16Hex + "44" + "00007FFF" + long16Hex);
assertEquals(longest16, r.readString(Integer.MAX_VALUE));
try {
r.readString(Integer.MAX_VALUE);
fail();
} catch (FormatException expected) {}
}
@Test @Test
public void testReadRaw8() throws Exception { public void testReadRaw8() throws Exception {
byte[] longest = new byte[Byte.MAX_VALUE]; byte[] longest = new byte[Byte.MAX_VALUE];
@@ -355,7 +295,9 @@ public class ReaderImplTest extends BriarTestCase {
try { try {
r.readRaw(2); r.readRaw(2);
fail(); fail();
} catch (FormatException expected) {} } catch (FormatException expected) {
// Expected
}
} }
@Test @Test
@@ -395,7 +337,9 @@ public class ReaderImplTest extends BriarTestCase {
try { try {
r.readRaw(Byte.MAX_VALUE); r.readRaw(Byte.MAX_VALUE);
fail(); fail();
} catch (FormatException expected) {} } catch (FormatException expected) {
// Expected
}
} }
@Test @Test
@@ -433,7 +377,9 @@ public class ReaderImplTest extends BriarTestCase {
try { try {
r.readRaw(Short.MAX_VALUE); r.readRaw(Short.MAX_VALUE);
fail(); fail();
} catch (FormatException expected) {} } catch (FormatException expected) {
// Expected
}
} }
@Test @Test
@@ -448,28 +394,6 @@ public class ReaderImplTest extends BriarTestCase {
assertTrue(r.eof()); assertTrue(r.eof());
} }
@Test
public void testRawMustHaveMinimalLength() throws Exception {
// RAW_16 could be encoded as RAW_8
byte[] longest8 = new byte[Byte.MAX_VALUE];
String long8Hex = StringUtils.toHexString(longest8);
setContents("51" + "7F" + long8Hex + "52" + "007F" + long8Hex);
assertArrayEquals(longest8, r.readRaw(Integer.MAX_VALUE));
try {
r.readRaw(Integer.MAX_VALUE);
fail();
} catch (FormatException expected) {}
// RAW_32 could be encoded as RAW_16
byte[] longest16 = new byte[Short.MAX_VALUE];
String long16Hex = StringUtils.toHexString(longest16);
setContents("52" + "7FFF" + long16Hex + "54" + "00007FFF" + long16Hex);
assertArrayEquals(longest16, r.readRaw(Integer.MAX_VALUE));
try {
r.readRaw(Integer.MAX_VALUE);
fail();
} catch (FormatException expected) {}
}
@Test @Test
public void testReadList() throws Exception { public void testReadList() throws Exception {
// A list containing 1, "foo", and 128 // A list containing 1, "foo", and 128
@@ -499,44 +423,45 @@ public class ReaderImplTest extends BriarTestCase {
} }
@Test @Test
public void testReadMap() throws Exception { public void testReadDictionary() throws Exception {
// A map containing "foo" -> 123 and "bar" -> null // A dictionary containing "foo" -> 123 and "bar" -> null
setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" + setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" +
"41" + "03" + "626172" + "00" + "80"); "41" + "03" + "626172" + "00" + "80");
r.readMapStart(); r.readDictionaryStart();
assertFalse(r.hasMapEnd()); assertFalse(r.hasDictionaryEnd());
assertEquals("foo", r.readString(1000)); assertEquals("foo", r.readString(1000));
assertFalse(r.hasMapEnd()); assertFalse(r.hasDictionaryEnd());
assertEquals(123, r.readInteger()); assertEquals(123, r.readInteger());
assertFalse(r.hasMapEnd()); assertFalse(r.hasDictionaryEnd());
assertEquals("bar", r.readString(1000)); assertEquals("bar", r.readString(1000));
assertFalse(r.hasMapEnd()); assertFalse(r.hasDictionaryEnd());
assertTrue(r.hasNull()); assertTrue(r.hasNull());
r.readNull(); r.readNull();
assertTrue(r.hasMapEnd()); assertTrue(r.hasDictionaryEnd());
r.readMapEnd(); r.readDictionaryEnd();
assertTrue(r.eof()); assertTrue(r.eof());
} }
@Test @Test
public void testSkipMap() throws Exception { public void testSkipDictionary() throws Exception {
// A map containing "foo" -> 123 and "bar" -> null // A map containing "foo" -> 123 and "bar" -> null
setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" + setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" +
"41" + "03" + "626172" + "00" + "80"); "41" + "03" + "626172" + "00" + "80");
r.skipMap(); r.skipDictionary();
assertTrue(r.eof()); assertTrue(r.eof());
} }
@Test @Test
public void testSkipNestedListsAndMaps() throws Exception { public void testSkipNestedListsAndDictionaries() throws Exception {
// A list containing a map containing two empty lists // A list containing a dictionary containing "" -> an empty list
setContents("60" + "70" + "60" + "80" + "60" + "80" + "80" + "80"); setContents("60" + "70" + "4100" + "60" + "80" + "80" + "80");
r.skipList(); r.skipList();
assertTrue(r.eof()); assertTrue(r.eof());
} }
private void setContents(String hex) { private void setContents(String hex) {
in = new ByteArrayInputStream(StringUtils.fromHexString(hex)); ByteArrayInputStream in = new ByteArrayInputStream(
r = new ReaderImpl(in); StringUtils.fromHexString(hex));
r = new BdfReaderImpl(in);
} }
} }

View File

@@ -16,15 +16,15 @@ import java.util.Map;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public class WriterImplTest extends BriarTestCase { public class BdfWriterImplTest extends BriarTestCase {
private ByteArrayOutputStream out = null; private ByteArrayOutputStream out = null;
private WriterImpl w = null; private BdfWriterImpl w = null;
@Before @Before
public void setUp() { public void setUp() {
out = new ByteArrayOutputStream(); out = new ByteArrayOutputStream();
w = new WriterImpl(out); w = new BdfWriterImpl(out);
} }
@Test @Test
@@ -165,12 +165,12 @@ public class WriterImplTest extends BriarTestCase {
} }
@Test @Test
public void testWriteMap() throws IOException { public void testWriteDictionary() throws IOException {
// Use LinkedHashMap to get predictable iteration order // Use LinkedHashMap to get predictable iteration order
Map<String, Object> m = new LinkedHashMap<String, Object>(); Map<String, Object> m = new LinkedHashMap<String, Object>();
for (int i = 0; i < 4; i++) m.put(String.valueOf(i), i); for (int i = 0; i < 4; i++) m.put(String.valueOf(i), i);
w.writeMap(m); w.writeDictionary(m);
// MAP tag, keys as strings and values as integers, END tag // DICTIONARY tag, keys as strings and values as integers, END tag
checkContents("70" + "41" + "01" + "30" + "21" + "00" + checkContents("70" + "41" + "01" + "30" + "21" + "00" +
"41" + "01" + "31" + "21" + "01" + "41" + "01" + "31" + "21" + "01" +
"41" + "01" + "32" + "21" + "02" + "41" + "01" + "32" + "21" + "02" +
@@ -191,21 +191,21 @@ public class WriterImplTest extends BriarTestCase {
} }
@Test @Test
public void testWriteDelimitedMap() throws IOException { public void testWriteDelimitedDictionary() throws IOException {
w.writeMapStart(); w.writeDictionaryStart();
w.writeString("foo"); w.writeString("foo");
w.writeInteger(123); w.writeInteger(123);
w.writeString("bar"); w.writeString("bar");
w.writeNull(); w.writeNull();
w.writeMapEnd(); w.writeDictionaryEnd();
// MAP tag, "foo" as string, 123 as integer, "bar" as string, // DICTIONARY tag, "foo" as string, 123 as integer, "bar" as string,
// NULL tag, END tag // NULL tag, END tag
checkContents("70" + "41" + "03" + "666F6F" + checkContents("70" + "41" + "03" + "666F6F" +
"21" + "7B" + "41" + "03" + "626172" + "00" + "80"); "21" + "7B" + "41" + "03" + "626172" + "00" + "80");
} }
@Test @Test
public void testWriteNestedMapsAndLists() throws IOException { public void testWriteNestedDictionariesAndLists() throws IOException {
Map<String, Object> inner = new LinkedHashMap<String, Object>(); Map<String, Object> inner = new LinkedHashMap<String, Object>();
inner.put("bar", new byte[0]); inner.put("bar", new byte[0]);
List<Object> list = new ArrayList<Object>(); List<Object> list = new ArrayList<Object>();
@@ -213,9 +213,9 @@ public class WriterImplTest extends BriarTestCase {
list.add(inner); list.add(inner);
Map<String, Object> outer = new LinkedHashMap<String, Object>(); Map<String, Object> outer = new LinkedHashMap<String, Object>();
outer.put("foo", list); outer.put("foo", list);
w.writeMap(outer); w.writeDictionary(outer);
// MAP tag, "foo" as string, LIST tag, 1 as integer, MAP tag, // DICTIONARY tag, "foo" as string, LIST tag, 1 as integer,
// "bar" as string, {} as raw, END tag, END tag, END tag // DICTIONARY tag, "bar" as string, {} as raw, END tag, END tag, END tag
checkContents("70" + "41" + "03" + "666F6F" + "60" + checkContents("70" + "41" + "03" + "666F6F" + "60" +
"21" + "01" + "70" + "41" + "03" + "626172" + "51" + "00" + "21" + "01" + "70" + "41" + "03" + "626172" + "51" + "00" +
"80" + "80" + "80"); "80" + "80" + "80");

View File

@@ -6,9 +6,9 @@ import com.google.inject.Injector;
import org.briarproject.BriarTestCase; import org.briarproject.BriarTestCase;
import org.briarproject.TestUtils; import org.briarproject.TestUtils;
import org.briarproject.api.FormatException; import org.briarproject.api.FormatException;
import org.briarproject.api.data.ReaderFactory; import org.briarproject.api.data.BdfReaderFactory;
import org.briarproject.api.data.Writer; import org.briarproject.api.data.BdfWriter;
import org.briarproject.api.data.WriterFactory; import org.briarproject.api.data.BdfWriterFactory;
import org.briarproject.data.DataModule; import org.briarproject.data.DataModule;
import org.briarproject.util.ByteUtils; import org.briarproject.util.ByteUtils;
import org.junit.Test; import org.junit.Test;
@@ -30,13 +30,13 @@ public class PacketReaderImplTest extends BriarTestCase {
// FIXME: This is an integration test, not a unit test // FIXME: This is an integration test, not a unit test
private final ReaderFactory readerFactory; private final BdfReaderFactory bdfReaderFactory;
private final WriterFactory writerFactory; private final BdfWriterFactory bdfWriterFactory;
public PacketReaderImplTest() throws Exception { public PacketReaderImplTest() throws Exception {
Injector i = Guice.createInjector(new DataModule()); Injector i = Guice.createInjector(new DataModule());
readerFactory = i.getInstance(ReaderFactory.class); bdfReaderFactory = i.getInstance(BdfReaderFactory.class);
writerFactory = i.getInstance(WriterFactory.class); bdfWriterFactory = i.getInstance(BdfWriterFactory.class);
} }
@Test @Test
@@ -44,7 +44,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createAck(true); byte[] b = createAck(true);
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
try { try {
reader.readAck(); reader.readAck();
@@ -59,7 +60,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createAck(false); byte[] b = createAck(false);
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
reader.readAck(); reader.readAck();
} }
@@ -69,7 +71,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createEmptyAck(); byte[] b = createEmptyAck();
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
try { try {
reader.readAck(); reader.readAck();
@@ -84,7 +87,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createOffer(true); byte[] b = createOffer(true);
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
try { try {
reader.readOffer(); reader.readOffer();
@@ -99,7 +103,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createOffer(false); byte[] b = createOffer(false);
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
reader.readOffer(); reader.readOffer();
} }
@@ -109,7 +114,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createEmptyOffer(); byte[] b = createEmptyOffer();
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
try { try {
reader.readOffer(); reader.readOffer();
@@ -124,7 +130,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createRequest(true); byte[] b = createRequest(true);
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
try { try {
reader.readRequest(); reader.readRequest();
@@ -139,7 +146,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createRequest(false); byte[] b = createRequest(false);
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
reader.readRequest(); reader.readRequest();
} }
@@ -149,7 +157,8 @@ public class PacketReaderImplTest extends BriarTestCase {
byte[] b = createEmptyRequest(); byte[] b = createEmptyRequest();
ByteArrayInputStream in = new ByteArrayInputStream(b); ByteArrayInputStream in = new ByteArrayInputStream(b);
org.briarproject.sync.PacketReaderImpl org.briarproject.sync.PacketReaderImpl
reader = new org.briarproject.sync.PacketReaderImpl(readerFactory, null, reader = new org.briarproject.sync.PacketReaderImpl(
bdfReaderFactory, null,
null, in); null, in);
try { try {
reader.readRequest(); reader.readRequest();
@@ -162,7 +171,7 @@ public class PacketReaderImplTest extends BriarTestCase {
private byte[] createAck(boolean tooBig) throws Exception { private byte[] createAck(boolean tooBig) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(new byte[HEADER_LENGTH]); out.write(new byte[HEADER_LENGTH]);
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
while (out.size() + UNIQUE_ID_LENGTH + LIST_END_LENGTH * 2 while (out.size() + UNIQUE_ID_LENGTH + LIST_END_LENGTH * 2
@@ -182,7 +191,7 @@ public class PacketReaderImplTest extends BriarTestCase {
private byte[] createEmptyAck() throws Exception { private byte[] createEmptyAck() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(new byte[HEADER_LENGTH]); out.write(new byte[HEADER_LENGTH]);
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
w.writeListEnd(); w.writeListEnd();
@@ -196,7 +205,7 @@ public class PacketReaderImplTest extends BriarTestCase {
private byte[] createOffer(boolean tooBig) throws Exception { private byte[] createOffer(boolean tooBig) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(new byte[HEADER_LENGTH]); out.write(new byte[HEADER_LENGTH]);
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
while (out.size() + UNIQUE_ID_LENGTH + LIST_END_LENGTH * 2 while (out.size() + UNIQUE_ID_LENGTH + LIST_END_LENGTH * 2
@@ -216,7 +225,7 @@ public class PacketReaderImplTest extends BriarTestCase {
private byte[] createEmptyOffer() throws Exception { private byte[] createEmptyOffer() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(new byte[HEADER_LENGTH]); out.write(new byte[HEADER_LENGTH]);
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
w.writeListEnd(); w.writeListEnd();
@@ -230,7 +239,7 @@ public class PacketReaderImplTest extends BriarTestCase {
private byte[] createRequest(boolean tooBig) throws Exception { private byte[] createRequest(boolean tooBig) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(new byte[HEADER_LENGTH]); out.write(new byte[HEADER_LENGTH]);
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
while (out.size() + UNIQUE_ID_LENGTH + LIST_END_LENGTH * 2 while (out.size() + UNIQUE_ID_LENGTH + LIST_END_LENGTH * 2
@@ -250,7 +259,7 @@ public class PacketReaderImplTest extends BriarTestCase {
private byte[] createEmptyRequest() throws Exception { private byte[] createEmptyRequest() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(new byte[HEADER_LENGTH]); out.write(new byte[HEADER_LENGTH]);
Writer w = writerFactory.createWriter(out); BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart(); w.writeListStart();
w.writeListStart(); w.writeListStart();
w.writeListEnd(); w.writeListEnd();