akwizgran
cc36d9d6c3
Don't forget 8 bytes for the timestamp.
2011-09-07 13:54:19 +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
531d54c1d3
Removed unnecessary transaction commit.
2011-09-07 11:18:07 +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
478a22c8db
Removed javadocs from prototype repo (push them to the website instead).
2011-09-01 11:13:06 +01:00
akwizgran
472dff3d61
Removed redundant frame number from header.
2011-09-01 11:11:31 +01:00
akwizgran
928ae6288f
Javadocs.
2011-08-31 17:44:42 +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
7e4ff343ea
Added PaddedConnectionWriterTest to the ant buildfile.
2011-08-19 19:48:48 +02:00
akwizgran
d11f7ef824
Unit tests for PaddedConnectionWriter. Also broke some shared test
...
code out into separate classes.
2011-08-19 19:47:24 +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
7a53ea7814
Unit tests for ConnectionWriterImpl.
2011-08-19 11:50:47 +02:00
akwizgran
156bafb8a6
Unit tests for ConnectionReaderImpl.
2011-08-19 11:40:30 +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
e1b9ee247c
Integration test for the protocol component.
2011-08-13 16:56:00 +02:00
akwizgran
8853c54930
Made the lock fairness test more precise.
2011-08-13 16:25:45 +02:00
akwizgran
36fc34993d
Lock fairness test: check that fair ReentrantReadWriteLocks don't
...
allow writers to starve. If this test passes on Java 5 and 6, we can
get rid of SynchronizedDatabaseComponent and merge
ReadWriteLockDatabaseComponent with DatabaseComponentImpl.
2011-08-13 15:39:09 +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
e896b2d86d
Unit tests for ConnectionRecogniserImpl.
2011-08-12 12:26:47 +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
akwizgran
151a360587
Store shared secrets in the database (the crypto component will be
...
responsible for wrapping/unwrapping them).
2011-08-11 15:41:52 +01:00
akwizgran
07b34cfbab
Added a lock for the connectionWindows table and exposed
...
getConnectionWindow() and setConnectionWindow() through the
DatabaseComponent interface.
2011-08-11 15:19:32 +01:00
akwizgran
0e6638bad6
Retrieve the set of unseen connection numbers from a connection
...
window.
2011-08-11 13:58:11 +01:00
akwizgran
ac4521152f
Unit tests for ConnectionWindowImpl.
2011-08-11 13:37:18 +01:00
akwizgran
e0b86f1232
Moved ConnectionWindow into the transport module and implemented
...
window sliding (untested).
2011-08-11 13:22:23 +01:00
akwizgran
d5d03192e3
Basic connection window persistence.
2011-08-11 12:56:21 +01:00
akwizgran
3e913118f2
PacketWriterFactory.
2011-08-09 18:23:27 +01:00
akwizgran
f3f0c223c4
PacketWriter is implemented by two classes: PacketWriterImpl and
...
PacketEncrypter. The separation allows authentication and encryption
to be tested separately.
2011-08-09 17:50:54 +01:00