Commit Graph

85 Commits

Author SHA1 Message Date
akwizgran
68b4760dfa Use a constant for the tag size. 2011-08-12 14:26:56 +02: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
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
akwizgran
e9d0021f56 Added interfaces for reading and writing packets and recognising which
contact originated an incoming connection, and an implementation of
the PacketWriter interface.
2011-08-09 16:15:25 +01:00
akwizgran
c2045296eb Associate a timestamp with every subscription, indicating the earliest
acceptable timestamp of subscribed messages. For a new subscription,
the timestamp is initialised to the current time, so a new subscriber
to a group will not immediately receive any messages. (Subscribing to
a group is therefore more like joining a mailing list than joining a
Usenet group - you only receive messages written after you joined.)

Once the database fills up and starts expiring messages, the
timestamps of subscriptions are updated so that contacts need not send
messages that would expire immediately. This is done using the
*approximate* timestamp of the oldest message in the database, to
avoid revealing the presence or absence of any particular message.
2011-08-05 13:34:58 +01:00
akwizgran
5cb4075cfd Added the ability to store transport configuration details in the
database - unlike transport properties, these are not shared with
contacts. For example, when using email as a transport, the address
for sending and receiving emails would be a transport property, while
the username and password for the email server would be transport
configuration details. Transport plugins can update their
configuration details atomically.

Also clarified the terminology for transport and subscription updates.
2011-08-04 13:41:41 +01:00
akwizgran
ec29c4d1d3 Changed the format of transport properties from (key, value) pairs to
(transport name, key, value) triples. This makes it possible for each
transport plugin to update its locally stored properties atomically.
2011-08-04 11:07:28 +01:00
akwizgran
93ee4d004e Reduced maximum public key lengths to reasonable lengths for ECDSA. 2011-08-03 21:08:09 +01:00
akwizgran
c90a18278b Allow a maximum length to be specified when reading strings or byte
arrays, check it before allocating the buffer, and always specify the
maximum length when reading untrusted data - otherwise
CountingConsumer will reject the packet, but not before we've tried to
allocate a buffer of the specified size (up to 2 GB).
2011-08-03 19:29:30 +01:00
akwizgran
7baefb3e7b Updated the transport plugin API. 2011-08-03 16:13:13 +01:00
akwizgran
6e7d5a06b2 API for batch-mode and stream-mode transport plugins. 2011-08-02 15:09:24 +01:00
akwizgran
2740b2b002 s/transport details/transport properties/g 2011-08-02 13:08:44 +01:00
akwizgran
0e48f4ba55 Listeners for local transport updates. 2011-08-02 09:44:15 +01:00
akwizgran
ff0909a0e9 Listeners for subscription changes. 2011-08-02 09:22:54 +01:00
akwizgran
cee4956b37 If no messages are added to a batch, don't call BatchWriter.finish() -
this allows the caller to avoid creating an empty packet by delaying
creation of the packet's header and trailer until something's written
to the packet's body. Changed the return semantics of
DatabaseComponent.generateBatch(ContactId, BatchWriter,
Collection<MessageId>) so that the IDs of messages considered for
inclusion in the batch but no longer sendable are also returned - this
allows the caller to remove them from the set of requested IDs.
2011-07-28 11:17:33 +01:00
akwizgran
adee3e121c Added support for registering listeners with the database that are
called when new messages are available, and a new method
hasSendableMessages(ContactId) that listeners can call to see whether
it's worth trying to create a batch.
2011-07-27 20:27:43 +01:00
akwizgran
e93fbe0b20 Implemented subscription visibility. If a subscription is not visible
to a contact, do not accept, offer, or send messages belonging to that
group to or from that contact, and do not list that group in
subscription updates sent to that contact.
2011-07-27 16:43:19 +01:00
akwizgran
b161e5ed1d Request reader and unit test. 2011-07-27 11:06:54 +01:00
akwizgran
9e78837055 Implemented OfferWriter and RequestWriter, made all the writers
reusable (though not thread-safe), and guiced the readers.
2011-07-26 21:36:55 +01:00
akwizgran
8ba5b46d59 More unit tests for DatabaseComponent. 2011-07-26 18:11:57 +01:00
akwizgran
bcf8bcbd04 More unit tests. 2011-07-26 17:48:47 +01:00
akwizgran
10edc05dff Database portion of the offer/request/transfer protocol (untested). 2011-07-26 15:40:34 +01:00
akwizgran
a86ef2142f Sign the message with the group's private key if the group is
restricted, and check the signature if it should be present.
2011-07-25 21:54:49 +01:00
akwizgran
3f61d0c3df Changed the message format to store the author and group inline - this
doesn't take a huge amount of space and allows every message to be
self-certifying.
2011-07-25 21:14:16 +01:00
akwizgran
586d1739ae Removed salt from unrestricted groups: two unrestricted groups with
the same name will now be treated as the same group (this seems more
intuitive than the alternative).
2011-07-25 20:11:32 +01:00
akwizgran
fb95565880 Use the BouncyCastle provider so we can be sure we won't get
NoSuchAlgorithmExceptions. Key generation is *slow* - I guess that's a
good sign. ;-)
2011-07-25 10:38:46 +01:00
akwizgran
c98c968b87 Removed unnecessary Raw interface. 2011-07-24 17:47:17 +01:00
akwizgran
941460e3bc Readers, writers and factories for subscription and transport updates. 2011-07-23 21:46:47 +01:00
akwizgran
65be63dc0c Moved writers into their own package, replaced public static fields in
CryptoModule with provider methods.
2011-07-23 18:50:40 +01:00
akwizgran
13f18d9e40 Found the bug, it was just a SQL syntax error. 2011-07-23 11:29:23 +01:00
akwizgran
0edcb31d64 Store group details in the database. Some tests are still failing... 2011-07-23 01:29:18 +01:00
akwizgran
de648daca5 Bundles are gone - the batch-mode and stream-mode protocols now
consist of independently encrypted and authenticated packets (Ack,
Batch, Subscriptions and Transports so far).
2011-07-22 22:19:24 +01:00
akwizgran
5d000b62f8 Removed Writer.close(). 2011-07-22 18:08:05 +01:00
akwizgran
a573e87c04 ReaderImpl now maintains either one or two bytes of lookahead,
depending on the value of the first byte, so that an object's initial
tag is included in the data seen by the ObjectReader. Digests and
signatures can therefore be calculated over objects by their readers
without any risk of ambiguity.
2011-07-22 17:39:59 +01:00
akwizgran
45b4bef348 Catch ClassCastException when the encountered type doesn't match the
expected type, and re-throw as FormatException.
2011-07-20 15:07:17 +01:00
akwizgran
30d7a0f916 Defined which protocol objects require user-defined tags. 2011-07-20 14:45:56 +01:00
akwizgran
6b61cfa1bc Factored out header reading and batch reading into separate classes
for easier testing.
2011-07-19 19:13:27 +01:00
akwizgran
fb528a85ad Nested user-defined objects (and collections of them) can now be read
by registering ObjectReaders with the Reader.
2011-07-19 17:17:45 +01:00
akwizgran
ff984c69fb Messages are no longer encoded as raw byte arrays. 2011-07-19 14:01:33 +01:00
akwizgran
30fc6c1a92 Defined some user-defined tags for protocol elements. Currently they're just adding redundancy, but in future they'll be used for parsing nested elements. 2011-07-18 17:44:18 +01:00
akwizgran
427142ae51 Read and write user-defined tags. 2011-07-18 16:46:03 +01:00
akwizgran
0bc8a31749 Cleaned up serial and protocol packages in preparation for user-defined types. 2011-07-18 14:33:41 +01:00