Commit Graph

160 Commits

Author SHA1 Message Date
akwizgran
7ef44fbab1 Updated javadoc and renamed type parameters. 2011-09-19 15:01:55 +01:00
akwizgran
22b8321376 Removed SynchronizedDatabaseComponent.
LockFairnessTest passes on Windows, Mac and Linux, so it's safe to use
ReadWriteLockDatabaseComponent on all those platforms. We can revisit
this issue for Android if necessary, but for now it's a waste of
effort to have two parallel implementations.
2011-09-19 14:54:29 +01:00
akwizgran
f6e5ef415a BadPaddingExceptions should be rethrown as RuntimeExceptions. 2011-09-19 14:53:44 +01:00
akwizgran
11cf84dedc Arrays.copyOfRange() is not available in Java 5. 2011-09-19 14:53:12 +01:00
akwizgran
7cdca62063 IOException(Throwable) constructor isn't available in Java 5. 2011-09-19 14:49:27 +01:00
akwizgran
fde354957c Timestamps may not be negative. 2011-09-16 13:20:49 +01:00
akwizgran
ad1ef4461f SynchronizedDatabaseComponent.addLocalPrivateMessage() was not
checking whether the contact was still in the DB.
2011-09-16 13:11:20 +01:00
akwizgran
43a59d9dbe Database.hasSendableMessages() should check for private messages. 2011-09-16 12:55:57 +01:00
akwizgran
5f05a7f898 Unit tests for private messages. 2011-09-16 11:33:55 +01:00
akwizgran
005e7d5207 Added a random salt to prevent ID clashes between anonymous messages. 2011-09-13 17:56:44 +01:00
akwizgran
8ec40587b2 Check for sendable private messages as well as group messages. 2011-09-13 16:15:50 +01:00
akwizgran
b78cfa6c88 More DB support for private messages - needs unit tests. 2011-09-13 15:40:33 +01:00
akwizgran
2670d7b821 DB support for private messages. 2011-09-13 15:12:36 +01:00
akwizgran
de5caca578 Basic database support for private messages. 2011-09-13 14:43:48 +01:00
akwizgran
2858c139fa Make the group field of messages optional.
Private messages have no group.
2011-09-13 14:17:22 +01:00
akwizgran
1d25b5a92e Use null instead of MessageId.NONE and AuthorId.NONE, as for other
optional fields.
2011-09-13 14:04:23 +01:00
akwizgran
70b1487140 Renamed user-defined tags "user-defined type identifiers". 2011-09-12 16:32:25 +01:00
akwizgran
64548375cc Offer IDs no longer need to be calculated or echoed in requests.
The initiator flag in the transport protocol makes this unnecessary by
linking the two sides of a stream-mode connection, making it
impossible for an attacker to replay the responder's side of a
different connection.
2011-09-12 16:21:17 +01:00
akwizgran
7ed747b2a3 Added an initiator flag (bit 31) to the IV.
The flag is used to distinguish between the initiator and responder
directions of a stream-mode connection, allowing them to use the same
connection number without risking IV reuse.

The flag is also raised for batch-mode connections, which only have
one direction.
2011-09-07 17:21:52 +01:00
akwizgran
39be97a4d6 Order sendable messages by timestamp. Also fixed some comments. 2011-09-07 15:55:03 +01:00
akwizgran
331e7e0547 Increased the maximum packet size to 1 MiB.
This should provide acceptable memory usage and database locking
granularity, while making subscription and transport updates large
enough for the incremental update issue to be kicked into the long
grass.

Removed awareness of the serialisation format from the protocol
component wherever possible, and added tests to ensure that the
constants defined in the protocol package's API are compatible with
the serialisation format.
2011-09-07 13:51:30 +01:00
akwizgran
1ac1609dc2 Renamed a couple of classes. 2011-09-07 11:30:42 +01:00
akwizgran
0a84a01235 Allow identical batches to be sent to multiple contacts. 2011-09-07 11:15:34 +01:00
akwizgran
e80ede4429 Map keys must be unique. 2011-09-07 11:04:03 +01:00
akwizgran
472dff3d61 Removed redundant frame number from header. 2011-09-01 11:11:31 +01:00
akwizgran
3b32aee6be Slightly modified ConnectionWriterImpl to write a full-size frame as
soon as possible, rather than waiting for the next write.
2011-08-19 20:10:14 +02:00
akwizgran
0132c1eff4 Fixed a typo. 2011-08-19 19:58:40 +02:00
akwizgran
4e2a74858b Writer and scheduler for fixed-rate connections (untested). 2011-08-19 17:27:29 +02:00
akwizgran
3084a6b058 Added optional padding to the frame format, so transports that are
vulnerable to traffic analysis can frame their data independently of
packet boundaries.
2011-08-19 14:47:16 +02:00
akwizgran
a59ad23e77 Removed unused code. 2011-08-19 11:21:59 +02:00
akwizgran
9dea4d0299 The word "tag" was overloaded, so from now on use "tag" for the
predefined tags in the protocol and serial components, and "IV" for
the encrypted IVs used to identify connections in the transport
component.
2011-08-19 11:15:35 +02:00
akwizgran
2411e2008b Frame the encrypted data independently of inter-packet boundaries and
authenticate each frame before parsing its contents. Each connection
starts with a tag, followed by any number of frames, each starting
with the frame number (32 bits) and payload length (16 bits), and
ending with a MAC (256 bits).

Tags have the following format: 32 bits reserved, 16 bits for the
transport ID, 32 bits for the connection number, 32 bits (set to zero
in the tag) for the frame number, and 16 bits (set to zero in the tag)
for the block number. The tag is encrypted with the tag key in
ECB mode.

Frame numbers for each connection must start from zero and must be
contiguous and strictly increasing. Each frame is encrypted with the
frame key in CTR mode, using the plaintext tag with the appropriate
frame number to initialise the counter.

The maximum frame size is 64 KiB, including header and footer. The
maximum amount of data that can be sent over a connection is 2^32
frames - roughly 2^48 bytes, or 8 terabytes, with the maximum frame
size of 64 KiB. If that isn't sufficient we can add another 16 bits to
the frame counter.
2011-08-19 01:46:51 +02:00
akwizgran
4dd303d9e1 Changed maximum packet and message sizes in preparation for new
transport format.
2011-08-18 15:14:48 +02:00
akwizgran
5e0aadd373 Moved the subscription and transport timestamps out of the contacts
table so it's not necessary to hold a write lock on the (heavily used)
contacts table to update them.
2011-08-14 14:46:12 +02:00
akwizgran
2c13e35dc4 Calculate the timestamp outside the subscription/transport update
writer - this will allow it to be saved so new connections can work
out whether they should send updates.
2011-08-14 13:36:21 +02:00
akwizgran
4497774311 Derive separate keys for each direction. 2011-08-14 12:18:16 +02:00
akwizgran
254da2da27 Removed the restriction that transport updates have to be written in
delimited form.
2011-08-14 11:41:56 +02:00
akwizgran
c2b0f0ab5a Each request packet should contain the unique ID of the offer to which
it responds.
2011-08-13 17:46:19 +02:00
akwizgran
9d25a819d1 Decoupled ProtocolReader (which belongs in the protocol component)
from PacketReader (which belongs in the transport component).
2011-08-13 14:18:16 +02:00
akwizgran
5b6fecfb43 Updated FileReadWriteTest to use the transport component for
encrypting and decrypting packets. Moved the test to the main package
since it's an integration test for several components.
2011-08-12 23:24:24 +02:00
akwizgran
a8994a3354 Don't forget to check the MAC. 2011-08-12 22:11:56 +02:00
akwizgran
0504a2d6fd Implemented PacketReader, renamed Packet{Reader,Writer}Factory in the
protocol component to Protocol{Reader,Writer}Factory.
2011-08-12 21:55:22 +02:00
akwizgran
4dcf9a70a1 Encrypt without allocating new buffers. 2011-08-12 17:35:45 +02:00
akwizgran
2c387f80b1 Packet decrypter with unit tests. Decryption is complicated by the
fact that the cipher wants to operate a block at a time even though
it's in CTR mode.
2011-08-12 17:14:58 +02:00
akwizgran
68b4760dfa Use a constant for the tag size. 2011-08-12 14:26:56 +02:00
akwizgran
f0cf825ca9 Javadoc and unit test for SharedSecret. 2011-08-12 12:57:23 +02:00
akwizgran
a789f49a39 Separated tag encoding from PacketWriterImpl, since it's also needed
by the code that recognises tags. Implemented ConnectionRecogniser
(untested).
2011-08-11 19:55:22 +01:00
akwizgran
7545a1cc8f Moved Bytes to the main package. Added a SharedSecret class to parse
encrypted secrets retrieved from the database.
2011-08-11 19:14:20 +01:00
akwizgran
df972e294d Support for decrypting shared secrets and deriving authentication and
encryption keys from them (untested).
2011-08-11 17:15:36 +01:00
akwizgran
3edfa5d1ba Call the listeners when contacts are added and removed. 2011-08-11 15:55:30 +01:00